From 1fb93f73037a8c40ea87c7f09f568df16a6869d1 Mon Sep 17 00:00:00 2001 From: cuijian <cuijian@xalxzn.com> Date: 星期五, 06 六月 2025 17:26:42 +0800 Subject: [PATCH] 工具台账功能 --- src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue | 85 +++ src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue | 323 +++++++++++ src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue | 2 src/views/tms/ToolLedgerList.vue | 39 + src/views/tms/modules/inbound/InboundModel.vue | 28 src/views/tms/modules/toolLedger/ToolLedgerListRight.vue | 516 +++++++++++++++++++ src/views/tms/modules/toolLedger/InStoreDetailList.vue | 109 ++++ src/views/tms/modules/inboundOrder/InboundOrderModel.vue | 27 src/views/tms/modules/toolLedger/OutStoreDetailList.vue | 109 ++++ src/views/tms/modules/toolLedger/StocktakingList.vue | 126 ++++ src/views/tms/modules/toolLedger/ToolLossList.vue | 106 +++ src/views/tms/modules/toolLedger/ToolSharpenList.vue | 101 +++ 12 files changed, 1,566 insertions(+), 5 deletions(-) diff --git a/src/views/tms/ToolLedgerList.vue b/src/views/tms/ToolLedgerList.vue new file mode 100644 index 0000000..b5af85c --- /dev/null +++ b/src/views/tms/ToolLedgerList.vue @@ -0,0 +1,39 @@ +<template> + <a-row + type="flex" + :gutter="16" + > + <a-col + :md="5" + :sm="24" + > + <tool-ledger-list-left /> + </a-col> + <a-col + :md="24-5" + :sm="24" + > + <tool-ledger-list-right /> + </a-col> + </a-row> +</template> + +<script> +import ToolLedgerListLeft from './modules/toolLedger/ToolLedgerListLeft' +import ToolLedgerListRight from './modules/toolLedger/ToolLedgerListRight' +export default { + name: 'ToolLedgerList', + components: { ToolLedgerListLeft, ToolLedgerListRight }, + data() { + return { + description: '宸ュ叿鍙拌处淇℃伅', + currentOrgCode: '' + } + }, + methods: {} +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/inbound/InboundModel.vue b/src/views/tms/modules/inbound/InboundModel.vue index 7548919..e2eda69 100644 --- a/src/views/tms/modules/inbound/InboundModel.vue +++ b/src/views/tms/modules/inbound/InboundModel.vue @@ -46,6 +46,18 @@ </a-form-model-item> </a-col> </a-row> + + <a-row style="width: 100%"> + <a-col :span="24 / 2"> + <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�" prop="locationCodeId"> + <a-select + :triggerChange="true" + :options="locationCodeOptions" + v-model="model.locationCodeId" + /> + </a-form-model-item> + </a-col> + </a-row> </a-form-model> </a-spin> <a-button type="primary" :style="{ marginBottom: '8px' }" @click="selectReturnList()" v-show="returnShow && !disableSubmit">閫夋嫨鍊熷嚭宸ュ叿</a-button> @@ -174,6 +186,12 @@ message: '璇烽�夋嫨鐢宠鍏ュ簱鏃ユ湡!', }, ], + locationCodeId:[ + { + required: true, + message: '璇烽�夋嫨搴撲綅鍙�!', + }, + ] }, url: { addInStorage: '/tms/inboundOrder/addInStorage', @@ -233,12 +251,18 @@ scopedSlots: { customRender: 'action' }, }, ], - classifyId:'' + classifyId:'', + locationCodeOptions:[] } }, created() { //澶囦唤model鍘熷鍊� this.modelDefault = JSON.parse(JSON.stringify(this.model)); + ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => { + if (res.success) { + this.locationCodeOptions = res.result + } + }) }, methods: { modalFormOk() { @@ -402,7 +426,7 @@ toolModel: data[i].toolModel, applicationType: data[i].applicationTypeName, onlyCode:data[i].onlyCode, - inStorageQuantity:data[i].storageQuantity || data[i].quantity, + inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1, quantity:data[i].quantity, accuracyClass:data[i].accuracyClass }) diff --git a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue index 06333dd..c66d5c8 100644 --- a/src/views/tms/modules/inboundOrder/InboundOrderModel.vue +++ b/src/views/tms/modules/inboundOrder/InboundOrderModel.vue @@ -41,7 +41,23 @@ </a-form-item> </a-col> <a-col :span="24 / 2"> + <a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="搴撲綅鍙�"> + <a-select + :triggerChange="true" + :options="locationCodeOptions" + v-decorator="[ 'locationCodeId', validatorRules.locationCodeId ]" + /> + </a-form-item> + </a-col> + <!-- <a-col :span="24 / 2"> <a-form-item label="鐢宠鍘熷洜" :labelCol="labelCol" :wrapperCol="wrapperCol"> + <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�" :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" /> + </a-form-item> + </a-col> --> + </a-row> + <a-row style="width: 100%"> + <a-col :span="24"> + <a-form-item label="鐢宠鍘熷洜" :labelCol="{ span: 3 }" :wrapperCol="{ span: 21 }" > <a-input placeholder="璇疯緭鍏ョ敵璇峰師鍥�" :disabled="disableSubmit" v-decorator="['applicationReason', validatorRules.applicationReason]" /> </a-form-item> </a-col> @@ -324,9 +340,16 @@ scopedSlots: { customRender: 'action' }, }, ], + locationCodeOptions:[] } }, - created() {}, + created() { + ajaxGetDictItems("tms_goods_shelves,location_code,id", null).then((res) => { + if (res.success) { + this.locationCodeOptions = res.result + } + }) + }, methods: { modalFormOk() { }, @@ -531,7 +554,7 @@ applicationType: data[i].applicationTypeName, onlyCode:data[i].onlyCode, quantity:data[i].quantity, - inStorageQuantity:data[i].storageQuantity || data[i].quantity, + inStorageQuantity:data[i].storageQuantity || data[i].quantity || 1, accuracyClass:data[i].accuracyClass }) } diff --git a/src/views/tms/modules/toolLedger/InStoreDetailList.vue b/src/views/tms/modules/toolLedger/InStoreDetailList.vue new file mode 100644 index 0000000..70f6f31 --- /dev/null +++ b/src/views/tms/modules/toolLedger/InStoreDetailList.vue @@ -0,0 +1,109 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'InStoreDetailList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/inStoreDetail/list', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鍏ュ簱鍗曠紪鍙�', + dataIndex: 'inboundNum', + align: 'center', + }, + { + title: '鍏ュ簱绫诲瀷', + dataIndex: 'inStorehouseTypeName', + align: 'center', + }, + { + title: '鍏ュ簱鏂瑰紡', + dataIndex: 'operateType', + align: 'center', + }, + { + title: '缁忔墜浜�', + dataIndex: 'handler', + align: 'center', + }, + { + title: '搴撲綅鍙�', + dataIndex: 'locationCode', + align: 'center', + }, + { + title: '鍏ュ簱鏁伴噺', + dataIndex: 'inNumber', + align: 'center', + }, + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/OutStoreDetailList.vue b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue new file mode 100644 index 0000000..eb5fdd4 --- /dev/null +++ b/src/views/tms/modules/toolLedger/OutStoreDetailList.vue @@ -0,0 +1,109 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'OutStoreDetailList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/outStoreDetail/outStoreDetailList', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鍑哄簱鍗曠紪鍙�', + dataIndex: 'outNum', + align: 'center', + }, + { + title: '鍑哄簱绫诲瀷', + dataIndex: 'outStorehouseTypeName', + align: 'center', + }, + { + title: '鍑哄簱鏂瑰紡', + dataIndex: 'operateType', + align: 'center', + }, + { + title: '缁忔墜浜�', + dataIndex: 'handler', + align: 'center', + }, + { + title: '鍑哄簱鏃堕棿', + dataIndex: 'outboundTime', + align: 'center', + }, + { + title: '鍑哄簱鏁伴噺', + dataIndex: 'outNumber', + align: 'center', + } + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/StocktakingList.vue b/src/views/tms/modules/toolLedger/StocktakingList.vue new file mode 100644 index 0000000..ece41de --- /dev/null +++ b/src/views/tms/modules/toolLedger/StocktakingList.vue @@ -0,0 +1,126 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolLedgerDetailList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/toolsStocktakingBound/toolsStocktakingList', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: '10%', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + width: '10%', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鐩樼偣鍗曞彿', + dataIndex: 'orderCode', + align: 'center', + }, + { + title: '鐩樼偣鍚嶇О', + dataIndex: 'stocktakingName', + align: 'center', + }, + { + title: '鐩樼偣绫诲瀷', + dataIndex: 'stocktakingType', + align: 'center', + }, + { + title: '缁忔墜浜�', + dataIndex: 'handler', + align: 'center', + }, + { + title: '鐩樺簱鏃堕棿', + dataIndex: 'stocktakingDate', + align: 'center', + }, + { + title: '鐩樼泩鐩樹簭', + dataIndex: 'surplusDeficit', + align: 'center', + }, + { + title: '璐﹂潰鏁伴噺', + dataIndex: 'bookQuantity', + align: 'center', + }, + { + title: '鍙敤鏁伴噺', + dataIndex: 'availableQuantity', + align: 'center', + }, + { + title: '瀹炵洏鏁伴噺', + dataIndex: 'practicalQuantity', + align: 'center', + } + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue new file mode 100644 index 0000000..60432f6 --- /dev/null +++ b/src/views/tms/modules/toolLedger/ToolLedgerDetailList.vue @@ -0,0 +1,85 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolLedgerDetailList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/toolLedgerDetail/queryToolLedgerDetailList', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + + { + title: '宸ュ叿鍒嗙被', + dataIndex: 'applicationType', + align: 'center', + } + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue new file mode 100644 index 0000000..6e2d070 --- /dev/null +++ b/src/views/tms/modules/toolLedger/ToolLedgerListLeft.vue @@ -0,0 +1,323 @@ +<template> + <a-card + :loading="cardLoading" + :bordered="false" + title="宸ュ叿淇℃伅" + style="height: 100%;" + > + <a-spin :spinning="loading"> + <a-alert + type="info" + :showIcon="true" + style="margin-right: 54px;" + > + <div slot="message"> + 褰撳墠锛�<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span> + <a + v-if="this.currSelected.title" + style="margin-left: 10px" + @click="onClearSelected" + >鍙栨秷</a> + </div> + </a-alert> + <!-- <div class="drawer-bootom-button"> + <a-dropdown + :trigger="['click']" + placement="bottomCenter" + > + <a-menu slot="overlay"> + <a-menu-item + key="1" + @click="expandAll" + >灞曞紑鎵�鏈�</a-menu-item> + <a-menu-item + key="2" + @click="closeAll" + >鍚堝苟鎵�鏈�</a-menu-item> + <a-menu-item + key="3" + @click="refreshTree" + >鍒锋柊</a-menu-item> + </a-menu> + <a-button> + <a-icon type="bars" /> + </a-button> + </a-dropdown> + </div> --> + + <a-input-search + @search="handleSearch" + style="width:100%;margin-top: 10px" + placeholder="妫�绱㈠伐鍏峰垎绫�" + allowClear + v-model="searchInput" + @change="handleChange" + /> + + <!-- showLine --> + <a-tree + :checkStrictly="checkStrictly" + + :selectedKeys="selectedKeys" + :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" + :treeData="treeDataSource" + + :defaultExpandAll="true" + @select="onSelect" + @expand="onExpand" + > + <template + slot="title" + slot-scope="{title, type, rfield1}" + > + <Tooltip + placement="top" + title="宸ュ叿鍒嗙被" + > + <i + v-if="type == 0" + class="action-jeecg actioncompany2" + style="font-size: 18px;" + /> + </Tooltip> + + <span v-if="title.indexOf(searchValue) > -1"> + {{ title.substr(0, title.indexOf(searchValue)) }} + <span class="replaceSearch">{{ searchValue }}</span> + {{ title.substr(title.indexOf(searchValue) + searchValue.length) }} + </span> + <span v-else>{{ title }}</span> + + </template> + </a-tree> + </a-spin> + </a-card> +</template> + +<script> +import { getAction } from '@/api/manage' +import Tooltip from 'ant-design-vue/es/tooltip' +export default { + name: 'ToolLedgerListLeft', + components: { + Tooltip, + }, + props: ['value'], + data() { + return { + searchInput: '', + cardLoading: false, + loading: false, + treeDataSource: [], + selectedKeys: [], + expandedKeys: [], + url: { + factoryTreeList: '/tms/toolsClassify/loadTree', + }, + searchValue: '', + dataList: [], + autoExpandParent: true, + checkStrictly: true, + allTreeKeys: [], + currSelected: {}, + hiding: false, + } + }, + created() { + this.queryTreeData(); + this.closeAll(); + }, + methods: { + getCurrSelectedTitle() { + return !this.currSelected.title ? '' : this.currSelected.title; + }, + onClearSelected() { + this.hiding = true; + this.currSelected = {}; + this.selectedKeys = []; + }, + onSelect(selectedKeys, e) { + this.hiding = false; + let record = e.node.dataRef; + this.currSelected = Object.assign({}, record); + this.selectedKeys = [record.key]; + }, + onExpand(expandedKeys) { + this.expandedKeys = expandedKeys; + this.autoExpandParent = false; + }, + queryTreeData() { + this.loading = true; + this.cardLoading = true; + getAction(this.url.factoryTreeList).then((res) => { + if (res.success) { + this.dataList = []; + this.allTreeKeys = []; + this.treeDataSource = res.result; + this.generateList(res.result); + } else { + this.$message.warn(res.message); + } + }).finally(() => { + this.loading = false; + this.cardLoading = false; + }) + }, + + handleChange() { + let search = this.searchInput; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + handleSearch(value) { + let search = value; + let expandedKeys = this.dataList + .map(item => { + if (item.title.indexOf(search) > -1) { + return this.getParentKey(item.key, this.treeDataSource); + } + return null; + }) + .filter((item, i, self) => item && self.indexOf(item) === i); + Object.assign(this, { + expandedKeys, + searchValue: search, + autoExpandParent: true, + }); + }, + getParentKey(key, tree) { + let parentKey; + for (let i = 0; i < tree.length; i++) { + const node = tree[i]; + if (node.children) { + if (node.children.some(item => item.key === key)) { + parentKey = node.key; + } else if ( + this.getParentKey(key, node.children)) { + parentKey = this.getParentKey(key, node.children); + } + } + } + return parentKey; + }, + + generateList(data) { + for (let i = 0; i < data.length; i++) { + const node = data[i]; + const key = node.key; + const title = node.title; + this.dataList.push({ key, title: title }); + this.allTreeKeys.push(key); + if (node.children) { + this.generateList(node.children); + } + } + }, + expandAll() { + this.expandedKeys = this.allTreeKeys; + }, + closeAll() { + this.expandedKeys = []; + }, + refreshTree() { + this.queryTreeData(); + } + }, + mounted() { + this.$bus.$on('queryTreeData', this.queryTreeData); + }, + //鐩戝惉 + watch: { + currSelected(val) {//鐩戝惉currSelected 鍙樺寲锛屽皢鍙樺寲鍚庣殑鏁板�间紶閫掔粰 getCurrSelected 浜嬩欢 + this.$bus.$emit('getCurrSelected', val) + }, + } +} +</script> + +<style scoped> +.replaceSearch { + color: #40a9ff; + font-weight: bold; + background-color: rgb(204, 204, 204); +} +/*闅愯棌鏍戠殑榛樿icon*/ +.ant-tree-switcher-noop { + display: none !important; +} +/*闅愯棌鏍戠殑榛樿绔栫嚎*/ +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 0px; +} + +.ant-card-body .table-operator { + margin: 15px; +} + +.anty-form-btn { + width: 100%; + text-align: center; +} + +.anty-form-btn button { + margin: 0 5px; +} + +.anty-node-layout .ant-layout-header { + padding-right: 0; +} + +.header { + padding: 0 8px; +} + +.header button { + margin: 0 3px; +} + +.ant-modal-cust-warp { + height: 100%; +} + +.ant-modal-cust-warp .ant-modal-body { + height: calc(100% - 110px) !important; + overflow-y: auto; +} + +.ant-modal-cust-warp .ant-modal-content { + height: 90% !important; + overflow-y: hidden; +} + +#app .desktop { + height: auto !important; +} + +/** Button鎸夐挳闂磋窛 */ +.ant-btn { + margin-left: 3px; +} +.ant-alert { + padding: 5px 15px 5px 37px; +} +.drawer-bootom-button { + position: absolute; + top: 1px; + /* padding: 10px 16px; */ + text-align: left; + right: 0; + background: #fff; + border-radius: 0 0 2px 2px; +} +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue new file mode 100644 index 0000000..e5e10e5 --- /dev/null +++ b/src/views/tms/modules/toolLedger/ToolLedgerListRight.vue @@ -0,0 +1,516 @@ +<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="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ伐鍏风紪鍙锋绱�" + v-model="queryParam.toolCode" + ></a-input> + </a-form-item> + </a-col> + <a-col + :md="6" + :sm="8" + > + <a-form-item + label="鍨嬪彿/鍥惧彿" + :labelCol="{span: 5}" + :wrapperCol="{span: 18, offset: 1}" + > + <a-input + placeholder="璇疯緭鍏ュ瀷鍙�/鍥惧彿妫�绱�" + v-model="queryParam.toolModel" + ></a-input> + </a-form-item> + </a-col> + <a-col :md="6" :sm="24"> + <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> + <a-button type="primary" @click="searchQuery" icon="search">鏌ヨ</a-button> + <a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">閲嶇疆</a-button> + </span> + </a-col> + + </a-row> + </a-form> + </div> + <!-- 鏌ヨ鍖哄煙-END --> + + <!-- 鎿嶄綔鎸夐挳鍖哄煙 --> + + <!-- table鍖哄煙-begin --> + <div> + + <a-table + ref="table" + size="middle" + :scroll="{x:true}" + bordered + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + :rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange,type:'radio'}" + class="j-table-force-nowrap" + :customRow="customRow" + @change="handleTableChange"> + + <template slot="htmlSlot" slot-scope="text"> + <div v-html="text"></div> + </template> + <template slot="imgSlot" slot-scope="text,record"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犲浘鐗�</span> + <img v-else :src="getImgView(text)" :preview="record.id" height="25px" alt="" style="max-width:80px;font-size: 12px;font-style: italic;"/> + </template> + <template slot="fileSlot" slot-scope="text"> + <span v-if="!text" style="font-size: 12px;font-style: italic;">鏃犳枃浠�</span> + <a-button + v-else + :ghost="true" + type="primary" + icon="download" + size="small" + @click="downloadFile(text)"> + 涓嬭浇 + </a-button> + </template> + </a-table> + </div> + + <a-tabs defaultActiveKey="1"> + <a-tab-pane key="1"> + <span slot="tab"> + <a-badge>鍙傛暟 </a-badge> + </span> + <para-hole-tools-list ref="paraHoleToolsList"></para-hole-tools-list> + <para-threading-tool-list ref="paraThreadingToolList"></para-threading-tool-list> + <para-mill-tool-list ref="paraMillToolList"></para-mill-tool-list> + <para-turning-tools-list ref="paraTurningToolsList"></para-turning-tools-list> + <para-blade-list ref="paraBladeList"></para-blade-list> + <para-common-tool-list ref="paraCommonToolList"></para-common-tool-list> + </a-tab-pane> + + <a-tab-pane + key="2" + forceRender + > + <span slot="tab"> + <a-badge>绠$悊鍙傛暟 </a-badge> + </span> + <tools-config-property-list ref="toolsConfigPropertyList"></tools-config-property-list> + </a-tab-pane> + + <a-tab-pane + key="3" + forceRender + > + <span slot="tab"> + <a-badge>鎶婂彿 </a-badge> + </span> + <tool-ledger-detail-list ref="toolLedgerDetailList"></tool-ledger-detail-list> + </a-tab-pane> + + <a-tab-pane + key="4" + forceRender + > + <span slot="tab"> + <a-badge>鍏ュ簱淇℃伅 </a-badge> + </span> + <in-store-detail-list ref="inStoreDetailList"></in-store-detail-list> + </a-tab-pane> + + <a-tab-pane + key="5" + forceRender + > + <span slot="tab"> + <a-badge>鍑哄簱淇℃伅 </a-badge> + </span> + <out-store-detail-list ref="outStoreDetailList"></out-store-detail-list> + </a-tab-pane> + + <a-tab-pane + key="6" + forceRender + > + <span slot="tab"> + <a-badge>鍒冪(淇℃伅 </a-badge> + </span> + <tool-sharpen-list ref="toolSharpenList"></tool-sharpen-list> + </a-tab-pane> + + <a-tab-pane + key="7" + forceRender + > + <span slot="tab"> + <a-badge>鎶ユ崯淇℃伅 </a-badge> + </span> + <tool-loss-list ref="toolLossList"></tool-loss-list> + </a-tab-pane> + + <a-tab-pane + key="8" + forceRender + > + <span slot="tab"> + <a-badge>鐩樼偣淇℃伅 </a-badge> + </span> + <stocktaking-list ref="stocktakingList"></stocktaking-list> + </a-tab-pane> + </a-tabs> + </a-card> +</template> + +<script> + + import '@/assets/less/TableExpand.less' + import { mixinDevice } from '@/utils/mixin' + import { JeecgListMixin } from '@/mixins/JeecgListMixin' + import Tooltip from 'ant-design-vue/es/tooltip' + import { getAction, postAction, deleteAction, requestPut } from '@api/manage' + import ParaHoleToolsList from '../baseTools/ParaHoleToolsList' + import ToolsConfigPropertyList from '../baseTools/ToolsConfigPropertyList' + import ParaMillToolList from '../baseTools/ParaMillToolList' + import ParaThreadingToolList from '../baseTools/ParaThreadingToolList' + import ParaTurningToolsList from '../baseTools/ParaTurningToolsList' + import ParaCommonToolList from '../baseTools/ParaCommonToolList' + import ParaBladeList from '../baseTools/ParaBladeList' + import ToolLedgerDetailList from './ToolLedgerDetailList' + import ToolLossList from './ToolLossList' + import ToolSharpenList from './ToolSharpenList' + import StocktakingList from './StocktakingList' + import InStoreDetailList from './InStoreDetailList' + import OutStoreDetailList from './OutStoreDetailList' + + export default { + name: 'ToolLedgerListRight', + mixins:[JeecgListMixin, mixinDevice], + components: { + Tooltip, + ParaHoleToolsList, + ToolsConfigPropertyList, + ParaMillToolList, + ParaThreadingToolList, + ParaTurningToolsList, + ParaCommonToolList, + ParaBladeList, + ToolLedgerDetailList, + ToolLossList, + ToolSharpenList, + StocktakingList, + InStoreDetailList, + OutStoreDetailList + }, + data () { + return { + description: '宸ュ叿鍙拌处淇℃伅绠$悊椤甸潰', + /* 鍒嗛〉鍙傛暟 */ + ipagination:{ + current: 1, + pageSize: 10, + pageSizeOptions: ['10', '20', '50'], + showTotal: (total, range) => { + return range[0] + "-" + range[1] + " 鍏�" + total + "鏉�" + }, + showQuickJumper: true, + showSizeChanger: true, + total: 0 + }, + // 琛ㄥご + columns: [ + { + title: '#', + dataIndex: '', + key:'rowIndex', + width:60, + align:"center", + customRender:function (t,r,index) { + return parseInt(index)+1; + } + }, + { + title:'宸ュ叿缂栫爜', + align:"center", + dataIndex: 'toolCode' + }, + { + title:'搴忓彿', + align:"center", + dataIndex: 'signCode' + }, + { + title:'涓枃鍚嶇О', + align:"center", + dataIndex: 'chineseName' + }, + // { + // title:'澶栨枃鍚嶇О', + // align:"center", + // dataIndex: 'foreignLanguageName' + // }, + // { + // title:'鏍囨敞绾у埆', + // align:"center", + // dataIndex: 'standardLevel' + // }, + // { + // title:'鏍囧噯鍙�', + // align:"center", + // dataIndex: 'standardCode' + // }, + { + title:'鍨嬪彿/鍥惧彿', + align:"center", + dataIndex: 'toolModel' + }, + { + title:'宸ュ叿绫诲瀷', + align:"center", + dataIndex: 'applicationType' + }, + { + title:'绠$悊绛夌骇', + align:"center", + dataIndex: 'accuracyClass' + }, + { + title:'瀛樺偍浣嶇疆', + align:"center", + dataIndex: 'storageLocation' + }, + { + title:'搴撲綅鍙�', + align:"center", + dataIndex: 'positionCode' + }, + { + title:'鏈�浣庡簱瀛�', + align:"center", + dataIndex: 'lowerInventory' + }, + { + title:'鏈�楂樺簱瀛�', + align:"center", + dataIndex: 'highestInventory' + }, + { + title:'鎬诲簱瀛�', + align:"center", + dataIndex: 'totalCount' + }, + { + title:'鍙敤搴撳瓨', + align:"center", + dataIndex: 'availableCount' + }, + { + title:'鎶ユ崯', + align:"center", + dataIndex: 'lossCount' + }, + { + title:'鍦ㄥ��', + align:"center", + dataIndex: 'lendCount' + }, + { + title:'鍦ㄧ(', + align:"center", + dataIndex: 'sharpeningCount' + }, + { + title:'鍦ㄦ', + align:"center", + dataIndex: 'detectionCount' + }, + { + title:'鍦ㄤ慨', + align:"center", + dataIndex: 'repairCount' + } + // { + // title:'澶囨敞', + // align:"center", + // dataIndex: 'remark' + // } + // { + // title:'鍒涘缓浜�', + // align:"center", + // dataIndex: 'createBy' + // }, + // { + // title:'鍒涘缓鏃堕棿', + // align:"center", + // dataIndex: 'createTime', + // customRender:function (text) { + // return !text?"":(text.length>10?text.substr(0,10):text) + // } + // } + ], + url: { + list: "/tms/baseTools/list", + paraHolesToolsList:"/tms/baseTools/paraHolesToolsList", + paraCommonToolList:"/tms/baseTools/paraCommonToolList", + paraThreadingToolList:"/tms/baseTools/paraThreadingToolList", + paraMillToolList:"/tms/baseTools/paraMillToolList", + paraTurningToolsList:"/tms/baseTools/paraTurningToolsList", + paraBladeList:"/tms/baseTools/paraBladeList", + delete: "/tms/baseTools/delete", + deleteBatch: "/tms/baseTools/deleteBatch", + edit: '/tms/baseTools/edit', + exportXlsUrl: "/tms/baseTools/exportXls", + importExcelUrl: "tms/baseTools/importExcel", + queryParaByToolCode:"/tms/baseTools/queryByToolCode", + queryByToolCode:"/tms/toolsConfigProperty/queryByToolCode", + toolLedgerList:"/tms/toolLedger/toolLedgerList", + toolLedgerDetailList:"/tms/toolLedgerDetail/list" + }, + dictOptions:{}, + superFieldList:[], + nodeSelected: {}, // 褰撳墠閫変腑鐨勮妭鐐规暟鎹� + paraTypeFlag:'', + disableMixinCreated:true + } + }, + created() { + this.$bus.$on('getCurrSelected', (data) => { + //getCurrSelected 浜嬩欢 鎺ユ敹缁勪欢浼犻�掔殑鍙傛暟 + this.nodeType = (data.type == undefined ? 0 : data.type); + this.paraTypeFlag = (data.entity == undefined ? 0 : data.entity.paraTypeFlag) + this.nodeSelected = data; + this.loadData() + this.clearPara() + }) + }, + computed: { + importExcelUrl: function(){ + return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`; + }, + }, + methods: { + + modalFormOk() { + this.loadData(); // 鍒锋柊琛ㄦ牸鏁版嵁 + this.$bus.$emit('queryTreeData') //鍒锋柊宸︿晶鏍� + }, + + onSelectChange(selectedRowKeys,selectionRows) { + this.selectedRowKeys = selectedRowKeys; + this.selectionRows = selectionRows + //閫氳繃id鏌ヨ绠$悊鍙傛暟鍜屽弬鏁版暟鎹� + getAction(this.url.queryParaByToolCode, { toolCode: this.selectedRowKeys[0],paraTypeFlag:this.paraTypeFlag}).then((res) => { + if (res.success) { + if(this.paraTypeFlag === "1"){ + this.$refs.paraCommonToolList.getPara(res.result); + }else if(this.paraTypeFlag === "2"){ + this.$refs.paraHoleToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "3"){ + this.$refs.paraThreadingToolList.getPara(res.result); + }else if(this.paraTypeFlag === "4"){ + this.$refs.paraMillToolList.getPara(res.result); + }else if(this.paraTypeFlag === "5"){ + this.$refs.paraTurningToolsList.getPara(res.result); + }else if(this.paraTypeFlag === "6"){ + this.$refs.paraBladeList.getPara(res.result); + } + } else { + this.$message.warning(res.message); + } + }) + getAction(this.url.queryByToolCode, { toolCode: this.selectedRowKeys[0]}).then((res) => { + if (res.success) { + this.$refs.toolsConfigPropertyList.getPara(res.result); + } else { + this.$message.warning(res.message); + } + }) + this.$bus.$emit('getToolLedgerData', this.selectionRows[0]) + }, + //绂佺敤鐘舵�佹牱寮� + tableRowClass(record, index) { + if (record.status != "1") { + return "frozenRowClass"; + } + return ""; + }, + loadData() { + let params = this.getQueryParams(); + if (this.nodeSelected && this.nodeSelected.key !== '-1') { + // 鍔犺浇閫変腑鑺傜偣鐨勫瓙绫� + params.classifyId = this.nodeSelected.key; + this.loading = true; + let httpUrl = this.url.toolLedgerList + getAction(httpUrl, params) + .then((res) => { + if (res.success) { + this.dataSource = res.result.records; // 鏇存柊琛ㄦ牸鏁版嵁 + this.ipagination.total = res.result.total + } else { + this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ"); + this.ipagination.total = 0 + } + }) + .finally(() => { + this.loading = false; + }); + } else { + this.$message.warning("璇烽�夋嫨鍙跺瓙鑺傜偣杩涜鏌ヨ"); + } + }, + onClearSelected() { + this.selectedKeys = []; + this.nodeSelected = {}; // 娓呯┖閫変腑鐨勮妭鐐� + this.dataSource = []; // 娓呯┖琛ㄦ牸鏁版嵁 + }, + //閲嶇疆 + searchReset() { + this.queryParam = {} + this.loadData(1); + this.clearPara() + }, + //娓呯┖閫変腑鍙婂弬鏁� + clearPara(){ + this.selectedRowKeys = [] + this.$refs.paraCommonToolList.visable = false + this.$refs.paraHoleToolsList.visable = false + this.$refs.paraThreadingToolList.visable = false + this.$refs.paraMillToolList.visable = false + this.$refs.paraTurningToolsList.visable = false + this.$refs.paraBladeList.visable = false + this.$refs.toolsConfigPropertyList.visable = false + }, + customRow(record) { + return { + on: { + click: () => { + this.onSelectChange(record.id.split(","), [record]); + } + } + } + }, + + }, + } +</script> +<style scoped> + @import '~@assets/less/common.less'; + .enable { + color: green; + } + .disable { + color: red; + } +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/ToolLossList.vue b/src/views/tms/modules/toolLedger/ToolLossList.vue new file mode 100644 index 0000000..9943d6a --- /dev/null +++ b/src/views/tms/modules/toolLedger/ToolLossList.vue @@ -0,0 +1,106 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolLossList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/toolsLossBound/toolLossDetailList', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: '10%', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + width: '10%', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鎶ユ崯鍗曞彿', + dataIndex: 'orderCode', + align: 'center', + }, + { + title: '缁忔墜浜�', + dataIndex: 'handler', + align: 'center', + }, + { + title: '鎶ユ崯鍘熷洜', + dataIndex: 'lossReason', + align: 'center', + }, + { + title: '鎶ユ崯鏃堕棿', + dataIndex: 'lossTime', + align: 'center', + }, + { + title: '鎶ユ崯鏁伴噺', + dataIndex: 'lossNumber', + align: 'center', + } + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolLedger/ToolSharpenList.vue b/src/views/tms/modules/toolLedger/ToolSharpenList.vue new file mode 100644 index 0000000..eff61b3 --- /dev/null +++ b/src/views/tms/modules/toolLedger/ToolSharpenList.vue @@ -0,0 +1,101 @@ +<template> + <a-card + :bordered="false" + class="card-area" + > + <a-table + ref="table" + bordered + size="middle" + rowKey="id" + :columns="columns" + :dataSource="dataSource" + :pagination="ipagination" + :loading="loading" + @change="handleTableChange" + > + </a-table> + </a-card> +</template> + +<script> +import { requestPut } from '@/api/manage' +import { JeecgListMixin } from '@/mixins/JeecgListMixin' + +export default { + name: 'ToolSharpenList', + mixins: [JeecgListMixin], + components: {}, + data() { + return { + url: { + list: '/tms/toolSharpening/toolSharpeningList', + }, + queryParam: {}, + nodeType: 0, + dataSource: [], + disableMixinCreated:true, + columns: [ + { + title: '宸ュ叿缂栫爜', + align: 'center', + dataIndex: 'toolCode', + width: '10%', + }, + { + title: '宸ュ叿缂栧彿', + align: 'center', + dataIndex: 'onlyCode', + width: '10%', + }, + { + title: '宸ュ叿鍚嶇О', + dataIndex: 'chineseName', + align: 'center', + key: 'toolName' + }, + { + title: '鍨嬪彿/鍥惧彿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '璐d换浜�', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鍒冪(鏃堕棿', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鍒冪(缁撴灉鍙婂缓璁�', + dataIndex: 'toolModel', + align: 'center', + }, + { + title: '鍒冪(鐘舵��', + dataIndex: 'toolModel', + align: 'center', + }, + ], + para:{}, + } + }, + + methods: { + + }, + mounted() { + this.$bus.$on('getToolLedgerData', (data) => { + this.queryParam.toolCode = data.toolCode; + this.searchQuery(); + }) + } +} +</script> + +<style scoped> +@import '~@assets/less/common.less'; +</style> \ No newline at end of file diff --git a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue index 0f1ba35..0c018fb 100644 --- a/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue +++ b/src/views/tms/modules/toolsClassify/ToolsClassifyListLeft.vue @@ -227,7 +227,7 @@ this.expandedKeys = this.allTreeKeys; }, closeAll() { - this.expandedKeys = this.allSiteIds; + this.expandedKeys = []; }, refreshTree() { this.queryTreeData(); -- Gitblit v1.9.3