From b8dc4ccc6ee580b084aa860e64af2d90d1cb5979 Mon Sep 17 00:00:00 2001 From: 石广澎 <shiguangpeng@163.com> Date: 星期三, 29 十一月 2023 10:11:52 +0800 Subject: [PATCH] feat: 1、首页接口对接 2、部门物品分发 --- admin-web/src/views/stock/procure/receiptDetails/index.vue | 2 admin-web/src/views/stock/procure/purchaseOrder/index.vue | 2 admin-web/.gitignore | 1 admin-web/src/views/departmentitem/itemret/returnNote/index.vue | 2 admin-web/src/views/stock/transfer/transferissue/index.vue | 3 admin-web/src/views/departmentitem/itemdis/disDetails/index.vue | 48 +- admin-web/src/views/stock/transfer/transferApplication/index.vue | 2 admin-web/src/views/dashboard/components/LBJETJ.vue | 48 +- admin-web/src/views/departmentitem/itemdis/distribution/detail.vue | 125 +++--- admin-web/src/views/departmentitem/itemscr/scrapping/index.vue | 2 admin-web/src/views/dashboard/components/XYZC.vue | 16 admin-web/src/views/stock/accessStock/outbound/index.vue | 2 admin-web/vue.config.js | 2 admin-web/src/components/mySearch/SearchItem.vue | 1 admin-web/src/views/dashboard/components/LBSLTJ.vue | 51 +- admin-web/src/views/departmentitem/itemdis/distribution/edit.vue | 481 +++++++++++++++------------ admin-web/src/views/departmentitem/itemdis/distribution/index.vue | 52 +- admin-web/public/static/config.js | 18 admin-web/src/api/dashboard.js | 18 + admin-web/src/views/dashboard/index.vue | 86 +++- 20 files changed, 550 insertions(+), 412 deletions(-) diff --git a/admin-web/.gitignore b/admin-web/.gitignore index 78a752d..55f0bfa 100644 --- a/admin-web/.gitignore +++ b/admin-web/.gitignore @@ -21,3 +21,4 @@ package-lock.json yarn.lock +/lowConsumWeb/ diff --git a/admin-web/public/static/config.js b/admin-web/public/static/config.js index 33e661f..b7e2788 100644 --- a/admin-web/public/static/config.js +++ b/admin-web/public/static/config.js @@ -1,21 +1,13 @@ -// 璇锋眰鎺ュ彛鍦板潃 濡傛灉娌℃湁閰嶇疆鑷姩鑾峰彇褰撳墠缃戝潃璺緞 -const VUE_APP_API_URL = process.env.VUE_APP_BASE_API || `${location.origin}`; -const VUE_APP_WS_URL = - process.env.VUE_APP_WS_URL || (location.protocol === 'https' ? 'wss' : 'ws') + ':' + location.hostname; - const SettingIplatform = { // 鏈嶅姟鍣ㄥ湴鍧� - // 鏈嶅姟鍣ㄥ湴鍧� - httpUrl: VUE_APP_API_URL, // 涓婁紶璺緞 ftpUrl: 'https://yqzx.jinmingyuan.com/lowConsum',//寮�鍙� -// 鎺ュ彛璇锋眰鍦板潃 - apiBaseURL: 'https://yqzx.jinmingyuan.com/lowConsum',//寮�鍙� -// apiBaseURL: 'https://jmy.jinmingyuan.com/progress',// 娴嬭瘯, - // socket杩炴帴 - wsSocketUrl: VUE_APP_WS_URL, - debug: true //璋冭瘯寮�鍏� true鏃朵細杈撳嚭璇锋眰鏃ュ織 + // 鎺ュ彛璇锋眰鍦板潃 + // apiBaseURL: 'http://172.16.20.2:8083/lowConsum',//寮�鍙� + apiBaseURL: 'http://172.16.60.155:8083/lowConsum',//寮�鍙� + // apiBaseURL: 'https://yqzx.jinmingyuan.com/lowConsum',//寮�鍙� + debug: false //璋冭瘯寮�鍏� true鏃朵細杈撳嚭璇锋眰鏃ュ織 }; export default SettingIplatform; diff --git a/admin-web/src/api/dashboard.js b/admin-web/src/api/dashboard.js new file mode 100644 index 0000000..de56d8d --- /dev/null +++ b/admin-web/src/api/dashboard.js @@ -0,0 +1,18 @@ +import request from '@/utils/request'; + +// 鐗╁搧閲戦鏁伴噺 +export function getGoodsNumPrice(params) { + return request({ + url: '/pc/warehouse/homeStatistics/getGoodsNumPrice', + method: 'get', + params, + }); +} +// 璧勪骇澧為暱/鎶ュ簾缁熻鍥撅紙鏁伴噺锛� +export function getGoodsNumByMonth(params) { + return request({ + url: '/pc/warehouse/homeStatistics/getGoodsNumByMonth', + method: 'get', + params, + }); +} diff --git a/admin-web/src/components/mySearch/SearchItem.vue b/admin-web/src/components/mySearch/SearchItem.vue index 1240b54..0dbda42 100644 --- a/admin-web/src/components/mySearch/SearchItem.vue +++ b/admin-web/src/components/mySearch/SearchItem.vue @@ -20,6 +20,7 @@ :props="item.optionsConfig.props||{ checkStrictly: true,emitPath: false,value: 'id' }" :show-all-levels="false" filterable + clearable style="width: 150px" @change="(v) => this.$emit('change', v)" > diff --git a/admin-web/src/views/dashboard/components/LBJETJ.vue b/admin-web/src/views/dashboard/components/LBJETJ.vue index 36d2057..a2b2956 100644 --- a/admin-web/src/views/dashboard/components/LBJETJ.vue +++ b/admin-web/src/views/dashboard/components/LBJETJ.vue @@ -13,12 +13,34 @@ import * as dash from "@/api/dashboard/dash"; export default { - name: 'LBSLTJ', + name: 'LBJETJ', props: { - activeId: { - type: String, - default: '', + num: { + type: Object, + default: { + aTotalNum: 0, + aTotalPrice: 0, + bTotalNum: 0, + bTotalPrice: 0, + cTotalNum: 0, + cTotalPrice: 0, + tenantId: 0, + totalNum: 0, + totalPrice: 0, + xiaFaNum: 0, + zhanYouPercent: 0, + }, }, + }, + watch:{ + num(){ + this.options.series[0].data = [ + {value: parseFloat(this.num.aTotalPrice), name: 'A绫�'}, + {value: parseFloat(this.num.bTotalPrice), name: 'B绫�'}, + {value: parseFloat(this.num.cTotalPrice), name: 'C绫�'}, + ] + this.myChart.setOption(this.options); + } }, data() { return { @@ -31,14 +53,6 @@ }, methods: { getCenterLine() { - // getCenterLine({ - // id: this.activeId, - // weekFlag: this.weekFlag, - // monthFlag: this.monthFlag, - // startDay: this.value2 ? this.value2[0] : null, - // endDay: this.value2 ? this.value2[1] : null - // }).then(res => { - // const data = res.data var chartDom = document.getElementById('LBJETJ'); this.myChart = echarts.init(chartDom); // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas @@ -62,7 +76,7 @@ series: [ { - name: 'Access From', + name: '绫诲埆閲戦缁熻', type: 'pie', minAngle: 2, // 鏈�灏忕殑鎵囧尯瑙掑害锛�0~360锛夛紝鐢ㄤ簬闃叉鏌愪釜鍊艰繃灏忓鑷存墖鍖哄お灏忓奖鍝嶄氦浜� avoidLabelOverlap: true, // 鏄惁鍚敤闃叉鏍囩閲嶅彔绛栫暐 @@ -82,11 +96,9 @@ } }, data: [ - { value: 100, name: '绛夌骇涓�' }, - { value: 100, name: '绛夌骇浜�' }, - { value: 100, name: '绛夌骇涓�' }, - - ] + {value: parseFloat(this.num.aTotalPrice), name: 'A绫�'}, + {value: parseFloat(this.num.bTotalPrice), name: 'B绫�'}, + {value: parseFloat(this.num.cTotalPrice), name: 'C绫�'},] }] }; this.options && this.myChart.setOption(this.options); diff --git a/admin-web/src/views/dashboard/components/LBSLTJ.vue b/admin-web/src/views/dashboard/components/LBSLTJ.vue index 92717d0..bb1ae99 100644 --- a/admin-web/src/views/dashboard/components/LBSLTJ.vue +++ b/admin-web/src/views/dashboard/components/LBSLTJ.vue @@ -10,15 +10,37 @@ </template> <script> import * as echarts from 'echarts'; -import * as dash from "@/api/dashboard/dash"; export default { name: 'LBSLTJ', props: { - activeId: { - type: String, - default: '', + num: { + type: Object, + default: { + aTotalNum: 0, + aTotalPrice: 0, + bTotalNum: 0, + bTotalPrice: 0, + cTotalNum: 0, + cTotalPrice: 0, + tenantId: 0, + totalNum: 0, + totalPrice: 0, + xiaFaNum: 0, + zhanYouPercent: 0, + }, }, + }, + watch: { + num() { + this.options.series[0].data = [ + {value: parseFloat(this.num.aTotalNum), name: 'A绫�'}, + {value: parseFloat(this.num.bTotalNum), name: 'B绫�'}, + {value: parseFloat(this.num.cTotalNum), name: 'C绫�'}, + + ] + this.myChart.setOption(this.options); + } }, data() { return { @@ -31,14 +53,6 @@ }, methods: { getCenterLine() { - // getCenterLine({ - // id: this.activeId, - // weekFlag: this.weekFlag, - // monthFlag: this.monthFlag, - // startDay: this.value2 ? this.value2[0] : null, - // endDay: this.value2 ? this.value2[1] : null - // }).then(res => { - // const data = res.data var chartDom = document.getElementById('LBSLTJ'); this.myChart = echarts.init(chartDom); // 鐩戝惉灞忓箷瀹藉害鍙樺寲锛氬綋娴忚鍣ㄥ彂鐢焤esize浜嬩欢鐨勬椂鍊欙紝瑙﹀彂echart鐨剅esize浜嬩欢锛岄噸缁榗anvas @@ -46,7 +60,7 @@ this.changeWidth(); }); this.options = { - color: [ '#1877FF','#5EDEA5','#F7BE12','#55C6E1','#ED653B'], + color: ['#1877FF', '#5EDEA5', '#F7BE12', '#55C6E1', '#ED653B'], tooltip: { trigger: 'axis', axisPointer: { @@ -62,7 +76,7 @@ series: [ { - name: 'Access From', + name: '绫诲埆鏁伴噺缁熻', type: 'pie', minAngle: 2, // 鏈�灏忕殑鎵囧尯瑙掑害锛�0~360锛夛紝鐢ㄤ簬闃叉鏌愪釜鍊艰繃灏忓鑷存墖鍖哄お灏忓奖鍝嶄氦浜� avoidLabelOverlap: true, // 鏄惁鍚敤闃叉鏍囩閲嶅彔绛栫暐 @@ -82,11 +96,9 @@ } }, data: [ - { value: 100, name: '绛夌骇涓�' }, - { value: 100, name: '绛夌骇浜�' }, - { value: 100, name: '绛夌骇涓�' }, - - ] + {value: parseFloat(this.num.aTotalNum), name: 'A绫�'}, + {value: parseFloat(this.num.bTotalNum), name: 'B绫�'}, + {value: parseFloat(this.num.cTotalNum), name: 'C绫�'},] }] }; this.options && this.myChart.setOption(this.options); @@ -108,6 +120,7 @@ width: 100%; border-radius: 10px; border: none; + .card-title-right { display: flex; align-items: center; diff --git a/admin-web/src/views/dashboard/components/XYZC.vue b/admin-web/src/views/dashboard/components/XYZC.vue index 89be963..08bbf4f 100644 --- a/admin-web/src/views/dashboard/components/XYZC.vue +++ b/admin-web/src/views/dashboard/components/XYZC.vue @@ -9,6 +9,7 @@ </div> </template> <script> +import {getGoodsNumByMonth} from '@/api/dashboard' import * as echarts from 'echarts'; export default { @@ -75,7 +76,7 @@ emphasis: { focus: 'series', }, - data: [320, 332, 301, 334, 320, 332, 301, 334, 320, 332, 301, 334], + data: [], lineStyle: { width: 2, // 澶栬竟绾垮搴� color: '#5BE1FD'// 澶栬竟绾块鑹� @@ -103,7 +104,7 @@ emphasis: { focus: 'series', }, - data: [220, 182, 191, 234, 220, 182, 191, 234, 220, 182, 191, 234], + data: [], lineStyle: { width: 2, // 澶栬竟绾垮搴� color: '#FFD15C'// 澶栬竟绾块鑹� @@ -127,6 +128,17 @@ ], }; this.options && this.myChart.setOption(this.options); + getGoodsNumByMonth().then(res=>{ + let xAxis0 = [] + let xAxis1 = [] + res.map(item=>{ + xAxis0.push(item.addTotalNum) + xAxis1.push(item.reduceTotalNum) + }) + this.options.series[0].data = xAxis0 + this.options.series[1].data = xAxis1 + this.myChart.setOption(this.options); + }) }, changeWidth() { this.myChart.resize(); diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue index d006b95..1d92ebb 100644 --- a/admin-web/src/views/dashboard/index.vue +++ b/admin-web/src/views/dashboard/index.vue @@ -7,24 +7,29 @@ <span class="font-18 font-bold">寰呭姙鍚嶇О</span> </div> <div class="f-r f-r-between m-b-10"> - <el-radio-group v-model="waitType" size="medium"> + <el-radio-group v-model="waitType" size="mini"> <el-radio-button label="1">鍏ㄩ儴</el-radio-button> </el-radio-group> <div class="to-more" @click="nav('/stock/transfer/transferissue')">鏌ョ湅鏇村 ></div> </div> <el-table :data="waitWorkData" class="top-tb" :show-header="false" size="medium"> - <el-table-column prop="number" align="center"></el-table-column> - <el-table-column prop="type" align="center" width="100"></el-table-column> - <el-table-column prop="orgName" align="center" width="100"></el-table-column> - <el-table-column prop="name" align="center" width="80"></el-table-column> - <el-table-column prop="createTime" align="center" width="180"> + <el-table-column prop="businessFormCode" align="center" width="130"></el-table-column> + <el-table-column prop="inWarehouseName" align="center" min-width="130"> + <template slot-scope="{row}"> + <el-tooltip class="item" effect="dark" :content="row.inWarehouseName " placement="top-start"> + <div class="font-14 color-333" style="width: 100%;white-space:nowrap;text-overflow: ellipsis;overflow: hidden">{{ row.inWarehouseName }}</div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column prop="operatorName" align="center" width="80"></el-table-column> + <el-table-column prop="createTime" align="center" width="160"> <template slot-scope="scope"> <span class="font-14 color-333">{{ formattTime(scope.row.createTime) }}</span> </template> </el-table-column> - <el-table-column prop="date" label="鎿嶄綔" align="center" width="120"> + <el-table-column prop="date" label="鎿嶄綔" fixed="right" align="center" width="80"> <template slot-scope="scope"> - <el-button @click.native.prevent="aduitThis(scope.row.id)" size="small" type="primary">澶勭悊</el-button> + <el-button @click.native.prevent="aduitThis(scope.row.id)" type="primary">澶勭悊</el-button> </template> </el-table-column> </el-table> @@ -36,7 +41,7 @@ <span class="font-18 font-bold">棰勮閫氱煡</span> </div> <div class="f-r f-r-between m-b-10"> - <el-radio-group size="medium" v-model="earlyWarningType" @change="changeEarlyWarning"> + <el-radio-group size="mini" v-model="earlyWarningType" @change="changeEarlyWarning"> <el-radio-button label="1">鍏ㄩ儴</el-radio-button> <el-radio-button label="2">缂鸿揣锛�12锛�</el-radio-button> <el-radio-button label="3">瓒呭嚭锛�3锛�</el-radio-button> @@ -70,42 +75,44 @@ <div class="f-r f-r-between total-list"> <div class="total-item"> <div class="font-14 color-666">鐗╁搧鏁伴噺</div> - <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">1200</span></div> + <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">{{goodsNumPrice.totalNum}}</span></div> </div> <div class="total-item"> <div class="font-14 color-666">璧勪骇鎬婚噾棰�</div> - <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">120.88</span>涓囧厓</div> + <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">{{goodsNumPrice.totalPrice}}</span>涓囧厓</div> </div> <div class="total-item"> <div class="font-14 color-666">鐗╁搧鍗犵敤鐜�</div> - <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">80%</span></div> + <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">{{goodsNumPrice.zhanYouPercent}}%</span></div> </div> <div class="total-item"> <div class="font-14 color-666">A绫荤墿鍝佹暟閲�</div> - <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">120</span></div> + <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">{{goodsNumPrice.aTotalNum}}</span></div> </div> <div class="total-item"> <div class="font-14 color-666">B绫荤墿鍝佹暟閲�</div> - <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">123</span></div> + <div class="font-14 color-333" style="margin-top:6px;"><span class="total-num">{{goodsNumPrice.bTotalNum}}</span></div> </div> </div> - <!-- 绫诲埆閲戦缁熻/绫诲埆鏁伴噺缁熻 --> + <!-- 绫诲埆閲戦缁熻/绫诲埆鏁伴噺缁熻 --> <el-row :gutter="20"> <el-col :span="12"> - <LBSLTJ></LBSLTJ> + <LBSLTJ :num="goodsNumPrice"></LBSLTJ> </el-col> <el-col :span="12"> - <LBJETJ></LBJETJ> + <LBJETJ :num="goodsNumPrice"></LBJETJ> </el-col> </el-row> - <!-- 璧勪骇澧為暱/鎶ュ簾缁熻鍥撅紙鏁伴噺锛�--> + <!-- 璧勪骇澧為暱/鎶ュ簾缁熻鍥撅紙鏁伴噺锛�--> <XYZC></XYZC> </div> </template> <script> +import {getGoodsNumPrice} from '@/api/dashboard' // 鍒涘缓Context import {LongToDateTime} from "@/utils/DateFormatter"; +import {transferList} from "@/api/stock/transfer"; const ComponentContext = require.context('./components', false, /\.vue$/i); let res_components = {}; @@ -119,14 +126,21 @@ components: {...res_components}, data() { return { + goodsNumPrice: { + aTotalNum: 0, + aTotalPrice: 0, + bTotalNum: 0, + bTotalPrice: 0, + cTotalNum: 0, + cTotalPrice: 0, + tenantId: 0, + totalNum: 0, + totalPrice: 0, + xiaFaNum: 0, + zhanYouPercent: 0, + }, waitType: '1', - waitWorkData: [ - {number: 'SJQ12345', type: '鐗╁搧鐢抽', orgName: '閲戣瀺涓氬姟閮�', name: '寮犱笁涓�', createTime: 20231127150606, id: 1}, - {number: 'SJQ12345', type: '鐗╁搧鐢抽', orgName: '閲戣瀺涓氬姟閮�', name: '寮犱笁涓�', createTime: 20231127150606, id: 2}, - {number: 'SJQ12345', type: '鐗╁搧鐢抽', orgName: '閲戣瀺涓氬姟閮�', name: '寮犱笁涓�', createTime: 20231127150606, id: 3}, - {number: 'SJQ12345', type: '鐗╁搧鐢抽', orgName: '閲戣瀺涓氬姟閮�', name: '寮犱笁涓�', createTime: 20231127150606, id: 4}, - {number: 'SJQ12345', type: '鐗╁搧鐢抽', orgName: '閲戣瀺涓氬姟閮�', name: '寮犱笁涓�', createTime: 20231127150606, id: 5}, - ], // 寰呭姙宸ヤ綔 + waitWorkData: [], // 寰呭姙宸ヤ綔 earlyWarningType: '1', earlyWarningData: [ {type: '鏂戒箰澶嶅嵃鏈虹⒊绮�', name: '鏂戒箰c2201', surplus: 4, createTime: 20231127150606, id: 1}, @@ -137,9 +151,21 @@ }; }, created() { - + this.init() + getGoodsNumPrice().then(res => { + this.goodsNumPrice = res + }) }, methods: { + init(){ + transferList({ + qryType: 0, + pageNum: 1, + pageSize: 5, + }).then((res) => { + this.waitWorkData = res.datas; + }); + }, // 鏍煎紡鍖栨椂闂� formattTime(time) { return LongToDateTime(time) @@ -170,8 +196,8 @@ earlyWarningType: this.earlyWarningType } }, - // 璺宠浆 - nav(url){ + // 璺宠浆 + nav(url) { this.$router.push(url) } } @@ -196,9 +222,11 @@ .top-tb { width: 100%; } ->>>.el-table__body{ + +> > > .el-table__body { min-height: 265px; } + .total-list { padding: 15px 0; } diff --git a/admin-web/src/views/departmentitem/itemdis/disDetails/index.vue b/admin-web/src/views/departmentitem/itemdis/disDetails/index.vue index edd496a..e8cdc6b 100644 --- a/admin-web/src/views/departmentitem/itemdis/disDetails/index.vue +++ b/admin-web/src/views/departmentitem/itemdis/disDetails/index.vue @@ -10,12 +10,12 @@ <el-row style="margin-top: 15px"> <el-col> <!--鍒楄〃--> - <my-table-v2 ref="myTable" :filter="filterFrom" :table="table" /> + <my-table-v2 ref="myTable" :filter="filterFrom" :table="table"/> </el-col> </el-row> <!--娣诲姞/缂栬緫寮圭獥--> - <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search" /> - <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false" /> + <edit v-if="editSetting.show" :setting="editSetting" @close="editSetting.show = false" @search="search"/> + <detail v-if="detailSetting.show" :setting="detailSetting" @close="detailSetting.show = false"/> </el-card> </el-container> </el-container> @@ -29,11 +29,12 @@ import edit from './edit'; import detail from '../distribution/detail'; import * as finsystenant from '@/api/baseSetting/finsystenant'; -import { getBaseUrl } from '@/utils/base'; +import {getBaseUrl} from '@/utils/base'; +import * as DateFormatter from "@/utils/DateFormatter"; export default { name: 'index', - components: { MyButton, MyTableV2, edit, detail }, + components: {MyButton, MyTableV2, edit, detail}, data() { return { // 鎼滅储妗� @@ -65,7 +66,7 @@ dataIndex: 'agencyId', label: '鏈烘瀯', placeholder: '璇烽�夋嫨', - optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, + optionsConfig: {url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null}, defaultValue: '', options: [], }, @@ -120,7 +121,7 @@ table: { showIndex: true, // 鏄惁鏄剧ず搴忓彿 expand: false, // 鏄惁鏄剧ず璇︽儏鏁版嵁 - url: SettingIplatform.apiBaseURL + '/pc/fin/sys/tenant/select/list', // 璇锋眰鍦板潃 + url: SettingIplatform.apiBaseURL + '/pc/l/wh/form/transfer/department/list', // 璇锋眰鍦板潃 // 宸ュ叿鏉� tools: { columnsCtrl: { @@ -136,20 +137,30 @@ }, // 鍒椾俊鎭� columns: [ - { title: '鍗曞彿', field: 'code', align: 'center' }, - { title: '鐗╁搧鍚嶇О', field: 'lv', align: 'center' }, - { title: '绫诲埆', field: 'lv', align: 'center' }, - { title: '瑙勬牸鍨嬪彿', field: 'lv', align: 'center' }, - { title: '鍒嗗彂鏁伴噺', field: 'summary', align: 'left' }, - { title: '鎵�灞炴満鏋�', field: 'summary', align: 'left' }, - { title: '閮ㄩ棬', field: 'summary', align: 'left' }, - { title: '鍒嗗彂浜�', field: 'summary', align: 'left' }, - { title: '鎿嶄綔鏃堕棿', field: 'summary', align: 'left' }, + {title: '鍗曞彿', field: 'businessFormCode', align: 'center', width: 130}, + {title: '鐗╁搧鍚嶇О', field: 'goodsName', align: 'left', minWidth: 140}, + { + title: '绫诲埆', field: 'type', align: 'center', formatter: (row) => { + return {value: row.type + '绫�'}; + }, + }, + {title: '瑙勬牸鍨嬪彿', field: 'goodsModelName', align: 'left', minWidth: 130}, + {title: '鍒嗗彂鏁伴噺', field: 'goodsCount', align: 'center'}, + {title: '鎵�灞炴満鏋�', field: 'tenantName', align: 'left', minWidth: 130}, + {title: '閮ㄩ棬', field: 'departmentName', align: 'left', minWidth: 130}, + {title: '鍒嗗彂浜�', field: 'operatorName', align: 'center'}, + { + title: '鎿嶄綔鏃堕棿', field: 'createTime', align: 'center', + width: 160, + formatter: (row) => { + return {value: DateFormatter.LongToDateTime(row.createTime)}; + }, + }, ], // 鎿嶄綔淇℃伅 operation: { show: true, // 鏄剧ず鎿嶄綔鍒� - width: '200', // 鍒楀 + width: 160, // 鍒楀 attr: [ { title: '浣跨敤浜�', @@ -180,7 +191,8 @@ }, }; }, - created() {}, + created() { + }, methods: { handleEdit(row) { this.editSetting.id = row.id; diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue b/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue index d3591d8..e0a6b7d 100644 --- a/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue +++ b/admin-web/src/views/departmentitem/itemdis/distribution/detail.vue @@ -3,35 +3,35 @@ <el-row :gutter="20"> <el-col :span="8"> <span>鍒嗗彂鍗曞彿锛�</span> - <span>SL2023001</span> + <span>{{detail.businessFormCode}}</span> </el-col> <el-col :span="8"> <span>鎵�灞炴満鏋勶細</span> - <span>娌冲崡鐪侀偖鏀垮垎鍏徃</span> + <span>{{detail.outAgencyName}}</span> </el-col> <el-col :span="8"> <span>閮ㄩ棬锛�</span> - <span>閲戣瀺涓氬姟閮�</span> + <span>{{detail.inWarehouseName}}</span> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 20px"> <el-col :span="8"> <span>鍒嗗彂浜猴細</span> - <span>寮犵埍鐢�</span> + <span>{{detail.outOperatorName}}</span> </el-col> <el-col :span="8"> <span>鍒嗗彂鏃堕棿锛�</span> - <span>2023-08-08 10:23:12</span> + <span>{{detail.createTime|formatTime}}</span> </el-col> <el-col :span="8"> <span>棰嗗彇浜猴細</span> - <span>鐜嬮儴闂�</span> + <span>{{detail.inOperatorName}}</span> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 20px"> <el-col :span="8"> <span>鑱旂郴鐢佃瘽锛�</span> - <span>18500000001</span> + <span>{{detail.tel}}</span> </el-col> </el-row> <el-row :gutter="20" style="margin-top: 20px"> @@ -42,67 +42,62 @@ </div> </el-col> </el-row> - <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.procureGoods" :key="goodsIndex"> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in detail.formTransferGoods" :key="goodsIndex"> <el-row :gutter="20"> <el-col :span="8"> <span>鐗╁搧鍒嗙被锛�</span> - <span>{{ goodsItem.baseCategoryName }}</span> + <span>{{ goodsItem.categoryName }}</span> </el-col> <el-col :span="8"> <span>鐗╁搧鍚嶇О锛�</span> - <span>{{ goodsItem.goodsTemplateName }}</span> + <span>{{ goodsItem.goodsName }}</span> </el-col> <el-col :span="8"> <span>鐗╁搧绫诲埆锛�</span> - <span>{{ goodsItem.supplier }}</span> + <span>{{ goodsItem.type }}绫�</span> </el-col> </el-row> - <div v-if="goodsItem.type===1"> - <el-table :data="goodsItem.models" :stripe="true" style="margin-top: 20px"> - <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> - <template slot-scope="scope"> - {{ scope.row.baseGoodsModelsName }} - </template> - </el-table-column> - <el-table-column label="鍗曚綅" align="center"> - <template slot-scope="scope"> - {{ scope.row.unit }} - </template> - </el-table-column> - <el-table-column prop="price" label="鍒嗗彂鏁伴噺" align="center"> - <template slot-scope="scope"> - {{ scope.row.price | formatPrice }} - </template> - </el-table-column> - <el-table-column prop="counts" label="浣跨敤浜�" align="center"> - <template slot-scope="scope"> - {{ scope.row.counts }} - </template> - </el-table-column> - <el-table-column prop="counts" label="鑱旂郴鐢佃瘽" align="center"> - <template slot-scope="scope"> - {{ scope.row.price * scope.row.counts | formatPrice}} - </template> - </el-table-column> - </el-table> - </div> - <div v-else> - <el-table-column prop="baseGoodsModelsName" label="瑙勬牸鍨嬪彿" align="center"> - <template slot-scope="scope"> - {{ scope.row.baseGoodsModelsName }} - </template> - </el-table-column> - <el-table-column label="鍗曚綅" align="center"> - <template slot-scope="scope"> - {{ scope.row.unit }} - </template> - </el-table-column> - <el-table-column prop="price" label="鍒嗗彂鏁伴噺" align="center"> - <template slot-scope="scope"> - {{ scope.row.price | formatPrice }} - </template> - </el-table-column> - </div> + <el-form> + <el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex"> + <el-col :span="10"> + <el-form-item label="瑙勬牸鍨嬪彿:" style="margin-bottom: 0"> + {{ mItem.baseGoodsModelsName }} + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label="鍗曚綅:" style="margin-bottom: 0" label-width="80"> + {{mItem.unit}} + </el-form-item> + </el-col> + <!--A绫诲晢鍝� --> + <el-col :span="24" v-if="goodsItem.type==='A'"> + <el-row v-for="(user, u) in mItem.useInfo"> + <el-col :span="6"> + <el-form-item label="鍒嗗彂鏁伴噺:" style="margin-bottom: 0" label-width="80"> + {{user.num}} + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="浣跨敤浜�:" style="margin-bottom: 0" label-width="80"> + {{user.name}} + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label="鑱旂郴鐢佃瘽:" style="margin-bottom: 0" label-width="80"> + {{user.tel}} + </el-form-item> + </el-col> + </el-row> + </el-col> + <!--BC绫诲晢鍝� --> + <el-col style="padding: 10px 0" :span="10" v-else> + <el-form-item label="鍒嗗彂鏁伴噺:" prop="counts" style="margin-bottom: 0" label-width="80"> + {{mItem.counts}} + </el-form-item> + </el-col> + </el-row> + </el-form> + </div> <div id="uploadPreviewImages" style="display: none"> <span v-for="(src, index) in fileList" :key="index"> @@ -118,16 +113,22 @@ </win-lg> </template> <script> -import { procureDetail } from '@/api/stock/procure/purchaseOrder'; +import { transferDetail } from '@/api/stock/transfer'; import winLg from '@/components/win/win-lg'; import * as DateFormatter from '@/utils/DateFormatter'; import { getDownUrl } from '@/utils/base'; import Viewer from 'viewerjs'; import 'viewerjs/dist/viewer.css'; +import de from "element-ui/src/locale/lang/de"; let viewer = null; export default { + computed: { + de() { + return de + } + }, components: { winLg }, props: { setting: { @@ -164,7 +165,7 @@ } }, created() { - procureDetail({ id: this.setting.id }).then((res) => { + transferDetail({ id: this.setting.id }).then((res) => { this.detail = res; this.fileList = this.detail.procureDoc ? JSON.parse(this.detail.procureDoc) : []; this.$nextTick(() => { @@ -225,4 +226,10 @@ </script> <style lang="scss" scoped> //@import url(../../../../styles/store.scss); +.card3 { + padding: 10px; + margin-top: 10px; + border-radius: 2px; + background: #ffffff; +} </style> diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue index ac9c234..1a44026 100644 --- a/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue +++ b/admin-web/src/views/departmentitem/itemdis/distribution/edit.vue @@ -1,36 +1,37 @@ <template> - <win-md class="stock-edit" title="鐗╁搧鍒嗗彂" @close="close" :width="'800px'"> - <el-form class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> + <win-md class="stock-edit" title="鐗╁搧鍒嗗彂" @close="close" width="900px"> + <el-form v-loading="loading" class="form" ref="ruleForm" :model="formData" :rules="rules" label-width="120px"> <div class="main-w"> <el-row :gutter="24" class="headerHeight"> <el-col :span="12"> - <el-form-item label="閮ㄩ棬" prop="warehouseId"> - <el-select v-model="formData.warehouseId" placeholder="璇烽�夋嫨" style="width: 100%"> - <el-option v-for="item in departmentOptions" :key="item.id" :label="item.name" :value="item.id" /> + <el-form-item label="閮ㄩ棬" prop="departmentId"> + <el-select ref="department" v-model="formData.departmentId" placeholder="璇烽�夋嫨" style="width: 100%"> + <el-option v-for="item in departmentOptions" :key="item.id" :label="item.name" :value="item.id" + clearable/> </el-select> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="棰嗗彇浜�" prop="warehouseId"> - <el-input v-model="formData.warehouseId" placeholder="璇疯緭鍏�"></el-input> + <el-form-item label="棰嗗彇浜�" prop="operatorName"> + <el-input v-model="formData.operatorName" placeholder="璇疯緭鍏�" clearable></el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24" class="headerHeight"> <el-col :span="12"> - <el-form-item label="鑱旂郴鐢佃瘽" prop="buyType"> - <el-input v-model.number="formData.buyType" placeholder="璇疯緭鍏�"></el-input> + <el-form-item label="鑱旂郴鐢佃瘽" prop="tel"> + <el-input v-model.number="formData.tel" placeholder="璇疯緭鍏�" clearable></el-input> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="閲囪喘鏃堕棿" prop="procureTime"> + <el-form-item label="棰嗗彇鏃堕棿" prop="createTime"> <el-date-picker - v-model="formData.procureTime" - type="datetime" - value="yyyy-MM-dd HH:mm:ss" - value-format="yyyyMMddHHmmss" - placeholder="璇烽�夋嫨鏃ユ湡" - style="width: 100%" + v-model="formData.createTime" + type="datetime" + clearable + value-format="yyyyMMddHHmmss" + placeholder="璇烽�夋嫨鏃ユ湡" + style="width: 100%" > </el-date-picker> </el-form-item> @@ -43,46 +44,49 @@ </el-form-item> </el-col> </el-row> - <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.procureGoods" :key="goodsIndex"> + <div class="goods-card" v-for="(goodsItem, goodsIndex) in formData.transferGoods" :key="goodsIndex"> <el-row :gutter="24"> <el-col :span="12"> <el-form-item - label="鐗╁搧鍒嗙被" - :prop="`procureGoods[${goodsIndex}].baseCategoryIds`" - :rules="{ + label="鐗╁搧鍒嗙被" + :prop="`transferGoods.${goodsIndex}.baseCategoryId`" + :rules="{ required: true, - message: '璇烽�夋嫨', + message: '璇烽�夋嫨鐗╁搧鍒嗙被', trigger: 'change', }" > <el-cascader - v-model="goodsItem.baseCategoryIds" - :options="categoryOptions" - :props="{ value: 'id' }" - @change="categoryChange($event, goodsIndex)" - style="width: 100%" + v-model="goodsItem.baseCategoryId" + :options="categoryOptions" + :props="{ value: 'id',emitPath: false }" + :show-all-levels="false" + clearable + @change="categoryChange($event, goodsIndex)" + style="width: 100%" ></el-cascader> </el-form-item> </el-col> <el-col :span="12"> <el-form-item - label="鐗╁搧鍚嶇О" - :prop="`procureGoods[${goodsIndex}].baseGoodsTemplateId`" - :rules="rules.baseGoodsTemplateId" + label="鐗╁搧鍚嶇О" + :prop="`transferGoods.${goodsIndex}.baseGoodsTemplateId`" + :rules="rules.baseGoodsTemplateId" > <el-select - v-model="goodsItem.baseGoodsTemplateId" - placeholder="璇峰厛鎷╃墿鍝佸垎绫�" - filterable - :disabled="!goodsItem.baseCategoryId" - style="width: 100%" - @change="goodsTemplateChange($event, goodsIndex)" + v-model="goodsItem.baseGoodsTemplateId" + placeholder="璇烽�夋嫨鐗╁搧" + filterable + clearable + :disabled="!goodsItem.baseCategoryId" + style="width: 100%" + @change="goodsTemplateChange($event, goodsIndex)" > <el-option - v-for="item in goodsItem.goodsOptions" - :key="item.id" - :label="item.goodsName" - :value="item.id" + v-for="item in goodsItem.goodsOptions" + :key="item.id" + :label="item.goodsName" + :value="item.id" /> </el-select> </el-form-item> @@ -91,136 +95,154 @@ <el-row :gutter="24"> <el-col :span="12"> <el-form-item - label="瑙勬牸鍨嬪彿" - :prop="`procureGoods[${goodsIndex}].modelsIds`" - :rules="{required: true,message: '璇烽�夋嫨',trigger: 'change',}"> + label="瑙勬牸鍨嬪彿" + :prop="`transferGoods.${goodsIndex}.modelsIds`" + :rules="{required: true,message: '璇烽�夋嫨',trigger: 'change',}"> <el-select - v-model="goodsItem.modelsIds" - multiple - placeholder="璇峰厛鎷╃墿鍝佸悕绉�" - :disabled="!goodsItem.baseCategoryId" - @change="modelChange($event, goodsIndex)" - @remove-tag="modelRemoveTag($event, goodsIndex)" - style="width: 100%" + v-model="goodsItem.modelsIds" + multiple + placeholder="璇烽�夋嫨鐗╁搧瑙勬牸鍨嬪彿" + :disabled="!goodsItem.baseCategoryId" + @change="modelChange($event, goodsIndex)" + @remove-tag="modelRemoveTag($event, goodsIndex)" + style="width: 100%" > <el-option - v-for="item in goodsItem.modelsOptions" - :key="item.id" - :label="item.modelName" - :value="item.id" + v-for="item in goodsItem.modelsOptions" + :key="item.id" + :label="item.modelName" + :value="item.id" /> </el-select> </el-form-item> </el-col> </el-row> <el-row class="card3" v-for="(mItem, mIndex) in goodsItem.models" :key="mIndex"> - <el-row :gutter="24" type="flex" align="middle" style="height: 50px"> - <el-col :span="8"> - <el-form-item label="瑙勬牸鍨嬪彿:" prop="baseGoodsModelsId" style="margin-bottom: 0"> - {{ getGoodsModelsName(mItem.baseGoodsModelsId) }} - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item label="鍓╀綑鏁伴噺:" prop="baseGoodsModelsId" style="margin-bottom: 0" label-width="80"> - 50 - </el-form-item> - </el-col> - <!--A绫诲晢鍝� --> - <el-col :span="24" v-if="goodsItem.type===1"> - <el-table :data="mItem.clist" :stripe="true" > - <el-table-column prop="count" label="鍒嗗彂鏁伴噺" align="center"> - <template slot-scope="scope"> - <el-input v-model="scope.row.count"></el-input> - </template> - </el-table-column> - <el-table-column prop="count" label="浣跨敤浜�" align="center"> - <template slot-scope="scope"> - <el-input v-model="scope.row.user" maxlength="20"></el-input> - </template> - </el-table-column> - <el-table-column prop="count" label="鑱旂郴鐢佃瘽" align="center"> - <template slot-scope="scope"> - <el-input v-model.number="scope.row.phone" maxlength="11"></el-input> - </template> - </el-table-column> - <el-table-column align="left" width="60"> - <template slot-scope="scope"> - <i - v-if="mItem.clist.length > 1" + <el-col style="padding: 10px 0" :span="10"> + <el-form-item label="瑙勬牸鍨嬪彿:" style="margin-bottom: 0"> + {{ getGoodsModelsName(mItem.baseGoodsModelsId) }} + </el-form-item> + </el-col> + <el-col style="padding: 10px 0" :span="4"> + <el-form-item label="鍓╀綑鏁伴噺:" style="margin-bottom: 0" label-width="80"> + {{ mItem.worehouseCount }} + </el-form-item> + </el-col> + <!--A绫诲晢鍝� --> + <el-col :span="24" v-if="goodsItem.classification==='A'"> + <el-table :data="mItem.procureModelUserList" :stripe="true"> + <el-table-column label="鍒嗗彂鏁伴噺" align="center"> + <template slot-scope="{$index,row}"> + <el-form-item + :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.goodsNum`" + label-width="0" + > + <el-input v-model="row.goodsNum" style="width: 100%"></el-input> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="nowUserName" label="浣跨敤浜�" align="center"> + <template slot-scope="{$index,row}"> + <el-form-item + :prop="`transferGoods.${goodsIndex}.models.${mIndex}.procureModelUserList.${$index}.nowUserName`" + label-width="0" + > + <el-input v-model="row.nowUserName" style="width: 100%"></el-input> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="nowUserPhone" label="鑱旂郴鐢佃瘽" align="center"> + <template slot-scope="{$index,row}"> + <el-form-item + :prop="`transferGoods.${goodsIndex}.models.${mIndex}].procureModelUserList.${$index}.nowUserPhone`" + label-width="0" + > + <el-input v-model="row.nowUserPhone" style="width: 100%"></el-input> + </el-form-item> + </template> + </el-table-column> + <el-table-column align="left" width="60"> + <template slot-scope="scope"> + <i + v-if="mItem.procureModelUserList.length > 1" class="el-icon-remove-outline" style="color: #f56c6c; font-size: 16px; cursor: pointer" @click="handleDel(goodsIndex, mIndex, scope.$index)" - ></i> - <i - v-if="mItem.clist.length - 1 == scope.$index" + ></i> + <i + v-if="mItem.procureModelUserList.length - 1 == scope.$index" class="el-icon-circle-plus-outline" style="color: #0d997c; font-size: 16px; cursor: pointer" @click="handleAdd(goodsIndex, mIndex, scope.$index)" - ></i> - </template> - </el-table-column> - </el-table> - </el-col> - <!--BC绫诲晢鍝� --> - <el-col :span="10" v-else> - <el-form-item label="鍒嗗彂鏁伴噺:" prop="baseGoodsModelsId" style="margin-bottom: 0" label-width="80"> - <el-input v-model.number="mItem.count" style="width: 160px;"></el-input> - </el-form-item> - </el-col> - </el-row> + ></i> + </template> + </el-table-column> + </el-table> + </el-col> + <!--BC绫诲晢鍝� --> + <el-col style="padding: 10px 0" :span="10" v-else> + <el-form-item + label="鍒嗗彂鏁伴噺:" + :prop="`transferGoods.${goodsIndex}.models.${mIndex}.counts`" + style="margin-bottom: 0" label-width="80"> + <el-input v-model.number="goodsItem.models[mIndex].counts" style="width: 160px;"></el-input> + </el-form-item> + </el-col> </el-row> <div class="btn-group"> <el-button - v-if="formData.procureGoods.length > 1" - name="绉婚櫎" - type="danger" - plain - size="mini" - @click="removeGoods(goodsIndex)" - >绉婚櫎</el-button> + v-if="formData.transferGoods.length > 1" + name="绉婚櫎" + type="danger" + plain + size="mini" + @click="removeGoods(goodsIndex)" + >绉婚櫎 + </el-button> <el-button - v-if="formData.procureGoods.length - 1 == goodsIndex" - name="鏂板鐗╁搧" - type="primary" - plain - size="mini" - @click="addGoods" - >鏂板鐗╁搧</el-button> + v-if="formData.transferGoods.length - 1 == goodsIndex" + name="鏂板鐗╁搧" + type="primary" + plain + size="mini" + @click="addGoods" + >鏂板鐗╁搧 + </el-button> </div> </div> </div> </el-form> <div slot="footer" align="center" class="dialog-footer"> - <my-button name="鍙栨秷" site="form" @click="close" /> - <my-button name="淇濆瓨" site="form" @click="handleSubmit" /> + <my-button name="鍙栨秷" site="form" @click="close"/> + <my-button name="淇濆瓨" site="form" @click="handleSubmit"/> </div> </win-md> </template> <script> import { goodsTemplate, - procureAdd, - procureEdit, - selectTenantWarehouse, goodsModel, - procureDetail, } from '@/api/stock/procure/purchaseOrder'; -import { departmentListAll } from '@/api/system/deptment'; -import { getTree } from '@/api/foudation/classification'; +import { + transferAdd +} from '@/api/stock/transfer'; +import {departmentListAll} from '@/api/system/deptment'; +import {getTree} from '@/api/foudation/classification'; import MyButton from '@/components/myButton/myButton'; import winMd from '@/components/win/win-md'; import upload from '@/components/upload/index'; -import { getUploadUrl, getDownUrl } from '@/utils/base'; -import { findParentIds } from '@/utils/index'; -import { mapGetters } from 'vuex'; +import {getUploadUrl} from '@/utils/base'; +import {mapGetters} from 'vuex'; import * as DateFormatter from '@/utils/DateFormatter'; +import {warehouseSelectNumber} from "@/api/baseSetting/finsystenant"; export default { - components: { MyButton, winMd, upload }, + components: {MyButton, winMd, upload}, props: { setting: { type: Object, - default: () => {}, + default: () => { + }, }, }, data() { @@ -230,7 +252,7 @@ if (!value) { return callback(new Error('璇烽�夋嫨')); } - let temp = this.formData.procureGoods.filter((v) => v.baseGoodsTemplateId == value); + let temp = this.formData.transferGoods.filter((v) => v.baseGoodsTemplateId == value); if (!temp || temp.length != 1) { return callback(new Error('宸查�夎繃姝ょ墿鍝�')); } @@ -269,18 +291,20 @@ categoryOptions: [], // 鐗╁搧鍒嗙被鍒楄〃 modelList: [], //鍨嬪彿鍒楄〃 formData: { + transferBusinessType: 1, // 鍗曟嵁绫诲瀷銆�0浠撳簱璋冩嫧锛�1閮ㄩ棬鍒嗗彂锛�2閮ㄩ棬鐗╁搧鍥為�� + departmentId: '', // 閮ㄩ棬id + departmentName: '', // 閮ㄩ棬鍚嶇О + operatorName: '', // 棰嗗彇浜� + tel: '', // 鑱旂郴鐢佃瘽 + createTime: DateFormatter.formatDate(new Date(), 'yyyyMMddhhmmss'), // 鍒嗗彂鏃堕棿 procureDoc: '', - warehouseId: '', // 鍏ュ簱浠撳簱id - procureTime: DateFormatter.formatDate(new Date()), // 閲囪喘鏃堕棿 - procureGoods: [], + transferGoods: [], }, goodsItem: { - baseCategoryIds: '', // 鍒嗙被缂栧彿鏁扮粍 baseCategoryId: '', // 鍒嗙被缂栧彿 + classification: '', baseGoodsTemplateId: '', // 鐗╁搧妯$増缂栧彿 goodsTemplateName: '', // 鐗╁搧妯$増鍚嶇О - supplier: '', // 渚涘簲鍟� - sort: '', // 鏄剧ず椤哄簭 goodsOptions: [], // 鐗╁搧鍒楄〃select modelsOptions: [], //瑙勬牸鍨嬪彿select models: [], // 鐗╁搧鍚嶇О @@ -288,23 +312,38 @@ }, modelsItem: { baseGoodsModelsId: '', // 瑙勬牸鍨嬪彿缂栧彿 - syCount: '', + procureModelUserList: [], + counts: '', }, clistItem: { - count: null, - user: null, - phone: null, + goodsNum: null, + nowUserName: null, + nowUserPhone: null, }, rules: { - warehouseId: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], - procureTime: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], - buyType: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], + departmentId: [{required: true, message: '璇烽�夋嫨閮ㄩ棬', trigger: 'change'}], + operatorName: [{required: true, message: '璇峰~鍐欓鍙栦汉', trigger: 'blur'}], + tel: [{required: true, message: '璇峰~鍐欒仈绯荤數璇�', trigger: 'blur'}], + createTime: [{required: true, message: '璇烽�夋嫨鍒嗗彂鏃堕棿', trigger: 'change'}], + procureDoc: [{required: true, message: '璇蜂笂浼犲鎵规墜缁�', trigger: 'change'}], + baseCategoryIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}], + baseGoodsTemplateId: [{validator: checkGoodsTemplateId, trigger: ['blur', 'change']}], + modelsIds: [{required: true, message: '璇烽�夋嫨', trigger: 'change'}], + transferGoods:{ + models:{ + counts: [ + { required: true, message: '璇疯緭鍏�', trigger: 'change' }, + { type: 'number', message: '鏁伴噺蹇呴』涓烘暣鏁�' }, + ], + procureModelUserList:{ + goodsNum: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + nowUserName: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + nowUserPhone: [ { required: true, message: '璇疯緭鍏�', trigger: 'blur' }], + } + } + } - procureDoc: [{ required: true, message: '璇蜂笂浼�', trigger: 'change' }], - baseCategoryIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], - baseGoodsTemplateId: [{ validator: checkGoodsTemplateId, trigger: ['blur', 'change'] }], - modelsIds: [{ required: true, message: '璇烽�夋嫨', trigger: 'change' }], - counts: [{ validator: checkCounts, trigger: 'blur' }], + }, uploadSettings: { @@ -334,7 +373,7 @@ // 鑾峰彇鐗╁搧鍒嗙被鍒楄〃 const treeRes = await getTree(); this.categoryOptions = this.removeEmptyChildren(treeRes); - if (this.setting.id) { + /*if (this.setting.id) { const detail = await procureDetail({ id: this.setting.id }); this.formData = Object.assign(this.formData, detail); if (this.formData.procureDoc) { @@ -342,40 +381,38 @@ } this.$set(this.formData, 'buyType', this.formData.buyType.toString()); this.formData.procureTime = this.formData.procureTime.toString(); - this.formData.procureGoods.map((item, index) => { - // 鏍规嵁瀛愰泦ID鎷兼帴鐗╁搧鍒嗙被鍒楄〃 - item.baseCategoryIds = findParentIds(this.categoryOptions, item.baseCategoryId); + this.formData.transferGoods.map((item, index) => { this.$set( - this.formData.procureGoods[index], + this.formData.transferGoods[index], 'modelsIds', item.models.map((v) => v.baseGoodsModelsId), ); this.getgoodsTemplate(item.baseCategoryId, index); this.getgoodsModel(item.baseGoodsTemplateId, index); item.models.forEach((child, childIndex) => { - this.$set(this.formData.procureGoods[index].models[childIndex], 'priceYuan', child.price / 100); + this.$set(this.formData.transferGoods[index].models[childIndex], 'priceYuan', child.price / 100); }); return item; }); - } + }*/ }, // 鑾峰彇鍏ュ簱浠撳簱鍒楄〃 getdeptmentList() { - departmentListAll({ agencyId: this.userInfo.tenantId }) - .then((res) => { - this.departmentOptions = res; - if (!this.setting.id && res.length) { - this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); - } - if (this.departmentOptions.length && !this.formData.warehouseId) { - // 榛樿閫変腑绗竴涓粨搴� - this.formData.warehouseId = this.departmentOptions[0].id; - } - }) - .catch((err) => { - console.log('err', err); - }); + departmentListAll({agencyId: this.userInfo.tenantId}) + .then((res) => { + this.departmentOptions = res; + if (!this.setting.id && res.length) { + this.formData.transferGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + } + if (this.departmentOptions.length && !this.formData.warehouseId) { + // 榛樿閫変腑绗竴涓粨搴� + this.formData.warehouseId = this.departmentOptions[0].id; + } + }) + .catch((err) => { + console.log('err', err); + }); }, removeEmptyChildren(arr) { @@ -391,9 +428,10 @@ // 鑾峰彇鐗╁搧鍚嶇О鍒楄〃 getgoodsTemplate(id, index) { - goodsTemplate({ categoryId: id || '' }).then((res) => { + goodsTemplate({categoryId: id || '', agencyId: this.userInfo.tenantId}).then((res) => { if (index || index == 0) { - this.$set(this.formData.procureGoods[index], 'goodsOptions', res); + this.$set(this.formData.transferGoods[index], 'goodsOptions', res); + this.$set(this.formData.transferGoods[index], 'classification', res[0].classification); } else { this.goodsTemplatelAll = res; } @@ -402,9 +440,9 @@ // 瑙勬牸鍨嬪彿 getgoodsModel(id, index) { - goodsModel({ goodsTemplatesId: id || '' }).then((res) => { + goodsModel({goodsTemplatesId: id || '', agencyId: this.userInfo.tenantId}).then((res) => { if (index || index == 0) { - this.$set(this.formData.procureGoods[index], 'modelsOptions', res); + this.$set(this.formData.transferGoods[index], 'modelsOptions', res); } else { this.goodsModelAll = res; } @@ -431,60 +469,65 @@ // 鐗╁搧鍒嗙被閫夋嫨 categoryChange(e, index) { - this.formData.procureGoods[index].goodsOptions = []; - this.formData.procureGoods[index].baseGoodsTemplateId = ''; - this.formData.procureGoods[index].goodsTemplateName = ''; - this.formData.procureGoods[index].modelsOptions = []; - this.formData.procureGoods[index].modelsIds = []; - this.formData.procureGoods[index].models = []; - - this.formData.procureGoods[index].baseCategoryId = e[e.length - 1]; + this.formData.transferGoods[index].goodsOptions = []; + this.formData.transferGoods[index].baseGoodsTemplateId = ''; + this.formData.transferGoods[index].goodsTemplateName = ''; + this.formData.transferGoods[index].modelsOptions = []; + this.formData.transferGoods[index].modelsIds = []; + this.formData.transferGoods[index].models = []; // 鏍规嵁閫変腑鍒嗙被璇锋眰鐗╁搧鍚嶇О鍒楄〃 - this.getgoodsTemplate(e[e.length - 1], index); + this.getgoodsTemplate(e, index); }, // 鐗╁搧鍚嶇О鍒楄〃 goodsTemplateChange(e, index) { - this.formData.procureGoods[index].modelsOptions = []; - this.formData.procureGoods[index].modelsIds = []; - this.formData.procureGoods[index].models = []; + this.formData.transferGoods[index].modelsOptions = []; + this.formData.transferGoods[index].modelsIds = []; + this.formData.transferGoods[index].models = []; - this.formData.procureGoods[index].goodsTemplateName = this.getGoodsTemplateName(e); + this.formData.transferGoods[index].goodsTemplateName = this.getGoodsTemplateName(e); // 鏍规嵁閫変腑鐗╁搧鍚嶇Оid鑾峰彇瑙勬牸鍨嬪彿鍒楄〃 this.getgoodsModel(e, index); }, // 瑙勬牸鍨嬪彿閫夋嫨 - modelChange(e, index) { - let arr = [...this.formData.procureGoods[index].models]; + async modelChange(e, index) { + let arr = [...this.formData.transferGoods[index].models]; let str = JSON.stringify(arr); - e.forEach((item) => { - if (str.indexOf(item) == -1) { - let clist = [JSON.parse(JSON.stringify(this.clistItem))]; - arr.push({ ...this.modelsItem, baseGoodsModelsId: item, clist }); + for (const item of e) { + if (str.indexOf(item) === -1) { + let num = await warehouseSelectNumber({ + baseGoodsModelsId: item, + warehouseType: 0, + states: 1, + agencyId: this.userInfo.tenantId, + }); + let procureModelUserList = [JSON.parse(JSON.stringify(this.clistItem))]; + arr.push({...this.modelsItem, baseGoodsModelsId: item, procureModelUserList, worehouseCount: num}); + // arr.push({...this.modelsItem, baseGoodsModelsId: item, procureModelUserList}); } - }); - this.formData.procureGoods[index].models = arr; + } + this.formData.transferGoods[index].models = arr; }, // 瑙勬牸鍨嬪彿绉婚櫎 modelRemoveTag(e, index) { - let arr = this.formData.procureGoods[index].models; + let arr = this.formData.transferGoods[index].models; let delIndex = arr.findIndex((v) => v.baseGoodsModelsId == e); - this.formData.procureGoods[index].models.splice(delIndex, 1); + this.formData.transferGoods[index].models.splice(delIndex, 1); }, //鍨嬪彿鍒嗗彂鏂板 handleAdd(goodsIndex, mIndex, cIndex) { - this.formData.procureGoods[goodsIndex].models[mIndex].clist.push(JSON.parse(JSON.stringify(this.clistItem))); + this.formData.transferGoods[goodsIndex].models[mIndex].procureModelUserList.push(JSON.parse(JSON.stringify(this.clistItem))); }, handleDel(goodsIndex, mIndex, cIndex) { - this.formData.procureGoods[goodsIndex].models[mIndex].clist.splice(cIndex, 1); + this.formData.transferGoods[goodsIndex].models[mIndex].procureModelUserList.splice(cIndex, 1); }, // 浠锋牸input鐩戝惉 杞负鍒� priceChange(e, goodsIndex, index) { - this.formData.procureGoods[goodsIndex].models[index].price = e * 100; + this.formData.transferGoods[goodsIndex].models[index].price = e * 100; }, // 涓婁紶 @@ -495,43 +538,46 @@ // 鐐瑰嚮鏂板鐗╁搧 addGoods() { - this.formData.procureGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); + this.formData.transferGoods.push(JSON.parse(JSON.stringify(this.goodsItem))); }, // 鐐瑰嚮绉婚櫎 removeGoods(index) { - this.formData.procureGoods.splice(index, 1); + this.formData.transferGoods.splice(index, 1); }, // 鎻愪氦 handleSubmit() { + console.log('formData', this.formData); this.$refs['ruleForm'].validate((valid) => { if (valid) { - console.log('formData', this.formData); - debugger; - if (!this.setting.id) { - procureAdd(this.formData) + this.formData.transferGoods.map(goods => { + goods.models.map(mod => { + if (goods.classification === 'A') { + let counts = 0 + mod.procureModelUserList.map(user => { + counts += parseInt(user.goodsNum || '0') + }) + mod.counts = counts + } + }) + }) + + this.formData.departmentName = this.$refs.department.selected.currentLabel + this.formData.outAgencyId = this.userInfo.tenantId + this.loading = true + transferAdd(this.formData) .then((res) => { + this.loading = false this.$message.success('淇濆瓨鎴愬姛锛�'); this.close(); this.$emit('search'); }) .catch((err) => { + this.loading = false console.log('create err', err); this.$message.error('淇濆瓨澶辫触'); }); - } else { - procureEdit(this.formData) - .then((res) => { - this.$message.success('淇濆瓨鎴愬姛锛�'); - this.close(); - this.$emit('search'); - }) - .catch((err) => { - console.log('edit err', err); - this.$message.error('淇濆瓨澶辫触'); - }); - } } else { this.$message.error('鏍¢獙鏈�氳繃锛岃妫�鏌ャ��'); } @@ -542,7 +588,7 @@ this.formData = { warehouseId: '', // 鍏ュ簱浠撳簱id procureTime: '', // 閲囪喘鏃堕棿 - procureGoods: [], + transferGoods: [], }; this.$emit('close'); }, @@ -551,6 +597,7 @@ </script> <style scoped lang="scss"> @import url(../../../../styles/store.scss); + .card3 { border-radius: 2px; background: #ffffff; diff --git a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue index 5dfbca1..4f55539 100644 --- a/admin-web/src/views/departmentitem/itemdis/distribution/index.vue +++ b/admin-web/src/views/departmentitem/itemdis/distribution/index.vue @@ -27,15 +27,15 @@ </div> </div> <div class="one-hed"> - <div class="box"><span class="span-two">閮ㄩ棬锛�</span>{{ item.agencyId }}</div> - <div class="box"><span class="span-two">鍒嗗彂浜猴細</span>{{ item.buyerName }}</div> + <div class="box"><span class="span-two">閮ㄩ棬锛�</span>{{ item.inWarehouseName }}</div> + <div class="box"><span class="span-two">棰嗗彇浜猴細</span>{{ item.inOperatorName }}</div> <div class="box"> - <span class="span-two">鍒嗗彂鏃堕棿锛�</span>{{ item.procureTime | formatTime }} + <span class="span-two">棰嗗彇鏃堕棿锛�</span>{{ item.createTime | formatTime }} </div> </div> <div class="card-end"> - <div v-for="(just, index) in item.fromProcureTemplateInfoList" :key="index" class="item"> - <div class="name">{{ just.goodsTemplateName }}</div> + <div v-for="(just, index) in item.fromTransferTemplateInfoList" :key="index" class="item"> + <div class="name">{{ just.goodsName }}</div> <div class="value-box"> <div class="value-box-item"> <span class="label">鏁伴噺锛�</span> @@ -49,7 +49,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination :small="false" @@ -83,7 +83,7 @@ </template> <script> -import { procureList, procureDel, procureIncome } from '@/api/stock/procure/purchaseOrder'; +import { transferList} from '@/api/stock/transfer'; import MyButton from '@/components/myButton/myButton'; import SettingIplatform from '@/utils/settingIplatform'; import myImport from '@/views/components/myImport'; @@ -111,6 +111,15 @@ defaultValue: '', }, { + type: 'cascader', + dataIndex: 'agencyId', + label: '鍒嗗彂閮ㄩ棬', + placeholder: '璇烽�夋嫨', + optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, + defaultValue: '', + options: [], + }, + { type: 'select', dataIndex: 'goodsTemplateId', label: '鐗╁搧鍚嶇О', @@ -124,30 +133,21 @@ }, }, { - type: 'cascader', - dataIndex: 'agencyId', - label: '鍒嗗彂閮ㄩ棬', - placeholder: '璇烽�夋嫨', - optionsConfig: { url: '/pc/fin/sys/tenant/select/tree_fin_tenant', props: null }, - defaultValue: '', - options: [], - }, - { type: 'text', - dataIndex: 'createName', - label: '鍒嗗彂浜�', + dataIndex: 'operatorName', + label: '棰嗗彇浜�', placeholder: '璇疯緭鍏�', defaultValue: '', }, { type: 'date-picker', - dataIndex: 'incomeTimeStart', - label: '鍒嗗彂鏃堕棿', + dataIndex: 'startTime', + label: '棰嗗彇鏃堕棿', defaultValue: '', }, { type: 'date-picker', - dataIndex: 'incomeTimeEnd', + dataIndex: 'endTime', label: '鑷�', defaultValue: '', }, @@ -162,7 +162,8 @@ methods: { fetchData() { this.loading = true; - procureList({ + transferList({ + qryType: 1, pageNum: this.pageNum, pageSize: this.pageSize, ...this.filterFrom, @@ -170,17 +171,10 @@ this.list = res.datas; this.total = res.totalRows; this.loading = false; - console.log(this.list); }); }, fifterForm(params) { this.filterFrom = Object.assign(this.filterFrom, params); - if (this.filterFrom.incomeTimeStart) { - this.filterFrom.incomeTimeStart = this.filterFrom.incomeTimeStart.replace(/\-/g, ''); - } - if (this.filterFrom.incomeTimeEnd) { - this.filterFrom.incomeTimeEnd = this.filterFrom.incomeTimeEnd.replace(/\-/g, ''); - } this.search(1); }, }, diff --git a/admin-web/src/views/departmentitem/itemret/returnNote/index.vue b/admin-web/src/views/departmentitem/itemret/returnNote/index.vue index 4f29e45..47b57af 100644 --- a/admin-web/src/views/departmentitem/itemret/returnNote/index.vue +++ b/admin-web/src/views/departmentitem/itemret/returnNote/index.vue @@ -49,7 +49,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination :small="false" diff --git a/admin-web/src/views/departmentitem/itemscr/scrapping/index.vue b/admin-web/src/views/departmentitem/itemscr/scrapping/index.vue index 5d7c4d9..63dc197 100644 --- a/admin-web/src/views/departmentitem/itemscr/scrapping/index.vue +++ b/admin-web/src/views/departmentitem/itemscr/scrapping/index.vue @@ -54,7 +54,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination :small="false" diff --git a/admin-web/src/views/stock/accessStock/outbound/index.vue b/admin-web/src/views/stock/accessStock/outbound/index.vue index e574460..88d81f8 100644 --- a/admin-web/src/views/stock/accessStock/outbound/index.vue +++ b/admin-web/src/views/stock/accessStock/outbound/index.vue @@ -55,7 +55,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> </div> diff --git a/admin-web/src/views/stock/procure/purchaseOrder/index.vue b/admin-web/src/views/stock/procure/purchaseOrder/index.vue index 110ee7a..12f33ee 100644 --- a/admin-web/src/views/stock/procure/purchaseOrder/index.vue +++ b/admin-web/src/views/stock/procure/purchaseOrder/index.vue @@ -75,7 +75,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> </div> diff --git a/admin-web/src/views/stock/procure/receiptDetails/index.vue b/admin-web/src/views/stock/procure/receiptDetails/index.vue index 9e884bd..902be8f 100644 --- a/admin-web/src/views/stock/procure/receiptDetails/index.vue +++ b/admin-web/src/views/stock/procure/receiptDetails/index.vue @@ -160,7 +160,7 @@ // 鍒椾俊鎭� columns: [ { title: '鍗曞彿', field: 'businessFormCode', align: 'center', width: 130 }, - { title: '鐗╁搧鍚嶇О', field: 'goodsTemplateName', align: 'left', width: 140 }, + { title: '鐗╁搧鍚嶇О', field: 'goodsTemplateName', align: 'left', minWidth: 140 }, { title: '瑙勬牸鍨嬪彿', field: 'baseGoodsModelsName', align: 'left', width: 130 }, { title: '鍗曚环', diff --git a/admin-web/src/views/stock/transfer/transferApplication/index.vue b/admin-web/src/views/stock/transfer/transferApplication/index.vue index 8e1a11a..93b9412 100644 --- a/admin-web/src/views/stock/transfer/transferApplication/index.vue +++ b/admin-web/src/views/stock/transfer/transferApplication/index.vue @@ -87,7 +87,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination :small="false" diff --git a/admin-web/src/views/stock/transfer/transferissue/index.vue b/admin-web/src/views/stock/transfer/transferissue/index.vue index f1a4aea..e75533f 100644 --- a/admin-web/src/views/stock/transfer/transferissue/index.vue +++ b/admin-web/src/views/stock/transfer/transferissue/index.vue @@ -76,7 +76,7 @@ </el-card> </el-col> </el-row> - <div class="no-data" v-else>鏆傛棤鏁版嵁</div> + <el-empty v-else description="鏆傛棤鏁版嵁"></el-empty> </div> <el-pagination :small="false" @@ -203,6 +203,7 @@ fetchData() { this.loading = true; transferList({ + qryType: 0, pageNum: this.pageNum, pageSize: this.pageSize, ...this.filterFrom, diff --git a/admin-web/vue.config.js b/admin-web/vue.config.js index 774e49e..193fe04 100644 --- a/admin-web/vue.config.js +++ b/admin-web/vue.config.js @@ -27,7 +27,7 @@ transpileDependencies: ['element-ui', 'vuex', 'js-cookie', '@babel', 'resize-detector'], publicPath: './', // publicPath: '/', - outputDir: 'psmWeb', + outputDir: 'lowConsumWeb', assetsDir: 'static', lintOnSave: process.env.NODE_ENV === 'development', productionSourceMap: false, -- Gitblit v1.9.1