Explorar el Código

初步完成藏品登记单个添加和编辑

shaogen1995 hace 4 años
padre
commit
2c08126e8d

+ 6 - 0
src/apis/holding.js

@@ -33,3 +33,9 @@ export const removeOne = (id) => {
     url: `/cms/goods/remove/${id}`
   })
 }
+// 通过id获取藏品详情
+export const detailsById = (id) => {
+  return axios({
+    url: `/cms/goods/detail/${id}`
+  })
+}

+ 6 - 0
src/router/index.js

@@ -134,6 +134,12 @@ const router = new VueRouter({
           meta: { myInd: 1 },
           component: () => import('@/views/holding/holding5_add.vue')
         },
+        {
+          name: 'holding0_DiaEdit',
+          path: 'holding0_DiaEdit',
+          meta: { myInd: 1 },
+          component: () => import('@/views/holding/holding0_DiaEdit.vue')
+        },
 
         // 征集品管理
         {

+ 524 - 0
src/views/holding/holding0_DiaEdit.vue

@@ -0,0 +1,524 @@
+<template>
+  <el-dialog title="编辑藏品" :visible="dialogFormVisible" @close="cancel()">
+    <!-- 表单内容 -->
+    <el-form
+      :model="ruleForm"
+      :rules="rules"
+      ref="ruleForm"
+      label-width="120px"
+      class="demo-ruleForm"
+    >
+      <div class="row">
+        <el-form-item label="藏品名称:" prop="name">
+          <el-input v-model="ruleForm.name" placeholder="请输入"></el-input>
+        </el-form-item>
+        <el-form-item label="总登记号:" prop="registerNum">
+          <el-input
+            v-model="ruleForm.registerNum"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="编号类型:">
+          <el-select
+            v-model="ruleForm.numTypeId"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in numType"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="藏品编号:">
+          <el-input v-model="ruleForm.num" placeholder="请输入"></el-input>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="原名:">
+          <el-input
+            v-model="ruleForm.primitiveName"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="年代:" prop="age">
+          <el-input v-model="ruleForm.age" placeholder="请输入"></el-input>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="文物类别:">
+          <el-select
+            v-model="ruleForm.goodsTypeId"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in objectType"
+              :key="item.id"
+              :label="item.name"
+              :value="item.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="文物级别:">
+          <el-select
+            v-model="ruleForm.level"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option label="三级" :value="3"></el-option>
+            <el-option label="二级" :value="2"></el-option>
+            <el-option label="一级" :value="1"></el-option>
+            <el-option label="一般" :value="0"></el-option>
+            <el-option label="未定级" :value="-1"></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="文物质地:">
+          <el-select
+            v-model="ruleForm.textureType"
+            placeholder="质地类型"
+            style="width: 100%"
+          >
+            <el-option label="单一质地" :value="0"></el-option>
+            <el-option label="复合质地" :value="1"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-input
+          style="margin: 0 20px"
+          v-model="ruleForm.textureCategory"
+          placeholder="质地类别"
+        ></el-input>
+        <el-input v-model="ruleForm.texture" placeholder="质地"></el-input>
+      </div>
+      <div class="row">
+        <el-form-item label="外形尺寸:" prop="length">
+          <el-input
+            v-model="ruleForm.length"
+            placeholder="长(cm)"
+            style="width: 30%"
+          ></el-input>
+          <el-input
+            v-model="ruleForm.width"
+            placeholder="宽(cm)"
+            style="width: 30%; margin: 0 20px"
+          ></el-input>
+          <el-input
+            v-model="ruleForm.height"
+            placeholder="高(cm)"
+            style="width: 30%"
+          ></el-input>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="完残程度:">
+          <el-select
+            v-model="ruleForm.integrity"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option label="完整" :value="1"></el-option>
+            <el-option label="基本完整" :value="0"></el-option>
+            <el-option label="残缺" :value="-1"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="保存状态:">
+          <el-select
+            v-model="ruleForm.repair"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option label="已修复" :value="3"></el-option>
+            <el-option label="继续修复" :value="2"></el-option>
+            <el-option label="需要修复" :value="1"></el-option>
+            <el-option label="不需修复" :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
+      <div class="row">
+        <el-form-item label="数量类型:">
+          <el-select
+            v-model="ruleForm.amountType"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option label="一套多件" :value="1"></el-option>
+            <el-option label="单件" :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="具体数量:">
+          <el-input v-model="ruleForm.amount" placeholder="请输入"></el-input>
+        </el-form-item>
+      </div>
+
+      <div class="row">
+        <el-form-item label="质量范围:">
+          <el-select
+            v-model="ruleForm.qualityScope"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in qualityRange"
+              :key="item"
+              :label="item"
+              :value="item"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+
+        <el-form-item label="具体质量:">
+          <el-input v-model="ruleForm.quality" placeholder="请输入"></el-input>
+        </el-form-item>
+      </div>
+
+      <div class="row">
+        <el-form-item label="入藏时间范围:">
+          <el-select
+            v-model="ruleForm.checkInScope"
+            placeholder="请选择"
+            style="width: 100%"
+          >
+            <el-option
+              v-for="item in checkInScope"
+              :key="item"
+              :label="item"
+              :value="item"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="入藏年度:">
+          <el-input
+            v-model="ruleForm.checkInYear"
+            placeholder="请输入"
+          ></el-input>
+        </el-form-item>
+      </div>
+      <!-- 图片和附件 -->
+      <el-form-item label="藏品图片:">
+        <el-upload
+          class="avatar-uploader"
+          :action="baseURL + '/cms/goods/uploadImg'"
+          :headers="{
+            token,
+          }"
+          :show-file-list="false"
+          :before-upload="beforethumbUpload"
+          :on-success="upload_thumb_success"
+        >
+          <div v-if="ruleForm.thumb" class="imgdiv">
+            <img
+              style="width: 100%; height: 100%"
+              :src="baseURL + ruleForm.thumb"
+            />
+            <i
+              class="el-icon-circle-close"
+              @click.stop="ruleForm.thumb = ''"
+            ></i>
+          </div>
+          <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+        </el-upload>
+        <span>支持上传jpg,png格式,最大10M</span>
+      </el-form-item>
+      <el-form-item label="上传附件:">
+        <el-select v-model="affixVal" placeholder="请选择">
+          <el-option
+            v-for="item in affix"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+        <!-- 上传附件 -->
+        <el-upload
+          class="upload-demo"
+          :action="baseURL + `/cms/goods/upload/${affixVal}/${affixVal+'mulu'}`"
+                    :headers="{
+            token,
+          }"
+          :on-success="successFujian"
+          :on-preview="handlePreview"
+          :on-remove="handleRemove"
+          :before-remove="beforeRemove"
+          multiple
+          :on-exceed="handleExceed"
+          :file-list="fileList"
+        >
+          <el-button size="small" type="primary">点击上传</el-button>
+        </el-upload>
+      </el-form-item>
+    </el-form>
+    <!-- 表格 -->
+    <el-table
+      :header-cell-style="{ background: '#eef1f6', color: '#606266' }"
+      :data="tableData"
+      border
+      style="width: 100%"
+    >
+      <el-table-column label="缩略图" width="140">
+        <template #default>
+          <div class="smimg">
+            <img src="../../assets/img/user.png" alt="" />
+          </div>
+        </template>
+      </el-table-column>
+      <el-table-column prop="name" label="附件名称"> </el-table-column>
+      <el-table-column prop="address" label="上传时间" width="150">
+      </el-table-column>
+      <el-table-column label="操作" width="150">
+        <template #default>
+          <el-button type="text">重 传</el-button>
+          <el-button type="text">删 除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+    <div slot="footer" class="dialog-footer">
+      <el-button @click="cancel">取 消</el-button>
+      <el-button type="primary" @click="btnOK">提 交</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import axios from '@/utils/request'
+import {
+  holdingAdd,
+  getGoodsNumType,
+  getGoodsType,
+  detailsById
+} from '@/apis/holding'
+export default {
+  name: 'holding0_DiaEdit',
+  components: {},
+  props: {
+    dialogFormVisible: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      // 服务器前缀地址
+      baseURL: '',
+      token: '',
+      ruleForm: {
+        age: '', // 年代
+        amount: '', // 数量
+        amountType: 0, // 数量类型, 0:单件, 1:一套多件
+        checkInScope: '2001至今', // 入藏时间范围
+        checkInYear: '', // 入藏年底
+        dirCode: 'daliCK', // 目录码
+        fileIds: '', // 图片类型使用,文件id, 多个以逗号分隔
+        goodsTypeId: 1, // 文物类型Id
+        height: '', // 高
+        // id:'',//id, 修改时必须传,新增忽略
+        integrity: 1, // 完整度, -1:残缺,0:基本完整, 1:完整
+        // isStorage: '', // 是否入库,0:不入库, 1:入库
+        length: '', // 长
+        level: 3, // 文物级别,前端输入。 -1:未定级, 0:一般, 1:一级, 2:二级, 3:三级
+        name: '', // 标题
+        num: '', // 臧品编号
+        numTypeId: 2, // 编号类型Id
+        primitiveName: '', // 原名
+        quality: '', // 具体质量
+        qualityScope: '0.01-1kg', // 质量范围
+        registerNum: '', // 总登记号
+        repair: 3, // 保存状态(修复状态), 0:不需修复, 1:需要修复,2:继续修复, 3:已修复
+        texture: '', // 质地
+        textureCategory: '', // 质地类别
+        textureType: 0, // 质地类型,前端输入, 0:单一质地, 1:复活质地
+        thumb: '', // 缩略图url
+        width: '' // 宽
+      },
+      checkInScope: [
+        '1949.10.1前',
+        '1949.10.1-1965',
+        '1966-1976',
+        '1977-2000',
+        '2001至今'
+      ], // 入藏时间范围
+      qualityRange: [
+        '<0.01kg',
+        '0.01-1kg',
+        '1-50kg',
+        '50-100kg',
+        '100-1000kg',
+        '>1000kg'
+      ], // 质量范围
+      objectType: [], // 文物类型
+      numType: [], // 文物编号类型
+      rules: {
+        name: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        registerNum: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        age: [{ required: true, message: '不能为空', trigger: 'blur' }],
+        length: [{ required: true, message: '不能为空', trigger: 'blur' }]
+      },
+      // 上传图片和文件
+      fileList: [],
+      affixVal: 'video',
+      affix: [
+        { label: '模型', value: 'model' },
+        { label: '视频', value: 'video' },
+        { label: '图片', value: 'img' },
+        { label: '音频', value: 'audio' },
+        { label: '文档', value: 'doc' }
+      ],
+      dialogImageUrl: '',
+      dialogVisible: false,
+      disabled: false,
+      // 表格数据
+      tableData: []
+    }
+  },
+  // 监听属性 类似于data概念
+  computed: {},
+  // 监控data中的数据变化
+  watch: {},
+  // 方法集合
+  methods: {
+    // 通过id获取藏品详情--让父组件调用
+    async detailsById (myId) {
+      const res = await detailsById(myId)
+      this.ruleForm = res.data
+      // console.log(99999, res)
+    },
+
+    // 上传附件
+    successFujian (file, fileList) {
+      console.log(333333, file, fileList)
+    },
+    handleRemove (file, fileList) {
+      console.log(111111111, file, fileList)
+    },
+    handlePreview (file) {
+      console.log(222222222, file)
+    },
+    handleExceed (files, fileList) {
+      this.$message.warning(`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
+    },
+    beforeRemove (file, fileList) {
+      return this.$confirm(`确定移除 ${file.name}?`)
+    },
+    // 上传图片
+    beforethumbUpload (file) {
+      // 限制图片大小和格式
+      const sizeOk = file.size / 1024 / 1024 < 10
+      const typeOk = file.type === 'image/png' || file.type === 'image/jpeg'
+
+      return new Promise((resolve, reject) => {
+        if (!typeOk) {
+          this.$message.error('照片格式有误!')
+          reject(file)
+        } else if (!sizeOk) {
+          this.$message.error('照片大小超过10M!')
+          reject(file)
+        } else {
+          this.$message.success('上传成功')
+          resolve(file)
+        }
+      })
+    },
+    upload_thumb_success (data) {
+      this.loading = false
+      this.ruleForm.thumb = data.data.filePath
+    },
+    // 点击确定
+    async btnOK () {
+      try {
+        await this.$refs.ruleForm.validate()
+        // console.log(this.ruleForm)
+        this.ruleForm.amount = Number(this.ruleForm.amount)
+        await holdingAdd(this.ruleForm)
+        // console.log(6666, res)
+        this.$message.success('编辑成功')
+        this.cancel()
+        // 通知父组件更新界面
+        this.$emit('updateUI')
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 点击取消
+    cancel () {
+      this.$emit('update:dialogFormVisible', false)
+    }
+  },
+  created () {
+    // 获取服务器前缀地址
+    this.baseURL = axios.defaults.baseURL
+    // 获取用户token
+    this.token = localStorage.getItem('daliCK_token')
+  },
+  async mounted () {
+    // 获取文物编号类型
+    const res = await getGoodsNumType()
+    this.numType = res.data
+    // 获取文物类型
+    const res2 = await getGoodsType()
+    this.objectType = res2.data
+  },
+  beforeCreate () {}, // 生命周期 - 创建之前
+  beforeMount () {}, // 生命周期 - 挂载之前
+  beforeUpdate () {}, // 生命周期 - 更新之前
+  updated () {}, // 生命周期 - 更新之后
+  beforeDestroy () {}, // 生命周期 - 销毁之前
+  destroyed () {}, // 生命周期 - 销毁完成
+  activated () {} // 如果页面有keep-alive缓存功能,这个函数会触发
+}
+</script>
+<style lang='less' scoped>
+
+/deep/.upload-demo{
+  float: left;
+  margin-right: 30px;
+}
+/deep/.el-dialog__body {
+  overflow: auto;
+  max-height: 556px;
+}
+.row {
+  display: flex;
+  /deep/& > div {
+    flex: 1;
+  }
+}
+.smimg {
+  height: 80px;
+  img {
+    width: 100%;
+    height: 100%;
+    border: 3px solid #ccc;
+  }
+}
+/deep/.el-icon-plus {
+  border: 1px dashed #000;
+}
+.avatar-uploader .el-upload {
+  border-radius: 6px;
+  cursor: pointer;
+  position: relative;
+  overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+  border-color: #409eff;
+}
+.avatar-uploader-icon {
+  font-size: 28px;
+  color: #8c939d;
+  width: 178px;
+  height: 178px;
+  line-height: 178px;
+  text-align: center;
+}
+/deep/.el-icon-circle-close {
+  font-size: 20px;
+}
+.imgdiv {
+  max-width: 400px;
+}
+</style>

+ 2 - 0
src/views/holding/holding0_Dialog.vue

@@ -428,6 +428,8 @@ export default {
         await holdingAdd(this.ruleForm)
         // console.log(6666, res)
         this.$message.success('新增成功')
+        // 通知父组件更新界面
+        this.$emit('updateUI')
         this.cancel()
       } catch (error) {
         console.log(error)

+ 13 - 3
src/views/holding/holding0_add.vue

@@ -88,7 +88,7 @@
               </el-table-column>
               <el-table-column label="操作" width="130">
                 <template #default="{row}">
-                  <el-button type="text" @click="isShow=true">编 辑</el-button>
+                  <el-button type="text" @click="edit(row.id)">编 辑</el-button>
                   <el-button type="text" @click="deletes(row.id)">删 除</el-button>
                 </template>
               </el-table-column>
@@ -102,8 +102,10 @@
         </div>
       </div>
     </div>
-    <!-- 点击添加或者编辑出现弹窗 -->
-    <Holding0Dialog :dialogFormVisible.sync='isShow'/>
+    <!-- 点击添加出现弹窗 -->
+    <Holding0Dialog :dialogFormVisible.sync='isShow' @updateUI='getHoldingList(mydata)'/>
+    <!-- 点击编辑出现弹窗 -->
+    <Holding0DiaEdit :dialogFormVisible.sync='isShowED' ref="myDia" @updateUI='getHoldingList(mydata)'/>
   </div>
 </template>
 
@@ -112,10 +114,12 @@ import axios from '@/utils/request'
 import { getHoldingList, removeOne } from '@/apis/holding'
 import TabList from '@/components/tabLeft.vue'
 import Holding0Dialog from './holding0_Dialog.vue'
+import Holding0DiaEdit from './holding0_DiaEdit.vue'
 export default {
   name: 'HoldingAdd',
   components: {
     Holding0Dialog,
+    Holding0DiaEdit,
     TabList
   },
   data () {
@@ -133,6 +137,7 @@ export default {
         type: '' // 类型
       },
       // 控制弹出层显示隐藏
+      isShowED: false,
       isShow: false,
       // 表单数据
       fromData: {
@@ -163,6 +168,11 @@ export default {
   watch: {},
   // 方法集合
   methods: {
+    // 点击编辑
+    edit (id) {
+      this.$refs.myDia.detailsById(id)
+      this.isShowED = true
+    },
     // 点击删除单个
     async deletes (id) {
       this.$confirm('确定删除码?', '提示', {