From 6e3153f560b32a31caf930ba0338daf238d6bd6a Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期四, 08 五月 2025 17:49:43 +0800
Subject: [PATCH] 工具管理-库位货架管理页面开发、仓库管理页面优化

---
 src/views/tms/modules/GoodsShelvesModal.vue |   66 +++++
 src/views/tms/WarehouseList.vue             |   84 +++---
 src/views/tms/GoodsShelvesList.vue          |  305 +++++++++++++++++++++++++
 src/views/tms/modules/WarehouseForm.vue     |   30 ++
 src/views/tms/GoodsShelves.vue              |   36 +++
 src/views/tms/modules/GoodsShelvesForm.vue  |  164 +++++++++++++
 src/views/tms/WarehouseTree.vue             |    2 
 7 files changed, 640 insertions(+), 47 deletions(-)

diff --git a/src/views/tms/GoodsShelves.vue b/src/views/tms/GoodsShelves.vue
new file mode 100644
index 0000000..68c5002
--- /dev/null
+++ b/src/views/tms/GoodsShelves.vue
@@ -0,0 +1,36 @@
+<template>
+  <a-card :bordered="false">
+    <a-row type="flex" :gutter="16">
+      <a-col :md="5">
+        <WarehouseTree/>
+      </a-col>
+      <a-col :md="19">
+        <GoodsShelvesList/>
+      </a-col>
+    </a-row>
+
+  </a-card>
+</template>
+
+<script>
+  import GoodsShelvesList from './GoodsShelvesList.vue'
+  import WarehouseTree from './WarehouseTree.vue'
+
+  export default {
+    name: 'GoodsShelves',
+    components: {
+      GoodsShelvesList,
+      WarehouseTree
+    },
+    data() {
+      return {}
+    },
+    methods: {}
+  }
+</script>
+
+<style scoped lang="less">
+  /deep/ .ant-card-body {
+    padding: 8px;
+  }
+</style>
\ No newline at end of file
diff --git a/src/views/tms/GoodsShelvesList.vue b/src/views/tms/GoodsShelvesList.vue
new file mode 100644
index 0000000..d7f6570
--- /dev/null
+++ b/src/views/tms/GoodsShelvesList.vue
@@ -0,0 +1,305 @@
+<template>
+  <a-card :bordered="false">
+    <!-- 鏌ヨ鍖哄煙 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="searchQuery">
+        <a-row :gutter="24">
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item label="浠撳簱鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input
+                placeholder="璇疯緭鍏ヤ粨搴撳悕绉�"
+                v-model="queryParam.warehouseName"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item label="搴撲綅鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input
+                placeholder="璇疯緭鍏ュ簱浣嶅彿"
+                v-model="queryParam.locationCode"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="6"
+            :sm="8"
+          >
+            <a-form-item label="璐ф灦缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input
+                placeholder="璇疯緭鍏ヨ揣鏋剁紪鍙�"
+                v-model="queryParam.shelfNumber"
+              ></a-input>
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="7"
+            :sm="8"
+          >
+            <a-form-item label="寮�濮嬫椂闂�" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-date-picker
+                show-time
+                placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
+                format="YYYY-MM-DD HH:mm"
+                valueFormat="YYYY-MM-DD HH:mm"
+                v-model="queryParam.beginTime"
+              ></a-date-picker>
+              <!-- :triggerChange="false" -->
+            </a-form-item>
+          </a-col>
+          <a-col
+            :md="7"
+            :sm="8"
+          >
+            <a-form-item label="缁撴潫鏃堕棿" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-date-picker
+                show-time
+                placeholder="璇烽�夋嫨缁撴潫鏃堕棿"
+                format="YYYY-MM-DD HH:mm"
+                valueFormat="YYYY-MM-DD HH:mm"
+                v-model="queryParam.endTime"
+              ></a-date-picker>
+              <!-- :triggerChange="false" -->
+            </a-form-item>
+          </a-col>
+
+          <a-col :md="4" :sm="4">
+            <a-space>
+              <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button>
+              <a-button type="primary" @click="searchReset" icon="reload">閲嶇疆</a-button>
+            </a-space>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 鏌ヨ鍖哄煙-END -->
+
+    <!-- 鎿嶄綔鎸夐挳鍖哄煙 -->
+    <div class="table-operator">
+      <a-button @click="handleAdd" :disabled="addFlag" type="primary" icon="plus">鏂板</a-button>
+<!--      <a-button type="primary" icon="download" @click="handleExportXls('tms_goods_shelves')">瀵煎嚭</a-button>-->
+<!--      <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">-->
+<!--        <a-button type="primary" icon="import">瀵煎叆</a-button>-->
+<!--      </a-upload>-->
+<!--      <a-dropdown v-if="selectedRowKeys.length > 0">-->
+<!--        <a-menu slot="overlay">-->
+<!--          <a-menu-item key="1" @click="batchDel"><a-icon type="delete"/>鍒犻櫎</a-menu-item>-->
+<!--        </a-menu>-->
+<!--        <a-button style="margin-left: 8px"> 鎵归噺鎿嶄綔 <a-icon type="down" /></a-button>-->
+<!--      </a-dropdown>-->
+    </div>
+
+    <!-- table鍖哄煙-begin -->
+    <div>
+<!--      <div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">-->
+<!--        <i class="anticon anticon-info-circle ant-alert-icon"></i> 宸查�夋嫨 <a style="font-weight: 600">{{ selectedRowKeys.length }}</a>椤�-->
+<!--        <a style="margin-left: 24px" @click="onClearSelected">娓呯┖</a>-->
+<!--      </div>-->
+
+      <a-table
+        ref="table"
+        size="middle"
+        :scroll="{x:true}"
+        bordered
+        rowKey="id"
+        :columns="columns"
+        :dataSource="dataSource"
+        :pagination="ipagination"
+        :loading="loading"
+        :rowSelection="null"
+        class="j-table-force-nowrap"
+        @change="handleTableChange">
+
+        <span slot="action" slot-scope="text, record">
+          <a @click="handleDetail(record)">璇︽儏</a>
+
+          <a-divider type="vertical" />
+          <a-dropdown>
+            <a class="ant-dropdown-link">鏇村 <a-icon type="down" /></a>
+            <a-menu slot="overlay">
+              <a-menu-item>
+                <a @click="handleEdit(record)">缂栬緫</a>
+              </a-menu-item>
+              <a-menu-item>
+                <a-popconfirm title="纭畾鍒犻櫎鍚�?" @confirm="() => handleDelete(record.id)">
+                  <a>鍒犻櫎</a>
+                </a-popconfirm>
+              </a-menu-item>
+            </a-menu>
+          </a-dropdown>
+        </span>
+
+      </a-table>
+    </div>
+
+    <goods-shelves-modal ref="modalForm" :treeSelected="treeSelected" @ok="modalFormOk"></goods-shelves-modal>
+  </a-card>
+</template>
+
+<script>
+
+  import '@/assets/less/TableExpand.less'
+  import { mixinDevice } from '@/utils/mixin'
+  import { JeecgListMixin } from '@/mixins/JeecgListMixin'
+  import GoodsShelvesModal from './modules/GoodsShelvesModal'
+
+  export default {
+    name: 'GoodsShelvesList',
+    mixins:[JeecgListMixin, mixinDevice],
+    components: {
+      GoodsShelvesModal
+    },
+    data () {
+      return {
+        description: 'tms_goods_shelves',
+        labelCol: { xs: { span: 24 }, sm: { span: 8 } },
+        wrapperCol: { xs: { span: 24 }, sm: { span: 16 } },
+        // 琛ㄥご
+        columns: [
+          {
+            title: '#',
+            dataIndex: '',
+            key:'rowIndex',
+            width:60,
+            align:"center",
+            customRender:function (t,r,index) {
+              return parseInt(index)+1;
+            }
+          },
+          {
+            title:'浠撳簱缂栧彿',
+            align:"center",
+            dataIndex: 'warehouseNum'
+          },
+          {
+            title:'浠撳簱鍚嶇О',
+            align:"center",
+            dataIndex: 'warehouseName'
+          },
+          {
+            title:'搴撲綅鍙�',
+            align:"center",
+            dataIndex: 'locationCode'
+          },
+          {
+            title:'灞傛暟',
+            align:"center",
+            dataIndex: 'storey'
+          },
+          {
+            title:'鎺掓暟',
+            align:"center",
+            dataIndex: 'arrange'
+          },
+          {
+            title:'鍒楁暟',
+            align:"center",
+            dataIndex: 'columnNumber'
+          },
+          {
+            title:'璐ф灦缂栧彿',
+            align:"center",
+            dataIndex: 'shelfNumber'
+          },
+          {
+            title:'璐ф灦鍚嶇О',
+            align:"center",
+            dataIndex: 'shelfName'
+          },
+          {
+            title:'澶囨敞',
+            align:"center",
+            dataIndex: 'remark'
+          },
+          {
+            title:'鍒涘缓浜�',
+            align:"center",
+            dataIndex: 'createBy'
+          },
+          {
+            title:'鍒涘缓鏃堕棿',
+            align:"center",
+            dataIndex: 'createTime'
+          },
+          {
+            title: '鎿嶄綔',
+            dataIndex: 'action',
+            align:"center",
+            fixed:"right",
+            width:147,
+            scopedSlots: { customRender: 'action' }
+          }
+        ],
+        url: {
+          list: "/tms/goodsShelves/list",
+          delete: "/tms/goodsShelves/delete",
+          deleteBatch: "/tms/goodsShelves/deleteBatch",
+          exportXlsUrl: "/tms/goodsShelves/exportXls",
+          importExcelUrl: "tms/goodsShelves/importExcel",
+
+        },
+        dictOptions:{},
+        superFieldList:[],
+        treeSelected: {}
+      }
+    },
+    created() {
+    this.getSuperFieldList();
+    },
+    computed: {
+      importExcelUrl: function(){
+        return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
+      },
+      addFlag: function(){
+        return !(this.treeSelected.key && this.treeSelected.entity.leafFlag === '1')
+      }
+    },
+    mounted() {
+      this.handleGetCurrSelected = (data) => {
+        this.treeSelected = data;
+        if (data.entity && data.entity.leafFlag === '1') {
+          this.queryParam.warehouseId = data.key;
+          this.loadData();
+        } else {
+          this.dataSource = []
+        }
+      }
+      this.$bus.$on('getCurrSelected', this.handleGetCurrSelected);
+    },
+    beforeDestroy() {
+      this.$bus.$off('getCurrSelected', this.handleGetCurrSelected);
+    },
+    methods: {
+      searchReset() {
+        this.queryParam = {
+          warehouseId: this.treeSelected.key
+        }
+        this.loadData(1)
+      },
+      initDictConfig(){
+      },
+      getSuperFieldList(){
+        let fieldList=[];
+        fieldList.push({type:'string',value:'warehouseId',text:'浠撳簱缂栧彿',dictCode:''})
+        fieldList.push({type:'string',value:'locationCode',text:'搴撲綅鍙�',dictCode:''})
+        fieldList.push({type:'string',value:'storey',text:'灞傛暟',dictCode:''})
+        fieldList.push({type:'string',value:'arrange',text:'鎺掓暟',dictCode:''})
+        fieldList.push({type:'string',value:'columnNumber',text:'鍒楁暟',dictCode:''})
+        fieldList.push({type:'string',value:'shelfNumber',text:'璐ф灦缂栧彿',dictCode:''})
+        fieldList.push({type:'string',value:'shelfName',text:'璐ф灦鍚嶇О',dictCode:''})
+        fieldList.push({type:'string',value:'remark',text:'澶囨敞',dictCode:''})
+        fieldList.push({type:'string',value:'createBy',text:'鍒涘缓浜�',dictCode:''})
+        fieldList.push({type:'date',value:'createTime',text:'鍒涘缓鏃堕棿'})
+        this.superFieldList = fieldList
+      }
+    }
+  }
+</script>
+<style scoped>
+  @import '~@assets/less/common.less';
+</style>
\ No newline at end of file
diff --git a/src/views/tms/WarehouseList.vue b/src/views/tms/WarehouseList.vue
index 5a467a1..8d08ca8 100644
--- a/src/views/tms/WarehouseList.vue
+++ b/src/views/tms/WarehouseList.vue
@@ -144,7 +144,6 @@
   import { JeecgListMixin } from '@/mixins/JeecgListMixin'
   import WarehouseModal from './modules/WarehouseModal'
   import { getAction, putAction, deleteAction } from '../../api/manage'
-  import moment from 'moment'
 
   export default {
     name: 'WarehouseList',
@@ -153,16 +152,8 @@
       WarehouseModal
     },
     data () {
-      const now = moment()
-      const lastWeek = now.clone().subtract(7,'days')
       return {
         description: '浠撳簱绠$悊',
-        queryParam: {
-          beginTime: lastWeek.format('YYYY-MM-DD HH:mm'),
-          endTime: now.format('YYYY-MM-DD HH:mm'),
-          warehouseName: '',
-          parentId: ''
-        },
         // 琛ㄥご
         columns: [
           {
@@ -188,12 +179,26 @@
           {
             title:'鐖惰妭鐐圭紪鍙�',
             align:"center",
-            dataIndex: 'parentWarehouseId'
+            dataIndex: 'parentWarehouseId',
+            customRender:function (text,r) {
+              if (r.parentId === '-1') {
+                return '-1';
+              } else {
+                return text;
+              }
+            }
           },
           {
             title:'鐖惰妭鐐瑰悕绉�',
             align:"center",
-            dataIndex: 'parentWarehouseName'
+            dataIndex: 'parentWarehouseName',
+            customRender:function (text,r) {
+              if (r.parentId === '-1') {
+                return '鑸畤鏁戠敓';
+              } else {
+                return text;
+              }
+            }
           },
           {
             title:'鐘舵��',
@@ -214,10 +219,7 @@
           {
             title:'鍒涘缓鏃堕棿',
             align:"center",
-            dataIndex: 'createTime',
-            customRender:function (text) {
-              return !text?"":(text.length>10?text.substr(0,10):text)
-            }
+            dataIndex: 'createTime'
           },
           {
             title: '鎿嶄綔',
@@ -254,30 +256,41 @@
       }
     },
     mounted() {
-      this.$bus.$on('getCurrSelected', (data) => {
-        console.log(data)
+      this.handleGetCurrSelected = (data) => {
         this.treeSelected = data;
         this.queryParam.parentId = data.key;
         this.loadData();
-      });
+      }
+      this.$bus.$on('getCurrSelected', this.handleGetCurrSelected);
     },
     beforeDestroy() {
-      this.$bus.$off('getCurrSelected', {});
+      this.$bus.$off('getCurrSelected', this.handleGetCurrSelected);
     },
     methods: {
       handleStatus(record) {
-        const params = {
-          id: record.id,
-          status: record.status === '1' ? '2' : '1'
-        }
-        putAction(this.url.edit, params).then((res) => {
+        getAction(this.url.list, { parentId: record.id }).then((res) => {
           if (res.success) {
-            this.$message.success(res.message)
-            this.loadData()
+            if (res.result.total > 0) {
+              this.$message.warning('璇ヨ妭鐐逛笅瀛樺湪瀛愯妭鐐癸紝涓嶈兘鍙樻洿鐘舵�侊紒')
+            } else {
+              const params = {
+                id: record.id,
+                status: record.status === '1' ? '2' : '1'
+              }
+              putAction(this.url.edit, params).then((res) => {
+                if (res.success) {
+                  this.$message.success(res.message)
+                  this.loadData()
+                } else {
+                  this.$message.warning(res.message)
+                }
+              })
+            }
           } else {
-            this.$message.warning(res.message)
+            this.$message.warning(res.message);
           }
-        })
+        });
+
       },
       handleDelete(id) {
         getAction(this.url.list, { parentId: id }).then((res) => {
@@ -301,24 +314,11 @@
           }
         })
       },
-      // onBeginTimeChange(date, dateString) {
-      //   this.queryParam.begin_time = dateString[0]
-      // },
-      // onEndTimeChange(date, dateString) {
-      //   this.queryParam.end_time = dateString[0]
-      // },
       searchReset() {
-        const now = moment()
-        const lastWeek = now.clone().subtract(7,'days')
         this.queryParam = {
-          beginTime: lastWeek.format('YYYY-MM-DD HH:mm'),
-          endTime: now.format('YYYY-MM-DD HH:mm'),
-          warehouseName: '',
-          parentId: ''
+          parentId: this.treeSelected.key
         }
-        this.treeSelected = {}
         this.loadData(1)
-        this.$bus.$emit('clearTreeSelection')
       },
       modalFormOk() {
         this.loadData()
diff --git a/src/views/tms/WarehouseTree.vue b/src/views/tms/WarehouseTree.vue
index e9a92d7..4ba1aea 100644
--- a/src/views/tms/WarehouseTree.vue
+++ b/src/views/tms/WarehouseTree.vue
@@ -295,11 +295,9 @@
   },
   mounted() {
     this.$bus.$on('queryTreeData', this.queryTreeData);
-    this.$bus.$on('clearTreeSelection', this.onClearSelected)
   },
   beforeDestroy() {
     this.$bus.$off('queryTreeData', this.queryTreeData);
-    this.$bus.$off('clearTreeSelection', this.onClearSelected)
   },
   //鐩戝惉
   watch: {
diff --git a/src/views/tms/modules/GoodsShelvesForm.vue b/src/views/tms/modules/GoodsShelvesForm.vue
new file mode 100644
index 0000000..68bd152
--- /dev/null
+++ b/src/views/tms/modules/GoodsShelvesForm.vue
@@ -0,0 +1,164 @@
+<template>
+  <a-spin :spinning="confirmLoading">
+    <j-form-container :disabled="formDisabled">
+      <a-form-model ref="form" :model="model" :rules="validatorRules" slot="detail">
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="浠撳簱缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input :disabled="true" v-model="model.warehouseNum" placeholder="璇疯緭鍏ヤ粨搴撶紪鍙�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="浠撳簱鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol">
+              <a-input :disabled="true" v-model="model.warehouseName" placeholder="璇疯緭鍏ヤ粨搴撳悕绉�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="搴撲綅鍙�" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="locationCode">
+              <a-input v-model="model.locationCode" placeholder="璇疯緭鍏ュ簱浣嶅彿"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="灞傛暟" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="storey">
+              <a-input v-model="model.storey" placeholder="璇疯緭鍏ュ眰鏁�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鎺掓暟" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="arrange">
+              <a-input v-model="model.arrange" placeholder="璇疯緭鍏ユ帓鏁�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="鍒楁暟" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="columnNumber">
+              <a-input v-model="model.columnNumber" placeholder="璇疯緭鍏ュ垪鏁�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :span="12">
+            <a-form-model-item label="璐ф灦缂栧彿" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfNumber">
+              <a-input v-model="model.shelfNumber" placeholder="璇疯緭鍏ヨ揣鏋剁紪鍙�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="璐ф灦鍚嶇О" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="shelfName">
+              <a-input v-model="model.shelfName" placeholder="璇疯緭鍏ヨ揣鏋跺悕绉�"  ></a-input>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item label="澶囨敞" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="remark">
+              <a-textarea v-model="model.remark" rows="4" placeholder="璇疯緭鍏ュ娉�" />
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-form-model>
+    </j-form-container>
+  </a-spin>
+</template>
+
+<script>
+
+  import { httpAction, getAction } from '@/api/manage'
+  import { validateDuplicateValue } from '@/utils/util'
+
+  export default {
+    name: 'GoodsShelvesForm',
+    components: {
+    },
+    props: {
+      //琛ㄥ崟绂佺敤
+      disabled: {
+        type: Boolean,
+        default: false,
+        required: false
+      }
+    },
+    data () {
+      return {
+        model:{
+         },
+        labelCol: {
+          xs: { span: 24 },
+          sm: { span: 5 },
+        },
+        wrapperCol: {
+          xs: { span: 24 },
+          sm: { span: 16 },
+        },
+        confirmLoading: false,
+        validatorRules: {
+           warehouseId: [
+              { required: true, message: '璇疯緭鍏ヤ粨搴撶紪鍙�!'},
+           ],
+           locationCode: [
+              { required: true, message: '璇疯緭鍏ュ簱浣嶅彿!'},
+           ],
+           storey: [
+              { required: true, message: '璇疯緭鍏ュ眰鏁�!'},
+           ],
+           arrange: [
+              { required: true, message: '璇疯緭鍏ユ帓鏁�!'},
+           ],
+           columnNumber: [
+              { required: true, message: '璇疯緭鍏ュ垪鏁�!'},
+           ],
+        },
+        url: {
+          add: "/tms/goodsShelves/add",
+          edit: "/tms/goodsShelves/edit",
+          queryById: "/tms/goodsShelves/queryById"
+        }
+      }
+    },
+    computed: {
+      formDisabled(){
+        return this.disabled
+      },
+    },
+    created () {
+       //澶囦唤model鍘熷鍊�
+      this.modelDefault = JSON.parse(JSON.stringify(this.model));
+    },
+    methods: {
+      add (treeSelected) {
+        this.modelDefault.warehouseId = treeSelected.key
+        this.modelDefault.warehouseNum = treeSelected.entity.warehouseId
+        this.modelDefault.warehouseName = treeSelected.entity.warehouseName
+        this.edit(this.modelDefault);
+      },
+      edit (record) {
+        this.model = Object.assign({}, record);
+        this.visible = true;
+      },
+      submitForm () {
+        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;
+            })
+          }
+
+        })
+      },
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/src/views/tms/modules/GoodsShelvesModal.vue b/src/views/tms/modules/GoodsShelvesModal.vue
new file mode 100644
index 0000000..a3a0987
--- /dev/null
+++ b/src/views/tms/modules/GoodsShelvesModal.vue
@@ -0,0 +1,66 @@
+<template>
+  <j-modal
+    :title="title"
+    :width="width"
+    :visible="visible"
+    switchFullscreen
+    @ok="handleOk"
+    :okButtonProps="{ class:{'jee-hidden': disableSubmit} }"
+    @cancel="handleCancel"
+    cancelText="鍏抽棴">
+    <goods-shelves-form ref="realForm" @ok="submitCallback" :disabled="disableSubmit"></goods-shelves-form>
+  </j-modal>
+</template>
+
+<script>
+
+  import GoodsShelvesForm from './GoodsShelvesForm'
+  export default {
+    name: 'GoodsShelvesModal',
+    components: {
+      GoodsShelvesForm
+    },
+    props: {
+      treeSelected: {
+        type: Object,
+        default: {}
+      }
+    },
+    data () {
+      return {
+        title:'',
+        width:896,
+        visible: false,
+        disableSubmit: false
+      }
+    },
+    methods: {
+      add () {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.add(this.treeSelected);
+        })
+      },
+      edit (record) {
+        this.visible=true
+        this.$nextTick(()=>{
+          this.$refs.realForm.edit(record);
+        })
+      },
+      close () {
+        this.$emit('close');
+        this.visible = false;
+      },
+      handleOk () {
+        this.$refs.realForm.submitForm();
+      },
+      submitCallback(){
+        this.$emit('ok');
+        this.visible = false;
+      },
+      handleCancel () {
+        this.close()
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/src/views/tms/modules/WarehouseForm.vue b/src/views/tms/modules/WarehouseForm.vue
index 395abe5..be42c4d 100644
--- a/src/views/tms/modules/WarehouseForm.vue
+++ b/src/views/tms/modules/WarehouseForm.vue
@@ -25,7 +25,7 @@
           </a-col>
           <a-col :span="12">
             <a-form-model-item label="鍙跺瓙鑺傜偣鏍囪瘑" :labelCol="labelCol" :wrapperCol="wrapperCol" prop="leafFlag">
-              <a-radio-group v-model="model.leafFlag" placeholder="璇烽�夋嫨鏄惁鍙跺瓙鑺傜偣">
+              <a-radio-group :disabled="leafDisableFlag" v-model="model.leafFlag" placeholder="璇烽�夋嫨鏄惁鍙跺瓙鑺傜偣">
                 <a-radio :value="'2'">鏈夊瓙鑺傜偣</a-radio>
                 <a-radio :value="'1'">鏄彾瀛愯妭鐐�</a-radio>
               </a-radio-group>
@@ -66,6 +66,7 @@
     },
     data () {
       return {
+        leafDisableFlag: false,
         model:{
          },
         labelCol: {
@@ -80,6 +81,7 @@
         validatorRules: {
            warehouseId: [
               { required: true, message: '璇疯緭鍏ヤ粨搴撶紪鍙�!'},
+              { validator: (rule, value, callback) => validateDuplicateValue('tms_warehouse', 'warehouse_id', value, this.model.id, callback)}
            ],
            warehouseName: [
               { required: true, message: '璇疯緭鍏ヤ粨搴撳悕绉�!'},
@@ -95,6 +97,7 @@
            ],
         },
         url: {
+          list: "/tms/warehouse/list",
           add: "/tms/warehouse/add",
           edit: "/tms/warehouse/edit",
           queryById: "/tms/warehouse/queryById"
@@ -104,13 +107,24 @@
     computed: {
       formDisabled(){
         return this.disabled
-      },
+      }
     },
     created () {
        //澶囦唤model鍘熷鍊�
       this.modelDefault = JSON.parse(JSON.stringify(this.model));
     },
     methods: {
+      async updateLeafDisableFlag() {
+        const parentId = this.model.id;
+        try {
+          const res = await getAction(this.url.list, { parentId: parentId });
+          if (res.success) {
+            this.leafDisableFlag = res.result.total > 0;
+          }
+        } catch (e) {
+          console.error(e);
+        }
+      },
       add (treeSelected) {
         this.modelDefault.parentId = treeSelected.key
         this.modelDefault.parentWarehouseId = treeSelected.entity.warehouseId
@@ -118,6 +132,10 @@
         this.edit(this.modelDefault);
       },
       edit (record) {
+        if (record.parentId === '-1') {
+          record.parentWarehouseId = '-1'
+          record.parentWarehouseName = '鑸畤鏁戠敓'
+        }
         this.model = Object.assign({}, record);
         this.visible = true;
       },
@@ -137,7 +155,6 @@
               httpurl+=this.url.edit;
                method = 'put';
             }
-            console.log(this.model)
             httpAction(httpurl,this.model,method).then((res)=>{
               if(res.success){
                 that.$message.success(res.message);
@@ -152,6 +169,13 @@
 
         })
       },
+    },
+    watch: {
+      'model.id': function(newVal) {
+        if (newVal) {
+          this.updateLeafDisableFlag()
+        }
+      }
     }
   }
 </script>
\ No newline at end of file

--
Gitblit v1.9.3