From c356ebfc46d6f98afb6eebc252db2db6718e25f2 Mon Sep 17 00:00:00 2001 From: zuozhengqing <a13193816592@163.com> Date: 星期六, 28 十月 2023 15:58:18 +0800 Subject: [PATCH] Merge branch 'dev' of http://192.168.5.5:10010/r/web/WMS into dev --- src/views/overview/OverviewListView.vue | 13 + .env.development | 8 + src/router/product/index.js | 9 + src/views/productManage/reorderRules/index.vue | 337 ++++++++++++++++++++++++++++++++++++++++++ .env.preview | 12 + package.json | 4 .env | 18 ++ src/components/makepager/CommonFormTableView.vue | 65 +++++++- src/components/layout/components/appsidebar/index.vue | 1 9 files changed, 452 insertions(+), 15 deletions(-) diff --git a/.env b/.env new file mode 100644 index 0000000..ac3d107 --- /dev/null +++ b/.env @@ -0,0 +1,18 @@ +# 鎵�鏈夌幆澧冮粯璁� + +# 椤甸潰 title 鍓嶇紑 +VUE_APP_TITLE=Basic +NODE_ENV=development +VUE_APP_BATH_PATH='http://192.168.20.119:9085' +# 缃戠粶璇锋眰鍏敤鍦板潃 +VUE_APP_API=/api/ + +# 浠撳簱鍦板潃 +VUE_APP_REPO="" + +# 鍥介檯鍖栭厤缃� +VUE_APP_I18N_LOCALE=zh-chs +VUE_APP_I18N_FALLBACK_LOCALE=en + +# element 棰滆壊 +VUE_APP_ELEMENT_COLOR=#2A78FB diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..31096e8 --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +# 寮�鍙戠幆澧� +# 鎸囧畾鏋勫缓妯″紡 +NODE_ENV=development + +# 椤甸潰 title 鍓嶇紑 +VUE_APP_TITLE=Basic +VUE_APP_BATH_PATH='http://192.168.20.119:9085' + diff --git a/.env.preview b/.env.preview new file mode 100644 index 0000000..20424db --- /dev/null +++ b/.env.preview @@ -0,0 +1,12 @@ +# 鏋勫缓棰勮椤甸潰 + +# 鎸囧畾鏋勫缓妯″紡 +NODE_ENV=production + +# 鏍囪褰撳墠鏋勫缓鏂瑰紡 +VUE_APP_BUILD_MODE=PREVIEW +VUE_APP_BATH_PATH='http://www.fai365.com:9083 +VUE_APP_SCOURCE_LINK=TRUE + +# 閮ㄧ讲璺緞 +VUE_APP_PUBLIC_PATH=/ diff --git a/package.json b/package.json index c408a92..451674e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,9 @@ "scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", - "lint": "vue-cli-service lint" + "lint": "vue-cli-service lint", + "build:preview": "NODE_OPTIONS=--max_old_space_size=4096 vue-cli-service build --mode preview", + "test:unit": "vue-cli-service test:unit" }, "dependencies": { "axios": "^1.4.0", diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue index 796b29b..7ed14e4 100644 --- a/src/components/layout/components/appsidebar/index.vue +++ b/src/components/layout/components/appsidebar/index.vue @@ -30,6 +30,7 @@ </template> <el-menu-item index="/productManage/product">浜у搧</el-menu-item> <el-menu-item index="/productManage/productCategory">浜у搧绫诲埆</el-menu-item> + <el-menu-item index="/productManage/reorderRules">閲嶈璐ц鍒�</el-menu-item> </el-submenu> <el-submenu index="3"> <template slot="title"> diff --git a/src/components/makepager/CommonFormTableView.vue b/src/components/makepager/CommonFormTableView.vue index 93c4b3c..9d3349d 100644 --- a/src/components/makepager/CommonFormTableView.vue +++ b/src/components/makepager/CommonFormTableView.vue @@ -130,18 +130,16 @@ style="width: 63%" @change="selCommonClick" > - <el-option v-for="item in selOptions" :key="item.id" :label="item.name" :value="item"> </el-option> + <el-option v-for="(item, index) in selOptions" :key="index" :label="item.name" :value="item"> + </el-option> </el-select> </div> </el-form-item> <!-- 浣嶇疆 --> <el-form-item v-else-if="item.location" label=" " :prop="'tableData.' + scope.$index + '.' + item.prop"> <div class="custom-name"> - <span v-if="scope.row.isEdit || scope.row.editable">{{ - scope.row[item.prop]?.label ?? scope.row[item.prop] - }}</span> <el-select - v-else + v-if="!scope.row.isEdit && scope.row.isOrder" v-model="scope.row[item.prop]" placeholder="璇烽�夋嫨" size="mini" @@ -160,6 +158,9 @@ > </el-option> </el-select> + <span v-else-if="scope.row.isEdit || scope.row.editable">{{ + scope.row[item.prop]?.label ?? scope.row[item.prop] + }}</span> </div> </el-form-item> <!-- 浜у搧 --> @@ -179,8 +180,8 @@ " > <el-option - v-for="item in productNameOptions" - :key="item.id" + v-for="(item, index) in productNameOptions" + :key="index" :label="item.name" :value="{ value: item.id, @@ -238,12 +239,38 @@ </el-select> --> </div> </el-form-item> + <!-- 璺嚎 --> + <el-form-item v-else-if="item.route" label=" " :prop="'tableData.' + scope.$index + '.' + item.prop"> + <div class="custom-name"> + <span v-if="scope.row.isEdit">{{ scope.row[item.prop]?.label ?? scope.row[item.prop] }}</span> + <el-select + v-else + v-model="scope.row[item.prop]" + placeholder="璇烽�夋嫨" + size="mini" + style="width: 80%" + @change=" + (val) => { + selRoteClick(val, item.prop) + } + " + > + <el-option + v-for="(item, index) in selRouteOptions" + :key="index" + :label="item.name" + :value="{ value: item.id, label: item.name }" + > + </el-option> + </el-select> + </div> + </el-form-item> <!-- 鍏徃 --> <el-form-item v-else-if="item.company" label=" " :prop="'tableData.' + scope.$index + '.' + item.prop"> <div class="custom-name"> <span v-if="scope.row.isEdit">{{ scope.row[item.prop] }}</span> <el-select v-else v-model="scope.row[item.prop]" placeholder="璇烽�夋嫨" size="mini" style="width: 80%"> - <el-option v-for="item in companyOptions" :key="item.id" :label="item.name" :value="item"> + <el-option v-for="(item, index) in companyOptions" :key="index" :label="item.name" :value="item"> </el-option> </el-select> </div> @@ -332,7 +359,8 @@ { id: 2, name: "鎵�" } ], selLocationOptions: [], // 浣嶇疆 - companyOptions: [] // 鍏徃 + companyOptions: [], // 鍏徃 + selRouteOptions: [] // 璺嚎 } }, created() { @@ -488,6 +516,25 @@ } this.$emit("selLocationClick", item, prop) }, + // 閫夋嫨璺嚎 + selRoteClick(item, prop) { + console.log(item, prop) + console.log(this.tableList.tableData) + // if (this.isinventory) { + // getRuleList({ + // locationId: item.value, + // productId: "" + // }).then((res) => { + // console.log(res) + // if (res.code === 200) { + // const list = res.data ? res.data : [] + // // this.selLocationOptions = list.locationList + // this.productNameOptions = list.productList + // } + // }) + // } + // this.$emit("selLocationClick", item, prop) + }, // 閫夋嫨鍗曚綅/鐢ㄦ埛 selCommonClick(item) { console.log(item) diff --git a/src/router/product/index.js b/src/router/product/index.js index 2a5e8ce..6fbf969 100644 --- a/src/router/product/index.js +++ b/src/router/product/index.js @@ -5,6 +5,7 @@ const productCategory = (resolve) => require(["@/views/productManage/productCategory/index"], resolve) // 浜у搧绫诲埆 const productList = (resolve) => require(["@/views/productManage/productCategory/ProductList"], resolve) // 浜у搧绫诲埆-浜у搧 const overviewList = (resolve) => require(["@/views/overview/OverviewListView"], resolve) // 姒傝堪-浜у搧鍒楄〃 +const reorderRules = (resolve) => require(["@/views/productManage/reorderRules/index"], resolve) // 閲嶈璐ц鍒� const appconfig = [ { @@ -46,6 +47,14 @@ meta: { title: "閲囪喘鍏ュ簱" } + }, + { + path: "/productManage/reorderRules", + name: "reorderRules", + component: reorderRules, + meta: { + title: "閲嶈璐ц鍒�" + } } ] diff --git a/src/views/overview/OverviewListView.vue b/src/views/overview/OverviewListView.vue index 5ba0d19..1da054c 100644 --- a/src/views/overview/OverviewListView.vue +++ b/src/views/overview/OverviewListView.vue @@ -40,7 +40,7 @@ v-if="editConfig.visible" :work-type="workType" :edit-common-config="editConfig" - :add-name="this.$route.params.name" + :add-name="addName" :display-edit="displayEdit" /> </div> @@ -78,7 +78,8 @@ params: {}, displayEdit: false, formLabel: "", - toLabel: "" + toLabel: "", + addName: "" } }, created() { @@ -259,14 +260,16 @@ console.log(row) this.editConfig.visible = true this.editConfig.title = val - this.editConfig.operationTypeId = this.$route.params.id + this.editConfig.operationTypeId = this.params.id this.editConfig.infomation = { ...row } }, // 鏂板缓 addBtnClick() { this.editConfig.title = "鏂板缓" - this.editConfig.operationTypeId = this.$route.params.id - this.editConfig.code=this.$route.params.code + this.addName = this.params.name + console.log(this.params, "ss鍒锋柊") + this.editConfig.operationTypeId = this.params.id + this.editConfig.code = this.params.code this.editConfig.infomation = {} this.editConfig.visible = true }, diff --git a/src/views/productManage/reorderRules/index.vue b/src/views/productManage/reorderRules/index.vue new file mode 100644 index 0000000..a56a44c --- /dev/null +++ b/src/views/productManage/reorderRules/index.vue @@ -0,0 +1,337 @@ +<template> + <div class="rightContent"> + <div class="top"> + <SearchCommonView + :add-title="addTitle" + :show-discard="showDiscard" + :show-apply="false" + :placeholder="'璇疯緭鍏ヤ綅缃�/浜у搧'" + :amount-view="false" + @addCommonClick="addProductClick" + @searchClick="getList" + @discardBtnClick="discardBtnClick" + @applyBtnClick="applyBtnClick" + /> + </div> + <div class="list-view"> + <div class="table"> + <CommonFormTableView + ref="tablelistRef" + :isinventory="true" + :product-table-list="tableList" + @inputContent="inputContent" + @selLocationClick="selLocationClick" + @selProductClick="selProductClick" + @tableRowClick="tableRowClick" + > + <template slot="tableButton"> + <el-table-column label="鎿嶄綔" width="180" align="center"> + <template slot-scope="scope"> + <span + v-if="scope.row.isEdit && scope.row.isView" + @click.stop="handleOrderOnceClick(scope.row)" + class="yes-cursor" + > + <i class="el-icon-truck"></i> + <span>璁㈣喘涓�娆�</span> + </span> + </template> + </el-table-column> + </template> + </CommonFormTableView> + </div> + <div class="btn-pager"> + <PagerView class="page" :pager-options="pagerOptions" v-on="pagerEvents" /> + </div> + </div> + </div> +</template> + +<script> +import CommonFormTableView from "@/components/makepager/CommonFormTableView" +import pageMixin from "@/components/makepager/pager/mixin/pageMixin" +import { + getInventoryAdjustmentList, + addInventoryAdjustment, + updateInventoryAdjustment, + finishInventoryAdjustment +} from "@/api/operate/inventoryAdjustment" +import { currentTime } from "@/common/config/index" +export default { + name: "ReorderRules", + props: {}, + components: { CommonFormTableView }, + mixins: [pageMixin], + computed: {}, + data() { + return { + addTitle: "鏂板缓", + showDiscard: false, + tableList: {}, + tableData: [], + searchOptions: [], + countId: 0, + isNoProduct: true, // 娣诲姞鏄庣粏琛屾椂鏄惁鏈変骇鍝佹湭閫夋嫨 + isRowClick: false, + locationId: 0, + productId: 0, + differenceAmount: 0, + amount: 0, + operationId: 0, + adjustAmount: 0 + } + }, + created() { + this.setTable() + this.getData() + }, + methods: { + setTable() { + this.tableList = { + tableData: this.tableData, + selectBox: false, + selectIndex: true, + tableColumn: [ + { label: "浜у搧", prop: "productName", product: true }, + { label: "浣嶇疆", prop: "locationName", location: true }, + { label: "鍦ㄥ簱鏁伴噺", prop: "amount" }, + { label: "棰勬祴", prop: "forecastAmount" }, + { label: "棣栭�夎矾绾�", prop: "route", route: true }, + { label: "鏈�灏忔暟閲�", prop: "minAmount", inputFloat: true }, + { label: "鏈�澶ф暟閲�", prop: "maxAmount", inputFloat: true }, + { label: "璁㈣喘", prop: "orderAmount", inputFloat: true }, + { label: "璁¢噺鍗曚綅", prop: "unit" } + ] + } + }, + // 璇锋眰鏁版嵁 + async getData() { + await getInventoryAdjustmentList({ + page: this.pagerOptions.currPage, + pageSize: this.pagerOptions.pageSize + }).then((res) => { + if (res.code === 200) { + console.log(res) + const list = res.data.map((item) => { + item.adjustAmount = 0 + let forecastAmount = 500 + let maxAmount = 600 + return { + ...item, + isSet: false, + isEdit: true, + editable: true, + isOrder: true, + forecastAmount: forecastAmount, + maxAmount: maxAmount, + adjustAmount: 0, + isView: maxAmount - forecastAmount > 0 ? true : false + } + }) + this.tableList.tableData = list || [] + this.tableData = list || [] + this.pagerOptions.totalCount = res.total + } + }) + }, + // 鎿嶄綔杈撳叆 + inputContent(val, prop, row) { + console.log(val, prop, row) + console.log(val - row.amount, "缁撴灉") + this.adjustAmount = val - row.amount + this.tableList.tableData[row.index].adjustAmount = this.adjustAmount + // this.differenceAmount = val + this.differenceAmount = val + }, + // 鏂板 + addProductClick() { + console.log(this.tableData) + console.log(this.addTitle) + this.isSel() + if (this.isNoProduct && this.addTitle === "鏂板缓") { + this.$refs.tablelistRef.getRuleList() + this.addTitle = "淇濆瓨" + this.showDiscard = true + this.isRowClick = false + this.operationId = 0 + this.currentRowId = 0 + this.countId++ + this.tableData.unshift({ + countId: this.countId, + amount: 0, + adjustAmount: 0, + productId: "", + differenceAmount: 0, + locationId: 0, + createDate: this.currentTime(), + isSet: true, + isEdit: false, + editable: false, + isOrder: true + }) + this.locationId = 0 + this.subLocationId = 0 + this.productCategoryId = 0 + this.productId = 0 + } else { + this.addTitle = "鏂板缓" + this.showDiscard = false + let requestUrl = this.currentRowId === 0 ? addInventoryAdjustment : updateInventoryAdjustment + + requestUrl({ + amount: this.amount, + // adjustAmount: this.adjustAmount, + differenceAmount: this.differenceAmount, + locationId: this.locationId, + operationId: this.operationId, + productId: this.productId + }) + .then((res) => { + console.log(res) + if (res.code === 200) { + let tipStr = this.currentRowId === 0 ? "娣诲姞鎴愬姛" : "淇敼鎴愬姛" + this.$message.success(tipStr) + this.getData() + } + }) + .catch((err) => { + console.log(err) + this.getData() + }) + // } + } + }, + // 鏄惁閫夋嫨浜у搧 + isSel() { + for (let i = 0; i < this.tableData.length; i++) { + if (this.tableData && this.tableData[i].productName.length === 0) { + this.isNoProduct = false + break + } else { + this.isNoProduct = true + } + } + }, + // 鍙栨秷 + discardBtnClick() { + this.tableList.tableData.forEach((item) => { + item.differenceAmount = 0 + item.adjustAmount = 0 + }) + this.tableList + if (this.isRowClick) { + this.tableData.map((item) => { + item.isEdit = true + }) + } else { + this.tableData.splice(0, 1) + } + this.addTitle = "鏂板缓" + this.showDiscard = false + }, + // 搴旂敤鍏ㄩ儴 + applyBtnClick() { + console.log("搴旂敤鍏ㄩ儴") + }, + // 鍘嗗彶 + handleHistoryClick(row) { + this.isSel() + console.log(row) + if (this.isNoProduct) { + console.log("鍘嗗彶") + this.$router.push({ + name: "inventoryAdjustmentHistory", + params: { locationId: row.locationId, productId: row.productId, baseOperationType: row.baseOperationType } + }) + } + }, + // 璁剧疆 + handleSetClick(scope) { + this.isSel() + if (this.isNoProduct) { + scope.row.isSet = !scope.row.isSet + } + }, + // 搴旂敤 + handleUseClick(row) { + // scope.row.isSet = !scope.row.isSet + finishInventoryAdjustment({ + locationProductAmountId: row.locationProductAmountId, + operationId: row.operationId, + productId: row.productId + }).then((res) => { + console.log(res) + if (res.code === 200) { + this.$message.success("搴旂敤鎴愬姛") + this.getData() + } + }) + }, + // 娓呴櫎 + handleCleanupClick(scope) { + scope.row.isSet = !scope.row.isSet + }, + // 琛岀偣鍑� + tableRowClick(row, rowIndex) { + this.locationId = row.locationId + this.rowIndex = rowIndex + this.isSel() + if (!this.isNoProduct && this.currentRowId === 0) { + this.$message.error("璇峰畬鎴愬綋鍓嶆柊寤烘垨鍙栨秷鏂板缓") + } else { + this.currentRowId = row.id + this.addTitle = "淇濆瓨" + this.showDiscard = true + this.isRowClick = true + if (!this.isNoProduct) { + this.tableData.splice(this.tableData.length - 1, 1) + } + this.tableData.map((item, index) => { + if (index === rowIndex) { + item.isEdit = false + item.editable = true + item.isOrder = true + } else { + item.isEdit = true + } + }) + this.differenceAmount = row.differenceAmount + this.amount = row.amount + this.productId = row.productId + this.operationId = row.operationId + } + }, + // 鎼滅储 + getList(val) { + this.keyword = val + this.pagerOptions.currPage = 1 + this.getData() + }, + // 閫夋嫨浣嶇疆鏂规硶 + selLocationClick(item, prop) { + console.log(item, prop) + this.locationId = item.value + }, + // 閫変腑浜у搧鏂规硶 + selProductClick(item) { + console.log(item) + this.productId = item.value + }, + // 鑾峰彇褰撳墠鏃堕棿 + currentTime() { + return currentTime() + } + } +} +</script> + +<!-- Add "scoped" attribute to limit CSS to this component only --> +<style lang="scss" scoped> +::v-deep { + .el-table { + border-top-left-radius: 12px; + border-top-right-radius: 12px; + overflow: auto; + } +} +</style> -- Gitblit v1.8.0