From 88524aed702cb4a9cff3d1aafd1fa748b1ac10cb Mon Sep 17 00:00:00 2001
From: yangfeng <wanwan926_4@163.com>
Date: 星期六, 28 十月 2023 14:57:09 +0800
Subject: [PATCH] 新增重订货规则页面

---
 src/router/product/index.js                           |    9 +
 src/views/productManage/reorderRules/index.vue        |  337 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/components/makepager/CommonFormTableView.vue      |   65 ++++++++-
 src/components/layout/components/appsidebar/index.vue |    1 
 4 files changed, 403 insertions(+), 9 deletions(-)

diff --git a/src/components/layout/components/appsidebar/index.vue b/src/components/layout/components/appsidebar/index.vue
index ea8aeef..e9cd1e9 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 0e99386..a10671d 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,
@@ -212,12 +213,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>
@@ -304,7 +331,8 @@
         { id: 2, name: "鎵�" }
       ],
       selLocationOptions: [], // 浣嶇疆
-      companyOptions: [] // 鍏徃
+      companyOptions: [], // 鍏徃
+      selRouteOptions: [] // 璺嚎
     }
   },
   created() {
@@ -436,6 +464,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/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