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 | 684 ++++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 580 insertions(+), 104 deletions(-) diff --git a/src/views/reportForm/inventoryReport/index.vue b/src/views/reportForm/inventoryReport/index.vue index d65260c..b1b391e 100644 --- a/src/views/reportForm/inventoryReport/index.vue +++ b/src/views/reportForm/inventoryReport/index.vue @@ -1,46 +1,237 @@ +<!-- 搴撳瓨鎶ヨ〃 --> <template> <div class="rightContent"> <div class="top"> <SearchCommonView - :add-title="'鏂板缓'" :showAdd="false" - :placeholder="'璇疯緭鍏ュ弬鑰�'" + :add-title="'鏂板缓'" + :placeholder="'璇疯緭鍏ヤ骇鍝佸悕绉版垨浜у搧绫诲埆'" :amount-view="false" @addCommonClick="addBtnClick" @searchClick="getList" + :isDisabled="true" + :showDownload="true" + @downloadClick="downHttpClick" /> </div> - <div class="list-view"> - <TableCommonView - ref="tableListRef" - :table-list="tableList" - @selTableCol="selTableCol" - @tableRowClick="tableRowClick" - ></TableCommonView> - <div class="btn-pager"> - <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + <div class="content_wrap"> + <div class="con_left"> + <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> + <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="list-view"> + <div class="table"> + <TableCommonView + ref="tableListRef" + :table-list="tableList" + @selTableCol="selTableCol" + @tableRowClick="tableRowClick" + :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)" class="yes-cursor"> + <i class="el-icon-refresh-left"></i> + <span>鍘嗗彶</span> + </span> + <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 yes-cursor"> + <i class="el-icon-menu"></i> + <span>浣嶇疆</span> + </span> + <span @click="handleForecast(scope)" class="margin_left_5px no-cursor"> + <i class="el-icon-s-data"></i> + <span>棰勬祴</span> + </span> + </template> + </template> + </el-table-column> + </template> + </TableCommonView> + </div> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" :page-size="pageSizes" v-on="pagerEvents" /> + </div> + </div> + </div> - <!-- 缂栬緫 --> + <!-- 缂栬緫 dialog--> <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 { getProductOperatonList } from "@/api/product/product" 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: [ + { + product: "鍗楁柟涓濆发xxx", //浜у搧 + category: "涓濈桓鍒跺搧/鐪熶笣鐫¤", // 浜у搧绫诲埆 + cost: "100.00", //鍗曚綅鎴愭湰 + inStore: "12.00", // 鍦ㄥ簱 + totalPrices: 10, // 鎬讳环鍊� + availableStore: "0.00", //鍙敤搴撳瓨 + inStorage: "100.00", // 鍏ュ簱 + toStore: "20.00", // 鍑哄簱 + forecast: "0.00", //棰勬祴 + unit: "浠�" //鍗曚綅 + }, + { + product: "鍗楁柟涓濆发12306xxx", + category: "涓濈桓鍒跺搧/鐪熶笣鐫¤", + cost: "9980.00", + totalPrices: "0.00", + inStore: "10.00", + availableStore: "0.00", + inStorage: "0.00", + toStore: "0.00", + forecast: "0.00", + unit: "浠�" + } + ], tableList: {}, - showcol: ["鐘舵��"], + showcol: ["浜у搧绫诲埆", "鍗曚綅鎴愭湰", "鎬讳环鍊�", "鍏ュ簱", "鍑哄簱"], + countcol: ["鎬讳环鍊�", "鍦ㄥ簱", "鍙敤搴撳瓨", "鍏ュ簱", "鍑哄簱", "棰勬祴"], searchOptions: [], commonDetail: { visible: false, @@ -53,22 +244,117 @@ infomation: {} }, productId: this.$route.params.id, - productName: this.$route.params.name + productName: this.$route.params.name, + categoryList: [], // 绫诲埆 + categoryListId: [], //绫诲埆id + warehouseList: [], // 浠撳簱 + warehouseListName: "", // 浠撳簱鍚嶇О + stashRadio: "1", + pageSizes: [15, 30], + oldRadioBtn: "", + metaTitle: this.$route.meta.title, + searchStr: this.$route.params.name ?? "" } }, created() { this.setTable() - this.getData() + this.getData() //搴撳瓨鎶ヨ〃 + this.getStashData() // 浠撳簱鍒楄〃鏁版嵁 + this.getProductCategoryList() + }, + mounted() { + this.countSums(); + this.getUnitInfo(); }, methods: { + 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.id + this.getData() + }, + // 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] + this.pagerOptions.pageSize = 30 + } this.tableList = { tableInfomation: [], - selectBox: true, + selectBox: false, + selectIndex: true, showcol: this.showcol, + countcol: this.countcol, allcol: [], tableColumn: this.setTableColumn(this.showcol) } + // this.tableList.tableInfomation = this.testArr; let allcol = [] for (let i = 0; i < this.tableList.tableColumn.length; i++) { if (!this.tableList.tableColumn[i].default) { @@ -81,64 +367,95 @@ setTableColumn(showcol) { let tableColumn = [ { - label: "鏃ユ湡", - prop: "operationDate", - isShowColumn: true, - default: true, - date: true - }, - { - label: "鍗曞彿", - prop: "number", - isShowColumn: true, - default: true - }, - { label: "浜у搧", prop: "productName", - isShowColumn: true, - default: true + default: true, + width: 300, + 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: "productCategory", + default: true, + isShowColumn: showcol.includes("浜у搧绫诲埆") }, { - label: "浠�", - prop: "from", - isShowColumn: true, - default: true + label: "鍗曚綅鎴愭湰", + prop: "cost", + default: false, + isShowColumn: showcol.includes("鍗曚綅鎴愭湰"), + textAlign: "right" }, { - label: "鑷�", - prop: "to", - isShowColumn: true, - default: true + label: "鎬讳环鍊�", + prop: "value", + default: false, + isShowColumn: showcol.includes("鎬讳环鍊�"), + unit: "锟�", + textAlign: "right" }, - { - label: "鏁伴噺", + /*{ + label: "鍦ㄥ簱", prop: "amount", + default: true, isShowColumn: true, - default: true + unit: "", + textAlign: "right" }, { + label: "鍙敤搴撳瓨", + prop: "availableNumber", + default: true, + isShowColumn: true, + unit: "", + textAlign: "right" + }, + { + label: "鍏ュ簱", + prop: "in", + default: false, + isShowColumn: showcol.includes("鍏ュ簱"), + unit: "", + textAlign: "right" + }, + { + label: "鍑哄簱", + prop: "out", + isShowColumn: showcol.includes("鍑哄簱"), + default: false, + unit: "", + textAlign: "right" + },*/ + { + label: "棰勬祴", + prop: "forecast", + isShowColumn: showcol.includes("棰勬祴"), + default: false, + unit: "" + }, + /*{ label: "鍗曚綅", prop: "unit", - isShowColumn: true, - default: true - }, - { - label: "鐘舵��", - prop: "status", - width: 120, - isShowColumn: showcol.includes("鐘舵��"), - default: false, - status: true, - isCallMethod: true, - getCallMethod: this.getStatus - }, - { - label: "瀹屾垚鑰�", - prop: "admin", - isShowColumn: showcol.includes("瀹屾垚鑰�"), - default: false - } + default: true, + isShowColumn: true + }*/ ] return tableColumn }, @@ -146,46 +463,164 @@ this.showcol = val this.tableList.tableColumn = this.setTableColumn(val) }, - // 璇锋眰鏁版嵁 - async getData() { - await getProductOperatonList({ - productId: this.productId, - page: this.pagerOptions.currPage, - pageSize: this.pagerOptions.pageSize - }).then((res) => { - if (res.code === 200) { - const list = res.data.map((item) => { - return { - ...item, - from: item.fromLocation.name, - to: item.toLocation.name, - productName: this.productName - } - }) - this.tableList.tableInfomation = list || [] - this.pagerOptions.totalCount = res.total - } - }) - }, - // 鎼滅储 getList(val) { - console.log(val) + this.searchStr = val + this.getData() }, // 琛岀偣鍑� tableRowClick(row) { console.log(row) - this.editConfig.visible = true + // this.editConfig.visible = true; this.editConfig.title = "鏌ョ湅" this.editConfig.infomation = { ...row } }, // 鏂板缓 addBtnClick() { - this.editConfig.visible = true - this.editConfig.title = "鏂板缓" + // this.editConfig.visible = true; + // this.editConfig.title = "鏂板缓" + // this.getData() }, // 鐘舵�� getStatus(val) { return val === 1 ? "鑽夌" : val === 3 ? "灏辩华" : "瀹屾垚" + }, + // 鍘嗗彶 + handleHistoryClick(row) { + this.$router.push({ + name: "inboundOutboundDetail", + params: { + keyWord: row.productName, + produceId: row.produceId, + unit: row.unit, + productName: row.productName, + name: "鎶ヨ〃" + } + }) + }, + + // 琛ヨ揣 + handleAddGoods(row) { + this.$router.push({ + name: "orderPoint", + params: { + productId: row.produceId + } + }) + }, + // 浣嶇疆 + handleLocation(row) { + this.$router.push({ + name: "locationReport", + params: { + // keyWord:row.row.productName, + wareHouseCode: this.warehouseListName, + productId: row.row.produceId, + name: "搴撳瓨鎶ヨ〃" + } + }) + }, + // 棰勬祴 + handleForecast() {}, + //鎬讳环璁$畻 + countSums() { + this.testArr2.map((item) => { + let obj = { + product: item.product, //浜у搧 + category: item.category, // 浜у搧绫诲埆 + cost: item.cost, //鍗曚綅鎴愭湰 + inStore: item.inStore, // 鍦ㄥ簱 + totalPrices: item.cost * item.inStore, // 鎬讳环鍊� + availableStore: item.availableStore, //鍙敤搴撳瓨 + inStorage: item.inStorage, // 鍏ュ簱 + toStore: item.toStore, // 鍑哄簱 + forecast: item.forecast, //棰勬祴 + unit: item.unit //鍗曚綅 + } + this.testArr.push(obj) + }) + }, + + //鎺ュ彛璇锋眰----------------------------------------------------------------------------------------------- + // 鑾峰彇搴撳瓨鎶ヨ〃鏁版嵁 + async getInventoryData(params) { + await getInventoryData(params).then((res) => { + if (res.code === 200) { + 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: 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() { + await getWarehouseList({ + keyword: "", + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }).then((res) => { + if (res.code === 200) { + this.warehouseList = res.data + + + } + }) } } } @@ -193,18 +628,59 @@ <!-- Add "scoped" attribute to limit CSS to this component only --> <style lang="scss" scoped> -// .rightContent { -// height: 100%; -// background: #e6ecf2; -// padding: 10px; -// .top { -// margin-bottom: 20px; -// height: 60px; -// background: #fff; -// border-radius: 8px; -// } -// .list-view { -// height: calc(100% - 120px); -// } -// } + .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; + } + } + } + .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