瀏覽代碼

Merge branch 'dev' of http://git.echepei.com/caojunjie/Smart_platform_ui into dev

QuKatie 3 年之前
父節點
當前提交
774ea3a1f2

+ 128 - 0
src/components/goodsSelect/configuration/mainList.json

@@ -0,0 +1,128 @@
+{
+  "height": "auto",
+  "lazy": true,
+  "tip": false,
+  "simplePage": true,
+  "searchSpan": 12,
+  "searchMenuSpan": 12,
+  "searchMenuPosition": "right",
+  "dialogWidth": "60%",
+  "searchShowBtn": false,
+  "searchShow": true,
+  "menu": false,
+  "addBtn": false,
+  "tree": true,
+  "border": true,
+  "index": true,
+  "selection": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "menuWidth": 300,
+  "dialogClickModal": false,
+  "column": [
+    {
+      "label": "商品编码",
+      "prop": "code",
+      "search": false,
+      "width": 100,
+      "rules": [
+        {
+          "required": true,
+          "message": " ",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "商品名称",
+      "prop": "cname",
+      "slot": true,
+      "search": true,
+      "width": 100,
+      "rules": [
+        {
+          "required": true,
+          "message": " ",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "商品类别",
+      "prop": "goodsTypeName",
+      "hide": true,
+      "addDisabled": false,
+      "multiple": true,
+      "rules": [{
+        "required": true,
+        "message": " ",
+        "trigger": "click"
+      }]
+    },
+    {
+      "label": "规格",
+      "prop": "typeno",
+      "search": false
+    },
+    {
+      "label": "品牌",
+      "prop": "brand",
+      "slot": true
+    },
+    {
+      "label": "花纹",
+      "prop": "brandItem",
+      "slot": true
+    },
+    {
+      "label": "规格尺寸",
+      "prop": "specs",
+      "slot": true
+    },
+    {
+      "label": "产品类别",
+      "prop": "category",
+      "slot": true
+    },
+    {
+      "label": "产品分类",
+      "prop": "categoryitem",
+      "slot": true
+    },
+    {
+      "label": "供应商",
+      "prop": "providers",
+      "slot": true
+    },
+    {
+      "label": "计量单位",
+      "prop": "unit",
+      "slot": true
+    },
+    {
+      "label": "包装单位",
+      "prop": "packgeunit",
+      "slot": true
+    },
+    {
+      "label": "商品图片",
+      "prop": "url",
+      "type": "upload",
+      "listType": "picture-img",
+      "dataType": "string",
+      "action": "/api/blade-resource/oss/endpoint/put-file",
+      "propsHttp": {
+        "res": "data",
+        "url": "link"
+      },
+      "hide": true,
+      "span": 24
+    },
+    {
+      "label": "备注",
+      "prop": "remarks",
+      "slot": true
+    }
+  ]
+}

+ 307 - 0
src/components/goodsSelect/index.vue

@@ -0,0 +1,307 @@
+<template>
+  <span class="select-component" style="display:inline-flex;width: 100%;">
+    <el-select
+      v-model="value"
+      size="small"
+      :placeholder="configuration.placeholder"
+      style="border-right: none;width: 100%"
+      :disabled="disabled?disabled:false"
+      :multiple="configuration.multiple?configuration.multiple:false"
+      :clearable="configuration.clearable?configuration.clearable:false"
+      :collapse-tags="configuration.collapseTags?configuration.collapseTags:false"
+      filterable
+      remote
+      @change="changeName()"
+      :remote-method="remoteMethod"
+    >
+      <el-option
+        v-for="item in configuration.dicData.length !== 0?dicData.length !== 0?dicData:configuration.dicData:dicData"
+        :key="item.id"
+        :label="item.cname"
+        :value="item.cname"
+        @click.native="getRow(item)"
+      />
+    </el-select>
+    <el-button slot="append" icon="el-icon-search" size="mini" @click="dialogVisible = true"
+               :disabled="disabled?disabled:false"></el-button>
+  <el-dialog
+    v-dialogdrag
+    title="导入商品"
+    :fullscreen="dialogFull"
+    :visible.sync="dialogVisible"
+    class="el-dialogDeep"
+    append-to-body
+    width="80%">
+    <template slot="title">
+      <span class="el-dialog__title">
+        <span style="display:inline-block;background-color: #3478f5;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px"></span>
+        导入客户
+      </span>
+      <div style="float: right" class="avue-crud__dialog__menu" @click="dialogFull? dialogFull=false: dialogFull=true">
+        <i class="el-icon-full-screen"></i>
+      </div>
+    </template>
+    <el-row style="height: 0">
+      <el-col :span="5">
+        <div class="box">
+          <el-scrollbar>
+            <basic-container>
+              <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
+            </basic-container>
+          </el-scrollbar>
+        </div>
+      </el-col>
+      <el-col :span="19">
+        <basic-container>
+          <avue-crud :option="option"
+                     :data="dataList"
+                     ref="crud"
+                     v-model="form"
+                     :page.sync="page"
+                     :before-close="beforeClose"
+                     @search-change="searchChange"
+                     @search-reset="searchReset"
+                     @refresh-change="refreshChange"
+                     @selection-change="selectionChange"
+                     @on-load="onLoad"
+                     @tree-load="treeLoad">
+          </avue-crud>
+        </basic-container>
+      </el-col>
+    </el-row>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="dialogVisible = false">取 消</el-button>
+      <el-button type="primary" @click="confirmSelection"
+                 :disabled="configuration.multipleChoices === true?false:selection.length === 1?false:true">确 定</el-button>
+    </span>
+  </el-dialog>
+  </span>
+</template>
+
+<script>
+import option from "./configuration/mainList.json";
+import {getGoods, getDeptLazyTree} from "@/api/basicData/customerInquiry"
+
+export default {
+  name: "index",
+  props: {
+    disabled: Boolean,
+    value: String,
+    configuration: Object,
+  },
+  model: {
+    prop: 'value',
+    event: 'returnBack'
+  },
+  data() {
+    return {
+      dialogFull: false,
+      form: {},
+      dicData: [],
+      dialogVisible: false,
+      value: '',
+      option: option,
+      parentId: 0,
+      dataList: [],
+      selection: [],
+      treeOption: {
+        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'
+        }
+      },
+      page: {
+        pageSize: 10,
+        pagerCount: 5,
+        total: 0,
+      },
+      // 远程模糊查找loading
+      loading: false,
+      queryParams: {
+        size: 10,
+        current: 1
+      },
+    }
+  },
+  created() {
+    // this.option.searchShow = this.configuration.searchShow ? this.configuration.searchShow : false
+    this.remoteMethod()
+  },
+  methods: {
+    changeName(){
+      this.$emit('returnBack', this.value)
+    },
+    getRow(row) {
+      this.$emit('getRow', row)
+    },
+    //刷新触发
+    refreshChange() {
+      this.page = {
+        pageSize: 10,
+        pagerCount: 5,
+        total: 0,
+      }
+    },
+    //确认导出触发
+    confirmSelection() {
+      this.dicData = []
+      if (this.configuration.multipleChoices === true) {
+        let value = []
+        for (let item in this.selection) {
+          this.dicData.push({cname: this.selection[item].cname})
+          value.push(this.selection[item].cname)
+        }
+        this.value = value
+      } else {
+        this.dicData.push({cname: this.selection[0].cname})
+        this.value = this.selection[0].cname
+      }
+      this.$emit('returnRow', this.selection)
+      this.selection = []
+      this.$emit('returnBack', this.value)
+      this.dialogVisible = false
+      this.$emit('receiveList',this.dicData)
+    },
+    //选中触发
+    selectionChange(selection) {
+      this.selection = selection
+    },
+    nodeClick(data) {
+      this.treeDeptId = data.id;
+      this.page.currentPage = 1;
+      this.onLoad(this.page);
+    },
+    //查询全部
+    initData() {
+      getGoods().then(res => {
+        console.log(this.form);
+        const column = this.findObject(this.option.column, "parentId");
+        column.dicData = res.data.data.records;
+      });
+    },
+    //新增子项触发
+    handleAdd(row) {
+      this.parentId = row.id;
+      const column = this.findObject(this.option.column, "parentId");
+      column.value = row.id;
+      column.addDisabled = true;
+      this.$refs.crud.rowAdd();
+    },
+    //点击新增时触发
+    beforeClose(done) {
+      this.parentId = "";
+      const column = this.findObject(this.option.column, "parentId");
+      column.value = "";
+      column.addDisabled = false;
+      done();
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      console.log(params)
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done()
+    },
+    //搜索重置按钮触发
+    searchReset() {
+      this.treeDeptId = '';
+      this.onLoad(this.page);
+    },
+    onLoad(page, params = {parentId: 0}) {
+      // let queryParams = Object.assign({}, params, {
+      //   size: page.pageSize,
+      //   current: page.currentPage,
+      //   corpsTypeId: this.treeDeptId
+      // })
+      getGoods(page.currentPage, page.pageSize, this.treeDeptId,params).then(res => {
+        this.dataList = res.data.data.records
+        this.page.total = res.data.data.total
+        if (this.page.total) {
+          this.option.height = window.innerHeight - 500;
+        } else {
+          this.option.height = window.innerHeight - 200;
+        }
+      })
+    },
+    //树桩列点击展开触发
+    treeLoad(tree, treeNode, resolve) {
+      const parentId = tree.id;
+      getGoods({parentId: parentId}).then(res => {
+        resolve(res.data.data.records);
+      });
+    },
+    // 远程模糊查找
+    remoteMethod(query) {
+      if (query) {
+        this.loading = true;
+        let params = {
+          // size: 10,
+          // current: 1,
+          cname: query
+        }
+        getGoods(1, 10, '', params).then(res => {
+          this.dicData = res.data.data.records
+          this.loading = false;
+        });
+      } else {
+        this.loading = true
+        this.queryParams = {
+          size: 10,
+          current: 1
+        }
+        getGoods(1, 10, '').then(res => {
+          this.dicData = []
+          this.configuration.dicData.forEach((e,index) => {
+            res.data.data.records.forEach(item => {
+              if (e.cname == item.cname) {
+                this.configuration.dicData.splice(index, 1)
+              }
+            })
+          })
+          this.configuration.dicData = this.configuration.dicData.concat(res.data.data.records)
+          // this.configuration.dicData = res.data.data.records
+          this.removeRepeat()
+          this.loading = false;
+        });
+      }
+    },
+    // 去重
+    removeRepeat() {
+      let obj = []
+      this.configuration.dicData = this.configuration.dicData.reduce((current,next) => {
+        obj[next.id] ? '': obj[next.id] = true && current.push(next)
+        return current
+      }, [])
+    },
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.el-dialogDeep {
+  ::v-deep .el-dialog {
+    .el-dialog__body, .el-dialog__footer {
+      padding-bottom: 0 !important;
+      padding-top: 0 !important;
+    }
+  }
+}
+</style>

+ 1 - 1
src/components/warehouseSelect/index.vue

@@ -214,7 +214,7 @@ export default {
       let queryParams = Object.assign({}, params, {
         size: page.pageSize,
         current: page.currentPage,
-        corpsTypeId: this.treeDeptId
+        storageTypeId: this.treeDeptId
       })
       customerList(queryParams).then(res => {
         this.dataList = res.data.data.records

+ 3 - 0
src/main.js

@@ -33,6 +33,8 @@ import './util/directives.js'
 import selectComponent from '@/components/selectComponent/customerSelect';
 // 仓库选择组件
 import warehouseSelect from '@/components/warehouseSelect/index';
+// 商品选择组件
+import goodsSelect from '@/components/goodsSelect/index';
 //枚举列设置名称管理
 import {
   getColumnName
@@ -45,6 +47,7 @@ import {
 import '@/assets/css/form.css'
 Vue.component('selectComponent', selectComponent);
 Vue.component('warehouseSelect', warehouseSelect);
+Vue.component('goodsSelect', goodsSelect);
 import portInfo from "@/components/port-info/index";
 Vue.component('portInfo', portInfo);
 // 注册全局crud驱动

+ 4 - 2
src/views/businessManagement/deliveryNotice/configuration/advantageProject.json

@@ -95,7 +95,8 @@
       "prop": "amount",
       "index": 5,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {
@@ -109,7 +110,8 @@
       "prop": "settlmentAmount",
       "index": 6,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {

+ 24 - 4
src/views/businessManagement/deliveryNotice/detailsPageEdit.vue

@@ -27,7 +27,7 @@
         <el-button
           class="el-button--small-yh"
           type="success" style="right: 140px;" @click="copyOrder"
-          :disabled="detailData.seeDisabled">
+          :disabled="detailData.seeDisabled || !this.form.id">
           复制新单
         </el-button>
         <el-button
@@ -76,6 +76,14 @@
 <!--                </avue-input-tree>-->
                 <warehouse-select v-else-if="item.prop === 'storageId'" v-model="form[item.prop]"
                                  :configuration="configurationWarehouse" style="width: 100%" :disabled="detailData.seeDisabled"/>
+                <el-input
+                  v-else-if="item.type == 'number'"
+                  placeholder="请输入"
+                  v-input-limit="2"
+                  size="small"
+                  :disabled="item.disabled || detailData.seeDisabled"
+                  v-model="form[item.prop]"
+                />
                 <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
               </el-form-item>
@@ -167,6 +175,18 @@
                 <span v-for="item in configuration.dicData" v-if="item.id == row.corpId">{{ item.cname }}</span>
               </span>
             </template>
+            <template slot="amount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.amount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.amount }}</span>
+            </template>
+            <template slot="settlmentAmount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.settlmentAmount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.settlmentAmount }}</span>
+            </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -824,9 +844,9 @@ export default {
         this.oldFeesList = []
         this.oldUploadList = []
         this.oldForm = Object.assign({}, this.form)
-        this.oldGoodsList = this.oldGoodsList.concat(this.contactsData)
-        this.oldFeesList = this.oldFeesList.concat(this.advantageProjectData)
-        this.oldUploadList = this.oldUploadList.concat(this.bankOfDepositData)
+        this.oldGoodsList = this.deepClone(this.contactsData)
+        this.oldFeesList = this.deepClone(this.advantageProjectData)
+        this.oldUploadList = this.deepClone(this.bankOfDepositData)
         if (isCopy) {
           delete this.form.sysNo
           delete this.form.id

+ 2 - 1
src/views/businessManagement/purchaseOrder/configuration/advantageProject.json

@@ -110,7 +110,8 @@
       "prop": "settlmentAmount",
       "index": 6,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {

+ 34 - 6
src/views/businessManagement/purchaseOrder/detailsPageEdit.vue

@@ -10,7 +10,9 @@
       <div class="add-customer-btn">
         <el-button
           class="el-button--small-yh"
-          type="success" style="right: 140px;" @click="copyOrder">
+          type="success" style="right: 140px;" @click="copyOrder"
+          :disabled="detailData.seeDisabled || !this.form.id"
+        >
           复制新单
         </el-button>
         <el-button
@@ -42,6 +44,14 @@
                 </el-select>
                 <selectComponent v-else-if="item.prop === 'corpId'" v-model="form[item.prop]"
                                  :configuration="configuration" style="width: 100%" :disabled="detailData.seeDisabled"/>
+                <el-input
+                  v-else-if="item.type == 'number'"
+                  placeholder="请输入"
+                  v-input-limit="2"
+                  size="small"
+                  :disabled="item.disabled || detailData.seeDisabled"
+                  v-model="form[item.prop]"
+                />
                 <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
               </el-form-item>
@@ -160,6 +170,18 @@
                 <span v-for="item in configuration.dicData" v-if="item.id == row.corpId">{{ item.cname }}</span>
               </span>
             </template>
+            <template slot="amount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.amount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.amount }}</span>
+            </template>
+            <template slot="settlmentAmount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.settlmentAmount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.settlmentAmount }}</span>
+            </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -343,7 +365,10 @@ export default {
   name: "detailsPage",
   props: {
     detailData: {
-      type: Object
+      type: Object,
+      default: {
+        seeDisabled: false
+      }
     }
   },
   data() {
@@ -521,6 +546,7 @@ export default {
           }, {
             label: '运费',
             prop: 'oceanFreight',
+            type: 'number',
             rules: [
               {
                 required: true,
@@ -604,7 +630,9 @@ export default {
         } else {
           this.bankOfDepositData = this.form.orderFilesList
         }
-        this.configuration.dicData = this.form.corpsName
+        if (this.form.corpsName) {
+          this.configuration.dicData = this.form.corpsName
+        }
         let feesData = []
         this.advantageProjectData.forEach(item => {
           let a = {
@@ -647,9 +675,9 @@ export default {
         this.oldFeesList = []
         this.oldUploadList = []
         this.oldForm = Object.assign({}, this.form)
-        this.oldGoodsList = this.oldGoodsList.concat(this.contactsData)
-        this.oldFeesList = this.oldFeesList.concat(this.advantageProjectData)
-        this.oldUploadList = this.oldUploadList.concat(this.bankOfDepositData)
+        this.oldGoodsList = this.deepClone(this.contactsData)
+        this.oldFeesList = this.deepClone(this.advantageProjectData)
+        this.oldUploadList = this.deepClone(this.bankOfDepositData)
         if (isCopy) {
           delete this.form.sysNo;
           delete this.form.id

+ 4 - 2
src/views/businessManagement/receipt/configuration/advantageProject.json

@@ -95,7 +95,8 @@
       "prop": "amount",
       "index": 5,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {
@@ -109,7 +110,8 @@
       "prop": "settlmentAmount",
       "index": 6,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {

+ 29 - 9
src/views/businessManagement/receipt/detailsPageEdit.vue

@@ -27,7 +27,7 @@
         <el-button
           class="el-button--small-yh"
           type="success" style="right: 140px;" @click="copyOrder"
-          :disabled="detailData.seeDisabled">
+          :disabled="detailData.seeDisabled || !this.form.id">
           复制新单
         </el-button>
         <el-button
@@ -76,6 +76,14 @@
 <!--                </avue-input-tree>-->
                 <warehouse-select v-else-if="item.prop === 'storageId'" v-model="form[item.prop]"
                                   :configuration="configurationWarehouse" style="width: 100%" :disabled="detailData.seeDisabled"/>
+                <el-input
+                  v-else-if="item.type == 'number'"
+                  placeholder="请输入"
+                  v-input-limit="2"
+                  size="small"
+                  :disabled="item.disabled || detailData.seeDisabled"
+                  v-model="form[item.prop]"
+                />
                 <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
               </el-form-item>
@@ -157,9 +165,21 @@
               <selectComponent v-if="row.$cellEdit" v-model="row.corpId"
                                :configuration="configuration" @receiveList="receiveList"/>
               <span v-else>
-                <span v-for="item in configuration.dicData" v-if="item.id == row.corpId">{{ item.cname }}</span>
+                <span v-for="(item, index) in configuration.dicData" :key="index" v-if="item.id == row.corpId">{{ item.cname }}</span>
               </span>
             </template>
+            <template slot="amount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.amount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.amount }}</span>
+            </template>
+            <template slot="settlmentAmount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.settlmentAmount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.settlmentAmount }}</span>
+            </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -563,6 +583,7 @@ export default {
             ]
           }, {
             label: '费用合计',
+            type: 'number',
             prop: 'totalCost',
             rules: [
               {
@@ -683,6 +704,9 @@ export default {
     selectWareHouse().then(res => {
       this.warehouseName = res.data.data.records
     })
+    this.form.deliveryAmount = 0
+    this.form.totalQuantity = 0
+    this.form.purchaseAmount = 0
     if (this.detailData.id) {
       this.queryData(this.detailData.id)
     }else if (this.detailData.form){
@@ -729,7 +753,6 @@ export default {
   methods: {
     queryData(id, isCopy = false) {
       detail(id).then(res => {
-        console.log(res.data.data)
         this.form = res.data.data;
         this.contactsData = this.form.deliveryItemsList
         this.advantageProjectData = this.form.deliveryFeesList
@@ -787,8 +810,9 @@ export default {
         this.oldFeesList = []
         this.oldUploadList = []
         this.oldForm = Object.assign({}, this.form)
-        this.oldFeesList = this.oldFeesList.concat(this.advantageProjectData)
-        this.oldUploadList = this.oldUploadList.concat(this.bankOfDepositData)
+        this.oldGoodsList = this.deepClone(this.contactsData)
+        this.oldFeesList = this.deepClone(this.advantageProjectData)
+        this.oldUploadList = this.deepClone(this.bankOfDepositData)
         if (isCopy) {
           delete this.form.id
           delete this.form.sysNo
@@ -806,7 +830,6 @@ export default {
           })
           this.form.deliveryStatus == '录入'
         }
-        this.oldGoodsList = this.oldGoodsList.concat(this.contactsData)
       }).finally(() => {
         this.saveLoading = false
       });
@@ -1209,7 +1232,6 @@ export default {
     },
     //修改提交触发
     editCustomer(isBack = false) {
-      console.log(this.form)
       this.$refs["form"].validate((valid) => {
         if (valid) {
           this.form.deliveryAmount = 0
@@ -1240,8 +1262,6 @@ export default {
               this.queryData(res.data.data.id)
             }
           })
-        } else {
-          return false;
         }
       });
     },

+ 4 - 2
src/views/businessManagement/salesOrder/configuration/advantageProject.json

@@ -95,7 +95,8 @@
       "prop": "amount",
       "index": 5,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {
@@ -109,7 +110,8 @@
       "prop": "settlmentAmount",
       "index": 6,
       "width":100,
-      "cell": true,
+      "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {

+ 2 - 1
src/views/businessManagement/salesOrder/configuration/customerContact.json

@@ -74,8 +74,9 @@
       "label": "商品名称",
       "prop": "cname",
       "index": 1,
-      "width":100,
+      "width":200,
       "cell": false,
+      "slot": true,
       "overHidden": true,
       "rules": [
         {

+ 144 - 20
src/views/businessManagement/salesOrder/detailsPageEdit.vue

@@ -18,7 +18,7 @@
         <el-button
           class="el-button--small-yh"
           type="success" style="right: 140px;" @click="copyOrder"
-          :disabled="detailData.seeDisabled">
+          :disabled="detailData.seeDisabled || !this.form.id">
           复制新单
         </el-button>
         <el-button
@@ -49,6 +49,14 @@
                 <el-select v-else-if="item.prop === 'paymentType'" v-model="form[item.prop]" placeholder="请选择" clearable filterable style="width: 100%" size="small" :disabled="detailData.seeDisabled">
                   <el-option v-for="(item,index) in paymentOption" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
                 </el-select>
+                <el-input
+                  v-else-if="item.type == 'number'"
+                  placeholder="请输入"
+                  v-input-limit="2"
+                  size="small"
+                  :disabled="item.disabled || detailData.seeDisabled"
+                  v-model="form[item.prop]"
+                />
                 <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
               </el-form-item>
@@ -76,9 +84,17 @@
                 <el-select v-else-if="item.prop === 'orderStatus'" v-model="form[item.prop]" placeholder="请选择" clearable filterable style="width: 100%" size="small" :disabled="detailData.seeDisabled">
                   <el-option v-for="(item,index) in statusOption" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
                 </el-select>
-                <el-input type="age" v-else-if="item.prop === 'grossProfitRate'" v-model="form[item.prop]" size="small" autocomplete="off" placeholder="请输入" :disabled="detailData.seeDisabled">
+                <el-input type="age" v-else-if="item.prop === 'grossProfitRate'" v-model="form[item.prop]" size="small" autocomplete="off" placeholder="请输入" :disabled="detailData.seeDisabled" v-input-limit="2">
                   <template   slot="append">%</template>
                 </el-input>
+                <el-input
+                  v-else-if="item.type == 'number'"
+                  placeholder="请输入"
+                  v-input-limit="2"
+                  size="small"
+                  :disabled="item.disabled || detailData.seeDisabled"
+                  v-model="form[item.prop]"
+                />
                 <el-input type="textarea" v-else-if="item.type === 'textarea'" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
                 <el-input v-else type="age" v-model="form[item.prop]" size="small" autocomplete="off" :disabled="item.disabled || detailData.seeDisabled"></el-input>
               </el-form-item>
@@ -105,7 +121,7 @@
                 size="mini"
                 style="padding:4px 10px;float:left"
                 @click="commodityChoice(row)"
-                :disabled="detailData.seeDisabled">选择</el-button>
+                :disabled="detailData.seeDisabled || !row.$cellEdit">选择</el-button>
               <span>{{ row.code }}</span>
             </template>
             <template slot="purchaseAmount" slot-scope="{ row }">
@@ -115,6 +131,7 @@
                 @focus="getPurchasePrice(row)"
                 allow-create
                 filterable
+                v-input-limit="2"
               >
                 <el-option
                   v-for="(item, index) in purchasePriceOption"
@@ -124,6 +141,24 @@
               </el-select>
               <span v-else>{{ row.purchaseAmount }}</span>
             </template>
+            <template slot="price" slot-scope="{ row }">
+              <el-select
+                v-if="row.$cellEdit"
+                v-model="row.price"
+                @focus="getMarketPrice(row)"
+                @input="priceChange(row)"
+                allow-create
+                filterable
+                v-input-limit="2"
+              >
+                <el-option
+                  v-for="(item, index) in salesPriceOtion"
+                  :key="index"
+                  :label="item.salesPrice"
+                  :value="item.salesPrice"></el-option>
+              </el-select>
+              <span v-else>{{ row.price }}</span>
+            </template>
             <template slot="orderQuantity" slot-scope="{ row }">
               <el-input
                 v-if="row.$cellEdit"
@@ -134,15 +169,12 @@
               ></el-input>
               <span v-else>{{ row.orderQuantity }}</span>
             </template>
-            <template slot="price" slot-scope="{ row }">
-              <el-input
-                v-if="row.$cellEdit"
-                v-model="row.price"
-                size="small"
-                oninput='this.value=this.value.replace(/[^\-?\d.]/g,"").replace(/^(\-)*(\d+)\.(\d\d).*$/, "$1$2.$3")'
-                @input="priceChange(row)"
-              ></el-input>
-              <span v-else>{{ row.price }}</span>
+            <template slot="cname" slot-scope="{ row }">
+              <goods-select v-if="row.$cellEdit" v-model="row.cname" @getRow="getGoodsRow($event, row)"
+                               :configuration="goodsConfiguration" @receiveList="receiveGoodList" @returnRow="getRow($event, row)"/>
+              <span v-else>
+                <span v-for="item in goodsConfiguration.dicData" v-if="item.cname == row.cname">{{ item.cname }}</span>
+              </span>
             </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
@@ -207,6 +239,18 @@
                 <span v-for="item in configuration.dicData" v-if="item.id == row.corpId">{{ item.cname }}</span>
               </span>
             </template>
+            <template slot="amount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.amount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.amount }}</span>
+            </template>
+            <template slot="settlmentAmount" slot-scope="{ row }">
+              <el-input v-if="row.$cellEdit" v-model="row.settlmentAmount"
+                        size="small" v-input-limit="2"
+              ></el-input>
+              <span v-else>{{ row.settlmentAmount }}</span>
+            </template>
             <template slot-scope="{row,index}" slot="menu">
               <el-button
                   type="text"
@@ -468,6 +512,13 @@ export default {
         placeholder: '请点击右边按钮选择',
         dicData: []
       },
+      goodsConfiguration: {
+        multipleChoices: false,
+        multiple: false,
+        collapseTags: false,
+        placeholder: '请点击右边按钮选择',
+        dicData: []
+      },
       data: [],
       policyForm: {},
       dataPolicy: [],
@@ -600,6 +651,7 @@ export default {
           {
             label: '销售金额',
             prop: 'orderAmount',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -610,6 +662,7 @@ export default {
           }, {
             label: '其他费用',
             prop: 'otherAmount',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -630,6 +683,7 @@ export default {
           },{
             label: '应收账款',
             prop: 'debitAmount',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -673,6 +727,7 @@ export default {
           {
             label: '保证金',
             prop: 'deposit',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -683,6 +738,7 @@ export default {
           }, {
             label: '逾期账款',
             prop: 'overDueAccounts',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -736,6 +792,7 @@ export default {
           }, {
             label: '毛利额',
             prop: 'grossProfit',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -746,6 +803,7 @@ export default {
           }, {
             label: '历史运费(元/条)',
             prop: 'freightAmountHistory',
+            type: 'number',
             rules: [
               {
                 required: false,
@@ -911,6 +969,7 @@ export default {
           }, {
             label: '运费',
             prop: 'oceanFreight',
+            type: 'number',
             rules: [
               {
                 required: true,
@@ -984,6 +1043,8 @@ export default {
       oldUploadList: [],
       // 采购价格
       purchasePriceOption: [],
+      // 销售价格
+      salesPriceOtion: [],
     }
   },
   //初始化查询
@@ -1014,6 +1075,13 @@ export default {
   watch: {
   },
   methods: {
+    getGoodsRow(event,row) {
+      row.priceCategory = event.goodsTypeName
+      this.$set(row, 'priceType', '一般')
+      row.code = event.code
+      row.typeno = event.typeno
+      row.itemId = event.id
+    },
     queryData(id, isCopy = false){
       detail(id).then(res => {
         this.form = res.data.data;
@@ -1035,6 +1103,15 @@ export default {
         this.configuration.dicData = this.configuration.dicData.concat(feesData)
         // 去重
         this.removeRepeat()
+        let goodsData = []
+        this.form.orderItemsList.forEach(item => {
+          let a = {
+            cname: item.cname,
+          }
+          goodsData.push(a)
+        })
+        this.goodsConfiguration.dicData = [].concat(goodsData)
+        this.removeGoodsRepeat()
         delete this.form.orderItemsList
         delete this.form.orderFeesList
         delete this.form.orderFilesList
@@ -1074,13 +1151,16 @@ export default {
         this.oldGoodsList = []
         this.oldFeesList = []
         this.oldUploadList = []
-        this.oldGoodsList = this.oldGoodsList.concat(this.contactsData)
-        console.log(this.oldGoodsList)
-        this.oldFeesList = this.oldFeesList.concat(this.advantageProjectData)
-        this.oldUploadList = this.oldUploadList.concat(this.bankOfDepositData)
+        this.oldGoodsList = this.deepClone(this.contactsData)
+        this.oldFeesList = this.deepClone(this.advantageProjectData)
+        this.oldUploadList = this.deepClone(this.bankOfDepositData)
         if (isCopy) {
           this.$set(this.form, 'orderStatus', '录入')
           delete this.form.id
+          delete this.form.orgOrderNo
+          delete this.form.morderNo
+          delete this.form.createUserName
+          delete this.form.createTime
           this.contactsData.forEach(item => {
             delete item.id
             delete item.pid
@@ -1104,10 +1184,16 @@ export default {
     },
     // 采购金额获取
     getPurchasePrice(row) {
-      getPurchasePrice({code: '3ELX978F'}).then(res => {
+      getPurchasePrice({code: row.code}).then(res => {
         this.purchasePriceOption = res.data.data
       })
     },
+    // 销售金额获取
+    getMarketPrice(row) {
+      getMarketPrice({code: row.code}).then(res => {
+        this.salesPriceOtion = res.data.data
+      })
+    },
     // 生成采购单
     saveSell() {
       if (!this.form.id) {
@@ -1222,11 +1308,31 @@ export default {
         return current
       }, [])
     },
+    removeGoodsRepeat() {
+      let obj = []
+      this.goodsConfiguration.dicData = this.goodsConfiguration.dicData.reduce((current,next) => {
+        obj[next.id] ? '': obj[next.id] = true && current.push(next)
+        return current
+      }, [])
+    },
     //
     receiveList(data){
       this.configuration.dicData = this.configuration.dicData.concat(data)
       this.removeRepeat()
     },
+    receiveGoodList(data) {
+      console.log(data)
+      this.goodsConfiguration.dicData = this.goodsConfiguration.dicData.concat(data)
+      this.removeGoodsRepeat()
+    },
+    getRow(event,row) {
+      console.log(event,row)
+      row.priceCategory = event[0].goodsTypeName
+      this.$set(row, 'priceType', '一般')
+      row.code = event[0].code
+      row.typeno = event[0].typeno
+      row.itemId = event[0].id
+    },
     //点击商品明细选择触发
     commodityChoice(row) {
       this.dialogVisible = !this.dialogVisible
@@ -1303,7 +1409,7 @@ export default {
             this.$set(this.tableData[item], 'orderQuantity', 0)
             this.$set(this.tableData[item], 'actualQuantity', 0)
             this.$set(this.tableData[item], 'purchaseAmount', 0)
-            this.tableData[item].price = 0
+            this.tableData[item].price = '0'
             this.tableData[item].amount = 0
             this.tableData[item].sort = this.maxGoodsNum + 1
             delete this.tableData[item].id
@@ -1400,18 +1506,26 @@ export default {
     },
     //导入商品政策
     importPolicy() {
-      let list = this.policyData.concat(this.policyDataTwo)
+      let list = this.deepClone(this.policyData.concat(this.policyDataTwo))
+      // 买赠额外加一条
+      let buyFree = []
+      if (this.policyDataTwo.length > 0) {
+        buyFree = this.deepClone(this.policyDataTwo)
+      }
       for (let item in list) {
         selectGoodsNum({
           goodsId: list[item].itemId,
           typeno: list[item].typeno
         }).then(res => {
           this.$set(list[item], 'storageQuantity', res.data.data)
+          this.$set(buyFree[item], 'storageQuantity', res.data.data)
         })
         if (this.policyData.length > 0) {
           this.$set(list[item], 'price', list[item].specialOffer)
         } else {
           this.$set(list[item], 'price', list[item].salesPrice)
+          this.$set(buyFree[item], 'price', '0')
+          this.$set(buyFree[item], 'orderQuantity',  list[item].salesVolume)
         }
         this.$set(list[item], 'actualQuantity', 0)
         this.$set(list[item], 'orderQuantity', 0)
@@ -1421,6 +1535,14 @@ export default {
         this.$set(list[item], 'cname', list[item].productCategory)
         this.$set(list[item], 'sort', this.maxGoodsNum + 1)
         this.$set(list[item], 'purchaseAmount', list[item].purchasePrice)
+
+        this.$set(buyFree[item], 'actualQuantity', 0)
+        this.$set(buyFree[item], 'amount', 0)
+        this.$set(buyFree[item], 'priceCategory', list[item].productCategory)
+        this.$set(buyFree[item], 'priceType', this.policyForm.cname)
+        this.$set(buyFree[item], 'cname', list[item].productCategory)
+        this.$set(buyFree[item], 'sort', this.maxGoodsNum + 1)
+        this.$set(buyFree[item], 'purchaseAmount', list[item].purchasePrice)
         delete list[item].id
         delete list[item].pid
         delete list[item].isDeleted
@@ -1431,7 +1553,9 @@ export default {
         delete list[item].updateUserName
         this.maxGoodsNum++
         this.$refs.crudContact.rowCellAdd(list[item]);
-        this.$refs.crudContact.rowCell(list[item], this.contactsData.length - 1)
+        // this.$refs.crudContact.rowCell(list[item], this.contactsData.length - 1)
+        this.$refs.crudContact.rowCellAdd(buyFree[item]);
+        // this.$refs.crudContact.rowCell(buyFree[item], this.contactsData.length - 1)
       }
       this.policyDialog = false
     },