From d53fc70e109dc36794cb592a228f96e7181755e2 Mon Sep 17 00:00:00 2001
From: qushaowei <qushaowei@163.com>
Date: 星期四, 05 六月 2025 17:46:17 +0800
Subject: [PATCH] 备件借用归还

---
 src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue |  390 ++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 280 insertions(+), 110 deletions(-)

diff --git a/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue b/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue
index e895e2d..1c5e9e1 100644
--- a/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue
+++ b/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue
@@ -1,135 +1,305 @@
 <template>
   <j-modal
     :title="title"
-    :width="800"
+    :width="1000"
     :visible="visible"
     :confirmLoading="confirmLoading"
     switchFullscreen
+    centered
+    :mask-closable="false"
     @ok="handleOk"
     @cancel="handleCancel"
-    cancelText="鍏抽棴">
+    cancelText="鍏抽棴"
+  >
 
-    <a-spin :spinning="confirmLoading">
-      <a-form-model ref="form" :model="model" :rules="validatorRules">
+    <a-spin :spinning="spinning">
+      <a-form-model
+        ref="form"
+        :model="model"
+        :rules="validatorRules"
+      >
+        <!-- :labelCol="labelCol"
+        :wrapperCol="wrapperCol" -->
+        <a-row :gutter="24">
+          <a-col :span="12">
+            <a-form-model-item
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="receiveCode"
+              label="璇疯喘鍗曠紪鐮�"
+            >
+              <a-input
+                placeholder="璇疯喘鍗曠紪鐮佽嚜鍔ㄧ敓鎴�"
+                v-model="model.receiveCode"
+                :disabled="true"
+              />
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item
+              :labelCol="labelCol"
+              :wrapperCol="wrapperCol"
+              prop="giveBackFlag"
+              label="鏄惁闇�瑕佸綊杩�"
+            >
+              <j-dict-select-tag
+                allow-clear
+                :disabled="false"
+                placeholder="璇烽�夋嫨鏄惁闇�瑕佸綊杩�"
+                :triggerChange="true"
+                dictCode="give_back_flag"
+                v-model="model.giveBackFlag"
+              />
+            </a-form-model-item>
+          </a-col>
 
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="delFlag" label="鍒犻櫎鏍囪">
-          <a-input-number v-model="model.delFlag"/>
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiveCode" label="棰嗙敤鍗曠紪鐮�">
-          <a-input placeholder="璇疯緭鍏ラ鐢ㄥ崟缂栫爜" v-model="model.receiveCode" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiveUser" label="棰嗙敤浜�">
-          <a-input placeholder="璇疯緭鍏ラ鐢ㄤ汉" v-model="model.receiveUser" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiveReason" label="棰嗙敤浜嬬敱">
-          <a-input placeholder="璇疯緭鍏ラ鐢ㄤ簨鐢�" v-model="model.receiveReason" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="receiveStatus" label="棰嗙敤鐘舵��">
-          <a-input placeholder="璇疯緭鍏ラ鐢ㄧ姸鎬�" v-model="model.receiveStatus" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="giveBackFlag" label="鏄惁闇�瑕佸綊杩�;鏄細瀛樺湪褰掕繕鍔ㄤ綔锛屽惁锛氱洿鎺ュ畬鎴�">
-          <a-input placeholder="璇疯緭鍏ユ槸鍚﹂渶瑕佸綊杩�;鏄細瀛樺湪褰掕繕鍔ㄤ綔锛屽惁锛氱洿鎺ュ畬鎴�" v-model="model.giveBackFlag" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalUser" label="瀹℃牳浜�">
-          <a-input placeholder="璇疯緭鍏ュ鏍镐汉" v-model="model.approvalUser" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="approvalTime" label="瀹℃牳鏃堕棿">
-          <a-input placeholder="璇疯緭鍏ュ鏍告椂闂�" v-model="model.approvalTime" />
-        </a-form-model-item>
-        <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark" label="澶囨敞">
-          <a-input placeholder="璇疯緭鍏ュ娉�" v-model="model.remark" />
-        </a-form-model-item>
-
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-model-item
+              :labelCol="{xs: { span: 24 }, sm: { span: 3 }}"
+              :wrapperCol="{xs: { span: 24 },sm: { span: 21 }}"
+              prop="receiveReason"
+              label="棰嗙敤浜嬬敱"
+            >
+              <a-textarea
+                placeholder="璇疯緭鍏ラ鐢ㄤ簨鐢�"
+                v-model="model.receiveReason"
+              />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <a-col :span="24">
+            <a-form-model-item
+              :labelCol="{xs: { span: 24 }, sm: { span: 3 }}"
+              :wrapperCol="{xs: { span: 24 },sm: { span: 21 }}"
+              prop="remark"
+              label="澶囨敞"
+            >
+              <a-textarea
+                placeholder="璇疯緭鍏ュ娉�"
+                v-model="model.remark"
+              />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row :gutter="24">
+          <j-vxe-table
+            ref="editableDetailTable"
+            :rowNumber="true"
+            :rowSelection="true"
+            :bordered="true"
+            :alwaysEdit="true"
+            :toolbar="true"
+            keep-source
+            :height="300"
+            :loading="detail.loading"
+            :dataSource="detail.dataSource"
+            :columns="detail.columns"
+            style="margin-top: 8px;"
+          />
+        </a-row>
       </a-form-model>
     </a-spin>
   </j-modal>
 </template>
 
 <script>
-  import { httpAction } from '@api/manage'
-  import moment from "moment"
+import { getAction, httpAction } from '@/api/manage'
+import { JVxeTableModelMixin } from '@/mixins/JVxeTableModelMixin.js'
+import { JVXETypes } from '@/components/jeecg/JVxeTable'
 
-  export default {
-    name: "EamSparePartReceiveModal",
-    data () {
-      return {
-        title:"鎿嶄綔",
-        visible: false,
-        model: {},
-        labelCol: {
-          xs: { span: 24 },
-          sm: { span: 5 },
-        },
-        wrapperCol: {
-          xs: { span: 24 },
-          sm: { span: 16 },
-        },
+export default {
+  name: 'EamSparePartReceiveModal',
+  mixins: [JVxeTableModelMixin],
+  components: {},
+  data() {
+    return {
+      title: '鎿嶄綔',
+      visible: false,
+      model: {},
+      labelCol: {
+        xs: { span: 24 },
+        sm: { span: 6 }
+      },
+      wrapperCol: {
+        xs: { span: 24 },
+        sm: { span: 18 }
+      },
+      confirmLoading: false,
+      spinning: false,
+      disabled: false,
+      validatorRules: {
+        giveBackFlag: [
+          { required: true, message: '璇烽�夋嫨褰掕繕鏉′欢锛�' }
+        ]
+      },
+      url: {
+        add: '/eam/eamSparePartReceive/add',
+        edit: '/eam/eamSparePartReceive/edit',
+        // add: "/eam/eamSparePartRequisition/add",
+        // edit: "/eam/eamSparePartRequisition/edit",
+        getDetails: "/eam/eamSparePartRequisitionDetail/list",
+        generateRequisitionCode: "sys/sysBusinessCodeRule/generateBusinessCodeSeq"
+      },
+      detail: {
+        loading: false,
+        dataSource: [],
+        columns: [
+          {
+            title: '澶囦欢',
+            key: 'partId',
+            type: JVXETypes.select,
+            width: '30%',
+            align: 'center',
+            dictCode: 'eam_spare_parts,part_name,id, del_flag!=\'1\'',
+            validateRules: [
+              { required: true, message: '澶囦欢涓嶈兘涓虹┖锛�' },
+            ],
+          },
+          {
+            title: '棰嗙敤鏁伴噺',
+            key: 'receiveNum',
+            type: JVXETypes.inputNumber,
+            width: '30%',
+            align: 'center',
+            validateRules: [
+              { required: true, message: '鏁伴噺涓嶈兘涓虹┖锛�' },
+            ]
+          },
 
-        confirmLoading: false,
-        validatorRules:{
-        },
-        url: {
-          add: "/eam/eamSparePartReceive/add",
-          edit: "/eam/eamSparePartReceive/edit",
-        },
+        ]
+      }
+    }
+  },
+  created() {
+  },
+  methods: {
+    add() {
+
+      const that = this
+      this.visible = true;
+      let params = {
+        businessCode: "SparePartReceive"
+      }
+      getAction(that.url.generateRequisitionCode, params).then((res) => {
+        if (res.success) {
+          this.model = {
+            receiveCode: res.result
+          }
+        } else {
+          that.$message.warning(res.message);
+        }
+      })
+      //鍒濆鍖栭粯璁ゅ��
+      that.edit(this.model);
+    },
+    edit(record) {
+      this.model = Object.assign({}, record);
+      this.detail.dataSource = record.sparePartReceiveDetails
+      this.visible = true;
+    },
+
+    async handleOk() {
+      const that = this
+      let errMap = await that.$refs.editableDetailTable.validateTable()
+      if (errMap) {
+        this.$message.warning('鏁版嵁鏍¢獙澶辫触锛�')
+        return
+      }
+      let tableData = that.$refs.editableDetailTable.getTableData()
+      if (tableData.length == 0) {
+        this.$message.warning('璇烽�夋嫨澶囦欢棰嗙敤淇℃伅锛�')
+        return
+      }
+
+      for (var i = 0; i < tableData.length; i++) {
+        let count = 0;
+        tableData.forEach(row => {
+          if (row.partId === tableData[i].partId) {
+            count++;
+          }
+        });
+        // 濡傛灉閲嶅娆℃暟澶т簬1锛岃鏄庢湁閲嶅
+        if (count > 1) {
+          this.$message.warning('閫夋嫨鐨勫浠朵笉鑳介噸澶嶏紒')
+          return
+        }
+      }
+
+
+      // 瑙﹀彂琛ㄥ崟楠岃瘉
+      this.$refs.form.validate(valid => {
+        if (valid) {
+          let tableData = that.$refs.editableDetailTable.getTableData()
+          let removeData = that.$refs.editableDetailTable.getDeleteData()
+          that.model.sparePartReceiveDetails = [...tableData]
+          that.model.removeDetailList = [...removeData]
+
+          that.confirmLoading = that.spinning = true
+          let httpurl = ''
+          let method = ''
+          if (!this.model.id) {
+            httpurl += this.url.add
+            method = 'post'
+          } else {
+            httpurl += this.url.edit
+            method = 'put'
+          }
+          httpAction(httpurl, this.model, method).then((res) => {
+
+            if (res.success) {
+              that.$message.success(res.message)
+              that.$emit('ok')
+              that.close()
+            } else {
+              that.$message.warning(res.message)
+            }
+          }).finally(() => {
+            that.confirmLoading = that.spinning = false
+          })
+        } else {
+          return false
+        }
+      })
+    },
+
+
+
+    handleCancel() {
+      this.close()
+    },
+
+    close() {
+      this.$emit('close')
+      this.visible = false
+      this.$refs.form.clearValidate()
+    },
+    checkUniqueName(rule, value, callback) {
+
+      // if (!value) {
+      //   return callback(); // 绌哄�肩敱required瑙勫垯鏍¢獙
+      // }
+
+      // 鑾峰彇褰撳墠琛ㄦ牸鏁版嵁
+      let tableData = this.$refs.editableDetailTable.getTableData()
+      // 璁$畻閲嶅娆℃暟锛堜笉鍖呮嫭褰撳墠琛岋級
+      let count = 0;
+      tableData.forEach(row => {
+        if (row.partId === rule.cellValue) {
+          count++;
+        }
+      });
+      // 濡傛灉閲嶅娆℃暟澶т簬1锛岃鏄庢湁閲嶅
+      if (count > 1) {
+        this.$message.warning('閫夋嫨鐨勫浠朵笉鑳介噸澶嶏紒')
+        return
       }
     },
-    created () {
-    },
-    methods: {
-      add () {
-        //鍒濆鍖栭粯璁ゅ��
-        this.edit({});
-      },
-      edit (record) {
-        this.model = Object.assign({}, record);
-        this.visible = true;
-      },
-      close () {
-        this.$emit('close');
-        this.visible = false;
-        this.$refs.form.clearValidate();
-      },
-      handleOk () {
-        const that = this;
-        // 瑙﹀彂琛ㄥ崟楠岃瘉
-         this.$refs.form.validate(valid => {
-          if (valid) {
-            that.confirmLoading = true;
-            let httpurl = '';
-            let method = '';
-            if(!this.model.id){
-              httpurl+=this.url.add;
-              method = 'post';
-            }else{
-              httpurl+=this.url.edit;
-               method = 'put';
-            }
-            httpAction(httpurl,this.model,method).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();
-            })
-          }else{
-             return false;
-          }
-        })
-      },
-      handleCancel () {
-        this.close()
-      },
-
-
-    }
   }
+}
 </script>
 
 <style lang="less" scoped>
-
 </style>
\ No newline at end of file

--
Gitblit v1.9.3