Browse Source

no message

linwenxin 1 year ago
parent
commit
43dddfe051

+ 53 - 0
src/api/oldPartsReturnFactory.js

@@ -0,0 +1,53 @@
+import request, { postBlob, getBlob, handleImport } from '@/utils/request'
+
+export function websitPartsFactoryRetListPageV2(data) {
+  return request({
+    url: `/websitPartsFactoryRet/list/pageV2?moduleId=${data.moduleId}`,
+    method: 'post',
+    data
+  })
+}
+
+export function websitPartsFactoryRetPageExport(data, name) {
+  return postBlob({
+    url: '/websitPartsFactoryRet/pageExport',
+    data,
+    name
+  })
+}
+
+export function websitPartsFactoryRetDetail(params) {
+  return request({
+    url: '/websitPartsFactoryRet/detail',
+    method: 'post',
+    params: params
+  })
+}
+
+export function websitPartsFactoryRetAdd(data) {
+  return request({
+    url: `/websitPartsFactoryRet/add`,
+    method: 'post',
+    data
+  })
+}
+
+
+export function websitPartsFactoryRetUpdate(data) {
+  return request({
+    url: `/websitPartsFactoryRet/update`,
+    method: 'post',
+    data
+  })
+}
+
+export function websitPartsFactoryRetExamine(data) {
+  return request({
+    url: `/websitPartsFactoryRet/examine`,
+    method: 'post',
+    data
+  })
+}
+
+
+

+ 323 - 0
src/views/auxiliaryFittings/salesManagement/oldPartsReturnFactory/index.vue

@@ -0,0 +1,323 @@
+<template>
+  <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
+    <template slot-scope="{activeKey, data}">
+      <div :style="{
+    width: '100%',
+    height: activeKey == 'list' ? '100%' : '0px',
+    overflow: 'hidden'
+  }">
+        <template-page v-if="isShowTab" ref="pageRef" :get-list="getList" :table-attributes="tableAttributes"
+          :table-events="tableEvents" :options-evens-group="optionsEvensGroup" :moreParameters="moreParameters"
+          :column-parsing="columnParsing" :exportList="exportList" :operation="operation()">
+          <div slot="moreSearch">
+            <el-radio-group v-model="flag" size="mini">
+              <el-radio-button label="">全部</el-radio-button>
+              <el-radio-button label="SAVE">保存</el-radio-button>
+              <el-radio-button label="SUBMIT">提交</el-radio-button>
+              <el-radio-button label="OK">通过</el-radio-button>
+              <el-radio-button label="FAIL">失败</el-radio-button>
+            </el-radio-group>
+            <br><br>
+          </div>
+        </template-page>
+      </div>
+      <div v-if="~['add', 'edit', 'detail'].indexOf(activeKey)" style="box-sizing: border-box;padding: 16px;">
+        <div>
+          <zj-form-container ref="formRef" :form-data="formData">
+            <zj-form-module title="单据信息" :form-data="formData" :form-items="formItems">
+            </zj-form-module>
+            <zj-form-module title="旧件信息" :form-data="formData" :form-items="product">
+            </zj-form-module>
+          </zj-form-container>
+          <div slot="footer" class="dialog-footer">
+            <el-button size="mini" @click="data.removeTab">取 消</el-button>
+            <el-button v-if="openType == 0 && !~['OK', 'FAIL'].indexOf(formData.flag)" size="mini" type="primary"
+              @click="quedingbaocun(data.removeTab)">保存</el-button>
+            <el-button v-if="openType == 1 && formData.flag == 'SUBMIT'" size="mini" type="primary"
+              @click="shenbi(data.removeTab, 'OK')">审核通过</el-button>
+            <el-button v-if="openType == 1 && formData.flag == 'SUBMIT'" size="mini" type="primary"
+              @click="shenbi(data.removeTab, 'FAIL')">审核失败</el-button>
+          </div>
+        </div>
+      </div>
+    </template>
+  </zj-tab-page>
+</template>
+
+<script>
+import TemplatePage from '@/components/template/template-page-1.vue'
+import import_mixin from '@/components/template/import_mixin.js'
+import operation_mixin from '@/components/template/operation_mixin.js'
+import basicInfo from "./mixins/basicInfo"
+import productColumns from "./mixins/productColumns"
+import { websitPartsFactoryRetListPageV2, websitPartsFactoryRetPageExport, websitPartsFactoryRetDetail, websitPartsFactoryRetAdd, websitPartsFactoryRetUpdate, websitPartsFactoryRetExamine } from "@/api/oldPartsReturnFactory";
+export default {
+  components: { TemplatePage },
+  mixins: [import_mixin, operation_mixin, basicInfo, productColumns],
+  data() {
+    return {
+      // 表格属性
+      tableAttributes: {
+        // 启用勾选列
+        selectColumn: false
+      },
+      // 表格事件
+      tableEvents: {
+        'selection-change': this.selectionChange
+      },
+      // 勾选选中行
+      recordSelected: [],
+      openType: 0,
+      formData: {
+        "address": "",
+        "area": "",
+        "areaId": "",
+        "buyPeople": "",
+        "city": "",
+        "cityId": "",
+        "companyWechatId": "",
+        "companyWechatName": JSON.parse(localStorage.getItem('greemall_user')).companyName,
+        "endTime": "",
+        "factory": "",
+        "factoryAddress": "",
+        "fileUrl": [],
+        "flag": "",
+        "goodsType": "P",
+        "identity": "",
+        "manger": "",
+        "mobile": "",
+        "orderEnginBaseId": "",
+        "orderUseType": "",
+        "partsRetId": "",
+        "payNo": "",
+        "payTime": "",
+        "payType": "",
+        "projectName": "",
+        "projectNo": "",
+        "province": "",
+        "provinceId": "",
+        "reason": "",
+        "refundSerialNo": "",
+        "refundState": "",
+        "refundTime": "",
+        "remark": "",
+        "salesId": "",
+        "salesTime": "",
+        "salesType": "",
+        "source": "",
+        "startTime": "",
+        "street": "",
+        "streetId": "",
+        "submitBy": "",
+        "submitTime": "",
+        "totalAmount": 0,
+        "totalRefundAmount": 0,
+        "type": "FACTORY",
+        "websitId": "",
+        "websitName": "",
+        "websitPartsRetItemList": [],
+        "websitPartsRetItems": [],
+        "websitPartsRetOldRecordList": [],
+        "workerId": "",
+        "workerMobile": "",
+        "workerName": "",
+        "workerWebsitId": "",
+        "workerWebsitName": ""
+      },
+      isShowTab: true,
+      flag: ""
+    }
+  },
+  computed: {
+    // 更多参数
+    moreParameters() {
+      return []
+    },
+    // 事件组合
+    optionsEvensGroup() {
+      return [
+        [
+          [
+            this.optionsEvensAuth('add', {
+              click: () => {
+                this.$refs.tabPage.addTab({
+                  // 对应显示的模块
+                  activeKey: "add",
+                  // 唯一标识
+                  key: "add",
+                  // 页签名称
+                  label: "新增",
+                  // 打开时事件
+                  triggerEvent: () => {
+                    this.handleClose()
+                    this.$nextTick(() => {
+                      this.openForm()
+                    })
+                  },
+                  // 关闭时事件
+                  closeEvent: () => { }
+                })
+              }
+            })
+          ]
+        ]
+      ]
+    },
+  },
+  watch: {
+    flag() {
+      this.isShowTab = false
+      this.$nextTick(() => {
+        this.isShowTab = true
+      })
+    }
+  },
+  methods: {
+    // 列表请求函数
+    getList(p, cb) {
+      try {
+        var pam = JSON.parse(JSON.stringify(p))
+        if (this.flag) {
+          pam.params.push({ 'param': 'a.flag', "compare": "=", "value": this.flag })
+        }
+        cb && cb(pam)
+        return websitPartsFactoryRetListPageV2(pam)
+      } catch (error) {
+        console.log(error)
+      }
+    },
+    // 列表导出函数
+    exportList: websitPartsFactoryRetPageExport,
+    // 表格列解析渲染数据更改
+    columnParsing(item, defaultData) {
+      return defaultData
+    },
+    // 监听勾选变化
+    selectionChange(data) {
+      this.recordSelected = data
+    },
+    // 关闭
+    handleClose() {
+      this.$data.formData = this.$options.data().formData
+      this.openType = 0
+    },
+    // 打开弹窗
+    openForm() {
+      this.getWebsitList()
+      this.getProductSel()
+    },
+    // 保存
+    quedingbaocun(removeTab) {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          ; ([websitPartsFactoryRetAdd, websitPartsFactoryRetUpdate][this.formData.partsRetId ? 1 : 0])({
+            ...this.formData,
+            ...(() => {
+              if (this.formData.partsRetId) {
+                return {
+                  flag: "SUBMIT"
+                }
+              }
+            })(),
+            fileUrl: this.formData.fileUrl.map(item => item.url).join(",")
+          }).then(res => {
+            this.$message({
+              type: 'success',
+              message: '保存成功'
+            })
+            this.$refs.pageRef.refreshList()
+            removeTab && removeTab()
+            this.handleClose()
+          })
+        }
+      })
+    },
+    shenbi(removeTab, flag) {
+      this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
+        if (valid) {
+          websitPartsFactoryRetExamine({
+            ...this.formData,
+            fileUrl: this.formData.fileUrl.map(item => item.url).join(","),
+            flag: flag
+          }).then(res => {
+            this.$message({
+              type: 'success',
+              message: '审核成功'
+            })
+            this.$refs.pageRef.refreshList()
+            removeTab && removeTab()
+            this.handleClose()
+          })
+        }
+      })
+    },
+    // 操作按钮
+    operation() {
+      return this.operationBtn({
+        detail: {
+          click: ({ row, index, column }) => {
+            this.$refs.tabPage.addTab({
+              // 对应显示的模块
+              activeKey: "detail",
+              // 唯一标识
+              key: "detail",
+              // 页签名称
+              label: "详情",
+              // 打开时事件
+              triggerEvent: () => {
+                this.handleClose()
+                this.$nextTick(() => {
+                  this.openType = 1;
+                  websitPartsFactoryRetDetail({ id: row.partsRetId }).then(res => {
+                    Object.assign(this.formData, res.data, {
+                      fileUrl: res.data.fileUrl ? res.data.fileUrl.split(",").map(url => ({ url })) : [],
+                      websitPartsRetItems: res.data.websitPartsRetItemList
+                    })
+                    this.openForm()
+                  })
+                })
+              },
+              // 关闭时事件
+              closeEvent: () => { }
+            })
+          }
+        },
+        edit: {
+          click: ({ row, index, column }) => {
+            this.$refs.tabPage.addTab({
+              // 对应显示的模块
+              activeKey: "edit",
+              // 唯一标识
+              key: "edit",
+              // 页签名称
+              label: "编辑",
+              // 打开时事件
+              triggerEvent: () => {
+                this.handleClose()
+                this.$nextTick(() => {
+                  websitPartsFactoryRetDetail({ id: row.partsRetId }).then(res => {
+                    Object.assign(this.formData, res.data, {
+                      fileUrl: res.data.fileUrl ? res.data.fileUrl.split(",").map(url => ({ url })) : [],
+                      websitPartsRetItems: res.data.websitPartsRetItemList
+                    })
+                    this.openForm()
+                  })
+                })
+              },
+              // 关闭时事件
+              closeEvent: () => { }
+            })
+          }
+        },
+        // printTp: {
+        //   click: ({ row, index, column }) => {
+
+        //   }
+        // },
+      })
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped></style>

+ 183 - 0
src/views/auxiliaryFittings/salesManagement/oldPartsReturnFactory/mixins/basicInfo.js

@@ -0,0 +1,183 @@
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+import { getWebsit } from "@/api/customerManagement.js"
+import ImageUpload from '@/components/file-upload'
+export default {
+  data() {
+    return {
+      websitList: []
+    }
+  },
+  computed: {
+    formItems() {
+      return [
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '单据状态',
+            prop: 'flag',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '单据编号',
+            prop: 'partsRetId',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '所属商户',
+            prop: 'companyWechatName',
+          },
+        },
+        {
+          name: 'el-select',
+          md: 6,
+          options: this.websitList,
+          attributes: {
+            placeholder: '请选择',
+            clearable: true,
+            filterable: true,
+            disabled: this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)
+          },
+          formItemAttributes: {
+            label: '网点名称',
+            prop: 'websitId',
+            rules: [...required],
+          },
+          events: {
+            change: (val) => {
+              this.formData.websitName = this.websitList.find(item => item.value == val)?.label || ""
+              this.formData.websitPartsRetItems = []
+              this.getProductSel()
+            }
+          }
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: {
+            placeholder: '请输入',
+            disabled: this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)
+          },
+          formItemAttributes: {
+            label: '返厂单位',
+            prop: 'factory',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 12,
+          attributes: {
+            placeholder: '请输入',
+            disabled: this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)
+          },
+          formItemAttributes: {
+            label: '返厂地址',
+            prop: 'factoryAddress',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '制单人',
+            prop: 'createBy',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '制单时间',
+            prop: 'createTime',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '审核人',
+            prop: 'confirmBy',
+          },
+        },
+        {
+          name: 'el-input',
+          md: 6,
+          attributes: {
+            placeholder: '请输入',
+            disabled: true
+          },
+          formItemAttributes: {
+            label: '审核时间',
+            prop: 'confirmTime',
+          },
+        },
+        {
+          md: 24,
+          isShow: true,
+          name: 'slot-component',
+          formItemAttributes: {
+            label: '附件图片',
+            prop: 'fileUrl',
+            rules: []
+          },
+          render: (h, { props, onInput }) => {
+            var { value } = props
+            return (
+              <ImageUpload fileList={this.formData.fileUrl} uid="imgSrc677766_materials_drawing_images_iuhu" limit={1} isEdit={this.openType != 1 && !~["OK", "FAIL"].indexOf(this.formData.flag)} />
+            )
+          }
+        },
+        {
+          name: 'el-input',
+          md: 24,
+          formItemAttributes: { label: '备注', prop: 'remark' },
+          attributes: {
+            placeholder: '备注',
+            disabled: this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)
+          }
+        },
+      ]
+    }
+  },
+  methods: {
+    getWebsitList() {
+      getWebsit({ type: "C", status: true, isAll: true }).then(res => {
+        this.websitList = res.data.map(item => ({
+          label: item.name,
+          value: item.websitId,
+          data: item
+        }))
+      })
+    },
+  }
+}

+ 236 - 0
src/views/auxiliaryFittings/salesManagement/oldPartsReturnFactory/mixins/productColumns.js

@@ -0,0 +1,236 @@
+import { listPageV2 } from "@/api/auxiliaryFittings/attachmentProfile";
+import { websitStockListP } from "@/api/inventoryManagement";
+import { required, mobileRequired, mobile, httpUrl, email } from '@/components/template/rules_verify.js'
+export default {
+  data() {
+    return {
+      peijianSel: []
+    }
+  },
+  computed: {
+    productColumns() {
+      return [
+        {
+          columnAttributes: {
+            label: '配件名称',
+            prop: 'goodsId',
+            propName: 'goodsName',
+            width: 160
+          },
+          render: (h, { row, column, index }) => {
+            return <div class="redbordererr">
+              <el-form-item
+                label=""
+                lebel-width="0px"
+                prop={`websitPartsRetItems.${index}.${column.columnAttributes.prop}`}
+                rules={required}
+              >
+                <el-select
+                  value={row[column.columnAttributes.prop]}
+                  onInput={val => {
+                    row[column.columnAttributes.prop] = val
+                  }}
+                  onChange={val => {
+                    this.delItemKey(3, row)
+                    if (val) {
+                      var data = this.peijianSel.find(item => item.goodsId == val)
+                      row[column.columnAttributes.propName] = data?.goodsName || ""
+                      console.log(data)
+                      if (data) {
+                        row.goodsSalesUnit = data.goodsStockUnit
+                        row.brandRelaName = data.brandRelaName
+                        row.productRelaName = data.productRelaName
+                        row.stockQty = data.oldQty
+                      }
+                    } else {
+                      row[column.columnAttributes.propName] = ''
+                    }
+                    this.$refs.formRef.validateField([`websitPartsRetItems.${index}.${column.columnAttributes.prop}`], (valid, invalidFields, errLabels) => { })
+                  }}
+                  placeholder="请选择"
+                  disabled={this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)}
+                >
+                  {this.peijianSel.map((item, index_) => (
+                    <el-option key={index_} label={item.goodsName} value={item.goodsId}></el-option>
+                  ))}
+                </el-select>
+              </el-form-item>
+            </div>
+          }
+        },
+        {
+          columnAttributes: {
+            label: '单位',
+            prop: 'goodsSalesUnit',
+            width: 160
+          }
+        },
+        {
+          columnAttributes: {
+            label: '商品编码',
+            prop: 'goodsId',
+            width: 160
+          }
+        },
+        {
+          columnAttributes: {
+            label: '数量',
+            prop: 'oldRefundQty',
+          },
+          render: (h, { row, column, index }) => {
+            return <div class="redbordererr">
+              <el-form-item
+                label=""
+                lebel-width="0px"
+                prop={`websitPartsRetItems.${index}.${column.columnAttributes.prop}`}
+                rules={required}
+              >
+                <el-input
+                  value={row[column.columnAttributes.prop]}
+                  onInput={val => {
+                    row[column.columnAttributes.prop] = val
+                    this.$nextTick(() => {
+                      this.$refs.formRef.validateField([`websitPartsRetItems.${index}.${column.columnAttributes.prop}`], (valid, invalidFields, errLabels) => { })
+                    })
+                  }}
+                  type="number"
+                  placeholder="请输入"
+                  disabled={this.openType == 1 || !!~["OK", "FAIL"].indexOf(this.formData.flag)}
+                ></el-input>
+              </el-form-item>
+            </div>
+          }
+        },
+        {
+          columnAttributes: {
+            label: '适用品牌',
+            prop: 'brandRelaName',
+            width: 160
+          }
+        },
+        {
+          columnAttributes: {
+            label: '适用产品大类',
+            prop: 'productRelaName',
+            width: 160
+          }
+        }, {
+          columnAttributes: {
+            label: '创建时旧件库存',
+            prop: 'stockQty',
+            width: 180
+          }
+        },
+        ...(() => {
+          if (this.openType != 1 && !~["OK", "FAIL"].indexOf(this.formData.flag)) {
+            return [{
+              columnAttributes: {
+                label: '操作',
+                fixed: 'right',
+                width: 140
+              },
+              render: (h, { row, column, index }) => {
+                return (
+                  <div style="padding:0 6px" class="operation-btns">
+                    <el-button
+                      type="text"
+                      onClick={() => {
+                        this.formData?.websitPartsRetItems?.splice(index, 1)
+                      }}
+                    >
+                      删除
+                    </el-button>
+                  </div>
+                )
+              }
+            }]
+          }
+          return []
+        })()
+      ]
+    },
+    product() {
+      return [{
+        name: 'slot-component',
+        md: 24,
+        formItemAttributes: {
+          label: '',
+          'label-width': '0px',
+          prop: 'websitPartsRetItems',
+          errLabel: '旧件信息',
+          rules: [...required],
+        },
+        render: (h, { props }) => {
+          return [
+            (this.openType != 1 && !~["OK", "FAIL"].indexOf(this.formData.flag) ? <div style="margin-bottom:10px">
+              <el-button type="primary" onClick={() => { this.addItem() }} disabled={this.formData.websitId ? false : true}>
+                添加
+              </el-button>
+            </div> : null),
+            <zj-table
+              columns={this.productColumns}
+              table-data={this.formData.websitPartsRetItems}
+            />
+          ]
+        }
+      }]
+    },
+  },
+  methods: {
+    getProductSel() {
+      if (this.formData.websitId) {
+        // 获取配件下拉数据
+        websitStockListP({ "pageNum": 1, "pageSize": -1, "params": [{ "param": "a.websit_id", "compare": "=", "value": this.formData.websitId }] }).then(res => {
+          this.peijianSel = res.data.records
+        });
+      }
+    },
+    addItem() {
+      this.formData.websitPartsRetItems.unshift({
+        "brandRelaId": "",
+        "brandRelaName": "",
+        "examineQty": "",
+        "goodsId": "",
+        "goodsName": "",
+        "goodsPriceId": "",
+        "goodsSalesUnit": "",
+        "goodsSpecification": "",
+        "goodsType": "P",
+        "marketPrice": "",
+        "newRefundQty": "",
+        "oldRefundQty": "",
+        "partsRetId": "",
+        "payType": "",
+        "price": "",
+        "productRelaId": "",
+        "productRelaName": "",
+        "refundAmount": "",
+        "saleAmount": "",
+        "salesId": "",
+        "salesQty": "",
+        "secondPrice": "",
+        "stockQty": "",
+        "websitId": "",
+        "websitName": ""
+      })
+    },
+    delItemKey(num, row) {
+      if (num <= 1) {
+        row.goodsCategoryId = ""
+        row.goodsCategoryName = ""
+      }
+      if (num <= 2) {
+        row.goodsId = ""
+        row.goodsName = ""
+      }
+      if (num <= 3) {
+        row.brandRelaId = ""
+        row.brandRelaName = ""
+        row.productRelaId = ""
+        row.productRelaName = ""
+        row.goodsSalesUnit = ""
+        row.stockQty = ""
+      }
+    },
+  },
+}