qinbai 3 anni fa
parent
commit
b6c26c726f

+ 25 - 5
src/router/views/index.js

@@ -102,6 +102,22 @@ export default [{
             }
         ]
     },
+  //产品
+  {
+    path: '/productInfo_detailsPageEdit',
+    component: Layout,
+    hidden: true,
+    children: [
+      {
+        path: '/productInfo_detailsPageEdit',
+        name:'产品详情',
+        meta: {
+          i18n: 'productInfo_detailsPageEdit'
+        },
+        component: () => import( /* webpackChunkName: "views" */ '@/views/basicData/productInformation/detailsPageEdit')
+      }
+    ]
+  },
     //销售详情页
     {
         path: '/salesOrder_detailsPageEdit',
@@ -216,6 +232,7 @@ export default [{
       children: [
         {
           path: '/purchase_detailsPage',
+          name:'采购详情',
           meta: {
             i18n: 'purchase_detailsPage'
           },
@@ -231,6 +248,7 @@ export default [{
       children: [
         {
           path: '/salesContract_detailsPage',
+          name:'销售详情',
           meta: {
             i18n: 'salesContract_detailsPage'
           },
@@ -246,6 +264,7 @@ export default [{
     children: [
       {
         path: '/importReceipt_detailsPage',
+        name:'收货详情',
         meta: {
           i18n: 'importReceipt_detailsPage'
         },
@@ -253,18 +272,19 @@ export default [{
       }
     ]
   },
-    // 进口 货单详情页
+    // 进口 货单详情页
   {
-    path: '/importReceipt_detailsPage',
+    path: '/importInvoice_detailsPage',
     component: Layout,
     hidden: true,
     children: [
       {
-        path: '/importReceipt_detailsPage',
+        path: '/importInvoice_detailsPage',
+        name:'发货详情',
         meta: {
-          i18n: 'importReceipt_detailsPage'
+          i18n: 'importInvoice_detailsPage'
         },
-        component: () => import( /* webpackChunkName: "views" */ '@/views/importTrade/receipt/detailsPageEdit')
+        component: () => import( /* webpackChunkName: "views" */ '@/views/importTrade/invoice/detailsPageEdit')
       }
     ]
   },

+ 87 - 0
src/views/basicData/productInformation/configuration/imgUploadList.json

@@ -0,0 +1,87 @@
+{
+  "lazy": true,
+  "align": "center",
+  "menuAlign": "left",
+  "tip": false,
+  "simplePage": true,
+  "searchShow": true,
+  "searchMenuSpan": 6,
+  "dialogWidth": "60%",
+  "tree": true,
+  "refreshBtn": false,
+  "border": true,
+  "index": true,
+  "selection": true,
+  "menuWidth": 300,
+  "dialogClickModal": false,
+  "addBtnText": "上  传",
+  "column": [{
+    "label": "文件名称",
+    "prop": "fileName",
+    "index": 1,
+    "width": 100,
+    "rules": [
+      {
+        "required": true,
+        "message": "请输入文件名称",
+        "trigger": "blur"
+      }
+    ]
+  },{
+    "label": "备注",
+    "prop": "remarks",
+    "index": 2,
+    "width": 100,
+    "rules": [
+      {
+        "required": false,
+        "message": "请输入备注",
+        "trigger": "blur"
+      }
+    ]
+  }, {
+    "label": "图片",
+    "prop": "img",
+    "type": "upload",
+    "index": 3,
+    "width": 150,
+    "listType": "picture-img",
+    "span": 24,
+    "tip": "只能上传jpg/png/jpeg文件,且不超过2M,宽高比为1:1",
+    "action": "/api/blade-resource/oss/endpoint/put-file",
+    "dataType": "string",
+    "propsHttp": {
+      "res": "data",
+      "url": "link"
+    },
+    "rules": [
+      {
+        "required": true,
+        "message": "请上传图片",
+        "trigger": "blur"
+      }
+    ]
+  },
+    {
+      "label": "商品详情轮播",
+      "prop": "string",
+      "dataType": "string",
+      "type": "upload",
+      "propsHttp": {
+        "res": "data",
+        "url": "link"
+      },
+      "span": 24,
+      "listType": "picture-card",
+      "tip": "只能上传jpg/png/jpeg文件,且不超过2M,宽为750,高不大于1000",
+      "action": "/api/blade-resource/oss/endpoint/put-file",
+      "rules": [
+        {
+          "required": true,
+          "message": "请上传图片",
+          "trigger": "blur"
+        }
+      ]
+    }
+  ]
+}

+ 96 - 0
src/views/basicData/productInformation/configuration/mainList.json

@@ -0,0 +1,96 @@
+
+{
+  "height": "auto",
+  "calcHeight": 80,
+  "tip": false,
+  "searchShow": true,
+  "searchMenuSpan": 12,
+  "searchMenuPosition": "right",
+  "border": true,
+  "index": true,
+  "selection": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "dialogClickModal": false,
+  "column": [
+    {
+      "label": "产品编码",
+      "prop": "code",
+      "search": true,
+      "width": 100,
+      "rules": [
+        {
+          "required": true,
+          "message": " ",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "产品名称",
+      "prop": "cname",
+      "search": true,
+      "width": 100,
+      "rules": [
+        {
+          "required": true,
+          "message": " ",
+          "trigger": "blur"
+        }
+      ]
+    },
+    {
+      "label": "产品类别",
+      "prop": "goodsTypeId",
+      "dicData": [],
+      "type": "tree",
+      "hide": true,
+      "addDisabled": false,
+      "multiple": true,
+      "props": {
+        "label": "title"
+      },
+      "rules": [{
+        "required": true,
+        "message": " ",
+        "trigger": "click"
+      }]
+    },
+    {
+      "label": "品牌",
+      "prop": "brand",
+      "width": 100
+    },
+    {
+      "label": "花纹",
+      "prop": "brandItem",
+      "width": 100
+    },
+    {
+      "label": "规格尺寸",
+      "prop": "specs",
+      "width": 100
+    },
+    {
+      "label": "规格尺寸1",
+      "prop": "specsOne",
+      "width": 100
+    },
+    {
+      "label": "规格尺寸2",
+      "prop": "specsTwo",
+      "width": 100
+    },
+    {
+      "label": "级别",
+      "prop": "level",
+      "width": 100
+    },
+    {
+      "label": "备注",
+      "prop": "remarks",
+      "width": 100
+    }
+  ]
+}

+ 308 - 0
src/views/basicData/productInformation/detailsPageEdit.vue

@@ -0,0 +1,308 @@
+<template>
+  <div class="borderless">
+    <div class="customer-head">
+      <div class="customer-back">
+        <el-button type="danger" style="border: none;background: none;color: red" icon="el-icon-arrow-left"
+                   @click="backToList">返回列表
+        </el-button>
+      </div>
+      <el-button
+          class="el-button--small-yh add-customer-btn"
+          type="primary"
+          :disabled="disabled"
+          @click="editProductInfo"
+      >{{ form.id ? '确认修改' : '确认新增' }}
+      </el-button>
+    </div>
+    <div style="margin-top: 60px">
+      <containerTitle title="基础信息"></containerTitle>
+      <basic-container>
+        <avue-form ref="form" v-model="form" :option="option">
+          <template slot="goodsTypeId" slot-scope="scope">
+            <avue-input-tree
+              v-model="form.goodsTypeId"
+              :props="{ label: 'title', value: 'id' }"
+              multiple
+              placeholder=" "
+              type="tree"
+              :dic="dicData"/>
+          </template>
+        </avue-form>
+      </basic-container>
+    </div>
+  </div>
+</template>
+<script>
+  import { getDetail, updateDetail,getDeptTree } from "@/api/basicData/commodityType";
+
+export default {
+  name: "detailsPage",
+  data() {
+    return {
+      form: {},
+      disabled: false,
+      userDialog:false,//供应商导入窗口
+      contactsForm: {},
+      dicData:[],
+      detailsSelect:{},
+      option: {
+        menuBtn: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: "产品编码",
+            prop: "code",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "产品名称",
+            prop: "cname",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+            slot: true
+          },
+          {
+            label: "产品分类",
+            prop: "goodsTypeId",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "花纹",
+            prop: "brandItem",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "品牌",
+            prop: "brand",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "状态",
+            prop: "status",
+            span: 8,
+            type: 'select',
+            dicData:[{
+              label:'正常',
+              value:0
+            },{
+              label:'停用',
+              value:1
+            }],
+          },
+          {
+            label: "规格",
+            prop: "specs",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "规格1",
+            prop: "specsOne",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "规格2",
+            prop: "specsTwo",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "级别",
+            prop: "level",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "产地",
+            prop: "placeProduction",
+            span: 8,
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ],
+          },
+          {
+            label: "三包",
+            prop: "threeGuarantees",
+            span: 8,
+          },
+          {
+            label: "备注",
+            prop: "remarks",
+            type: "textarea",
+            minRows: 2,
+            span: 24
+          }
+        ]
+      },
+    }
+  },
+  //初始化查询
+  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
+     })
+    }else{
+      this.$set(this.form,"goodsTypeId", this.$route.query.treeDeptId)
+    }
+  },
+  methods: {
+    rowContactSave(row, done, loading) {
+      done()
+    },
+    rowPurchaseSave(row, done, loading) {
+      done()
+    },
+    rowContactCell(row, index) {
+      this.$refs.crudContact.rowCell(row, index)
+    },
+    rowPurchaseCell(row, index) {
+      this.$refs.crudPurchase.rowCell(row, index)
+    },
+    //修改提交触发
+    editProductInfo() {
+      this.$refs["form"].validate((valid) => {
+        //校验明细列表
+        if (valid) {
+          const params = {
+            ...this.form,
+            type:0,
+          }
+          updateDetail(params).then(res => {
+            if(res.data.success){
+              this.$message.success("操作成功!")
+            }
+          })
+        } else {
+          return false;
+        }
+      });
+    },
+    //返回列表
+    backToList() {
+      this.$router.$avueRouter.closeTag();
+      this.$router.push({
+        path: '/basicData/productInformation/index',
+        query: {}
+      });
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+.customer-head {
+  position: fixed;
+  top: 105px;
+  width: 100%;
+  margin-left: -10px;
+  height: 62px;
+  background: #ffffff;
+  box-shadow: 0 4px 12px 0px rgba(232, 232, 235, 1);
+  z-index: 999;
+  /* display: flex;
+  justify-content: left; */
+}
+
+.customer-back {
+  cursor: pointer;
+  line-height: 62px;
+  font-size: 16px;
+  color: #323233;
+  font-weight: 400;
+}
+
+.back-icon {
+  line-height: 64px;
+  font-size: 20px;
+  margin-right: 8px;
+}
+
+.add-customer-btn {
+  position: fixed;
+  right: 36px;
+  top: 115px;
+}
+
+::v-deep .el-form-item {
+  margin-bottom: 0;
+}
+
+.el-dialogDeep {
+  ::v-deep .el-dialog {
+    margin: 1vh auto 0 !important;
+    padding-bottom: 10px !important;
+
+    .el-dialog__body, .el-dialog__footer {
+      padding-bottom: 0 !important;
+      padding-top: 0 !important;
+    }
+  }
+}
+</style>

+ 379 - 0
src/views/basicData/productInformation/index.vue

@@ -0,0 +1,379 @@
+<template>
+  <el-row>
+    <el-col :span="5">
+      <basic-container>
+        <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
+      </basic-container>
+    </el-col>
+    <el-col :span="19">
+      <basic-container>
+        <avue-crud :option="option"
+                   :search.sync="search"
+                   :table-loading="loading"
+                   :data="data"
+                   ref="crud"
+                   v-model="form"
+                   @row-del="rowDel"
+                   @row-update="rowUpdate"
+                   @row-save="rowSave"
+                   :before-open="beforeOpenE"
+                   :page.sync="page"
+                   @search-change="searchChange"
+                   @search-reset="searchReset"
+                   @selection-change="selectionChange"
+                   @current-change="currentChange"
+                   @size-change="sizeChange"
+                   @refresh-change="refreshChange"
+                   @on-load="onLoad">
+          <template slot-scope="scope" slot="menu">
+            <el-button
+                type="text"
+                icon="el-icon-view"
+                size="small"
+                @click.stop="beforeOpenPage(scope.row, scope.index)"
+            >查看
+            </el-button>
+            <el-button
+                type="text"
+                icon="el-icon-edit"
+                size="small"
+                @click.stop="editOpen(scope.row, scope.index)"
+            >编辑
+            </el-button>
+            <el-button
+                type="text"
+                icon="el-icon-delete"
+                size="small"
+                @click.stop="rowDel(scope.row, scope.index)"
+            >删除
+            </el-button>
+          </template>
+        </avue-crud>
+      </basic-container>
+    </el-col>
+  </el-row>
+</template>
+<script>
+import {getList, getUser, getUserPlatform, remove, updatePlatform, add, grant, getDeptLazyTree, getDeptTree} from "@/api/basicData/commodityType";
+import {getRoleTree} from "@/api/system/role";
+import {mapGetters} from "vuex";
+import website from '@/config/website';
+import {getToken} from '@/util/auth';
+import option from "./configuration/mainList.json";
+export default {
+  data() {
+    return {
+      form: {},
+      search:{},
+      roleBox: false,
+      excelBox: false,
+      platformBox: false,
+      initFlag: true,
+      selectionList: [],
+      query: {},
+      loading: true,
+      platformLoading: false,
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      platformPage: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      init: {
+        roleTree: [],
+        deptTree: [],
+      },
+      props: {
+        label: "title",
+        value: "key"
+      },
+      roleGrantList: [],
+      roleTreeObj: [],
+      treeDeptId: '',
+      treeData: [],
+      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'
+        }
+      },
+      option: option,
+      data: [],
+      platformQuery: {},
+      platformSelectionList: [],
+      platformData: [],
+      platformForm: {},
+      excelForm: {},
+    };
+  },
+  methods: {
+    nodeClick(data) {
+      this.treeDeptId = data.id;
+      this.page.currentPage = 1;
+      this.onLoad(this.page);
+    },
+    initData(tenantId) {
+      getDeptTree().then(res => {
+        const column = this.findObject(this.option.column, "goodsTypeId");
+        column.dicData = res.data.data;
+      });
+    },
+    submitRole() {
+      const roleList = this.$refs.treeRole.getCheckedKeys().join(",");
+      grant(this.ids, roleList).then(() => {
+        this.roleBox = false;
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        this.onLoad(this.page);
+      });
+    },
+    rowSave(row, done, loading) {
+      row.goodsTypeId = row.goodsTypeId.join(",");
+      add(row).then(() => {
+        this.initFlag = false;
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        window.console.log(error);
+        loading();
+      });
+    },
+    rowUpdate(row, index, done, loading) {
+      row.goodsTypeId = row.goodsTypeId.join(",");
+      add(row).then(() => {
+        this.initFlag = false;
+        this.onLoad(this.page);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        window.console.log(error);
+        loading();
+      });
+    },
+    //查看跳转页面
+    beforeOpenPage(row, index) {
+      this.$router.push({
+        path: "/productInfo_detailsPageEdit",
+        query: { id: JSON.stringify(row.id) }
+      });
+    },
+    //新增跳转页面
+    beforeOpenE(row, index) {
+      this.$router.push({
+        path: "/productInfo_detailsPageEdit",
+        query: { id: JSON.stringify(row.id),treeDeptId:this.treeDeptId }
+      });
+    },
+    //编辑跳转页面
+    editOpen(row, index) {
+      this.$router.push({
+        path: "/productInfo_detailsPageEdit",
+        query: { id: JSON.stringify(row.id) }
+      });
+    },
+    //删除触发
+    rowDel(row, index, done) {
+      this.$confirm("确定将选择数据删除?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            done()
+          });
+    },
+    searchReset() {
+      this.query = {};
+      this.treeDeptId = '';
+      this.onLoad(this.page);
+    },
+    searchChange(params, done) {
+      this.query = params;
+      this.page.currentPage = 1;
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    selectionClear() {
+      this.selectionList = [];
+      this.$refs.crud.toggleSelection();
+    },
+    handleGrant() {
+      if (this.selectionList.length === 0) {
+        this.$message.warning("请选择至少一条数据");
+        return;
+      }
+      this.roleTreeObj = [];
+      if (this.selectionList.length === 1) {
+        this.roleTreeObj = this.selectionList[0].roleId.split(",");
+      }
+      getRoleTree().then(res => {
+        this.roleGrantList = res.data.data;
+        this.roleBox = true;
+      });
+    },
+    handlePlatform() {
+      this.platformBox = true;
+    },
+    handleImport() {
+      this.excelBox = true;
+    },
+    uploadAfter(res, done, loading, column) {
+      window.console.log(column);
+      this.excelBox = false;
+      this.refreshChange();
+      done();
+    },
+    handleTemplate() {
+      window.open(`/api/blade-user/export-template?${this.website.tokenHeader}=${getToken()}`);
+    },
+    //新增编辑查看触发
+    async beforeOpen(done, type) {
+      if (["add"].includes(type)) {
+        this.option.column.forEach(e=>{
+          if(e.prop=='goodsTypeId'){
+            this.$set(this.option.column,2,{...e,value:this.treeDeptId})
+          }
+        })
+      }
+      if (["edit", "view"].includes(type)) {
+        await getUser(this.form.id).then(res => {
+          this.form = res.data.data;
+          // this.form.goodsTypeId = [this.form.goodsTypeId.replace(/\"/g,"")]
+          console.log(this.form.hasOwnProperty("goodsTypeId"))
+          if(this.form.hasOwnProperty("goodsTypeId")){
+            this.form.goodsTypeId = this.form.goodsTypeId.split(",");
+          }
+        });
+      }
+      if (["add", "edit"].includes(type)) {
+        this.initData(0);
+      }
+      this.initFlag = true;
+      done();
+    },
+    currentChange(currentPage) {
+      this.page.currentPage = currentPage;
+    },
+    sizeChange(pageSize) {
+      this.page.pageSize = pageSize;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.query);
+    },
+    onLoad(page, params = {}) {
+      this.loading = true;
+      getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
+        const data = res.data.data;
+        this.data = data.records;
+        this.loading = false;
+        this.selectionClear();
+      });
+    },
+    platformRowUpdate(row, index, done, loading) {
+      updatePlatform(row.id, row.userType, row.userExt).then(() => {
+        this.platformOnLoad(this.platformPage);
+        this.$message({
+          type: "success",
+          message: "操作成功!"
+        });
+        done();
+      }, error => {
+        window.console.log(error);
+        loading();
+      });
+    },
+    platformBeforeOpen(done, type) {
+      if (["edit", "view"].includes(type)) {
+        getUserPlatform(this.platformForm.id).then(res => {
+          this.platformForm = res.data.data;
+        });
+      }
+      done();
+    },
+    platformSearchReset() {
+      this.platformQuery = {};
+      this.platformOnLoad(this.platformPage);
+    },
+    platformSearchChange(params, done) {
+      this.platformQuery = params;
+      this.platformPage.currentPage = 1;
+      this.platformOnLoad(this.platformPage, params);
+      done();
+    },
+    platformSelectionChange(list) {
+      this.platformSelectionList = list;
+    },
+    platformSelectionClear() {
+      this.platformSelectionList = [];
+      this.$refs.platformCrud.toggleSelection();
+    },
+    platformCurrentChange(currentPage) {
+      this.platformPage.currentPage = currentPage;
+    },
+    platformSizeChange(pageSize) {
+      this.platformPage.pageSize = pageSize;
+    },
+    platformRefreshChange() {
+      this.platformOnLoad(this.platformPage, this.platformQuery);
+    },
+    platformOnLoad(page, params = {}) {
+      this.platformLoading = true;
+      getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
+        const data = res.data.data;
+        this.platformPage.total = data.total;
+        this.platformData = data.records;
+        this.platformLoading = false;
+        this.selectionClear();
+      });
+    }
+  }
+};
+</script>
+
+<style>
+.el-scrollbar {
+  height: 100%;
+}
+</style>

+ 42 - 23
src/views/financialManagement/paymentDetailsPage.vue

@@ -23,10 +23,16 @@
             <el-col v-for="(item, index) in basicData.column" :span="item.span?item.span:8" :key="index">
               <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
                 <el-date-picker v-if="item.type === 'date'" style="width: 100%;" v-model="form[item.prop]" size="small" type="date" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
-                <el-select v-else-if="item.type === 'select'" style="width: 100%" size="small" placeholder="请选择" clearable filterable></el-select>
+                <el-select v-else-if="item.type === 'select'" style="width: 100%" size="small" placeholder="请选择"  clearable filterable></el-select>
                 <selectComponent v-else-if="item.prop === 'corpId'" v-model="form[item.prop]" :configuration="configuration"/>
+                <el-select v-else-if="item.prop === 'currency'" style="width: 100%"   v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
+                  <el-option v-for="(item,index) in currencyDic" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
+                </el-select>
+                <el-input type="age" v-else-if="item.prop === 'exchangeRate'" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入">
+                  <template   slot="append">%</template>
+                </el-input>
                 <el-input type="textarea" v-else-if="(item.prop === 'remark')" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入"></el-input>
-                <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" placeholder="请输入"></el-input>
+                <el-input type="age" v-else v-model="form[item.prop]" size="small" :disabled="item.disabled?true:false" autocomplete="off" placeholder="请输入"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -88,6 +94,7 @@
 <script>
   import option from "./configuration/detailsPage.json";
   import { getDetail,editFinance } from "@/api/financialManagement/financialManagement"
+  import {detailListData } from "@/api/importTrade/purchase";
 
   export default {
     data() {
@@ -97,6 +104,7 @@
         parentId:0,
         id:"",
         dataList: [],
+        currencyDic:[],
         page: {
           pageSize: 10,
           pagerCount: 5,
@@ -121,7 +129,7 @@
               prop: 'sysNo',
               rules: [
                 {
-                  required: false,
+                  required: true,
                   message: ' ',
                   trigger: 'blur'
                 }
@@ -131,7 +139,7 @@
               prop: 'srcOrderno',
               rules: [
                 {
-                  required: false,
+                  required: true,
                   message: ' ',
                   trigger: 'blur'
                 }
@@ -150,24 +158,16 @@
             {
               label: '金额',
               prop: 'amount',
-              data: [],
               rules: [
                 {
-                  required: false,
+                  pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                   message: ' ',
                   trigger: 'blur'
                 }
               ]
             }, {
               label: '币别',
-              prop: 'currency',
-              rules: [
-                {
-                  required: false,
-                  message: ' ',
-                  trigger: 'blur'
-                }
-              ]
+              prop: 'currency'
             },
             {
               label: '汇率',
@@ -247,14 +247,7 @@
             {
               label: '单据状态',
               prop: 'financeStatus',
-              data: [],
-              rules: [
-                {
-                  required: false,
-                  message: ' ',
-                  trigger: 'blur'
-                }
-              ]
+              type:'select'
             }, {
               label: '制单人',
               prop: 'createUserName',
@@ -294,10 +287,35 @@
       }
     },
     created() {
+      //币别
+      this.getWorkDicts("currency").then(res =>{
+        this.currencyDic = res.data.data
+      })
       if (this.$route.query.id) {
         this.id = BigInt(this.$route.query.id);//字符串转数字  超长用BigInt
         getDetail(this.id).then(res => {
+          console.log()
           this.form = res.data.data;
+          this.dataList = res.data.data.itemsList
+        })
+      }
+      if(this.$route.query.params){
+        detailListData(this.$route.query.params.id).then(res =>{
+          res.data.data.itemsVOList.forEach((item,index) =>{
+            this.$route.query.params.orderItemIds.forEach((e,i) =>{
+              if(e ==  index){
+                const params ={
+                  srcOrderno:res.data.data.orderNo,
+                  amount:item.amount,
+                  createUserName:item.createUserName,
+                  createTime:item.createTime,
+                }
+                this.$refs.crud.rowCellAdd(params);
+                this.$refs.crud.rowCell(params,this.dataList.length - 1)
+              }
+              this.form.corpId =  res.data.data.corpId;
+            })
+          })
         })
       }
     },
@@ -325,7 +343,8 @@
           if(valid){
             const params = {
               ...this.form,
-              billType:"付费"
+              billType:"付费",
+              itemsList:this.dataList
             }
             editFinance(params).then(res =>{
               if(res.data.success){

+ 14 - 2
src/views/financialManagement/receiptDetailsPage.vue

@@ -25,6 +25,12 @@
                 <el-date-picker v-if="item.type === 'date'" style="width: 100%;" v-model="form[item.prop]" size="small" type="date" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
                 <el-select v-else-if="item.type === 'select'" style="width: 100%" size="small" placeholder="请选择" clearable filterable></el-select>
                 <selectComponent v-else-if="item.prop === 'corpId'" v-model="form[item.prop]" :configuration="configuration"/>
+                <el-select v-else-if="item.prop === 'currency'" style="width: 100%"   v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
+                  <el-option v-for="(item,index) in currencyDic" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
+                </el-select>
+                <el-input type="age" v-else-if="item.prop === 'exchangeRate'" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入">
+                  <template   slot="append">%</template>
+                </el-input>
                 <el-input type="textarea" v-else-if="(item.prop === 'remark')" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" placeholder="请输入"></el-input>
               </el-form-item>
@@ -96,6 +102,7 @@
         option: option,
         id:'',
         dataList: [],
+        currencyDic:[],
         page: {
           pageSize: 10,
           pagerCount: 5,
@@ -268,11 +275,15 @@
       }
     },
     created() {
+      //币别
+      this.getWorkDicts("currency").then(res =>{
+        this.currencyDic = res.data.data
+      })
       if (this.$route.query.id) {
         this.id = BigInt(this.$route.query.id);//字符串转数字  超长用BigInt
         getDetail(this.id).then(res => {
           this.form = res.data.data;
-          // dataList
+          this.dataList = res.data.data.itemsList
         })
       }
     },
@@ -300,7 +311,8 @@
           if(valid){
             const params = {
               ...this.form,
-              billType:"收费"
+              billType:"收费",
+              itemsList: this.dataList,
             }
             editFinance(params).then(res =>{
               if(res.data.success){

+ 5 - 6
src/views/importTrade/invoice/detailsPageEdit.vue

@@ -359,14 +359,13 @@ export default {
       this.$refs["form"].validate((valid) => {
         if (valid) {
           let submitDto = {
-            deliveryItemsList: [],
-            deliveryFeesList: [],
-            deliveryFilesList: []
+            ...this.form,
+            deliveryItemsList: this.contactsData
           };
-          submitDto = Object.assign({}, submitDto, this.form)
-          submitDto.deliveryItemsList = this.contactsData
           submitInvoiceList(submitDto).then(res => {
-            this.backToList()
+            if(res.data.success){
+              this.$message.success("操作成功!")
+            }
           })
         } else {
           return false;

+ 20 - 6
src/views/importTrade/receipt/detailsPageEdit.vue

@@ -137,6 +137,7 @@ import {
   getList
 } from "@/api/basicData/deliveryNotice"
 import upLoadOption from "../../exportTrade/purchaseContract/config/uploadList.json";
+import {detailListData } from "@/api/importTrade/purchase";
 
 export default {
   name: "detailsPageEdit",
@@ -296,6 +297,19 @@ export default {
         this.contactsData = this.form.deliveryItemsList
       })
     }
+    if(this.$route.query.params){
+      detailListData(this.$route.query.params.id).then(res =>{
+        res.data.data.itemsVOList.forEach((item,index) =>{
+          this.$route.query.params.orderItemIds.forEach((e,i) =>{
+            if(e ==  index){
+              this.$refs.crudContact.rowCellAdd(item);
+              this.$refs.crudContact.rowCell(item,this.contactsData.length - 1)
+            }
+          })
+        })
+        res.data.data.orderNo = this.form.orderNo
+      })
+    }
   },
   methods: {
     //新增商品信息保存触发
@@ -348,14 +362,14 @@ export default {
       this.$refs["form"].validate((valid) => {
         if (valid) {
           let submitDto = {
-            deliveryItemsList: [],
-            deliveryFeesList: [],
-            deliveryFilesList: []
+            ...this.form,
+            deliveryItemsList: this.contactsData,
+            deliveryFilesList: this.upLoadData,
           };
-          submitDto = Object.assign({}, submitDto, this.form)
-          submitDto.deliveryItemsList = this.contactsData
           submitReceiptList(submitDto).then(res => {
-            this.backToList()
+            if(res.data.success){
+              this.$message.success("操作成功!")
+            }
           })
         } else {
           return false;

+ 162 - 161
src/views/purchase/contract/detailsPage.vue

@@ -21,7 +21,7 @@
           <el-row>
             <el-col v-for="(item, index) in basicData.column" :span="item.span?item.span:8" :key="index">
               <el-form-item :label="item.label" :prop="item.prop" :rules="item.rules">
-                <el-date-picker v-if="item.type === 'datetime'" style="width: 100%;" v-model="form[item.prop]" size="small" type="datetime" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
+                <el-date-picker v-if="item.type === 'date'" style="width: 100%;" v-model="form[item.prop]" size="small" type="date" placeholder="选择日期" value-format="yyyy-MM-dd HH:mm:ss"/>
                 <el-select v-else-if="item.type === 'select'" style="width: 100%" v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
                   <el-option
                     v-for="(data, index) in item.dicData"
@@ -31,6 +31,15 @@
                   ></el-option>
                 </el-select>
                 <selectComponent v-else-if="item.type === 'component'" v-model="form[item.prop]" :configuration="configuration"/>
+                <el-select v-else-if="item.prop === 'orderType'"  style="width: 100%"  v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
+                  <el-option v-for="(item,index) in contractTypeDic" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
+                </el-select>
+                <el-select v-else-if="item.prop === 'currency'" style="width: 100%"   v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
+                  <el-option v-for="(item,index) in currencyDic" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
+                </el-select>
+                <el-select v-else-if="item.prop === 'paymentType'"  style="width: 100%"  v-model="form[item.prop]" size="small" placeholder="请选择" clearable filterable>
+                  <el-option v-for="(item,index) in paymentTypeDic" :key="index" :label="item.dictValue" :value="item.dictValue"></el-option>
+                </el-select>
                 <el-input type="textarea" v-else-if="(item.prop === 'orderRemark')" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入"></el-input>
                 <el-input type="age" v-else v-model="form[item.prop]" :disabled="item.disabled?true:false" size="small" autocomplete="off" placeholder="请输入"></el-input>
               </el-form-item>
@@ -66,72 +75,42 @@
                          @click="commoditySelection"
               >录入明细
               </el-button>
-              <el-button type="primary"
-                         icon="el-icon-plus"
+              <el-button type="warning"
+                         icon="el-icon-s-check"
                          size="small"
-                         @click=""
+                         :disabled="selectContact.length == 0"
+                         @click="beforePage(true)"
               >申请付款(开证)
               </el-button>
-              <el-button type="primary"
+              <el-button type="warning"
                          size="small"
-                         @click=""
-              >查看申请记录
+                         :disabled="selectContact.length == 0"
+                         @click="beforePage(false)"
+              >收货单
               </el-button>
-              <el-button type="primary"
+              <el-button type="info"
                          size="small"
-
                          @click=""
-              >收货单
+              >查看申请记录
               </el-button>
             </template>
-          </avue-crud>
-        </basic-container>
-<!--        其他费用-->
-        <containerTitle title="其他费用"></containerTitle>
-        <basic-container style="margin-bottom: 40px">
-          <avue-crud
-            :option="advantageProject"
-            v-model="advantageProjectForm"
-            :data="advantageProjectData"
-            ref="crudProject"
-            @row-save="rowSaveProject"
-            @row-update="rowUpdateAdvantageProject"
-            @row-del="rowDelAdvantageProject"
-          >
-            <template slot="code" slot-scope="{row,index}">
-              <span v-if="row.$cellEdit" style="float: left;color: #F56C6C;">*</span>
-              <span style="margin-left: 12px;padding-top: 2px">{{ row.code }}</span>
+            <template slot="priceCategory" slot-scope="{row,index}">
+              <span style="margin-left: 12px;padding-top: 2px">{{ row.priceCategoryNames }}</span>
               <el-button v-if="row.$cellEdit" type="text" size="mini" style="float: right" @click="choice(row)">选择</el-button>
             </template>
-            <template slot-scope="{row,index}" slot="menu">
-              <el-button
-                type="text"
-                size="small"
-                @click="rowCellTwo(row,index)"
-              >{{row.$cellEdit?'保存':'修改'}}</el-button>
-            </template>
-            <template slot="menuLeft" slot-scope="{size}">
-              <el-button type="primary"
-                         icon="el-icon-plus"
-                         size="small"
-                         @click="costIncrease"
-              >录入明细
-              </el-button>
-            </template>
           </avue-crud>
         </basic-container>
-<!--        合同上传-->
-        <containerTitle title="附件上传"></containerTitle>
-        <basic-container style="margin-bottom: 40px">
-          <avue-crud
-            :option="uploadList"
-            v-model="bankOfDepositForm"
-            :data="bankOfDepositData"
-            @row-save="rowSaveBankOfDeposit"
-            @row-update="rowUpdateBankOfDeposit"
-            @row-del="rowDelBankOfDeposit"
-          ></avue-crud>
-        </basic-container>
+        <fee-info
+          ref="feeInfo"
+          :orderFeesList="orderFeesList"
+          feeUrl=""
+        />
+        <upload-file
+          ref="uploadFile"
+          title="合同附件"
+          :orderFilesList="orderFilesList"
+          delUrl=""
+        />
       </el-form>
     </div>
 
@@ -168,49 +147,11 @@
         </el-col>
       </el-row>
       <span slot="footer" class="dialog-footer">
-          <el-button @click="dialogVisible = false">取 消</el-button>
-          <el-button type="primary" @click="importGoods" v-if="commodityData !== true">导入</el-button>
-          <el-button type="primary" @click="importChoice" v-if="commodityData === true"
-                     :disabled="tableData.length !== 1">导入</el-button>
-        </span>
-    </el-dialog>
-    <el-dialog
-      title="导入费用"
-      append-to-body
-      class="el-dialogDeep"
-      :visible.sync="dialogCost"
-      width="80%"
-      :close-on-click-modal="false"
-      :destroy-on-close="true"
-      :close-on-press-escape="false">
-      <el-row style="height: 0;">
-        <el-col :span="5">
-          <div>
-            <el-scrollbar>
-              <basic-container>
-                <avue-tree :option="treeOptionCost" :data="treeData" @node-click="nodeClickCost"/>
-              </basic-container>
-            </el-scrollbar>
-          </div>
-        </el-col>
-        <el-col :span="19">
-          <basic-container>
-            <avue-crud :option="optionTwoCost"
-                       :table-loading="loadingCost"
-                       :data="dataCost"
-                       ref="crud"
-                       @refresh-change="refreshChangeCost"
-                       @selection-change="selectionChangeCost"
-                       :page.sync="pageCost"
-                       @on-load="onLoadCost">
-            </avue-crud>
-          </basic-container>
-        </el-col>
-      </el-row>
-      <span slot="footer" class="dialog-footer">
-          <el-button @click="dialogCost = false">取 消</el-button>
-          <el-button type="primary" @click="importCost" v-if="choiceData !== true">导入</el-button>
-          <el-button type="primary" @click="choiceCost" v-if="choiceData === true" :disabled="tableDataCost.length !== 1">导入</el-button>
+          <el-button @click="dialogVisible = false , selectKind = -1">取 消</el-button>
+          <el-button type="primary" @click="commodityConfirm" v-if="selectKind != -1"  :disabled="tableData.length !== 1">确定</el-button>
+          <el-button type="primary" @click="importGoods" v-if="commodityData !== true && selectKind == -1">导入</el-button>
+          <el-button type="primary" @click="importChoice" v-if="commodityData === true  && selectKind == -1"
+                     :disabled="tableData.length !== 1">导入{{selectKind}}<</el-button>
         </span>
     </el-dialog>
   </div>
@@ -222,9 +163,10 @@ import uploadList from './config/uploadList.json'
 import advantageProject from "./config/advantageProject.json"
 import {getDeptLazyTree,customerList} from "@/api/basicData/basicFeesDesc";
 import optionTwoCost from "./config/mainListCost.json"
-import {detailListData,
-  submitData,} from "@/api/importTrade/purchase";
+import {detailListData, submitData,} from "@/api/importTrade/purchase";
 import commodity from "./config/commodity.json"
+import feeInfo from "@/components/fee-info/main";
+import uploadFile from "@/components/upload-file/main";
 //商品详情接口
 import {corpsattn, corpsbank,  getDeptLazyTreeS} from "@/api/basicData/configuration"
 import { getList } from "@/api/basicData/commodityType"
@@ -248,6 +190,13 @@ export default {
         currentPage: 1,
         total: 0
       },
+      contractTypeDic:[],
+      currencyDic:[],
+      selectContact:[],//选中采购明细
+      selectKind: -1,//选择采购明细的货品
+      paymentTypeDic:[],
+      orderFeesList:[],
+      orderFilesList:[],
       treeDeptId: '',
       treeOption: {
         nodeKey: 'id',
@@ -255,7 +204,6 @@ export default {
         treeLoad: function (node, resolve) {
           const parentId = (node.level === 0) ? 0 : node.data.id;
           getDeptLazyTreeS(parentId).then(res => {
-            console.log(res.data.data)
             resolve(res.data.data.map(item => {
               return {
                 ...item,
@@ -381,7 +329,7 @@ export default {
           }, {
             label: '合同日期',
             prop: 'businesDate',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: false,
@@ -406,7 +354,7 @@ export default {
             prop: 'orderAmount',
             rules: [
               {
-                required: false,
+                pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                 message: ' ',
                 trigger: 'blur'
               }
@@ -424,7 +372,6 @@ export default {
           }, {
             label: '业务员',
             prop: 'salesName',
-            // type:'select',
             dicData: [],
             rules: [
               {
@@ -436,7 +383,7 @@ export default {
           },{
             label: '要求发货日期',
             prop: 'requiredDeliveryDate',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: true,
@@ -447,7 +394,7 @@ export default {
           }, {
             label: '要求到货日期',
             prop: 'requiredArrivalDate',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: true,
@@ -458,7 +405,7 @@ export default {
           },{
             label: '到港日期',
             prop: 'dateOfArrival',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: false,
@@ -471,37 +418,23 @@ export default {
             prop: 'salesPrice',
             rules: [
               {
-                required: false,
+                pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                 message: ' ',
                 trigger: 'blur'
               }
             ]
           }, {
             label: '币别',
-            prop: 'currency',
-            rules: [
-              {
-                required: false,
-                message: ' ',
-                trigger: 'blur'
-              }
-            ]
+            prop: 'currency'
           }, {
             label: '汇率',
             prop: 'exchangeRate',
-            rules: [
-              {
-                required: false,
-                message: ' ',
-                trigger: 'blur'
-              }
-            ]
           }, {
             label: '人民币金额',
             prop: 'rmbAmount',
             rules: [
               {
-                required: false,
+                pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                 message: ' ',
                 trigger: 'blur'
               }
@@ -509,19 +442,10 @@ export default {
           }, {
             label: '付款方式',
             prop: 'paymentType',
-            // type:'select',
-            dicData: [],
-            rules: [
-              {
-                required: false,
-                message: ' ',
-                trigger: 'blur'
-              }
-            ]
           }, {
             label: '付款/开证日期',
             prop: 'accountsCollectionDate',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: false,
@@ -534,7 +458,7 @@ export default {
             prop: 'advancePayment',
             rules: [
               {
-                required: false,
+                pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                 message: ' ',
                 trigger: 'blur'
               }
@@ -544,7 +468,7 @@ export default {
             prop: 'settlmentAmount',
             rules: [
               {
-                required: false,
+                pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/,
                 message: ' ',
                 trigger: 'blur'
               }
@@ -552,7 +476,7 @@ export default {
           }, {
             label: '信用证到期日',
             prop: 'creditDate',
-            type:'datetime',
+            type:'date',
             rules: [
               {
                 required: false,
@@ -583,6 +507,16 @@ export default {
     }
   },
   created() {
+    //币别
+    this.getWorkDicts("currency").then(res =>{
+      this.currencyDic = res.data.data
+    })
+    this.getWorkDicts("contractType").then(res =>{
+      this.contractTypeDic = res.data.data
+    })
+    this.getWorkDicts("affair_payment_term").then(res =>{
+      this.paymentTypeDic = res.data.data
+    })
     if (this.$route.query.id) {
       let id = this.$route.query.id.replace(/\"/g, "")
       detailListData(id).then(res => {
@@ -591,32 +525,60 @@ export default {
           this.contactsData = res.data.data.itemsVOList
         }
         if(res.data.data.orderFeesList){
-          this.advantageProjectData = res.data.data.orderFeesList
+          this.orderFeesList = res.data.data.orderFeesList
         }
         if( res.data.data.orderFilesList){
-          this.bankOfDepositData = res.data.data.orderFilesList
+          this.orderFilesList = res.data.data.orderFilesList
         }
       })
     }
   },
+  components: {
+    feeInfo,
+    uploadFile
+  },
   methods: {
     //修改提交触发
     editCustomer() {
       this.$refs["form"].validate((valid) => {
         if (valid) {
+          let orderFeesList = this.$refs.feeInfo.submitData();
+          for (let i = 0; i < orderFeesList.length; i++) {
+            if (orderFeesList[i].corpId == null) {
+              return this.$message.error(`请输入第${i + 1}行的结算中心`);
+            }
+            if (orderFeesList[i].price == 0) {
+              return this.$message.error(`请正确输入第${i + 1}行的价格`);
+            }
+            if (orderFeesList[i].orderQuantity == 0) {
+              return this.$message.error(`请正确输入第${i + 1}行的数量`);
+            }
+          }
+          const orderFilesList = this.$refs.uploadFile.submitData();
           let submitDto = {
-            itemsVOList: [],
-            orderFeesList: [],
-            orderFilesList: []
+            ...this.form,
+            tradeType:"JK",
+            billType:"CG",
+            itemsVOList: this.contactsData,
+            orderFeesList:  orderFeesList,
+            orderFilesList: orderFilesList
           };
-          submitDto = Object.assign({}, submitDto, this.form)
-          submitDto.itemsVOList = this.contactsData
-          submitDto.orderFeesList = this.advantageProjectData
-          submitDto.orderFilesList = this.bankOfDepositData
-          submitDto.tradeType = "JK"
           submitData(submitDto).then(res => {
             if(res.data.success){
+              this.form.id = res.data.data
               this.$message.success("操作成功!")
+              detailListData(this.form.id).then(res => {
+                this.form = res.data.data;
+                if(res.data.data.itemsVOList){
+                  this.contactsData = res.data.data.itemsVOList
+                }
+                if(res.data.data.orderFeesList){
+                  this.orderFeesList = res.data.data.orderFeesList
+                }
+                if( res.data.data.orderFilesList){
+                  this.orderFilesList = res.data.data.orderFilesList
+                }
+              })
             }
           })
         } else {
@@ -625,7 +587,52 @@ export default {
       });
     },
     selectionContact(row){
-      this.selectcontact = row;
+      this.selectContact = row;
+    },
+    beforePage(type){
+      let list = []
+      for (let item in this.selectContact){
+        if (!this.selectContact[item].id){
+          return this.$confirm('商品信息有未保存数据, 是否立即保存?', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(() => {
+            this.editCustomer();
+          })
+        }else {
+          list.push(this.selectContact[item].$index)
+        }
+      }
+      const params = {
+        id:this.form.id,
+        orderItemIds:list
+      }
+      if(type){
+        this.$router.push({
+          path: "payment_detailsPage",
+          query: {params: params},
+        });
+      }else{
+        this.$router.push({
+          path: "importReceipt_detailsPage",
+          query: {params: params},
+        });
+      }
+    },
+    //选择货物品种
+    choice(row){
+      this.dialogVisible = true;
+      this.selectKind = row.$index;
+    },
+    //选择货品
+    commodityConfirm(){
+      if(this.tableData){
+        this.contactsData[this.selectKind].priceCategory = this.tableData[0].id;
+        this.$set(this.contactsData[this.selectKind],'priceCategoryNames',this.tableData[0].cname)
+        this.dialogVisible = !this.dialogVisible
+        this.selectKind = -1
+      }
     },
     //新增商品明细保存触发
     rowSave(row, done, loading) {
@@ -709,11 +716,14 @@ export default {
     importGoods() {
       if (this.tableData.length > 0) {
         for (let item in this.tableData) {
-          this.tableData[item].priceCategory = this.tableData[item].goodsTypeName
-          this.tableData[item].itemId = this.tableData[item].id
-          delete this.tableData[item].id
-          this.$refs.crudContact.rowCellAdd(this.tableData[item]);
-          this.$refs.crudContact.rowCell(this.tableData[item], this.contactsData.length - 1)
+          const params ={
+            priceCategory:this.tableData[item].code,
+            priceCategoryNames:this.tableData[item].cname,
+            itemId:this.tableData[item].id,
+            cname:this.tableData[item].cname
+          }
+          this.$refs.crudContact.rowCellAdd(params);
+          this.$refs.crudContact.rowCell(params,this.contactsData.length - 1)
         }
       }
       this.tableData = []
@@ -840,19 +850,12 @@ export default {
       this.loadingCost = true;
       let queryParams = Object.assign({}, params, {pageSize: page.pageSize, pageNum: page.currentPage,parentId:0,feesTypeId:this.treeDeptIdCost})
       customerList(queryParams).then(res => {
-        console.log(res)
         const data = res.data.data;
         this.pageCost.total = data.total;
         this.dataCost = data.records;
         this.loadingCost = false;
       });
     },
-    //点击费用明细选择触发
-    choice(row){
-      this.dialogCost = !this.dialogCost
-      this.choiceData = true
-      this.choiceIndex = row.$index
-    },
     nodeClickCost(data){
       this.treeDeptIdCost = data.id;
       this.pageCost.currentPage = 1;
@@ -873,7 +876,6 @@ export default {
       // this.advantageProjectForm = this.advantageProjectForm.concat(this.tableDataCost)
       if (this.tableDataCost.length>0){
         for(let item in this.tableDataCost){
-          console.log(this.tableDataCost[item])
           this.tableDataCost[item].itemId = this.tableDataCost[item].id
           this.tableDataCost[item].feeName = this.tableDataCost[item].cname
           delete this.tableDataCost[item].id
@@ -936,7 +938,6 @@ export default {
   right: 36px;
   top: 115px;
 }
-
 ::v-deep .el-form-item {
   margin-bottom: 0;
 }

+ 57 - 96
src/views/salesManagement/salesContract/detailsPage.vue

@@ -31,7 +31,7 @@
                   ></el-option>
                 </el-select>
                 <el-input type="textarea" v-else-if="(item.prop === 'orderRemark')" v-model="form[item.prop]"   size="small" autocomplete="off" placeholder="请输入"></el-input>
-                <el-input type="age" v-else v-model="form[item.prop]" size="small" autocomplete="off" placeholder="请输入"></el-input>
+                <el-input type="age" v-else v-model="form[item.prop]" size="small" :disabled="item.disabled?true:false" autocomplete="off" placeholder="请输入"></el-input>
               </el-form-item>
             </el-col>
           </el-row>
@@ -82,53 +82,19 @@
             </template>
           </avue-crud>
         </basic-container>
-<!--        其他费用-->
-        <containerTitle title="其他费用"></containerTitle>
-        <basic-container style="margin-bottom: 40px">
-          <avue-crud
-            :option="advantageProject"
-            v-model="advantageProjectForm"
-            :data="advantageProjectData"
-            ref="crudProject"
-            @row-save="rowSaveProject"
-            @row-update="rowUpdateProject"
-            @row-del="rowDelProject"
-          >
-            <template slot="code" slot-scope="{row,index}">
-              <span style="float: left;padding-top: 2px">{{row.code}}</span><el-button type="text" size="mini" style="float: right" @click="choice(row)">选择</el-button>
-            </template>
-            <template slot-scope="{row,index}" slot="menu">
-              <el-button
-                type="text"
-                size="small"
-                @click="rowCellTwo(row,index)"
-              >{{row.$cellEdit?'保存':'修改'}}</el-button>
-            </template>
-            <template slot="menuLeft" slot-scope="{size}">
-              <el-button type="primary"
-                         icon="el-icon-plus"
-                         size="small"
-                         @click="costIncrease"
-              >录入明细</el-button>
-            </template>
-          </avue-crud>
-        </basic-container>
-        <!--        合同上传-->
-        <containerTitle title="合同附件"></containerTitle>
-        <basic-container style="margin-bottom: 40px">
-          <avue-crud
-            :option="uploadList"
-            v-model="bankOfDepositForm"
-            :data="bankOfDepositData"
-            @row-save="rowSaveBankOfDeposit"
-            @row-update="rowUpdateBankOfDeposit"
-            @row-del="rowDelBankOfDeposit"
-          ></avue-crud>
-        </basic-container>
+        <fee-info
+          ref="feeInfo"
+          :orderFeesList="orderFeesList"
+          feeUrl=""
+        />
+        <upload-file
+          ref="uploadFile"
+          title="合同附件"
+          :orderFilesList="orderFilesList"
+          delUrl=""
+        />
       </el-form>
     </div>
-
-
     <el-dialog
       title="导入商品"
       append-to-body
@@ -170,46 +136,6 @@
                      :disabled="tableData.length !== 1">导入</el-button>
         </span>
     </el-dialog>
-<!--    导入其他费用-->
-    <el-dialog
-      title="导入费用"
-      append-to-body
-      class="el-dialogDeep"
-      :visible.sync="dialogCost"
-      width="80%"
-      :close-on-click-modal="false"
-      :destroy-on-close="true"
-      :close-on-press-escape="false">
-      <el-row style="height: 0;">
-        <el-col :span="5">
-          <div>
-            <el-scrollbar>
-              <basic-container>
-                <avue-tree :option="treeOptionCost" :data="treeData" @node-click="nodeClickCost"/>
-              </basic-container>
-            </el-scrollbar>
-          </div>
-        </el-col>
-        <el-col :span="19">
-          <basic-container>
-            <avue-crud :option="optionTwoCost"
-                       :table-loading="loadingCost"
-                       :data="dataCost"
-                       ref="crud"
-                       @refresh-change="refreshChangeCost"
-                       @selection-change="selectionChangeCost"
-                       :page.sync="pageCost"
-                       @on-load="onLoadCost">
-            </avue-crud>
-          </basic-container>
-        </el-col>
-      </el-row>
-        <span slot="footer" class="dialog-footer">
-          <el-button @click="dialogCost = false">取 消</el-button>
-          <el-button type="primary" @click="importCost" v-if="choiceData !== true">导入</el-button>
-          <el-button type="primary" @click="choiceCost" v-if="choiceData === true" :disabled="tableDataCost.length !== 1">导入</el-button>
-        </span>
-    </el-dialog>
   </div>
 </template>
 
@@ -236,6 +162,8 @@ import {detailSaleList,
   feesListRemove,
   updateListRemove,
   generateShipment} from "@/api/importTrade/salesContract"
+import feeInfo from "@/components/fee-info/main";
+import uploadFile from "@/components/upload-file/main";
 
 export default {
   name: "detailsPage",
@@ -245,6 +173,8 @@ export default {
       dialogCommodity: false,
       dialogVisible: false,
       form: {},
+      orderFeesList:[],
+      orderFilesList:[],
       //  基础信息
       basicData: {
         column: [
@@ -261,6 +191,7 @@ export default {
           }, {
             label: '订单号',
             prop: 'orderNo',
+            disabled:true,
             rules: [
               {
                 required: false,
@@ -604,27 +535,57 @@ export default {
       detailSaleList(id).then(res => {
         this.form = res.data.data;
         this.importInventoryData = this.form.orderItemsList
-        this.advantageProjectData = this.form.orderFeesList
+        if(this.form.orderFeesList){
+          this.orderFeesList = this.form.orderFeesList
+        }
+        if(this.form.orderFilesList){
+          this.orderFilesList = this.form.orderFilesList
+        }
         this.bankOfDepositData = this.form.orderFilesList
       })
     }
   },
+  components: {
+    feeInfo,
+    uploadFile
+  },
   methods: {
     editCustomer() {
       this.$refs["form"].validate((valid) => {
+        let orderFeesList = this.$refs.feeInfo.submitData();
+        for (let i = 0; i < orderFeesList.length; i++) {
+          if (orderFeesList[i].corpId == null) {
+            return this.$message.error(`请输入第${i + 1}行的结算中心`);
+          }
+          if (orderFeesList[i].price == 0) {
+            return this.$message.error(`请正确输入第${i + 1}行的价格`);
+          }
+          if (orderFeesList[i].orderQuantity == 0) {
+            return this.$message.error(`请正确输入第${i + 1}行的数量`);
+          }
+        }
+        // let orderUpLoadList = this.$refs.uploadFile.submitData();
         if (valid) {
           let submitDto = {
-            orderItemsList: [],
-            orderFeesList: [],
-            orderFilesList: []
+            ...this.form,
+            orderItemsList: this.importInventoryData,
+            orderFeesList: orderFeesList,
           };
-          submitDto = Object.assign({}, submitDto, this.form)
-          submitDto.orderItemsList = this.importInventoryData
-          submitDto.orderFeesList = this.advantageProjectData
-          submitDto.orderFilesList = this.bankOfDepositData
           submitData(submitDto).then(res => {
-            console.log(res)
-            this.backToList()
+            if(res.data.success){
+              this.$message.success("操作成功!")
+              detailSaleList(res.data.data.id).then(res => {
+                this.form = res.data.data;
+                this.importInventoryData = this.form.orderItemsList
+                if(this.form.orderFeesList){
+                  this.orderFeesList = this.form.orderFeesList
+                }
+                if(this.form.orderFilesList){
+                  this.orderFilesList = this.form.orderFilesList
+                }
+                this.bankOfDepositData = this.form.orderFilesList
+              })
+            }
           })
         } else {
           return false;

+ 12 - 0
src/views/salesManagement/salesContract/index.vue

@@ -35,6 +35,18 @@
           <el-table-column  label="付款金额" prop="amount" align="center" show-overflow-tooltip width="150"></el-table-column>
         </el-table>
       </template>
+      <template slot="menuLeft">
+        <el-button size="small"
+                   type="success"
+                   @click.stop=""
+        >复制新单
+        </el-button>
+        <el-button size="small"
+                   type="info"
+                   @click.stop="openReport()"
+        >报表
+        </el-button>
+      </template>
       <template slot-scope="scope" slot="menu">
         <el-button
           type="text"

+ 1 - 1
src/views/workManagement/service-items/configuration/projectOption.json

@@ -48,7 +48,7 @@
       "dicData": [],
       "type": "tree",
       "hide": true,
-      "multiple": true,
+      "multiple": false,
       "props": {
         "label": "title"
       },