renkang
2025-01-24 d492850f1cc64ddcfaf43798af9c76c2505414fd
admin/src/views/stock/components/newMaterial.vue
@@ -9,67 +9,47 @@
            <div class="main_content">
                <el-form :model="form" label-position="top" ref="form" :rules="rules">
                    <div class="list">
                        <el-form-item label="物料编码" prop="contractId">
                            <el-input v-model="form.renterName" placeholder="不输入系统会自动编码" v-trim />
                        <el-form-item label="物料编码" prop="code">
                            <el-input v-model="form.code" placeholder="不输入系统会自动编码" v-trim />
                        </el-form-item>
                        <el-form-item label="物料名称" prop="renterName">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="物料名称" prop="name">
                            <el-input v-model="form.name" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="物料分类" prop="ywContractRoomList">
                            <el-select v-model="form.ywContractRoomList" placeholder="请选择">
                                <el-option
                                    v-for="(item, index) in houseList"
                                    :key="index"
                                    :value="item.id"
                                    :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
                            </el-select>
                        <el-form-item label="物料分类" prop="cateArr">
                            <el-cascader
                                v-model="form.cateArr"
                                :options="cateList"
                                @change="getCateVal"
                                :props="{ label: 'name', value: 'id', children: 'childCategoryList' }"
                                placeholder="请选择" />
                        </el-form-item>
                        <el-form-item label="条码" prop="costType">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="条码" prop="qrcode">
                            <el-input v-model="form.qrcode" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="品牌" prop="date">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="品牌" prop="brand">
                            <el-input v-model="form.brand" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="规格型号" prop="totleFee">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="规格型号" prop="attr">
                            <el-input v-model="form.attr" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="安全库存(下限)" prop="planPayDate">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="安全库存(下限)" prop="minStock">
                            <el-input v-model="form.minStock" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="安全库存(上限)" prop="companyId">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="安全库存(上限)" prop="maxStock">
                            <el-input v-model="form.maxStock" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="单位" prop="companyId">
                            <el-input v-model="form.renterName" placeholder="请输入" v-trim />
                        <el-form-item label="单位" prop="unitName">
                            <el-input v-model="form.unitName" placeholder="请输入" v-trim />
                        </el-form-item>
                        <el-form-item label="所属项目" prop="companyId">
                            <el-select v-model="form.ywContractRoomList" placeholder="请选择">
                                <el-option
                                    v-for="(item, index) in houseList"
                                    :key="index"
                                    :value="item.id"
                                    :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
                            </el-select>
                        </el-form-item>
                        <el-form-item label="所属房源" prop="companyId">
                            <el-select v-model="form.ywContractRoomList" placeholder="请选择">
                                <el-option
                                    v-for="(item, index) in houseList"
                                    :key="index"
                                    :value="item.id"
                                    :label="item.projectName + item.buildingName + item.floorName + item.roomName" />
                            </el-select>
                        </el-form-item>
                        <el-form-item label="物料照片" prop="companyId">
                        <el-form-item label="物料照片" prop="multifile">
                            <el-upload
                                class="upload-demo"
                                :show-file-list="false"
                                :data="uploadData"
                                :action="uploadImgUrl"
                                :file-list="fileList"
                                :data="uploadData"
                                list-type="picture-card"
                                :on-success="uploadAvatarSuccess"
                                :before-upload="beforeUpload"
                                :on-error="uploadError">
                                <el-button icon="el-icon-plus" plain>上传</el-button>
                                :on-remove="dele">
                                <i class="el-icon-plus"></i>
                            </el-upload>
                        </el-form-item>
                        <el-form-item style="width: 100%;" label="备注" prop="remark">
@@ -85,6 +65,7 @@
<script>
  import GlobalWindow from '@/components/common/GlobalWindow'
  import BaseOpera from '@/components/base/BaseOpera'
  import { fetchList } from '@/api/business/category.js'
  export default {
    name: 'newMaterial',
    components: {
@@ -92,68 +73,103 @@
    },
    extends: BaseOpera,
    data () {
      var validateCateArr = (rule, value, callback) => {
        if (value.length === 0) {
          callback(new Error('请选择物料分类'));
        } else {
          callback();
        }
      };
      return {
        form: {
          contractId: '',
          renterName: '',
          renterId: '',
          costType: '',
          type: '',
          companyId: '',
          id: null,
          code: '',
          name: '',
          parentCateId: '',
          cateId: '',
          cateArr: [],
          multifile: null,
          remark: '',
          startDate: '',
          endDate: '',
          totleFee: '',
          planPayDate: '',
          multifileList: [],
          ywContractRoomList: [],
          date: [],
          RoomName: ''
          unitName: '',
          maxStock: '',
          minStock: '',
          attr: '',
          brand: '',
          qrcode: ''
        },
        rules: [],
        loadingInstance: null,
        rules: {
          name: [
            { required: true, message: '请输入物料名称', trigger: 'blur' }
          ],
          cateArr: [
            { required: true, validator: validateCateArr, trigger: 'blur' }
          ],
          qrcode: [
            { required: true, message: '请输入条码', trigger: 'blur' }
          ]
        },
        cateList: [],
        uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch',
        fileList: [],
        uploadData: {
          folder: 'YW_CONTRACT_BILL'
        },
          folder: 'YW_MATERIAL'
        }
      }
    },
    created () {
      this.config({
        api: '/ywMaterial'
      })
    },
    methods: {
      open (title, target) {
        this.title = title
        this.fileList = []
        this.visible = true
      },
      dele (imgaddr) {
        this.form.multifileList.forEach((item, index) => {
          if (imgaddr === item.imgaddr) {
            this.form.multifileList.splice(index, 1)
        this.getCategry()
        // 新建
        if (target == null) {
          this.$nextTick(() => {
            this.$refs.form.resetFields()
            this.form[this.configData['field.id']] = null
          })
          return
        }
        // 编辑
        this.$nextTick(() => {
          for (const key in this.form) {
            this.form[key] = target[key]
          }
          if (this.form.multifile) {
            this.fileList = [
              { url: this.form.multifile.fileurlFull, ...this.form.multifile }
            ]
          }
        })
      },
      beforeUpload (file) {
        this.loadingInstance = Loading.service({
          lock: true,
          text: 'Loading',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
      getCateVal(e) {
        this.form.parentCateId = e[0]
        this.form.cateId = e[1]
      },
      getCategry() {
        fetchList({
          capacity: 1000,
          model: {
            type: 7
          },
          page: 1
        }).then(res => {
          this.cateList = res.records
        })
      },
      uploadError () {
        this.$nextTick(() => { // 以服务的方式调用的 Loading 需要异步关闭
          if (this.loadingInstance) {
            this.loadingInstance.close()
          }
        })
      dele (e) {
        this.fileList = []
        this.form.multifile = null
      },
      uploadAvatarSuccess (file) {
        this.$nextTick(() => {
          if (this.loadingInstance) {
            this.loadingInstance.close()
          }
        })
        const item = file.data[0]
        this.form.multifileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() })
        this.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname })
        this.form.multifile = { ...item, fileurl: item.imgaddr, name: item.originname }
      }
    }
  }