Sfoglia il codice sorgente

Merge branch 'live' into sit

戴艳蓉 3 anni fa
parent
commit
755edc2b9b
67 ha cambiato i file con 5094 aggiunte e 832 eliminazioni
  1. 0 0
      dist/index.html
  2. 0 0
      dist/static/css/app.1ac353d8.css
  3. BIN
      dist/static/css/app.1ac353d8.css.gz
  4. 0 0
      dist/static/css/chunk-140e7b1a.79d4cad9.css
  5. BIN
      dist/static/css/chunk-140e7b1a.79d4cad9.css.gz
  6. 0 0
      dist/static/css/chunk-d22532c8.0ab567e2.css
  7. BIN
      dist/static/css/chunk-d22532c8.0ab567e2.css.gz
  8. 0 0
      dist/static/js/app.afa0f054.js
  9. BIN
      dist/static/js/app.afa0f054.js.gz
  10. 0 0
      dist/static/js/app.d81fb838.js
  11. BIN
      dist/static/js/app.d81fb838.js.gz
  12. 0 0
      dist/static/js/chunk-140e7b1a.9c6f2588.js
  13. BIN
      dist/static/js/chunk-140e7b1a.9c6f2588.js.gz
  14. 0 0
      dist/static/js/chunk-d22532c8.18d0771b.js
  15. BIN
      dist/static/js/chunk-d22532c8.18d0771b.js.gz
  16. 27 0
      src/apis/service/purchaseIn/purchaseOrder/detail.js
  17. 18 0
      src/apis/service/purchaseIn/purchaseOrder/index.js
  18. 2 0
      src/apis/service/purchaseIn/storeManage/index.js
  19. 1 1
      src/apis/service/sellOut/customer/index.js
  20. 10 0
      src/assets/js/btnList.js
  21. 0 0
      src/components/file-upload/index.js
  22. 2 2
      src/components/file-upload/main.vue
  23. 0 0
      src/components/file-upload/文件上传
  24. 90 0
      src/components/search-stock-good-modal copy/columns.js
  25. 2 0
      src/components/search-stock-good-modal copy/index.js
  26. 182 0
      src/components/search-stock-good-modal copy/main.vue
  27. 0 0
      src/components/search-stock-good-modal copy/仓库商品选择
  28. 2 0
      src/components/status-bar/index.js
  29. 105 0
      src/components/status-bar/main.vue
  30. 0 0
      src/components/status-bar/状态条
  31. 36 0
      src/styles/index.scss
  32. 1 1
      src/utils/validate.js
  33. 103 0
      src/views/purchaseIn/purchaseOrder/columns.js
  34. 100 0
      src/views/purchaseIn/purchaseOrder/components/columns-table.js
  35. 86 0
      src/views/purchaseIn/purchaseOrder/components/columns.js
  36. 225 0
      src/views/purchaseIn/purchaseOrder/components/purchase-order-addEdit.vue
  37. 466 0
      src/views/purchaseIn/purchaseOrder/components/purchase-order-addedit-model.vue
  38. 262 0
      src/views/purchaseIn/purchaseOrder/components/purchase-order-in-table.vue
  39. 119 0
      src/views/purchaseIn/purchaseOrder/components/rules.js
  40. 311 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-addEdit-form.vue
  41. 335 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-check-form.vue
  42. 413 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-error-model.vue
  43. 115 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-model.vue
  44. 349 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-record-form.vue
  45. 236 0
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-return-form.vue
  46. 121 0
      src/views/purchaseIn/purchaseOrder/detail.vue
  47. 417 0
      src/views/purchaseIn/purchaseOrder/index.vue
  48. 159 0
      src/views/purchaseIn/purchaseOrder/stockInDetail.vue
  49. 0 0
      src/views/purchaseIn/purchaseOrder/采购单管理
  50. 3 83
      src/views/purchaseIn/storeAnomaly/addEdit.vue
  51. 16 16
      src/views/purchaseIn/storeAnomaly/index.vue
  52. 0 6
      src/views/purchaseIn/storeManage/addModel.vue
  53. 1 1
      src/views/purchaseIn/storeManage/columns.js
  54. 73 49
      src/views/purchaseIn/storeManage/components/addEdit.vue
  55. 269 226
      src/views/purchaseIn/storeManage/components/purchaseBack.vue
  56. 86 127
      src/views/purchaseIn/storeManage/components/rules.js
  57. 95 25
      src/views/purchaseIn/storeManage/detail.vue
  58. 93 44
      src/views/purchaseIn/storeManage/index.vue
  59. 102 24
      src/views/sellOut/customer/index.vue
  60. 12 117
      src/views/sellOut/goodsAnomaly/addEdit.vue
  61. 6 4
      src/views/sellOut/goodsAnomaly/index.vue
  62. 10 85
      src/views/sellOut/goodsBack/addEdit.vue
  63. 6 4
      src/views/sellOut/goodsBack/index.vue
  64. 1 0
      src/views/stock/allot/components/Inspection-table.vue
  65. 5 3
      src/views/stock/allot/components/goStock-audit.vue
  66. 19 7
      src/views/stock/stockWarning/addEdit.vue
  67. 2 7
      src/views/stock/survey/index.vue

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.1ac353d8.css


BIN
dist/static/css/app.79f5acdc.css.gz → dist/static/css/app.1ac353d8.css.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-140e7b1a.79d4cad9.css


BIN
dist/static/css/chunk-140e7b1a.79d4cad9.css.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/chunk-d22532c8.0ab567e2.css


BIN
dist/static/css/chunk-d22532c8.0ab567e2.css.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.afa0f054.js


BIN
dist/static/js/app.afa0f054.js.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.d81fb838.js


BIN
dist/static/js/app.d81fb838.js.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-140e7b1a.9c6f2588.js


BIN
dist/static/js/chunk-140e7b1a.9c6f2588.js.gz


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d22532c8.18d0771b.js


BIN
dist/static/js/chunk-d22532c8.18d0771b.js.gz


+ 27 - 0
src/apis/service/purchaseIn/purchaseOrder/detail.js

@@ -0,0 +1,27 @@
+// 物业管理员
+import http from "@/apis/axios";
+const api = "admin/";
+export default {
+  // 添加
+  add: (data, params) => http(api + "add", data, "post", params),
+  // 删除
+  delete: (data, params) => http(api + "delete", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "cgdinfo", data, "post", params),
+  // 更新
+  update: (data, params) => http(api + "cgdedit", data, "post", params),
+  // 修改状态
+  status: (data, params) => http(api + "cgdstatus", data, "post", params),
+  // 新建入库单
+  orderinadd: (data, params) => http(api + "orderinadd", data, "post", params),
+  // 新建入库单详情
+  orderininfo: (data, params) => http(api + "orderininfo", data, "post", params),
+  // 异常原因列表
+  resultlist: (data, params) => http(api + "resultlist", data, "post", params),
+  // 入库单验货
+  orderincheck: (data, params) => http(api + "orderincheck", data, "post", params),
+  // 入库单退货换货
+  orderinreturn: (data, params) => http(api + "orderinreturn", data, "post", params),
+  // 发货单状态修改
+  orderinstatus: (data, params) => http(api + "orderinstatus", data, "post", params),
+};

+ 18 - 0
src/apis/service/purchaseIn/purchaseOrder/index.js

@@ -0,0 +1,18 @@
+// 物业管理员
+import http from "@/apis/axios";
+const api = "admin/";
+export default {
+  // 添加
+  add: (data, params) => http(api + "add", data, "post", params),
+  // 删除
+  delete: (data, params) => http(api + "delete", data, "post", params),
+  // 分页查询
+  list: (data, params) => http(api + "cgdlist", data, "post", params),
+  // 详情
+  detail: (data, params) => http(api + "detail", data, "post", params),
+  // 更新
+  update: (data, params) => http(api + "update", data, "post", params),
+  // 修改状态
+  status: (data, params) => http(api + "accountstatus", data, "post", params),
+};
+   

+ 2 - 0
src/apis/service/purchaseIn/storeManage/index.js

@@ -18,6 +18,8 @@ export default {
   addFee: (data, params) => http(api + "feedadd", data, "post", params),
   // 备货反馈详情
   feeDetail: (data, params) => http(api + "feedinfo", data, "post", params),
+  // 反馈状态修改
+  feeChange: (data, params) => http(api + "feedchange", data, "post", params),
 
 };
    

+ 1 - 1
src/apis/service/sellOut/customer/index.js

@@ -6,7 +6,7 @@ export default {
   // 删除
   delete: (data, params) => http(api + "resultdel", data, "post", params),
   // 列表
-  list: (data, params) => http(api + "customerlist", data, "post", params),
+  list: (data, params) => http(api + "infolist", data, "post", params),
   // 详情
   detail: (data, params) => http(api + "resultselect", data, "post", params),
   // 更新

+ 10 - 0
src/assets/js/btnList.js

@@ -22,5 +22,15 @@ const btnList = [
   { code: "021", name: "出库方发货" },
   { code: "022", name: "入库方验货" },
   { code: "023", name: "入库方验货审核" },
+  { code: "024", name: "采购反馈" },
+  { code: "025", name: "反馈认同" },
+  { code: "026", name: "同意发货" },
+  { code: "027", name: "取消发货" },
+  { code: "028", name: "新建备货入库单" },
+  { code: "029", name: "备货入库验收" },
+  { code: "030", name: "备货入库验收审核" },
+  { code: "031", name: "入库审核" },
+  { code: "032", name: "退货物流" },
+  
 ];
 export default btnList;

+ 0 - 0
src/components/upload/index.js → src/components/file-upload/index.js


+ 2 - 2
src/components/upload/main.vue → src/components/file-upload/main.vue

@@ -20,7 +20,7 @@ import { getToken } from "@/utils/auth";
 //UploadErrorEvent 上传失败
 
 export default {
-  name: "Upload",
+  name: "fileUpload",
   props: {
     //@reject 默认值
     accept: String, //上传文件类型
@@ -80,7 +80,7 @@ export default {
           form.append("image", files[i]);
           form.append("token", getToken());
           axios
-            .post(`${that.imgAPI}admin/upload`, form)
+            .post(`${that.imgAPI}admin/uploadimg`, form)
             .then((res) => {
               if (res && res.data && res.status === 200 && res.data.data) {
                 const { url, name } = res.data.data[0];

+ 0 - 0
src/components/upload/文件上传 → src/components/file-upload/文件上传


+ 90 - 0
src/components/search-stock-good-modal copy/columns.js

@@ -0,0 +1,90 @@
+export default [
+  { type: "selection", fixed: "left", _noset_: true },
+  {
+    prop: "type_code",
+    label: "商品编码",
+    width: "150",
+  },
+  {
+    prop: "good_name",
+    label: "商品名称",
+    "min-width": "120",
+  },
+
+  {
+    prop: "usable_stock",
+    label: "可用库存",
+    width: "120",
+  },
+  // {
+  //   prop: "gys_code",
+  //   label: "供应商编码",
+  //   width: "142",
+  // },
+  
+  // {
+  //   prop: "supplier_name",
+  //   label: "供货商",
+  //   "min-width": "160",
+  // },
+  // {
+  //   prop: "cg_saler",
+  //   label: "采购员",
+  //   width: "60",
+  // },
+  // {
+  //   prop: "usable_stock",
+  //   label: "商品库存",
+  //   width: "70",
+  // },
+  {
+    prop: "unit",
+    label: "单位",
+    width: "45",
+  },
+  // {
+  //   prop: "bstatus",
+  //   label: "当前状态",
+  //   _slot_: "status",
+  //   width: "80px",
+  // },
+
+
+  // {
+  //   prop: "classArr",
+  //   label: "商品类别",
+  // },
+  {
+    prop: "color",
+    label: "商品颜色",
+    width: "70",
+  },
+  {
+    prop: "material",
+    label: "商品材质",
+    width: "70",
+  },
+  {
+    prop: "brand",
+    label: "品牌",
+    "width": "70",
+  },
+  // {
+  //   prop: "good_type",
+  //   label: "商品类型",
+  // },
+  // {后端有接口但是没有值。
+  //   prop: "specs",
+  //   label: "商品规格",
+  // },
+
+  // {
+  //   prop: "",
+  //   label: "操作",
+  //   width: "80px",
+  //   fixed: "right",
+  //   _noset_: true,
+  //   _slot_: "operation",
+  // },
+
+]

+ 2 - 0
src/components/search-stock-good-modal copy/index.js

@@ -0,0 +1,2 @@
+import Main from './main.vue'
+export default Main

+ 182 - 0
src/components/search-stock-good-modal copy/main.vue

@@ -0,0 +1,182 @@
+<template>
+  <el-dialog
+    :title="'仓库商品选择'"
+    :center="true"
+    align="left"
+    top="8vh"
+    width="1040px"
+    @close="closeModel"
+    :close-on-click-modal="false"
+    :visible.sync="showModelThis"
+    v-loading="loading"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+    append-to-body
+  >
+    <el-card style="margin-top: -20px" class="modal-form-style">
+      <ex-table
+        v-loading="loading"
+        :table="table"
+        :data="tableData"
+        :columns="columns"
+        :page="pageInfo"
+        :size="size"
+        @page-curr-change="handlePageChange"
+        @page-size-change="handleSizeChange"
+        @screen-reset="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+        @screen-submit="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+      >
+        <template #table-header="{ selection }">
+          <div style="width: 100%">
+            <el-row style="margin-top: -15px">
+              <el-col :span="3" style="width: 66px; float: right">
+                <el-button
+                  :size="searchSize"
+                  type="success"
+                  style="float: right; margin-left: 5px"
+                  @click="resultList(selection)"
+                >
+                  保存
+                </el-button>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+      </ex-table>
+    </el-card>
+  </el-dialog>
+</template>
+
+<script>
+import asyncRequest from "@/apis/components/search-stock-good-modal";
+import resToken from "@/mixins/resToken";
+import mixinPage from "@/mixins/elPaginationHandle";
+import { mapGetters } from "vuex";
+import columns from "./columns";
+export default {
+  name: "searchStockGoodModal",
+  mixins: [resToken, mixinPage],
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+  },
+  props: ["showModel", "once", "code"],
+
+  /**
+   * 属性集合
+   * @param {Boolean}       showModel             : 是否弹出弹窗        必填
+   * @param {Boolean}       once                  : 是否只选一条        非必填
+   * @param {Boolean}       code                  : 仓库CODE           非必填
+   */
+  /**
+   * 事件集合
+   * @searchChange             : 选中值变化调用   抛出选中数据
+   */
+  data() {
+    return {
+      options: [],
+      selectLoading: false,
+      loading: true,
+      showModelThis: false,
+      parmValue: {
+        wsm_code: "", //仓库code
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      },
+      tableData: [],
+      passwordModel: false,
+      passwordModelId: 0,
+      isPasswordDetail: false,
+      // 表格 - 数据
+      tableData: [],
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        // _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: columns,
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+      if (val) {
+        this.supplierCode = [];
+        this.searchList();
+      }
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+    restSearch() {
+      this.parmValue = {
+        wsm_code: "", //仓库code
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      };
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.searchList();
+    },
+    async searchList() {
+      this.loading = true;
+      this.parmValue.wsm_code = this.code || "";
+      const res = await asyncRequest.list(this.parmValue);
+      if (res && res.code === 0 && res.data) {
+        this.tableData = res.data.list;
+        this.pageInfo.total = Number(res.data.count);
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.tableData = [];
+        this.pageInfo.total = 0;
+      }
+      this.loading = false;
+    },
+    async resultList(selection) {
+      if (selection && selection.length > 1 && this.once) {
+        this.$message.warning("只能选择一条商品信息!");
+        return;
+      }
+      let list=JSON.parse(JSON.stringify(selection))
+      list.map(v=>{
+        delete v['id']
+        return v
+      })
+      this.showModelThis = false;
+      this.$emit("searchChange", list);
+    },
+  },
+};
+</script>
+
+<style>
+</style>

+ 0 - 0
src/components/search-stock-good-modal copy/仓库商品选择


+ 2 - 0
src/components/status-bar/index.js

@@ -0,0 +1,2 @@
+import Main from './main.vue'
+export default Main

+ 105 - 0
src/components/status-bar/main.vue

@@ -0,0 +1,105 @@
+<template>
+  <div class="statusBar">
+    <el-steps
+      v-if="options && options.length > 0"
+      direction="vertical"
+      :active="options.length"
+      :space="100"
+      :finish-status="finishStatus"
+      :process-status="finishStatus"
+    >
+      <el-step
+        icon="el-icon-success"
+        v-for="item in options"
+        :key="item.title"
+        :finish-status="finishStatus"
+        :process-status="finishStatus"
+        style="margin: 0 0 0 100px; position: relative"
+      >
+        <div
+          slot="title"
+          style="
+            position: absolute;
+            width: 92px;
+            left: -100px;
+            text-align: right;
+          "
+        >
+          {{ item.title }}
+        </div>
+        <div slot="description">
+          <p class="name">
+            {{ item.desc && item.desc.name ? item.desc.name : "" }}
+          </p>
+          <p class="item">
+            {{ item.desc && item.desc.item ? item.desc.item : "" }}
+          </p>
+          <p class="time">
+            {{ item.desc && item.desc.time ? item.desc.time : "" }}
+          </p>
+        </div>
+      </el-step>
+    </el-steps>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "statusBar",
+   props: ["options"],
+
+  /**
+   * 属性集合
+   * @param {Boolean}       showModel             : 是否弹出弹窗        必填
+   * @param {Boolean}       once                  : 是否只选一条        非必填
+   * @param {Boolean}       code                  : 仓库CODE           非必填
+   */
+  /**
+   * 事件集合
+   * @searchChange             : 选中值变化调用   抛出选中数据
+   */
+  data() {
+    return {
+    };
+  },
+  methods: {
+  
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.noAuth {
+  width: 800px;
+  max-width: 100%;
+  margin: 100px auto;
+  text-align: left;
+  .pan-back-btn {
+    background: #008489;
+    color: #fff;
+    border: none !important;
+  }
+  .pan-gif {
+    margin: 0 auto;
+    display: block;
+  }
+  .pan-img {
+    display: block;
+    margin: 0 auto;
+    width: 100%;
+  }
+  .text-jumbo {
+    font-size: 60px;
+    font-weight: 700;
+    color: #484848;
+    padding-top: 45px;
+  }
+  .list-unstyled {
+    padding: 0 0 0 4px;
+    font-size: 14px;
+    li {
+      line-height: 30px;
+    }
+  }
+}
+</style>

+ 0 - 0
src/components/status-bar/状态条


+ 36 - 0
src/styles/index.scss

@@ -537,4 +537,40 @@ aside {
       }
     }
   }
+}
+
+.statusBar {
+  .el-step__head.is-finish {
+    color: #e8e8e8 !important;
+      border-color: #e8e8e8 !important;
+      .el-step__line{
+        background: #e8e8e8!important;
+      }
+    .el-step__line-inner{
+      background: #e8e8e8!important;
+    }
+    .el-step__icon.is-icon {
+      color: #30b08f !important;
+      border-color: #30b08f !important;
+    }
+    // background: #e8e8e8!important;
+  }
+  .el-step__main{
+  
+   .el-step__title.is-finish{
+     color: rgba(0,0,0,.85)!important;
+     font-size: 16px!important;
+
+   } 
+   .el-step__description.is-finish{
+.name,.item,.time{
+  line-height: 23px!important;
+  color: rgba(0,0,0,.85)!important;
+}
+.time{
+  color: rgba(0,0,0,.45)!important;
+}
+   }
+   
+  }
 }

+ 1 - 1
src/utils/validate.js

@@ -192,7 +192,7 @@ export function isnumber(s) {
  * @param {*} s
  */
  export function isnumber2(s) {
-  return /^(([^0][0-9]+|0)\.([0-9]{1,2}))$/.test(s)
+  return /^[1-9][0-9]*([\.][0-9]{1,2})?$/.test(s)
 }
 /**
  * 数字字母

+ 103 - 0
src/views/purchaseIn/purchaseOrder/columns.js

@@ -0,0 +1,103 @@
+export default [
+  {
+    type: "expand",
+    _slot_: "expand",
+    fixed: "left",
+    _noset_: true,
+  },
+  {
+    prop: "cgdNo",
+    label: "采购单编号",
+    width: "155px",
+  },
+  {
+    prop: "bkcode",
+    label: "备库单编号",
+    width: "155px",
+  },
+  {
+    prop: "supplierNo",
+    label: "采购供应商编号",
+    width: "145px",
+  },
+  {
+    prop: "supplier_name",
+    label: "采购供应商名称",
+    width: "155px",
+  },
+  {
+    prop: "wsm_supplierNo",
+    label: "仓库公司编号",
+    width: "145px",
+  },
+  {
+    prop: "wsm_supplier",
+    label: "仓库公司名称",
+    width: "155px",
+  },
+  {
+    prop: "wsm_code",
+    label: "仓库编号",
+    width: "172px",
+  },
+  {
+    prop: "wsm_name",
+    label: "仓库名称",
+    width: "80px",
+  },
+  {
+    prop: "cgder",
+    label: "采购员",
+    width: "60px",
+  },
+  {
+    prop: "good_price",
+    label: "单价",
+    width: "110px",
+  },
+  {
+    prop: "good_num",
+    label: "数量",
+    width: "110px",
+  },
+  {
+    prop: "total_fee",
+    label: "总货款",
+    width: "120px",
+  },
+  {
+    prop: "send_num",
+    label: "已发货数量",
+    width: "110px",
+  },
+  {
+    prop: "wsend_num",
+    label: "未发货数量",
+    width: "110px",
+  },
+  {
+    prop: "status",
+    label: "状态",
+    _slot_: "status",
+    width: "80px",
+  },
+  {
+    prop: "lasttime",
+    label: "预计最晚入库时间",
+    width: "145px",
+  },
+
+  {
+    prop: "addtime",
+    label: "创建时间",
+    width: "145px",
+  },
+  {
+    prop: "",
+    label: "操作",
+    fixed: "right",
+    _noset_: true,
+    width: "50px",
+    _slot_: "operation",
+  },
+]

+ 100 - 0
src/views/purchaseIn/purchaseOrder/components/columns-table.js

@@ -0,0 +1,100 @@
+
+export default {
+  tableFormThis: {
+    post_company: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+    post_code: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+    post_fee: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+    sendtime: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+    send_num: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+    status: [
+      {
+        required: false,
+        message: "",
+        trigger: "change",
+      },
+    ],
+    error_remark: [
+      {
+        required: false,
+        message: "",
+        trigger: "blur",
+      },
+    ],
+  },
+
+  columns: [
+    // 表格 - 列参数
+    {
+      prop: "post_company",
+      label: "快递公司",
+      width: "125",
+      show: true,
+      type: "text"
+    },
+    {
+      prop: "post_code",
+      label: "快递单号",
+      minWidth: "180",
+      show: true,
+      type: "text"
+    },
+    {
+      prop: "post_fee",
+      label: "快递费用",
+      width: "100",
+      show: true,
+      type: "text"
+    },
+    {
+      prop: "sendtime",
+      label: "发货时间",
+      width: "145",
+      show: true,
+      type: "text"
+    },
+    {
+      prop: "send_num",
+      label: "发货数量",
+      width: "110",
+      show: true,
+      type: "text"
+    },
+    {
+      prop: "status",
+      label: "发货状态",
+      width: "100",
+      show: true,
+      type: "text"
+    },
+  ]
+}

+ 86 - 0
src/views/purchaseIn/purchaseOrder/components/columns.js

@@ -0,0 +1,86 @@
+export default  [
+
+    {
+      prop: "cgdNo",
+      label: "采购单编号",
+      // _noset_: true,
+    },
+    {
+      prop: "bkcode",
+      label: "备库单编号",
+      // _noset_: true,
+    },
+    {
+      prop: "cgder",
+      label: "申请人",
+    },
+    {
+      prop: "good_code",
+      label: "商品编号",
+    },
+    {
+      prop: "good_type_code",
+      label: "商品属性编号",
+    },
+    {
+      prop: "good_name",
+      label: "商品名称",
+    },
+    {
+      prop: "wsm_supplierNo",
+      label: "仓库供应商编号",
+    },
+    {
+      prop: "wsm_supplier",
+      label: "仓库供应商名称",
+    },
+    {
+      prop: "wsm_code",
+      label: "仓库编号",
+    },
+    {
+      prop: "wsm_name",
+      label: "仓库名称",
+    },
+
+    {
+      prop: "send_status",
+      label: "发货状态",
+    },
+    {
+      prop: "status",
+      label: "状态",
+      _slot_: "status",
+    },
+    {
+      prop: "addtime",
+      label: "创建时间",
+    },
+    {
+      prop: "good_price",
+      label: "单价",
+    },
+    {
+      prop: "good_num",
+      label: "数量",
+    },
+    {
+      prop: "total_fee",
+      label: "总货款",
+    },
+
+    {
+      prop: "send_num",
+      label: "已发货数量",
+    },
+    {
+      prop: "wsend_num",
+      label: "未发货数量",
+    },
+
+    {
+      prop: "lasttime",
+      label: "预计最晚入库时间",
+    },
+  ]
+  

+ 225 - 0
src/views/purchaseIn/purchaseOrder/components/purchase-order-addEdit.vue

@@ -0,0 +1,225 @@
+<template>
+  <div>
+    <div class="tr" style="padding: 10px 0">
+      <el-button
+        type="primary"
+        :size="'mini'"
+        @click="addForm"
+        v-if="status === '0' && powers.some((item) => item == '007')"
+        >修改
+      </el-button>
+      <el-button
+        type="primary"
+        plain
+        :size="'mini'"
+        @click="statusConfirm('1', '开始发货')"
+        v-if="status === '0' && powers.some((item) => item == '026')"
+        >开始发货
+      </el-button>
+
+      <el-button
+        @click="statusConfirm('0', '取消发货')"
+        plain
+        :size="'mini'"
+        v-if="status === '1' && powers.some((item) => item == '027')"
+        >取消发货</el-button
+      >
+      <el-button
+        @click="statusConfirm('-1', '作废该条信息')"
+        type="danger"
+        plain
+        :size="'mini'"
+        v-if="
+          status !== '' &&
+          status !== '5' &&
+          powers.some((item) => item == '015')
+        "
+        >作废该条信息</el-button
+      >
+    </div>
+
+    <el-row class="purchaseOrderDetail-addForm">
+      <el-col
+        :span="12"
+        class="purchaseOrderDetail-addForm-el-col"
+        v-for="(colu, index) in columns"
+        :key="colu + index"
+      >
+        <div class="label">{{ colu.label }}:</div>
+        <div class="name">{{ sitem[colu.prop] }}</div>
+      </el-col>
+    </el-row>
+    <purchase-order-addedit-model
+      :id="modelId"
+      :show-model="showModel"
+      :sitem="detailSitem"
+      @refresh="refresh"
+      @cancel="showModel = false"
+    />
+  </div>
+</template>
+   <script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import purchaseOrderAddeditModel from "./purchase-order-addedit-model.vue";
+import columns from "./columns";
+export default {
+  name: "addEdit",
+  props: ["id", "sitem", "newTime"],
+  mixins: [resToken],
+  components: { purchaseOrderAddeditModel },
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    return {
+      columns: columns,
+      status: "",
+      loading: false,
+
+      isDisabled: false,
+      detailSitem: null,
+      loading: false,
+      modelId: "",
+      sitem: null,
+      showModel: false,
+      isDetail: false,
+      modelId: 0,
+    };
+  },
+  created() {
+    this.initForm();
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+    addForm() {
+      this.detailSitem = this.sitem;
+      this.modelId = this.id;
+      this.showModel = true;
+    },
+
+    async initForm() {
+      this.loading = true;
+      if (this.id === "add") {
+        this.status = "";
+      } else {
+        const { status } = this.sitem;
+        this.status = status || "";
+      }
+      this.loading = false;
+    },
+    refresh() {
+      this.showModelThis = false;
+      this.$emit("refresh");
+    },
+
+    async statusConfirm(status, message) {
+      await this.$confirm(`确定要${message}?`, {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          if (status === "-1") {
+            await this.deleteById(message);
+          } else {
+            await this.setStatus(status, message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+    },
+
+    async deleteById(message) {
+      const res = await asyncRequest.delete({ id: this.queryId });
+      if (res && res.code === 0) {
+        this.$notify.success({
+          title: message + "成功!",
+          message: "",
+        });
+
+        this.routeGoto("check", {});
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+
+    async setStatus(status, message, remark) {
+      let model = {
+        cgdNo: this.sitem.cgdNo,
+        remark: remark || "",
+        status: status,
+      };
+      const res = await asyncRequest.status(model);
+      this.loading = false;
+      if (res && res.code === 0) {
+        this.$notify.success({
+          title: message + "成功!",
+          message: "",
+        });
+        this.refresh();
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.purchaseOrderDetail-addForm {
+  border-top: 1px solid #ebeef5 !important;
+  border-left: 1px solid #ebeef5 !important;
+  .purchaseOrderDetail-addForm-el-col {
+    display: flex;
+    align-items: stretch;
+    //
+    border-right: 1px solid #ebeef5 !important;
+    .label {
+      width: 145px;
+      line-height: 40px;
+      text-align: right;
+      background: #fafafa !important;
+      font-weight: 400 !important;
+      color: #909399 !important;
+      font-size: 12px !important;
+      border-bottom: 1px solid #ebeef5 !important;
+      border-right: 1px solid #ebeef5 !important;
+    }
+    .name {
+      width: calc(100% - 145px);
+      text-align: left;
+      line-height: 40px;
+      font-size: 12px !important;
+      border-bottom: 1px solid #ebeef5 !important;
+      padding: 0 0 0 12px !important;
+      color: #606266 !important;
+    }
+  }
+}
+</style>
+   

+ 466 - 0
src/views/purchaseIn/purchaseOrder/components/purchase-order-addedit-model.vue

@@ -0,0 +1,466 @@
+<template>
+  <el-dialog
+    v-loading="loading"
+    :title="title"
+    :center="true"
+    align="left"
+    top="10vh"
+    width="1040px"
+    :close-on-click-modal="false"
+    :visible.sync="showModelThis"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+    @close="closeModel"
+  >
+    <el-card style="margin-top: -20px" class="account">
+      <el-row :gutter="10">
+        <el-col :span="24">
+          <el-form
+            :model="ruleForm"
+            :rules="rules"
+            status-icon
+            ref="ruleForm"
+            label-width="110px"
+            class="demo-ruleForm"
+          >
+            <el-row>
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item label="采购供应商" prop="supplierNo">
+                    <search-supplier
+                      :disabled="isDisabled"
+                      :value="ruleForm.supplierNo"
+                      :placeholder="'请选择供应商'"
+                      :is-detail="true"
+                      :names="supplierName"
+                      @searchChange="selectSupplier"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item label="预计入库时间" prop="expecttime">
+                    <el-date-picker
+                      :disabled="isDisabled"
+                      v-model="ruleForm.expecttime"
+                      type="datetime"
+                      style="width: 100%"
+                      value-format="yyyy-MM-dd HH:mm:ss"
+                      placeholder="选择日期"
+                      :picker-options="pickerOptions"
+                      @change="selectTime"
+                    >
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-row>
+                <el-col :span="8">
+                  <el-form-item label="实时金价" prop="now_god_price">
+                    <el-input
+                      placeholder="0"
+                      disabled
+                      v-model="ruleForm.now_god_price"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="采购数量" prop="good_num">
+                    <el-input
+                      placeholder="0"
+                      disabled
+                      v-model="ruleForm.good_num"
+                      maxlength="100"
+                    />
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="商品重量" prop="weight">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.weight"
+                      maxlength="100"
+                    >
+                      <template slot="append">g</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="工艺费" prop="teach_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.teach_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="包装费" prop="pakge_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.pakge_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="加标费" prop="mark_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.mark_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="证书费" prop="cert_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.cert_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="物流费" prop="delivery_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.delivery_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="开模费" prop="open_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.open_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+
+                <el-col :span="8">
+                  <el-form-item label="工差重量" prop="diff_weight">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.diff_weight"
+                      maxlength="100"
+                    >
+                      <template slot="append">g</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8">
+                  <el-form-item label="工差金额" prop="diff_fee">
+                    <el-input
+                      placeholder="0"
+                      v-model="ruleForm.diff_fee"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="8" v-if="!isDisabled">
+                  <el-form-item label="裸价" prop="nake_fee">
+                    <el-input
+                      v-model="ruleForm.nake_fee"
+                      placeholder="0"
+                      maxlength="100"
+                    >
+                      <template slot="append">元</template>
+                    </el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="24"
+                  ><el-form-item label="备注" prop="remark">
+                    <el-input
+                      :disabled="isDisabled"
+                      type="textarea"
+                      maxlength="250"
+                      :autosize="{ minRows: 2, maxRows: 4 }"
+                      v-model="ruleForm.remark"
+                    /> </el-form-item
+                ></el-col>
+              </el-row>
+
+              <el-col :span="19" class="gongshi">
+                <el-row>
+                  <el-col :span="24">
+                    <span class="tuan chu">
+                      <span>开模费</span>
+                      <span>采购数量</span>
+                    </span>
+                    <span class="icon-span">+</span>
+                    <span class="tuan cheng"
+                      ><span class="name">商品重量(g)</span
+                      ><span class="icon-span">×</span>
+                      <span class="name">实时金价</span></span
+                    >
+                    <span class="icon-span">+</span>
+                    <span class="tuan cheng">
+                      <span class="name">工艺费</span
+                      ><span class="icon-span">×</span>
+                      <span class="name">商品重量(g)</span>
+                    </span>
+                    <span class="icon-span">+</span>
+                    <span class="label">包装费</span
+                    ><span class="icon-span">+</span>
+                    <span class="label">裸价</span
+                    ><span class="icon-span">+</span>
+                    <span class="label">加标费</span
+                    ><span class="icon-span">+</span>
+                    <span class="label">证书费</span>
+                    <span class="icon-span">+</span>
+                    <span class="label">物流费</span
+                    ><span class="icon-span">=</span>
+                  </el-col>
+                  <el-col :span="24">
+                    <span class="label">参考商品单价:</span>
+                    <span class="good_price">{{ good_price }}</span>
+                  </el-col>
+                </el-row>
+              </el-col>
+              <el-col :span="5" style="text-align: right">
+                <el-button type="primary" @click="submitForm">保 存 </el-button>
+                <el-button @click="showModelThis = false">关 闭</el-button>
+              </el-col>
+            </el-row>
+          </el-form>
+        </el-col>
+      </el-row>
+    </el-card>
+  </el-dialog>
+</template>
+<script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import rules from "./rules";
+export default {
+  name: "Account",
+  props: ["showModel", "id", "sitem"],
+  mixins: [resToken],
+  data() {
+    return {
+      roleList: [],
+      loading: false,
+      title: "修改采购反馈",
+      organizeList: [],
+      showModelThis: this.showModel,
+      rulesThis: this.rules,
+      supplierName: "",
+      good_price: "0",
+      lasttime: "",
+      ruleForm: {
+        nake_fee: "", //裸价
+        wsm_code: "", //仓库
+        supplier_code: "", //供应商
+        supplierNo: [], //采购供应商编码
+        good_num: "",
+        expecttime: "",
+        weight: "",
+        now_god_price: "",
+        teach_fee: "",
+        pakge_fee: "",
+        mark_fee: "",
+        cert_fee: "",
+        delivery_fee: "",
+        open_fee: "",
+        diff_weight: "",
+        diff_fee: "",
+        remark: "",
+      },
+      rules: rules,
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+      if (val) {
+        this.initForm();
+      }
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+
+    async initForm() {
+      this.loading = true;
+      this.rulesThis = this.rules;
+      await this.resetForm();
+      this.loading = false;
+    },
+    // 选择供应商
+    selectSupplier(e) {
+      if (e && e.id) {
+        this.ruleForm.supplierNo = [e.code];
+      } else {
+        this.ruleForm.supplierNo = [];
+        this.ruleForm.stock_code = [];
+      }
+      this.$refs.ruleForm.validateField("supplierNo ");
+    },
+    //初始化表单
+    async resetForm() {
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          const {
+            good_price,
+            nake_fee,
+            wsm_code,
+            supplierNo,
+            weight,
+            now_god_price,
+            teach_fee,
+            pakge_fee,
+            mark_fee,
+            cert_fee,
+            delivery_fee,
+            open_fee,
+            diff_weight,
+            diff_fee,
+            remark,
+            good_num,
+            supplier_name,
+            lasttime,
+          } = this.sitem;
+          this.good_price = good_price || "0";
+          this.supplierName = supplier_name;
+          this.lasttime = lasttime || "";
+          this.ruleForm = {
+            cgdNo: this.id,
+            nake_fee: nake_fee || "0", //裸价
+            wsm_code: wsm_code || "", //仓库
+            cgder_id: "",
+            supplierNo: supplierNo ? [supplierNo] : [], //采购供应商
+            good_num: good_num || "0",
+            expecttime: lasttime || "", //预计入库时间
+            weight: weight ? parseInt(weight + "") + "" : "0", //贵金属重量
+            now_god_price: now_god_price || "10", //实时金价
+            teach_fee: teach_fee || "0", //工艺费
+            pakge_fee: pakge_fee || "0", //包装费
+            mark_fee: mark_fee || "0", //加标费
+            cert_fee: cert_fee || "0", //证书费
+            delivery_fee: delivery_fee || "0", //物流费
+            open_fee: open_fee || "0", //开模费
+            diff_weight: diff_weight ? parseInt(diff_weight + "") + "" : "0", //工差重量
+            diff_fee: diff_fee || "0", //工差金额
+            remark: remark,
+            good_price: "",
+          };
+        }
+      });
+    },
+    // 保存更改
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+          item.supplierNo = item.supplierNo.toString();
+
+          console.log(item);
+
+          const res = await asyncRequest.update(item);
+          this.loading = false;
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "添加成功",
+              message: "",
+            });
+            this.showModelThis = false;
+            this.$emit("refresh"); //抛出事件给详情页。
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.account {
+  .gongshi {
+    span {
+      vertical-align: top;
+      display: inline-block;
+      color: #000;
+    }
+    .icon-span {
+      padding: 0 5px;
+      height: 40px;
+      line-height: 40px;
+      font-size: 20px;
+      color: #606266;
+      display: inline-block;
+      // vertical-align: top;
+      // display: inline-block;
+    }
+    .label {
+      height: 40px;
+      line-height: 40px;
+    }
+    .tuan {
+      &.chu {
+        width: 60px;
+        height: 40px;
+        display: inline-block;
+        span {
+          width: 60px;
+          display: inline-block;
+          line-height: 20px;
+          text-align: center;
+          font-size: 12px;
+          height: 20px;
+          &:last-child {
+            border-top: 1px solid #606266;
+          }
+        }
+      }
+      &.cheng {
+        .name {
+          height: 40px;
+          line-height: 40px;
+        }
+        .icon-span {
+          line-height: 40px;
+          font-size: 16px;
+          padding: 0 1px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 262 - 0
src/views/purchaseIn/purchaseOrder/components/purchase-order-in-table.vue

@@ -0,0 +1,262 @@
+<template>
+  <el-row class="addForm">
+    <el-col :span="24">
+      <el-form
+        :model="tableForm"
+        :rules="tableFormThis"
+        ref="tableForm"
+        :size="'mini'"
+        class="demo-tableForm product_go"
+      >
+        <el-table
+          :data="tableForm.product_go"
+          border
+          :size="'mini'"
+          row-key="key"
+        >
+          <template v-for="(item, index) in columns">
+            <el-table-column
+              :prop="item.prop"
+              show-overflow-tooltip
+              :label="item.label"
+              :width="item.width"
+              :min-width="item.minWidth"
+              :key="item.prop + index"
+            />
+          </template>
+
+          <el-table-column fixed="right" width="80">
+            <template slot="header" slot-scope="scope">
+              <span>操作</span>
+              <el-tooltip  class="fr" style="margin:3px 0 0 0;"
+                v-if="
+                  (status === '1' && powers.some((item) => item == '028')) ||
+                  (status === '2' && powers.some((item) => item == '028'))
+                "
+                effect="dark"
+                content="添加"
+                placement="top"
+              >
+                <i
+                  class="el-icon-circle-plus-outline tb-icon"
+                  style="color:#63cbe7"
+                  @click="openModal('add', '028')"
+                ></i>
+              </el-tooltip>
+            </template>
+            <template slot-scope="scope">
+              <el-tooltip
+                v-if="powers.some((item) => item == '007')"
+                effect="dark"
+                content="详情"
+                placement="top"
+              >
+                <i
+                  class="el-icon-view tb-icon"
+                  @click="
+                    routeGoto('stockInDetail', { id: scope.row.wsm_in_code })
+                  "
+                ></i>
+              </el-tooltip>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-form>
+      <wsm-in-order-model
+        :id="modelId"
+        :show-model="showModel"
+        :btn_code="btn_code"
+        :modelSitem="modelSitem"
+        @refresh="(showModel = false), $emit('refresh')"
+        @cancel="showModel = false"
+      />
+    </el-col>
+  </el-row>
+</template>
+   <script>
+import asyncRequest from "@/apis/service/stock/allot/detail";
+import resToken from "@/mixins/resToken";
+import config from "./columns-table"; //表格列参数
+import wsmInOrderModel from "./wsm-in-order-model.vue";
+export default {
+  name: "allot",
+  props: ["id", "sitem", "newTime"],
+  mixins: [resToken],
+  components: { wsmInOrderModel },
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    return {
+      showModel: false,
+      isDetail: false,
+      modelId: 0,
+      options: [],
+      status: "",
+      loading: false,
+      modelSitem: null,
+      wsm_in_code: "",
+      tableForm: {
+        product_go: [], //出库商品
+      },
+      tableFormThis: config.tableFormThis,
+      columns: config.columns,
+    };
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  mounted() {
+    this.initForm();
+  },
+  methods: {
+    async initForm() {
+      this.loading = true;
+      this.modelSitem = null;
+      await this.resetForm();
+      this.loading = false;
+    },
+    async resetForm() {
+      // 重置
+      await this.$nextTick(() => {
+        if (this.$refs.tableForm) {
+          this.$refs.tableForm.resetFields();
+          this.$refs.tableForm.clearValidate();
+          const { status, child } = this.sitem;
+          this.status = status;
+          this.tableForm.product_go = child || [];
+        }
+      });
+    },
+    openModal(code, btn_code) {
+      this.btn_code = btn_code;
+      this.modelId = code;
+      const {
+        wsm_contactor,
+        wsm_mobile,
+        wsm_addr,
+        addr_code,
+        wsend_num,
+        cgdNo,
+        wsm_code,
+      } = this.sitem;
+      this.modelSitem = {
+        wsm_contactor,
+        wsm_mobile,
+        wsm_addr,
+        addr_code,
+        cgdNo,
+        wsm_code,
+        wsend_num,
+      };
+      this.showModel = true;
+    },
+    async submitForm() {
+      let good = [];
+      this.loading = true;
+      good = this.getGoodList();
+      const model = {
+        allot_code: this.sitem.allot_code,
+        good: good,
+      };
+      let res = {};
+      if (this.status == "3") {
+        res = await asyncRequest.allotgetin(model);
+      } else {
+        res = await asyncRequest.allotvesio(model);
+      }
+
+      this.loading = false;
+      if (res && res.code === 0) {
+        this.$notify.success({
+          title:
+            this.status == "3"
+              ? "入库方验货结果提交成功!"
+              : "入库方验货审核结果提交成功",
+          message: "",
+        });
+
+        this.$emit("refresh");
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+    //提交表单前 商品信息list 汇总
+    getGoodList() {
+      let oldList = JSON.parse(JSON.stringify(this.tableForm.product_go)),
+        resList = [];
+      oldList.forEach((v1) => {
+        let goodModel = {
+          good_code: v1.type_code,
+          usable_num: v1.usable_stock,
+          error_num: v1.error_num,
+          error_remark: v1.error_remark,
+          error_code: v1.error_code,
+        };
+        if (this.status === "4") {
+          goodModel.stock_num = v1.stock_num;
+        }
+
+        resList.push(goodModel);
+      });
+      return resList;
+    },
+  },
+};
+</script>
+
+
+<style lang="scss" scoped>
+.allot,
+.allotDetail {
+  .label-title-model {
+    line-height: 30px;
+    width: 100%;
+    color: #909399;
+    font-weight: bold;
+    font-size: 15px;
+    padding-bottom: 12px;
+    text-align: center;
+  }
+  .product_go {
+    .el-form-item--mini.el-form-item {
+      margin: 0 !important;
+      .spscope {
+        word-break: break-all !important;
+        line-height: 23px !important;
+        padding: 0 !important;
+        margin: 0 !important;
+        list-style: none !important;
+        font-style: normal !important;
+        text-decoration: none !important;
+        border: none !important;
+        display: inline-block !important;
+        font-weight: 500 !important;
+        font-family: "Microsoft Yahei", sans-serif !important;
+        -webkit-tap-highlight-color: transparent !important;
+        -webkit-font-smoothing: antialiased !important;
+        color: #606266 !important;
+        font-size: 12px !important;
+      }
+    }
+  }
+}
+</style>
+
+   

+ 119 - 0
src/views/purchaseIn/purchaseOrder/components/rules.js

@@ -0,0 +1,119 @@
+import {
+    isnumber,
+    isnumber2
+} from "@/utils/validate";
+
+const validatePrice = (rule, value, callback) => {
+    if (value === "") {
+        callback(new Error("不能为空!"));
+    } else {
+        if (isnumber(value)) {
+            callback();
+        } else if (isnumber2(value)) {
+            callback();
+        } else {
+            callback(new Error("仅支持整数或两位小数!"))
+        }
+    }
+};
+const validateWeight = (rule, value, callback) => {
+    if (value === "") {
+        callback(new Error("不能为空!"));
+    } else {
+        if (!isnumber(value)) {
+            callback(new Error("仅支持整数!"))
+        } else {
+            callback();
+        }
+    }
+};
+export default {
+    good_price: {
+        required: true,
+        trigger: "blur",
+        validator: validatePrice,
+    },
+    nake_fee: {
+        required: true,
+        validator: validatePrice,
+
+        trigger: "blur",
+    },
+    supplierNo: {
+        type: "array",
+        required: true,
+        message: "采购供应商不能为空",
+        trigger: "change",
+
+    },
+    num: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
+    },
+    expecttime: {
+        required: true,
+        message: "预计入库时间不能为空",
+        trigger: 'blur',
+    },
+    weight: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
+    },
+    now_god_price: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    teach_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    pakge_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    mark_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    cert_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    delivery_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    open_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    purchase_num: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
+    },
+    diff_weight: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
+    },
+    diff_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
+    },
+    remark: {
+        required: true,
+        message: "请填写备注",
+        trigger: "blur",
+    }
+}

+ 311 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-addEdit-form.vue

@@ -0,0 +1,311 @@
+<template>
+  <el-form
+    v-loading="loading"
+    :model="ruleForm"
+    :rules="rules"
+    status-icon
+    ref="ruleForm"
+    label-width="100px"
+    class="demo-ruleForm"
+  >
+    <el-row>
+      <el-col :span="24" v-if="id === 'add'">
+        <el-col :span="24">
+          <el-divider>收货信息:</el-divider>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="收货人" :size="'mini'">
+            <el-input
+              placeholder="收货人"
+              disabled
+              v-model="ruleForm.wsm_contactor"
+              maxlength="100"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col :span="12">
+          <el-form-item label="联系电话" :size="'mini'">
+            <el-input
+              placeholder="联系电话"
+              disabled
+              v-model="ruleForm.wsm_mobile"
+              maxlength="100"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-form-item label="收货地址" :size="'mini'">
+            <el-input
+              placeholder="收货地址"
+              disabled
+              v-model="ruleForm.wsm_addr"
+              maxlength="100"
+            >
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="24">
+          <el-divider>入库单信息:</el-divider>
+        </el-col>
+      </el-col>
+
+      <el-col :span="12">
+        <el-form-item label="物流公司" prop="post_company">
+          <el-input
+            placeholder="物流公司"
+            :disabled="id !== 'add'"
+            v-model="ruleForm.post_company"
+            maxlength="100"
+          >
+          </el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="物流单号" prop="post_code">
+          <el-input
+            :disabled="id !== 'add'"
+            placeholder="物流单号"
+            v-model="ruleForm.post_code"
+            maxlength="100"
+          />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="物流费用" prop="post_fee">
+          <el-input
+            :disabled="id !== 'add'"
+            placeholder="物流费用"
+            v-model="ruleForm.post_fee"
+            maxlength="100"
+          >
+            <template slot="append">元</template>
+          </el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="发货时间" prop="post_time">
+          <el-date-picker
+            :disabled="id !== 'add'"
+            v-model="ruleForm.post_time"
+            type="datetime"
+            style="width: 100%"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            placeholder="发货时间"
+            :picker-options="pickerOptions"
+            @change="selectTime"
+          >
+          </el-date-picker>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12" v-if="id === 'add'">
+        <el-form-item label="未发货总量">
+          <el-input
+            placeholder="未发货总量"
+            disabled
+            v-model="ruleForm.wsend_num"
+            maxlength="100"
+          >
+          </el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="12" v-if="id === 'add'">
+        <el-form-item label="发货数量" prop="send_num">
+          <el-input
+            placeholder="发货数量"
+            :disabled="id !== 'add'"
+            v-model="ruleForm.send_num"
+            maxlength="100"
+          >
+          </el-input>
+        </el-form-item>
+      </el-col>
+
+      <el-col :span="24" style="text-align: right" v-if="id === 'add'">
+        <el-button type="primary" @click="submitForm">保 存 </el-button>
+      </el-col>
+    </el-row>
+  </el-form>
+</template>
+<script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import { isnumber, isnumber2, isAlphanumeric } from "@/utils/validate";
+export default {
+  name: "wsmInOrderAdd",
+  props: ["id", "sitem", "newTime", "modelSitem"],
+  mixins: [resToken],
+  data() {
+    const validatePrice = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (isnumber(value)) {
+          callback();
+        } else if (isnumber2(value)) {
+          callback();
+        } else {
+          callback(new Error("仅支持整数或两位小数!"));
+        }
+      }
+    };
+    const validateWeight = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isnumber(value)) {
+          callback(new Error("仅支持整数!"));
+        } else {
+          callback();
+        }
+      }
+    };
+    const validateCode = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isAlphanumeric(value)) {
+          callback(new Error("仅支持字母和数字!"));
+        } else {
+          callback();
+        }
+      }
+    };
+
+    return {
+      loading: true,
+      ruleForm: {
+        wsm_mobile: "",
+        wsm_contactor: "",
+        wsm_addr: "",
+        cgdNo: "",
+        wsm_code: "",
+        post_company: "",
+        post_code: "",
+        post_fee: "",
+        post_time: "",
+        send_num: "",
+        status: "1",
+      },
+      rules: {
+        send_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
+        },
+        post_company: {
+          required: true,
+          trigger: "blur",
+          message: "请输入物流公司",
+        },
+        post_code: {
+          required: true,
+          validator: validateCode,
+          trigger: "blur",
+        },
+        post_fee: {
+          required: true,
+          validator: validatePrice,
+          trigger: "blur",
+        },
+        post_time: {
+          required: true,
+          message: "请选择发货时间",
+          trigger: "change",
+        },
+      },
+    };
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  created() {
+    this.initForm();
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+
+    async initForm() {
+      this.loading = true;
+      console.log(this.sitem);
+      await this.resetForm();
+      this.loading = false;
+    },
+
+    //初始化表单
+    async resetForm() {
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          const { post_company, post_code, post_fee, sendtime, send_num } =
+            this.sitem;
+          const {
+            wsm_mobile,
+            wsm_contactor,
+            wsm_addr,
+            wsend_num,
+            cgdNo,
+            wsm_code,
+          } = this.modelSitem;
+          this.ruleForm = {
+            wsm_mobile,
+            wsm_contactor,
+            wsm_addr,
+            wsend_num,
+            cgdNo: cgdNo || "",
+            wsm_code: wsm_code || "",
+            post_company: post_company || "",
+            post_code: post_code || "",
+            post_fee: post_fee || "",
+            post_time: sendtime || "",
+            send_num: send_num || "",
+            status: "1",
+          };
+        }
+      });
+    },
+    // 保存更改
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+
+          console.log(item);
+
+          const res = await asyncRequest.orderinadd(item);
+          this.loading = false;
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "添加成功",
+              message: "",
+            });
+            this.$emit("refresh"); //抛出事件给详情页。
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.account {
+}
+</style>

+ 335 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-check-form.vue

@@ -0,0 +1,335 @@
+<template>
+  <div v-loading="loading">
+    <el-row>
+      <el-col :span="24">
+        <el-form
+          :model="ruleForm"
+          :rules="rules"
+          status-icon
+          ref="ruleForm"
+          label-width="110px"
+          class="demo-ruleForm"
+        >
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="发货总数">
+                <el-input
+                  placeholder="发货总数"
+                  disabled
+                  v-model="ruleForm.send_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="正常入库数量">
+                <el-input
+                  placeholder="正常入库数量"
+                  v-model="ruleForm.send_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="异常补发数量" prop="wsm_num">
+                <el-input
+                  placeholder="异常补发数量"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.wsm_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="异常退货数量" prop="wsm_num">
+                <el-input
+                  placeholder="异常退货数量"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.wsm_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="退货联系人" prop="wsm_num">
+                <el-input
+                  placeholder="退货联系人"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.wsm_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="退货联系电话" prop="wsm_num">
+                <el-input
+                  placeholder="退货联系电话"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.wsm_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="退货地址" prop="wsm_num">
+                <el-input
+                  placeholder="退货地址"
+                  type="textarea"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.remark"
+                  maxlength="250"
+                  :autosize="{ minRows: 3, maxRows: 3 }"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="异常处理备注" prop="wsm_num">
+                <el-input
+                  type="textarea"
+                  placeholder="异常处理备注"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.remark"
+                  maxlength="250"
+                  :autosize="{ minRows: 3, maxRows: 3 }"
+                />
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="24" style="text-align: right">
+              <el-button type="primary" @click="submitForm">保 存 </el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import { isnumber } from "@/utils/validate";
+import wsmInOrderErrorModel from "./wsm-in-order-error-model";
+export default {
+  name: "wsmInOrderAdd",
+  props: ["id", "sitem", "newTime", "modelSitem"],
+  components: { wsmInOrderErrorModel },
+  mixins: [resToken],
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    const validateWeight = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isnumber(value)) {
+          callback(new Error("仅支持整数!"));
+        } else {
+          callback();
+        }
+      }
+    };
+
+    return {
+      loading: true,
+      status: "",
+      showModel: false,
+      modelAllnum: "",
+      modelitem: null,
+      modelId: "",
+      ruleForm: {
+        order_num: "",
+      },
+      rules: {
+        order_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
+        },
+      },
+      columns: [
+        {
+          prop: "num",
+          label: "异常数量",
+        },
+        {
+          prop: "error_code_name",
+          label: "异常原因",
+        },
+        {
+          prop: "error_img",
+          label: "异常图片",
+        },
+        {
+          prop: "remark",
+          label: "异常备注",
+        },
+      ],
+      tableForm: {
+        error_list: [],
+      },
+      tableRules: {},
+    };
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  created() {
+    this.initForm();
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+
+    async initForm() {
+      this.loading = true;
+
+      await this.resetForm();
+      this.loading = false;
+    },
+    errorModel(e) {
+      if (e) {
+        let index = e.index;
+        if (index === -1) {
+          this.tableForm.error_list.push(e);
+        } else {
+          this.tableForm.error_list[index] = e;
+        }
+      }
+    },
+    //初始化表单
+    async resetForm() {
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          const { send_num, wsm_num, status } = this.sitem;
+          this.status = status;
+          this.ruleForm = {
+            send_num: send_num || "",
+            wsm_num: wsm_num || "",
+          };
+        }
+        if (this.$refs.tableForm) {
+          this.$refs.tableForm.resetFields();
+          this.$refs.tableForm.clearValidate();
+
+          const { checkinfo } = this.sitem;
+          this.tableForm = {
+            error_list: checkinfo || [],
+          };
+        }
+      });
+    },
+    addError(index) {
+      this.modelAllnum = "2";
+      this.modelitem = index === -1 ? {} : this.tableForm.error_list[index];
+      this.modelId = index;
+      this.showModel = true;
+    },
+
+    // 保存更改
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+          let snum = parseInt(item.send_num),
+            wnum = parseInt(item.wsm_num),
+            errornum = 0,
+            list = [];
+
+          if (snum === wnum && this.tableForm.error_list.length > 0) {
+            this.$message.warning("正常数量与发货数量一致,无需填写异常原因!");
+            this.loading = false;
+            return;
+          }
+          this.tableForm.error_list.forEach((v) => {
+            errornum += parseInt(v.num);
+            let model = {
+              num: v.num,
+              error_code: v.error_code,
+              error_img: v.error_img.join(","),
+              remark: v.remark,
+            };
+            list.push(model);
+          });
+
+          if (errornum + wnum !== snum) {
+            this.$message.warning("异常数量总数与发货总数不一致!");
+            this.loading = false;
+            return;
+          }
+          let pitem = {
+            wsm_in_code: this.id,
+            order_num: wnum + "",
+            error_list: list,
+          };
+          const res = await asyncRequest.orderinreturn(pitem);
+          this.loading = false;
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "添加成功",
+              message: "",
+            });
+            this.$emit("refresh"); //抛出事件给详情页。
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.stockInDetail {
+  .el-table-column-error_img-ul {
+    position: relative;
+    box-sizing: border-box;
+    li {
+      float: left;
+      border: 1px solid #dfe6ec;
+      margin: 0px 2px 2px 0px;
+      box-sizing: border-box;
+      img {
+        display: inline-block;
+        box-sizing: border-box;
+        width: 50px;
+        vertical-align: top;
+        height: 32px;
+        &:hover {
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+</style>

+ 413 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-error-model.vue

@@ -0,0 +1,413 @@
+<template>
+  <el-dialog
+    :title="title"
+    :center="true"
+    align="left"
+    top="10vh"
+    width="940px"
+    @close="closeModel"
+    :close-on-click-modal="false"
+    :visible.sync="showModelThis"
+    v-loading="loading"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <el-card style="margin-top: -20px">
+      <el-row :gutter="10">
+        <el-col :span="24">
+          <el-form
+            ref="ruleForm"
+            :model="ruleForm"
+            status-icon
+            :rules="rulesThis"
+            label-width="85px"
+            class="demo-ruleForm"
+          >
+            <el-row>
+              <el-col :span="12">
+                <el-form-item label="异常数量" prop="num">
+                  <el-input
+                    v-model="ruleForm.num"
+                    placeholder="异常数量"
+                    maxlength="50"
+                  />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="异常原因" prop="error_code">
+                  <el-select
+                    v-model="ruleForm.error_code"
+                    placeholder="异常原因"
+                    style="width: 100%"
+                    @change="elSelectChange"
+                  >
+                    <el-option
+                      v-for="item in options"
+                      :key="item.result_code"
+                      :label="item.result"
+                      :value="item.result_code"
+                      :disabled="item.status === '0'"
+                    >
+                    </el-option>
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-form-item label="异常备注" prop="remark">
+              <el-input
+                type="textarea"
+                maxlength="250"
+                placeholder="异常备注"
+                :autosize="{ minRows: 3, maxRows: 3 }"
+                v-model="ruleForm.remark"
+              />
+            </el-form-item>
+            <el-form-item label="异常图片" prop="error_img">
+              <div class="el-form-item-error-img">
+                <ul>
+                  <li v-for="(item, index) in ruleForm.error_img" :key="item">
+                    <img :src="item" alt="" />
+                    <i class="el-icon-close" @click="imgClose(index)"></i>
+                  </li>
+                </ul>
+                <div
+                  class="btnupload"
+                  v-if="ruleForm.error_img.length < 5"
+                  style="position: relative"
+                  @click="open"
+                >
+                  <i class="el-icon-plus avatar-uploader-icon"></i>
+                  <file-upload
+                    class="Upload"
+                    :accept="'.jpg,.png,.bmp,.jpeg'"
+                    :multiple="true"
+                    :uploadcondition="beforeAvatarUpload"
+                    @UploadErrorEvent="UploadErrorEvent"
+                    @UploadSuccessEvent="UploadSuccessEvent"
+                  />
+                </div>
+              </div>
+            </el-form-item>
+          </el-form>
+        </el-col>
+        <el-col :span="24" style="text-align: right">
+          <div class="txt-tips fl">
+            <p>
+              <span sty>大小:小于1MB;</span><span>尺寸:250*160;</span
+              ><span>类型:jpg.png.bmp.jpeg</span>
+            </p>
+          </div>
+          <el-button
+            class="fr"
+            @click="showModelThis = false"
+            style="margin-left: 15px"
+            >关 闭</el-button
+          >
+          <el-button class="fr" type="primary" @click="submitForm"
+            >保 存
+          </el-button>
+        </el-col>
+      </el-row>
+    </el-card>
+  </el-dialog>
+</template>
+   <script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+
+export default {
+  name: "purchaseOrder",
+  props: ["showModel", "id", "sitem", "allnum"],
+  mixins: [resToken],
+  data() {
+    return {
+      showModelThis: this.showModel,
+      loading: false,
+      title: "",
+      newTime: "",
+      options: [],
+      ruleForm: {
+        num: "",
+        error_code: "",
+        error_code_name: "",
+        error_img: [],
+        remark: "",
+      },
+      show: false,
+      rulesThis: this.rules,
+      rules: {
+        num: [
+          {
+            required: true,
+            // validator: validatename,
+            trigger: "blur",
+          },
+        ],
+        error_code: [
+          {
+            required: true,
+            message: "请选择异常原因",
+            trigger: "change",
+          },
+        ],
+        error_img: [
+          {
+            type: "array",
+            required: true,
+            message: "异常图片不能为空!",
+            trigger: "change",
+          },
+        ],
+        remark: [
+          {
+            required: true,
+            message: "异常备注不能为空!",
+            trigger: "blur",
+          },
+        ],
+      },
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+      if (val) {
+        this.initForm();
+      }
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+    async initForm() {
+      this.loading = true;
+      this.rulesThis = this.rules;
+      console.log(this.id);
+      if (this.id === -1) {
+        this.title = "新建异常记录";
+      } else {
+        this.title = "编辑异常记录";
+      }
+      await this.getresultlist();
+      await this.resetForm();
+      this.loading = false;
+    },
+    //异常原因筛选
+    elSelectChange(e) {
+      let oindex = this.options.findIndex((v) => v.result_code === e);
+      this.ruleForm.error_code_name =
+        oindex !== -1 ? this.options[oindex].result : "";
+    },
+    imgClose(index) {
+      this.ruleForm.error_img.splice(index, 1);
+      this.$refs.ruleForm.validateField("error_img");
+    },
+    async getresultlist() {
+      const res = await asyncRequest.resultlist({
+        page: 1,
+        size: 100,
+        type: "1",
+        status: "",
+      });
+      if (res && res.code === 0 && res.data) {
+        const { list } = res.data;
+        this.options = list;
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+    async resetForm() {
+      // 重置
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          const { num, error_code, error_code_name, error_img, remark, index } =
+            this.sitem;
+          this.ruleForm = {
+            num: num || "",
+            index: this.id,
+            error_code: error_code || "",
+            error_code_name: error_code_name || "",
+            error_img: error_img || [],
+            remark: remark || "",
+          };
+        }
+      });
+    },
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+          this.showModelThis = false;
+          this.$emit("refresh", item);
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    getNewTime() {
+      this.newTime = new Date().valueOf();
+    },
+    open() {
+      this.show = true;
+    },
+    //图片上传失败
+    UploadErrorEvent() {
+      this.$message.error("图片上传失败!");
+      this.$refs.ruleForm.validateField("error_img");
+    },
+    //图片上传成功
+    UploadSuccessEvent(data) {
+      if (data && data.url && data.url !== "break") {
+        const { url } = data.url;
+        this.ruleForm.error_img.push(url);
+        this.$message.success("图片上传成功!");
+        this.$refs.ruleForm.validateField("error_img");
+      }
+    },
+    //判断图片规格
+    beforeAvatarUpload(file) {
+      let isJPG = false,
+        isLt2M = false;
+      if (file) {
+        if (
+          file.type === "image/jpg" ||
+          file.type === "image/png" ||
+          file.type === "image/bmp" ||
+          file.type === "image/jpeg"
+        ) {
+          isJPG = true;
+        }
+        isLt2M = file.size / 1024 / 1024 < 1;
+        if (!isJPG) {
+          this.$message.error("图片格式不正确!");
+        }
+        if (!isLt2M) {
+          this.$message.error("图片大小不能超过 1MB!");
+        }
+      }
+
+      return isJPG && isLt2M;
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.stockInDetail {
+  .el-form-item-error-img {
+    width: 100%;
+    ul {
+      width: 100%;
+      li {
+        float: left;
+        border: 1px solid rgb(220, 223, 230);
+        // border-left: 0;
+        box-sizing: border-box;
+        width: 254px;
+        height: 164px;
+        line-height: 164px;
+        position: relative;
+        img {
+          display: inline-block;
+          width: 100%;
+          height: 100%;
+        }
+        .el-icon-close {
+          position: absolute;
+          top: 0;
+          right: 0;
+          z-index: 2;
+          width: 25px;
+          height: 25px;
+          text-align: center;
+          line-height: 25px;
+          font-size: 19px;
+          &:hover {
+            color: #63cbe7;
+          }
+        }
+      }
+    }
+  }
+  .btnupload {
+    float: left;
+    border: 1px solid rgb(220, 223, 230);
+    // border-left: 0;
+    box-sizing: border-box;
+    width: 254px;
+    height: 164px;
+    line-height: 164px;
+    text-align: center;
+  }
+  .Upload {
+    width: 254px;
+    height: 164px;
+    line-height: 164px;
+    text-align: center;
+    position: absolute;
+    line-height: 0px;
+    top: 0;
+    left: 0;
+    z-index: 2;
+    line-height: 164px;
+  }
+  .fileUp {
+    vertical-align: top;
+  }
+  .avatar {
+    width: 254px;
+    height: 164px;
+    line-height: 164px;
+    text-align: center;
+  }
+  .avatar-uploader .el-upload:hover {
+    border-color: #409eff;
+  }
+  .avatar-uploader-icon {
+    font-size: 33px;
+    color: #8c939d;
+    width: 50px;
+    height: 50px;
+    line-height: 50px;
+    text-align: center;
+  }
+  .avatar {
+    width: 100%;
+    height: 100%;
+    display: block;
+  }
+  .txt-tips {
+    display: inline-block;
+    font-size: 13px;
+    color: #606266;
+    padding: 5px 0 0 15px;
+    p {
+      margin: 0;
+      line-height: 30px;
+      span {
+        padding: 0 15px 0 0;
+      }
+    }
+  }
+  .avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+}
+</style>
+   

+ 115 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-model.vue

@@ -0,0 +1,115 @@
+<template>
+  <el-dialog
+    :title="title"
+    :center="true"
+    align="left"
+    top="5vh"
+    width="1040px"
+    @close="closeModel"
+    :close-on-click-modal="false"
+    :visible.sync="showModelThis"
+    v-loading="loading"
+    element-loading-text="拼命加载中"
+    element-loading-spinner="el-icon-loading"
+    element-loading-background="rgba(0, 0, 0, 0.8)"
+  >
+    <el-card style="margin-top: -20px">
+      <el-row :gutter="10">
+        <el-col :span="24">
+          <wsm-in-order-addEdit-form
+            v-if="newTime !== ''"
+            :id="id"
+            :newTime="newTime"
+            :modelSitem="modelSitem"
+            :sitem="sitem"
+            @refresh="(showModelThis = false), $emit('refresh')"
+          />
+     
+        </el-col>
+      </el-row>
+    </el-card>
+  </el-dialog>
+</template>
+   <script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import wsmInOrderAddEditForm from "./wsm-in-order-addEdit-form";
+
+export default {
+  name: "purchaseOrder",
+  props: ["showModel", "id", "btn_code", "modelSitem"],
+  components: { wsmInOrderAddEditForm},
+  mixins: [resToken],
+  data() {
+    return {
+      showModelThis: this.showModel,
+      loading: false,
+      title: "添加账号",
+      sitem: null,
+      newTime: "",
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+      if (val) {
+        this.initForm();
+      }
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+    async initForm() {
+      this.loading = true;
+      this.sitem = null;
+      // btn_code
+      switch (this.btn_code) {
+        case "028":
+          this.title = "新建备货入库单";
+          break;
+        case "007":
+          this.title = "备货入库单详情";
+          break;
+        default:
+          this.title = "新建备货入库单";
+      }
+      if (this.btn_code !== "028") {
+        await this.initData();
+      } else {
+        this.sitem = {};
+        this.getNewTime();
+      }
+
+      this.loading = false;
+    },
+
+    async initData() {
+      const res = await asyncRequest.orderininfo({ wsm_in_code: this.id });
+      if (res && res.code === 0 && res.data) {
+        this.sitem = res.data;
+        this.getNewTime();
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+    getNewTime() {
+      this.newTime = new Date().valueOf();
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.purchaseOrder {
+}
+</style>
+   

+ 349 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-record-form.vue

@@ -0,0 +1,349 @@
+<template>
+  <div v-loading="loading">
+    <el-row>
+      <el-col :span="24">
+        <el-form
+          :model="ruleForm"
+          :rules="rulesThis"
+          status-icon
+          ref="ruleForm"
+          label-width="100px"
+          class="demo-ruleForm"
+        >
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="发货总数">
+                <el-input
+                  placeholder="发货总数"
+                  disabled
+                  v-model="ruleForm.send_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="正常数量" prop="wsm_num">
+                <el-input
+                  placeholder="无异常数量"
+                  :disabled="status !== '1'"
+                  v-model="ruleForm.wsm_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-col>
+      <el-col :span="24">
+        <wsm-in-order-error-model
+          :showModel="showModel"
+          :id="modelId"
+          :sitem="modelitem"
+          :allnum="modelAllnum"
+          @refresh="errorModel"
+          @cancel="showModel = false"
+        />
+        <!-- <el-button type="primary" @click=""> 新建 </el-button> -->
+        <el-form
+          :model="tableForm"
+          :rules="tableRules"
+          ref="tableForm"
+          class="demo-tableForm"
+        >
+          <el-table
+            :data="tableForm.error_list"
+            border
+            :size="'mini'"
+            row-key="key"
+          >
+            <template v-for="(item, index) in columns">
+              <el-table-column
+                :prop="item.prop"
+                show-overflow-tooltip
+                :label="item.label"
+                v-if="item.prop !== 'error_img'"
+                :key="item.prop + index"
+              />
+              <el-table-column
+                :prop="item.prop"
+                :label="item.label"
+                v-if="item.prop === 'error_img'"
+                :key="item.prop + index"
+                width="350px"
+              >
+                <template slot-scope="scope">
+                  <ul class="el-table-column-error_img-ul clear">
+                    <li
+                      v-for="item in scope.row.error_img"
+                      :key="item"
+                      v-viewer
+                    >
+                      <img :src="item" alt="" />
+                    </li>
+                  </ul>
+                </template>
+              </el-table-column>
+            </template>
+            <el-table-column fixed="right" width="80">
+              <template slot="header" slot-scope="scope">
+                <span>操作</span>
+                <el-tooltip
+                  class="fr"
+                  style="margin: 3px 0 0 0"
+                  effect="dark"
+                  content="添加"
+                  placement="top"
+                >
+                  <i
+                    class="el-icon-circle-plus-outline tb-icon"
+                    style="color: #63cbe7"
+                    @click="addError(-1)"
+                  ></i>
+                </el-tooltip>
+              </template>
+              <template slot-scope="scope">
+                <el-tooltip effect="dark" content="编辑" placement="top">
+                  <i
+                    class="el-icon-edit tb-icon"
+                    @click="addError(scope.$index)"
+                  ></i>
+                </el-tooltip>
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form>
+      </el-col>
+      <el-col :span="24" style="text-align: right; padding: 10px 0">
+        <el-button type="primary" :size="'mini'" @click="submitForm"
+          >保 存
+        </el-button>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import { isnumber } from "@/utils/validate";
+import wsmInOrderErrorModel from "./wsm-in-order-error-model";
+export default {
+  name: "wsmInOrderAdd",
+  props: ["id", "sitem", "newTime", "modelSitem"],
+  components: { wsmInOrderErrorModel },
+  mixins: [resToken],
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    const validateWeight = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isnumber(value)) {
+          callback(new Error("仅支持整数!"));
+        } else {
+          callback();
+        }
+      }
+    };
+
+    return {
+      loading: true,
+      rulesThis: this.rules,
+      status: "",
+      showModel: false,
+      modelAllnum: "",
+      modelitem: null,
+      modelId: "",
+      ruleForm: {
+        wsm_num: "",
+      },
+      rules: {
+        wsm_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
+        },
+      },
+      columns: [
+        {
+          prop: "num",
+          label: "异常数量",
+        },
+        {
+          prop: "error_code_name",
+          label: "异常原因",
+        },
+        {
+          prop: "error_img",
+          label: "异常图片",
+        },
+        {
+          prop: "remark",
+          label: "异常备注",
+        },
+      ],
+      tableForm: {
+        error_list: [],
+      },
+      tableRules: {},
+    };
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  created() {
+    this.initForm();
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+
+    async initForm() {
+      this.loading = true;
+      this.rulesThis = this.rules;
+      await this.resetForm();
+      this.loading = false;
+    },
+    errorModel(e) {
+      if (e) {
+        let index = e.index;
+        if (index === -1) {
+          this.tableForm.error_list.push(e);
+        } else {
+          this.tableForm.error_list[index] = e;
+        }
+      }
+    },
+    //初始化表单
+    async resetForm() {
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          const { send_num, wsm_num, status } = this.sitem;
+          this.status = status;
+          this.ruleForm = {
+            send_num: send_num || "",
+            wsm_num: wsm_num || "",
+          };
+        }
+        if (this.$refs.tableForm) {
+          this.$refs.tableForm.resetFields();
+          this.$refs.tableForm.clearValidate();
+
+          const { checkinfo } = this.sitem;
+          this.tableForm = {
+            error_list: checkinfo || [],
+          };
+        }
+      });
+    },
+    addError(index) {
+      this.modelAllnum = "2";
+      this.modelitem = index === -1 ? {} : this.tableForm.error_list[index];
+      this.modelId = index;
+      this.showModel = true;
+    },
+
+    // 保存更改
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+          let snum = parseInt(item.send_num),
+            wnum = parseInt(item.wsm_num),
+            errornum = 0,
+            list = [];
+
+          if (snum === wnum && this.tableForm.error_list.length > 0) {
+            this.$message.warning("正常数量与发货数量一致,无需填写异常原因!");
+            this.loading = false;
+            return;
+          }
+          this.tableForm.error_list.forEach((v) => {
+            errornum += parseInt(v.num);
+            let model = {
+              num: v.num,
+              error_code: v.error_code,
+              error_img: v.error_img.join(","),
+              remark: v.remark,
+            };
+            list.push(model);
+          });
+
+          if (errornum + wnum !== snum) {
+            this.$message.warning("异常数量总数与发货总数不一致!");
+            this.loading = false;
+            return;
+          }
+          let pitem = {
+            wsm_in_code: this.id,
+            order_num: wnum + "",
+            error_list: list,
+          };
+          const res = await asyncRequest.orderincheck(pitem);
+          this.loading = false;
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "添加成功",
+              message: "",
+            });
+            this.$emit("refresh"); //抛出事件给详情页。
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.stockInDetail {
+  .el-table-column-error_img-ul {
+    position: relative;
+    box-sizing: border-box;
+    li {
+      float: left;
+      border: 1px solid #dfe6ec;
+      margin: 0px 2px 2px 0px;
+      box-sizing: border-box;
+      img {
+        display: inline-block;
+        box-sizing: border-box;
+        width: 50px;
+        vertical-align: top;
+        height: 32px;
+        &:hover {
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+</style>

+ 236 - 0
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-return-form.vue

@@ -0,0 +1,236 @@
+<template>
+  <div v-loading="loading">
+    <el-row>
+      <el-col :span="24">
+        <el-form
+          :model="ruleForm"
+          :rules="rules"
+          status-icon
+          ref="ruleForm"
+          label-width="110px"
+          class="demo-ruleForm"
+        >
+          <el-row>
+            <el-col :span="12">
+              <el-form-item label="退货总数" prop="wsm_num">
+                <el-input
+                  placeholder="发货总数"
+                  disabled
+                  v-model="ruleForm.return_num"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="物流公司" prop="post_company">
+                <el-input
+                  placeholder="物流公司"
+                  v-model="ruleForm.post_company"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="12">
+              <el-form-item label="物流单号" prop="post_code">
+                <el-input
+                  placeholder="物流单号"
+                  v-model="ruleForm.post_code"
+                  maxlength="100"
+                >
+                </el-input>
+              </el-form-item>
+            </el-col>
+            <el-col :span="24" style="text-align: right">
+              <el-button type="primary" :size="'mini'" @click="submitForm"
+                >保 存
+              </el-button>
+            </el-col>
+          </el-row>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+<script>
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import resToken from "@/mixins/resToken";
+import { isnumber } from "@/utils/validate";
+import wsmInOrderErrorModel from "./wsm-in-order-error-model";
+export default {
+  name: "wsmInOrderAdd",
+  props: ["id", "sitem", "newTime", "modelSitem"],
+  components: { wsmInOrderErrorModel },
+  mixins: [resToken],
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    const validateWeight = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isnumber(value)) {
+          callback(new Error("仅支持整数!"));
+        } else {
+          callback();
+        }
+      }
+    };
+    const validateCode = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isAlphanumeric(value)) {
+          callback(new Error("仅支持字母和数字!"));
+        } else {
+          callback();
+        }
+      }
+    };
+    return {
+      loading: true,
+      status: "",
+      showModel: false,
+      modelAllnum: "",
+      modelitem: null,
+      modelId: "",
+      ruleForm: {
+        return_num: "",
+        post_company: "",
+        post_code: "",
+      },
+      rules: {
+        return_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
+        },
+        post_company: {
+          required: true,
+          message: "请输入物流公司",
+          trigger: "blur",
+        },
+        post_code: {
+          required: true,
+          validator: validateCode,
+          trigger: "blur",
+        },
+      },
+    };
+  },
+  watch: {
+    newTime: function (val) {
+      if (val) {
+        this.initForm();
+      }
+    },
+  },
+  created() {
+    this.initForm();
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+
+    async initForm() {
+      this.loading = true;
+
+      await this.resetForm();
+      this.loading = false;
+    },
+    errorModel(e) {
+      if (e) {
+        let index = e.index;
+        if (index === -1) {
+          this.tableForm.error_list.push(e);
+        } else {
+          this.tableForm.error_list[index] = e;
+        }
+      }
+    },
+    //初始化表单
+    async resetForm() {
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          // const { send_num, wsm_num, status } = this.sitem;
+          // this.status = status;
+          this.ruleForm = {
+            return_num: "",
+            post_company: "",
+            post_code: "",
+          };
+        }
+      });
+    },
+
+    // 保存更改
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          let item = JSON.parse(JSON.stringify(this.ruleForm));
+          delete item["return_num"];
+          item.wsm_in_code = this.id;
+
+          const res = await asyncRequest.orderinreturn(item);
+          this.loading = false;
+          if (res && res.code === 0) {
+            this.$notify.success({
+              title: "保存成功",
+              message: "",
+            });
+            this.$emit("refresh"); //抛出事件给详情页。
+          } else if (res && res.code >= 100 && res.code <= 104) {
+            await this.logout();
+          } else {
+            this.$message.warning(res.message);
+          }
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.stockInDetail {
+  .el-table-column-error_img-ul {
+    position: relative;
+    box-sizing: border-box;
+    li {
+      float: left;
+      border: 1px solid #dfe6ec;
+      margin: 0px 2px 2px 0px;
+      box-sizing: border-box;
+      img {
+        display: inline-block;
+        box-sizing: border-box;
+        width: 50px;
+        vertical-align: top;
+        height: 32px;
+        &:hover {
+          cursor: pointer;
+        }
+      }
+    }
+  }
+}
+</style>

+ 121 - 0
src/views/purchaseIn/purchaseOrder/detail.vue

@@ -0,0 +1,121 @@
+<template>
+  <div class="purchaseOrderDetail pagePadding">
+    <div
+      style="width: 100%"
+      v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
+    >
+      {{ status }}----{{ powers }}
+
+      <!-- @change="handleChange" -->
+      <el-collapse v-model="activeNames">
+        <el-collapse-item title="采购单信息" name="1">
+          <purchase-order-addEdit
+          style="padding:0 0 20px 0;"
+            :newTime="newTime"
+            v-if="newTime !== ''"
+            :sitem="sitem"
+            :id="queryId"
+            @refresh="initData()"
+          />
+        </el-collapse-item>
+        <el-collapse-item title="备货入库单" name="2">
+          <purchase-order-in-table
+            :newTime="newTime"
+            v-if="newTime !== '' && status !== '' && status !== '0'"
+            :sitem="sitem"
+            :id="queryId"
+            @refresh="initData()"
+          />
+        </el-collapse-item>
+      </el-collapse>
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+   <script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import purchaseOrderAddEdit  from "./components/purchase-order-addEdit";
+import purchaseOrderInTable from "./components/purchase-order-in-table";
+
+export default {
+  name: "purchaseOrderDetail",
+  mixins: [mixinPage, resToken],
+  components: {
+    purchaseOrderAddEdit,
+    purchaseOrderInTable,
+  },
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrderDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  mounted() {
+    console.log(this.$route);
+  },
+  data() {
+    return {
+      finishStatus: "finish",
+      activeNames: ["0", "1", "2", "3", "4", "5"],
+      sitem: null,
+
+      status: "",
+      newTime: "",
+      loading: false,
+      queryId: "",
+    };
+  },
+  mounted() {
+    this.status = "";
+    this.queryId = this.$route.query.id;
+    this.initData();
+  },
+  methods: {
+    handClick(value) {
+      console.log("执行子组件事件", value);
+      this.company = value;
+    },
+    getNewTime() {
+      this.newTime = new Date().valueOf();
+    },
+
+    async examForm(e) {
+      if (!this.loading) {
+        let type = e.state === "1" ? "2" : "0";
+        await this.setStatus(type, "提交入库方审核", e.remark);
+      }
+    },
+    async initData() {
+      this.loading = true;
+      const res = await asyncRequest.detail({ cgdNo: this.queryId });
+      if (res && res.code === 0 && res.data) {
+        this.sitem = res.data;
+        this.status = this.sitem.status;
+        this.getNewTime();
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+      this.loading = false;
+    },
+  },
+};
+</script>
+   <style lang="scss" scoped>
+.purchaseOrderDetail {
+}
+</style>
+   
+   

+ 417 - 0
src/views/purchaseIn/purchaseOrder/index.vue

@@ -0,0 +1,417 @@
+<template>
+  <div class="purchaseOrder pagePadding">
+    <div
+      v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
+    >
+      <ex-table
+        v-loading="loading"
+        :table="table"
+        :data="tableData"
+        :columns="columns"
+        :page="pageInfo"
+        :size="size"
+        @page-curr-change="handlePageChange"
+        @page-size-change="handleSizeChange"
+        @screen-reset="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+        @screen-submit="
+          pageInfo.curr = 1;
+          parmValue.page = 1;
+          searchList();
+        "
+      >
+        <template #table-header="{}">
+          <div style="width: 100%">
+            <el-row style="padding: 0 0 0 80px">
+              <el-col :span="4" style="width: 150px">
+                <el-select
+                  :size="searchSize"
+                  v-model="parmValue.status"
+                  filterable
+                  clearable
+                  placeholder="采购单状态"
+                  style="width: 100%"
+                  @change="
+                    pageInfo.curr = 1;
+                    parmValue.page = 1;
+                    searchList();
+                  "
+                >
+                  <el-option
+                    v-for="item in statusList"
+                    :key="'status' + item.code"
+                    :label="item.name"
+                    :value="item.code"
+                  />
+                </el-select>
+              </el-col>
+              <el-col :span="4" style="width: 370px; padding: 0 0 0 10px">
+                <search-supplier
+                  :size="searchSize"
+                  :value="parmValue.supplierNo"
+                  :placeholder="'入库公司名称'"
+                  :disabled="false"
+                  :isDetail="false"
+                  @searchChange="supplierChange"
+                />
+              </el-col>
+              <el-col :span="4" style="width: 220px; padding: 0 0 0 10px">
+                <search-stock
+                  :size="searchSize"
+                  :value="parmValue.stockNo"
+                  :placeholder="'入库仓库名称'"
+                  :disabled="false"
+                  :isDetail="false"
+                  :isRelation="true"
+                  :companyCode="supplierNo"
+                  @searchChange="stockChange"
+                />
+              </el-col>
+              <el-col :span="3" style="width: 66px; float: right">
+                <el-button
+                  :size="searchSize"
+                  type="primary"
+                  style="float: right; margin-left: 5px"
+                  @click="searchList"
+                >
+                  刷新
+                </el-button>
+              </el-col>
+            </el-row>
+            <el-row style="padding: 10px 0 0 0">
+              <el-col :span="4" style="width: 120px">
+                <el-dropdown @command="handleClick($event)" :size="searchSize">
+                  <el-button :size="searchSize" style="width: 120px">
+                    {{ sselect }}
+                    <i
+                      class="el-icon-arrow-down el-icon--right"
+                      :size="searchSize"
+                    ></i>
+                  </el-button>
+                  <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item
+                      v-for="item in options"
+                      :key="item"
+                      :command="item"
+                      >{{ item }}</el-dropdown-item
+                    >
+                  </el-dropdown-menu>
+                </el-dropdown>
+              </el-col>
+              <el-col :span="6" style="width: 303px; padding: 0 0 0 10px">
+                <period-date-picker
+                  :type="1"
+                  :width="'135px'"
+                  :size="searchSize"
+                  :start="timeOBJ.start"
+                  :end="timeOBJ.end"
+                  @timeReturned="handleTime"
+                />
+              </el-col>
+              <el-col :span="6" style="width: 400px; padding: 0 0 0 10px">
+                <el-input
+                  placeholder="编号"
+                  v-model="input"
+                  :size="searchSize"
+                  class="input-with-select"
+                >
+                  <el-select
+                    v-model="select"
+                    style="width: 125px"
+                    slot="prepend"
+                    placeholder="请选择"
+                  >
+                    <el-option label="采购单编号" value="1"></el-option>
+                    <el-option label="入库单编号" value="2"></el-option>
+                    <el-option label="备库编号" value="3"></el-option>
+                    <el-option label="商品属性编号" value="4"></el-option>
+                    <el-option label="产品名称" value="5"></el-option>
+                    <el-option label="申请人" value="6"></el-option>
+                    <el-option label="采购供应商编号" value="7"></el-option>
+                  </el-select>
+                  <el-button slot="append" icon="el-icon-search"></el-button>
+                </el-input>
+              </el-col>
+
+              <el-col :span="4" style="width: 66px; float: right">
+                <el-button
+                  type="warning"
+                  class="fr"
+                  :size="searchSize"
+                  @click="restSearch"
+                >
+                  重置
+                </el-button>
+              </el-col>
+            </el-row>
+          </div>
+        </template>
+        <template #status="{ scope }">
+          <el-tag
+            :size="tablebtnSize"
+            :type="scope.row.status == '0' ? 'warning' : ''"
+            v-text="
+              (statusOptions.find((item) => item.id == scope.row.status) || {})
+                .label || '--'
+            "
+          ></el-tag>
+        </template>
+        <template #expand="{ scope }">
+          <el-table
+            :size="size"
+            :data="scope.row.child"
+            border
+            style="width: 100%"
+          >
+            <el-table-column
+              prop="wsm_in_code"
+              label="备货入库单编号"
+              width="180"
+            >
+            </el-table-column>
+            <el-table-column prop="wsm_reaper" label="仓库接收人" width="180">
+            </el-table-column>
+            <el-table-column prop="send_num" label="发货数量" width="110">
+            </el-table-column>
+            <el-table-column prop="sendtime" label="发货时间" width="145">
+            </el-table-column>
+          </el-table>
+        </template>
+        <template #operation="{ scope }">
+          <el-tooltip
+            v-if="powers.some((item) => item == '007')"
+            effect="dark"
+            content="详情"
+            placement="top"
+          >
+            <i
+              class="el-icon-view tb-icon"
+              @click="routeGoto('purchaseOrderDetail', { id: scope.row.cgdNo })"
+            ></i>
+          </el-tooltip>
+        </template>
+      </ex-table>
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+   <script>
+import mixinPage from "@/mixins/elPaginationHandle";
+import resToken from "@/mixins/resToken";
+import statusList from "@/assets/js/statusList";
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder";
+import columns from "./columns"; //表格列参数
+import { mapGetters } from "vuex";
+
+export default {
+  name: "purchaseOrder",
+  mixins: [mixinPage, resToken],
+  components: {},
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "purchaseOrder"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  data() {
+    return {
+      sitem: null,
+      select: "1",
+      input: "",
+      timeOBJ: {
+        start: "", //起始时间
+        end: "", // 结束时间
+      },
+      options: ["创建时间", "最晚入库时间"],
+      sselect: "创建时间",
+      // 状态
+      statusOptions: [
+        { id: "0", label: "禁用" },
+        { id: "1", label: "启用" },
+      ],
+      statusList: statusList,
+      loading: false,
+      showModel: false,
+      isDetail: false,
+      modelId: 0,
+      parmValue: {
+        bk_code: "", // 备库编码
+        wsm_in_code: "", // 入库单号
+        cgdNo: "", // 采购单编码
+        apply_name: "", // 申请人
+        good_name: "", // 产品名称
+        good_code: "", // 产品属性编号
+
+        status: "", //状态
+
+        wsm_code: "", //入货仓库编码
+        start: "", //新建起始时间
+        end: "", // 新建结束时间
+        last_start: "", //最后入库时间开始
+        last_end: "", //最后入库时间结束
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+        supplierNo: "",
+        wsm_supplierNo: "",
+      },
+      tableData: [],
+      passwordModel: false,
+      passwordModelId: 0,
+      isPasswordDetail: false,
+      // 表格 - 数据
+      tableData: [],
+      // 表格 - 参数
+      table: {
+        stripe: true,
+        border: true,
+        _defaultHeader_: ["setcol"],
+      },
+      // 表格 - 分页
+      pageInfo: {
+        size: 15,
+        curr: 1,
+        total: 0,
+      },
+      // 表格 - 列参数
+      columns: columns,
+    };
+  },
+  mounted() {
+    this.searchList();
+  },
+
+  methods: {
+    restSearch() {
+      this.sselect = "创建时间";
+      this.select = "1";
+      this.input = "";
+      this.timeOBJ = {
+        start: "", //起始时间
+        end: "", // 结束时间
+      };
+      this.parmValue = {
+        bk_code: "", // 备库编码
+        wsm_in_code: "", // 入库单号
+        cgdNo: "", // 采购单编码
+        apply_name: "", // 申请人
+        good_name: "", // 产品名称
+        good_code: "", // 产品属性编号
+
+        status: "", //状态
+
+        wsm_code: "", //入货仓库编码
+        start: "", //新建起始时间
+        end: "", // 新建结束时间
+        last_start: "", //最后入库时间开始
+        last_end: "", //最后入库时间结束
+        page: 1, // 页码
+        size: 15, // 每页显示条数
+      };
+      // 表格 - 分页
+      this.pageInfo = {
+        size: 15,
+        curr: 1,
+        total: 0,
+      };
+      this.searchList();
+    },
+    async handleClick(e) {
+      this.sselect = e;
+      this.parmValue.start = e === "创建时间" ? this.timeOBJ.start : "";
+      this.parmValue.end = e === "创建时间" ? this.timeOBJ.end : "";
+      this.parmValue.last_start = e !== "创建时间" ? this.timeOBJ.start : "";
+      this.parmValue.last_end = e !== "创建时间" ? this.timeOBJ.end : "";
+      if (
+        !(
+          (this.timeOBJ.start !== "" && this.timeOBJ.end === "") ||
+          (this.timeOBJ.start === "" && this.timeOBJ.end !== "")
+        )
+      ) {
+        this.parmValue.page = 1;
+        this.pageInfo.curr = 1;
+        await this.searchList();
+      }
+    },
+    async supplierChange(e) {
+      if (e && e.id) {
+        this.parmValue.supplierNo = [e.code];
+        this.supplierNo = e.code;
+      } else {
+        this.parmValue.supplierNo = [];
+        this.supplierNo = "";
+      }
+      this.parmValue.stockNo = [];
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    async stockChange(e) {
+      if (e && e.id) {
+        this.parmValue.stockNo = [e.code];
+      } else {
+        this.parmValue.stockNo = [];
+      }
+
+      console.log(e);
+      this.parmValue.page = 1;
+      this.pageInfo.curr = 1;
+      await this.searchList();
+    },
+    async searchList() {
+      this.loading = true;
+      this.parmValue.cgdNo = this.select === "1" ? this.input : ""; // 采购单编码
+      this.parmValue.wsm_in_code = this.select === "2" ? this.input : ""; // 入库单号
+      this.parmValue.bk_code = this.select === "3" ? this.input : ""; // 备库编码
+      this.parmValue.good_code = this.select === "4" ? this.input : ""; // 产品属性编号
+      this.parmValue.good_name = this.select === "5" ? this.input : ""; // 产品名称
+      this.parmValue.apply_name = this.select === "6" ? this.input : ""; // 申请人
+      this.parmValue.supplierNo = this.select === "7" ? this.input : ""; // 采购供应商编号
+
+      const res = await asyncRequest.list(this.parmValue);
+      if (res && res.code === 0 && res.data) {
+        this.tableData = res.data.list;
+        this.pageInfo.total = Number(res.data.count);
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.tableData = [];
+        this.pageInfo.total = 0;
+      }
+      this.loading = false;
+    },
+    // 时间
+    async handleTime(e) {
+      if (e.startTime !== "") {
+        this.timeOBJ.start = e.startTime;
+      } else {
+        this.timeOBJ.start = "";
+      }
+      if (e.endTime !== "") {
+        this.timeOBJ.end = e.endTime;
+      } else {
+        this.timeOBJ.end = "";
+      }
+      await this.handleClick(this.sselect);
+    },
+  },
+};
+</script>
+   <style lang="scss" scoped>
+.purchaseOrder {
+  // text-align: right;
+}
+</style>
+   

+ 159 - 0
src/views/purchaseIn/purchaseOrder/stockInDetail.vue

@@ -0,0 +1,159 @@
+<template>
+  <div class="stockInDetail pagePadding">
+    <div
+      style="width: 100%"
+      v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
+    >
+      <div>{{ status }}------{{ powers }}</div>
+      <el-collapse v-model="activeNames" @change="handleChange">
+        <el-collapse-item title="入库单发货信息" name="0">
+          <wsm-in-order-addEdit-form
+            v-if="newTime !== ''"
+            :id="queryId"
+            :newTime="newTime"
+            :modelSitem="{}"
+            :sitem="sitem"
+            @refresh="(showModelThis = false), $emit('refresh')"
+          />
+        </el-collapse-item>
+        <el-collapse-item title="入库验收" name="2">
+          <wsm-in-order-record-form
+            v-if="newTime !== ''"
+            :id="queryId"
+            :newTime="newTime"
+            :modelSitem="{}"
+            :sitem="sitem"
+            @refresh="(showModelThis = false), $emit('refresh')"
+          />
+        </el-collapse-item>
+        <el-collapse-item title="入库验收审核" name="3">
+          <wsm-in-order-check-form
+            v-if="newTime !== ''"
+            :id="queryId"
+            :newTime="newTime"
+            :modelSitem="{}"
+            :sitem="sitem"
+            @refresh="(showModelThis = false), $emit('refresh')"
+          />
+        </el-collapse-item>
+        <el-collapse-item title="入库审核" name="4">
+          <exam-form
+            :statusList="statusList"
+            :newTime="newTime"
+            v-if="newTime !== ''"
+            :disabled="false"
+            :isMust="false"
+            @searchChange="examForm"
+          />
+        </el-collapse-item>
+        <el-collapse-item title="入库退货" name="5">
+          <wsm-in-order-return-form
+            :statusList="statusList"
+            :newTime="newTime"
+            v-if="newTime !== ''"
+            :disabled="false"
+            :isMust="false"
+            @searchChange="examForm"
+          />
+        </el-collapse-item>
+      </el-collapse>
+    </div>
+    <div v-else>
+      <no-auth></no-auth>
+    </div>
+  </div>
+</template>
+   <script>
+import resToken from "@/mixins/resToken";
+import asyncRequest from "@/apis/service/purchaseIn/purchaseOrder/detail";
+import wsmInOrderAddEditForm from "./components/wsm-in-order-addEdit-form";
+import wsmInOrderRecordForm from "./components/wsm-in-order-record-form";
+import wsmInOrderCheckForm from "./components/wsm-in-order-check-form";
+import wsmInOrderReturnForm from "./components/wsm-in-order-return-form";
+
+export default {
+  name: "stockInDetail",
+  mixins: [resToken],
+  components: {
+    wsmInOrderAddEditForm,
+    wsmInOrderRecordForm,
+    wsmInOrderCheckForm,
+    wsmInOrderReturnForm,
+  },
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "stockInDetail"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
+  mounted() {
+    console.log(this.$route);
+  },
+  data() {
+    return {
+      activeNames: ["0", "1", "2", "3", "4", "5"],
+      sitem: null,
+      status: "",
+      statusList: [],
+      newTime: "",
+      loading: false,
+      queryId: "",
+    };
+  },
+  mounted() {
+    this.status = "";
+    this.queryId = this.$route.query.id;
+    this.initData();
+  },
+  methods: {
+    getNewTime() {
+      this.newTime = new Date().valueOf();
+    },
+    async setStatus(status, message, remark) {
+      let model = {
+        wsm_in_code: this.queryId,
+        remark: remark || "",
+        status: status,
+      };
+      const res = await asyncRequest.orderinstatus(model);
+      this.loading = false;
+      if (res && res.code === 0) {
+        this.$notify.success({
+          title: message + "成功!",
+          message: "",
+        });
+        this.initData();
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+    async examForm(e) {
+      if (!this.loading) {
+        let type = e.state === "1" ? "2" : "0";
+        await this.setStatus(type, "提交入库方审核", e.remark);
+      }
+    },
+    async initData() {
+      const res = await asyncRequest.orderininfo({ wsm_in_code: this.queryId });
+      if (res && res.code === 0 && res.data) {
+        this.sitem = res.data;
+        this.getNewTime();
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+  },
+};
+</script>
+   

+ 0 - 0
src/views/purchaseIn/purchaseOrder/采购单管理


+ 3 - 83
src/views/purchaseIn/storeAnomaly/addEdit.vue

@@ -64,93 +64,16 @@
    <script>
 import asyncRequest from "@/apis/service/purchaseIn/storeAnomaly";
 import resToken from "@/mixins/resToken";
-import {
-  isnumber,
-  isMobile,
-  validEmail,
-  isAlphanumeric,
-  isChinese,
-  isEmoticon,
-  validAlphabets,
-} from "@/utils/validate";
 export default {
   name: "storeAnomaly",
   props: ["showModel", "id", "isDetail", "sitem"],
   mixins: [resToken],
   data() {
-    const validateusername = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("账号不能为空!"));
-      } else {
-        if (value.length < 6 || value.length > 18) {
-          callback(new Error("账号规则为6~18位数字与字母组合!"));
-        } else {
-          if (isnumber(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (validAlphabets(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (!isAlphanumeric(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatename = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("真实姓名不能为空!"));
-      } else {
-        if (value.length < 2 || value.length > 12) {
-          callback(new Error("真实姓名规则为2~12位汉字!"));
-        } else {
-          if (!isChinese(value)) {
-            console.log(9999);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else if (isEmoticon(value)) {
-            console.log(2345);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatemobile = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("手机号不能为空!"));
-      } else {
-        if (!isMobile(value)) {
-          callback(new Error("手机号格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
-
-    const validateEmail = (rule, value, callback) => {
-      if (value === "") {
-        callback();
-      } else {
-        if (!validEmail(value)) {
-          callback(new Error("邮箱格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
     return {
       loading: false,
       title: "添加账号",
       showModelThis: this.showModel,
       ruleForm: {
-        // username: "", // 账号
-        // name: "", // 真实姓名
-        // mobile: "",
-        // email: "",
-        // role_id: "",
-        // status: "1",
-        // item: [],
         result: "", //入库验收异常原因
         result_desc: "", //入库异常备注
       },
@@ -193,7 +116,6 @@ export default {
     },
     async initForm() {
       this.loading = true;
-      // await this.getRole();
       if (this.id === "add") {
         this.title = "添加异常原因";
         this.rulesThis = this.rules;
@@ -206,10 +128,8 @@ export default {
           this.title = "修改异常原因";
           this.rulesThis = this.rules;
         }
-        // console.log("修改异常");
-        console.log(this.id);
+
         await this.resetForm();
-        // console.log(this.sitem);
         await this.initData();
       }
       this.loading = false;
@@ -219,7 +139,6 @@ export default {
       const res = await asyncRequest.detail({ id: this.id });
       if (res && res.code === 0 && res.data) {
         this.ruleForm = res.data;
-        console.log(this.ruleForm);
       } else if (res && res.code >= 100 && res.code <= 104) {
         await this.logout();
       } else {
@@ -252,6 +171,7 @@ export default {
           const model = {
             result: result || "", //入库验收异常原因
             result_desc: result_desc || "", //入库异常备注
+            type: "1",
             id: this.id,
           };
           let res = {};
@@ -259,7 +179,7 @@ export default {
             delete model["id"];
             res = await asyncRequest.add(model);
           } else {
-            console.log("update");
+            delete model["type"];
             res = await asyncRequest.update(model);
             console.log(res);
           }

+ 16 - 16
src/views/purchaseIn/storeAnomaly/index.vue

@@ -26,18 +26,16 @@
         <template #table-header="{}">
           <div style="width: 100%">
             <el-row style="padding: 0 0 0 80px">
-              
-                
-                <el-col :span="3" style="width: 66px; float: right">
-                  <el-button
-                    :size="searchSize"
-                    type="primary"
-                    style="float: right; margin-left: 5px"
-                    @click="openModal('add', false)"
-                  >
-                    新建
-                  </el-button>
-                </el-col>
+              <el-col :span="3" style="width: 66px; float: right">
+                <el-button
+                  :size="searchSize"
+                  type="primary"
+                  style="float: right; margin-left: 5px"
+                  @click="openModal('add', false)"
+                >
+                  新建
+                </el-button>
+              </el-col>
             </el-row>
           </div>
         </template>
@@ -169,6 +167,7 @@ export default {
       modelId: 0,
       parmValue: {
         status: "", //
+        type: "1",
         page: 1, // 页码
         size: 15, // 每页显示条数
       },
@@ -193,9 +192,9 @@ export default {
       // 表格 - 列参数
       columns: [
         {
-          prop: "id",
-          label: "序列号",
-          width: "80px",
+          prop: "result_code",
+          label: "原因编号",
+          width: "120px",
         },
         {
           prop: "result",
@@ -260,7 +259,7 @@ export default {
         });
     },
     restSearch() {
-       // 表格 - 分页
+      // 表格 - 分页
       this.pageInfo = {
         size: 15,
         curr: 1,
@@ -268,6 +267,7 @@ export default {
       };
       this.parmValue = {
         status: "", //
+        type: "1",
         page: 1, // 页码
         size: 15, // 每页显示条数
       };

+ 0 - 6
src/views/purchaseIn/storeManage/addModel.vue

@@ -27,9 +27,6 @@ export default {
   components: {
     addEdit,
   },
-  mounted() {
-    console.log(this.showModelThis, this.showModel, this.isDetail);
-  },
   data() {
     return {
       modelId: "",
@@ -43,14 +40,11 @@ export default {
     },
     showModelThis(val) {
       if (!val) {
-        console.log("showdown");
-        console.log(this.showModelThis);
         this.$emit("cancel");
       }
     },
     id: function () {
       this.modelId = this.id;
-      console.log(this.modelId);
     },
   },
   methods: {

+ 1 - 1
src/views/purchaseIn/storeManage/columns.js

@@ -33,7 +33,7 @@ export default [
           prop: "status",
           label: "状态",
           _slot_: "status",
-          width: "80px",
+          width: "100px",
         },
         {
           prop: "addtime",

+ 73 - 49
src/views/purchaseIn/storeManage/components/addEdit.vue

@@ -8,28 +8,34 @@
       label-width="120px"
       class="demo-ruleForm"
     >
-      {{ isDisabled }}
       <el-row>
-        <!-- 商品名称 -->
         <el-col :span="24">
           <el-form-item label="商品名称" prop="goods_name">
-            <!--  -->
             <el-input
-              :disabled="ruleForm.status !== '0' && id != 'add'"
+              :disabled="
+                !(
+                  id === 'add' ||
+                  (status === '0' && powers.some((item) => item == '005'))
+                )
+              "
               v-model="ruleForm.goods_name"
               readonly="true"
               @focus="hand"
             ></el-input>
-            <!-- <search-good-modal /> -->
           </el-form-item>
         </el-col>
         <!-- 采购数量 -->
         <el-col :span="24">
           <el-form-item label="采购数量" prop="goods_num">
             <el-input
-              :disabled="ruleForm.status != '0' && id != 'add'"
+              :disabled="
+                !(
+                  id === 'add' ||
+                  (status === '0' && powers.some((item) => item == '005'))
+                )
+              "
               v-model="ruleForm.goods_num"
-              placeholder="请输入内容"
+              placeholder="采购数量"
             ></el-input>
           </el-form-item>
         </el-col>
@@ -44,7 +50,12 @@
               placeholder="选择日期"
               :picker-options="pickerOptions"
               @change="selectTime"
-              :disabled="ruleForm.status !== '0' && id != 'add'"
+              :disabled="
+                !(
+                  id === 'add' ||
+                  (status === '0' && powers.some((item) => item == '005'))
+                )
+              "
             >
             </el-date-picker>
           </el-form-item>
@@ -53,7 +64,12 @@
         <el-col :span="24">
           <el-form-item label="供应商名称" prop="supplier_code">
             <search-supplier
-              :disabled="ruleForm.status !== '0' && id != 'add'"
+              :disabled="
+                !(
+                  id === 'add' ||
+                  (status === '0' && powers.some((item) => item == '005'))
+                )
+              "
               :value="ruleForm.supplier_code"
               :placeholder="'请选择供应商'"
               :names="''"
@@ -65,15 +81,14 @@
         <el-col :span="24">
           <el-form-item label="仓库名称" prop="stock_code">
             <search-stock
+              :disabled="!(id == 'add' || status === '0')"
               :value="ruleForm.stock_code"
-              :isDetail="true"
               :placeholder="'请选择备库仓库'"
               :isRelation="true"
               :names="''"
               :companyCode="companyCode"
               @searchChange="selectStock"
             />
-            <!-- <el-input disabled v-model="ruleForm.stock_name" /> -->
           </el-form-item>
         </el-col>
         <el-col :span="24" style="text-align: right">
@@ -81,7 +96,10 @@
             type="primary"
             @click="submitForm"
             :size="'mini'"
-            v-if="id == 'add' || ruleForm.status == '0'"
+            v-if="
+              id === 'add' ||
+              (status == '0' && powers.some((item) => item == '005'))
+            "
             >保 存
           </el-button>
         </el-col>
@@ -93,48 +111,70 @@
       @cancel="showGoodsModel = false"
       @searchChange="addGoodsRes"
     />
-    {{ newTime }}
   </div>
 </template>
    <script>
 import resToken from "@/mixins/resToken";
 import asyncRequest from "@/apis/service/purchaseIn/storeManage";
+import { isnumber } from "@/utils/validate";
 export default {
   name: "storeManage",
   props: ["id", "sitem", "newTime"],
   mixins: [resToken],
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "storeManageFlow"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
   watch: {
     newTime: function (val) {
-      console.log(val);
       if (val) {
         this.initForm();
       }
     },
   },
   data() {
+    const validateWeight = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("不能为空!"));
+      } else {
+        if (!isnumber(value)) {
+          callback(new Error("仅支持整数!"));
+        } else {
+          callback();
+        }
+      }
+    };
     return {
       pickerOptions: {
         disabledDate(time) {
           return time.getTime() < Date.now();
         },
       },
+      status: "",
       routerId: "",
       stockCode: "",
       companyCode: "",
-      showGoodsModel: "", //打开新弹窗
+      showGoodsModel: "",
       loading: false,
       ruleForm: {
-        id: "", //保存路由来的id
+        id: "",
         good_code: "",
         good_type_code: "",
-        goods_name: "", //商品名称
-        goods_num: "", //商品数量
-        last_go_stock: "", //最晚入库时间
-        supplier_code: [], //供应商编码
-        supplier_name: "", //供应商名称
+        goods_name: "",
+        goods_num: "",
+        last_go_stock: "",
+        supplier_code: [],
+        supplier_name: "",
         stock_code: [],
-        status: "", //当前状态
-        stock_name: "",
       },
       rulesThis: this.rules,
       rules: {
@@ -149,17 +189,15 @@ export default {
         goods_num: [
           {
             required: true,
-            message: "请选择入库仓库",
+            validator: validateWeight,
             trigger: "blur",
           },
         ],
         last_go_stock: [
           {
-            // type: "date",
             required: true,
             message: "请输入入库最晚时间",
-            // trigger: "blur" ,
-            trigger: ["blur", "change"],
+            trigger: "change",
           },
         ],
         supplier_code: [
@@ -184,16 +222,12 @@ export default {
   created() {
     this.initForm();
   },
-  mounted() {
-    // this.initForm();
-    console.log(this.sitem, "sitem+addEdit");
-    this.newTime = this.newTime;
-  },
   methods: {
     async initForm() {
       this.loading = true;
+      this.status = this.sitem !== undefined ? this.sitem.status : "";
+
       if (this.id === "add") {
-        console.log("当前是add");
         this.status = "";
       }
       this.rulesThis = this.rules;
@@ -213,7 +247,6 @@ export default {
         this.ruleForm.stock_code = [];
         this.stockCode = "";
       }
-      console.log(this.ruleForm.stock_code, "this.ruleForm.stock_code");
       this.$refs.ruleForm.validateField("stock_code");
     },
     // 选择供应商
@@ -245,7 +278,6 @@ export default {
       this.ruleForm.last_go_stock = e;
     },
     closeModel() {
-      console.log("closeModel!!");
       this.$emit("closeModel");
     },
     // 重置
@@ -258,19 +290,18 @@ export default {
           if (this.sitem) {
             const {
               id,
-
               good_code,
               good_type_code,
               good_name, //商品名
               good_num, //采购数量
               lasttime, //最晚入库时间
               wsm_code, //仓库名
-              wsm_name,
               status,
               wsm_supplier,
               wsm_supplierNo,
               // 缺供应商
             } = this.sitem;
+            this.companyCode = wsm_supplierNo;
             this.ruleForm = {
               id,
               good_code,
@@ -279,14 +310,12 @@ export default {
               goods_num: good_num,
               last_go_stock: lasttime,
               supplier_code: [],
-              stock_code: wsm_name.split(","),
-              stock_name: wsm_code,
+              stock_code: wsm_code.split(","),
+              companyCode: wsm_supplierNo,
               supplier_name: wsm_supplierNo.split(","),
               supplier_code: wsm_supplier.split(","),
               status,
             };
-          } else {
-            console.log("当前是新建");
           }
         }
       });
@@ -301,23 +330,19 @@ export default {
             good_code,
             good_type_code,
             goods_num,
-            // stock_name,
             stock_code,
             last_go_stock,
-            // supplier_name,
           } = this.ruleForm;
-          console.log(this.ruleForm);
           let model = {
             id: id,
             good_code,
             good_type_code,
             good_num: goods_num || "",
-            wsm_code: stock_code.toString(),
+            wsm_code:
+              this.id == "add" ? stock_code.toString() : stock_code.toString(),
 
             lastime: last_go_stock || "",
           };
-          console.log(this.id);
-          console.log(model);
           let res = {};
           if (this.id === "add") {
             delete model["id"];
@@ -325,7 +350,6 @@ export default {
           } else {
             res = await asyncRequest.update(model);
           }
-          this.loading = false;
           if (res && res.code === 0) {
             const title = this.id === "add" ? "添加成功" : "修改成功";
             this.$notify.success({
@@ -339,6 +363,7 @@ export default {
           } else {
             this.$message.warning(res.message);
           }
+          this.loading = false;
         } else {
           console.log("error submit!!");
           return false;
@@ -371,7 +396,6 @@ export default {
           title: message + "成功!",
           message: "",
         });
-
         this.routeGoto("storeManage", {});
       } else if (res && res.code >= 100 && res.code <= 104) {
         await this.logout();

+ 269 - 226
src/views/purchaseIn/storeManage/components/purchaseBack.vue

@@ -8,168 +8,187 @@
       label-width="120px"
       class="demo-ruleForm"
     >
-      <el-row style="padding-top: 30px">
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="采购供应商" prop="supplierNo">
-              <!-- <el-input placeholder="占位" v-model="ruleForm.supplier_name" /> -->
-              <!-- :disabled="ruleForm.status !== '0' && id != 'add'" -->
-              <search-supplier
-                :disabled="isDisabled"
-                :value="ruleForm.supplierNo"
-                :placeholder="'请选择供应商'"
-                @searchChange="selectSupplier"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="预计入库时间" prop="expecttime">
-              <!-- <el-input placeholder="占位" v-model="ruleForm.expecttime" /> -->
-              <!-- :disabled="ruleForm.status !== '0' && id != 'add'" -->
-              <el-date-picker
-                :disabled="isDisabled"
-                v-model="ruleForm.expecttime"
-                type="datetime"
-                style="width: 100%"
-                value-format="yyyy-MM-dd HH:mm:ss"
-                placeholder="选择日期"
-                :picker-options="pickerOptions"
-                @change="selectTime"
-              >
-              </el-date-picker>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="8">
-            <el-form-item label="采购数量上限" prop="num">
-              <el-input
-                :disabled="isDisabled"
-                placeholder="0"
-                v-model="ruleForm.num"
-              />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12" offset="4"
-            ><el-form-item label="备注" prop="remark">
-              <el-input
-                :disabled="isDisabled"
-                type="textarea"
-                :autosize="{ minRows: 2, maxRows: 4 }"
-                v-model="ruleForm.remark"
-              /> </el-form-item
-          ></el-col>
-        </el-row>
-        <!-- 商品重量 实时金价 工艺费 商品重量-->
-        <el-row v-if="!isDisabled">
-          <el-col :span="6">
-            <el-form-item label="商品重量" prop="good_weight">
-              <el-input placeholder="0" v-model="ruleForm.good_weight">
-                <template slot="append">/g</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="实时金价" prop="now_god_price">
-              <el-input placeholder="0" v-model="ruleForm.now_god_price">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="工艺费" prop="teach_fee">
-              <el-input placeholder="0" v-model="ruleForm.teach_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="商品重量" prop="good_weight">
-              <el-input placeholder="0" v-model="ruleForm.good_weight">
-                <template slot="append">/g</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <!--包装费 加标费 证书费 物流费-->
-        <el-row v-if="!isDisabled">
-          <el-col :span="6">
-            <el-form-item label="包装费" prop="pakge_fee">
-              <el-input placeholder="0" v-model="ruleForm.pakge_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="加标费" prop="mark_fee">
-              <el-input placeholder="0" v-model="ruleForm.mark_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="证书费" prop="cert_fee">
-              <el-input placeholder="0" v-model="ruleForm.cert_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="物流费" prop="delivery_fee">
-              <el-input placeholder="0" v-model="ruleForm.delivery_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <!-- 开模费 采购数量 裸价-->
-        <el-row v-if="!isDisabled">
-          <el-col :span="6">
-            <el-form-item label="开模费" prop="open_fee">
-              <el-input placeholder="0" v-model="ruleForm.open_fee">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="采购数量" prop="purchase_num">
-              <el-input placeholder="0" v-model="ruleForm.purchase_num" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="工差重量" prop="diff_weight">
-              <el-input placeholder="0" v-model="ruleForm.diff_weight">
-                <template slot="append">/g</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="6">
-            <el-form-item label="工差金额" prop="diff_price">
-              <el-input placeholder="0" v-model="ruleForm.diff_price">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <!-- 单价,裸价,采购数量上限 -->
-        <el-row>
-          <el-col :span="8" v-if="!isDisabled">
-            <el-form-item label="商品单价" prop="good_price">
-              <el-input v-model="ruleForm.good_price" placeholder="0">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8" v-if="!isDisabled">
-            <el-form-item label="裸价" prop="nake_fee">
-              <el-input v-model="ruleForm.nake_fee" placeholder="0">
-                <template slot="append">元</template>
-              </el-input>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <!-- :disabled="isDisabled" -->
-        <el-col :span="24" style="text-align: right; padding-right: 50px">
+      <el-row>
+        <el-col :span="12" v-if="status === '1' && powers.some((item) => item == '024')">
+          <el-form-item label="采购供应商" prop="supplierNo">
+            <search-supplier
+              :disabled="
+                !(status == '1' && powers.some((item) => item == '024'))
+              "
+              :value="ruleForm.supplierNo"
+              :placeholder="'请选择供应商'"
+              :names="supplierName"
+              :isDetail="!(status === '0' && status == '1')"
+              @searchChange="selectSupplier"
+            />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="预计入库时间" prop="expecttime">
+            <el-date-picker
+              :disabled="
+                !(status == '1' && powers.some((item) => item == '024'))
+              "
+              v-model="ruleForm.expecttime"
+              type="datetime"
+              style="width: 100%"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              placeholder="选择日期"
+              :picker-options="pickerOptions"
+              @change="selectTime"
+            >
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="实时金价" prop="now_god_price">
+            <el-input
+              placeholder="0"
+              disabled
+              maxlength="100"
+              v-model="ruleForm.now_god_price"
+            >
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="status === '1' && powers.some((item) => item == '024')?8:12">
+          <el-form-item label="采购数量上限" prop="num">
+            <el-input
+              :disabled="
+                !(status == '1' && powers.some((item) => item == '024'))
+              "
+              placeholder="0"
+              v-model="ruleForm.num"
+            />
+          </el-form-item>
+        </el-col>
+
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="商品重量" prop="weight">
+            <el-input placeholder="0" v-model="ruleForm.weight">
+              <template slot="append">g</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="工艺费" prop="teach_fee">
+            <el-input placeholder="0" v-model="ruleForm.teach_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="包装费" prop="pakge_fee">
+            <el-input placeholder="0" v-model="ruleForm.pakge_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="加标费" prop="mark_fee">
+            <el-input placeholder="0" v-model="ruleForm.mark_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="证书费" prop="cert_fee">
+            <el-input placeholder="0" v-model="ruleForm.cert_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="物流费" prop="delivery_fee">
+            <el-input placeholder="0" v-model="ruleForm.delivery_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="开模费" prop="open_fee">
+            <el-input placeholder="0" v-model="ruleForm.open_fee">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="工差金额" prop="diff_price">
+            <el-input placeholder="0" v-model="ruleForm.diff_price">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="工差重量" prop="diff_weight">
+            <el-input placeholder="0" v-model="ruleForm.diff_weight">
+              <template slot="append">g</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+
+        <el-col
+          v-if="status === '1' && powers.some((item) => item == '024')"
+          :span="8"
+        >
+          <el-form-item label="裸价" prop="nake_fee">
+            <el-input v-model="ruleForm.nake_fee" placeholder="0">
+              <template slot="append">元</template>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col
+          :span="
+            status === '1' && powers.some((item) => item == '024') ? 16 : 24
+          "
+          ><el-form-item label="备注" prop="remark">
+            <el-input
+              :disabled="
+                !(status == '1' && powers.some((item) => item == '024'))
+              "
+              type="textarea"
+              :autosize="{ minRows: 2, maxRows: 4 }"
+              v-model="ruleForm.remark"
+            /> </el-form-item
+        ></el-col>
+        <el-col
+          :span="8"
+          style="text-align: right; padding: 0 50px 20px 0"
+          v-if="status === '1' && powers.some((item) => item == '024')"
+        >
           <el-button type="primary" @click="submitForm" :size="'mini'"
             >保 存
           </el-button>
@@ -186,23 +205,41 @@ export default {
   name: "storeManage",
   props: ["id", "sitem", "newTime"],
   mixins: [resToken],
+  computed: {
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "storeManageFlow"
+        ) || {};
+      if (tran && tran.action && tran.action.length > 0) {
+        return tran.action;
+      } else {
+        return [];
+      }
+    },
+  },
   data() {
     return {
-      isDisabled: false,
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() < Date.now();
+        },
+      },
+
+      lasttime: "",
+      supplierName: "",
       status: "",
       loading: false,
-      title: "新建备货反馈",
       ruleForm: {
         id: "",
-        good_price: "", //单价
-        nake_fee: "", //裸价
-        wsm_code: "", //仓库
-        supplier_code: "", //供应商
-        supplierNo: [], //采购供应商编码
+        good_price: "",
+        nake_fee: "",
+        wsm_code: "",
+        supplier_code: "",
+        supplierNo: [],
         num: "",
-        purchase_num: "",
         expecttime: "",
-        good_weight: "",
+        weight: "",
         now_god_price: "",
         teach_fee: "",
         pakge_fee: "",
@@ -220,25 +257,23 @@ export default {
   created() {
     this.initForm();
   },
-  mounted() {
-    this.newTime = this.newTime;
-  },
   watch: {
     newTime: function (val) {
-      console.log(val);
       if (val) {
         this.initForm();
       }
     },
   },
   methods: {
-    //
     async initForm() {
       this.loading = true;
       this.status = this.sitem.status;
-      this.ruleForm.wsm_code = this.sitem.wsm_code;
+      // this.ruleForm.wsm_code = this.sitem.wsm_code;
+      this.supplierName = "";
       await this.resetForm();
-      await this.initData();
+      if (this.status !== "1") {
+        await this.initData();
+      }
 
       this.loading = false;
     },
@@ -248,28 +283,40 @@ export default {
         if (this.$refs.ruleForm) {
           this.$refs.ruleForm.resetFields();
           this.$refs.ruleForm.clearValidate();
-          this.ruleForm = {
-            id: "",
-            good_price: "100", //单价
-            nake_fee: "100", //裸价
-            wsm_code: this.sitem.wsm_code, //仓库
-            supplier_code: "", //供应商编码
-            supplierNo: [], //采购供应商
-            num: "100", //最大采购数量
-            expecttime: "", //预计入库时间
-            good_weight: "100", //贵金属重量
-            purchase_num: "100", //采购数量
-            now_god_price: "100", //实时金价
-            teach_fee: "100", //工艺费
-            pakge_fee: "100", //包装费
-            mark_fee: "100", //加标费
-            cert_fee: "100", //证书费
-            delivery_fee: "100", //物流费
-            open_fee: "100", //开模费
-            diff_weight: "100", //工差重量
-            diff_price: "100", //工差金额
-            remark: "100",
-          };
+          if (this.status !== "1") {
+            this.ruleForm.wsm_code = this.sitem.wsm_code;
+
+            this.ruleForm = {
+              wsm_code: "",
+              supplier_code: "",
+              supplierNo: [],
+              num: "",
+              expecttime: "",
+              remark: "",
+            };
+          } else {
+            this.ruleForm = {
+              id: this.id,
+              good_price: "10",
+              nake_fee: "10",
+              wsm_code: this.sitem.wsm_code,
+              supplier_code: "",
+              supplierNo: [],
+              num: "10",
+              expecttime: "",
+              weight: "10",
+              now_god_price: "10",
+              teach_fee: "10",
+              pakge_fee: "10",
+              mark_fee: "10",
+              cert_fee: "10",
+              delivery_fee: "10",
+              open_fee: "10",
+              diff_weight: "10",
+              diff_price: "10",
+              remark: "10",
+            };
+          }
         }
       });
     },
@@ -277,17 +324,22 @@ export default {
     async submitForm() {
       await this.$refs.ruleForm.validate(async (valid) => {
         if (valid) {
+          let last = new Date(this.lasttime).valueOf();
+          let ch = new Date(this.ruleForm.expecttime).valueOf();
+          if (last < ch) {
+            this.$message.warning("预计入库时间不能大于最晚入库时间");
+            return;
+          }
           this.loading = true;
-          const list = JSON.parse(JSON.stringify(this.ruleForm));
-          list.supplierNo = list.supplierNo.toString();
-          const res = await asyncRequest.addFee(list);
-          // this.loading = false;
+          const item = JSON.parse(JSON.stringify(this.ruleForm));
+          item.supplierNo = item.supplierNo.toString();
+          const res = await asyncRequest.addFee(item);
           if (res && res.code === 0) {
             this.$notify.success({
               title: "添加成功",
               message: "",
             });
-            this.$emit("refresh"); //抛出事件给详情页。
+            this.$emit("refresh");
           } else if (res && res.code >= 100 && res.code <= 104) {
             await this.logout();
           } else {
@@ -301,27 +353,19 @@ export default {
     },
     // 获取详情
     async initData() {
-      console.log(this.sitem);
-      this.ruleForm.id = this.sitem.id;
-      const res = await asyncRequest.feeDetail({ id: this.ruleForm.id });
+      this.id = this.sitem.id;
+      const res = await asyncRequest.feeDetail({ id: this.id });
       if (res && res.code === 0 && res.data) {
-        console.log(res.data, "sitem");
-
-        let { wsm_supplier, expecttime, num, remark, wsm_supplierNo } =
+        let { expecttime, num, remark, supplier, supplier_name, lasttime } =
           res.data;
-        if (wsm_supplier) {
-          this.isDisabled = true;
-          this.ruleForm = {
-            supplierNo: wsm_supplier.split(","),
-            expecttime,
-            supplier_name: wsm_supplier, //供应商
-            supplier_code: wsm_supplierNo, //采购供应商编码
-            num, //最大采购数量
-            remark,
-          };
-        }
-        console.log(wsm_supplierNo.split(","));
-        console.log(this.ruleForm.supplierNo);
+        this.supplierName = supplier_name;
+        this.lasttime = lasttime;
+        this.ruleForm = {
+          supplierNo: supplier.split(","),
+          expecttime,
+          num,
+          remark,
+        };
       } else if (res && res.code >= 100 && res.code <= 104) {
         await this.logout();
       } else {
@@ -336,9 +380,8 @@ export default {
         this.ruleForm.supplierNo = [e.code];
       } else {
         this.ruleForm.supplierNo = [];
-        this.ruleForm.stock_code = [];
       }
-      this.$refs.ruleForm.validateField("supplierNo ");
+      this.$refs.ruleForm.validateField("supplierNo");
     },
   },
 };

+ 86 - 127
src/views/purchaseIn/storeManage/components/rules.js

@@ -1,153 +1,112 @@
-const validatePrice = (rule,value,callback) => {
-    if(value === "") {
-        callback(new Error("金额不能为空"));
-    }else{
-        if(isNaN(Number(value))){
-            callback(new Error("金额不能为字母或汉字"));
-        }else{
-            if(value <= 0 || value.length > 100){
-                callback(new Error("金额不能为零且长度不能大于100"))
-            }else{
-                callback();
-            }
+import {
+    isnumber,
+    isnumber2
+} from "@/utils/validate";
+
+const validatePrice = (rule, value, callback) => {
+    if (value === "") {
+        callback(new Error("不能为空"));
+    } else {
+        if (isnumber(value)) {
+            callback();
+        } else if (isnumber2(value)) {
+            callback();
+        } else {
+            callback(new Error("仅支持整数或两位小数!"))
         }
-        
     }
 };
-const validateWeight = (rule,value,callback) =>{
-    if(value === ""){
-        callback(new Error("重量不能为空"));
-    }else{
-        if(isNaN(Number(value))){
-            callback(new Error("重量不能为字母或者汉字"))
-        }else{
-            
-            if(value <= 0 || value.length > 10){
-                callback(new Error("重量不能为零且长度不能大于100"));
-            }else{
-                callback();
-            }
+const validateWeight = (rule, value, callback) => {
+    if (value === "") {
+        callback(new Error("不能为空"));
+    } else {
+        if (!isnumber(value)) {
+            callback(new Error("仅支持整数"))
+        } else {
+            callback();
         }
     }
 };
 export default {
-     good_price: {
-        required:true,
-        // message:"商品单价不能为空",
-        trigger:"blur",
-        validator:validatePrice,
-     }, 
-    nake_fee:{
-        required:true,
-        // message:"商品裸价不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    good_price: {
+        required: true,
+        trigger: "blur",
+        validator: validatePrice,
     },
-    in_stock_name:{
-        required:true,
-        message:"入库仓库不能为空",
+    nake_fee: {
+        required: true,
+        validator: validatePrice,
         trigger: "blur",
-        
     },
-    supplierNo :{
-        type:"array",
-        required:true,
-        message:"采购供应商不能为空",
+    supplierNo: {
+        type: "array",
+        required: true,
+        message: "采购供应商不能为空",
         trigger: "change",
-
     },
-    num:{
-        required:true,
-        // message:"采购数量上限不能为空",
-        validator:validateWeight,
-        trigger:"blur",
-    },
-    expecttime:{
-        required:true,
-        message:"预计入库时间不能为空",
-        trigger:'blur',
+    num: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
     },
-    good_weight:{
-        required:true,
-        // message:"商品重量不能为空",
-        validator:validateWeight,
-
-        trigger:"blur",
+    expecttime: {
+        required: true,
+        message: "预计入库时间不能为空",
+        trigger: 'blur',
     },
-    now_god_price:{
-        required:true,
-        // message:"实时金价不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    weight: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
     },
-    teach_fee:{
-        required:true,
-        // message:"工艺费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    now_god_price: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    pakge_fee:{
-        required:true,
-        // message:"包装费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    teach_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    mark_fee:{
-        required:true,
-        // message:"加标费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    pakge_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    cert_fee:{
-        required:true,
-        // message:"证书费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    mark_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    delivery_fee:{
-        required:true,
-        // message:"物流费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    cert_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    open_fee:{
-        required:true,
-        // message:"开模费不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    delivery_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    purchase_num:{
-        required:true,
-        // message:"采购数量不能为空",
-        validator:validateWeight,
-
-        trigger:"blur",
+    open_fee: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    diff_weight:{
-        required:true,
-        // message:"工差重量不能为空",
-        validator:validateWeight,
-
-        trigger:"blur",
+    diff_weight: {
+        required: true,
+        validator: validateWeight,
+        trigger: "blur",
     },
-    diff_price:{
-        required:true,
-        // message:"工差金额不能为空",
-        validator:validatePrice,
-
-        trigger:"blur",
+    diff_price: {
+        required: true,
+        validator: validatePrice,
+        trigger: "blur",
     },
-    remark:{
-        required:true,
-        message:"请填写备注",
-        trigger:"blur",
+    remark: {
+        required: true,
+        message: "请填写备注",
+        trigger: "blur",
     }
 }

+ 95 - 25
src/views/purchaseIn/storeManage/detail.vue

@@ -3,11 +3,10 @@
     <div
       v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
     >
-      <!-- 备货详情 -->
       <div class="tr" style="padding: 10px 0; height: 50px">
         <span class="fl" style="padding: 3px 0 0 3px">备货详情</span>
         <el-button
-          v-if="status === '0'"
+          v-if="status === '0' && powers.some((item) => item == '012')"
           type="primary"
           plain
           :size="'mini'"
@@ -18,10 +17,11 @@
           @click="statusConfirm('0', '取消备货申请')"
           plain
           :size="'mini'"
-          v-if="status === '1'"
+          v-if="status === '1' && powers.some((item) => item == '014')"
           >取消备货申请</el-button
         >
         <el-button
+          v-if="!(powers.some((item) => item === '015') && status === '3')"
           @click="statusConfirm('-1', '作废该条信息')"
           type="danger"
           plain
@@ -37,19 +37,12 @@
         @refresh="initData"
         v-if="newTime != ''"
       />
-
-      <!-- 添加采购反馈 -->
-      {{ status }}
       <el-collapse
         v-model="activeNames"
         @change="handleChange"
-        style="margin-top: 50px"
+        v-if="status != '0'"
       >
-        <el-collapse-item
-          title="采购反馈"
-          name="1"
-          v-if="status == '1' || true"
-        >
+        <el-collapse-item name="3" title="采购反馈" v-if="status !== '0'">
           <purchase-back
             :sitem="sitem"
             :id="queryId"
@@ -58,10 +51,40 @@
             @refresh="initData"
           />
         </el-collapse-item>
-        <el-collapse-item title="采购反馈审核" name="2"> </el-collapse-item>
+        <el-collapse-item
+          name="4"
+          title="反馈认同"
+          v-if="status === '2' && powers.some((item) => item === '025')"
+        >
+          <el-row style="padding: 0 0 20px 0">
+            <el-col :span="2" offset="20">
+              <el-button
+                :disabled="
+                  !(status === '2' && powers.some((item) => item === '025'))
+                "
+                type="primary"
+                size="small"
+                @click="feeChange('同意反馈', '3')"
+              >
+                同 意
+              </el-button>
+            </el-col>
+            <el-col :span="2">
+              <el-button
+                :disabled="
+                  !(status === '2' && powers.some((item) => item === '025'))
+                "
+                type="warning"
+                size="small"
+                @click="feeChange('拒绝反馈', '4')"
+              >
+                拒 绝
+              </el-button>
+            </el-col>
+          </el-row>
+        </el-collapse-item>
       </el-collapse>
     </div>
-
     <div v-else>
       <no-auth></no-auth>
     </div>
@@ -71,16 +94,15 @@
 import mixinPage from "@/mixins/elPaginationHandle";
 import resToken from "@/mixins/resToken";
 import asyncRequest from "@/apis/service/purchaseIn/storeManage";
-
 import addEdit from "./components/addEdit";
 import { mapGetters } from "vuex";
-import PurchaseBack from "./components/purchaseBack.vue"; //备货反馈
+import PurchaseBack from "./components/purchaseBack.vue";
 export default {
   name: "storeManageFlow",
   mixins: [mixinPage, resToken],
   components: {
     addEdit,
-    PurchaseBack, //备货反馈
+    PurchaseBack,
   },
   computed: {
     ...mapGetters(["tablebtnSize", "searchSize", "size"]),
@@ -98,12 +120,13 @@ export default {
   },
   data() {
     return {
-      newTime: "", //
+      activeNames: ["0", "1", "2", "3", "4"],
+      newTime: "",
       isDisabled: false,
-      queryId: "", //路由传来的id
+      queryId: "",
       loading: true,
-      sitem: null, //用来存储接口对象,传给表单读取
-      status: "", //用来存储当前状态
+      sitem: null,
+      status: "",
     };
   },
   mounted() {
@@ -111,9 +134,58 @@ export default {
     this.initData();
   },
   methods: {
-    // 初始化数据,把详情接数据传给表单
+    async feeChange(val, status) {
+      this.loading = true;
+      await this.$confirm(`确定要${val}?`, {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(async () => {
+          let res = {};
+          let model = {
+            id: this.sitem.id,
+            status,
+          };
+          if (status === "3") {
+            res = await asyncRequest.feeChange(model);
+            if (res && res.code === 0 && res.data) {
+              this.getNewTime();
+              this.$notify({
+                title: val + "成功",
+                message: "",
+                type: "success",
+              });
+              this.initData();
+            } else if (res && res.code >= 100 && res.code <= 104) {
+              await this.logout();
+            } else {
+            }
+          } else if (status === "4") {
+            res = await asyncRequest.feeChange(model);
+            if (res && res.code === 0 && res.data) {
+              this.getNewTime();
+              this.$notify({
+                title: val + "成功",
+                message: "",
+                type: "warning",
+              });
+              this.initData();
+            } else if (res && res.code >= 100 && res.code <= 104) {
+              await this.logout();
+            } else {
+              console.log("error");
+            }
+          } else {
+            await this.setStatus(status, message);
+          }
+        })
+        .catch(() => {
+          console.log("取消");
+        });
+      this.loading = false;
+    },
     async initData() {
-      console.log("detail");
       this.loading = true;
       const res = await asyncRequest.detail({ id: this.queryId });
       if (res && res.code === 0 && res.data) {
@@ -125,7 +197,6 @@ export default {
       } else {
         this.sitem = {};
         this.status = 0;
-        console.log("初始化数据失败,详情接口返回不正确");
       }
       this.loading = false;
     },
@@ -141,7 +212,6 @@ export default {
           if (status === "-1") {
             await this.deleteById(message);
           } else {
-            console.log("click 申请");
             this.isDisabled = true;
             await this.setStatus(status, message);
           }

+ 93 - 44
src/views/purchaseIn/storeManage/index.vue

@@ -27,7 +27,6 @@
           <div style="width: 100%">
             <el-row style="padding: 0 0 0 80px">
               <el-col :span="24">
-                <!-- 时间区间 -->
                 <el-col :span="4" style="width: 295px">
                   <period-date-picker
                     :start="parmValue.start"
@@ -37,45 +36,24 @@
                     @timeReturned="handleTime"
                   />
                 </el-col>
-                <!-- 商品名称 -->
-                <el-col :span="4" style="width: 150px; padding: 0 0 0 10px">
-                  <el-input
+                <el-col style="width: 130px; padding-left: 10px">
+                  <search-account
+                    :value="apply_name"
+                    :disabled="false"
+                    :is-detail="false"
                     :size="searchSize"
-                    placeholder="商品名称"
-                    v-model="parmValue.good_name"
-                    clearable
-                    @blur="searchList"
+                    :placeholder="'申请人'"
+                    @searchChange="handleResignName"
                   />
                 </el-col>
-                <!-- 备货申请编码 -->
-                <el-col :span="4" style="width: 195px; padding: 0 0 0 10px">
+                <el-col style="width: 110px; padding: 0 0 0 10px">
                   <el-input
+                    v-model="parmValue.status"
+                    placeholder="节点查询"
                     :size="searchSize"
-                    v-model="parmValue.bk_code"
-                    :maxlength="40"
-                    placeholder="备货申请编码"
-                    @blur="searchList"
                   />
                 </el-col>
-                <el-col :span="4" style="width: 54px">
-                  <el-button
-                    :size="searchSize"
-                    type="primary"
-                    class="fr"
-                    icon="el-icon-search"
-                    @click="searchList"
-                /></el-col>
 
-                <el-col :span="4" style="width: 66px">
-                  <el-button
-                    type="warning"
-                    class="fr"
-                    :size="searchSize"
-                    @click="restSearch"
-                  >
-                    重置
-                  </el-button>
-                </el-col>
                 <el-col :span="3" style="width: 66px; float: right">
                   <el-button
                     :size="searchSize"
@@ -103,6 +81,52 @@
                 </el-col>
               </el-col>
             </el-row>
+            <el-row>
+              <el-col style="width: 190px; padding-top: 10px">
+                <el-input
+                  :size="searchSize"
+                  placeholder="商品名称"
+                  v-model="parmValue.good_name"
+                  clearable
+                  @blur="searchList"
+                />
+              </el-col>
+              <el-col :span="4" style="width: 195px; padding: 10px 0 0 10px">
+                <el-input
+                  placeholder="商品编码"
+                  :size="searchSize"
+                  v-model="parmValue.good_code"
+                />
+              </el-col>
+              <el-col :span="4" style="width: 195px; padding: 10px 0 0 10px">
+                <el-input
+                  :size="searchSize"
+                  v-model="parmValue.bk_code"
+                  :maxlength="40"
+                  placeholder="申请编码"
+                  @blur="searchList"
+                />
+              </el-col>
+              <el-col :span="4" style="width: 54px; padding-top: 10px">
+                <el-button
+                  :size="searchSize"
+                  type="primary"
+                  class="fr"
+                  icon="el-icon-search"
+                  @click="searchList"
+              /></el-col>
+
+              <el-col :span="4" style="width: 66px; padding-top: 10px">
+                <el-button
+                  type="warning"
+                  class="fr"
+                  :size="searchSize"
+                  @click="restSearch"
+                >
+                  重置
+                </el-button>
+              </el-col>
+            </el-row>
           </div>
         </template>
         <template #status="{ scope }">
@@ -111,8 +135,10 @@
             :type="
               scope.row.status == '0'
                 ? 'warning'
-                : scope.row.status == '2'
+                : scope.row.status == '3'
                 ? 'success'
+                : scope.row.status == '4'
+                ? 'danger'
                 : ''
             "
             v-text="
@@ -181,18 +207,24 @@ export default {
         { id: "0", label: "待申请" },
         { id: "1", label: "待反馈" },
         { id: "2", label: "已反馈" },
+        { id: "3", label: "同意反馈" },
+        { id: "4", label: "拒绝反馈" },
       ],
       loading: true,
       showModel: false,
       isDetail: false,
       modelId: 0,
+      apply_name: [],
       parmValue: {
-        start: "", //开始日期
-        end: "", //结束日期
-        good_name: "", //商品名称
-        bk_code: "", //备库编号
-        page: 1, // 页码
-        size: 15, // 每页显示条数
+        good_code: "",
+        bk_code: "",
+        status: "",
+        apply_name: "",
+        start: "",
+        end: "",
+        good_name: "",
+        page: 1,
+        size: 15,
       },
       // 表格 - 数据
       tableData: [],
@@ -219,8 +251,8 @@ export default {
   methods: {
     // 选择时间操作
     handleTime(e) {
-      // console.log(e);
-      if (e && e.startTime && e.endTime) {
+      console.log(e);
+      if (e) {
         this.parmValue.start = e.startTime;
         this.parmValue.end = e.endTime;
       } else {
@@ -232,11 +264,15 @@ export default {
       } else if (this.parmValue.start === "" && this.parmValue.end === "") {
         this.searchList();
       }
+      console.log(this.parmValue);
     },
     // 重置参数
     restSearch() {
-      console.log("reset");
+      this.apply_name = [];
       this.parmValue = {
+        status: "",
+        apply_name: "",
+        good_code: "",
         good_name: "",
         start: "",
         end: "",
@@ -261,8 +297,15 @@ export default {
     // 列表搜索
     async searchList() {
       this.loading = true;
-      let { start, end, page, size, good_name, bk_code } = this.parmValue;
+      let { status, apply_name, bk_code, start, end, page, size, good_name } =
+        this.parmValue;
+      if ((start !== "" && end === "") || (start == "" && end != "")) {
+        this.$message.warning("开始时间和结束时间不能为空");
+        return;
+      }
       let model = {
+        status,
+        apply_name,
         start,
         end,
         page,
@@ -271,7 +314,6 @@ export default {
         bk_code,
       };
       const res = await asyncRequest.list(model);
-      console.log("index");
       if (res && res.code === 0 && res.data) {
         this.tableData = res.data.list;
         this.pageInfo.total = Number(res.data.count);
@@ -283,6 +325,13 @@ export default {
       }
       this.loading = false;
     },
+    async handleResignName(e) {
+      console.log(e);
+      this.parmValue.apply_name = e && e.id ? e.label : "";
+      this.apply_name = e && e.id ? [e.id] : [];
+      this.parmValue.page = 1;
+      await this.searchList();
+    },
   },
 };
 </script>

+ 102 - 24
src/views/sellOut/customer/index.vue

@@ -26,22 +26,59 @@
         <template #table-header="{}">
           <div style="width: 100%">
             <el-row style="padding: 0 0 0 80px">
-              <el-col :span="3" style="width: 66px">
+              <el-col
+                :span="3"
+                style="width: 95px"
+                v-if="parmValue.itemid !== ''"
+              >
+                <el-button icon="el-icon-arrow-left" :size="searchSize"
+                  >上一级</el-button
+                >
+              </el-col>
+              <el-col :span="3" style="width: 266px">
+                <el-input
+                  v-model="parmValue.companyName"
+                  :size="searchSize"
+                  @blur="
+                    pageInfo.curr = 1;
+                    parmValue.page = 1;
+                    searchList();
+                  "
+                  placeholder="客户名称"
+                  maxlength="250"
+                />
+              </el-col>
+              <el-col :span="3" style="width: 276px; padding: 0 0 0 10px">
+                <el-input
+                  v-model="parmValue.companyNo"
+                  :size="searchSize"
+                  @blur="
+                    pageInfo.curr = 1;
+                    parmValue.page = 1;
+                    searchList();
+                  "
+                  placeholder="客户编码"
+                  maxlength="250"
+                />
+              </el-col>
+              <el-col :span="4" style="width: 66px">
                 <el-button
-                  type="primary"
-                  icon="el-icon-arrow-left"
+                  type="warning"
+                  class="fr"
                   :size="searchSize"
-                  >上一页</el-button
+                  @click="restSearch"
                 >
+                  重置
+                </el-button>
               </el-col>
               <el-col :span="3" style="width: 66px; float: right">
                 <el-button
                   :size="searchSize"
                   type="primary"
                   style="float: right; margin-left: 5px"
-                  @click="getNext('add', false)"
+                  @click="searchList"
                 >
-                  新建
+                  
                 </el-button>
               </el-col>
             </el-row>
@@ -61,7 +98,7 @@
           <el-tooltip effect="dark" content="查看下一级" placement="top">
             <i
               class="el-icon-d-arrow-right tb-icon"
-              @click="getNext(scope.row.id)"
+              @click="getNext(scope.row.itemid)"
             ></i>
           </el-tooltip>
         </template>
@@ -116,13 +153,15 @@ export default {
         { id: "1", label: "启用" },
       ],
       statusList: statusList,
+      titleList: [],
       loading: true,
       showModel: false,
       isDetail: false,
       modelId: 0,
       parmValue: {
-        pid: "", //
-        name: "",
+        companyNo: "", //
+        companyName: "",
+        itemid: "",
         page: 1, // 页码
         size: 15, // 每页显示条数
       },
@@ -147,30 +186,67 @@ export default {
       // 表格 - 列参数
       columns: [
         {
-          prop: "id",
-          label: "ID",
-          width: "80px",
+          prop: "companyNo",
+          label: "客户编码",
+          width: "125px",
+        },
+        {
+          prop: "companyName",
+          label: "客户名称",
+          "min-width": "140px",
         },
         {
-          prop: "name",
-          label: "公司编码",
+          prop: "parent",
+          label: "父级集团",
+          width: "100px",
         },
         {
-          prop: "name",
-          label: "公司名称",
+          prop: "branch",
+          label: "一级",
+          width: "100px",
+        },
+
+        {
+          prop: "middle",
+          label: "二级",
+          width: "100px",
+        },
+        {
+          prop: "country",
+          label: "三级",
+          width: "100px",
+        },
+
+        {
+          prop: "status",
+          label: "状态",
+          _slot_: "status",
+          width: "70px",
         },
         {
-          prop: "level",
-          label: "层级",
+          prop: "creater",
+          label: "创建人",
+          width: "70px",
         },
 
+        {
+          prop: "addtime",
+          label: "创建时间",
+          sortable: true,
+          width: "140px",
+        },
+        // {
+        //   prop: "area",
+        //   label: "大区",
+        //   width: "100px",
+        // },
         {
           prop: "",
           label: "操作",
           fixed: "right",
           _noset_: true,
           _slot_: "operation",
-          width: "150px",
+          width: "50px",
         },
       ],
     };
@@ -208,8 +284,9 @@ export default {
     },
     restSearch() {
       this.parmValue = {
-        pid: "", //
-        name: "",
+        companyNo: "", //
+        companyName: "",
+        itemid: "",
         page: 1, // 页码
         size: 15, // 每页显示条数
       };
@@ -223,15 +300,16 @@ export default {
     getNext(id) {
       this.pageInfo.curr = 1;
       this.parmValue.page = 1;
-      this.parmValue.pid = id;
-      this.parmValue.name = "";
+      this.parmValue.itemid = id;
+      this.parmValue.companyNo = "";
+      this.parmValue.companyName = "";
       this.searchList();
     },
     async searchList() {
       this.loading = true;
       const res = await asyncRequest.list(this.parmValue);
       if (res && res.code === 0 && res.data) {
-        this.tableData = res.data.list;
+        this.tableData = res.data.item;
         // console.log(this.tableData);
         this.pageInfo.total = Number(res.data.count);
       } else if (res && res.code >= 100 && res.code <= 104) {

+ 12 - 117
src/views/sellOut/goodsAnomaly/addEdit.vue

@@ -3,7 +3,7 @@
     :title="title"
     :center="true"
     align="left"
-    top="5vh"
+    top="15vh"
     width="700px"
     @close="closeModel"
     :close-on-click-modal="false"
@@ -13,7 +13,7 @@
     element-loading-spinner="el-icon-loading"
     element-loading-background="rgba(0, 0, 0, 0.8)"
   >
-    <el-card>
+    <el-card style="margin:-20px 0 0 0;">
       <el-row :gutter="10">
         <el-col :span="24">
           <el-form
@@ -21,11 +21,11 @@
             status-icon
             :rules="rulesThis"
             ref="ruleForm"
-            label-width="110px"
+            label-width="140px"
             class="demo-ruleForm"
           >
             <el-form-item
-              label="异常原因"
+              label="退货验收异常原因"
               prop="result"
               v-if="id === 'add' || (isDetail ? true : true)"
             >
@@ -47,32 +47,6 @@
                 :disabled="isDetail"
               ></el-input>
             </el-form-item>
-
-            <!-- <el-form-item label="姓名" prop="fullName">
-              <el-input
-                v-model="ruleForm.fullName"
-                :disabled="isDetail"
-              ></el-input>
-            </el-form-item> -->
-            <!-- <el-form-item label="手机号" prop="tel">
-              <el-input v-model="ruleForm.tel" :disabled="isDetail"></el-input>
-            </el-form-item> -->
-            <!-- <el-form-item label="密码" prop="password" v-if="id === 'add'">
-              <el-input
-                type="password"
-                placeholder="密码"
-                :maxlength="20"
-                v-model="ruleForm.password"
-              ></el-input>
-            </el-form-item> -->
-            <!-- <el-form-item label="确认密码" prop="password2" v-if="id === 'add'">
-              <el-input
-                type="password"
-                placeholder="再次输入密码"
-                :maxlength="20"
-                v-model="ruleForm.password2"
-              ></el-input>
-            </el-form-item> -->
           </el-form>
         </el-col>
         <el-col :span="24" style="text-align: right">
@@ -90,93 +64,16 @@
    <script>
 import asyncRequest from "@/apis/service/sellOut/goodsAnomaly";
 import resToken from "@/mixins/resToken";
-import {
-  isnumber,
-  isMobile,
-  validEmail,
-  isAlphanumeric,
-  isChinese,
-  isEmoticon,
-  validAlphabets,
-} from "@/utils/validate";
 export default {
   name: "goodsAnomaly",
   props: ["showModel", "id", "isDetail", "sitem"],
   mixins: [resToken],
   data() {
-    const validateusername = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("账号不能为空!"));
-      } else {
-        if (value.length < 6 || value.length > 18) {
-          callback(new Error("账号规则为6~18位数字与字母组合!"));
-        } else {
-          if (isnumber(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (validAlphabets(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (!isAlphanumeric(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatename = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("真实姓名不能为空!"));
-      } else {
-        if (value.length < 2 || value.length > 12) {
-          callback(new Error("真实姓名规则为2~12位汉字!"));
-        } else {
-          if (!isChinese(value)) {
-            console.log(9999);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else if (isEmoticon(value)) {
-            console.log(2345);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatemobile = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("手机号不能为空!"));
-      } else {
-        if (!isMobile(value)) {
-          callback(new Error("手机号格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
-
-    const validateEmail = (rule, value, callback) => {
-      if (value === "") {
-        callback();
-      } else {
-        if (!validEmail(value)) {
-          callback(new Error("邮箱格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
     return {
       loading: false,
-      title: "添加账号",
+      title: "",
       showModelThis: this.showModel,
       ruleForm: {
-        // username: "", // 账号
-        // name: "", // 真实姓名
-        // mobile: "",
-        // email: "",
-        // role_id: "",
-        // status: "1",
-        // item: [],
         result: "", //入库验收异常原因
         result_desc: "", //入库异常备注
       },
@@ -186,7 +83,7 @@ export default {
           {
             required: true,
             trigger: "blur",
-            message: "入库异常原因不能为空",
+            message: "退货验收异常原因不能为空",
           },
         ],
 
@@ -194,7 +91,7 @@ export default {
           {
             required: true,
             trigger: "blur",
-            message: "入库异常备注不能为空",
+            message: "备注不能为空",
           },
         ],
       },
@@ -219,23 +116,19 @@ export default {
     },
     async initForm() {
       this.loading = true;
-      // await this.getRole();
       if (this.id === "add") {
-        this.title = "添加异常原因";
+        this.title = "添加退货验收异常原因";
         this.rulesThis = this.rules;
         await this.resetForm();
       } else {
         if (this.isDetail) {
-          this.title = "异常原因详情";
+          this.title = "退货验收异常原因详情";
           this.rulesThis = {};
         } else {
-          this.title = "修改异常原因";
+          this.title = "修改退货验收异常原因";
           this.rulesThis = this.rules;
         }
-        // console.log("修改异常");
-        console.log(this.id);
         await this.resetForm();
-        // console.log(this.sitem);
         await this.initData();
       }
       this.loading = false;
@@ -278,6 +171,7 @@ export default {
           const model = {
             result: result || "", //入库验收异常原因
             result_desc: result_desc || "", //入库异常备注
+            type:"3",
             id: this.id,
           };
           let res = {};
@@ -285,6 +179,7 @@ export default {
             delete model["id"];
             res = await asyncRequest.add(model);
           } else {
+            delete model["type"];
             console.log("update");
             res = await asyncRequest.update(model);
             console.log(res);

+ 6 - 4
src/views/sellOut/goodsAnomaly/index.vue

@@ -167,6 +167,7 @@ export default {
       modelId: 0,
       parmValue: {
         status: "", //
+        type: "3",
         page: 1, // 页码
         size: 15, // 每页显示条数
       },
@@ -191,13 +192,13 @@ export default {
       // 表格 - 列参数
       columns: [
         {
-          prop: "id",
-          label: "序列号",
+         prop: "result_code",
+          label: "原因编号",
           width: "80px",
         },
         {
           prop: "result",
-          label: "入库验收异常原因",
+          label: "退货验收异常原因",
         },
         {
           prop: "result_desc",
@@ -258,7 +259,7 @@ export default {
         });
     },
     restSearch() {
-           // 表格 - 分页
+      // 表格 - 分页
       this.pageInfo = {
         size: 15,
         curr: 1,
@@ -266,6 +267,7 @@ export default {
       };
       this.parmValue = {
         status: "", //
+        type: "3",
         page: 1, // 页码
         size: 15, // 每页显示条数
       };

+ 10 - 85
src/views/sellOut/goodsBack/addEdit.vue

@@ -3,7 +3,7 @@
     :title="title"
     :center="true"
     align="left"
-    top="5vh"
+    top="15vh"
     width="700px"
     @close="closeModel"
     :close-on-click-modal="false"
@@ -13,7 +13,7 @@
     element-loading-spinner="el-icon-loading"
     element-loading-background="rgba(0, 0, 0, 0.8)"
   >
-    <el-card>
+    <el-card style="margin: -20px 0 0 0">
       <el-row :gutter="10">
         <el-col :span="24">
           <el-form
@@ -64,93 +64,16 @@
    <script>
 import asyncRequest from "@/apis/service/sellOut/goodsBack";
 import resToken from "@/mixins/resToken";
-import {
-  isnumber,
-  isMobile,
-  validEmail,
-  isAlphanumeric,
-  isChinese,
-  isEmoticon,
-  validAlphabets,
-} from "@/utils/validate";
 export default {
   name: "goodsBack",
   props: ["showModel", "id", "isDetail", "sitem"],
   mixins: [resToken],
   data() {
-    const validateusername = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("账号不能为空!"));
-      } else {
-        if (value.length < 6 || value.length > 18) {
-          callback(new Error("账号规则为6~18位数字与字母组合!"));
-        } else {
-          if (isnumber(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (validAlphabets(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else if (!isAlphanumeric(value)) {
-            callback(new Error("账号规则为6~18位数字与字母组合!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatename = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("真实姓名不能为空!"));
-      } else {
-        if (value.length < 2 || value.length > 12) {
-          callback(new Error("真实姓名规则为2~12位汉字!"));
-        } else {
-          if (!isChinese(value)) {
-            console.log(9999);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else if (isEmoticon(value)) {
-            console.log(2345);
-            callback(new Error("真实姓名规则为2~12位汉字!"));
-          } else {
-            callback();
-          }
-        }
-      }
-    };
-    const validatemobile = (rule, value, callback) => {
-      if (value === "") {
-        callback(new Error("手机号不能为空!"));
-      } else {
-        if (!isMobile(value)) {
-          callback(new Error("手机号格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
-
-    const validateEmail = (rule, value, callback) => {
-      if (value === "") {
-        callback();
-      } else {
-        if (!validEmail(value)) {
-          callback(new Error("邮箱格式不正确!"));
-        } else {
-          callback();
-        }
-      }
-    };
     return {
       loading: false,
       title: "添加账号",
       showModelThis: this.showModel,
       ruleForm: {
-        // username: "", // 账号
-        // name: "", // 真实姓名
-        // mobile: "",
-        // email: "",
-        // role_id: "",
-        // status: "1",
-        // item: [],
         result: "", //入库验收异常原因
         result_desc: "", //入库异常备注
       },
@@ -160,7 +83,7 @@ export default {
           {
             required: true,
             trigger: "blur",
-            message: "入库异常原因不能为空",
+            message: "退换货原因不能为空",
           },
         ],
 
@@ -168,7 +91,7 @@ export default {
           {
             required: true,
             trigger: "blur",
-            message: "入库异常备注不能为空",
+            message: "备注不能为空",
           },
         ],
       },
@@ -195,15 +118,15 @@ export default {
       this.loading = true;
       // await this.getRole();
       if (this.id === "add") {
-        this.title = "添加异常原因";
+        this.title = "添加退换货原因";
         this.rulesThis = this.rules;
         await this.resetForm();
       } else {
         if (this.isDetail) {
-          this.title = "异常原因详情";
+          this.title = "退换货原因详情";
           this.rulesThis = {};
         } else {
-          this.title = "修改异常原因";
+          this.title = "修改退换货原因";
           this.rulesThis = this.rules;
         }
         // console.log("修改异常");
@@ -252,14 +175,16 @@ export default {
           const model = {
             result: result || "", //入库验收异常原因
             result_desc: result_desc || "", //入库异常备注
+            type: "2",
             id: this.id,
           };
           let res = {};
           if (this.id === "add") {
             delete model["id"];
+
             res = await asyncRequest.add(model);
           } else {
-            console.log("update");
+            delete model["type"];
             res = await asyncRequest.update(model);
             console.log(res);
           }

+ 6 - 4
src/views/sellOut/goodsBack/index.vue

@@ -167,6 +167,7 @@ export default {
       modelId: 0,
       parmValue: {
         status: "", //
+        type: "2",
         page: 1, // 页码
         size: 15, // 每页显示条数
       },
@@ -191,17 +192,17 @@ export default {
       // 表格 - 列参数
       columns: [
         {
-          prop: "id",
-          label: "序列号",
+          prop: "result_code",
+          label: "原因编号",
           width: "80px",
         },
         {
           prop: "result",
-          label: "入库验收异常原因",
+          label: "退换货原因",
         },
         {
           prop: "result_desc",
-          label: "异常描述",
+          label: "描述",
         },
         {
           prop: "status",
@@ -260,6 +261,7 @@ export default {
     restSearch() {
       this.parmValue = {
         status: "", //
+        type: "2",
         page: 1, // 页码
         size: 15, // 每页显示条数
       };

+ 1 - 0
src/views/stock/allot/components/Inspection-table.vue

@@ -203,6 +203,7 @@ export default {
       const res = await asyncRequest.resultlist({
         page: 1,
         size: 100,
+        type:"1",
         status: "",
       });
       if (res && res.code === 0 && res.data) {

+ 5 - 3
src/views/stock/allot/components/goStock-audit.vue

@@ -83,10 +83,12 @@ export default {
       if (value === "") {
         callback(new Error("物流费用不能为空!"));
       } else {
-        if (!isnumber2(value + "")) {
-          callback(new Error("物流费用仅支持整数及两位小数!"));
-        } else {
+         if (isnumber(value)) {
+          callback();
+        } else if (isnumber2(value)) {
           callback();
+        } else {
+          callback(new Error("物流费用仅支持整数及两位小数!"));
         }
       }
     };

+ 19 - 7
src/views/stock/stockWarning/addEdit.vue

@@ -61,29 +61,41 @@
    <script>
 import asyncRequest from "@/apis/service/stock/stockWarning";
 import resToken from "@/mixins/resToken";
+import { isnumber } from "@/utils/validate";
 export default {
   name: "stockWarning",
   props: ["showModel", "row", "isDetail", "sitem"],
   mixins: [resToken],
   data() {
+    const validateWarn_stock = (rule, value, callback) => {
+      if (value === "") {
+        callback(new Error("预计数量不能为空!"));
+      } else {
+        if (isnumber(value)) {
+          callback();
+        } else {
+          callback(new Error("预计数量仅支持数字!"));
+        }
+      }
+    };
     return {
       title: "库存预警修改",
-      companyCode: "", 
+      companyCode: "",
       loading: false,
       showModelThis: this.showModel,
       ruleForm: {
-        good_code: "", 
-        wsm_code: "", 
-        wsm_name: "", 
-        good_name: "", 
-        warn_stock: "", 
+        good_code: "",
+        wsm_code: "",
+        wsm_name: "",
+        good_name: "",
+        warn_stock: "",
       },
       rulesThis: this.rules,
       rules: {
         warn_stock: [
           {
             required: true,
-            message: "预计数量不能为空",
+            validator: validateWarn_stock,
             trigger: "blur",
           },
         ],

+ 2 - 7
src/views/stock/survey/index.vue

@@ -231,9 +231,7 @@ export default {
         this.parmValue.stock_code = [];
         this.stock_code = "";
       }
-      if (this.parmValue.supplier_code && this.parmValue.stock_code) {
-        this.stockList();
-      }
+      this.stockList();
     },
     // 选择供应商
     selectSupplier(e) {
@@ -248,6 +246,7 @@ export default {
         this.supplier_code = "";
         this.isDisabled = true;
       }
+      this.stockList();
     },
 
     restSearch() {
@@ -270,16 +269,12 @@ export default {
     },
     //获取表格上方的卡片数据
     async stockList() {
-      console.log(this.parmValue);
       let { supplier_code, stock_code } = this.parmValue;
-      console.log(this.parmValue);
       let model = {
         supplierNo: supplier_code ? supplier_code.toString() : "",
         wsm_code: stock_code ? stock_code.toString() : "",
       };
-      console.log(model);
       const res = await asyncRequest.stockLisk(model);
-      console.log(res.data == "");
       if (res.data == "") {
         for (let i = 0; i <= this.stock_list.length - 1; i++) {
           this.stock_list[i].endVal = [];

Some files were not shown because too many files changed in this diff