戴艳蓉 3 年 前
コミット
27b5a74ac4
34 ファイル変更4748 行追加134 行削除
  1. 0 0
      dist/static/js/chunk-d22532c8.01893502.js
  2. 27 0
      src/apis/service/sellOut/salesOrder/detail.js
  3. 18 0
      src/apis/service/sellOut/salesOrder/index.js
  4. 1 1
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-addEdit-form.vue
  5. 120 89
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-check-form.vue
  6. 4 4
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-error-model.vue
  7. 1 1
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-model.vue
  8. 14 3
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-record-form.vue
  9. 21 11
      src/views/purchaseIn/purchaseOrder/components/wsm-in-order-return-form.vue
  10. 1 5
      src/views/purchaseIn/purchaseOrder/detail.vue
  11. 21 12
      src/views/purchaseIn/purchaseOrder/stockInDetail.vue
  12. 48 0
      src/views/sellOut/customer/index.vue
  13. 65 0
      src/views/sellOut/salesOrder/columns.js
  14. 374 0
      src/views/sellOut/salesOrder/components/addEdit-form.vue
  15. 71 0
      src/views/sellOut/salesOrder/components/addEdit-model.vue
  16. 100 0
      src/views/sellOut/salesOrder/components/columns-table.js
  17. 86 0
      src/views/sellOut/salesOrder/components/columns.js
  18. 225 0
      src/views/sellOut/salesOrder/components/purchase-order-addEdit copy.vue
  19. 225 0
      src/views/sellOut/salesOrder/components/purchase-order-addEdit.vue
  20. 466 0
      src/views/sellOut/salesOrder/components/purchase-order-addedit-model.vue
  21. 262 0
      src/views/sellOut/salesOrder/components/purchase-order-in-table.vue
  22. 119 0
      src/views/sellOut/salesOrder/components/rules.js
  23. 311 0
      src/views/sellOut/salesOrder/components/wsm-in-order-addEdit-form.vue
  24. 335 0
      src/views/sellOut/salesOrder/components/wsm-in-order-check-form.vue
  25. 413 0
      src/views/sellOut/salesOrder/components/wsm-in-order-error-model.vue
  26. 115 0
      src/views/sellOut/salesOrder/components/wsm-in-order-model.vue
  27. 354 0
      src/views/sellOut/salesOrder/components/wsm-in-order-record-form.vue
  28. 236 0
      src/views/sellOut/salesOrder/components/wsm-in-order-return-form.vue
  29. 121 0
      src/views/sellOut/salesOrder/detail.vue
  30. 427 0
      src/views/sellOut/salesOrder/index.vue
  31. 159 0
      src/views/sellOut/salesOrder/stockInDetail.vue
  32. 0 0
      src/views/sellOut/salesOrder/销售订单管理
  33. 5 5
      src/views/stock/allot/components/Inspection-table.vue
  34. 3 3
      src/views/stock/allot/components/addForm.vue

ファイルの差分が大きいため隠しています
+ 0 - 0
dist/static/js/chunk-d22532c8.01893502.js


+ 27 - 0
src/apis/service/sellOut/salesOrder/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/sellOut/salesOrder/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 + "salelist", 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),
+};
+   

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

@@ -235,7 +235,7 @@ export default {
 
     async initForm() {
       this.loading = true;
-      console.log(this.sitem);
+      // console.log(this.sitem);
       await this.resetForm();
       this.loading = false;
     },

+ 120 - 89
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-check-form.vue

@@ -23,77 +23,90 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="正常入库数量">
+              <el-form-item label="正常入库数量" prop="wsm_num">
                 <el-input
                   placeholder="正常入库数量"
-                  v-model="ruleForm.send_num"
+                  :disabled="status !== '2'"
+                  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-form-item label="异常补发数量" prop="reissue_num">
                 <el-input
                   placeholder="异常补发数量"
-                  :disabled="status !== '1'"
-                  v-model="ruleForm.wsm_num"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.reissue_num"
                   maxlength="100"
                 >
                 </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="异常退货数量" prop="wsm_num">
+              <el-form-item label="异常退货数量" prop="return_num">
                 <el-input
                   placeholder="异常退货数量"
-                  :disabled="status !== '1'"
-                  v-model="ruleForm.wsm_num"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.return_num"
                   maxlength="100"
                 >
                 </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="退货联系人" prop="wsm_num">
+              <el-form-item label="收件联系人" prop="contactor">
                 <el-input
-                  placeholder="退货联系人"
-                  :disabled="status !== '1'"
-                  v-model="ruleForm.wsm_num"
+                  placeholder="收件联系人"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.contactor"
                   maxlength="100"
                 >
                 </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="退货联系电话" prop="wsm_num">
+              <el-form-item label="收件联系电话" prop="mobile">
                 <el-input
-                  placeholder="退货联系电话"
-                  :disabled="status !== '1'"
-                  v-model="ruleForm.wsm_num"
+                  placeholder="收件联系电话"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.mobile"
                   maxlength="100"
                 >
                 </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="退货地址" prop="wsm_num">
+              <el-form-item label="收件地址" prop="addr">
                 <el-input
-                  placeholder="退货地址"
+                  placeholder="收件地址"
                   type="textarea"
-                  :disabled="status !== '1'"
-                  v-model="ruleForm.remark"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.addr"
                   maxlength="250"
                   :autosize="{ minRows: 3, maxRows: 3 }"
                 />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="异常处理备注" prop="wsm_num">
+              <el-form-item label="异常处理备注" prop="error_remark">
                 <el-input
                   type="textarea"
                   placeholder="异常处理备注"
-                  :disabled="status !== '1'"
+                  :disabled="status !== '2'"
+                  v-model="ruleForm.error_remark"
+                  maxlength="250"
+                  :autosize="{ minRows: 3, maxRows: 3 }"
+                />
+              </el-form-item>
+            </el-col>
+              <el-col :span="24" v-if="ruleForm.remark">
+              <el-form-item label="驳回理由" prop="remark">
+                <el-input
+                  type="textarea"
+                  placeholder="驳回理由"
+                  disabled
                   v-model="ruleForm.remark"
                   maxlength="250"
                   :autosize="{ minRows: 3, maxRows: 3 }"
@@ -101,8 +114,10 @@
               </el-form-item>
             </el-col>
 
-            <el-col :span="24" style="text-align: right">
-              <el-button type="primary" @click="submitForm">保 存 </el-button>
+            <el-col :span="24" style="text-align: right; padding: 0 0 10px 0">
+              <el-button :size="'mini'" v-if="status === '2' && powers.some((item) => item == '030')" type="primary" @click="submitForm"
+                >保 存
+              </el-button>
             </el-col>
           </el-row>
         </el-form>
@@ -113,12 +128,10 @@
 <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";
+import { isMobile, isLicense, isnumber, isPhone } from "@/utils/validate";
 export default {
   name: "wsmInOrderAdd",
   props: ["id", "sitem", "newTime", "modelSitem"],
-  components: { wsmInOrderErrorModel },
   mixins: [resToken],
   computed: {
     powers() {
@@ -145,7 +158,17 @@ export default {
         }
       }
     };
-
+    const validatemobile = (rule, value, callback) => {
+      if (value !== "") {
+        if (isPhone(value) || isMobile(value)) {
+          callback();
+        } else {
+          callback(new Error("联系电话格式不正确!"));
+        }
+      } else {
+        callback(new Error("请输入收货联系电话!"));
+      }
+    };
     return {
       loading: true,
       status: "",
@@ -154,37 +177,54 @@ export default {
       modelitem: null,
       modelId: "",
       ruleForm: {
-        order_num: "",
+        wsm_in_code: "",
+        send_num: "",
+        wsm_num: "",
+        reissue_num: "",
+        return_num: "",
+        contactor: "",
+        addr: "",
+        mobile: "",
+        error_remark: "",
+        remark: "",
       },
       rules: {
-        order_num: {
+        wsm_num: {
           required: true,
           validator: validateWeight,
           trigger: "blur",
         },
-      },
-      columns: [
-        {
-          prop: "num",
-          label: "异常数量",
+        reissue_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
+        },
+        return_num: {
+          required: true,
+          validator: validateWeight,
+          trigger: "blur",
         },
-        {
-          prop: "error_code_name",
-          label: "异常原因",
+        contactor: {
+          required: true,
+          message: "收件联系人不能为空!",
+          trigger: "blur",
+        },
+        addr: {
+          required: true,
+          message: "收件地址不能为空!",
+          trigger: "blur",
         },
-        {
-          prop: "error_img",
-          label: "异常图片",
+        mobile: {
+          required: true,
+          validator: validatemobile,
+          trigger: "blur",
         },
-        {
-          prop: "remark",
-          label: "异常备注",
+        error_remark: {
+          required: true,
+          message: "异常处理备注不能为空!",
+          trigger: "blur",
         },
-      ],
-      tableForm: {
-        error_list: [],
       },
-      tableRules: {},
     };
   },
   watch: {
@@ -208,27 +248,36 @@ export default {
       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;
+          const { wsm_in_code, status, send_num } = this.sitem;
+          const {
+            return_contactor,
+            return_addr,
+            return_mobile,
+            wsm_num,
+            reissue_num,
+            return_num,
+            error_remark,
+            remark,
+          } = this.sitem.return;
+
           this.status = status;
           this.ruleForm = {
-            send_num: send_num || "",
-            wsm_num: wsm_num || "",
+            wsm_in_code: wsm_in_code || "",
+            send_num: send_num || "0",
+            wsm_num: wsm_num || "0",
+            reissue_num: reissue_num || "0",
+            return_num: return_num || "0",
+            contactor: return_contactor || "",
+            addr: return_addr || "",
+            mobile: return_mobile || "",
+            error_remark: error_remark || "",
+            remark: remark || "",
           };
         }
         if (this.$refs.tableForm) {
@@ -254,43 +303,25 @@ export default {
       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),
+          let item = JSON.parse(JSON.stringify(this.ruleForm));
+          let rnum = parseInt(item.return_num),
             wnum = parseInt(item.wsm_num),
-            errornum = 0,
-            list = [];
+            anum = parseInt(item.send_num);
 
-          if (snum === wnum && this.tableForm.error_list.length > 0) {
-            this.$message.warning("正常数量与发货数量一致,无需填写异常原因!");
+          if (rnum + wnum !== anum) {
+            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);
+          delete item["send_num"];
+          const res = await asyncRequest.orderinreturn(item);
           this.loading = false;
           if (res && res.code === 0) {
             this.$notify.success({
-              title: "添加成功",
+              title: "提交成功",
               message: "",
             });
             this.$emit("refresh"); //抛出事件给详情页。

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

@@ -130,7 +130,7 @@ export default {
       ruleForm: {
         num: "",
         error_code: "",
-        error_code_name: "",
+        error_msg: "",
         error_img: [],
         remark: "",
       },
@@ -202,7 +202,7 @@ export default {
     //异常原因筛选
     elSelectChange(e) {
       let oindex = this.options.findIndex((v) => v.result_code === e);
-      this.ruleForm.error_code_name =
+      this.ruleForm.error_msg =
         oindex !== -1 ? this.options[oindex].result : "";
     },
     imgClose(index) {
@@ -231,13 +231,13 @@ export default {
         if (this.$refs.ruleForm) {
           this.$refs.ruleForm.resetFields();
           this.$refs.ruleForm.clearValidate();
-          const { num, error_code, error_code_name, error_img, remark, index } =
+          const { num, error_code, error_msg, error_img, remark, index } =
             this.sitem;
           this.ruleForm = {
             num: num || "",
             index: this.id,
             error_code: error_code || "",
-            error_code_name: error_code_name || "",
+            error_msg: error_msg || "",
             error_img: error_img || [],
             remark: remark || "",
           };

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

@@ -44,7 +44,7 @@ export default {
     return {
       showModelThis: this.showModel,
       loading: false,
-      title: "添加账号",
+      title: "",
       sitem: null,
       newTime: "",
     };

+ 14 - 3
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-record-form.vue

@@ -86,7 +86,11 @@
                 </template>
               </el-table-column>
             </template>
-            <el-table-column fixed="right" width="80">
+            <el-table-column
+              fixed="right"
+              width="80"
+              v-if="status === '1' && powers.some((item) => item == '029')"
+            >
               <template slot="header" slot-scope="scope">
                 <span>操作</span>
                 <el-tooltip
@@ -116,7 +120,11 @@
         </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
+          type="primary"
+          :size="'mini'"
+          v-if="status === '1' && powers.some((item) => item == '029')"
+          @click="submitForm"
           >保 存
         </el-button>
       </el-col>
@@ -183,7 +191,7 @@ export default {
           label: "异常数量",
         },
         {
-          prop: "error_code_name",
+          prop: "error_msg",
           label: "异常原因",
         },
         {
@@ -250,6 +258,9 @@ export default {
           this.$refs.tableForm.clearValidate();
 
           const { checkinfo } = this.sitem;
+          checkinfo.map((v) => {
+            v.error_img = v.error_img.split(",");
+          });
           this.tableForm = {
             error_list: checkinfo || [],
           };

+ 21 - 11
src/views/purchaseIn/purchaseOrder/components/wsm-in-order-return-form.vue

@@ -26,6 +26,9 @@
               <el-form-item label="物流公司" prop="post_company">
                 <el-input
                   placeholder="物流公司"
+                  :disabled="
+                    !(status === '6' && powers.some((item) => item == '031'))
+                  "
                   v-model="ruleForm.post_company"
                   maxlength="100"
                 >
@@ -36,6 +39,9 @@
               <el-form-item label="物流单号" prop="post_code">
                 <el-input
                   placeholder="物流单号"
+                  :disabled="
+                    !(status === '6' && powers.some((item) => item == '031'))
+                  "
                   v-model="ruleForm.post_code"
                   maxlength="100"
                 >
@@ -43,7 +49,11 @@
               </el-form-item>
             </el-col>
             <el-col :span="24" style="text-align: right">
-              <el-button type="primary" :size="'mini'" @click="submitForm"
+              <el-button
+                type="primary"
+                v-if="status === '6' && powers.some((item) => item == '031')"
+                :size="'mini'"
+                @click="submitForm"
                 >保 存
               </el-button>
             </el-col>
@@ -167,12 +177,14 @@ export default {
         if (this.$refs.ruleForm) {
           this.$refs.ruleForm.resetFields();
           this.$refs.ruleForm.clearValidate();
-          // const { send_num, wsm_num, status } = this.sitem;
-          // this.status = status;
+          const { wsm_in_code, status } = this.sitem;
+          const { return_num, post_code, post_company } = this.sitem.return;
+          this.status = status;
           this.ruleForm = {
-            return_num: "",
-            post_company: "",
-            post_code: "",
+            wsm_in_code: wsm_in_code || "",
+            return_num: return_num || "0",
+            post_company: post_company || "",
+            post_code: post_code || "",
           };
         }
       });
@@ -185,16 +197,14 @@ export default {
           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);
+          const res = await asyncRequest.returnsend(item);
           this.loading = false;
           if (res && res.code === 0) {
             this.$notify.success({
-              title: "保存成功",
+              title: "提交成功",
               message: "",
             });
-            this.$emit("refresh"); //抛出事件给详情页。
+            this.$emit("refresh");
           } else if (res && res.code >= 100 && res.code <= 104) {
             await this.logout();
           } else {

+ 1 - 5
src/views/purchaseIn/purchaseOrder/detail.vue

@@ -77,15 +77,11 @@ export default {
     };
   },
   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();
     },

+ 21 - 12
src/views/purchaseIn/purchaseOrder/stockInDetail.vue

@@ -5,7 +5,7 @@
       v-if="powers && powers.length > 0 && powers.some((item) => item == '001')"
     >
       <div>{{ status }}------{{ powers }}</div>
-      <el-collapse v-model="activeNames" @change="handleChange">
+      <el-collapse v-model="activeNames">
         <el-collapse-item title="入库单发货信息" name="0">
           <wsm-in-order-addEdit-form
             v-if="newTime !== ''"
@@ -13,27 +13,35 @@
             :newTime="newTime"
             :modelSitem="{}"
             :sitem="sitem"
-            @refresh="(showModelThis = false), $emit('refresh')"
+            @refresh="initData()"
           />
         </el-collapse-item>
-        <el-collapse-item title="入库验收" name="2">
+        <el-collapse-item
+          title="入库验收"
+          name="2"
+          v-if="status !== '' && status !== '0'"
+        >
           <wsm-in-order-record-form
             v-if="newTime !== ''"
             :id="queryId"
             :newTime="newTime"
             :modelSitem="{}"
             :sitem="sitem"
-            @refresh="(showModelThis = false), $emit('refresh')"
+            @refresh="initData()"
           />
         </el-collapse-item>
-        <el-collapse-item title="入库验收审核" name="3">
+        <el-collapse-item
+          title="入库验收审核"
+          v-if="status !== '' && status !== '0' && status !== '1'"
+          name="3"
+        >
           <wsm-in-order-check-form
             v-if="newTime !== ''"
             :id="queryId"
             :newTime="newTime"
             :modelSitem="{}"
             :sitem="sitem"
-            @refresh="(showModelThis = false), $emit('refresh')"
+            @refresh="initData()"
           />
         </el-collapse-item>
         <el-collapse-item title="入库审核" name="4">
@@ -48,12 +56,12 @@
         </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"
+            :id="queryId"
+            :newTime="newTime"
+            :modelSitem="{}"
+            :sitem="sitem"
+            @refresh="initData()"
           />
         </el-collapse-item>
       </el-collapse>
@@ -138,7 +146,7 @@ export default {
     },
     async examForm(e) {
       if (!this.loading) {
-        let type = e.state === "1" ? "2" : "0";
+        let type = e.state === "1" ? "4" : "2";
         await this.setStatus(type, "提交入库方审核", e.remark);
       }
     },
@@ -146,6 +154,7 @@ export default {
       const res = await asyncRequest.orderininfo({ wsm_in_code: 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();

+ 48 - 0
src/views/sellOut/customer/index.vue

@@ -84,6 +84,48 @@
             </el-row>
           </div>
         </template>
+        <template #expand="{ scope }">
+          <el-form label-position="right" :size="'mini'" inline  label-width="110px" class="demo-table-expand">
+            <el-row>
+              <el-col :span="12">
+                <el-form-item label="公司名称:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_title }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="纳税人识别号:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_code }}</span>
+                </el-form-item>
+              </el-col>
+
+              <el-col :span="12">
+                <el-form-item label="银行名称:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_bank }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="银行卡号:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_bankNo }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="发票纳税人:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_people }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="联系电话:" style="margin:0 0 10px 0">
+                  <span>{{ scope.row.invoice_mobile }}</span>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24">
+                <el-form-item label="联系地址:" style="margin: 0">
+                  <span>{{ scope.row.invoice_addr }}</span>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+        </template>
         <template #status="{ scope }">
           <el-tag
             :size="tablebtnSize"
@@ -185,6 +227,12 @@ export default {
       },
       // 表格 - 列参数
       columns: [
+        {
+          type: "expand",
+          _slot_: "expand",
+          fixed: "left",
+          _noset_: true,
+        },
         {
           prop: "companyNo",
           label: "客户编码",

+ 65 - 0
src/views/sellOut/salesOrder/columns.js

@@ -0,0 +1,65 @@
+export default [
+
+  {
+    prop: "orderCode",
+    label: "销售订单编号",
+    width: "155px",
+  },
+  {
+    prop: "apply_name",
+    label: "申请人",
+    width: "60px",
+  },
+  {
+    prop: "good_code",
+    label: "商品编码",
+  },
+  {
+    prop: "good_name",
+    label: "商品名称",
+  },
+  {
+    prop: "good_num",
+    label: "商品数量",
+  },
+  {
+    prop: "sale_price",
+    label: "销售单价",
+  },
+  {
+    prop: "total_price",
+    label: "总价",
+  },
+  {
+    prop: "post_fee",
+    label: "总物流费",
+  },
+  {
+    prop: "customer_code",
+    label: "客户公司编码",
+
+    width: "215px",
+  },
+
+
+  {
+    prop: "status",
+    label: "状态",
+    _slot_: "status",
+    width: "80px",
+  },
+
+  {
+    prop: "addtime",
+    label: "创建时间",
+    width: "145px",
+  },
+  {
+    prop: "",
+    label: "操作",
+    fixed: "right",
+    _noset_: true,
+    width: "50px",
+    _slot_: "operation",
+  },
+]

+ 374 - 0
src/views/sellOut/salesOrder/components/addEdit-form.vue

@@ -0,0 +1,374 @@
+<template>
+  <el-form
+    ref="ruleForm"
+    :model="ruleForm"
+    status-icon
+    :rules="rulesThis"
+    label-width="75px"
+    class="demo-ruleForm"
+  >
+    <el-row>
+      <el-col :span="12">
+        <el-form-item label="商品名称" prop="good_code">
+          <el-input v-model="ruleForm.good_code" />
+        </el-form-item>
+      </el-col>
+      <el-col :span="12">
+        <el-form-item label="企业客户" prop="c_code">
+          <el-input v-model="ruleForm.c_code" />
+        </el-form-item>
+      </el-col>
+    </el-row>
+    <!-- label="出货仓库" -->
+    <el-form-item :size="'mini'" prop="Warehouse" label-width="0">
+      <el-table
+        :size="'mini'"
+        :data="ruleForm.Warehouse"
+        border
+        style="width: 100%"
+      >
+        <el-table-column prop="date" label="发货公司名称" width="180">
+        </el-table-column>
+        <el-table-column prop="date" label="发货公司编号" width="180">
+        </el-table-column>
+        <el-table-column prop="name" label="发货仓库名称" width="180">
+        </el-table-column>
+        <el-table-column prop="name" label="发货仓库编号" width="180">
+        </el-table-column>
+        <el-table-column prop="name" label="商品可用库存" width="110">
+        </el-table-column>
+        <el-table-column prop="name" label="下单数量" width="110">
+        </el-table-column>
+
+        <el-table-column prop="address" label="销售价"> </el-table-column>
+        <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="openHouseModal('add', -1)"
+              ></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-edit tb-icon"
+                @click="openHouseModal('edit', scope.$index)"
+              ></i>
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form-item>
+    <el-form-item prop="addr" :size="'mini'" label-width="0">
+      <el-table :data="ruleForm.addr" border :size="'mini'" style="width: 100%">
+        <el-table-column prop="user" label="收货总数" width="110" />
+        <el-table-column prop="user" label="收件人" width="90" />
+        <el-table-column prop="name" label="联系电话" width="150" />
+        <el-table-column label="收货地址">
+          <el-table-column prop="user1" label="省" width="100" />
+          <el-table-column prop="user2" label="市" width="100" />
+          <el-table-column prop="user3" label="区" width="100" />
+          <el-table-column prop="user4" label="详细地址" />
+        </el-table-column>
+
+        <el-table-column fixed="right" width="80">
+          <!-- v-if="
+                  (status === '1' && powers.some((item) => item == '028')) ||
+                  (status === '2' && powers.some((item) => item == '028'))
+                " -->
+          <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="openHouseModal('add', -1)"
+              ></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-edit tb-icon"
+                @click="openHouseModal('edit', scope.$index)"
+              ></i>
+            </el-tooltip>
+          </template>
+        </el-table-column>
+      </el-table>
+    </el-form-item>
+
+    <el-form-item style="text-align: right">
+      <el-button v-if="!isDetail" type="primary" @click="submitForm"
+        >保 存
+      </el-button>
+      <el-button @click="showModelThis = false">{{
+        isDetail ? "关 闭" : "取 消"
+      }}</el-button>
+    </el-form-item>
+  </el-form>
+</template>
+<script>
+import asyncRequest from "@/apis/service/interest/account";
+import resToken from "@/mixins/resToken";
+export default {
+  name: "Account",
+  props: ["showModel", "id", "isDetail", "sitem"],
+  mixins: [resToken],
+  data() {
+    return {
+      roleList: [],
+      loading: false,
+      title: "添加账号",
+      organizeList: [],
+      showModelThis: this.showModel,
+      ruleForm: {
+        good_code: "", // 商品选择
+        c_code: "", // 企业客户选择
+        Warehouse: [], //出货仓库
+        addr: [], //收货地址
+      },
+      rulesThis: this.rules,
+      rules: {
+        good_code: [
+          {
+            required: true,
+            message: "请选择商品",
+            trigger: "change",
+          },
+        ],
+        c_code: [
+          {
+            required: true,
+            message: "请选择企业客户",
+            trigger: "change",
+          },
+        ],
+        Warehouse: [
+          {
+            type: "array",
+            required: true,
+            message: "请填写发货仓库",
+            trigger: "change",
+          },
+        ],
+        addr: [
+          {
+            required: true,
+            message: "请填写收货地址",
+            trigger: "change",
+          },
+        ],
+      },
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+      if (val) {
+        this.initForm();
+      }
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+    },
+    itemidChange(e) {
+      console.log(e);
+      this.ruleForm.itemid = e;
+      this.$refs.ruleForm.validateField("itemid");
+    },
+    async initForm() {
+      console.log(this.id);
+      this.loading = true;
+      await this.getClist();
+      await this.getRole();
+      if (this.id === "add") {
+        this.title = "添加账号";
+        this.rulesThis = this.rules;
+        await this.resetForm();
+      } else {
+        if (this.isDetail) {
+          this.title = "账号详情";
+          this.rulesThis = {};
+        } else {
+          this.title = "修改账号";
+          this.rulesThis = this.rules;
+        }
+        await this.resetForm(this.sitem);
+        // await this.initData()
+      }
+      this.loading = false;
+    },
+
+    async getClist() {
+      this.organizeList = [];
+      const res = await asyncRequest.getClist({});
+      if (res && res.code === 0 && res.data) {
+        this.organizeList = res.data;
+        this.recursion(this.organizeList);
+      }
+    },
+    recursion(list) {
+      list.map((v) => {
+        if (v && Array.isArray(v.child)) {
+          v.value = v.id + "";
+          v.label = v.name;
+          if (v.child.length === 0) {
+            delete v["child"];
+          } else {
+            this.recursion(v.child);
+          }
+        }
+        return v;
+      });
+    },
+    async getRole() {
+      const model = {
+        status: "", // 状态
+        level: "", // 姓名
+        role_name: "",
+      };
+      const res = await asyncRequest.getRole(model);
+      if (res && res.code === 0 && res.data) {
+        this.roleList = res.data;
+        this.roleList.map((v1) => {
+          v1.id += "";
+          v1.status += "";
+          return v1;
+        });
+      }
+    },
+    async initData() {
+      const res = await asyncRequest.detail({ id: this.id });
+      if (res && res.code === 0 && res.data) {
+        this.ruleForm = res.data;
+        this.ruleForm.role_id = this.ruleForm.role;
+      } else if (res && res.code >= 100 && res.code <= 104) {
+        await this.logout();
+      } else {
+        this.$message.warning(res.message);
+      }
+    },
+    async resetForm(sitem) {
+      // 重置
+      await this.$nextTick(() => {
+        if (this.$refs.ruleForm) {
+          this.$refs.ruleForm.resetFields();
+          this.$refs.ruleForm.clearValidate();
+          // const {
+          //   username,
+          //   nickname,
+          //   mobile,
+          //   email,
+          //   roleid,
+          //   status,
+          //   depart_code,
+          // } = sitem;
+          // this.ruleForm = {
+          //   username: username || "", // 账号
+          //   name: nickname || "", // 真实姓名
+          //   mobile: mobile || "",
+          //   email: email || "",
+          //   role_id: roleid || "",
+          //   status: status || "",
+          //   itemid: depart_code || [],
+          // };
+          this.ruleForm = {
+            good_code: "", // 商品选择
+            c_code: "", // 企业客户选择
+            Warehouse: [], //出货仓库
+            addr: [], //收货地址
+          };
+          // console.log(depart_code);
+          // if (this.id === "add" || this.isDetail) {
+          //   this.rules.username[0].required = false;
+          // }
+        }
+      });
+    },
+    async submitForm() {
+      await this.$refs.ruleForm.validate(async (valid) => {
+        if (valid) {
+          this.loading = true;
+          const { username, name, mobile, email, role_id, status, itemid } =
+            JSON.parse(JSON.stringify(this.ruleForm));
+          console.log(this.ruleForm);
+          const model = {
+            id: this.id,
+            username: username || "", // 账号
+            nickname: name || "", // 真实姓名
+            mobile: mobile || "",
+            email: email || "",
+            role: role_id || "",
+            status: status || "",
+            itemid: itemid || [],
+          };
+          let res = {};
+          if (this.id === "add") {
+            delete model["id"];
+            res = await asyncRequest.add(model);
+          } else {
+            res = await asyncRequest.update(model);
+          }
+          this.loading = false;
+          if (res && res.code === 0) {
+            const title = this.id === "add" ? "添加成功" : "修改成功";
+            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 {
+}
+</style>

+ 71 - 0
src/views/sellOut/salesOrder/components/addEdit-model.vue

@@ -0,0 +1,71 @@
+<template>
+  <el-dialog
+    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)"
+    append-to-body
+  >
+    <el-card style="margin-top: -20px">
+      <addEdit-form
+        v-if="showModelThis"
+        :id="id"
+        @closeModel="closeModel"
+        :sitem="{}"
+        @refresh="refresh"
+      />
+    </el-card>
+  </el-dialog>
+</template>
+   <script>
+import addEditForm from "./addEdit-form.vue";
+export default {
+  name: "addModel",
+  props: ["showModel", "id"],
+  components: {
+    addEditForm,
+  },
+  data() {
+    return {
+      formId: "",
+      loading: false,
+      showModelThis: this.showModel,
+    };
+  },
+  watch: {
+    showModel: function (val) {
+      this.showModelThis = val;
+    },
+    showModelThis(val) {
+      if (!val) {
+        this.$emit("cancel");
+      }
+    },
+  },
+  methods: {
+    closeModel() {
+      console.log("closeModel!!");
+      this.showModelThis = false;
+    },
+    refresh(e) {
+      console.log(e);
+      this.showModelThis = e;
+      this.$emit("refresh", true);
+    },
+  },
+};
+</script>
+
+   <style lang="scss" scoped>
+.check {
+}
+</style>
+   

+ 100 - 0
src/views/sellOut/salesOrder/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/sellOut/salesOrder/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/sellOut/salesOrder/components/purchase-order-addEdit copy.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>
+   

+ 225 - 0
src/views/sellOut/salesOrder/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/sellOut/salesOrder/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/sellOut/salesOrder/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/sellOut/salesOrder/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/sellOut/salesOrder/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/sellOut/salesOrder/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_msg",
+          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/sellOut/salesOrder/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_msg: "",
+        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_msg =
+        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_msg, error_img, remark, index } =
+            this.sitem;
+          this.ruleForm = {
+            num: num || "",
+            index: this.id,
+            error_code: error_code || "",
+            error_msg: error_msg || "",
+            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/sellOut/salesOrder/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>
+   

+ 354 - 0
src/views/sellOut/salesOrder/components/wsm-in-order-record-form.vue

@@ -0,0 +1,354 @@
+<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_msg",
+          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();
+
+          let { checkinfo } = this.sitem;
+          checkinfo.map((v) => {
+            console.log(v.error_img.join(","))
+            v.error_img = v.error_img.join(",");
+            return v
+          });
+          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/sellOut/salesOrder/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/sellOut/salesOrder/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>
+   
+   

+ 427 - 0
src/views/sellOut/salesOrder/index.vue

@@ -0,0 +1,427 @@
+<template>
+  <div class="salesOrder 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-col
+                :span="3"
+                style="width: 66px; float: right"
+                v-if="powers.some((item) => item == '003')"
+              >
+                <el-button
+                  :size="searchSize"
+                  type="success"
+                  style="float: right"
+                  @click="openModal('add', false)"
+                >
+                  新建
+                </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 #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('salesOrderDetail', { id: scope.row.cgdNo })"
+            ></i>
+          </el-tooltip>
+        </template>
+      </ex-table>
+
+      <addEdit-model
+        :id="modelId"
+        :sitem="sitem"
+        :show-model="showModel"
+        :is-detail="isDetail"
+        @refresh="searchList"
+        @cancel="showModel = false"
+      />
+    </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/sellOut/salesOrder";
+import columns from "./columns"; //表格列参数
+import addEditModel from "./components/addEdit-model.vue";
+import { mapGetters } from "vuex";
+
+export default {
+  name: "salesOrder",
+  mixins: [mixinPage, resToken],
+  components: { addEditModel },
+  computed: {
+    ...mapGetters(["tablebtnSize", "searchSize", "size"]),
+    powers() {
+      let tran =
+        this.$store.getters.btnList.find(
+          (item) => item.menu_route == "salesOrder"
+        ) || {};
+      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();
+      }
+    },
+    openModal(id, isDetail, sitem) {
+      this.modelId = id;
+      this.isDetail = isDetail;
+      this.sitem = sitem;
+      this.showModel = true;
+    },
+    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>
+.salesOrder {
+  // text-align: right;
+}
+</style>
+   

+ 159 - 0
src/views/sellOut/salesOrder/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/sellOut/salesOrder/销售订单管理


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

@@ -37,7 +37,7 @@
               :key="item.prop + index"
             >
               <template slot-scope="scope">
-                <span class="spscope">{{ scope.row.error_code_name }}</span>
+                <span class="spscope">{{ scope.row.error_msg }}</span>
               </template>
             </el-table-column>
             <el-table-column
@@ -80,7 +80,7 @@
                   </el-select>
                   <span v-if="!scope.row.edit" class="spscope">{{
                     item.type === "select"
-                      ? scope.row.error_code_name
+                      ? scope.row.error_msg
                       : scope.row[item.prop]
                   }}</span>
                 </el-form-item>
@@ -254,7 +254,7 @@ export default {
             v.type_code = v.good_type_code;
             v.error_num = v.error_num || "0";
             v.error_code = v.error_code || "";
-            v.error_code_name = v.error_code_name || "";
+            v.error_msg = v.error_msg || "";
             v.error_remark = v.error_remark || "";
             v.stock_num = v.stock_num || "0";
             v.edit = false;
@@ -331,7 +331,7 @@ export default {
       if (this.status === "3") {
         this.tableForm.product_go[index].error_num = "0";
         this.tableForm.product_go[index].error_code = "";
-        this.tableForm.product_go[index].error_code_name = "";
+        this.tableForm.product_go[index].error_msg = "";
         this.tableForm.product_go[index].error_remark = "";
       } else {
         this.tableForm.product_go[index].stock_num = "0";
@@ -340,7 +340,7 @@ export default {
     //异常原因筛选
     elSelectChange(e, index) {
       let oindex = this.options.findIndex((v) => v.result_code === e);
-      this.tableForm.product_go[index].error_code_name =
+      this.tableForm.product_go[index].error_msg =
         oindex !== -1 ? this.options[oindex].result : "";
     },
     //保存某一行

+ 3 - 3
src/views/stock/allot/components/addForm.vue

@@ -129,7 +129,7 @@
               :key="item.prop + index"
             >
               <template slot-scope="scope">
-                <span class="spscope">{{ scope.row.error_code_name }}</span>
+                <span class="spscope">{{ scope.row.error_msg }}</span>
               </template>
             </el-table-column>
             <el-table-column
@@ -172,7 +172,7 @@
                   </el-select>
                   <span v-if="!scope.row.edit" class="spscope">{{
                     item.type === "select"
-                      ? scope.row.error_code_name
+                      ? scope.row.error_msg
                       : scope.row[item.prop]
                   }}</span>
                 </el-form-item>
@@ -422,7 +422,7 @@ export default {
             v.type_code = v.good_type_code;
             v.error_num = v.error_num || "0";
             v.error_code = v.error_code || "";
-            v.error_code_name = v.error_code_name || "";
+            v.error_msg = v.error_msg || "";
             v.error_remark = v.error_remark || "";
             v.stock_num = v.stock_num || "0";
             v.edit = false;

この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません