Browse Source

商品信息主流程

qinbai 3 years ago
parent
commit
b6defecf9b

+ 11 - 0
src/api/basicData/commodityType.js

@@ -157,3 +157,14 @@ export const getDetail = (id) => {
   })
 }
 
+export const priceDelete = (id) => {
+  return request({
+    url: '/api/blade-client/goodsdesc/priceDelete',
+    method: 'delete',
+    params: {
+      id:id
+    }
+  })
+}
+
+

+ 7 - 2
src/views/basicData/commodityType/configuration/customerContact.json

@@ -21,6 +21,11 @@
   "dialogClickModal": false,
   "column":[
     {
+      "prop": "billType",
+      "hide": true,
+      "value": 0
+    },
+    {
       "label": "数量",
       "prop": "code",
       "index": 1,
@@ -54,7 +59,7 @@
       "cell": true,
       "rules": [
         {
-          "required": false,
+          "required": true,
           "message": " ",
           "trigger": "blur"
         }
@@ -67,7 +72,7 @@
       "cell": true,
       "rules": [
         {
-          "required": false,
+          "required": true,
           "message": " ",
           "trigger": "blur"
         }

+ 25 - 31
src/views/basicData/commodityType/configuration/customerPurchase.json

@@ -11,46 +11,37 @@
     "refreshBtn": false,
     "searchMenuSpan": 6,
     "dialogWidth": "60%",
-  "align": "center",
+    "align": "center",
     "tree": true,
     "border": true,
     "index": true,
     "selection": true,
     "menuWidth": 150,
-  "addBtnText": "录入明细",
+   "addBtnText": "录入明细",
     "dialogClickModal": false,
     "column":[
+      {
+        "prop": "billType",
+        "hide": true,
+        "value": 1
+      },
         {
             "label": "供应商",
             "prop": "corpId",
             "index": 1,
             "width":150,
-            "cell": true,
-            "rules": [
-                {
-                    "required": true,
-                    "message": " ",
-                    "trigger": "blur"
-                }
-            ]
+            "slot": true
         },{
             "label": "计价单位",
             "prop": "unit",
             "index": 1,
             "width":120,
-            "cell": true,
-            "rules": [
-                {
-                    "required": true,
-                    "message": " ",
-                    "trigger": "blur"
-                }
-            ]
+            "cell": true
         },{
             "label": "币别",
             "prop": "currency",
             "index": 2,
-            "width":120,
+            "width":150,
             "cell": true,
             "rules": [
                 {
@@ -62,8 +53,9 @@
         },{
             "label": "采购单价",
             "prop": "price",
+            "type": "number",
             "index": 3,
-            "width":120,
+            "width":150,
             "cell": true,
             "rules": [
                 {
@@ -75,21 +67,23 @@
         },{
             "label": "是否含税",
             "prop": "ifTax",
+            "type": "select",
             "index": 4,
-            "width":120,
+            "width":150,
             "cell": true,
-            "rules": [
-                {
-                    "required": false,
-                    "message": " ",
-                    "trigger": "blur"
-                }
-            ]
+            "dicData": [{
+              "label": "否",
+              "value": 0
+            },{
+              "label": "是",
+              "value": 1
+            }]
+
         },{
             "label": "税率",
             "prop": "taxRate",
             "index": 4,
-            "width":120,
+            "width":150,
             "cell": true,
             "rules": [
                 {
@@ -102,7 +96,7 @@
             "label": "金额",
             "prop": "typeno",
             "index": 4,
-            "width":120,
+            "width":150,
             "cell": true,
             "rules": [
                 {
@@ -115,7 +109,7 @@
             "label": "备注",
             "prop": "remarks",
             "index": 4,
-            "width":200,
+            "width":300,
             "cell": true,
             "rules": [
                 {

+ 2 - 1
src/views/basicData/commodityType/configuration/mainList.json

@@ -4,7 +4,8 @@
   "calcHeight": 80,
   "tip": false,
   "searchShow": true,
-  "searchMenuSpan": 6,
+  "searchMenuSpan": 12,
+  "searchMenuPosition": "right",
   "border": true,
   "index": true,
   "selection": true,

+ 192 - 29
src/views/basicData/commodityType/detailsPageEdit.vue

@@ -2,7 +2,6 @@
   <div class="borderless">
     <div class="customer-head">
       <div class="customer-back">
-        <!--        <i class="back-icon el-icon-arrow-left"></i><i style="font-style:normal">返回管理列表</i>-->
         <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
                    @click="backToList">返回列表
         </el-button>
@@ -63,7 +62,7 @@
               :data="contactsData"
               ref="crudContact"
               @row-save="rowContactSave"
-              @row-del="rowDel">
+              @row-del="rowContactsDel">
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -82,7 +81,12 @@
               :data="purchaseData"
               ref="crudPurchase"
               @row-save="rowPurchaseSave"
-              @row-del="rowDel">
+              @row-del="rowPurchaseDel">
+            <template slot="corpId" slot-scope="{row,index}">
+              <span v-if="row.$cellEdit" style="float: left;color: #F56C6C;">*</span>
+              <span style="margin-left: 12px;padding-top: 2px">{{ row.corpName }}</span>
+              <el-button v-if="row.$cellEdit" type="text" size="mini" style="float: right" @click="selectUser(row)">选择</el-button>
+            </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -109,6 +113,45 @@
           <avue-ueditor v-model="text" :options="options"></avue-ueditor>
         </basic-container>
       </el-form>
+      <el-dialog
+        title="导入供应商"
+        :visible.sync="userDialog"
+        class="el-dialogDeep"
+        append-to-body
+        width="80%">
+        <el-row style="margin-top: -5px;height: 0">
+          <el-col :span="5">
+            <div class="box">
+              <el-scrollbar>
+                <basic-container>
+                  <avue-tree :option="userTreeOption" :data="userTreeData" @node-click="userNodeClick"/>
+                </basic-container>
+              </el-scrollbar>
+            </div>
+          </el-col>
+          <el-col :span="19">
+            <basic-container>
+              <avue-crud ref="userCrud"
+                         :option="userOption"
+                         :data="userDataList"
+                         :table-loading="userLoading"
+                         :page.sync="userPage"
+                         v-model="userForm"
+                         @search-change="userSearchChange"
+                         @search-reset="userSearchReset"
+                         @refresh-change="userRefreshChange"
+                         @selection-change="userSelectionChange"
+                         @on-load="userOnLoad"
+              >
+              </avue-crud>
+            </basic-container>
+          </el-col>
+        </el-row>
+        <span slot="footer" class="dialog-footer">
+      <el-button @click="userDialog = false">取 消</el-button>
+      <el-button type="primary" :disabled="this.userSelection.length == 1 ? false:true" @click="userConfirm" >确 定</el-button>
+    </span>
+      </el-dialog>
     </div>
   </div>
 </template>
@@ -117,7 +160,9 @@ import customerContact from "./configuration/customerContact.json"
 import customerPurchase from "./configuration/customerPurchase.json"
 import {detail, corpsattn, typeSave} from "@/api/maintenance/priceManagement"
 import imgUploadList from "./configuration/imgUploadList.json"
-import { getDetail, updateDetail } from "@/api/basicData/commodityType";
+import { getDetail, updateDetail,getDeptTree ,priceDelete} from "@/api/basicData/commodityType";
+import {customerList,  getDeptLazyTree} from "@/api/basicData/customerInformation"
+import userOption from "../customerInformation/configuration/mainList.json";
 
 export default {
   name: "detailsPage",
@@ -135,6 +180,7 @@ export default {
       },
       form: {},
       disabled: false,
+      userDialog:false,//供应商导入窗口
       customerContact: customerContact,
       customerPurchase: customerPurchase,
       imgUploadList: imgUploadList,
@@ -181,7 +227,7 @@ export default {
             prop: 'goodsTypeId',
             rules: [
               {
-                required: false,
+                required: true,
                 message: ' ',
                 trigger: 'blur'
               }
@@ -392,32 +438,63 @@ export default {
             ]
           }
         ]
-      }
+      },
+      detailsSelect:{},
+      //用户窗口定义
+      userTreeOption: {
+        nodeKey: 'id',
+        lazy: true,
+        treeLoad: function (node, resolve) {
+          const parentId = (node.level === 0) ? 0 : node.data.id;
+          getDeptLazyTree(parentId).then(res => {
+            resolve(res.data.data.map(item => {
+              return {
+                ...item,
+                leaf: !item.hasChildren
+              }
+            }))
+          });
+        },
+        addBtn: false,
+        menu: false,
+        size: 'small',
+        props: {
+          labelText: '标题',
+          label: 'title',
+          value: 'value',
+          children: 'children'
+        }
+      },
+      userTreeData:[],
+      userOption:userOption,
+      userLoading:false,
+      userDataList:[],
+      userSelection:"",
+      userTreeDeptId:"",
+      userForm:{},
+      userPage:{
+        currentPage: 1,
+        total: 0,
+        pageSize: 10
+      },
     }
   },
   //初始化查询
   created() {
+    getDeptTree().then(res => {
+      this.dicData = res.data.data;
+    });
     if (this.$route.query.id) {
       getDetail(JSON.parse(this.$route.query.id)).then(res => {
         this.form = res.data.data
-        // this.contactsData = res.data.data.saleGoodsPrice
-        // this.purchaseData = res.data.data.bugGoodsPrice
+        this.contactsData = res.data.data.saleGoodsPrice
+        this.purchaseData = res.data.data.buyGoodsPrice
       })
-    } else {
-      this.form = {}
-      this.contactsData = []
+    }else{
+      //新增时根据左侧选中树结构给客户类别赋值
+      this.$set(this.form,"goodsTypeId", this.$route.query.treeDeptId)
     }
   },
-  watch: {
-    // '$route'(to, from) {
-    //   console.log(to, from);
-    //   if (this.$route.query.id) {
-    //
-    //   } else {
-    //     this.form = {}
-    //   }
-    // }
-  },
   methods: {
     rowContactSave(row, done, loading) {
       done()
@@ -432,15 +509,14 @@ export default {
       this.$refs.crudPurchase.rowCell(row, index)
     },
     //删除商品信息触发
-    rowDel(row, index, donerowDel) {
+    rowContactsDel(row, index) {
       this.$confirm("确定将选择数据删除?", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning"
       }).then(() => {
-        //商品判断是否需要调用删除接口
         if (row.id) {
-          corpsattn(row.id).then(res => {
+          priceDelete(row.id).then(res => {
             this.$message({
               type: "success",
               message: "操作成功!"
@@ -456,16 +532,62 @@ export default {
         }
       })
     },
+    rowPurchaseDel(row, index) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          priceDelete(row.id).then(res => {
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.purchaseData.splice(index, 1);
+          })
+        } else {
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          this.purchaseData.splice(index, 1);
+        }
+      })
+    },
     //修改提交触发
     editCustomer() {
       this.$refs["form"].validate((valid) => {
-        if (valid) {
+        //校验明细列表
+        let valids = true;
+        if(this.contactsData.length !=0){
+          this.contactsData.forEach((item) =>{
+            if((!item.code ||!item.bigCharacter ||!item.brand ||!item.brandItem ) && valids){
+              this.$message({
+                type: "warning",
+                message: "请检查销售价格第 "+(item.$index +1 )+" 行必填项"
+              });
+              valids = false;
+            }
+          })
+        }
+        if(this.purchaseData.length !=0){
+          this.purchaseData.forEach((item) =>{
+            if((item.corpId =="") && valids){
+              this.$message({
+                type: "warning",
+                message: "请检查采购价格第 "+(item.$index +1 )+" 行必填项"
+              });
+              valids = false;
+            }
+          })
+        }
+        if (valid && valids) {
           const params = {
             ...this.form,
             type:0,
-            goodsTypeId:"0",
             saleGoodsPrice : this.contactsData,
-            bugGoodsPrice : this.purchaseData
+            buyGoodsPrice : this.purchaseData
           }
           updateDetail(params).then(res => {
             this.$message({
@@ -478,6 +600,49 @@ export default {
         }
       });
     },
+    //供应商窗口事件
+    selectUser(row){
+      this.userDialog = true
+      this.detailsSelect = row.$index;
+    },
+    userSearchChange(params, done){
+      this.userOnLoad(this.userPage, params);
+      done()
+    },
+    userSearchReset(){
+
+    },
+    userRefreshChange(){
+      this.userOnLoad(this.userPage)
+    },
+    userSelectionChange(row){
+      this.userSelection = row;
+    },
+    userOnLoad(page,params={  parentId: 0  }){
+      this.userLoading = true;
+      let queryParams = Object.assign({}, params, {
+        size: page.pageSize,
+        current: page.currentPage,
+        corpsTypeId: this.userTreeDeptId
+      });
+      customerList(queryParams).then(res => {
+        this.userDataList = res.data.data.records
+        this.userPage.total = res.data.data.total
+        this.userLoading = false;
+      });
+    },
+    userNodeClick(data){
+      this.userTreeDeptId = data.id;
+      this.userOnLoad(this.userPage);
+    },
+    //确定
+    userConfirm(){
+      if(this.userSelection){
+        this.purchaseData[this.detailsSelect].corpId = this.userSelection[0].id;
+        this.$set(this.purchaseData[this.detailsSelect],'corpName',this.userSelection[0].cname)
+        this.userDialog = !this.userDialog
+      }
+    },
     // 商品图片上传保存
     imgUploadSave(row, done, loading) {
       console.log(row)
@@ -513,10 +678,8 @@ export default {
     },
     // 上传前
     uploadBefore(file, done, loading,column) {
-      console.log(file.type)
       const is2M = file.size / 1024 / 1024 < 2
       const isType = file.type === "image/jpeg" || file.type === "image/png" || file.type === "image/jpg"
-      console.log(isType)
       if (!isType) {
         this.$message.error('图片只能是JPG、JPEG、PNG格式')
         loading()

+ 0 - 8
src/views/basicData/commodityType/index.vue

@@ -407,18 +407,10 @@ export default {
       this.onLoad(this.page);
     },
     initData(tenantId) {
-      // getRoleTree(tenantId).then(res => {
-      //   const column = this.findObject(this.option.group, "roleId");
-      //   column.dicData = res.data.data;
-      // });
       getDeptTree().then(res => {
         const column = this.findObject(this.option.column, "goodsTypeId");
         column.dicData = res.data.data;
       });
-      // getPostList(tenantId).then(res => {
-      //   const column = this.findObject(this.option.group, "postId");
-      //   column.dicData = res.data.data;
-      // });
     },
     submitRole() {
       const roleList = this.$refs.treeRole.getCheckedKeys().join(",");