From 92ff846fb659c62037a32b1d8c15eae9df9d9b54 Mon Sep 17 00:00:00 2001
From: zenglf <18502938215@163.com>
Date: 星期一, 18 九月 2023 13:24:30 +0800
Subject: [PATCH] Merge branch 'develop' of http://117.34.109.166:18448/r/vue_mdc_430

---
 src/views/spare/modules/sparePartPurchaseStorage/SparePartPurchaseStorageModal.vue |  631 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 631 insertions(+), 0 deletions(-)

diff --git a/src/views/spare/modules/sparePartPurchaseStorage/SparePartPurchaseStorageModal.vue b/src/views/spare/modules/sparePartPurchaseStorage/SparePartPurchaseStorageModal.vue
new file mode 100644
index 0000000..ed23d13
--- /dev/null
+++ b/src/views/spare/modules/sparePartPurchaseStorage/SparePartPurchaseStorageModal.vue
@@ -0,0 +1,631 @@
+<template>
+  <a-modal
+    :title='title'
+    :width='1250'
+    :visible='visible'
+    :maskClosable='false'
+    @ok='handleOk'
+    cancelText='鍏抽棴'
+    @cancel='handleCancel'
+    :confirmLoading='confirmLoading'
+  >
+    <a-spin :spinning='confirmLoading'>
+      <a-form :form='form'>
+        <a-row :gutter='24'>
+          <a-col :span='24/2'>
+            <a-form-item
+              label='鍏ュ簱鍗曠紪鍙�'
+              :labelCol='labelCol'
+              :wrapperCol='wrapperCol'
+            >
+              <a-input
+                placeholder='璇疯緭鍏ュ簱鍗曠紪鍙�'
+                :disabled="true"
+                v-decorator="['num', validatorRules.num]"
+              />
+            </a-form-item>
+          </a-col>
+          <a-col :span='24/2'>
+            <a-form-item
+              label='閲囪喘閮ㄩ棬'
+              :labelCol='labelCol'
+              :wrapperCol='wrapperCol'
+            >
+
+              <a-tree-select
+                style="width: 100%"
+                :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
+                :tree-data="treeData"
+                placeholder="璇烽�夋嫨閲囪喘閮ㄩ棬"
+                tree-default-expand-all
+                v-decorator="['departId', validatorRules.departId]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter='24'>
+          <a-col :span='24/2'>
+            <a-form-item
+              label='浠撳簱'
+              :labelCol='labelCol'
+              :wrapperCol='wrapperCol'
+            >
+              <j-dict-select-tag
+                allow-clear
+                :disabled='disableSubmit'
+                :placeholder="disableSubmit?'':'璇烽�夋嫨浠撳簱'"
+                :triggerChange='true'
+                dictCode="mom_base_warehouse,name,id , del_flag!='1'"
+                v-decorator="['warehouseId', validatorRules.warehouseId]"
+                @change='(e)=>handle2Change(e)'
+              />
+            </a-form-item>
+          </a-col>
+
+          <a-col :span='24/2'>
+            <a-form-item
+              label='搴撳尯搴撲綅'
+              :labelCol='labelCol'
+              :wrapperCol='wrapperCol'
+            >
+              <j-dict-select-tag
+                allow-clear
+                :disabled='true'
+                :placeholder="disableSubmit?'':'璇烽�夋嫨搴撳尯搴撲綅'"
+                :triggerChange='true'
+                dictCode='location_manage'
+                v-decorator="['locationManage', validatorRules.locationManage]"
+              />
+            </a-form-item>
+          </a-col>
+        </a-row>
+      </a-form>
+    </a-spin>
+    <a-button
+      type='primary'
+      :style="{ marginRight: '8px',marginBottom:'8px' }"
+      :loading='confirmLoading'
+      :disabled="disableSubmit"
+      @click='selectSparePart()'
+    >澧炲姞澶囦欢淇℃伅
+    </a-button>
+    <a-table
+      ref='table'
+      bordered
+      size='middle'
+      rowKey='id'
+      :columns='columns'
+      :dataSource='dataSource'
+      :scroll="{ x: 'calc(1200px + 50%)', y: 900 }"
+    >
+      <template
+        v-for='col in columns'
+        :slot='col.dataIndex'
+        slot-scope='text, record, index'
+      >
+        <div :key='col.dataIndex'>
+          <a-select
+            v-if="col.dataIndex == 'supplierId'"
+            :value='text'
+            :options='record.suppliers'
+            @change='(e) => handleChange(e, record.key, col, index)'
+            style='width: 100%'
+            :disabled="disableSubmit"
+
+          />
+          <a-select
+            v-if="col.dataIndex == 'warehouseAreaId'"
+            :value='text'
+            :disabled="disableSubmit"
+            :options='record.warehouseAreas'
+            @change='(e) => handleChange(e, record.key, col, index)'
+            style='width: 100%'
+
+          />
+          <a-select
+            v-if="col.dataIndex == 'warehouseLocationId'"
+            :value='text'
+            :options='record.warehouseLocations'
+            @change='(e) => handleChange(e, record.key, col, index)'
+            style='width: 100%'
+            :disabled="disableSubmit"
+          />
+          <a-input-number
+            :value='text'
+            v-if="col.dataIndex == 'mainQuantity'"
+            :min='0'
+            :disabled="disableSubmit"
+            :max='record.wastageRate'
+            @change='(e)=>handleChange(e, record.key, col, index)'
+          />
+          <a-input
+            :value='text'
+            :disabled="disableSubmit"
+            v-if="col.dataIndex == 'batchNum'"
+            @change='(e)=>handleChange(e, record.key, col, index)'
+          />
+          <a-date-picker
+            :value='text'
+            :disabled="disableSubmit"
+            v-if="col.dataIndex == 'manufactureDate'"
+            format='YYYY-MM-DD'
+            @change='(e)=>handleChange(e, record.key, col, index)'
+          />
+          <!-- format="YYYY-MM-DD HH:mm:ss" -->
+        </div>
+      </template>
+
+      <span
+        slot='action'
+        slot-scope='text, record, index'
+      >
+        <a-popconfirm
+          title='纭畾鍒犻櫎鍚�?'
+          :disabled="disableSubmit"
+          @confirm='() => handleDelete(text,record, index)'
+        >
+          <a>鍒犻櫎</a>
+        </a-popconfirm>
+      </span>
+    </a-table>
+    <template slot='footer'>
+      <a-button
+        :style="{marginRight: '8px'}"
+        @click='handleCancel()'
+      >
+        鍏抽棴
+      </a-button>
+
+      <a-button
+        @click='handleOk()'
+        type='primary'
+        :disabled="disableSubmit"
+        :loading='confirmLoading'
+      >纭畾
+      </a-button>
+    </template>
+    <j-select-spare-part-modal ref='sparePartModalForm'></j-select-spare-part-modal>
+  </a-modal>
+
+</template>
+
+<script>
+import { getAction, postAction, requestPut } from '@/api/manage'
+import pick from 'lodash.pick'
+import JMultiSelectTag from '@/components/dict/JMultiSelectTag'
+import { duplicateCheck } from '@/api/api'
+import Tooltip from 'ant-design-vue/es/tooltip'
+import JSelectSparePartModal from './JSelectSparePartModal'
+
+
+export default {
+  name: 'SparePartPurchaseStorageModal',
+  components: {
+    JMultiSelectTag,
+    Tooltip,
+    JSelectSparePartModal
+
+  },
+  data() {
+    return {
+      treeData:[],
+      departs: [],
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          align: 'center',
+          customRender: function(t, r, index) {
+            return parseInt(index) + 1
+          },
+          width: 50
+        },
+        {
+          title: '澶囦欢缂栫爜',
+          align: 'center',
+          dataIndex: 'num'
+        },
+        {
+          title: '澶囦欢鍚嶇О',
+          align: 'center',
+          dataIndex: 'name'
+        },
+        {
+          title: '鍨嬪彿',
+          align: 'center',
+          dataIndex: 'model'
+        },
+        {
+          title: '瑙勬牸',
+          align: 'center',
+          dataIndex: 'specification'
+        },
+        {
+          title: '鎵规鍙�',
+          align: 'center',
+          dataIndex: 'batchNum',
+          scopedSlots: { customRender: 'batchNum' }
+        },
+        {
+          title: '鍒堕�犲晢',
+          align: 'center',
+          dataIndex: 'constructorName'
+        },
+        {
+          title: '渚涘簲鍟�',
+          align: 'center',
+          dataIndex: 'supplierId',
+          scopedSlots: { customRender: 'supplierId' }
+        },
+        {
+          title: '搴撳尯',
+          align: 'center',
+          dataIndex: 'warehouseAreaId',
+          scopedSlots: { customRender: 'warehouseAreaId' }
+        },
+        {
+          title: '搴撲綅',
+          align: 'center',
+          dataIndex: 'warehouseLocationId',
+          scopedSlots: { customRender: 'warehouseLocationId' }
+        },
+        {
+          title: '鍑哄巶鏃ユ湡',
+          align: 'center',
+          dataIndex: 'manufactureDate',
+          scopedSlots: { customRender: 'manufactureDate' }
+        },
+        {
+          title: '鍗曚綅',
+          align: 'center',
+          dataIndex: 'mainUnitName'
+        },
+        {
+          title: '鏁伴噺',
+          align: 'center',
+          dataIndex: 'mainQuantity',
+          scopedSlots: { customRender: 'mainQuantity' }
+        },
+        /* {
+          title: '杈呭崟浣�',
+          align: 'center',
+          dataIndex: 'auxiliaryUnitName'
+        },
+        {
+          title: '杈呮暟閲�',
+          align: 'center',
+          dataIndex: 'auxiliaryQuantity'
+        }, */
+        {
+          title: '鎿嶄綔',
+          align: 'center',
+          dataIndex: 'action',
+          fixed: 'right',
+          width: 100,
+          scopedSlots: {
+            customRender: 'action'
+          }
+        }
+      ],
+      title: '鎿嶄綔',
+      visible: false,
+      disableSubmit: false,
+      codeDisable: true,
+      model: {},
+      suppliers: [],
+      warehouseAreas: [],
+      warehouseLocations: [],
+      warehouseId: '',
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 5 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 16 }
+      },
+      confirmLoading: false,
+      form: this.$form.createForm(this),
+      validatorRules: {
+        num: {
+          rules: [
+            { required: true, message: '璇疯緭鍏ュ叆搴撳崟缂栧彿!' }
+          ]
+        },
+        departId: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨閮ㄩ棬!' }
+          ]
+        },
+        warehouseId: {
+          rules: [
+            { required: true, message: '璇烽�夋嫨浠撳簱!' }
+            // { validator: this.validateEquipmentId },
+          ]
+        }
+      },
+      url: {
+        getSysDeparts: "/eam/equipment/getSysDeparts",
+        add: '/spare/sparePartPurchaseStorage/add',
+        edit: '/spare/sparePartPurchaseStorage/edit',
+        loadOptions: '/sys/sysDepart/loadDepartTreeOptions',
+        getSuppliers: '/spare/sparePartPurchaseStorageDeatil/getSuppliers',
+        getWarehouseAreas: '/spare/sparePartPurchaseStorageDeatil/getWarehouseAreas',
+        getWarehouseLocations: '/spare/sparePartPurchaseStorageDeatil/getWarehouseLocations',
+        getWarehouses: '/base/warehouse/queryById',
+        getNum: '/eam/sysIdentity/getNumNew',
+      },
+
+      dataSource: []
+    }
+  },
+
+
+  mounted() {
+    this.$bus.$on('selectionRows', (data) => {
+      for (let i = 0; i < data.length; i++) {
+        this.dataSource.push({
+          id: data[i].id,
+          sparePartId: data[i].id,
+          num: data[i].num,
+          name: data[i].name,
+          specification: data[i].specification,
+          model: data[i].model,
+          mainUnitId: data[i].mainUnitId,
+          mainUnitName: data[i].mainUnitId_dictText,
+       /*    auxiliaryUnitId: data[i].auxiliaryUnitId,
+          auxiliaryUnitName: data[i].auxiliaryUnitId_dictText,
+          conversionRatio: data[i].conversionRatio, */
+          constructorId: data[i].constructorId,
+          constructorName: data[i].constructorId_dictText,
+          suppliers: this.suppliers,
+          warehouseAreas: this.warehouseAreas,
+          warehouseLocations: this.warehouseLocations
+        })
+      }
+    })
+  },
+
+  created() {},
+  methods: {
+    getSysDeparts() {
+      getAction(this.url.getSysDeparts).then((res) => {
+        if (res.success) {
+          this.departs = res.result
+        }
+      })
+    },
+
+    //閫夋嫨澶囦欢淇℃伅
+    selectSparePart: function() {
+      let ids = []
+      for (let i = 0; i < this.dataSource.length; i++) {
+        ids.push(this.dataSource[i].sparePartId)
+      }
+      this.$refs.sparePartModalForm.showModals(ids)
+      this.$refs.sparePartModalForm.title = '閫夋嫨澶囦欢淇℃伅'
+      this.$refs.sparePartModalForm.disableSubmit = false
+    },
+
+    add() {
+      this.edit({ sparePartPurchaseStorageDeatilList: [] })
+    },
+
+    edit(record) {
+      let that = this
+      that.getSuppliers()
+      that.dataSource = []
+      that.form.resetFields()
+      that.model = Object.assign({}, record)
+      that.visible = true
+      that.initOptions();
+      if (record.sparePartPurchaseStorageDeatilList != undefined) {
+        const temp = [...record.sparePartPurchaseStorageDeatilList]
+        that.dataSource = temp
+      }
+      that.$nextTick(() => {
+        that.form.setFieldsValue(pick(that.model, 'num', 'departId', 'warehouseId', 'locationManage'))
+      })
+      if (record.id) {
+        this.codeDisable = true
+      } else {
+        this.codeDisable = false
+        this.$nextTick(() => {
+          getAction(this.url.getNum, { type: 'SparePart', length: '4' }).then((res) => {
+            if (res.success) {
+              this.form.setFieldsValue({ num: res.message });
+            }
+          })
+        });
+      }
+    },
+    initOptions() {
+      getAction(this.url.loadOptions).then(res => {
+        if (res.success) {
+          this.treeData = res.result
+        } else {
+          this.$message.warning(res.message)
+        }
+      })
+    },
+    close() {
+      this.$emit('close')
+      this.visible = false
+    },
+
+    handleCancel() {
+      this.close()
+    },
+    handleOk() {
+      const that = this
+
+      //瑙﹀彂琛ㄥ崟楠岃瘉
+      this.form.validateFields((err, values) => {
+        if (!err) {
+          that.confirmLoading = true
+          let formData = Object.assign(this.model, values)
+          formData.sparePartPurchaseStorageDetails = that.dataSource
+          if (that.dataSource.length ===0){
+            that.confirmLoading = false
+            that.$message.warning("璇锋坊鍔犳槑缁�")
+            return
+          }
+            let obj
+            if (!this.model.id) {
+              obj = postAction(this.url.add, formData)
+            } else {
+              obj = requestPut(this.url.edit, formData, { id: this.model.id })
+            }
+            obj.then((res) => {
+              if (res.success) {
+                that.$message.success(res.message)
+                that.$emit('ok')
+              } else {
+                that.$message.warning(res.message)
+              }
+            }).finally(() => {
+              that.confirmLoading = false
+              that.close()
+            })
+
+        }
+
+      })
+    },
+
+
+    handleDelete(text, record, index) {
+      this.dataSource.splice(index, 1)
+    },
+
+    getSuppliers() {
+      getAction(this.url.getSuppliers).then((res) => {
+        if (res.success) {
+          this.suppliers = res.result
+        }
+      })
+    },
+
+    handleChange(value, key, column, index) {
+      let that = this
+      const temp = [...that.dataSource]
+      const target = temp.filter(item => key === item.key)[index]
+      if (target) {
+        if (column.dataIndex == 'batchNum') {
+          target[column.dataIndex] = value.target.value
+        } else if (column.dataIndex == 'mainQuantity') {
+          target[column.dataIndex] = value
+          target['auxiliaryQuantity'] = value * target.conversionRatio
+        } else if (column.dataIndex == 'manufactureDate') {
+          target[column.dataIndex] = value
+        } else if (column.dataIndex == 'supplierId') {
+          target[column.dataIndex] = value
+        } else if (column.dataIndex == 'warehouseAreaId') {
+          target[column.dataIndex] = value
+          getAction(this.url.getWarehouseLocations, {
+            warehouseId: this.warehouseId,
+            warehouseAreaId: value
+          }).then((res) => {
+            if (res.success) {
+              this.warehouseLocations = res.result
+              target['warehouseLocations'] = []
+              target['warehouseLocationId'] = ''
+              target['warehouseLocations'] = res.result
+            }
+          })
+        } else if (column.dataIndex == 'warehouseLocationId') {
+          target[column.dataIndex] = value
+        }
+
+        //鏄剧ず甯﹁繃鏉ョ殑鏁版嵁
+        that.dataSource = temp
+      }
+    },
+
+    handle2Change(val) {
+      this.warehouseId = val
+      const temp = [...this.dataSource]
+      getAction(this.url.getWarehouses, { id: val }).then((res) => {
+        if (res.success) {
+          this.form.setFieldsValue({ 'locationManage': res.result.locationManage })
+          let tt = res.result.locationManage
+          if (tt === '2' || tt === '4') {
+            getAction(this.url.getWarehouseAreas, { warehouseId: val }).then((res) => {
+              if (res.success) {
+                this.warehouseAreas = res.result
+                for (let i = 0; i < temp.length; i++) {
+                  let record = temp[i]
+                  record.warehouseAreas = []
+                  record.warehouseAreaId = ''
+                  record.warehouseAreas = res.result
+
+                  record.warehouseLocations = []
+                  record.warehouseLocationId = ''
+                }
+              }
+            })
+          }
+          if (tt === '3') {
+            getAction(this.url.getWarehouseLocations, { warehouseId: val, warehouseAreaId: '' }).then((res) => {
+              if (res.success) {
+                this.warehouseLocations = res.result
+                for (let i = 0; i < temp.length; i++) {
+                  let record = temp[i]
+                  record.warehouseLocations = []
+                  record.warehouseLocationId = ''
+                  record.warehouseLocations = res.result
+
+                  record.warehouseAreas = []
+                  record.warehouseAreaId = ''
+                }
+              }
+            })
+          }
+          if (tt === '1') {
+            for (let i = 0; i < temp.length; i++) {
+              let record = temp[i]
+              record.warehouseLocations = []
+              record.warehouseLocationId = ''
+              record.warehouseAreas = []
+              record.warehouseAreaId = ''
+            }
+          }
+        }
+      })
+
+
+    }
+
+  }
+}
+</script>
+
+<style lang='less' scoped>
+/deep/ .frozenRowClass {
+  color: #c9c9c9;
+}
+
+.fontweight {
+  font-weight: bold;
+}
+
+.ant-btn {
+  padding: 0 10px;
+  margin-left: 3px;
+}
+
+.ant-form-item-control {
+  line-height: 0px;
+}
+
+/** 涓昏〃鍗曡闂磋窛 */
+.ant-form .ant-form-item {
+  margin-bottom: 10px;
+}
+
+/** Tab椤甸潰琛岄棿璺� */
+.ant-tabs-content .ant-form-item {
+  margin-bottom: 0px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3