Browse Source

事务管理新增页面

lichao 3 years ago
parent
commit
01b89afe1c

+ 21 - 64
src/views/workManagement/purchaseApply/config/customerContact.json

@@ -28,124 +28,81 @@
   ],
   "column": [
     {
-      "label": "产品编码",
+      "label": "物料编号",
       "prop": "code",
       "index": 1,
       "width": 200,
       "overHidden": true
     },
     {
-      "label": "商品名称",
+      "label": "物料名称",
       "prop": "cname",
       "index": 2,
       "width": 200,
       "overHidden": true
     },
     {
-      "label": "规格",
-      "prop": "typeno",
+      "label": "计量单位",
+      "prop": "unit",
       "index": 3,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "花纹",
-      "prop": "brandItem",
+      "label": "数量",
+      "prop": "orderQuantity",
       "index": 4,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "负荷指数",
-      "prop": "specsOne",
+      "label": "单价",
+      "prop": "price",
       "index": 5,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "速度级别",
-      "prop": "specsTwo",
+      "label": "金额",
+      "prop": "amount",
       "index": 6,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "单位",
-      "prop": "unit",
+      "label": "备注",
+      "prop": "remarks",
       "index": 7,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "批次号",
-      "prop": "lotNo",
+      "label": "制单人",
+      "prop": "createUser",
       "index": 8,
-      "width": 140,
+      "width": 100,
       "overHidden": true
     },
     {
-      "label": "库存",
-      "prop": "storageQuantity",
+      "label": "制单时间",
+      "prop": "createTime",
       "index": 9,
       "width": 100,
       "overHidden": true
     },
-
     {
-      "label": "数量",
-      "prop": "orderQuantity",
+      "label": "更新人",
+      "prop": "updateUser",
       "index": 10,
       "width": 100,
       "overHidden": true
     },
     {
-      "label": "尺寸",
-      "prop": "size",
+      "label": "更新时间",
+      "prop": "updateTime",
       "index": 11,
       "width": 100,
       "overHidden": true
-    },
-    {
-      "label": "库存价格",
-      "prop": "purchaseAmount",
-      "index": 12,
-      "width": 100,
-      "overHidden": true
-    },
-    {
-      "label": "价格",
-      "prop": "price",
-      "index": 13,
-      "width": 100,
-      "overHidden": true
-    },
-    {
-      "label": "小计",
-      "prop": "amount",
-      "index": 14,
-      "width": 100,
-      "overHidden": true
-    },
-    {
-      "label": "最新价格",
-      "prop": "newJob",
-      "index": 14,
-      "width": 100,
-      "overHidden": true
-    },
-    {
-      "label": "最新日期",
-      "prop": "newDate",
-      "index": 15,
-      "width": 100,
-      "overHidden": true
-    },
-    {
-      "label": "备注",
-      "prop": "remarks",
-      "index": 16,
-      "width": 100,
-      "overHidden": true
     }
   ]
 }

+ 3 - 37
src/views/workManagement/purchaseApply/detail.vue

@@ -321,6 +321,7 @@ import {
 import { gainUser } from "@/api/basicData/customerInquiry";
 import {getUserInfo} from "@/api/system/user";
 import {getDeptTree} from "@/api/system/dept";
+import { getCurrentDate } from "@/util/date";
 
 export default {
   name: "detail",
@@ -369,7 +370,7 @@ export default {
             rules: [
               {
                 required: true,
-                message: "",
+                message: " ",
                 trigger: "blur"
               }
             ]
@@ -472,6 +473,7 @@ export default {
     this.getWorkDicts('unit').then(res => {
       this.unitOption = res.data.data;
     })
+    this.$set(this.form, 'b', getCurrentDate()); // 默认当前日期
   },
   filters: {
     IntegerFormat(num) {
@@ -585,20 +587,12 @@ export default {
       this.goodsoptions.forEach(async e => {
         if (e.code == row.code) {
           row.itemId = e.id;
-          row.storageQuantity =  e.storageQuantity;
           row.cname = e.cname;
           row.code = e.code;
           row.corpId = e.corpId;
           row.corpName = e.corpName;
-          row.brandItem = e.brandItem;
-          row.specsOne = e.specsOne;
-          row.specsTwo = e.specsTwo;
-          row.typeno = e.typeno;
           row.unit = e.unit;
-          row.size = e.size;
-          row.arr = e.arr;
           row.priceCategory = e.goodsTypeName;
-          row.purchaseAmount = e.purchaseAmount;
           row.price = e.price;
         }
       });
@@ -607,20 +601,12 @@ export default {
       let form = {};
       this.goodsoptions.forEach(async e => {
         if (e.id == row.itemId) {
-          row.storageQuantity =  e.storageQuantity
           row.cname = e.cname;
           row.code = e.code;
           row.corpId = e.corpId;
           row.corpName = e.corpName;
-          row.brandItem = e.brandItem;
-          row.specsOne = e.specsOne;
-          row.specsTwo = e.specsTwo;
-          row.typeno = e.typeno;
           row.unit = e.unit;
-          row.size = e.size;
-          row.arr = e.arr;
           row.priceCategory = e.goodsTypeName;
-          row.purchaseAmount = e.purchaseAmount;
           row.price = e.price;
         }
       });
@@ -744,14 +730,8 @@ export default {
                 item.cname = e.cname;
                 item.corpId = e.corpId;
                 item.corpName = e.corpName;
-                item.brandItem = e.brandItem;
-                item.specsOne = e.specsOne;
-                item.specsTwo = e.specsTwo;
-                item.typeno = e.typeno;
                 item.unit = e.unit;
-                item.size = e.size;
                 item.priceCategory = e.goodsTypeName;
-                item.purchaseAmount = e.purchaseAmount;
                 item.price = e.price;
                 item.$cellEdit = true;
               }
@@ -765,19 +745,12 @@ export default {
               itemId: e.id,
               code: e.code,
               cname: e.cname,
-              brandItem: e.brandItem,
-              specsOne: e.specsOne,
-              specsTwo: e.specsTwo,
-              typeno: e.typeno,
               corpId: e.corpId,
               corpName: e.corpName,
               unit: e.unit,
-              size: e.size,
               price: e.price,
               amount: 0,
               orderQuantity: 0,
-              storageQuantity: e.storageQuantity,
-              purchaseAmount: e.purchaseAmount,
               $cellEdit: true
             });
           });
@@ -787,18 +760,11 @@ export default {
               itemId: e.id,
               code: e.code,
               cname: e.cname,
-              brandItem: e.brandItem,
-              specsOne: e.specsOne,
-              specsTwo: e.specsTwo,
-              typeno: e.typeno,
               corpId: e.corpId,
               corpName: e.corpName,
               unit: e.unit,
-              size: e.size,
               amount: 0,
               orderQuantity: 0,
-              storageQuantity: e.storageQuantity,
-              purchaseAmount: e.purchaseAmount,
               price: e.price,
               $cellEdit: true
             });

+ 80 - 0
src/views/workManagement/requisition/config/commodity.json

@@ -0,0 +1,80 @@
+{
+  "stripe": true,
+  "border": true,
+  "searchMenuSpan": 16,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": false,
+  "menu": true,
+  "align": "center",
+  "menuWidth": "180",
+  "selection": true,
+  "tip": false,
+  "column": [{
+      "label": "商品编号",
+      "prop": "code",
+      "index": 1,
+      "width": 120,
+      "search": true,
+      "searchSpan": 8,
+      "overHidden": true
+    },
+    {
+      "label": "商品名称",
+      "search": true,
+      "searchSpan": 8,
+      "prop": "cname",
+      "index": 2,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "商品类别",
+      "prop": "goodsTypeName",
+      "index": 3,
+      "width": 120,
+      "search": true,
+      "searchSpan": 8,
+      "overHidden": true
+    },
+    {
+      "label": "规格尺寸",
+      "prop": "typeno",
+      "index": 4,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "花纹",
+      "prop": "brandItem",
+      "index": 5,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "负荷指数",
+      "prop": "specsOne",
+      "index": 6,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "速级",
+      "prop": "specsTwo",
+      "index": 7,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "加强型",
+      "prop": "level",
+      "index": 8,
+      "width": 120,
+      "overHidden": true
+    }
+  ]
+}

+ 115 - 0
src/views/workManagement/requisition/config/customerContact.json

@@ -0,0 +1,115 @@
+{
+  "stripe": true,
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "addBtn": false,
+  "delBtn": false,
+  "align": "center",
+  "menuWidth": 120,
+  "refreshBtn": false,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+    {
+      "name": "orderQuantity",
+      "type": "sum"
+    },
+    {
+      "name": "price",
+      "type": "sum"
+    },
+    {
+      "name": "amount",
+      "type": "sum"
+    }
+  ],
+  "column": [
+    {
+      "label": "物料编号",
+      "prop": "code",
+      "index": 1,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "物料名称",
+      "prop": "cname",
+      "index": 2,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "计量单位",
+      "prop": "unit",
+      "index": 3,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "数量",
+      "prop": "orderQuantity",
+      "index": 4,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "单价",
+      "prop": "price",
+      "index": 5,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "金额",
+      "prop": "amount",
+      "index": 6,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "备注",
+      "prop": "remarks",
+      "index": 7,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "库区",
+      "prop": "storageId",
+      "index": 8,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "制单人",
+      "prop": "createUser",
+      "index": 9,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "制单时间",
+      "prop": "createTime",
+      "index": 10,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "更新人",
+      "prop": "updateUser",
+      "index": 11,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "更新时间",
+      "prop": "updateTime",
+      "index": 12,
+      "width": 100,
+      "overHidden": true
+    }
+  ]
+}

+ 57 - 0
src/views/workManagement/requisition/config/mainList.json

@@ -0,0 +1,57 @@
+{
+  "stripe": true,
+  "height": "auto",
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": false,
+  "align": "center",
+  "menuWidth": "70",
+  "searchIcon": true,
+  "searchIndex": 2,
+  "selection": true,
+  "tip": false,
+  "searchSpan": 8,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [],
+  "column": [
+    {
+      "label": "领用人",
+      "prop": "createUser",
+      "search": true,
+      "index": 1,
+      "minWidth": 80,
+      "overHidden": true
+    },
+    {
+      "label": "部门",
+      "prop": "a",
+      "overHidden": true,
+      "minWidth": 100,
+      "search": false
+    },
+    {
+      "label": "领用时间",
+      "prop": "createTime",
+      "type": "date",
+      "overHidden": true,
+      "minWidth": 200,
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true
+    },
+    {
+      "label": "系统编号",
+      "prop": "sysNo",
+      "overHidden": true,
+      "minWidth": 120,
+      "search": true
+    }
+  ]
+}

+ 782 - 0
src/views/workManagement/requisition/detail.vue

@@ -0,0 +1,782 @@
+<template>
+  <div class="borderless" v-loading="pageLoading">
+    <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"
+          :loading="btnLoading"
+        >返回列表</el-button>
+      </div>
+      <div class="add-customer-btn">
+        <el-button
+          type="primary"
+          size="small"
+          class="el-button--small-yh"
+          @click.stop="openEdit"
+        >编 辑</el-button>
+        <el-button
+          type="success"
+          :disabled="!form.id"
+          size="small"
+          @click="copyDoc"
+          :loading="btnLoading"
+        >复制单据</el-button>
+        <el-button
+          type="primary"
+          @click="editCustomer"
+          size="small"
+          :loading="btnLoading"
+        >保存数据</el-button>
+      </div>
+    </div>
+    <div class="customer-main">
+      <containerTitle title="基础信息"/>
+      <basic-container :showBtn="true">
+        <avue-form
+          ref="form"
+          class="trading-form"
+          v-model="form"
+          :option="option"
+        >
+          <template slot="createUser">
+            <el-select
+              v-model="form.createUser"
+              filterable
+              clearable
+              size="small"
+            >
+              <el-option
+                v-for="(item,index) in userList"
+                :key="index"
+                :label="item.realName"
+                :value="item.realName"
+              ></el-option>
+            </el-select>
+          </template>
+          <template slot="deptId">
+            <avue-input-tree
+              leaf-only
+              style="width: 100%;"
+              size="small"
+              :props="{ label: 'title' }"
+              v-model="form.deptId"
+              placeholder=" "
+              type="tree"
+              :dic="dic"
+            ></avue-input-tree>
+          </template>
+        </avue-form>
+      </basic-container>
+      <containerTitle title="商品信息"/>
+      <basic-container>
+        <avue-crud
+          ref="crud"
+          :data="dataList"
+          :option="tableOption"
+          :cell-style="cellStyle"
+          @saveColumn="saveColumn"
+          @resetColumn="resetColumn"
+        >
+          <template slot="menuLeft">
+            <el-button
+              type="primary"
+              icon="el-icon-plus"
+              size="small"
+              @click.stop="newDetails"
+            >录入明细</el-button>
+            <el-button
+              type="info"
+              icon="el-icon-printer"
+              size="small"
+            >报 表</el-button>
+          </template>
+          <template slot="menu" slot-scope="{ row, index }">
+            <el-button
+              size="small"
+              icon="el-icon-edit"
+              type="text"
+              @click="rowCell(row, index)"
+            >{{ row.$cellEdit ? "保存" : "修改" }}</el-button>
+            <el-button
+              size="small"
+              icon="el-icon-delete"
+              type="text"
+              @click="rowDel(row, index)"
+            >删除</el-button>
+          </template>
+          <template slot="code" slot-scope="{ row, index }">
+            <span v-if="row.$cellEdit" style="display:flex">
+              <el-select
+                v-model="row.code"
+                placeholder="请选择"
+                filterable
+                size="small"
+                style="width:60%"
+                @change="codeChange(row, index)"
+              >
+                <el-option
+                  v-for="item in goodsoptions"
+                  :key="item.id"
+                  :label="item.code"
+                  :value="item.code"
+                >
+                </el-option>
+              </el-select>
+              <el-button
+                icon="el-icon-search"
+                size="small"
+                @click="rePick(row, index)"
+              ></el-button>
+            </span>
+            <span v-else> {{ row.code }}</span>
+          </template>
+          <template slot="cname" slot-scope="{ row, index }">
+            <span v-if="row.$cellEdit" style="display:flex">
+              <el-select
+                v-model="row.itemId"
+                placeholder="请选择"
+                size="small"
+                filterable
+                style="width:60%"
+                @change="cnameChange(row, index)"
+              >
+                <el-option
+                  v-for="item in goodsoptions"
+                  :key="item.id"
+                  :label="item.cname"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+              <el-button
+                icon="el-icon-search"
+                size="small"
+                @click="rePick(row, index)"
+              ></el-button>
+            </span>
+            <span v-else> {{ row.cname }}</span>
+          </template>
+          <template slot="orderQuantity" slot-scope="{ row, index }">
+            <el-input-number
+              v-if="row.$cellEdit"
+              v-model="row.orderQuantity"
+              size="small"
+              :controls="false"
+              :precision="0"
+              @input="amountChange(row)"
+              style="width: 100%"
+            />
+            <span v-else>{{ row.orderQuantity | IntegerFormat }}</span>
+          </template>
+          <template slot="price" slot-scope="{ row, index }">
+            <el-input-number
+              v-if="row.$cellEdit"
+              v-model="row.price"
+              size="small"
+              :controls="false"
+              :precision="2"
+              @input="amountChange(row)"
+              style="width: 100%"
+            ></el-input-number>
+            <span v-else>{{ row.price }}</span>
+          </template>
+          <!--          单位-->
+          <template slot="unit" slot-scope="{ row, index }">
+            <el-select
+              v-if="row.$cellEdit"
+              v-model="row.unit"
+              size="small"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="(item, index) in unitOption"
+                :key="index"
+                :label="item.dictValue"
+                :value="item.dictValue"
+              />
+            </el-select>
+            <span v-else>{{ row.unit }}</span>
+          </template>
+          <template slot="amount" slot-scope="{ row, index }">
+            <span>{{ row.amount | decimalFormat }}</span>
+          </template>
+          <template slot="storageQuantity" slot-scope="{ row, index }">
+            <span>{{ row.storageQuantity | IntegerFormat }}</span>
+          </template>
+          <template slot="remarks" slot-scope="{ row, index }">
+            <el-input
+              v-if="row.$cellEdit"
+              v-model="row.remarks"
+              size="small"
+            />
+            <span v-else>{{ row.remarks }}</span>
+          </template>
+        </avue-crud>
+      </basic-container>
+    </div>
+
+    <!--    商品弹窗-->
+    <el-dialog
+      title="导入商品"
+      append-to-body
+      class="el-dialogDeep"
+      :visible.sync="dialogVisible"
+      width="80%"
+      :close-on-click-modal="false"
+      :destroy-on-close="true"
+      :close-on-press-escape="false"
+      @close="closeGoods"
+      top="5vh"
+      v-dialog-drag
+    >
+      <span>
+        <el-row>
+          <el-col :span="4">
+            <div>
+              <el-scrollbar>
+                <basic-container>
+                  <avue-tree
+                    :option="treeOption"
+                    @node-click="nodeClick"
+                    :style="treeStyle"
+                  />
+                </basic-container>
+              </el-scrollbar>
+            </div>
+          </el-col>
+          <el-col :span="20">
+            <avue-crud
+              :option="goodsOption"
+              :table-loading="loading"
+              :data="goodsListShow"
+              ref="goodsCrud"
+              :search.sync="search"
+              @search-change="searchChange"
+              @selection-change="selectionChange"
+              @row-click="rowClick"
+              :page.sync="page"
+              @on-load="onLoad"
+              @saveColumn="saveGoodsColumn"
+              @resetColumn="resetGoodsColumn"
+              :cell-style="cellStyle"
+            >
+              <template slot="menuLeft">
+                <el-tabs v-model="activeName" @tab-click="tabHandle">
+                  <el-tab-pane label="查询结果" name="searchList"></el-tab-pane>
+                  <el-tab-pane label="已选定数据" name="importStaging"></el-tab-pane>
+                </el-tabs>
+              </template>
+              <template slot-scope="scope" slot="menu">
+                <el-button
+                  type="text"
+                  icon="el-icon-edit"
+                  size="small"
+                  @click.stop="importStagList(scope.row,scope.index)"
+                  v-if="activeName=='searchList'"
+                  :disabled="goodsListSave.findIndex(item => item.id == scope.row.id) !== -1"
+                >选择
+                </el-button>
+                <el-button
+                  type="text"
+                  icon="el-icon-delete"
+                  size="small"
+                  @click.stop="removeStagList(scope.row,scope.index)"
+                  v-else
+                >移除
+                </el-button>
+              </template>
+            </avue-crud>
+          </el-col>
+        </el-row>
+      </span>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button
+          type="primary"
+          @click="importGoods"
+          :disabled="selectionList.length == 0 && goodsListSave.length == 0"
+        >导入</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import tableOption from "./config/customerContact.json";
+import goodsOption from "./config/commodity.json";
+import {getDeptLazyTree,
+  getGoods,} from "@/api/basicData/customerInquiry";
+import {
+  isDiscount,
+  isPercentage,
+  micrometerFormat,
+  IntegerFormat
+} from "@/util/validate";
+import { gainUser } from "@/api/basicData/customerInquiry";
+import {getUserInfo} from "@/api/system/user";
+import {getDeptTree} from "@/api/system/dept";
+import { getCurrentDate } from "@/util/date";
+
+export default {
+  name: "detail",
+  data() {
+    return {
+      pageLoading: false,
+      btnLoading: false,
+      form: {},
+      option: {
+        menuBtn: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: "领用人",
+            prop: "createUser",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "部门",
+            prop: "deptId",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "领用时间",
+            prop: "b",
+            span: 8,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "系统号",
+            prop: "sysNo",
+            span: 8,
+            disabled: true
+          },
+          {
+            label: "备注",
+            prop: "orderRemark",
+            type: "textarea",
+            minRows: 2,
+            span: 24,
+          },
+        ],
+      },
+      dataList: [],
+      tableOption: {},
+      goodsoptions: [],
+      unitOption: [],
+      dialogVisible: false,
+      selectionList: [],
+      treeDeptId: null,
+      reData: null,
+      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: {
+          label: "title",
+          value: "value",
+          children: "children"
+        }
+      },
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      search: {},
+      treeStyle: "height:" + (window.innerHeight - 315) + "px",
+      goodsOption: {},
+      loading: false,
+      goodData: [], // 存储所有商品信息
+      switchDialog: false, // 报表弹窗控制
+      userList: [],
+      activeName: 'searchList',
+      // 商品列表数据合计
+      goodsListShow: [],
+      // 商品列表暂存
+      goodsListSave: [],
+      pageList: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      dic: [],
+    }
+  },
+  async created() {
+    this.tableOption = await this.getColumnData(
+      this.getColumnName(92),
+      tableOption
+    );
+    this.goodsOption = await this.getColumnData(
+      this.getColumnName(93),
+      goodsOption
+    );
+    getGoods(1, 500).then(res => {
+      this.goodsoptions = res.data.data.records;
+    });
+    gainUser().then(res => {
+      this.userList = res.data.data;
+    });
+    getUserInfo().then(res => {
+      this.$set(this.form, 'createUser', res.data.data.realName);
+      this.$set(this.form, 'deptId', res.data.data.deptId);
+    })
+    getDeptTree().then(res => {
+      this.dic = res.data.data
+    })
+    this.getWorkDicts('unit').then(res => {
+      this.unitOption = res.data.data;
+    })
+    this.$set(this.form, 'b', getCurrentDate()); // 默认当前日期
+  },
+  filters: {
+    IntegerFormat(num) {
+      return IntegerFormat(num);
+    },
+    decimalFormat(num) {
+      return num ? Number(num).toFixed(2) : "0.00";
+    }
+  },
+  methods: {
+    //返回列表
+    backToList() {
+      this.$emit("goBack");
+    },
+    // 编辑按钮触发
+    openEdit() {},
+    // 复制
+    copyDoc() {
+      this.$emit("copyOrder", this.form.id);
+    },
+    //修改提交触发
+    editCustomer(status) {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          // this.btnLoading = true;
+          // typeSave(this.form).then(res => {
+          //   this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
+          //   this.queryData(res.data.data.id);
+          // }).finally(() => {
+          //   this.btnLoading = false;
+          // })
+        } else {
+          return false
+        }
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(92),
+        this.tableOption
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.tableOption = tableOption;
+      const inSave = await this.delColumnData(
+        this.getColumnName(92),
+        tableOption
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        //关闭窗口
+        setTimeout(() => {
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }, 1000);
+      }
+    },
+    //商品明细导入
+    newDetails() {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          this.dialogVisible = !this.dialogVisible;
+        }
+      })
+    },
+    rowCell(row, index) {
+      if (row.$cellEdit == true) {
+        this.$set(row, "$cellEdit", false);
+      } else {
+        this.$set(row, "$cellEdit", true);
+      }
+    },
+    rowDel(row, index) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          // removeGoods(row.id).then(res => {
+          //   this.$message({
+          //     type: 'success',
+          //     message: '删除成功!'
+          //   })
+          //   this.dataList.splice(row.$index, 1);
+          // })
+        } else {
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.dataList.splice(row.$index, 1);
+        }
+      });
+    },
+    codeChange(row) {
+      this.goodsoptions.forEach(async e => {
+        if (e.code == row.code) {
+          row.itemId = e.id;
+          row.cname = e.cname;
+          row.code = e.code;
+          row.corpId = e.corpId;
+          row.corpName = e.corpName;
+          row.unit = e.unit;
+          row.priceCategory = e.goodsTypeName;
+          row.price = e.price;
+        }
+      });
+    },
+    cnameChange(row) {
+      let form = {};
+      this.goodsoptions.forEach(async e => {
+        if (e.id == row.itemId) {
+          row.cname = e.cname;
+          row.code = e.code;
+          row.corpId = e.corpId;
+          row.corpName = e.corpName;
+          row.unit = e.unit;
+          row.priceCategory = e.goodsTypeName;
+          row.price = e.price;
+        }
+      });
+    },
+    rePick(row, index) {
+      this.reData = {
+        ...row,
+        index: index
+      };
+      this.newDetails();
+    },
+    // 商品信息价格计算
+    amountChange(row) {
+      if (!row.orderQuantity) {
+        row.orderQuantity = 0;
+      }
+      if (!row.price) {
+        row.price = 0;
+      }
+      row.amount = Number(row.price) * Number(row.orderQuantity)
+    },
+    closeGoods() {
+      this.selectionList = [];
+      this.treeDeptId = "";
+      this.reData = null;
+      this.activeName = 'searchList';
+      this.goodsListSave = [];
+    },
+    nodeClick(data) {
+      this.treeDeptId = data.id;
+      this.page.currentPage = 1;
+      this.onLoad(this.page);
+    },
+    //商品查询
+    onLoad(page, params = {}) {
+      let obj = this.deepClone(Object.assign(params, this.search));
+      this.loading = true;
+      getGoods(page.currentPage, page.pageSize, this.treeDeptId, obj)
+        .then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.goodsList = data.records;
+          this.pageList.total = data.total;
+          this.goodsListShow = data.records;
+          if (this.page.total) {
+            this.goodsOption.height = window.innerHeight - 350;
+          }
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    searchChange(params, done) {
+      this.search = this.deepClone(params);
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    rowClick(row) {
+      this.$refs.goodsCrud.toggleSelection([this.goodsList[row.$index]]);
+    },
+    async saveGoodsColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(93),
+        this.goodsOption
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.goodsCrud.doLayout()
+        })
+      }
+    },
+    async resetGoodsColumn() {
+      this.goodsOption = goodsOption;
+      const inSave = await this.delColumnData(
+        this.getColumnName(93),
+        goodsOption
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.goodsCrud.doLayout()
+        })
+        this.$message.success("重置成功");
+        //关闭窗口
+        setTimeout(() => {
+          this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
+        }, 1000);
+      }
+    },
+    // 标签页切换
+    tabHandle(data) {
+      if (data.name == 'searchList') {
+        this.goodsListShow = this.goodsList;
+        this.page.total = this.pageList.total
+      } else if (data.name == 'importStaging') {
+        this.goodsListShow = this.goodsListSave;
+        this.page.total = 0
+      }
+    },
+    removeStagList(row, index) {
+      this.goodsListSave.splice(row.$index, 1)
+    },
+    importStagList(row, index) {
+      this.goodsListSave.push(row);
+    },
+    importGoods() {
+      if (this.reData) {
+        if (this.selectionList.length != 1) {
+          return this.$message.error("重新选择的时候只能选择一条数据");
+        } else {
+          this.selectionList.forEach(e => {
+            this.dataList.forEach(async (item, index) => {
+              if (index == this.reData.index) {
+                item.itemId = e.id;
+                item.code = e.code;
+                item.cname = e.cname;
+                item.corpId = e.corpId;
+                item.corpName = e.corpName;
+                item.unit = e.unit;
+                item.priceCategory = e.goodsTypeName;
+                item.price = e.price;
+                item.$cellEdit = true;
+              }
+            });
+          });
+        }
+      } else {
+        if (this.goodsListSave.length > 0) { // 暂存的有数据
+          this.goodsListSave.forEach(async e => {
+            this.dataList.push({
+              itemId: e.id,
+              code: e.code,
+              cname: e.cname,
+              corpId: e.corpId,
+              corpName: e.corpName,
+              unit: e.unit,
+              price: e.price,
+              amount: 0,
+              orderQuantity: 0,
+              $cellEdit: true
+            });
+          });
+        } else {
+          this.selectionList.forEach(async e => {
+            this.dataList.push({
+              itemId: e.id,
+              code: e.code,
+              cname: e.cname,
+              corpId: e.corpId,
+              corpName: e.corpName,
+              unit: e.unit,
+              amount: 0,
+              orderQuantity: 0,
+              price: e.price,
+              $cellEdit: true
+            });
+          });
+        }
+      }
+      this.dialogVisible = false;
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 196 - 0
src/views/workManagement/requisition/index.vue

@@ -0,0 +1,196 @@
+<template>
+  <div>
+    <basic-container v-show="show" class="page-crad">
+      <avue-crud
+        ref="crud"
+        :option="option"
+        :data="dataList"
+        v-model="form"
+        :page.sync="page"
+        :search.sync="search"
+        :table-loading="loading"
+        :cell-style="cellStyle"
+        @selection-change="selectionChange"
+        @search-change="searchChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+        @on-load="onLoad"
+        @search-criteria-switch="searchCriteriaSwitch"
+        @saveColumn="saveColumn"
+        @resetColumn="resetColumn"
+      >
+        <template slot="menuLeft">
+          <el-button
+            type="primary"
+            icon="el-icon-plus"
+            size="small"
+            @click.stop="newAdd()"
+          >创建单据</el-button>
+          <el-button
+            type="success"
+            size="small"
+            icon="el-icon-plus"
+            @click.stop="copyDoc()"
+            :disabled="selection.length != 1"
+          >复制单据</el-button>
+        </template>
+        <template slot-scope="scope" slot="menu">
+          <el-button
+            type="text"
+            icon="el-icon-delete"
+            size="small"
+            @click.stop="rowDel(scope.row, scope.index)"
+            :disabled="scope.row.status == 3"
+          >删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </basic-container>
+    <detail-page
+      @goBack="goBack"
+      @copyOrder="copyOrder"
+      :detailData="detailData"
+      v-if="!show"
+    />
+  </div>
+</template>
+
+<script>
+import option from "./config/mainList.json";
+import detailPage from "./detail";
+
+export default {
+  name: "index",
+  components: {
+    detailPage,
+  },
+  data() {
+    return {
+      option: {},
+      dataList: [],
+      form: {},
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 50, 100, 200, 300, 400, 500]
+      },
+      search: {},
+      show: true,
+      loading: false,
+      selection: [],
+      detailData: {},
+    }
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(94), option);
+  },
+  methods: {
+    searchCriteriaSwitch(type) {
+      if (type){
+        this.option.height =  this.option.height - 90
+      }else {
+        this.option.height =  this.option.height + 90
+      }
+      this.$refs.crud.getTableHeight()
+    },
+    newAdd() {
+      this.show = false;
+    },
+    onLoad(page, params) {
+      // 重置掉展开
+      this.dataList.forEach(item => {
+        this.$refs.crud.toggleRowExpansion(item, false)
+      })
+      let queryParams = Object.assign({}, params, {
+        size: page.pageSize,
+        current: page.currentPage,
+      })
+      // this.loading = true;
+      // getSalesList(queryParams).then(res => {
+      //   this.dataList = res.data.data.records;
+      //   this.page.total = res.data.data.total;
+      //   this.option.height = window.innerHeight - 240;
+      //   this.$nextTick(() => {
+      //     this.$refs.crud.doLayout()
+      //   })
+      // }).finally(() => {
+      //   this.loading = false;
+      // })
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(94),
+        this.option
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.option = option;
+      const inSave = await this.delColumnData(this.getColumnName(94), option);
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.onLoad(this.page, params);
+      done();
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    copyDoc() {},
+    selectionChange(list) {
+      this.selection = list;
+    },
+    goBack() {
+      if (this.$route.query.id) {
+        this.$router.$avueRouter.closeTag(this.$route.fullPath);
+        this.$router.push({
+          path: "/dealer/sales/index"
+        });
+      }
+      this.detailData = this.$options.data().detailData;
+      this.show = true;
+      this.onLoad(this.page, this.search);
+    },
+    copyOrder(id) {
+      this.show = true;
+      this.detailData = {
+        id: id,
+        status: "copy"
+      };
+      this.$nextTick(() => {
+        this.show = false;
+      });
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 80 - 0
src/views/workManagement/warehousing/config/commodity.json

@@ -0,0 +1,80 @@
+{
+  "stripe": true,
+  "border": true,
+  "searchMenuSpan": 16,
+  "searchIcon": true,
+  "searchIndex": 2,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": false,
+  "menu": true,
+  "align": "center",
+  "menuWidth": "180",
+  "selection": true,
+  "tip": false,
+  "column": [{
+      "label": "商品编号",
+      "prop": "code",
+      "index": 1,
+      "width": 120,
+      "search": true,
+      "searchSpan": 8,
+      "overHidden": true
+    },
+    {
+      "label": "商品名称",
+      "search": true,
+      "searchSpan": 8,
+      "prop": "cname",
+      "index": 2,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "商品类别",
+      "prop": "goodsTypeName",
+      "index": 3,
+      "width": 120,
+      "search": true,
+      "searchSpan": 8,
+      "overHidden": true
+    },
+    {
+      "label": "规格尺寸",
+      "prop": "typeno",
+      "index": 4,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "花纹",
+      "prop": "brandItem",
+      "index": 5,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "负荷指数",
+      "prop": "specsOne",
+      "index": 6,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "速级",
+      "prop": "specsTwo",
+      "index": 7,
+      "width": 120,
+      "overHidden": true
+    },
+    {
+      "label": "加强型",
+      "prop": "level",
+      "index": 8,
+      "width": 120,
+      "overHidden": true
+    }
+  ]
+}

+ 115 - 0
src/views/workManagement/warehousing/config/customerContact.json

@@ -0,0 +1,115 @@
+{
+  "stripe": true,
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "addBtn": false,
+  "delBtn": false,
+  "align": "center",
+  "menuWidth": 120,
+  "refreshBtn": false,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [
+    {
+      "name": "orderQuantity",
+      "type": "sum"
+    },
+    {
+      "name": "price",
+      "type": "sum"
+    },
+    {
+      "name": "amount",
+      "type": "sum"
+    }
+  ],
+  "column": [
+    {
+      "label": "物料编号",
+      "prop": "code",
+      "index": 1,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "物料名称",
+      "prop": "cname",
+      "index": 2,
+      "width": 200,
+      "overHidden": true
+    },
+    {
+      "label": "计量单位",
+      "prop": "unit",
+      "index": 3,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "数量",
+      "prop": "orderQuantity",
+      "index": 4,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "单价",
+      "prop": "price",
+      "index": 5,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "金额",
+      "prop": "amount",
+      "index": 6,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "备注",
+      "prop": "remarks",
+      "index": 7,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "库区",
+      "prop": "storageId",
+      "index": 8,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "制单人",
+      "prop": "createUser",
+      "index": 9,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "制单时间",
+      "prop": "createTime",
+      "index": 10,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "更新人",
+      "prop": "updateUser",
+      "index": 11,
+      "width": 100,
+      "overHidden": true
+    },
+    {
+      "label": "更新时间",
+      "prop": "updateTime",
+      "index": 12,
+      "width": 100,
+      "overHidden": true
+    }
+  ]
+}

+ 57 - 0
src/views/workManagement/warehousing/config/mainList.json

@@ -0,0 +1,57 @@
+{
+  "stripe": true,
+  "height": "auto",
+  "searchShow": true,
+  "border": true,
+  "index": true,
+  "viewBtn": false,
+  "editBtn": false,
+  "delBtn": false,
+  "addBtn": false,
+  "align": "center",
+  "menuWidth": "70",
+  "searchIcon": true,
+  "searchIndex": 2,
+  "selection": true,
+  "tip": false,
+  "searchSpan": 8,
+  "showSummary": true,
+  "summaryText": "合计",
+  "sumColumnList": [],
+  "column": [
+    {
+      "label": "库管人",
+      "prop": "createUser",
+      "search": true,
+      "index": 1,
+      "minWidth": 80,
+      "overHidden": true
+    },
+    {
+      "label": "部门",
+      "prop": "a",
+      "overHidden": true,
+      "minWidth": 100,
+      "search": false
+    },
+    {
+      "label": "入库时间",
+      "prop": "createTime",
+      "type": "date",
+      "overHidden": true,
+      "minWidth": 200,
+      "format": "yyyy-MM-dd",
+      "valueFormat": "yyyy-MM-dd",
+      "unlinkPanels": true,
+      "searchRange": true,
+      "search": true
+    },
+    {
+      "label": "系统编号",
+      "prop": "sysNo",
+      "overHidden": true,
+      "minWidth": 120,
+      "search": true
+    }
+  ]
+}

+ 782 - 0
src/views/workManagement/warehousing/detail.vue

@@ -0,0 +1,782 @@
+<template>
+  <div class="borderless" v-loading="pageLoading">
+    <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"
+          :loading="btnLoading"
+        >返回列表</el-button>
+      </div>
+      <div class="add-customer-btn">
+        <el-button
+          type="primary"
+          size="small"
+          class="el-button--small-yh"
+          @click.stop="openEdit"
+        >编 辑</el-button>
+        <el-button
+          type="success"
+          :disabled="!form.id"
+          size="small"
+          @click="copyDoc"
+          :loading="btnLoading"
+        >复制单据</el-button>
+        <el-button
+          type="primary"
+          @click="editCustomer"
+          size="small"
+          :loading="btnLoading"
+        >保存数据</el-button>
+      </div>
+    </div>
+    <div class="customer-main">
+      <containerTitle title="基础信息"/>
+      <basic-container :showBtn="true">
+        <avue-form
+          ref="form"
+          class="trading-form"
+          v-model="form"
+          :option="option"
+        >
+          <template slot="createUser">
+            <el-select
+              v-model="form.createUser"
+              filterable
+              clearable
+              size="small"
+            >
+              <el-option
+                v-for="(item,index) in userList"
+                :key="index"
+                :label="item.realName"
+                :value="item.realName"
+              ></el-option>
+            </el-select>
+          </template>
+          <template slot="deptId">
+            <avue-input-tree
+              leaf-only
+              style="width: 100%;"
+              size="small"
+              :props="{ label: 'title' }"
+              v-model="form.deptId"
+              placeholder=" "
+              type="tree"
+              :dic="dic"
+            ></avue-input-tree>
+          </template>
+        </avue-form>
+      </basic-container>
+      <containerTitle title="商品信息"/>
+      <basic-container>
+        <avue-crud
+          ref="crud"
+          :data="dataList"
+          :option="tableOption"
+          :cell-style="cellStyle"
+          @saveColumn="saveColumn"
+          @resetColumn="resetColumn"
+        >
+          <template slot="menuLeft">
+            <el-button
+              type="primary"
+              icon="el-icon-plus"
+              size="small"
+              @click.stop="newDetails"
+            >录入明细</el-button>
+            <el-button
+              type="info"
+              icon="el-icon-printer"
+              size="small"
+            >报 表</el-button>
+          </template>
+          <template slot="menu" slot-scope="{ row, index }">
+            <el-button
+              size="small"
+              icon="el-icon-edit"
+              type="text"
+              @click="rowCell(row, index)"
+            >{{ row.$cellEdit ? "保存" : "修改" }}</el-button>
+            <el-button
+              size="small"
+              icon="el-icon-delete"
+              type="text"
+              @click="rowDel(row, index)"
+            >删除</el-button>
+          </template>
+          <template slot="code" slot-scope="{ row, index }">
+            <span v-if="row.$cellEdit" style="display:flex">
+              <el-select
+                v-model="row.code"
+                placeholder="请选择"
+                filterable
+                size="small"
+                style="width:60%"
+                @change="codeChange(row, index)"
+              >
+                <el-option
+                  v-for="item in goodsoptions"
+                  :key="item.id"
+                  :label="item.code"
+                  :value="item.code"
+                >
+                </el-option>
+              </el-select>
+              <el-button
+                icon="el-icon-search"
+                size="small"
+                @click="rePick(row, index)"
+              ></el-button>
+            </span>
+            <span v-else> {{ row.code }}</span>
+          </template>
+          <template slot="cname" slot-scope="{ row, index }">
+            <span v-if="row.$cellEdit" style="display:flex">
+              <el-select
+                v-model="row.itemId"
+                placeholder="请选择"
+                size="small"
+                filterable
+                style="width:60%"
+                @change="cnameChange(row, index)"
+              >
+                <el-option
+                  v-for="item in goodsoptions"
+                  :key="item.id"
+                  :label="item.cname"
+                  :value="item.id"
+                >
+                </el-option>
+              </el-select>
+              <el-button
+                icon="el-icon-search"
+                size="small"
+                @click="rePick(row, index)"
+              ></el-button>
+            </span>
+            <span v-else> {{ row.cname }}</span>
+          </template>
+          <template slot="orderQuantity" slot-scope="{ row, index }">
+            <el-input-number
+              v-if="row.$cellEdit"
+              v-model="row.orderQuantity"
+              size="small"
+              :controls="false"
+              :precision="0"
+              @input="amountChange(row)"
+              style="width: 100%"
+            />
+            <span v-else>{{ row.orderQuantity | IntegerFormat }}</span>
+          </template>
+          <template slot="price" slot-scope="{ row, index }">
+            <el-input-number
+              v-if="row.$cellEdit"
+              v-model="row.price"
+              size="small"
+              :controls="false"
+              :precision="2"
+              @input="amountChange(row)"
+              style="width: 100%"
+            ></el-input-number>
+            <span v-else>{{ row.price }}</span>
+          </template>
+          <!--          单位-->
+          <template slot="unit" slot-scope="{ row, index }">
+            <el-select
+              v-if="row.$cellEdit"
+              v-model="row.unit"
+              size="small"
+              clearable
+              filterable
+            >
+              <el-option
+                v-for="(item, index) in unitOption"
+                :key="index"
+                :label="item.dictValue"
+                :value="item.dictValue"
+              />
+            </el-select>
+            <span v-else>{{ row.unit }}</span>
+          </template>
+          <template slot="amount" slot-scope="{ row, index }">
+            <span>{{ row.amount | decimalFormat }}</span>
+          </template>
+          <template slot="storageQuantity" slot-scope="{ row, index }">
+            <span>{{ row.storageQuantity | IntegerFormat }}</span>
+          </template>
+          <template slot="remarks" slot-scope="{ row, index }">
+            <el-input
+              v-if="row.$cellEdit"
+              v-model="row.remarks"
+              size="small"
+            />
+            <span v-else>{{ row.remarks }}</span>
+          </template>
+        </avue-crud>
+      </basic-container>
+    </div>
+
+    <!--    商品弹窗-->
+    <el-dialog
+      title="导入商品"
+      append-to-body
+      class="el-dialogDeep"
+      :visible.sync="dialogVisible"
+      width="80%"
+      :close-on-click-modal="false"
+      :destroy-on-close="true"
+      :close-on-press-escape="false"
+      @close="closeGoods"
+      top="5vh"
+      v-dialog-drag
+    >
+      <span>
+        <el-row>
+          <el-col :span="4">
+            <div>
+              <el-scrollbar>
+                <basic-container>
+                  <avue-tree
+                    :option="treeOption"
+                    @node-click="nodeClick"
+                    :style="treeStyle"
+                  />
+                </basic-container>
+              </el-scrollbar>
+            </div>
+          </el-col>
+          <el-col :span="20">
+            <avue-crud
+              :option="goodsOption"
+              :table-loading="loading"
+              :data="goodsListShow"
+              ref="goodsCrud"
+              :search.sync="search"
+              @search-change="searchChange"
+              @selection-change="selectionChange"
+              @row-click="rowClick"
+              :page.sync="page"
+              @on-load="onLoad"
+              @saveColumn="saveGoodsColumn"
+              @resetColumn="resetGoodsColumn"
+              :cell-style="cellStyle"
+            >
+              <template slot="menuLeft">
+                <el-tabs v-model="activeName" @tab-click="tabHandle">
+                  <el-tab-pane label="查询结果" name="searchList"></el-tab-pane>
+                  <el-tab-pane label="已选定数据" name="importStaging"></el-tab-pane>
+                </el-tabs>
+              </template>
+              <template slot-scope="scope" slot="menu">
+                <el-button
+                  type="text"
+                  icon="el-icon-edit"
+                  size="small"
+                  @click.stop="importStagList(scope.row,scope.index)"
+                  v-if="activeName=='searchList'"
+                  :disabled="goodsListSave.findIndex(item => item.id == scope.row.id) !== -1"
+                >选择
+                </el-button>
+                <el-button
+                  type="text"
+                  icon="el-icon-delete"
+                  size="small"
+                  @click.stop="removeStagList(scope.row,scope.index)"
+                  v-else
+                >移除
+                </el-button>
+              </template>
+            </avue-crud>
+          </el-col>
+        </el-row>
+      </span>
+
+      <span slot="footer" class="dialog-footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button
+          type="primary"
+          @click="importGoods"
+          :disabled="selectionList.length == 0 && goodsListSave.length == 0"
+        >导入</el-button
+        >
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import tableOption from "./config/customerContact.json";
+import goodsOption from "./config/commodity.json";
+import {getDeptLazyTree,
+  getGoods,} from "@/api/basicData/customerInquiry";
+import {
+  isDiscount,
+  isPercentage,
+  micrometerFormat,
+  IntegerFormat
+} from "@/util/validate";
+import { gainUser } from "@/api/basicData/customerInquiry";
+import {getUserInfo} from "@/api/system/user";
+import {getDeptTree} from "@/api/system/dept";
+import { getCurrentDate } from "@/util/date";
+
+export default {
+  name: "detail",
+  data() {
+    return {
+      pageLoading: false,
+      btnLoading: false,
+      form: {},
+      option: {
+        menuBtn: false,
+        labelWidth: 100,
+        column: [
+          {
+            label: "库管人",
+            prop: "createUser",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "部门",
+            prop: "deptId",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "change"
+              }
+            ],
+            span: 8,
+            slot: true,
+          },
+          {
+            label: "入库时间",
+            prop: "b",
+            span: 8,
+            type: "date",
+            format: "yyyy-MM-dd",
+            valueFormat: "yyyy-MM-dd 00:00:00",
+            rules: [
+              {
+                required: true,
+                message: " ",
+                trigger: "blur"
+              }
+            ]
+          },
+          {
+            label: "系统号",
+            prop: "sysNo",
+            span: 8,
+            disabled: true
+          },
+          {
+            label: "备注",
+            prop: "orderRemark",
+            type: "textarea",
+            minRows: 2,
+            span: 24,
+          },
+        ],
+      },
+      dataList: [],
+      tableOption: {},
+      goodsoptions: [],
+      unitOption: [],
+      dialogVisible: false,
+      selectionList: [],
+      treeDeptId: null,
+      reData: null,
+      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: {
+          label: "title",
+          value: "value",
+          children: "children"
+        }
+      },
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      search: {},
+      treeStyle: "height:" + (window.innerHeight - 315) + "px",
+      goodsOption: {},
+      loading: false,
+      goodData: [], // 存储所有商品信息
+      switchDialog: false, // 报表弹窗控制
+      userList: [],
+      activeName: 'searchList',
+      // 商品列表数据合计
+      goodsListShow: [],
+      // 商品列表暂存
+      goodsListSave: [],
+      pageList: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0
+      },
+      dic: [],
+    }
+  },
+  async created() {
+    this.tableOption = await this.getColumnData(
+      this.getColumnName(95),
+      tableOption
+    );
+    this.goodsOption = await this.getColumnData(
+      this.getColumnName(96),
+      goodsOption
+    );
+    getGoods(1, 500).then(res => {
+      this.goodsoptions = res.data.data.records;
+    });
+    gainUser().then(res => {
+      this.userList = res.data.data;
+    });
+    getUserInfo().then(res => {
+      this.$set(this.form, 'createUser', res.data.data.realName);
+      this.$set(this.form, 'deptId', res.data.data.deptId);
+    })
+    getDeptTree().then(res => {
+      this.dic = res.data.data
+    })
+    this.getWorkDicts('unit').then(res => {
+      this.unitOption = res.data.data;
+    })
+    this.$set(this.form, 'b', getCurrentDate()); // 默认当前日期
+  },
+  filters: {
+    IntegerFormat(num) {
+      return IntegerFormat(num);
+    },
+    decimalFormat(num) {
+      return num ? Number(num).toFixed(2) : "0.00";
+    }
+  },
+  methods: {
+    //返回列表
+    backToList() {
+      this.$emit("goBack");
+    },
+    // 编辑按钮触发
+    openEdit() {},
+    // 复制
+    copyDoc() {
+      this.$emit("copyOrder", this.form.id);
+    },
+    //修改提交触发
+    editCustomer(status) {
+      this.$refs["form"].validate((valid, done) => {
+        done();
+        if (valid) {
+          // this.btnLoading = true;
+          // typeSave(this.form).then(res => {
+          //   this.$message({type: "success", message: this.form.id ? "修改成功!" : "新增成功!"});
+          //   this.queryData(res.data.data.id);
+          // }).finally(() => {
+          //   this.btnLoading = false;
+          // })
+        } else {
+          return false
+        }
+      })
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(95),
+        this.tableOption
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.tableOption = tableOption;
+      const inSave = await this.delColumnData(
+        this.getColumnName(95),
+        tableOption
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        //关闭窗口
+        setTimeout(() => {
+          this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        }, 1000);
+      }
+    },
+    //商品明细导入
+    newDetails() {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          this.dialogVisible = !this.dialogVisible;
+        }
+      })
+    },
+    rowCell(row, index) {
+      if (row.$cellEdit == true) {
+        this.$set(row, "$cellEdit", false);
+      } else {
+        this.$set(row, "$cellEdit", true);
+      }
+    },
+    rowDel(row, index) {
+      this.$confirm("确定删除数据?", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        if (row.id) {
+          // removeGoods(row.id).then(res => {
+          //   this.$message({
+          //     type: 'success',
+          //     message: '删除成功!'
+          //   })
+          //   this.dataList.splice(row.$index, 1);
+          // })
+        } else {
+          this.$message({
+            type: "success",
+            message: "删除成功!"
+          });
+          this.dataList.splice(row.$index, 1);
+        }
+      });
+    },
+    codeChange(row) {
+      this.goodsoptions.forEach(async e => {
+        if (e.code == row.code) {
+          row.itemId = e.id;
+          row.cname = e.cname;
+          row.code = e.code;
+          row.corpId = e.corpId;
+          row.corpName = e.corpName;
+          row.unit = e.unit;
+          row.priceCategory = e.goodsTypeName;
+          row.price = e.price;
+        }
+      });
+    },
+    cnameChange(row) {
+      let form = {};
+      this.goodsoptions.forEach(async e => {
+        if (e.id == row.itemId) {
+          row.cname = e.cname;
+          row.code = e.code;
+          row.corpId = e.corpId;
+          row.corpName = e.corpName;
+          row.unit = e.unit;
+          row.priceCategory = e.goodsTypeName;
+          row.price = e.price;
+        }
+      });
+    },
+    rePick(row, index) {
+      this.reData = {
+        ...row,
+        index: index
+      };
+      this.newDetails();
+    },
+    // 商品信息价格计算
+    amountChange(row) {
+      if (!row.orderQuantity) {
+        row.orderQuantity = 0;
+      }
+      if (!row.price) {
+        row.price = 0;
+      }
+      row.amount = Number(row.price) * Number(row.orderQuantity)
+    },
+    closeGoods() {
+      this.selectionList = [];
+      this.treeDeptId = "";
+      this.reData = null;
+      this.activeName = 'searchList';
+      this.goodsListSave = [];
+    },
+    nodeClick(data) {
+      this.treeDeptId = data.id;
+      this.page.currentPage = 1;
+      this.onLoad(this.page);
+    },
+    //商品查询
+    onLoad(page, params = {}) {
+      let obj = this.deepClone(Object.assign(params, this.search));
+      this.loading = true;
+      getGoods(page.currentPage, page.pageSize, this.treeDeptId, obj)
+        .then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.goodsList = data.records;
+          this.pageList.total = data.total;
+          this.goodsListShow = data.records;
+          if (this.page.total) {
+            this.goodsOption.height = window.innerHeight - 350;
+          }
+        })
+        .finally(() => {
+          this.loading = false;
+        });
+    },
+    searchChange(params, done) {
+      this.search = this.deepClone(params);
+      this.onLoad(this.page, params);
+      done();
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+    },
+    rowClick(row) {
+      this.$refs.goodsCrud.toggleSelection([this.goodsList[row.$index]]);
+    },
+    async saveGoodsColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(96),
+        this.goodsOption
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.goodsCrud.doLayout()
+        })
+      }
+    },
+    async resetGoodsColumn() {
+      this.goodsOption = goodsOption;
+      const inSave = await this.delColumnData(
+        this.getColumnName(96),
+        goodsOption
+      );
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.goodsCrud.doLayout()
+        })
+        this.$message.success("重置成功");
+        //关闭窗口
+        setTimeout(() => {
+          this.$refs.goodsCrud.$refs.dialogColumn.columnBox = false;
+        }, 1000);
+      }
+    },
+    // 标签页切换
+    tabHandle(data) {
+      if (data.name == 'searchList') {
+        this.goodsListShow = this.goodsList;
+        this.page.total = this.pageList.total
+      } else if (data.name == 'importStaging') {
+        this.goodsListShow = this.goodsListSave;
+        this.page.total = 0
+      }
+    },
+    removeStagList(row, index) {
+      this.goodsListSave.splice(row.$index, 1)
+    },
+    importStagList(row, index) {
+      this.goodsListSave.push(row);
+    },
+    importGoods() {
+      if (this.reData) {
+        if (this.selectionList.length != 1) {
+          return this.$message.error("重新选择的时候只能选择一条数据");
+        } else {
+          this.selectionList.forEach(e => {
+            this.dataList.forEach(async (item, index) => {
+              if (index == this.reData.index) {
+                item.itemId = e.id;
+                item.code = e.code;
+                item.cname = e.cname;
+                item.corpId = e.corpId;
+                item.corpName = e.corpName;
+                item.unit = e.unit;
+                item.priceCategory = e.goodsTypeName;
+                item.price = e.price;
+                item.$cellEdit = true;
+              }
+            });
+          });
+        }
+      } else {
+        if (this.goodsListSave.length > 0) { // 暂存的有数据
+          this.goodsListSave.forEach(async e => {
+            this.dataList.push({
+              itemId: e.id,
+              code: e.code,
+              cname: e.cname,
+              corpId: e.corpId,
+              corpName: e.corpName,
+              unit: e.unit,
+              price: e.price,
+              amount: 0,
+              orderQuantity: 0,
+              $cellEdit: true
+            });
+          });
+        } else {
+          this.selectionList.forEach(async e => {
+            this.dataList.push({
+              itemId: e.id,
+              code: e.code,
+              cname: e.cname,
+              corpId: e.corpId,
+              corpName: e.corpName,
+              unit: e.unit,
+              amount: 0,
+              orderQuantity: 0,
+              price: e.price,
+              $cellEdit: true
+            });
+          });
+        }
+      }
+      this.dialogVisible = false;
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>

+ 196 - 0
src/views/workManagement/warehousing/index.vue

@@ -0,0 +1,196 @@
+<template>
+  <div>
+    <basic-container v-show="show" class="page-crad">
+      <avue-crud
+        ref="crud"
+        :option="option"
+        :data="dataList"
+        v-model="form"
+        :page.sync="page"
+        :search.sync="search"
+        :table-loading="loading"
+        :cell-style="cellStyle"
+        @selection-change="selectionChange"
+        @search-change="searchChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+        @on-load="onLoad"
+        @search-criteria-switch="searchCriteriaSwitch"
+        @saveColumn="saveColumn"
+        @resetColumn="resetColumn"
+      >
+        <template slot="menuLeft">
+          <el-button
+            type="primary"
+            icon="el-icon-plus"
+            size="small"
+            @click.stop="newAdd()"
+          >创建单据</el-button>
+          <el-button
+            type="success"
+            size="small"
+            icon="el-icon-plus"
+            @click.stop="copyDoc()"
+            :disabled="selection.length != 1"
+          >复制单据</el-button>
+        </template>
+        <template slot-scope="scope" slot="menu">
+          <el-button
+            type="text"
+            icon="el-icon-delete"
+            size="small"
+            @click.stop="rowDel(scope.row, scope.index)"
+            :disabled="scope.row.status == 3"
+          >删除
+          </el-button>
+        </template>
+      </avue-crud>
+    </basic-container>
+    <detail-page
+      @goBack="goBack"
+      @copyOrder="copyOrder"
+      :detailData="detailData"
+      v-if="!show"
+    />
+  </div>
+</template>
+
+<script>
+import option from "./config/mainList.json";
+import detailPage from "./detail";
+
+export default {
+  name: "index",
+  components: {
+    detailPage,
+  },
+  data() {
+    return {
+      option: {},
+      dataList: [],
+      form: {},
+      page: {
+        pageSize: 10,
+        currentPage: 1,
+        total: 0,
+        pageSizes: [10, 50, 100, 200, 300, 400, 500]
+      },
+      search: {},
+      show: true,
+      loading: false,
+      selection: [],
+      detailData: {},
+    }
+  },
+  async created() {
+    this.option = await this.getColumnData(this.getColumnName(97), option);
+  },
+  methods: {
+    searchCriteriaSwitch(type) {
+      if (type){
+        this.option.height =  this.option.height - 90
+      }else {
+        this.option.height =  this.option.height + 90
+      }
+      this.$refs.crud.getTableHeight()
+    },
+    newAdd() {
+      this.show = false;
+    },
+    onLoad(page, params) {
+      // 重置掉展开
+      this.dataList.forEach(item => {
+        this.$refs.crud.toggleRowExpansion(item, false)
+      })
+      let queryParams = Object.assign({}, params, {
+        size: page.pageSize,
+        current: page.currentPage,
+      })
+      // this.loading = true;
+      // getSalesList(queryParams).then(res => {
+      //   this.dataList = res.data.data.records;
+      //   this.page.total = res.data.data.total;
+      //   this.option.height = window.innerHeight - 240;
+      //   this.$nextTick(() => {
+      //     this.$refs.crud.doLayout()
+      //   })
+      // }).finally(() => {
+      //   this.loading = false;
+      // })
+    },
+    async saveColumn() {
+      const inSave = await this.saveColumnData(
+        this.getColumnName(97),
+        this.option
+      );
+      if (inSave) {
+        this.$message.success("保存成功");
+        //关闭窗口
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+      }
+    },
+    async resetColumn() {
+      this.option = option;
+      const inSave = await this.delColumnData(this.getColumnName(97), option);
+      if (inSave) {
+        this.$nextTick(() => {
+          this.$refs.crud.doLayout()
+        })
+        this.$message.success("重置成功");
+        this.$refs.crud.$refs.dialogColumn.columnBox = false;
+      }
+    },
+    //点击搜索按钮触发
+    searchChange(params, done) {
+      this.onLoad(this.page, params);
+      done();
+    },
+    currentChange(val) {
+      this.page.currentPage = val;
+    },
+    sizeChange(val) {
+      this.page.currentPage = 1;
+      this.page.pageSize = val;
+    },
+    refreshChange() {
+      this.onLoad(this.page, this.search);
+    },
+    cellStyle() {
+      return "padding:0;height:40px;";
+    },
+    copyDoc() {},
+    selectionChange(list) {
+      this.selection = list;
+    },
+    goBack() {
+      if (this.$route.query.id) {
+        this.$router.$avueRouter.closeTag(this.$route.fullPath);
+        this.$router.push({
+          path: "/dealer/sales/index"
+        });
+      }
+      this.detailData = this.$options.data().detailData;
+      this.show = true;
+      this.onLoad(this.page, this.search);
+    },
+    copyOrder(id) {
+      this.show = true;
+      this.detailData = {
+        id: id,
+        status: "copy"
+      };
+      this.$nextTick(() => {
+        this.show = false;
+      });
+    },
+  },
+}
+</script>
+
+<style scoped>
+
+</style>