From 373e07b3ab5bebaa08c7a48ce76cedeab37f1972 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期四, 05 六月 2025 17:50:08 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveModal.vue         |  390 ++++++++++++++++++-------
 src/views/eam/spare/EamSparePartReceiveList.vue                                      |  254 ++++++++++++++--
 src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveDetailList.vue    |  185 ++++++++++++
 src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue |   20 +
 src/views/eam/spare/modules/EamSpareParts/EamSparePartIntoModal.vue                  |   20 +
 5 files changed, 716 insertions(+), 153 deletions(-)

diff --git a/src/views/eam/spare/EamSparePartReceiveList.vue b/src/views/eam/spare/EamSparePartReceiveList.vue
index fc30b5b..80b1766 100644
--- a/src/views/eam/spare/EamSparePartReceiveList.vue
+++ b/src/views/eam/spare/EamSparePartReceiveList.vue
@@ -15,24 +15,11 @@
             :md="8"
             :sm="24"
           >
-            <a-form-item label="鍒犻櫎鏍囪">
-              <a-input
-                placeholder="璇疯緭鍏ュ垹闄ゆ爣璁�"
-                v-model="queryParam.delFlag"
-              ></a-input>
-            </a-form-item>
-          </a-col>
-          <a-col
-            :xl="6"
-            :lg="7"
-            :md="8"
-            :sm="24"
-          >
             <a-form-item label="棰嗙敤鍗曠紪鐮�">
               <a-input
                 placeholder="璇疯緭鍏ラ鐢ㄥ崟缂栫爜"
                 v-model="queryParam.receiveCode"
-              ></a-input>
+              />
             </a-form-item>
           </a-col>
           <template v-if="toggleSearchStatus">
@@ -55,24 +42,19 @@
               :md="8"
               :sm="24"
             >
-              <a-form-item label="棰嗙敤浜嬬敱">
-                <a-input
-                  placeholder="璇疯緭鍏ラ鐢ㄤ簨鐢�"
-                  v-model="queryParam.receiveReason"
-                ></a-input>
-              </a-form-item>
-            </a-col>
-            <a-col
-              :xl="6"
-              :lg="7"
-              :md="8"
-              :sm="24"
-            >
               <a-form-item label="棰嗙敤鐘舵��">
-                <a-input
+                <!-- <a-input
                   placeholder="璇疯緭鍏ラ鐢ㄧ姸鎬�"
                   v-model="queryParam.receiveStatus"
-                ></a-input>
+                ></a-input> -->
+                <j-dict-select-tag
+                  allow-clear
+                  :disabled="false"
+                  placeholder="璇烽�夋嫨棰嗙敤鐘舵��"
+                  :triggerChange="true"
+                  dictCode="receive_status"
+                  v-model="queryParam.receiveStatus"
+                />
               </a-form-item>
             </a-col>
           </template>
@@ -118,7 +100,7 @@
         type="primary"
         icon="plus"
       >鏂板</a-button>
-      <a-button
+      <!-- <a-button
         type="primary"
         icon="download"
         @click="handleExportXls('澶囧搧澶囦欢棰嗙敤鍗�')"
@@ -135,7 +117,7 @@
           type="primary"
           icon="import"
         >瀵煎叆</a-button>
-      </a-upload>
+      </a-upload> -->
       <a-dropdown v-if="selectedRowKeys.length > 0">
         <a-menu slot="overlay">
           <a-menu-item
@@ -172,16 +154,46 @@
         class="j-table-force-nowrap"
         :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
         @change="handleTableChange"
+        :customRow='clickThenSelect'
       >
 
         <span
           slot="action"
           slot-scope="text, record"
         >
-          <a @click="handleEdit(record)">缂栬緫</a>
+          <a
+            v-show="record.receiveStatus === '1'"
+            @click="handleEdit(record)"
+          >缂栬緫</a>
 
           <a-divider type="vertical" />
-          <a-dropdown>
+          <a-popconfirm
+            title="纭畾鍒犻櫎鍚�?"
+            @confirm="() => handleDelete(record.id)"
+          >
+            <a v-show="record.receiveStatus === '1'">鍒犻櫎</a>
+          </a-popconfirm>
+          <a-divider type="vertical" />
+          <a
+            v-show="record.receiveStatus === '1'"
+            @click="handleSubmit(record)"
+          >鎻愪氦</a>
+          <a-divider type="vertical" />
+          <a
+            v-show="record.receiveStatus === '2'"
+            @click="handleConfirm(record)"
+          >纭</a>
+          <a-divider type="vertical" />
+          <a
+            v-show="record.receiveStatus === '3' && record.giveBackFlag === 'yes'"
+            @click="handleReturn(record)"
+          >褰掕繕</a>
+          <a-divider type="vertical" />
+          <a
+            v-show="record.receiveStatus === '4' && record.giveBackFlag === 'yes'"
+            @click="handleReturnConfirm(record)"
+          >褰掕繕纭</a>
+          <!-- <a-dropdown>
             <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
             <a-menu slot="overlay">
               <a-menu-item>
@@ -193,10 +205,23 @@
                 </a-popconfirm>
               </a-menu-item>
             </a-menu>
-          </a-dropdown>
+          </a-dropdown> -->
         </span>
 
       </a-table>
+      <a-tabs defaultActiveKey="1">
+        <a-tab-pane
+          tab='澶囦欢棰嗙敤鏄庣粏'
+          key="1"
+        >
+          <div
+            class="table-operator"
+            style="margin:-16px"
+          >
+            <eamSparePartReceive-Detail-list :sparePartReceiveId='sparePartReceiveId' />
+          </div>
+        </a-tab-pane>
+      </a-tabs>
     </div>
     <!-- table鍖哄煙-end -->
 
@@ -211,17 +236,22 @@
 <script>
 import '@assets/less/TableExpand.less'
 import EamSparePartReceiveModal from './modules/EamSparePartReceive/EamSparePartReceiveModal.vue'
+import EamSparePartReceiveDetailList from './modules/EamSparePartReceive/EamSparePartReceiveDetailList.vue'
 import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { deleteAction, getAction, postAction } from '@api/manage'
 
 export default {
   name: "EamSparePartReceiveList",
   mixins: [JeecgListMixin],
   components: {
-    EamSparePartReceiveModal
+    EamSparePartReceiveModal,
+    EamSparePartReceiveDetailList
   },
   data() {
     return {
       description: '澶囧搧澶囦欢棰嗙敤鍗曠鐞嗛〉闈�',
+      sparePartReceiveId: "-1",
+      dataSource: [],
       // 琛ㄥご
       columns: [
         {
@@ -233,11 +263,6 @@
           customRender: function (t, r, index) {
             return parseInt(index) + 1;
           }
-        },
-        {
-          title: '鍒犻櫎鏍囪',
-          align: "center",
-          dataIndex: 'delFlag'
         },
         {
           title: '棰嗙敤鍗曠紪鐮�',
@@ -257,12 +282,12 @@
         {
           title: '棰嗙敤鐘舵��',
           align: "center",
-          dataIndex: 'receiveStatus'
+          dataIndex: 'receiveStatus_dictText'
         },
         {
-          title: '鏄惁闇�瑕佸綊杩�;鏄細瀛樺湪褰掕繕鍔ㄤ綔锛屽惁锛氱洿鎺ュ畬鎴�',
+          title: '鏄惁闇�瑕佸綊杩�',
           align: "center",
-          dataIndex: 'giveBackFlag'
+          dataIndex: 'giveBackFlag_dictText'
         },
         {
           title: '瀹℃牳浜�',
@@ -292,6 +317,10 @@
         deleteBatch: "/eam/eamSparePartReceive/deleteBatch",
         exportXlsUrl: "eam/eamSparePartReceive/exportXls",
         importExcelUrl: "eam/eamSparePartReceive/importExcel",
+        submit: "eam/eamSparePartReceive/submit",
+        confirm: "eam/eamSparePartReceive/confirm",
+        return: "eam/eamSparePartReceive/return",
+        returnConfirm: "eam/eamSparePartReceive/returnConfirm",
       },
     }
   },
@@ -302,6 +331,145 @@
   },
   methods: {
 
+    searchReset() {
+      this.queryParam = {}
+      this.onClearSelected()
+      this.loadData(1);
+    },
+    searchQuery() {
+      this.onClearSelected()
+      this.loadData(1);
+    },
+
+    clickThenSelect(record) {
+      return {
+        on: {
+          click: () => {
+            this.onSelectChange(record.id.split(','), [record])
+          }
+        }
+      }
+    },
+    onClearSelected() {
+      this.selectedRowKeys = []
+      this.selectionRows = []
+      this.sparePartReceiveId = '-1'
+    },
+    onSelectChange(selectedRowKeys, selectionRows) {
+      if (selectedRowKeys.length == 1) {
+        this.sparePartReceiveId = selectionRows[0]['id']
+      } else {
+        this.sparePartReceiveId = '-1'
+      }
+      this.selectedRowKeys = selectedRowKeys
+      this.selectionRows = selectionRows
+    },
+
+    handleSubmit(record) {
+      if (!this.url.submit) {
+        this.$message.error('璇疯缃畊rl.submit灞炴��!')
+        return
+      }
+      var that = this
+      this.$confirm({
+        title: '纭鎻愪氦',
+        content: '纭畾鎻愪氦鍚�?',
+        onOk: function () {
+          that.loading = true;
+          postAction(that.url.submit, record).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.loadData()
+            } else {
+              that.$message.warning(res.message)
+            }
+            that.loading = false
+          }).finally(() => {
+            that.loading = false;
+          });
+        }
+      })
+    },
+
+    handleConfirm(record) {
+      if (!this.url.confirm) {
+        this.$message.error('璇疯缃畊rl.confirm灞炴��!')
+        return
+      }
+      var that = this
+      this.$confirm({
+        title: '纭棰嗗彇',
+        content: '纭畾棰嗗彇澶囦欢鍚�?',
+        onOk: function () {
+          that.loading = true;
+          postAction(that.url.confirm, record).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.loadData()
+            } else {
+              that.$message.warning(res.message)
+            }
+            that.loading = false
+          }).finally(() => {
+            that.loading = false;
+          });
+        }
+      })
+    },
+
+    handleReturn(record) {
+      if (!this.url.return) {
+        this.$message.error('璇疯缃畊rl.return灞炴��!')
+        return
+      }
+      var that = this
+      this.$confirm({
+        title: '澶囦欢褰掕繕',
+        content: '纭畾褰掕繕澶囦欢鍚�?',
+        onOk: function () {
+          that.loading = true;
+          postAction(that.url.return, record).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.loadData()
+            } else {
+              that.$message.warning(res.message)
+            }
+            that.loading = false
+          }).finally(() => {
+            that.loading = false;
+          });
+        }
+      })
+    },
+
+
+    handleReturnConfirm(record) {
+      if (!this.url.returnConfirm) {
+        this.$message.error('璇疯缃畊rl.returnConfirm灞炴��!')
+        return
+      }
+      var that = this
+      this.$confirm({
+        title: '澶囦欢褰掕繕纭',
+        content: '纭畾澶囦欢褰掕繕鍚�?',
+        onOk: function () {
+          that.loading = true;
+          postAction(that.url.returnConfirm, record).then((res) => {
+            if (res.success) {
+              that.$message.success(res.message)
+              that.loadData()
+            } else {
+              that.$message.warning(res.message)
+            }
+            that.loading = false
+          }).finally(() => {
+            that.loading = false;
+          });
+        }
+      })
+    },
+
   }
 }
 </script>
diff --git a/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveDetailList.vue b/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveDetailList.vue
new file mode 100644
index 0000000..0e21cb5
--- /dev/null
+++ b/src/views/eam/spare/modules/EamSparePartReceive/EamSparePartReceiveDetailList.vue
@@ -0,0 +1,185 @@
+<template>
+  <a-card
+    :bordered="false"
+    :class="'cust-erp-sub-tab'"
+  >
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form
+        layout="inline"
+        @keyup.enter.native="searchQuery"
+      >
+        <a-row :gutter="24">
+        </a-row>
+      </a-form>
+    </div>
+    <div>
+      <a-table
+        ref="table"
+        size="middle"
+        bordered
+        rowKey="id"
+        :scroll="{x:true}"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        @change="handleTableChange"
+      >
+
+      </a-table>
+    </div>
+
+  </a-card>
+</template>
+
+<script>
+import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+import { getAction } from '@/api/manage'
+import Tooltip from 'ant-design-vue/es/tooltip'
+import { ACCESS_TOKEN } from '@/store/mutation-types'
+import Vue from 'vue'
+import { getFileAccessHttpUrl } from '@/api/manage';
+
+export default {
+  name: "EamSparePartInventoryList",
+  mixins: [JeecgListMixin],
+  components: {
+    Tooltip,
+  },
+  props: {
+    sparePartReceiveId: {
+      type: String,
+      default: '-1',
+      required: false
+    }
+  },
+  watch: {
+    sparePartReceiveId: {
+      immediate: true,
+      handler(val) {
+        if (!this.sparePartReceiveId) {
+          this.clearList()
+        } else {
+          this.queryParam['sparePartReceiveId'] = val;
+          this.loadData(1);
+        }
+      }
+    }
+  },
+  data() {
+    return {
+      // 琛ㄥご
+      columns: [
+        {
+          title: '#',
+          dataIndex: '',
+          key: 'rowIndex',
+          width: 60,
+          align: "center",
+          customRender: function (t, r, index) {
+            return parseInt(index) + 1;
+          }
+        },
+        {
+          title: '澶囦欢缂栫爜',
+          align: "center",
+          dataIndex: 'partCode'
+        },
+        {
+          title: '澶囦欢鍚嶇О',
+          align: "center",
+          dataIndex: 'partName'
+        },
+        {
+          title: '澶囦欢鍨嬪彿',
+          align: "center",
+          dataIndex: 'partModel'
+        },
+        {
+          title: '澶囦欢瑙勬牸',
+          align: "center",
+          dataIndex: 'partSpecification'
+        },
+
+        {
+          title: '棰嗙敤/褰掕繕鏁伴噺',
+          align: "center",
+          dataIndex: 'receiveNum'
+        },
+        // {
+        //   title: '鎿嶄綔',
+        //   dataIndex: 'action',
+        //   align: "center",
+        //   scopedSlots: { customRender: 'action' },
+        // }
+      ],
+      url: {
+        list: "/eam/eamSparePartReceiveDetail/list",
+        delete: "/eam/eamSparePartInventory/delete",
+        deleteBatch: "/eam/eamSparePartInventory/deleteBatch",
+        exportXlsUrl: "eam/eamSparePartInventory/exportXls",
+        importExcelUrl: "eam/eamSparePartInventory/importExcel",
+      },
+      /* 鍒嗛〉鍙傛暟 */
+      ipagination: {
+        current: 1,
+        pageSize: 20,
+        pageSizeOptions: ['5', '10', '20', '50'],
+        showTotal: (total, range) => {
+          return range[0] + '-' + range[1] + ' 鍏�' + total + '鏉�'
+        },
+        showQuickJumper: true,
+        showSizeChanger: true,
+        total: 0
+      },
+    }
+  },
+  created() {
+  },
+  computed: {
+  },
+  methods: {
+    clearList() {
+      this.dataSource = []
+      this.selectedRowKeys = []
+      this.ipagination.current = 1
+    },
+    loadData(arg) {
+      if (!this.url.list) {
+        this.$message.error("璇疯缃畊rl.list灞炴��!")
+        return
+      }
+      //鍔犺浇鏁版嵁 鑻ヤ紶鍏ュ弬鏁�1鍒欏姞杞界涓�椤电殑鍐呭
+      if (arg === 1) {
+        this.ipagination.current = 1;
+      }
+      var params = this.getQueryParams();//鏌ヨ鏉′欢
+      this.loading = true;
+      // this.originTargetKeys = [];
+      getAction(this.url.list, params).then((res) => {
+        if (res.success) {
+          // for (let i = 0; i < res.result.records.length; i++) {
+          //   let r = res.result.records[i].upload;
+          //   r.src = this.getSrc(res.result.records[i].upload);
+          // }
+          this.dataSource = res.result.records || res.result;
+          if (res.result.total) {
+            this.ipagination.total = res.result.total;
+          } else {
+            this.ipagination.total = 0;
+          }
+          //update-end---author:zhangyafei    Date:20201118  for锛氶�傞厤涓嶅垎椤电殑鏁版嵁鍒楄〃------------
+        } else {
+          this.$message.warning(res.message)
+        }
+      }).finally(() => {
+        this.loading = false
+      })
+    },
+  }
+}
+</script>
+<style scoped>
+@import '~@assets/less/common.less';
+</style>
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
diff --git a/src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue b/src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue
index 13ab68f..cdae5fe 100644
--- a/src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue
+++ b/src/views/eam/spare/modules/EamSparePartRequisition/EamSparePartRequisitionModal.vue
@@ -183,6 +183,26 @@
         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) {
diff --git a/src/views/eam/spare/modules/EamSpareParts/EamSparePartIntoModal.vue b/src/views/eam/spare/modules/EamSpareParts/EamSparePartIntoModal.vue
index 33b41a5..6b29c95 100644
--- a/src/views/eam/spare/modules/EamSpareParts/EamSparePartIntoModal.vue
+++ b/src/views/eam/spare/modules/EamSpareParts/EamSparePartIntoModal.vue
@@ -178,6 +178,26 @@
         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.sparePartId === tableData[i].sparePartId) {
+            count++;
+          }
+        });
+        // 濡傛灉閲嶅娆℃暟澶т簬1锛岃鏄庢湁閲嶅
+        if (count > 1) {
+          this.$message.warning('閫夋嫨鐨勫浠朵笉鑳介噸澶嶏紒')
+          return
+        }
+      }
       // 瑙﹀彂琛ㄥ崟楠岃瘉
       this.$refs.form.validate(valid => {
         if (valid) {

--
Gitblit v1.9.3