From 5ecb7958c96d3f0b6d47b79aff7eb306c2cf690f Mon Sep 17 00:00:00 2001 From: charles <981744753@qq.com> Date: 星期二, 06 八月 2024 11:16:58 +0800 Subject: [PATCH] gitlab上面的wms转移到公司git --- src/views/reportForm/inventoryReport/index.vue | 583 +++++++++++++++++++++++++++++++++++++++++---------------- 1 files changed, 419 insertions(+), 164 deletions(-) diff --git a/src/views/reportForm/inventoryReport/index.vue b/src/views/reportForm/inventoryReport/index.vue index 8c4d60f..b1b391e 100644 --- a/src/views/reportForm/inventoryReport/index.vue +++ b/src/views/reportForm/inventoryReport/index.vue @@ -3,43 +3,47 @@ <div class="rightContent"> <div class="top"> <SearchCommonView + :showAdd="false" :add-title="'鏂板缓'" - :placeholder="'璇疯緭鍏ュ弬鑰�'" + :placeholder="'璇疯緭鍏ヤ骇鍝佸悕绉版垨浜у搧绫诲埆'" :amount-view="false" @addCommonClick="addBtnClick" @searchClick="getList" :isDisabled="true" + :showDownload="true" + @downloadClick="downHttpClick" /> </div> - <div class="content_wrap"> <div class="con_left"> - <p>浠撳簱</p> - <div class="stash"> - <template> - <el-radio - v-for="(item, index) in warehouseList" - :key="index" - v-model="stashRadio" - :label="item.name" - @change="radioHandleChange" - >{{ item.name }}</el-radio - > - <!-- <el-radio v-model="stashRadio" label="2">澶囬�夐」</el-radio> --> - </template> + <div class="con_left_div"> + <p>浠撳簱</p> + <div class="stash"> + <template> + <el-radio v-for="(item, index) in warehouseList" :key="index" v-model="stashRadio" :label="item.code" @change="radioHandleChange(item)"> + <el-tooltip class="item" effect="dark" :content="item.name" placement="bottom"> + <span class="radio-text">{{ item.name }}</span> + </el-tooltip> + </el-radio> + </template> + </div> </div> - <p style="margin-top: 30px">绫诲埆</p> - <el-checkbox-group v-model="checkList" @change="checkListHandler"> - <el-checkbox - v-for="item in categoryList" - :key="item.id" - :label="item.id" - >{{ item.name }}</el-checkbox - > - </el-checkbox-group> + <div class="con_left_div"> + <p>绫诲埆</p> + <div class="category"> + <el-tree node-key="id" :data="categoryList" show-checkbox :props="treeProps" @check="checkListHandler"></el-tree> + <!-- <el-checkbox-group v-model="checkList" @change="checkListHandler"> + <el-checkbox v-for="item in categoryList" :key="item.id" :label="item.id"> + <el-tooltip class="item" effect="dark" :content="item.name" placement="bottom"> + <span class="radio-text">{{ item.name }}</span> + </el-tooltip> + </el-checkbox> + </el-checkbox-group> --> + </div> + </div> </div> - <div class="con_right"> - <div class="list-view"> + <div class="list-view"> + <div class="table"> <TableCommonView ref="tableListRef" :table-list="tableList" @@ -48,28 +52,111 @@ :showSummary="true" > <template slot="tableButton"> + <el-table-column label="鍦ㄥ簱" prop='amount'> + <el-table-column v-for="unit in unitList" :label="unit.name" prop='availableNumber' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.amountMoreUnits,unit.name,scope.row.amount,scope.row.unit)}} + </template> + </el-table-column> + + </el-table-column> + <el-table-column label="鍙敤搴撳瓨" prop='availableNumber'> + <el-table-column v-for="unit in unitList" :label="unit.name" prop='amount' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.availableNumberMoreUnits,unit.name,scope.row.availableNumber,scope.row.unit)}} + </template> + </el-table-column> + <!-- <el-table-column label="浠�" prop='availableNumber' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.availableNumberMoreUnits,'浠�',scope.row.availableNumber,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="鍖�" prop='availableNumber' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.availableNumberMoreUnits,'鍖�',scope.row.availableNumber,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="绫虫暟" prop='availableNumber' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.availableNumberMoreUnits,'绫虫暟',scope.row.availableNumber,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="閲嶉噺" prop='availableNumber' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.availableNumberMoreUnits,'閲嶉噺',scope.row.availableNumber,scope.row.unit)}} + </template> + </el-table-column>--> + </el-table-column> + <el-table-column label="鍏ュ簱" prop='in'> + <el-table-column v-for="unit in unitList" :label="unit.name" prop='in' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.inMoreUnits,unit.name,scope.row.in,scope.row.unit)}} + </template> + </el-table-column> + <!--<el-table-column label="浠�" prop='in' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.inMoreUnits,'浠�',scope.row.in,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="鍖�" prop='in' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.inMoreUnits,'鍖�',scope.row.in,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="绫虫暟" prop='in' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.inMoreUnits,'绫虫暟',scope.row.in,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="閲嶉噺" prop='in' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.inMoreUnits,'閲嶉噺',scope.row.in,scope.row.unit)}} + </template> + </el-table-column>--> + </el-table-column> + <el-table-column label="鍑哄簱" prop='out'> + <el-table-column v-for="unit in unitList" :label="unit.name" prop='out' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.outMoreUnits,unit.name,scope.row.out,scope.row.unit)}} + </template> + </el-table-column> + <!--<el-table-column label="浠�" prop='out' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.outMoreUnits,'浠�',scope.row.out,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="鍖�" prop='out' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.outMoreUnits,'鍖�',scope.row.out,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="绫虫暟" prop='out' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.outMoreUnits,'绫虫暟',scope.row.out,scope.row.unit)}} + </template> + </el-table-column> + <el-table-column label="閲嶉噺" prop='out' min="90"> + <template slot-scope="scope"> + {{getUnitValue(scope.row.outMoreUnits,'閲嶉噺',scope.row.out,scope.row.unit)}} + </template> + </el-table-column>--> + </el-table-column> <el-table-column label="鎿嶄綔" width="220" align="center"> <template slot-scope="scope"> - <span @click="handleHistoryClick(scope.row)"> + <span @click="handleHistoryClick(scope.row)" class="yes-cursor"> <i class="el-icon-refresh-left"></i> <span>鍘嗗彶</span> </span> - <span @click="handleAddGoods(scope)" class="margin_left_5px"> + <span @click="handleAddGoods(scope.row)" class="margin_left_5px;" style="cursor: pointer"> <i class="el-icon-refresh"></i> <span>琛ヨ揣</span> </span> <template> - <span - @click="handleLocation(scope)" - class="margin_left_5px" - > + <span @click="handleLocation(scope)" class="margin_left_5px yes-cursor"> <i class="el-icon-menu"></i> <span>浣嶇疆</span> </span> - <span - @click="handleForecast(scope)" - class="margin_left_5px" - > + <span @click="handleForecast(scope)" class="margin_left_5px no-cursor"> <i class="el-icon-s-data"></i> <span>棰勬祴</span> </span> @@ -78,45 +165,42 @@ </el-table-column> </template> </TableCommonView> - <div class="btn-pager"> - <PagerView - class="page" - :pager-options="pagerOptions" - :page-size="pageSizes" - v-on="pagerEvents" - /> - </div> + </div> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" :page-size="pageSizes" v-on="pagerEvents" /> </div> </div> - </div> + </div> <!-- 缂栬緫 dialog--> - <AddOverviewDialog - v-if="editConfig.visible" - :edit-common-config="editConfig" - :add-name="this.$route.params.name" - /> + <AddOverviewDialog v-if="editConfig.visible" :edit-common-config="editConfig" :add-name="this.$route.params.name" /> </div> </template> <script> -import pageMixin from "@/components/makepager/pager/mixin/pageMixin"; -import AddOverviewDialog from "@/views/overview/AddOverviewDialog"; -import { - getInventoryData, - getProductCategoryList, - getWarehouseList, -} from "@/api/reportForm/inventoryRwport"; - +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import AddOverviewDialog from "@/views/overview/AddOverviewDialog" +import { getInventoryData, getProductCategoryList, getWarehouseList } from "@/api/reportForm/inventoryRwport" +import { downloadInventoryForms } from "@/api/downFile" +import FileSaver from 'file-saver'; +import axios from 'axios'; +import _ from 'lodash' +import {getUnitInfo} from "@/api/basic/standard"; export default { - name: "InboundOutboundDetail", + name: "inventoryReport", props: {}, components: { AddOverviewDialog }, mixins: [pageMixin], computed: {}, data() { return { + unitList:[], keyword: "", + treeProps: { + label: 'name', + value: 'id', + children: 'children', + }, checkList: [], testArr: [], testArr2: [ @@ -130,7 +214,7 @@ inStorage: "100.00", // 鍏ュ簱 toStore: "20.00", // 鍑哄簱 forecast: "0.00", //棰勬祴 - unit: "浠�", //鍗曚綅 + unit: "浠�" //鍗曚綅 }, { product: "鍗楁柟涓濆发12306xxx", @@ -142,8 +226,8 @@ inStorage: "0.00", toStore: "0.00", forecast: "0.00", - unit: "浠�", - }, + unit: "浠�" + } ], tableList: {}, showcol: ["浜у搧绫诲埆", "鍗曚綅鎴愭湰", "鎬讳环鍊�", "鍏ュ簱", "鍑哄簱"], @@ -152,12 +236,12 @@ commonDetail: { visible: false, title: "鏂板缓", - infomation: {}, + infomation: {} }, editConfig: { visible: false, title: "鏂板缓", - infomation: {}, + infomation: {} }, productId: this.$route.params.id, productName: this.$route.params.name, @@ -167,29 +251,95 @@ warehouseListName: "", // 浠撳簱鍚嶇О stashRadio: "1", pageSizes: [15, 30], - oldRadioBtn:"", - }; + oldRadioBtn: "", + metaTitle: this.$route.meta.title, + searchStr: this.$route.params.name ?? "" + } }, created() { - this.setTable(); - this.getData(); //搴撳瓨鎶ヨ〃 - this.getStashData(); // 浠撳簱鍒楄〃鏁版嵁 - this.getProductCategoryList(); + this.setTable() + this.getData() //搴撳瓨鎶ヨ〃 + this.getStashData() // 浠撳簱鍒楄〃鏁版嵁 + this.getProductCategoryList() }, mounted() { this.countSums(); + this.getUnitInfo(); }, methods: { - checkListHandler(e) { - this.categoryListId = e; - this.getData() - console.log(this.categoryListId, e, " 閫変腑鐨勪骇鍝乮d"); - }, + async getUnitInfo(){ + const { code,data }=await getUnitInfo(); + if(code===200){ + this.unitList=data; + } + }, + getUnitValue(list,val,num,unit){ + let string='--' + if(list){ + if(list.length>0){ + for(let i in list){ + if(list[i].unit==val){ + string=list[i].amount + break; + } + } + } + } + if(unit==val){ + string=num + } + if(string.length>6){ + return string.substring(0,6); + } + return string + }, + // 涓嬭浇 + downHttpClick: _.debounce(function(){ + let token = document.cookie.replace( + /(?:(?:^|.*;\s*)token\s*=\s*([^;]*).*$)|^.*$/, + "$1", + ); + /*axios({ + url: "/api-wms/v1/forms/downloadInventoryForms", + method: "post", + methodType:'down', + headers:{ + Authorization:"Bearer " + token + }, + data:{ + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize, + keyword:this.keyword, + } + }).then(res=>{ + console.log(decodeURIComponent(res.headers['content-disposition'].split(';')[1].split('filename=')[1])); + })*/ + downloadInventoryForms({ + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize, + keyword:this.keyword, + baseOperationType:1 + }).then(res => { + if (res) { + FileSaver.saveAs(res, '搴撳瓨鎶ヨ〃.xlsx'); + this.$message.success("涓嬭浇鎴愬姛锛�"); + } + }) + }, 1000), + checkListHandler(_, checkObj) { + this.categoryListId = checkObj.checkedKeys + this.getData() + }, radioHandleChange(e) { - this.warehouseListName=e + this.warehouseListName = e.id this.getData() - console.log(e, "鍗曢��"); }, + // checkRadio(val){ + // console.log(val) + // val == this.stashRadio ? this.stashRadio = '' : this.stashRadio = val + // this.warehouseListName = val + // this.getData() + // }, setTable() { if (this.isIconIndex === "1") { this.pageSizes = [30, 60] @@ -197,21 +347,22 @@ } this.tableList = { tableInfomation: [], - selectBox: true, + selectBox: false, + selectIndex: true, showcol: this.showcol, countcol: this.countcol, allcol: [], - tableColumn: this.setTableColumn(this.showcol), - }; + tableColumn: this.setTableColumn(this.showcol) + } // this.tableList.tableInfomation = this.testArr; - let allcol = []; + let allcol = [] for (let i = 0; i < this.tableList.tableColumn.length; i++) { if (!this.tableList.tableColumn[i].default) { - const label = this.tableList.tableColumn[i].label; - allcol.push(label); + const label = this.tableList.tableColumn[i].label + allcol.push(label) } } - this.tableList.allcol = allcol; + this.tableList.allcol = allcol }, setTableColumn(showcol) { let tableColumn = [ @@ -220,20 +371,37 @@ prop: "productName", default: true, width: 300, - isShowColumn: true, + isShowColumn: true // date: true, // 鏄惁涓烘棩鏈熸牸寮� }, + { + label: "浜у搧瑙勬牸", + prop: "productSpecs", + default: true, + width: 100, + isShowColumn: true + // date: true, // 鏄惁涓烘棩鏈熸牸寮� + }, + { + label: "浜у搧鍨嬪彿", + prop: "productType", + default: true, + width: 100, + isShowColumn: true + // date: true, // 鏄惁涓烘棩鏈熸牸寮� + }, { label: "浜у搧绫诲埆", - prop: "productType", + prop: "productCategory", default: true, - isShowColumn: showcol.includes("浜у搧绫诲埆"), + isShowColumn: showcol.includes("浜у搧绫诲埆") }, { label: "鍗曚綅鎴愭湰", prop: "cost", default: false, isShowColumn: showcol.includes("鍗曚綅鎴愭湰"), + textAlign: "right" }, { label: "鎬讳环鍊�", @@ -241,13 +409,15 @@ default: false, isShowColumn: showcol.includes("鎬讳环鍊�"), unit: "锟�", + textAlign: "right" }, - { + /*{ label: "鍦ㄥ簱", prop: "amount", default: true, isShowColumn: true, unit: "", + textAlign: "right" }, { label: "鍙敤搴撳瓨", @@ -255,6 +425,7 @@ default: true, isShowColumn: true, unit: "", + textAlign: "right" }, { label: "鍏ュ簱", @@ -262,6 +433,7 @@ default: false, isShowColumn: showcol.includes("鍏ュ簱"), unit: "", + textAlign: "right" }, { label: "鍑哄簱", @@ -269,60 +441,83 @@ isShowColumn: showcol.includes("鍑哄簱"), default: false, unit: "", - }, + textAlign: "right" + },*/ { label: "棰勬祴", prop: "forecast", isShowColumn: showcol.includes("棰勬祴"), default: false, - unit: "", + unit: "" }, - { + /*{ label: "鍗曚綅", prop: "unit", default: true, - isShowColumn: true, - }, - ]; - return tableColumn; + isShowColumn: true + }*/ + ] + return tableColumn }, selTableCol(val) { - this.showcol = val; - this.tableList.tableColumn = this.setTableColumn(val); + this.showcol = val + this.tableList.tableColumn = this.setTableColumn(val) }, getList(val) { - console.log(val); + this.searchStr = val + this.getData() }, // 琛岀偣鍑� tableRowClick(row) { - console.log(row); + console.log(row) // this.editConfig.visible = true; - this.editConfig.title = "鏌ョ湅"; - this.editConfig.infomation = { ...row }; + this.editConfig.title = "鏌ョ湅" + this.editConfig.infomation = { ...row } }, // 鏂板缓 addBtnClick() { // this.editConfig.visible = true; - this.editConfig.title = "鏂板缓"; - this.getData(); + // this.editConfig.title = "鏂板缓" + // this.getData() }, // 鐘舵�� getStatus(val) { - return val === 1 ? "鑽夌" : val === 3 ? "灏辩华" : "瀹屾垚"; + return val === 1 ? "鑽夌" : val === 3 ? "灏辩华" : "瀹屾垚" }, // 鍘嗗彶 handleHistoryClick(row) { - console.log(row) - this.$router.push("/operate/allot"); + this.$router.push({ + name: "inboundOutboundDetail", + params: { + keyWord: row.productName, + produceId: row.produceId, + unit: row.unit, + productName: row.productName, + name: "鎶ヨ〃" + } + }) }, + // 琛ヨ揣 handleAddGoods(row) { - console.log(row) - + this.$router.push({ + name: "orderPoint", + params: { + productId: row.produceId + } + }) }, // 浣嶇疆 - handleLocation() { - this.$router.push("/reportForm/locationReport"); + handleLocation(row) { + this.$router.push({ + name: "locationReport", + params: { + // keyWord:row.row.productName, + wareHouseCode: this.warehouseListName, + productId: row.row.produceId, + name: "搴撳瓨鎶ヨ〃" + } + }) }, // 棰勬祴 handleForecast() {}, @@ -339,42 +534,79 @@ inStorage: item.inStorage, // 鍏ュ簱 toStore: item.toStore, // 鍑哄簱 forecast: item.forecast, //棰勬祴 - unit: item.unit, //鍗曚綅 - }; - this.testArr.push(obj); - console.log(this.testArr, "this"); - }); + unit: item.unit //鍗曚綅 + } + this.testArr.push(obj) + }) }, //鎺ュ彛璇锋眰----------------------------------------------------------------------------------------------- // 鑾峰彇搴撳瓨鎶ヨ〃鏁版嵁 - async getData() { - let params = { - categoryIds: this.categoryListId, - page: this.pagerOptions.currPage, - pageSize: this.pagerOptions.pageSize, - warehouseCode: this.warehouseListName, - }; + async getInventoryData(params) { await getInventoryData(params).then((res) => { if (res.code === 200) { - console.log(res.data, "鎺ュ彛璇锋眰鎴愬姛"); const list = res.data this.tableList.tableInfomation = list || [] this.pagerOptions.totalCount = res.total } - }); + }) }, + getData() { + let params = { + keyWord: this.searchStr, + categoryIds: this.categoryListId, + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize, + warehouseId: this.warehouseListName||0 + } + this.getInventoryData(params) + }, + getTreeData(dataList, childFieldName = 'children', pIdFieldName = 'parentId', idFieldName = 'id', rootValue = 0) { + const rootArr = [] + //1.鍏堣幏鍙栨牴鑺傜偣鍒楄〃 + dataList.forEach((item) => { + const children = getChildrenNode(item[idFieldName], dataList) + if (Array.isArray(children) && children.length > 0) { + item[childFieldName] = children + } + if (!item.isParent) { + rootArr.push(item) + } + }) + //2.閫掑綊鑾峰彇鏍硅妭鐐圭殑鎵�鏈変笅绾ц妭鐐� + function getChildrenNode(parentId, dataList) { + //1.鏍规嵁鏍硅妭鐐硅幏鍙� 瀛愯妭鐐瑰垪琛� + const childrenArr = dataList.filter((item) => parentId === item[pIdFieldName]) + //2.瀛╁瓙鏈夊彲鑳借繕鏈夊瀛� 閬嶅巻瀛╁瓙杩涜閲嶆柊閫掑綊 + childrenArr.forEach((item) => { + const children = getChildrenNode(item[idFieldName], dataList) + if (children.length > 0) { + item[childFieldName] = children + } + }) + return childrenArr + } + return rootArr + }, // 鑾峰彇浜у搧绫诲瀷鍒楄〃鏁版嵁 async getProductCategoryList() { await getProductCategoryList({ keyWord: "", - page: this.pagerOptions.currPage, - pageSize: this.pagerOptions.pageSize + page: 0, + pageSize: 0 }).then((res) => { if (res.code === 200) { this.categoryList = res.data; + (res.data||[]).forEach((item,index1)=>{ + item.isParent=res.data.some((cItem,index2)=>{ + if(index1!==index2){ + return item.parentId==cItem.id; + } + }); + }); + this.categoryList = this.getTreeData(res.data) } - }); + }) }, // 璇锋眰浠撳簱鍒楄〃鏁版嵁 async getStashData() { @@ -383,49 +615,72 @@ page: this.pagerOptions.currPage, pageSize: this.pagerOptions.pageSize }).then((res) => { - if (res.data.code === 200) { - this.warehouseList = res.data.data; - console.log(this.warehouseList, "warehouseList"); + if (res.code === 200) { + this.warehouseList = res.data + + } - }); - }, - }, -}; + }) + } + } +} </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -.rightContent { - height: 100%; - background: #e6ecf2; - // width: 100%; - padding: 10px; - .top { - margin-bottom: 20px; - height: 60px; - background: #fff; - border-radius: 8px; + .radio-text{ + display:inline-block; + width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +.content_wrap { + height: calc(100% - 0px); + display: flex; + justify-content: start; + .con_left { + height: calc(100% - 90px); + width: 15%; + overflow: hidden; + .con_left_div { + height: 50%; + border: 1px solid rgba(0, 0, 0, 0); + .stash, + .category { + height: calc(100% - 52px); + display: flex; + flex-direction: column; + overflow: auto; + } + } } - .content_wrap { - height: calc(100% - 50px); - display: flex; - justify-content: space-between; - .con_left { - width: 200px; - .el-checkbox-group { - display: flex; - flex-direction: column; - } - .stash { - display: flex; - flex-direction: column; - } - } - .con_right { - width: calc(100% - 200px); - } + .list-view { + width: 85%; + flex: 1; } } - -// } +::v-deep { + .el-checkbox { + padding: 5px; + } + .el-checkbox__label { + width: 95%; + box-sizing: border-box; + padding-right: 5px; + word-break: break-all; + word-wrap: break-word; + white-space: pre-wrap !important; + } + .el-tree { + background: no-repeat; + } + .el-tree-node > .el-tree-node__children { + overflow: visible !important; + } + .el-tree-node__content:hover, + .el-upload-list__item:hover { + width: 100%; + } +} </style> -- Gitblit v1.8.0