Bläddra i källkod

fix: 按钮权限

zh 2 år sedan
förälder
incheckning
ed677d89a8

+ 7 - 4
src/views/sales_control/sales_management/components/customer_sales_details.vue

@@ -5,13 +5,13 @@
     <sales-table :data-list="dataList" :column="column" @handleSelection="handleSelection">
       <template #events>
         <el-button
-          v-if="details.status == 1 "
+          v-if="details.status == 1 && !isFront"
           type="primary"
           size="mini"
           @click="handleInform(2)"
         >通知发货</el-button>
-        <el-button v-if="details.status == 2 " size="mini" @click="handleSendRevoke(1)">撤销发货</el-button>
-        <el-button v-if=" details.status == 1" type="primary" size="mini" @click="handleSignIn(4)">
+        <el-button v-if="details.status == 2 && !isFront" size="mini" @click="handleSendRevoke(1)">撤销发货</el-button>
+        <el-button v-if="isFront && details.status == 1" type="primary" size="mini" @click="handleSignIn(4)">
           签收
         </el-button>
       </template>
@@ -105,10 +105,12 @@ export default {
           content: '创建成功',
           timestamp: '2018-04-11'
         }
-      ]
+      ],
+      isFront: null
     }
   },
   created() {
+    this.isFront = JSON.parse(localStorage.getItem('supply_user')).isFront
     if (this.detailsId) {
       getFrontOrderDetail({ id: this.detailsId }).then(res => {
         this.dataList = res.data.orders
@@ -122,6 +124,7 @@ export default {
         this.$refs.header.screenForm.streetId = res.data.street
         this.$refs.header.screenForm.stockType = res.data.stockType == 1 ? '前置仓' : '商家仓'
       })
+
     }
   },
   methods: {

+ 3 - 4
src/views/sales_control/sales_management/components/customer_sales_form.vue

@@ -23,7 +23,7 @@
         <div v-if="!detailsId">
           <el-button type="primary" :disabled="!dis" size="mini" @click="handelSubmit(1)">提交</el-button>
           <el-button v-if="dis" size="mini" @click="onReset">重置 </el-button>
-          <el-button  size="mini" :disabled="dis" @click="handleInform(2)">通知发货</el-button>
+          <el-button v-if="!isFront" size="mini" :disabled="dis" @click="handleInform(2)">通知发货</el-button>
         </div>
         <div v-else>
           <el-button type="primary" size="mini" @click="handelSubmit(2)">保存</el-button>
@@ -112,7 +112,7 @@ export default {
           type: 'text'
         }
       ],
-      isFront: false,
+      isFront: JSON.parse(localStorage.getItem('supply_user')).isFront,
       salesId: '',
       stokType: null
     }
@@ -339,8 +339,7 @@ export default {
               ]
               if (this.isFront === false) {
                 this.handleBack()
-              }
-               this.salesId = res.data
+              } this.salesId = res.data
               this.$set(this.$refs.header.screenForm, 'id', res.data)
               this.$forceUpdate()
             })

+ 273 - 50
src/views/sales_control/sales_management/components/return_sales_details.vue

@@ -1,17 +1,54 @@
 <template>
   <div>
-    <el-page-header content="详情" style="padding: 20px 20px 0 20px" @back="handleBack" />
+    <el-page-header
+      :content="detailsId ? '编辑' : '新增'"
+      style="padding: 20px 20px 0 20px"
+      @back="handleBack"
+    />
     <return-sales-header ref="header" :details="details" />
-    <sales-table :data-list="dataList" :column="column" @handleSelection="handleSelection">
+    <sales-table
+      :data-list="dataList"
+      :column="column"
+      :is-operation="detailsId ? false : true"
+      is-selection
+      @handleSelection="handleSelection"
+    >
+      <template #bts>
+        <div v-if="!detailsId">
+          <el-button v-if="dis" type="primary" size="mini" @click="dialogVisible = true">添加</el-button>
+          <el-button v-if="dis" type="danger" size="mini" @click="delChange">删除</el-button>
+        </div>
+      </template>
       <template #events>
-        <el-button v-if="details.status == 1" type="primary" size="mini" @click="handleInform(2)">通知退货</el-button>
-        <el-button v-if="details.status == 2" disabled size="mini">撤销退货</el-button>
+        <div v-if="!detailsId">
+          <el-button type="primary" :disabled="!dis" size="mini" @click="handelSubmit(1)">提交</el-button>
+          <el-button v-if="dis" size="mini" @click="onReset">重置</el-button>
+          <el-button v-if="!isFront" size="mini" :disabled="dis" @click="handleInform(2)">退货通知</el-button>
+        </div>
+        <div v-else>
+          <el-button type="primary" size="mini" @click="handelSubmit(2)">保存</el-button>
+          <el-button v-if="!detailsId" size="mini" @click="onReset">重置</el-button>
+        </div>
+      </template>
+      <template v-slot:custom="{ item: { row, $index } }">
+        <div>{{ diffQty(row) }}</div>
+      </template>
+      <!-- <template v-slot:custom="{ item: { row, $index } }">
+        <el-radio v-model="row.flag" label="1">增加</el-radio>
+        <el-radio v-model="row.flag" label="-1">减少</el-radio>
+      </template> -->
+      <template v-slot:operation="{ item: { row, $index } }">
+        <el-popconfirm v-if="dis" style="margin-left: 10px" title="删除?" @onConfirm="handleDel(row, $index)">
+          <el-button slot="reference" type="text" size="mini">删除</el-button>
+        </el-popconfirm>
       </template>
     </sales-table>
-    <LogisticsTabs v-if="details.status == 2 " style="margin:20px;" />
     <sales-dialog
+      ref="dia"
+      :data-list="dataList"
       :dialog-visible="dialogVisible"
-      :customer-number="customerNumber"
+      :return-id="returnId"
+      :item-id="itemId"
       :func="getDialogList"
       @confirm="confirm"
     />
@@ -22,26 +59,36 @@
 import SalesDialog from '@/components/SalesDialog/SalesDialog'
 import ReturnSalesHeader from '@/components/ReturnSalesHeader/ReturnSalesHeader'
 import SalesTable from '@/components/SalesTable/SalesTable'
-import { addFrontOrder, detailRefund, sbumitFrontOrder, sendRefund } from '@/api/sales'
-import { getcustomerFrontList } from '@/api/stock'
-import LogisticsTabs from '@/components/LogisticsTabs'
+import {
+  addFrontOrder,
+  detailRefund,
+  getFrontOrderDetail,
+  addRefund,
+  getFrontOrderList,
+  sbumitFrontOrder,
+  sendRefund,
+  updateRefund,
+  listOrder
+} from '@/api/sales'
+import { getcustomerFrontList, getFrontListCustomer } from '@/api/stock'
 
 export default {
   name: 'WarehouseForm',
   components: {
     ReturnSalesHeader,
     SalesTable,
-    SalesDialog,
-    LogisticsTabs
+    SalesDialog
   },
   props: ['detailsId', 'pageType'],
   data() {
     return {
       dialogVisible: false,
-      customerNumber: '',
+      returnId: '',
+      itemId: '',
       dataList: [],
       selection: [],
       flag: 1,
+      dis: true,
       details: {},
       column: [
         {
@@ -62,88 +109,264 @@ export default {
 
         {
           prop: 'qty',
+          align: 'left',
+          label: '退货数量',
+          width: '180',
+          isInput: true
+        },
+
+        {
+          prop: '',
           label: '已退数量',
-          width: '180'
+          width: '180',
+          isCustom: true
         },
         // {
-        //   prop: 'volume',
-        //   label: '体积',
-        //   width: '180'
-        // },
-        // {
         //   prop: 'totalVolume',
         //   label: '总体积',
         //   width: '180'
         // },
         {
           prop: 'notes',
-          label: '备注'
+          label: '备注',
+          isInput: true,
+          type: 'text'
         }
-      ]
+      ],
+      isFront: JSON.parse(localStorage.getItem('supply_user')).isFront,
+      salesId: ''
+    }
+  },
+  computed: {
+    diffQty() {
+      return row => {
+        return Number(row.qty) - Number(row.refundQty)
+      }
     }
   },
   created() {
-    console.log(this.$parent)
     if (this.detailsId) {
       detailRefund({ id: this.detailsId }).then(res => {
         this.dataList = res.data.orders
         this.details = res.data
+        this.dataList.forEach(k => {
+          this.$set(k, 'refundQty', k.qty)
+          k.diffQty = Number(k.qty) - Number(k.refundQty || 0)
+        })
+        this.details.customerOrderNo = res.data.customerOrderNo
         this.details.detailsId = res.data.id
-        // console.log(this.details );
+
+        this.returnId = res.data.id + this.dataList[0].materialCode
       })
+    } else {
+      Object.assign(this.$data, this.$options.data())
     }
   },
+
   methods: {
     getDialogList(p) {
-      return getcustomerFrontList(...p)
+      // let func = getcustomerFrontList
+      // if (this.isFront===true){
+      //   func = getcustomerFrontList
+      // }
+      // if (this.isFront===false){
+      //   func = getFrontListCustomer
+      // }
+      return listOrder(...p)
     },
     confirm(selected) {
+      for (let i = 0; i < selected.length; i++) {
+        if (selected[0].id != selected[i].id) {
+          this.$errorMsg('不能选择不一样的销售单')
+          return
+        }
+      }
+
       // console.log(selected)
-      this.dataList = selected
-      this.$refs.header.screenForm.customerName = this.dataList[0].customerName
-      this.$refs.header.screenForm.customerNumber = this.dataList[0].customerNumber
-      this.customerNumber = this.dataList[0].customerNumber
+      this.dataList = [...this.dataList, ...selected]
+      for (let i = 0; i < this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData.length; i++) {
+        for (let j = 0; j < this.dataList.length; j++) {
+          if (
+            this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].id == this.dataList[j].id ||
+            this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].disabled === false
+          ) {
+            if (
+              this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].itemId == this.dataList[j].itemId ||
+              this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].disabled === false
+            ) {
+              this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', false)
+            } else {
+              this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', true)
+            }
+          } else {
+            this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', true)
+          }
+        }
+      }
+      console.log(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData)
+      selected.forEach(k => {
+        k.diffQty = Number(k.qty) - Number(k.refundQty)
+        k.qty = k.refundQty
+      })
+      const obj = {
+        id: Object.freeze(this.dataList[0].id)
+      }
+      if (!this.detailsId) {
+        this.details = this.dataList[0]
+        this.details.customerOrderNo = obj.id
+      }
+      this.detailsId = this.detailsId
+
+      this.returnId = obj.id
+      this.itemId = this.dataList[0].itemId
       this.dialogVisible = false
+      this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.$refs.tableView.clearSelection()
     },
     handleDel(item, index) {
       this.dataList.splice(index, 1)
+      this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData.find(k => {
+        if (k.id == item.id) {
+          if (k.itemId == item.itemId) {
+            this.$set(k, 'disabled', true)
+          } else {
+            this.$set(k, 'disabled', false)
+          }
+          return
+        }
+      })
+      if (!this.dataList.length) {
+        this.returnId = ''
+      }
+      // if (!this.dataList.length){
+      //   this.$nextTick(()=>{
+      //     this.details = {}
+      //     this.returnId = ''
+      //   })
+      // }
+    },
+    // 去掉相同数据
+    resArr(arr1, arr2) {
+      return arr1.filter(v => arr2.every(val => val.id != v.id))
     },
     delChange() {
-      this.dataList.forEach((k, i) => {
-        this.selection.forEach((l, e) => {
-          if (k.id === l.id) {
-            this.dataList.splice(i, 1)
-            this.selection.splice(e, 1)
+      if (this.dataList.length) {
+        for (let i = 0; i < this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData.length; i++) {
+          for (let j = 0; j < this.selection.length; j++) {
+            if (
+              this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].id == this.selection[j].id ||
+              this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].disabled === false
+            ) {
+              if (
+                this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].itemId ==
+                  this.selection[j].itemId ||
+                this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i].disabled === false
+              ) {
+                this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', false)
+              } else {
+                this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', true)
+              }
+            } else {
+              this.$set(this.$refs.dia.$refs.pageRef.$refs.zjpage.$refs.tableEl.tableData[i], 'disabled', true)
+            }
           }
-        })
-      })
+        }
+        this.dataList = this.resArr(this.dataList, this.selection)
+
+        if (!this.dataList.length) {
+          this.returnId = ''
+        }
+      }
     },
     handleSelection(data) {
       this.selection = data
     },
-    handleInform(status = 2) {
-      sendRefund({ id: this.details.id, status }).then(res => {
-        this.$successMsg('退货通知')
-        this.handleBack()
-      })
-    },
-    handelSubmit() {
-      this.dataList.forEach(k => {
-        k.id = ''
-        k.directFlag = k.flag
-      })
+
+    handelSubmit(type, status = 1) {
+      const list = JSON.parse(JSON.stringify(this.dataList))
+
+      if (!list.length) {
+        this.$errorMsg('请添加产品')
+        return
+      }
+      for (let i = 0; i < list.length; i++) {
+        list[i].directFlag = list[i].flag
+        if (Number(list[i].qty) < 0 || !list[i].qty) {
+          this.$errorMsg(`第${i + 1}产品退货数量有误`)
+          return
+        }
+        list[i].id = ''
+      }
+
       const params = {
-        ...this.$refs.header.screenForm,
-        orders: this.dataList
+        ...this.$refs.header.details,
+        orders: list,
+        customerOrderNo: this.details.customerOrderNo,
+        status
       }
-      addFrontOrder(params).then(res => {
-        this.$successMsg('新增成功')
+      if (type === 1) {
+        params.id = ''
+        addRefund(params).then(res => {
+          this.$successMsg('新增成功')
+          this.salesId = res.data
+          this.column = [
+            {
+              prop: 'materialName',
+              label: '产品名称',
+              width: '180'
+            },
+            {
+              prop: 'materialCode',
+              label: '物料编码',
+              width: '180'
+            },
+            {
+              prop: 'specification',
+              label: '规格型号',
+              width: '300'
+            },
+
+            {
+              prop: 'qty',
+              align: 'left',
+              label: '退货数量',
+              width: '180'
+            },
+
+            {
+              prop: 'notes',
+              label: '备注',
+              width: '180',
+
+              type: 'text'
+            }
+          ]
+          if (this.isFront === false) {
+            this.handleBack()
+          }
+
+          this.dis = false
+          this.$forceUpdate()
+        })
+      } else {
+        updateRefund(params).then(res => {
+          this.$successMsg('编辑成功')
+          this.handleBack()
+          this.$forceUpdate()
+        })
+      }
+    },
+    handleInform(status = 2) {
+      sendRefund({ id: this.salesId, status }).then(res => {
+        this.$successMsg('退货通知')
         this.handleBack()
-        this.$forceUpdate()
       })
     },
+
     handleBack() {
       this.$emit('close')
+    },
+    onReset() {
+      Object.assign(this.$data, this.$options.data())
     }
   }
 }