mushencc vor 3 Jahren
Ursprung
Commit
5450101cb4

+ 56 - 2
src/routerMap/index.js

@@ -2097,7 +2097,7 @@ const routerMap = [
     },
     component: (resolve) =>
       require(["@/views/Agreement/list"], resolve),
-  }, 
+  },
   {
     path: "/cms/Agreement/edit",
     name: "AgreementEdit", //合同-->合同列表-->编辑
@@ -2133,7 +2133,7 @@ const routerMap = [
     },
     component: (resolve) =>
       require(["@/views/SealApprove/list"], resolve),
-  }, 
+  },
   {
     path: "/cms/SealApprove/edit",
     name: "SealApproveEdit", //印章审批编辑,新增
@@ -2170,6 +2170,60 @@ const routerMap = [
     component: (resolve) =>
       require(["@/views/PayrollRequisition/detail"], resolve),
   },
+  {
+    path: "/cms/Agreement/productMessage/list",
+    name: "productMessageList", //生产通知单
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/productMessage/list"], resolve),
+  },
+  {
+    path: "/cms/Agreement/productMessage/confirm",
+    name: "productMessageConfirm", //生产通知单-->查看
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/productMessage/confirm"], resolve),
+  },
+  {
+    path: "/cms/Agreement/productMessage/detail",
+    name: "productMessageDetail", //生产通知单-->查看-->查看
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/productMessage/detail"], resolve),
+  },
+  {
+    path: "/cms/Agreement/match/list",
+    name: "MatchList", //合同-->匹配-->匹配列表
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/match/list"], resolve),
+  },
+  {
+    path: "/cms/Agreement/match/matching",
+    name: "Matching", //合同-->匹配-->匹配操作
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/match/matching"], resolve),
+  },
+  {
+    path: "/cms/Agreement/match/check",
+    name: "MatchCheck", //合同-->匹配-->查看
+    meta: {
+      index: 3,
+    },
+    component: (resolve) =>
+      require(["@/views/Agreement/match/check"], resolve),
+  },
   // 测试用
   {
     path: "/cms/ordermannage/businessorderlist/editcopy",

+ 153 - 0
src/untils/until.js

@@ -5,6 +5,20 @@ export default {
         var result = regexp.exec(Object.prototype.toString.call(obj))[1];
         return result;
     },
+    //深拷贝公共方法
+   deep(dest,obj){ //dest表示 对象 ; obj传入的值
+      var date = dest;//定义的变量
+      for(var key in obj){  //拿到键的值  key
+          if(typeof obj[key] === 'object'){  //类型检测
+              // constructor (属性检测)判断类型是数组还是对象
+              date[key] = (obj[key].constructor === Array) ? [] : {};
+              this.deep(date[key], obj[key]);
+          }else{ //如果obj[key] 不是对象类型,直接复制
+              date[key] = obj[key]
+          }
+      }
+      return date;
+  },
     dateFormat(time) {
         const t = new Date(time * 1000);
         // 日期格式
@@ -962,5 +976,144 @@ export default {
           sub_data.printparams = JSON.stringify(sub_data.printparams);
          return sub_data
         }
+        if(sub_type==5){
+          let data = {};
+          // let url = "http://192.168.0.145:888/postek/print"; //request_url
+         //request_url
+          data.reqParam = "1"; //这个一般不用改,如需改,查api
+          let printparamsJsonArray = [];
+          // let IP = "192.168.1.58";//print_url
+          // let IP = "192.168.0.199"; //print_url
+          // printparamsJsonArray.push({printPort:"1",printName:"POSTEK TX3r"});
+          printparamsJsonArray.push({ PTK_OpenUSBPort:printerUsbPort});
+          printparamsJsonArray.push({ PTK_ClearBuffer: "" });
+          printparamsJsonArray.push({ PTK_SetDirection: "B" });
+          printparamsJsonArray.push({ PTK_SetPrintSpeed: "4" });
+          printparamsJsonArray.push({ PTK_SetDarkness: "10" });
+          printparamsJsonArray.push({
+            PTK_SetLabelHeight: 624 + "," + 24 + ",0,false",
+          });
+          printparamsJsonArray.push({ PTK_SetLabelWidth: 1080 });
+          contents.map((content) => {
+            //贝斯特打印格式
+            //上
+            const printContent_l1 = `项目:${content.client_name}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1,
+            });
+            const printContent_l1_2 = `区域:${
+              content.house ? content.house + "-" : ""
+            }${content.layer ? content.layer : ""}${
+              content.position ? content.position : ""
+            }`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,40,60,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
+            });
+            const printContent_l2 = `房号:${content.number_detail}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2,
+            });
+            const printContent_l2_2 = `产品:${content.product_title}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,110,60,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
+            });
+            const printContent_l3 = `图号:${content.url_number}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,180,60,0,微软雅黑,1,700,0,0,0," + printContent_l3,
+            });
+            const printContent_l3_2 = `部件:${content.part_title}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,180,60,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
+            });
+            const printContent_l4 = `木皮:${content.color_title}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,320,60,0,微软雅黑,1,700,0,0,0," + printContent_l4,
+            });
+            const printContent_l4_2 = `尺寸:${content.measure}`;
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,250,60,0,微软雅黑,1,700,0,0,0," + printContent_l4_2,
+            });
+            let space_str = '\u0000'
+             let printContent_l5_data= (function() {
+              let hexCharCodeStr = content.chip;
+              let trimedStr = hexCharCodeStr.trim();
+              let rawStr = trimedStr.substr(0,2).toLowerCase() === "0x"?trimedStr.substr(2):trimedStr;
+              let len = rawStr.length;
+               if(len % 2 !== 0) {
+                 alert("Illegal Format ASCII Code!");
+                 return "";}
+                let curCharCode;
+                let resultStr = [];
+                for(var i = 0; i < len;i = i + 2) {
+                 curCharCode = parseInt(rawStr.substr(i, 2), 16); // ASCII Code Value
+                   resultStr.push(String.fromCharCode(curCharCode));
+                }
+                return resultStr.join("");
+         })();
+             printContent_l5_data = printContent_l5_data.replace(space_str,'')
+             const printContent_l5 = `芯片编码:${printContent_l5_data}`;
+            //  console.log(printContent_l5_data)
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueTypeEx:
+                "900,330,25,0,微软雅黑,1,700,0,0,0,10,0,0,0," + printContent_l5,
+            });
+            //下
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,435,45,0,微软雅黑,1,700,0,0,0," + printContent_l1_2,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,480,45,0,微软雅黑,1,700,0,0,0," + printContent_l2_2,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,525,45,0,微软雅黑,1,700,0,0,0," + printContent_l3_2,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "80,570,45,0,微软雅黑,1,700,0,0,0," + printContent_l4,
+            });
+            printparamsJsonArray.push({
+              PTK_DrawText_TrueType:
+                "580,570,45,0,微软雅黑,1,700,0,0,0," + printContent_l4_2,
+            });
+              printparamsJsonArray.push({
+              PTK_DrawText_TrueTypeEx:
+                "900,530,25,0,微软雅黑,1,700,0,0,0,10,0,0,0," + printContent_l5,
+            });
+            // 17,35 420
+            printparamsJsonArray.push({
+              PTK_RWRFIDLabel:
+                "1,0,0," + content.chip.length / 2 + ",1," + content.chip,
+            });
+            printparamsJsonArray.push({ PTK_PrintLabel: "1,1" });
+          });
+          printparamsJsonArray.push({ PTK_CloseUSBPort: "" });
+          data.printparams = printparamsJsonArray;
+          let sub_data = JSON.parse(JSON.stringify(data));
+          sub_data.printparams = JSON.stringify(sub_data.printparams);
+         return sub_data
+        }
       },
 };

+ 9 - 3
src/views/Agreement/deepen/edit.vue

@@ -40,17 +40,17 @@
             </Form>
             <Form :label-width='100' class="form_content" v-if="$route.query.type==3">
                 <FormItem label='区域:'>
-                    <Select multiple filterable v-model="searchData.region" class="form_item" max-tag-count='2'>
+                    <Select multiple filterable v-model="searchData.region" class="form_item" :max-tag-count='2'>
                         <Option v-for="(item,index) in regionList" :key="index" :value="item" :label='item'></Option>
                     </Select>
                 </FormItem>
                 <FormItem label='图号:'>
-                  <Select multiple filterable v-model="searchData.url_number" class="form_item" max-tag-count='2'>
+                  <Select multiple filterable v-model="searchData.url_number" class="form_item" :max-tag-count='2'>
                         <Option v-for="(item,index) in urlNumberList" :key="index" :value="item" :label='item'></Option>
                     </Select>
                 </FormItem>
                 <FormItem label='产品名称:'>
-                  <Select multiple filterable v-model="searchData.product_title" class="form_item" max-tag-count='2'>
+                  <Select multiple filterable v-model="searchData.product_title" class="form_item" :max-tag-count='2'>
                        <Option v-for="(item,index) in productTitleList" :key="index" :value="item" :label='item'></Option>
                     </Select>
                 </FormItem>
@@ -102,6 +102,9 @@ export default {
                 {title:'图号',align:'center',key:'url_number',minWidth:120},
                 {title:'产品名称',align:'center',key:'product_title',minWidth:120},
                 {title:'数量',align:'center',key:'num',minWidth:120},
+                {title:'单位',align:'center',key:'unit',minWidth:120},
+                {title:'饰面',align:'center',key:'finish',minWidth:120},
+                {title:'备注',align:'center',key:'remark',minWidth:120},
                 {title:'制单日期',align:'center',key:'crt_time',minWidth:120,render:(h,params)=>{
                     const {row} = params;
                     return h('span',{},this.func.replaceDateNoHMS(row.crt_time))
@@ -114,6 +117,9 @@ export default {
                 {title:'图号',align:'center',key:'url_number',minWidth:120},
                 {title:'产品名称',align:'center',key:'product_title',minWidth:120},
                 {title:'数量',align:'center',key:'num',minWidth:120},
+                {title:'单位',align:'center',key:'unit',minWidth:120},
+                {title:'饰面',align:'center',key:'finish',minWidth:120},
+                 {title:'备注',align:'center',key:'remark',minWidth:120},
                 {title:'制单日期',align:'center',key:'crt_time',minWidth:120,render:(h,params)=>{
                     const {row} = params;
                     return h('span',{},this.func.replaceDateNoHMS(row.crt_time))

+ 23 - 9
src/views/Agreement/edit.vue

@@ -152,8 +152,9 @@
              :action="$store.state.ip+'/api/upload_image'">
                <a @click="updTableImg(index)">上传</a>
              </Upload>
-             <div v-show="row.product_img" class="img_box">
-              <img @click="looks(row.product_img,true)" :src="$store.state.ip + row.product_img" alt="" class="img_table_content"/>
+             <div v-if="tableData[index].product_img" class="img_box">
+              <img @click="looks(row.product_img,true)" :src="$store.state.ip + tableData[index].product_img" alt="" class="img_table_content"/>
+              
               <Icon
               v-if="$route.query.type!=4"
               size="20"
@@ -229,7 +230,7 @@ export default {
                 {title:'区域',minWidth:100,align:'center',key:'region'},
                 {title:'产品分类',minWidth:100,align:'center',key:'bp_id'},
                 {title:'产品名称',minWidth:100,align:'center',key:'product_title'},
-                {title:'产品图片',minWidth:100,align:'center',key:'product_img'},
+                {title:'产品图片',minWidth:100,align:'center',key:'product_img',slot:'product_img'},
                 {title:'产品特征',minWidth:100,align:'center',key:'product_feature'},
                 {title:'计量单位',minWidth:100,align:'center',key:'unit'},
                 {title:'工程量',minWidth:100,align:'center',key:'num'},
@@ -390,8 +391,15 @@ export default {
               }
         },
         handleTableSuccess(res,file){
+            // console.log(this.tableData)
              if(res.code==200){
-             this.tableData[this.tableIndex].product_img = res.data.url;
+                 this.tableData[this.tableIndex].product_img = res.data.url;
+                // let obj = this.tableData[this.initData];
+                // obj.product_img = res.data.url;
+                //  this.$set(this.tableData,this.initData,obj)
+                // this.tableData.splice(this.tableIndex,1,obj)
+                //  console.log(this.tableData)
+              
              }
         },
         updTableImg(index){
@@ -470,26 +478,32 @@ export default {
          uploadSuccess(res) {
       if (res.code == 200) {
         this.$Message.success(res.msg || "上传成功");
+        res.data.forEach(v=>{
+            v.product_img='';
+        })
         if(this.tableData.length==0){
-            this.tableData = res.data;
+           
+                // this.tableData = JSON.parse(JSON.stringify(res.data))
+                this.tableData = Object.assign(res.data,this.tableData)
+              this.$forceUpdate();
         }else{
-           let data = JSON.parse(JSON.stringify(this.tableData));
+        //    let data = JSON.parse(JSON.stringify(this.tableData));
            res.data.forEach(v => {
                let arr = [];
                arr = this.tableData.filter(x=>{
                    return x.region == v.region&&x.product_title == v.product_title
                })
                   if(arr.length==0){
-                      data.push(v);
+                      this.tableData.push(v);
                   }else{
                     this.tableData.forEach((ele,index)=>{
                         if(ele.region == v.region&&ele.product_title == v.product_title){
-                                data.splice(index,1,v)
+                                this.tableData.splice(index,1,v)
                         }
                     })
                   }
            });
-            this.tableData = data;
+            // this.tableData = JSON.parse(JSON.stringify(data));
         }
         
       } else {

+ 611 - 0
src/views/Agreement/match/check.vue

@@ -0,0 +1,611 @@
+<template>
+  <div>
+    <Toptitle title="查看">
+      <Button
+        @click="handleMatchedSelectAll()"
+        type="primary"
+        :ghost="!isMatchedSelectAll"
+        style="margin-right: 10px"
+        >{{ isMatchedSelectAll ? "取消选中" : "全部选中" }}</Button
+      >
+      <Button
+        @click="handleGoProduction(1)"
+        type="primary"
+        style="margin-right: 10px"
+        >下生产通知</Button
+      >
+      <Button @click="back" type="primary" ghost style="margin-right: 10px"
+        >返回</Button
+      >
+    </Toptitle>
+    <Row style="padding: 10px; font-size: 18px">
+      <Col span="4">
+        <span>金螳螂ID:</span><span>{{ detailList.jtl_id }}</span>
+      </Col>
+      <Col span="4">
+        <span>项目编号:</span><span>{{ detailList.order_no }}</span>
+      </Col>
+      <Col span="4">
+        <span>项目名称:</span><span>{{ detailList.abbreviation }}</span>
+      </Col>
+      <Col span="4">
+        <span>项目简介:</span><span>{{ detailList.project_title }}</span>
+      </Col>
+    </Row>
+    <div class="context-tabs">
+      <div
+        v-for="matched_info in matchedList"
+        :key="matched_info.number"
+        class="matched-block"
+      >
+        <Row type="flex" justify="space-between" align="top">
+          <Col
+            style="
+              display: flex;
+              justify-content: space-around;
+              align-items: center;
+            "
+          >
+            <div>
+              <Checkbox
+                v-model="matched_info.del_isSelect"
+                @on-change="(e) => MatchedSelect(matched_info, e)"
+                class="del_check"
+                >选择</Checkbox
+              >
+            </div>
+            <span
+              >制单日期:{{
+                func.replaceDate(matched_info.crt_time).split(" ")[0]
+              }}</span
+            >
+          </Col>
+          <Col style="display: flex; justify-content: space-between" span="6">
+            <span>
+              <Button
+                @click="handleGoProduction(2, matched_info)"
+                type="primary"
+                size="small"
+                :disabled="matched_info.product_state != 0"
+                >下生产通知</Button
+              >
+            </span>
+
+            <div>
+              总计
+              <span style="color: red">{{ matched_info.total }}</span>
+              条数据
+            </div>
+            <div>
+              <Button
+                @click="handleShowCurrencyMatched(matched_info)"
+                size="small"
+                type="text"
+                >{{ matched_info.isCurrenct ? "收缩" : "展开" }}</Button
+              >
+              <Icon
+                size="20"
+                :type="
+                  matched_info.isCurrenct
+                    ? 'md-arrow-dropdown'
+                    : 'md-arrow-dropright'
+                "
+                style="vertical-align: middle"
+              />
+            </div>
+          </Col>
+        </Row>
+        <Row
+          style="margin-top: 20px; padding-bottom: 20px"
+          v-if="matched_info.isCurrenct"
+        >
+          <Col span="4">
+            <span>区域:</span>
+            <span>
+              <Select
+                filterable
+                multiple
+                transfer
+                clearable
+                filter-by-label
+                v-model="matchedInfo.region"
+                :max-tag-count="2"
+                size="small"
+                style="width: 150px"
+              >
+                <Option
+                  v-for="(item, index) in regionMatchedList"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </Option>
+              </Select>
+            </span>
+          </Col>
+          <Col span="4">
+            <span>图号:</span>
+            <span>
+              <Select
+                filterable
+                multiple
+                transfer
+                clearable
+                filter-by-label
+                v-model="matchedInfo.number"
+                :max-tag-count="2"
+                size="small"
+                style="width: 150px"
+              >
+                <Option
+                  v-for="(item, index) in numberMatchedList"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                >
+                </Option>
+              </Select>
+            </span>
+          </Col>
+          <Col span="4">
+            <span>产品名称:</span>
+            <span>
+              <Select
+                filterable
+                multiple
+                transfer
+                clearable
+                filter-by-label
+                v-model="matchedInfo.part_name"
+                :max-tag-count="2"
+                size="small"
+                style="width: 150px"
+              >
+                <Option
+                  v-for="(item, index) in partNameMatchedList"
+                  :key="index"
+                  :label="item"
+                  :value="item"
+                ></Option>
+              </Select>
+            </span>
+          </Col>
+          <Col span="2">
+            <Button
+              @click="getMatchedDetailList(matched_info)"
+              size="small"
+              type="primary"
+            >
+              搜索
+            </Button>
+          </Col>
+        </Row>
+        <div v-if="matched_info.isCurrenct">
+          <div>
+            <Table
+              ref="selection"
+              @on-selection-change="ifCheckAll"
+              :columns="matchedSheetTableColumns"
+              border
+              :max-height="500"
+              on-selection-change
+              :data="matchedDetailList"
+              show-summary
+              :summary-method="handleSummary"
+              style="width: 100%"
+            >
+              <!-- <template slot="setSlot" slot-scope="{ row }">
+                <Button
+                  @click="underProduction(row)"
+                  style="margin: 0 5px"
+                  type="text"
+                  :disabled="productionBtn"
+                  >下生产</Button
+                >
+              </template> -->
+            </Table>
+          </div>
+        </div>
+      </div>
+    </div>
+    <Modal v-model="processModal" title="下生产通知">
+      <div>
+        <div class="process_modal">
+          <span>生产通知单号:</span>
+          <Input
+            v-model="processNumber"
+            style="width: 50%; margin-left: 20px"
+          ></Input>
+        </div>
+      </div>
+      <div slot="footer">
+        <Button
+          @click="processModal = false"
+          type="primary"
+          ghost
+          style="margin-right: 10px"
+          >取消</Button
+        >
+        <Button @click="handleProcess" type="primary" style="margin-right: 10px"
+          >确定</Button
+        >
+      </div>
+    </Modal>
+  </div>
+</template>
+
+<script>
+// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+// 例如:import 《组件名称》 from '《组件路径》';
+import Vue from "vue";
+export default {
+  name: "",
+  components: {},
+  props: {},
+  // import引入的组件需要注入到对象中才能使用
+  data() {
+    // 这里存放数据
+    return {
+      processNumber: "", //下生产通知单号
+      options: {},
+      project_number: this.$route.query.project_number,
+      project_name: this.$route.query.project_name,
+      isMatchedSelectAll: false,
+      matchedInfo: {
+        region: "", //区域
+        url_number: "", //图号
+        product_title: "", //产品名称
+      },
+      urlMatchedList: [],
+      productMatchedList: [],
+      regionMatchedList: [],
+      numberMatchedList: [],
+      partNameMatchedList: [],
+      matchedDetailList: [],
+      matchedList: [],
+      productionBtn: false,
+
+      matchedSheetTableColumns: [
+        {
+          title: "序号",
+          align: "center",
+          type: "index",
+          resizable: true,
+          width: 100,
+          key: "index",
+        },
+        {
+          title: "区域",
+          align: "center",
+          key: "region",
+          resizable: true,
+          width: 100,
+        },
+        {
+          title: "图号",
+          align: "center",
+          key: "url_number",
+          resizable: true,
+          width: 160,
+        },
+        {
+          title: "产品名称",
+          align: "center",
+          key: "product_title",
+          resizable: true,
+          width: 160,
+        },
+        {
+          title: "数量",
+          align: "center",
+          key: "num",
+          resizable: true,
+          width: 180,
+        },
+        {
+          title: "金额",
+          align: "center",
+          key: "total_price",
+          resizable: true,
+          width: 170,
+        },
+        // { title: "操作", align: "center", slot: "setSlot", width: 100 },
+      ], //匹配表头
+      processModal: false,
+      process_man: "",
+      processManList: [],
+      cut_order_product_ids: [],
+      matchedSelectedList: [],
+      matchedTimeList: [], //多选后的时间列表
+      delList: [],
+      timeList: [],
+      showDel: false,
+      detailList: {},
+      params: {},
+    };
+  },
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  created() {
+    this.axios("/api/user").then(
+      (res) => (this.processManList = res.data.data)
+    );
+  },
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // this.initData();
+    this.detail(); //详情接口
+    this.deepenList();
+  },
+  methods: {
+    detail() {
+      //详情接口
+      this.axios({
+        method: "post",
+        url: "/api/contract_match_detail",
+        params: { order_no: this.$route.query.order_no },
+      }).then((res) => {
+        if (res.code == 200) {
+          this.detailList = res.data;
+        }
+      });
+    },
+    handleSummary({ columns, data }) {
+      const sums = {};
+      columns.forEach((column, index) => {
+        const key = column.key;
+        if (key === "index") {
+          sums[key] = {
+            key,
+            value: "合计",
+          };
+          return;
+        }
+        const values = data.map((item) => Number(item[key]));
+        if (key == "total_price") {
+          const v = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[key] = {
+            key,
+            value: (v * 1).toFixed(2),
+          };
+        } else {
+          sums[key] = {
+            key,
+            value: "",
+          };
+        }
+      });
+
+      return sums;
+    },
+    deepenList() {
+      //深化信息接口
+      this.axios({
+        method: "post",
+        url: "/api/contract_match_detail_deep",
+        params: { order_no: this.$route.query.order_no, state: 1 },
+      }).then((res) => {
+        this.matchedList = [];
+        res.data.map((v) => {
+          v.isCurrenct = false;
+        });
+        this.matchedList = res.data;
+      });
+    },
+    underProduction(row) {
+      //表单里点击下生产事件
+      this.processModal = true;
+    },
+    handleProcess() {
+      //下生产通知弹框二次确认
+      this.process_control = true;
+      this.$set(this.params, "product_no", this.processNumber)
+      this.axios.post("/api/contract_match_product", this.params).then((res) => {
+        if (res.code == 200) {
+          this.$Message.success(res.msg);
+          this.processModal = false;
+          this.matchedSelectedList = [];
+          // this.initData();
+          this.detail();
+          this.deepenList()
+          setTimeout(() => {
+            this.process_control = false;
+          }, 500);
+        }
+      });
+    },
+    ifCheckAll(s) {
+      //   判断table中是否全选
+      console.log(s, "这是table中的数据");
+    },
+    handleMatchedSelectAll() {
+      this.isMatchedSelectAll = !this.isMatchedSelectAll;
+      this.matchedSelectedList = [];
+      this.matchedTimeList = [];
+      this.matchedList.forEach((e) => {
+        if (this.isMatchedSelectAll) {
+          e.del_isSelect = true;
+          e.isSelect = true;
+          this.matchedSelectedList.push(e.order_no);
+          this.matchedTimeList.push(e.crt_time);
+        } else {
+          e.del_isSelect = false;
+          e.isSelect = false;
+        }
+      });
+    },
+    handleMatchedSelect(row, e) {
+      row.isSelect = e;
+      let flag = true;
+      this.matchedSelectedList = [];
+
+      this.matchedList.map((v) => {
+        if (v.product_state == 0) {
+          if (v.isSelect) {
+            this.matchedSelectedList.push(v.id);
+          } else {
+            flag = false;
+          }
+        }
+      });
+      this.isMatchedSelectAll = flag;
+      if (this.$refs.selection) {
+        this.$refs.selection[0].selectAll(e);
+      }
+      this.cut_order_product_ids = this.matchedSelectedList;
+    },
+    MatchedSelect(row, e) {
+      row.del_isSelect = e;
+      if (e == false) {
+        this.isMatchedSelectAll = e;
+      }
+      this.matchedSelectedList = [];
+      this.matchedTimeList = [];
+      this.matchedList.forEach((v) => {
+        if (v.del_isSelect) {
+          this.matchedSelectedList.push(v.order_no);
+          this.matchedTimeList.push(v.crt_time);
+        }
+      });
+      if (this.matchedList.every((target) => target.del_isSelect)) {
+        this.isMatchedSelectAll = true;
+      } else {
+        this.isMatchedSelectAll = false;
+      }
+    },
+    back() {
+      this.$router.go(-1);
+    },
+    handleGoProduction(type, row) {
+      this.processNumber = ""
+      if (type === 2) {
+        this.params = {
+          time: [row.crt_time],
+          order_no: row.order_no,
+        };
+      } else {
+        this.params = {
+          time: this.matchedTimeList,
+          order_no: this.matchedSelectedList,
+        };
+      }
+      this.processModal = true;
+    },
+    initData() {
+      //获取table中的数据
+      this.axios
+        .get("/api/bst_matching_on_list", {
+          params: {
+            id: this.matchedInfo.id,
+            image_number: this.matchedInfo.image_number,
+            product_name: this.matchedInfo.product_name,
+          },
+        })
+        .then((res) => {
+          this.matchedList = [];
+          res.data.list.map((v) => {
+            v.isCurrenct = false;
+          });
+          this.urlMatchedList = res.data.image_number;
+          this.productMatchedList = res.data.product_name;
+          // this.matchedList = res.data.list;
+          res.data.list.forEach((v, index) => {
+            if (v.matching_status == 2) {
+              this.matchedList.push(v);
+            }
+          });
+        });
+    },
+    handleHiddenMatchedDetail(row) {
+      if (row.isHidden) {
+        row.isHidden = !row.isHidden;
+      } else {
+        row.isHidden = true;
+      }
+      this.$forceUpdate();
+    },
+    handleShowCurrencyMatched(row) {
+      if (row.isCurrenct) {
+        row.isCurrenct = !row.isCurrenct;
+      } else {
+        this.matchedList.map((v) => (v.isCurrenct = false));
+        row.isCurrenct = true;
+      }
+      this.getMatchedDetailList(row);
+    },
+    getMatchedDetailList(row) {
+      row.isCurrenct &&
+        this.axios
+          .post("/api/contract_match_detail_deep_open", {
+            order_no: row.order_no,
+            state: 1,
+            crt_time: row.crt_time,
+          })
+          .then((res) => {
+            this.matchedDetailList = res.data.data;
+            this.$nextTick(function () {
+              if (row.del_isSelect == true || row.isSelect == true) {
+                this.$refs.selection[0].selectAll(true);
+              }
+            });
+          });
+    },
+  },
+  // 监听属性 类似于data概念
+  computed: {},
+  // 监控data中的数据变化
+  watch: {},
+  beforeCreate() {}, // 生命周期 - 创建之前
+  beforeMount() {}, // 生命周期 - 挂载之前
+  beforeUpdate() {}, // 生命周期 - 更新之前
+  updated() {}, // 生命周期 - 更新之后
+  beforeDestroy() {}, // 生命周期 - 销毁之前
+  destroyed() {}, // 生命周期 - 销毁完成
+  activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+
+<style lang="scss" scoped>
+span {
+  font-size: 14px;
+}
+
+.context-tabs {
+  position: relative;
+  max-height: 650px;
+  overflow: hidden;
+  overflow-y: auto;
+  padding: 15px;
+  margin: 10px;
+  margin-bottom: 30px;
+  border-radius: 5px;
+  box-shadow: 1px 1px 5px 1px #999;
+}
+
+.matched-block {
+  padding: 15px;
+  margin-bottom: 30px;
+  background-color: #e9ecef;
+  border-radius: 5px;
+}
+
+.process_modal {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  padding: 10px;
+}
+
+/deep/.del_check .ivu-checkbox .ivu-checkbox-inner {
+  border-radius: 50%;
+}
+/deep/ .ivu-table table {
+  width: 100% !important;
+}
+</style>

+ 209 - 0
src/views/Agreement/match/list.vue

@@ -0,0 +1,209 @@
+<template>
+  <div>
+     <Toptitle title="匹配列表">
+      <slot name="titleButton"> </slot>
+    </Toptitle>
+    <div class="match_list">
+    <Row style="padding:10px 0">
+      <Col span="5">
+        <span>金螳螂ID:</span>
+        <span>
+          <Input clearable v-model="SearchInfo.jtl_id" style="width:140px"  />
+        </span>
+      </Col>
+      <Col span="5">
+        <span>项目编号:</span>
+        <span>
+          <Input clearable v-model="SearchInfo.order_no" style="width:140px"  />
+        </span>
+      </Col>
+      <Col span="5">
+        <span>项目名称:</span>
+        <span>
+          <Input clearable v-model="SearchInfo.abbreviation" style="width:140px"  />
+        </span>
+      </Col>
+      <Col span="5">
+        <span>项目简称:</span>
+        <span>
+          <Input clearable v-model="SearchInfo.project_title" style="width:140px"  />
+        </span>
+      </Col>
+      <Col span="2" offset="2">
+        <Button @click="initData" type="primary" style="margin-right: 10px" size='small'
+          >搜索</Button
+        >
+      </Col>
+    </Row>
+      <Table :columns="tableColumns" border :max-height="500" :data="tableData">
+        <template slot="setSlot" slot-scope="{ row, index }">
+          <a @click="handleSet(row, index, 1)" style="margin: 0 5px">匹配</a>
+          <a @click="handleSet(row, index, 2)">查看</a>
+        </template>
+      </Table>
+      <div class="total">总计<span>{{total}}</span>条数据</div>
+      </div>
+      <div class="content_body_page">
+        <Page
+          :page-size-opts="[10, 20, 30, 40, 100]"
+          @on-page-size-change="changeSize"
+          @on-change="changePage"
+          :current="page_index"
+          show-total
+          show-elevator
+          :total="total"
+          show-sizer
+          :page-size="page_size"
+        />
+      </div>
+    </div>
+</template>
+
+<script>
+// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+// 例如:import 《组件名称》 from '《组件路径》';
+
+export default {
+  name: "matchList",
+  components: {},
+  props: {},
+  // import引入的组件需要注入到对象中才能使用
+  data() {
+    // 这里存放数据
+    return {
+      SearchInfo: {
+        project_short_title: "",
+        project_name: "",
+        project_number: "",
+        matching_status: "",
+      },
+      tableColumns: [
+        {
+          title: "金螳螂ID",
+          align: "center",
+          key: "jtl_id",
+         resizable: true,
+                        width: 350
+        },
+        {
+          title: "项目编号",
+          align: "center",
+          key: "order_no",
+          resizable: true,
+                        width: 350
+        },
+        {
+          title: "项目名称",
+          align: "center",
+          key: "abbreviation",
+          resizable: true,
+                        width: 350
+        },
+       {
+          title: "项目简介",
+          align: "center",
+          key: "project_title",
+          resizable: true,
+                        width: 350
+        },
+        { title: "操作", align: "center", minWidth: 150, slot: "setSlot" },
+      ],
+      tableData: [],
+      page_index: 1,
+      page_size: 10,
+      total: null,
+    };
+  },
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    this.initData();
+  },
+  methods: {
+    initData() {
+      this.axios({
+        method: "post",
+        url: "/api/contract_match_list",
+        params: { ...this.SearchInfo,page_index:this.page_index,page_size:this.page_size},
+      }).then((res) => {
+        if (res.code == 200) {
+          this.tableData = res.data.data;
+          this.total = res.data.total;
+        }
+      });
+    },
+    handleSet(row, index, type) {
+      switch (type) {
+        case 1:
+          this.$router.push({
+            path: "/cms/Agreement/match/matching",
+            query: {
+              type,
+              order_no:row.order_no
+            },
+          });
+          break;
+        case 2:
+          this.$router.push({
+            path: "/cms/Agreement/match/check",
+            query: {
+              type,
+              order_no:row.order_no
+            },
+          });
+          break;
+      }
+    },
+    changeSize(e) {
+      this.page_size = e;
+      this.initData();
+    },
+    changePage(e) {
+      this.page_index = e;
+      this.initData();
+    },
+  },
+  // 监听属性 类似于data概念
+  computed: {},
+  // 监控data中的数据变化
+  watch: {},
+  beforeCreate() {}, // 生命周期 - 创建之前
+  beforeMount() {}, // 生命周期 - 挂载之前
+  beforeUpdate() {}, // 生命周期 - 更新之前
+  updated() {}, // 生命周期 - 更新之后
+  beforeDestroy() {}, // 生命周期 - 销毁之前
+  destroyed() {}, // 生命周期 - 销毁完成
+  activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+
+<style lang="scss" scoped>
+span{
+    font-size: 15px;
+}
+.total{
+    margin-top:10px;
+}
+.total>span{
+    color: #d9001b;
+    font-size: 14px;
+}
+.content_body_page {
+  display: flex;
+  justify-content: center;
+  padding-top: 20px;
+}
+.match_list{
+  height:80%;
+  overflow: hidden;
+}
+/deep/ .ivu-col{
+display: flex;
+margin: 5px;
+align-items: center;
+}
+/deep/ .ivu-col-span-6{
+  flex: auto;
+}
+</style>

+ 1531 - 0
src/views/Agreement/match/matching.vue

@@ -0,0 +1,1531 @@
+<template>
+  <div>
+    <Toptitle title="匹配">
+      <Button
+        v-show="currencyTag != 1"
+        @click="handleMatchedSelectAll(isMatchedSelectAll)"
+        type="primary"
+        :ghost="!isMatchedSelectAll"
+        style="margin-right: 10px"
+        >{{ isMatchedSelectAll ? "取消选中" : "全部选中" }}</Button
+      >
+      <Button
+        @click="handleMatchedSet()"
+        v-show="currencyTag != 1"
+        type="primary"
+        style="margin-right: 10px"
+        >撤销匹配</Button
+      >
+      <Button @click="back" type="primary" ghost style="margin-right: 10px"
+        >返回</Button
+      >
+    </Toptitle>
+    <div class="top-info">
+      <Row align="middle" type="flex" justify="start">
+        <Col style="margin-right: 20px">
+          <span>金螳螂ID:</span><span>{{ detailList.jtl_id }}</span>
+        </Col>
+
+        <Col style="margin-right: 20px">
+          <span>项目编号:</span><span>{{ detailList.order_no }}</span>
+        </Col>
+        <Col style="margin-right: 20px">
+          <span>项目名称:</span><span>{{ detailList.abbreviation }}</span>
+        </Col>
+        <Col style="margin-right: 20px">
+          <span>项目简介:</span><span>{{ detailList.project_title }}</span>
+        </Col>
+      </Row>
+    </div>
+    <div class="context-tabs">
+      <Tabs type="card" @on-click="handleTabsClick" v-model="currencyTag">
+        <Button
+          @click="handleIsAllowHandingMatch"
+          type="primary"
+          size="small"
+          slot="extra"
+          v-show="currencyTag == 1"
+          style="margin-right: 20px"
+        >
+          匹配
+        </Button>
+        <Button
+          v-show="currencyTag == 1"
+          @click="matchiSngSave"
+          type="primary"
+          size="small"
+          slot="extra"
+          :disabled="ifMatching"
+        >
+          确定
+        </Button>
+        <TabPane label="未匹配" name="1">
+          <Row>
+            <Col
+              span="12"
+              style="
+                border-top: 1px solid #adb5bd;
+                border-right: 1px solid #adb5bd;
+                padding: 10px;
+              "
+            >
+              <div class="sheet-block">
+                <h1>合同信息</h1>
+                <div class="context-unmatched-sheet">
+                  <Row
+                    type="flex"
+                    align="middle"
+                    style="padding-top: 20px; justify-content: space-around"
+                  >
+                    <Col span="">
+                      <span>区域:</span>
+                      <span>
+                        <Select
+                          filterable
+                          filter-by-label
+                          transfer
+                          clearable
+                          v-model="search.region_list"
+                          size="small"
+                          style="width: 120px"
+                        >
+                          <Option
+                            v-for="(item, index) in searchRegionList"
+                            :key="index"
+                            :label="item"
+                            :value="item"
+                          ></Option>
+                        </Select>
+                      </span>
+                    </Col>
+                    <Col span="7">
+                      <span>产品名称:</span>
+                      <span>
+                        <Select
+                          filterable
+                          multiple
+                          filter-by-label
+                          clearable
+                          transfer
+                          v-model="search.product_title_list"
+                          :max-tag-count="2"
+                          size="small"
+                          style="width: 120px"
+                        >
+                          <Option
+                            v-for="(item, index) in searchProductTitleList"
+                            :key="index"
+                            :label="item"
+                            :value="item"
+                          ></Option>
+                        </Select>
+                      </span>
+                    </Col>
+
+                    <Col span="4">
+                      <Button
+                        @click="contractSearch()"
+                        size="small"
+                        type="primary"
+                        style="margin-left: -30px"
+                      >
+                        搜索
+                      </Button>
+                    </Col>
+                  </Row>
+                  <div style="padding-top: 20px">
+                    <Table
+                      :columns="contractColumns"
+                      border
+                      @on-selection-change="checkedContract"
+                      :max-height="500"
+                      :data="contractData"
+                      show-summary
+                      :summary-method="handleSummary"
+                    ></Table>
+                    <div class="table_bottom">
+                      总共<span>{{ contractTotal || 0 }}</span
+                      >条数据
+                    </div>
+                  </div>
+                </div>
+              </div>
+            </Col>
+            <Col span="12">
+              <div
+                class="room-block"
+                style="border-top: 1px solid #adb5bd; padding: 10px"
+              >
+                <h1>深化信息</h1>
+
+                <div
+                  style="margin-top: 15px"
+                  v-for="matched_info in matchedList"
+                  :key="matched_info.number"
+                  class="matched-block"
+                >
+                  <Row type="flex" justify="space-between" align="top">
+                    <Col
+                      style="
+                        display: flex;
+                        justify-content: space-around;
+                        align-items: center;
+                      "
+                    >
+                      <span
+                        >制单日期:{{
+                          func.replaceDate(matched_info.crt_time).split(" ")[0]
+                        }}</span
+                      >
+                    </Col>
+                    <Col
+                      style="
+                        display: flex;
+                        justify-content: space-between;
+                        align-items: center;
+                      "
+                      span="6"
+                    >
+                      <div>
+                        总计
+                        <span style="color: red">{{ matched_info.total }}</span>
+                        条数据
+                      </div>
+                      <div>
+                        <Button
+                          @click="handleShowCurrencyMatched1(matched_info)"
+                          size="small"
+                          type="text"
+                          >{{
+                            matched_info.isCurrenct ? "收缩" : "展开"
+                          }}</Button
+                        >
+                        <Icon
+                          size="20"
+                          :type="
+                            matched_info.isCurrenct
+                              ? 'md-arrow-dropdown'
+                              : 'md-arrow-dropright'
+                          "
+                          style="vertical-align: middle"
+                        />
+                      </div>
+                    </Col>
+                  </Row>
+                  <Row
+                    style="
+                      margin-top: 20px;
+                      padding-bottom: 20px;
+                      justify-content: space-evenly;
+                    "
+                    v-if="matched_info.isCurrenct"
+                  >
+                    <Col span="6">
+                      <span>区域:</span>
+                      <span>
+                        <Select
+                          filterable
+                          multiple
+                          transfer
+                          clearable
+                          filter-by-label
+                          v-model="matchedInfo.region"
+                          :max-tag-count="2"
+                          size="small"
+                          style="width: 100px"
+                        >
+                          <Option
+                            v-for="(item, index) in regionMatchedList"
+                            :key="index"
+                            :label="item"
+                            :value="item"
+                          >
+                          </Option>
+                        </Select>
+                      </span>
+                    </Col>
+                    <Col span="6">
+                      <span>图号:</span>
+                      <span>
+                        <Select
+                          filterable
+                          multiple
+                          transfer
+                          clearable
+                          filter-by-label
+                          v-model="matchedInfo.url_number"
+                          :max-tag-count="2"
+                          size="small"
+                          style="width: 100px"
+                        >
+                          <Option
+                            v-for="(item, index) in urlMatchedList"
+                            :key="index"
+                            :label="item"
+                            :value="item"
+                          >
+                          </Option>
+                        </Select>
+                      </span>
+                    </Col>
+                    <Col span="6">
+                      <span>产品名称:</span>
+                      <span>
+                        <Select
+                          filterable
+                          multiple
+                          transfer
+                          clearable
+                          filter-by-label
+                          v-model="matchedInfo.product_title	"
+                          :max-tag-count="2"
+                          size="small"
+                          style="width: 100px"
+                        >
+                          <Option
+                            v-for="(item, index) in productList"
+                            :key="index"
+                            :label="item"
+                            :value="item"
+                          ></Option>
+                        </Select>
+                      </span>
+                    </Col>
+                    <Col span="2">
+                      <Button
+                        @click="getMatchedDetailList(matched_info)"
+                        size="small"
+                        type="primary"
+                      >
+                        搜索
+                      </Button>
+                    </Col>
+                  </Row>
+                  <div v-if="matched_info.isCurrenct">
+                    <keep-alive>
+                      <Table
+                        ref="selection"
+                        @on-selection-change="checkedDeepen"
+                        :columns="matchedSheetTableColumns"
+                        border
+                        :max-height="500"
+                        on-selection-change
+                        :data="matched_detail"
+                        style="width: 100%"
+                        show-summary
+                        :summary-method="deepenSummary"
+                      >
+                        <template
+                          slot-scope="{ row }"
+                          slot="total_price"
+                          ref="row"
+                        >
+                          <div class="service table_slot">
+                            <Input
+                              v-model="row.total_price"
+                              type="number"
+                              @on-blur="checkPrice(row)"
+                              style="width: 80%"
+                              clearable
+                            />
+                          </div>
+                        </template>
+                      </Table>
+                    </keep-alive>
+                  </div>
+                </div>
+              </div>
+            </Col>
+          </Row>
+        </TabPane>
+        <TabPane label="已匹配" name="2">
+          <div class="context-tabs">
+            <div
+              v-for="matched_info in matchedDetailList"
+              :key="matched_info.number"
+              class="matched-block"
+            >
+              <Row type="flex" justify="space-between" align="top">
+                <Col
+                  style="
+                    display: flex;
+                    justify-content: space-around;
+                    align-items: center;
+                  "
+                >
+                  <div>
+                    <Checkbox
+                      v-model="matched_info.del_isSelect"
+                      @on-change="(e) => MatchedSelect(matched_info, e)"
+                      class="del_check"
+                      >选择</Checkbox
+                    >
+                  </div>
+                  <span
+                    >制单日期:{{
+                      func.replaceDate(matched_info.crt_time).split(" ")[0]
+                    }}</span
+                  >
+                </Col>
+                <Col
+                  style="display: flex; justify-content: space-between"
+                  span="6"
+                >
+                  <span v-if="matched_info.matching_status == 2">
+                    <Button
+                      @click="handleGoProduction(2, matched_info)"
+                      type="primary"
+                      size="small"
+                      :disabled="matched_info.product_state != 0"
+                      >下生产通知</Button
+                    >
+                  </span>
+
+                  <div>
+                    总计
+                    <span style="color: red">{{ matched_info.total }}</span>
+                    条数据
+                  </div>
+                  <div>
+                    <Button
+                      @click="handleShowCurrencyMatched(matched_info)"
+                      size="small"
+                      type="text"
+                      >{{ matched_info.isCurrenct ? "收缩" : "展开" }}</Button
+                    >
+                    <Icon
+                      size="20"
+                      :type="
+                        matched_info.isCurrenct
+                          ? 'md-arrow-dropdown'
+                          : 'md-arrow-dropright'
+                      "
+                      style="vertical-align: middle"
+                    />
+                  </div>
+                </Col>
+              </Row>
+              <Row
+                style="margin-top: 20px; padding-bottom: 20px"
+                v-if="matched_info.isCurrenct"
+              >
+                <Col span="4">
+                  <span>区域:</span>
+                  <span>
+                    <Select
+                      filterable
+                      multiple
+                      transfer
+                      clearable
+                      filter-by-label
+                      v-model="matchedInfo.region"
+                      :max-tag-count="2"
+                      size="small"
+                      style="width: 150px"
+                    >
+                      <Option
+                        v-for="(item, index) in regionMatchedList"
+                        :key="index"
+                        :label="item"
+                        :value="item"
+                      >
+                      </Option>
+                    </Select>
+                  </span>
+                </Col>
+                <Col span="4">
+                  <span>图号</span>
+                  <span>
+                    <Select
+                      filterable
+                      multiple
+                      transfer
+                      clearable
+                      filter-by-label
+                      v-model="matchedInfo.url_number"
+                      :max-tag-count="2"
+                      size="small"
+                      style="width: 150px"
+                    >
+                      <Option
+                        v-for="(item, index) in urlMatchedList"
+                        :key="index"
+                        :label="item"
+                        :value="item"
+                      >
+                      </Option>
+                    </Select>
+                  </span>
+                </Col>
+                <Col span="4">
+                  <span>产品名称:</span>
+                  <span>
+                    <Select
+                      filterable
+                      multiple
+                      transfer
+                      clearable
+                      filter-by-label
+                      v-model="matchedInfo.product_title"
+                      :max-tag-count="2"
+                      size="small"
+                      style="width: 150px"
+                    >
+                      <Option
+                        v-for="(item, index) in productList"
+                        :key="index"
+                        :label="item"
+                        :value="item"
+                      ></Option>
+                    </Select>
+                  </span>
+                </Col>
+                <Col span="2">
+                  <Button
+                    @click="getMatchedDetailList1(matched_info)"
+                    size="small"
+                    type="primary"
+                  >
+                    搜索
+                  </Button>
+                </Col>
+              </Row>
+              <div v-if="matched_info.isCurrenct">
+                <div>
+                  <Table
+                    ref="selection"
+                    @on-selection-change="ifCheckAll"
+                    :columns="unmatchedSheetTableColumns"
+                    border
+                    :max-height="500"
+                    on-selection-change
+                    :data="matched_detail"
+                    show-summary
+                    :summary-method="unmatchedSummary"
+                    style="width: 100%"
+                  >
+                    <template slot="setSlot" slot-scope="{ row }">
+                      <a @click="cancelMatch(row)" style="margin: 0 5px"
+                        >撤销匹配</a
+                      >
+                    </template>
+                  </Table>
+                </div>
+              </div>
+            </div>
+          </div>
+        </TabPane>
+      </Tabs>
+    </div>
+    <Modal width="80" v-model="showHandingMatchModal" title="手动匹配确认">
+      <div>
+        <Row style="padding: 10px 0">
+          <Col span="8">部件名称:{{ currentChooseTitle }}</Col>
+          <Col span="6">未匹配数量:{{ currentChooseNumber }}</Col>
+          <Col span="4"
+            >余:{{ currentChooseNumber - currentChooseNumberUsed }}</Col
+          >
+          <Col span="4" offset="2">
+            <Button size="small" @click="handleHandingMatchAVG">
+              平均分配
+            </Button>
+          </Col>
+        </Row>
+      </div>
+      <div>
+        <Table
+          :columns="unmatchedRoomTableColumnsModal"
+          border
+          :max-height="500"
+          :data="unmatchedSelectedList"
+        >
+          <template slot="numSlot" slot-scope="{ index }">
+            <Input
+              @on-change="handleHandingMatchNumChange"
+              v-model="unmatchedSelectedList[index].num"
+            />
+          </template>
+        </Table>
+      </div>
+      <div slot="footer">
+        <Button @click="showHandingMatchModal = false">取消</Button>
+        <Button type="primary" @click="handleHandingMatch">确定</Button>
+      </div>
+    </Modal>
+  </div>
+</template>
+
+<script>
+// 这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
+// 例如:import 《组件名称》 from '《组件路径》';
+
+export default {
+  name: "",
+  components: {},
+  props: {},
+  // import引入的组件需要注入到对象中才能使用
+  data() {
+    // 这里存放数据
+    return {
+      ifMatching: true, //确认按钮
+      currencyTag: "1", //当前分页
+      info: {
+        id: this.$route.query.id,
+        project_number: this.$route.query.project_number,
+        project_name: this.$route.query.project_name,
+        cut_size: "",
+        number: "",
+        part_name: "",
+        region: "",
+        wool_size1: "",
+        wool_size2: "",
+        image_number: [],
+        product_name: [],
+      },
+
+      matchedInfo: {
+        product_title: [],
+        url_number: [],
+        region: [],
+      },
+      cut_size: [], //精裁尺寸 未匹配
+      number: [], //房号 未匹配
+      part_name: [], //部件名称 未匹配
+      regionList: [], //区域名称 未匹配
+      wool_size1: [], //毛料尺寸 未匹配
+      wool_size2: [], //毛料尺寸 已匹配
+      urlSelectList: [], //图号列表 未匹配
+      productList: [], //产品列表 未匹配
+      urlMatchedList: [], //图号列表 已匹配
+      productMatchedList: [], //产品列表 已匹配
+      regionMatchedList: [], //区域列表 已匹配
+      numberMatchedList: [], //房号列表 已匹配
+      partNameMatchedList: [], //部件列表 已匹配
+      unmatchedObj: {
+        urlList: [], //图号列表
+        part_list: [], //当前图号下表格列表
+      }, //码单信息
+      unmatchedRoomList: {
+        urlList: [], //图号列表
+        house_list: [{ title: 1 }], //当前图号下表格列表
+      }, //房间信息
+      currentChooseId: "", //选中码单信息中的ID
+      currentChooseNumber: 0, //选中码单信息中的ID
+      currentChooseTitle: "", //选中码单信息中的ID
+      currentChooseNumberUsed: "",
+      matchedList: [],
+      matchedDetailList: [],
+      matchedTimeList: [],
+      unmatchedSheetTableColumns: [
+        {
+          title: "序号",
+          align: "center",
+          type: "index",
+          resizable: true,
+          key: "index",
+        },
+        {
+          title: "区域",
+          align: "center",
+          key: "region",
+          resizable: true,
+        },
+        {
+          title: "图号",
+          align: "center",
+          key: "url_number",
+          resizable: true,
+        },
+        {
+          title: "产品名称",
+          align: "center",
+          key: "product_title",
+          resizable: true,
+        },
+        {
+          title: "数量",
+          align: "center",
+          key: "num",
+          resizable: true,
+        },
+        {
+          title: "金额",
+          align: "center",
+          key: "total_price",
+          resizable: true,
+        },
+        { title: "操作", align: "center", slot: "setSlot", width: 100 },
+      ], //未匹配码单表头
+      unmatchedRoomTableColumns: [
+        { title: "全选", align: "center", minWidth: 60, type: "selection" },
+        { title: "序号", align: "center", type: "index", minWidth: 60 },
+        { title: "区域", align: "center", key: "region", minWidth: 60 },
+        {
+          title: "楼栋",
+          align: "center",
+          key: "house",
+          minWidth: 60,
+        },
+        {
+          title: "单元",
+          align: "center",
+          key: "unit",
+          minWidth: 60,
+          slot: "unit",
+        },
+        { title: "楼层", align: "center", key: "layer", minWidth: 60 },
+        { title: "房号", align: "center", key: "number", minWidth: 60 },
+      ], //未匹配房间表头
+      unmatchedRoomTableColumnsUsed: [],
+      contractColumns: [
+        {
+          title: "全选",
+          align: "center",
+          width: 60,
+          type: "selection",
+          key: "index",
+        },
+        { title: "序号", align: "center", type: "index" },
+        { title: "区域", align: "center", key: "region" },
+        { title: "产品名称", align: "center", key: "product_title" },
+        { title: "数量", align: "center", key: "num" },
+        { title: "金额", align: "center", key: "total_price" },
+      ],
+      contractData: [],
+      contractTotal: "",
+      matchedSheetTableColumns: [
+        {
+          type: "selection",
+          width: 60,
+          align: "center",
+        },
+        {
+          title: "序号",
+          align: "center",
+          type: "index",
+          resizable: true,
+          key: "index",
+        },
+        {
+          title: "区域",
+          align: "center",
+          key: "region",
+          resizable: true,
+        },
+        {
+          title: "图号",
+          align: "center",
+          key: "url_number",
+          resizable: true,
+        },
+        {
+          title: "产品名称",
+          align: "center",
+          key: "product_title",
+          resizable: true,
+        },
+        {
+          title: "数量",
+          align: "center",
+          key: "num",
+          resizable: true,
+        },
+        {
+          title: "金额",
+          align: "center",
+          key: "total_price",
+          resizable: true,
+          slot: "total_price",
+        },
+      ], //深化信息表头
+      unmatchedRoomTableColumnsModal: [],
+      unmatchedSelectedList: [],
+      matchedSelectedList: [],
+      showHandingMatchModal: false,
+      isMatchedSelectAll: false,
+      matchedReopenTag: "",
+      matchedReopenList: [],
+      isClickMatch: true,
+      detailList: {},
+      matched_detail: [],
+      checkedContractList: [], //合同选择的数据
+      checkedDeepenList: [], //深化信息选择的
+      revocationList: [], //撤销匹配选中的列表
+      search:{
+        product_title_list:[],
+        region_list:[]
+      },
+      searchRegionList:[],
+      searchProductTitleList:[]
+    };
+  },
+  // 生命周期 - 创建完成(可以访问当前this实例)
+  created() {},
+  // 生命周期 - 挂载完成(可以访问DOM元素)
+  mounted() {
+    // this.handleSearchUnmatchedInfo();
+    this.detail();
+    this.deepenList();
+    this.contractList();
+  },
+  methods: {
+    checkPrice(row) {
+      if (row.total_price < 0) {
+        row.total_price = "0.00";
+        this.matched_detail[row._index].total_price = "0.00";
+      } else {
+        row.total_price = Number(row.total_price).toFixed(2);
+        this.matched_detail[row._index].total_price = Number(
+          this.matched_detail[row._index].total_price
+        ).toFixed(2);
+        if (row.total_price > 0) {
+          this.matched_detail.forEach((e) => {
+            if (e.id == row.id) {
+              e.total_price = row.total_price;
+            }
+          });
+        }
+        return;
+      }
+    },
+    deepenSummary({ columns, data }) {
+      const sums = {};
+      columns.forEach((column, index) => {
+        const key = column.key;
+        if (key === "index") {
+          sums[key] = {
+            key,
+            value: "合计",
+          };
+          return;
+        }
+        const values = data.map((item) => Number(item[key]));
+        if (key == "total_price") {
+          const v = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[key] = {
+            key,
+            value: (v * 1).toFixed(2),
+          };
+        } else {
+          sums[key] = {
+            key,
+            value: "",
+          };
+        }
+      });
+
+      return sums;
+    },
+    unmatchedSummary({ columns, data }) {
+      const sums = {};
+      columns.forEach((column, index) => {
+        const key = column.key;
+        if (key === "index") {
+          sums[key] = {
+            key,
+            value: "合计",
+          };
+          return;
+        }
+        const values = data.map((item) => Number(item[key]));
+        if (key == "total_price") {
+          const v = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[key] = {
+            key,
+            value: (v * 1).toFixed(2),
+          };
+        } else {
+          sums[key] = {
+            key,
+            value: "",
+          };
+        }
+      });
+
+      return sums;
+    },
+    handleSummary({ columns, data }) {
+      const sums = {};
+      columns.forEach((column, index) => {
+        const key = column.key;
+        if (key === "index") {
+          sums[key] = {
+            key,
+            value: "合计",
+          };
+          return;
+        }
+        const values = data.map((item) => Number(item[key]));
+        if (key == "total_price") {
+          const v = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[key] = {
+            key,
+            value: (v * 1).toFixed(2),
+          };
+        } else {
+          sums[key] = {
+            key,
+            value: "",
+          };
+        }
+      });
+
+      return sums;
+    },
+    handleMatchedSet(row, index, type) {
+      if (this.matchedSelectedList.length == 0) {
+        return this.$Message.warning("请选择");
+      }
+      this.axios
+        .post("/api/contract_match_revoke", {
+          id: [],
+          order_no: this.matchedSelectedList,
+          time: this.matchedTimeList,
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.matchedSelectedList = [];
+            this.matchedTimeList = [];
+            this.handleMatchedListInit();
+          }
+        });
+    },
+    cancelMatch(row) {
+      //撤销匹配
+      this.axios
+        .post("/api/contract_match_revoke", {
+          id: [row.id],
+          order_no: row.order_no,
+          time: [],
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.handleMatchedListInit();
+          }
+        });
+    },
+    checkedContract(se) {
+      this.checkedContractList = se;
+    },
+    checkedDeepen(se) {
+      this.checkedDeepenList = se;
+    },
+    contractSearch() {
+      //合同信息搜索按钮
+      this.contractList();
+    },
+    detail() {
+      //详情接口
+      this.axios({
+        method: "post",
+        url: "/api/contract_match_detail",
+        params: {
+          order_no: this.$route.query.order_no,
+          region: "",
+          product_title: "",
+        },
+      }).then((res) => {
+        if (res.code == 200) {
+          this.detailList = res.data;
+        }
+      });
+    },
+    contractList() {
+      //合同信息table
+      this.axios
+        .post("/api/contract_match_detail_contract", {
+          order_no: this.$route.query.order_no,
+          region: this.search.region_list,
+          product_title: this.search.product_title_list,
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.contractData = res.data.data;
+            this.contractTotal = res.data.total;
+            this.searchRegionList = res.data.region_list;
+            this.searchProductTitleList = res.data.product_title_list
+          }
+        });
+    },
+    MatchedSelect(row, e) {
+      row.del_isSelect = e;
+      if (e == false) {
+        this.isMatchedSelectAll = e;
+      }
+      this.matchedSelectedList = [];
+      this.matchedTimeList = [];
+      this.matchedDetailList.forEach((v) => {
+        if (v.del_isSelect) {
+          this.matchedSelectedList.push(v.order_no);
+          this.matchedTimeList.push(v.crt_time);
+        }
+      });
+      if (this.matchedDetailList.every((target) => target.del_isSelect)) {
+        this.isMatchedSelectAll = true;
+      } else {
+        this.isMatchedSelectAll = false;
+      }
+    },
+    ifCheckAll(s) {
+      this.revocationList = s;
+    },
+    back() {
+      this.$router.go(-1);
+    },
+    handleSelectChange(selection) {
+      this.unmatchedSelectedList = selection;
+      this.unmatchedSelectedList.map((v) => (v.num = ""));
+    },
+    handleMatchedSelectChange(selection) {
+      this.matchedSelectedList = this.matchedSelectedList.concat(
+        selection.map((v) => {
+          return v.cut_order_product_id;
+        })
+      );
+    },
+    handleTabsClick(name) {
+      name == 2 && this.handleMatchedListInit();
+      name == 1 && this.contractList();
+    },
+    deepenList() {
+      //深化信息接口
+      this.axios({
+        method: "post",
+        url: "/api/contract_match_detail_deep",
+        params: { order_no: this.$route.query.order_no, state: 0 },
+      }).then((res) => {
+        this.matchedList = [];
+        res.data.map((v) => {
+          v.isCurrenct = false;
+        });
+        this.matchedList = res.data;
+      });
+    },
+    handleMatchedListInit() {
+      //已匹配
+      this.axios
+        .post("/api/contract_match_detail_deep", {
+          order_no: this.$route.query.order_no,
+          state: 1,
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.matchedDetailList = [];
+            res.data.map((v) => {
+              v.isCurrenct = false;
+            });
+            this.matchedDetailList = res.data;
+          }
+        });
+    },
+    handleShowCurrencySheet(row, type) {
+      if (row.isCurrenct) {
+        row.isCurrenct = !row.isCurrenct;
+      } else {
+        this.unmatchedObj.urlList.map((v) => (v.isCurrenct = false));
+        row.isCurrenct = true;
+        this.matchedReopenTag = row.id;
+      }
+      this.getSheetDetailList(row, type);
+    },
+    handleHiddenSheetDetail(row) {
+      if (row.isHidden) {
+        row.isHidden = !row.isHidden;
+      } else {
+        row.isHidden = true;
+      }
+      this.matchedReopenList = [];
+      this.unmatchedObj.part_list.map((v) => {
+        if (v.isHidden) {
+          this.matchedReopenList.push(
+            v.key.list
+              .map((w) => {
+                return w.value;
+              })
+              .join("*")
+          );
+        }
+      });
+      this.$forceUpdate();
+    },
+    handleHiddenMatchedDetail(row) {
+      if (row.isHidden) {
+        row.isHidden = !row.isHidden;
+      } else {
+        row.isHidden = true;
+      }
+      this.$forceUpdate();
+    },
+    handleShowCurrencyMatched1(row) {
+      if (!row) {
+        return this.matchedList.map((v) => (v.isCurrenct = false));
+      }
+      if (row.isCurrenct) {
+        row.isCurrenct = !row.isCurrenct;
+      } else {
+        this.matchedList.map((v) => (v.isCurrenct = false));
+        row.isCurrenct = true;
+      }
+      this.getMatchedDetailList(row);
+    },
+    handleShowCurrencyMatched(row) {
+      if (row.isCurrenct) {
+        row.isCurrenct = !row.isCurrenct;
+      } else {
+        this.matchedList.map((v) => (v.isCurrenct = false));
+        row.isCurrenct = true;
+      }
+      this.getMatchedDetailList1(row);
+    },
+    getSheetDetailList(row, type) {
+      switch (type) {
+        case 1:
+          row.isCurrenct &&
+            this.axios
+              .post("/api/bst_matching_un_product_detail", {
+                cut_order_product_id: row.id,
+                id: this.info.id,
+                cut_size: this.info.cut_size,
+                number: this.info.number,
+                part_name: this.info.part_name,
+                region: this.info.region,
+                wool_size1: this.info.wool_size1,
+                key: this.matchedReopenList,
+              })
+              .then((res) => {
+                this.unmatchedObj.part_list = [];
+                this.unmatchedObj.part_list = res.data.part_list;
+                this.unmatchedObj.part_list = res.data.part_list;
+                this.unmatchedObj.part_list.forEach((v) => {
+                  v.isHidden = true;
+                });
+                this.unmatchedRoomList.house_list = [];
+                this.unmatchedRoomList.house_list = res.data.house_list;
+                this.unmatchedRoomList.house_list.forEach((v, index) => {
+                  this.unmatchedObj.part_list[index].key.list.forEach(
+                    (item) => {
+                      v[item.key] = item.value;
+                    }
+                  );
+                });
+
+                this.unmatchedRoomTableColumnsUsed =
+                  this.unmatchedRoomTableColumns.concat(
+                    res.data.head_word.map((v) => {
+                      return {
+                        title: v,
+                        align: "center",
+                        key: v,
+                        minWidth: 60,
+                      };
+                    })
+                  );
+                this.unmatchedRoomTableColumnsModal =
+                  this.unmatchedRoomTableColumnsUsed.concat({
+                    title: "匹配数量",
+                    align: "center",
+                    minWidth: 60,
+                    slot: "numSlot",
+                  });
+                this.unmatchedRoomTableColumnsModal =
+                  this.unmatchedRoomTableColumnsModal.splice(1);
+                this.cut_size = res.data.search_word.cut_size;
+                this.number = res.data.search_word.number;
+                this.part_name = res.data.search_word.part_name;
+                this.regionList = res.data.search_word.region;
+                this.wool_size1 = res.data.search_word.wool_size1;
+                this.wool_size2 = res.data.search_word.wool_size2;
+                this.unmatchedObj.part_list.map((v) => {
+                  if (v.state == 1) {
+                    v.isHidden = true;
+                  }
+                });
+                this.$forceUpdate();
+              });
+          break;
+        case 2:
+          row.isCurrenct &&
+            this.axios
+              .post("/api/bst_matching_un_product_detail", {
+                cut_order_product_id: row.id,
+                id: this.info.id,
+                cut_size: this.info.cut_size,
+                number: this.info.number,
+                part_name: this.info.part_name,
+                region: this.info.region,
+                wool_size2: this.info.wool_size2,
+                key: this.matchedReopenList,
+              })
+              .then((res) => {
+                this.unmatchedRoomList.house_list = res.data.house_list;
+                this.unmatchedRoomTableColumnsUsed =
+                  this.unmatchedRoomTableColumns.concat(
+                    res.data.head_word.map((v) => {
+                      return {
+                        title: v,
+                        align: "center",
+                        key: v,
+                        minWidth: 60,
+                      };
+                    })
+                  );
+                this.unmatchedRoomTableColumnsModal =
+                  this.unmatchedRoomTableColumnsUsed.concat({
+                    title: "匹配数量",
+                    align: "center",
+                    minWidth: 60,
+                    slot: "numSlot",
+                  });
+                this.unmatchedRoomTableColumnsModal =
+                  this.unmatchedRoomTableColumnsModal.splice(1);
+                this.cut_size = res.data.search_word.cut_size;
+                this.number = res.data.search_word.number;
+                this.part_name = res.data.search_word.part_name;
+                this.regionList = res.data.search_word.region;
+                this.wool_size1 = res.data.search_word.wool_size1;
+                this.wool_size2 = res.data.search_word.wool_size2;
+                this.unmatchedObj.part_list.map((v) => {
+                  if (v.state == 1) {
+                    v.isHidden = true;
+                  }
+                });
+                this.$forceUpdate();
+              });
+          break;
+      }
+    },
+    checkedDeepen(se) {
+      this.checkedDeepenList = se;
+    },
+    getMatchedDetailList(row) {
+      this.matched_detail.forEach((e) => {
+        if (e.total_price > 0) {
+          this.checkedDeepenList.push(e);
+        }
+      });
+      row.isCurrenct &&
+        this.axios
+          .post("/api/contract_match_detail_deep_open", {
+            order_no: row.order_no,
+            state: 0,
+            crt_time: row.crt_time,
+            region: this.matchedInfo.region,
+            product_title: this.matchedInfo.product_title,
+            url_number: this.matchedInfo.url_number,
+          })
+          .then((res) => {
+            res.data.data.forEach((item) => {
+              this.$set(item, "total_price", 0);
+            });
+            this.matched_detail = res.data.data;
+            this.matched_detail.forEach((e) => {
+              this.checkedDeepenList.forEach((l) => {
+                if (e.id == l.id) {
+                  e._checked = true;
+                  e.total_price = l.total_price;
+                }
+              });
+            });
+            this.regionMatchedList = res.data.region_list; //区域
+            this.urlMatchedList = res.data.url_number_list; //图号
+            this.productList = res.data.product_title_list;
+            this.$nextTick(function () {
+              if (row.del_isSelect == true || row.isSelect == true) {
+                this.$refs.selection[0].selectAll(true);
+              }
+            });
+          });
+    },
+
+    getMatchedDetailList1(row) {
+      row.isCurrenct &&
+        this.axios
+          .post("/api/contract_match_detail_deep_open", {
+            order_no: row.order_no,
+            state: 1,
+            crt_time: row.crt_time,
+            region: this.matchedInfo.region,
+            product_title: this.matchedInfo.product_title,
+            url_number: this.matchedInfo.url_number,
+          })
+          .then((res) => {
+            this.matched_detail = res.data.data;
+            this.$nextTick(function () {
+              if (row.del_isSelect == true || row.isSelect == true) {
+                this.$refs.selection[0].selectAll(true);
+              }
+            });
+          });
+    },
+    handleSearchUnmatchedInfo() {
+      this.axios({
+        method: "get",
+        url: "/api/bst_matching_un_product_list",
+        params: {
+          id: this.info.id,
+          image_number: this.info.image_number,
+          product_name: this.info.product_name,
+        },
+      }).then((res) => {
+        if (res.code == 200) {
+          let data = [];
+          res.data.list.map((v) => (v.isCurrenct = false));
+          res.data.list.forEach((element) => {
+            if (element.number != 0) {
+              data.push(element);
+            }
+          });
+          this.unmatchedObj.urlList = data;
+          this.urlSelectList = res.data.image_number;
+          this.productList = res.data.product_name;
+          this.unmatchedSelectedList = [];
+          this.unmatchedObj.urlList.map((v) => {
+            if (v.id == this.matchedReopenTag) {
+              v.isCurrenct = true;
+              if (this.isClickMatch) {
+                this.getSheetDetailList(v, 1);
+              }
+            }
+          });
+          this.$forceUpdate();
+        }
+      });
+    },
+    handleHandingMatchAVG() {
+      let num = parseInt(
+        this.currentChooseNumber / this.unmatchedSelectedList.length
+      );
+      this.unmatchedSelectedList.map((v) => {
+        v.num = num;
+      });
+      this.unmatchedSelectedList = JSON.parse(
+        JSON.stringify(this.unmatchedSelectedList)
+      );
+      this.handleHandingMatchNumChange();
+    },
+    handleIsAllowHandingMatch() {
+      //匹配按钮
+      if (this.checkedContractList.length < 1) {
+        return this.$Message.warning("请选择合同信息中的内容");
+      }
+      if (this.checkedDeepenList.length < 1) {
+        return this.$Message.warning("请选择深化信息中的内容");
+      }
+      let priceValue = 0;
+      this.checkedContractList.forEach((e) => {
+        priceValue += e.total_price; //这是合同选择的价格的和
+      });
+      let average = parseFloat(
+        parseFloat(priceValue) / parseFloat(this.checkedDeepenList.length)
+      ).toFixed(2);
+      this.matched_detail.forEach((e) => {
+        this.checkedDeepenList.forEach((l, index) => {
+          if (e.id == l.id) {
+            e.total_price = average;
+            e._checked = true;
+            this.ifMatching = false;
+          }
+        });
+      });
+    },
+    matchiSngSave() {
+      if (this.checkedContractList.length < 1) {
+        return this.$Message.warning("请选择合同信息中的内容");
+      }
+      if (this.checkedDeepenList.length < 1) {
+        return this.$Message.warning("请选择深化信息中的内容");
+      }
+      // 匹配保存
+      let contractDetailId = [];
+      this.checkedContractList.forEach((e) => {
+        contractDetailId.push(e.id);
+      });
+      let children = [];
+      this.checkedDeepenList.forEach((item) => {
+        this.matched_detail.forEach((item2) => {
+          if (item.id == item2.id) {
+            let chilObj = {};
+            chilObj = {
+              id: item2.id,
+              total_price: item2.total_price,
+            };
+            children.push(chilObj);
+          }
+        });
+      });
+      this.axios
+        .post("/api/contract_match_save", {
+          children: children,
+          contract_detail_id: contractDetailId,
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.contractList();
+            this.deepenList();
+            this.handleShowCurrencyMatched1(false);
+          }
+        });
+    },
+    handleHandingMatchNumChange() {
+      let sum = 0;
+      this.unmatchedSelectedList.map((v) => {
+        sum += v.num * 1;
+      });
+      this.currentChooseNumberUsed = sum;
+    },
+    handleHandingMatch() {
+      const house = this.unmatchedSelectedList.map((v) => {
+        return { cut_order_product_room_id: v.id, num: v.num };
+      });
+      this.axios
+        .post("/api/bst_hand_matching", {
+          cut_order_product_detail_id: this.currentChooseId,
+          house,
+        })
+        .then((res) => {
+          if (res.code == 200) {
+            this.$Message.success(res.msg);
+            this.showHandingMatchModal = false;
+            this.currentChooseId = "";
+            this.currentChooseNumber = 0;
+            this.currentChooseNumberUsed = 0;
+            this.currentChooseTitle = "";
+            this.unmatchedSelectedList = [];
+            this.isClickMatch = true;
+            this.handleSearchUnmatchedInfo();
+          }
+        });
+    },
+    handleMatchedSelectAll() {
+      this.isMatchedSelectAll = !this.isMatchedSelectAll;
+      this.matchedSelectedList = [];
+      this.matchedTimeList = [];
+      this.matchedDetailList.forEach((e) => {
+        if (this.isMatchedSelectAll) {
+          e.del_isSelect = true;
+          e.isSelect = true;
+          this.matchedSelectedList.push(e.order_no);
+          this.matchedTimeList.push(e.crt_time);
+        } else {
+          e.del_isSelect = false;
+          e.isSelect = false;
+        }
+      });
+    },
+    handleMatchedSelect(row, e) {
+      row.isSelect = e;
+      let flag = true;
+      this.matchedSelectedList = [];
+      this.matchedList.map((v) => {
+        if (v.product_state == 0) {
+          if (v.isSelect) {
+            this.matchedSelectedList.push(v.id);
+          } else {
+            flag = false;
+          }
+        }
+      });
+      this.isMatchedSelectAll = flag;
+    },
+  },
+  // 监听属性 类似于data概念
+  computed: {},
+  // 监控data中的数据变化
+  watch: {},
+  beforeCreate() {}, // 生命周期 - 创建之前
+  beforeMount() {}, // 生命周期 - 挂载之前
+  beforeUpdate() {}, // 生命周期 - 更新之前
+  updated() {}, // 生命周期 - 更新之后
+  beforeDestroy() {}, // 生命周期 - 销毁之前
+  destroyed() {}, // 生命周期 - 销毁完成
+  activated() {}, // 如果页面有keep-alive缓存功能,这个函数会触发
+};
+</script>
+
+<style lang="scss" scoped>
+.context-tabs {
+  position: relative;
+  max-height: 650px;
+  overflow: hidden;
+  overflow-y: auto;
+  padding: 15px;
+  margin: 10px;
+  margin-bottom: 30px;
+  border-radius: 5px;
+  box-shadow: 1px 1px 5px 1px #999;
+}
+
+span {
+  font-size: 14px;
+}
+.table_bottom {
+  padding-top: 10px;
+  > span {
+    color: #d9001b;
+  }
+}
+.top-info {
+  padding: 10px;
+  font-size: 18px;
+}
+.context-tabs {
+  position: relative;
+  max-height: 80%;
+  overflow: hidden;
+  overflow-y: auto;
+  padding: 15px;
+  margin: 10px;
+  margin-bottom: 30px;
+  border-radius: 5px;
+  box-shadow: 1px 1px 5px 1px #999;
+  // 未匹配样式
+  .context-unmatched-sheet-table,
+  .context-unmatched-room-table {
+  }
+  .context-unmatched-sheet-search,
+  .context-unmatched-room-search {
+    padding: 10px 0;
+  }
+  // 匹配样式
+  .matched-block {
+    padding: 15px;
+    margin-bottom: 30px;
+    background-color: #e9ecef;
+    border-radius: 5px;
+  }
+}
+/deep/.ivu-tabs-nav-scroll {
+  display: flex;
+  justify-content: center;
+}
+/deep/.ivu-table-cell {
+  padding: 0;
+}
+.sheet-block,
+.room-block {
+  max-height: 100%;
+  overflow: hidden;
+  overflow-y: auto;
+}
+</style>

+ 170 - 0
src/views/Agreement/productMessage/confirm.vue

@@ -0,0 +1,170 @@
+<template>
+    <div>
+          <Toptitle title="生产通知单详情">
+            <Button type="primary" @click="totalDel">批量删除</Button>
+            <Button type="primary" class='block_style'>导出</Button>
+            <Button type="primary" class='block_style' @click='back'>返回</Button>  
+            </Toptitle> 
+            <div style="height:85%;overflow:auto">
+            <Form :label-width='100' class="form_content">
+                <FormItem label='生产通知单:'>
+                    <Input style="width: 200px" clearable/>
+                </FormItem>
+                <FormItem label='下通知时间:'>
+                    <DatePicker type="date" placeholder="年/月/日" style="width: 200px"></DatePicker>
+                    ~
+                    <DatePicker type="date" placeholder="年/月/日" style="width: 200px"></DatePicker>
+                </FormItem>
+                <FormItem :label-width='60'>
+                    <Button type="primary">
+                        搜索
+                    </Button>
+                    </FormItem>
+            </Form>
+            <Table :data='tableData' :columns='tableColumns' max-height='550' border @on-selection-change='handleSelectData'>
+              <template slot="set" slot-scope="{row}">
+                <a @click="goPage(row)">查看</a>
+                   <a class='block_style' @click="del(row)">删除</a>
+                   </template>
+            </Table>
+            </div>
+             <div class="content_body_page">
+        <Page
+          :page-size-opts="[10, 20, 30, 40, 100]"
+          @on-page-size-change="changeSize"
+          @on-change="changePage"
+          :current="pageIndex"
+          show-total
+          show-elevator
+          :total="total"
+          show-sizer
+          :page-size="pageSize"
+        />
+             </div>
+    </div>
+</template>
+<script>
+export default {
+    data(){
+        return{
+            selectData:[],
+            searchData:{
+              product_no:'',
+              start_time:'',
+              end_time:'',
+            },
+            pageIndex:1,
+            pageSize:10,
+            total:0,
+            tableData:[],
+            tableColumns:[
+                {type:'selection',align:'center',minWidth:80},
+                {title:'生产通知单号',align:'center',minWidth:200,key:'product_no'},
+                {title:'下生产通知时间',align:'center',minWidth:200,key:'product_time',render:(h,params)=>{
+                    const {row} = params;
+                    return h('span',{},this.func.replaceDateNoHMS(row.product_time))
+                }},
+                {title:'操作',align:'center',minWidth:200,key:'set',slot:'set'},
+            ],
+
+        }
+    },
+    mounted(){
+ this.initData();
+    },
+    methods:{
+        goPage(row){
+            this.$router.push({path:'/cms/Agreement/productMessage/detail',query:{...row}});
+        },
+        totalDel(){
+            if(this.selectData.length==0){
+                return this.$Message.success('请选择数据!')
+            }
+            this.confirmDelete({
+                   title:'批量删除确认?',
+                   content:"是否确定批量删除?",
+                   then: ()=>{
+           let product_no = [];
+           this.selectData.forEach(v=>{
+               product_no.push(v.product_no)
+           })
+           this.axios.post('/api/contract_product_del',{product_no}).then(res=>{
+               if(res.code==200){
+                   this.$Message.success(res.msg);
+                   if(this.selectData.length == this.tableData&&this.pageIndex!=1){
+                       this.pageIndex--;
+                   }
+                   this.selectData = [];
+                   this.initData(this.searchData);
+
+               }
+           })
+                   }
+            })
+        },
+        handleSelectData(e){
+      this.selectData = e;
+        },
+        changeSize(e){
+         this.pageSize = e;
+         this.pageIndex =1;
+         this.initData(this.searchData)
+        },
+        changePage(e){
+         this.pageIndex =e;
+         this.initData(this.searchData)
+        },
+        initData(row){
+            let obj = {};
+            if(row){
+              obj = JSON.parse(JSON.stringify(this.searchData));
+               obj.start_time = obj.start_time?Date.parse(obj.start_time).toString().slice(0,10):'';
+               obj.end_time = obj.end_time?Date.parse(obj.end_time).toString().slice(0,10):'';
+            }
+               
+              this.axios.post('/api/contract_product_no_list',{page_index:this.pageIndex,page_size:this.pageSize,order_no:this.$route.query.order_no,...obj}).then(res=>{
+                  this.tableData = res.data.data;
+                  this.total = res.data.total;
+              })
+        },
+        del(row){
+          this.confirmDelete({
+                   title:'确认删除?',
+                   content:"是否确定删除?",
+                   then: ()=>{
+                       this.axios.post('/api/contract_product_del',{product_no:[row.product_no]}).then(res=>{
+                           if(res.code==200){
+                              this.selectData.forEach((v,index)=>{
+                                  if(v.product_no == row.product_no){
+                                        this.selectData.splice(index,1)
+                                  }
+                              })
+                            if(this.tableData.length==1&&this.pageIndex!=1){
+                                this.pageIndex--;
+                            }
+                            this.initData(this.searchData);
+                           }
+                       })
+                   }
+          })
+        },
+        back(){
+            this.$router.go(-1);
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.block_style{
+    margin-left: 10px;
+}
+.form_content{
+    margin-top:10px;
+    display: flex;
+    flex-wrap: wrap;
+}
+.content_body_page{
+    text-align: center;
+    margin-top: 10px;
+}
+</style>

+ 134 - 0
src/views/Agreement/productMessage/detail.vue

@@ -0,0 +1,134 @@
+<template>
+    <div>
+        <Toptitle title="生产通知单号详情">
+          <Button type="primary" style="margin-right:10px">导出</Button>
+          <Button type="primary" @click="back">返回</Button>
+        </Toptitle>
+        <div style="height:85%;overflow:auto"> 
+         <Form :label-width='100' class="form_content">
+                <FormItem label='生产通知单:'>
+                    <span class="form_item">{{formData.product_no}}</span>
+                </FormItem>
+                <FormItem label='下通知时间:'>
+                 <span class="form_item">{{func.replaceDateNoHMS(formData.product_time)}}</span>
+                </FormItem>
+            </Form>
+            <Table :data='tableData' :columns='tableColumns' border max-height='550'  show-summary
+                      :summary-method="handleSummary"></Table>
+            </div>
+              <div class="content_body_page">
+        <Page
+          :page-size-opts="[10, 20, 30, 40, 100]"
+          @on-page-size-change="changeSize"
+          @on-change="changePage"
+          :current="pageIndex"
+          show-total
+          show-elevator
+          :total="total"
+          show-sizer
+          :page-size="pageSize"
+        />
+          </div>
+    </div>
+</template>
+<script>
+export default {
+    data(){
+        return{
+                 tableData:[],
+                 tableColumns:[
+                     {type:'index',align:'center',minWidth:80,title:'序号'},
+                     {title:'区域',align:'center',minWidth:120,key:'region'},
+                      {title:'图号',align:'center',minWidth:120,key:'url_number'},
+                       {title:'产品名称',align:'center',minWidth:120,key:'product_title'},
+                        {title:'数量',align:'center',minWidth:120,key:'num'},
+                         {title:'单位',align:'center',minWidth:120,key:'unit'},
+                          {title:'饰面',align:'center',minWidth:120,key:'finish'},
+                           {title:'备注',align:'center',minWidth:120,key:'remark'},
+                            {title:'金额',align:'center',minWidth:120,key:'total_price'},
+                 ],
+                 pageIndex:1,
+                 pageSize:10,
+                 total:0,
+                 formData:{
+                     product_no:'',
+                     product_time:'',
+                 }
+        }
+    },
+    mounted(){
+      this.initData();
+    },
+    methods:{
+        changeSize(e){
+              this.pageSize = e;
+              this.pageIndex =1;
+              this.initData();
+        },
+        changePage(e){
+          this.pageIndex=e;
+          this.initData();
+        },
+         handleSummary({ columns, data }) {
+      const sums = {};
+      columns.forEach((column, index) => {
+        const key = column.key;
+        if (index === 0) {
+          sums[key] = {
+            key,
+            value: "合计",
+          };
+          return;
+        }
+        const values = data.map((item) => Number(item[key]));
+        if (key == "total_price") {
+          const v = values.reduce((prev, curr) => {
+            const value = Number(curr);
+            if (!isNaN(value)) {
+              return prev + curr;
+            } else {
+              return prev;
+            }
+          }, 0);
+          sums[key] = {
+            key,
+            value: (v * 1).toFixed(2),
+          };
+        } else {
+          sums[key] = {
+            key,
+            value: "",
+          };
+        }
+      });
+
+      return sums;
+    },
+        initData(){
+                this.axios.post('/api/contract_product_no_detail',{page_index:this.pageIndex,page_size:this.pageSize,product_no:this.$route.query.product_no,product_time:this.$route.query.product_time}).then(res=>{
+                    this.formData = res.data;
+                    this.tableData= res.data.data.data;
+                    this.total = res.data.data.total;
+                })
+        },
+        back(){
+            this.$router.go(-1);
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.form_content{
+    margin-top: 10px;
+    display: flex;
+    flex-wrap: wrap;
+}
+.form_item{
+    display: inline-block;
+    width: 200px;
+}
+.content_body_page{
+    text-align: center;
+    margin-top: 20px;
+}
+</style>

+ 106 - 0
src/views/Agreement/productMessage/list.vue

@@ -0,0 +1,106 @@
+<template>
+    <div>
+        <Toptitle title="生产通知单"></Toptitle>
+        <div class="content">
+        <Form :label-width='120' class="form_content">
+            <FormItem label='金螳螂ID:'>
+                <Input clearable v-model="searchData.jtl_id" placeholder="请输入金螳螂ID"/>
+            </FormItem>
+            <FormItem label='项目编码:'>
+                <Input clearable v-model="searchData.order_no" placeholder="请输入项目编码"/>
+            </FormItem>
+            <FormItem label='项目名称:'>
+                <Input clearable v-model="searchData.project_title" placeholder="请输入项目名称"/>
+            </FormItem>
+            <FormItem label='项目简称:'>
+                <Input clearable v-model="searchData.abbreviation" placeholder="请输入项目简称"/>
+            </FormItem>
+            <FormItem :label-width='40'>
+                <Button type="primary" @click="initData(searchData)">搜索</Button>
+            </FormItem>
+        </Form>
+        <Table :data='tableData' :columns='tableColumns' border max-height='550'>
+            <template slot="set" slot-scope="{row}">
+                <a @click="handleSet(row)">查看</a>
+            </template>
+        </Table>
+        </div>
+          <div class="content_body_page">
+        <Page
+          :page-size-opts="[10, 20, 30, 40, 100]"
+          @on-page-size-change="changeSize"
+          @on-change="changePage"
+          :current="pageIndex"
+          show-total
+          show-elevator
+          :total="total"
+          show-sizer
+          :page-size="pageSize"
+        />
+          </div>
+    </div>
+</template>
+<script>
+export default {
+    data(){
+        return{
+            pageIndex:1,
+            pageSize:10,
+            total:0,
+            tableData:[],
+            tableColumns:[
+                {title:'金螳螂ID',align:'center',minWidth:120,key:'jtl_id'},
+                {title:'项目编号',align:'center',minWidth:120,key:'order_no'},
+                {title:'项目名称',align:'center',minWidth:120,key:'project_title'},
+                {title:'项目简称',align:'center',minWidth:120,key:'abbreviation'},
+                {title:'操作',align:'center',minWidth:120,key:'set',slot:'set'}
+            ],
+               searchData:{
+                   jtl_id:'',
+                   order_no:'',
+                   project_title:'',
+                   abbreviation:'',
+               }
+        }
+    },
+    mounted(){
+           this.initData();
+    },
+    methods:{
+        initData(row){
+
+         this.axios.post('/api/contract_product_list',{...row,page_size:this.pageSize,page_index:this.pageIndex}).then(res=>{
+             this.tableData = res.data.data;
+             this.total = res.data.total;
+         })
+        },
+        changePage(e){
+          this.pageIndex = e;
+          this.initData(this.searchData);
+        },
+        changeSize(e){
+            this.pageIndex = 1;
+            this.pageSize = e;
+            this.initData(this.searchData);
+        },
+        handleSet(row){
+            this.$router.push({path:'/cms/Agreement/productMessage/confirm',query:{order_no:row.order_no}})
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.content{
+    height:85%;
+    overflow: auto;
+}
+.form_content{
+    margin-top: 15px;
+    display: flex;
+    flex-wrap: wrap;
+}
+.content_body_page{
+    text-align: center;
+    margin-top:10px;
+}
+</style>

+ 2 - 0
src/views/BasicSettings/SuppliersManage/SippliersClassify.vue

@@ -369,6 +369,8 @@ export default {
 <style lang='scss' scoped>
 .content {
   width: 100%;
+  height: 90%;
+  overflow: auto;
   .content_left {
     width: 70%;
   }

+ 1 - 1
src/views/BasicSettings/SuppliersManage/SippliersList.vue

@@ -21,7 +21,7 @@
           :data="treeData"
           select-node
           children-key="sub"
-          style="width: 100%"
+          style="width: 100%;height:100%;overflow:auto"
           @on-select-change="handleTreeSelect"
           class="demo-tree-render"
         ></Tree>

+ 75 - 80
src/views/leadMatch/MatchList/HXYMatchCheck.vue

@@ -80,6 +80,29 @@
             </Select>
           </span>
         </Col>
+          <Col span="5">
+          <span>区域:</span>
+          <span>
+            <Select
+              filterable
+              multiple
+              filter-by-label
+              clearable
+              transfer
+              v-model="matchedInfo.t_region"
+              :max-tag-count="2"
+              size="small"
+              style="width: 150px"
+            >
+              <Option
+                v-for="(item, index) in regionList"
+                :key="index"
+                :label="item"
+                :value="item"
+              ></Option>
+            </Select>
+          </span>
+        </Col>
         <Col span="2">
           <Button @click="initData" size="small" type="primary">
             搜索
@@ -241,40 +264,15 @@
           </Col>
         </Row>
         <div v-if="matched_info.isCurrenct">
-          <div
-            v-for="(matched_detail, index) in matchedDetailList"
-            :key="index"
-          >
-            <Row type="flex" align="middle">
-              <Col span="10" style="padding:10px 0">
-                <span>匹配信息:</span>
-                <span
-                  v-for="(matched_info, index) in matched_detail.special"
-                  :key="index"
-                >
-                  {{ matched_info.key }}:{{ matched_info.value }}
-                </span>
-                <span>{{ matched_detail.num }}组</span>
-              </Col>
-              <Col span="2" offset="12" style="padding:10px 0">
-                <Button
-                  @click="handleHiddenMatchedDetail(matched_detail)"
-                  size="small"
-                  type="text"
-                >
-                  {{ matched_detail.isHidden ? "展开" : "收缩" }}
-                </Button>
-              </Col>
-            </Row>
+        
+       
             <Table
-              v-show="!matched_detail.isHidden"
               :columns="matchedSheetTableColumns"
               border
               :max-height="500"
-              :data="matched_detail.detail"
+              :data="matchedDetailList"
             >
             </Table>
-          </div>
         </div>
       </div>
     </div>
@@ -353,6 +351,7 @@ export default {
     // 这里存放数据
     return {
       delData:{
+        regionList:[],
         user_name:'',
         password:'',
       },
@@ -362,11 +361,12 @@ export default {
       isMatchedSelectAll: false,
       matchedInfo: {
         id: this.$route.query.id,
-        image_number: "",
-        product_name: "",
+        image_number: [],
+        product_name: [],
         region: [],
         number: [],
         part_name: [],
+        t_region:[],
       },
       urlMatchedList: [],
       productMatchedList: [],
@@ -376,58 +376,51 @@ export default {
       matchedDetailList: [],
       matchedList: [],
       matchedSheetTableColumns: [
-        { title: "序号", align: "center", type: "index", resizable: true,
-                        width: 100 },
-         { title: "组合名称", align: "center", key:'compose_name', resizable: true,
-                        width: 100 },
-        { title: "区域名称", align: "center", key: "region",  resizable: true,
-                        width: 160 },
-        { title: "房号", align: "center", key: "house_number",  resizable: true,
-                        width: 160 },
-        { title: "部件名称", align: "center", key: "part_name",  resizable: true,
-                        width: 180 },
-        { title: "行号", align: "center", key: "line",  resizable: true,
-                        width: 170 },
-        { title: "木皮1", align: "center", key: "skin1",  resizable: true,
-                        width: 160 },
+         { title: "序号", align: "center", type: "index", minWidth: 80 },
+        { title: "楼栋", align: "center",minWidth: 100,key:'house' },
+        { title: "单元", align: "center",minWidth: 100,key:'unit' },
+        { title: "楼层", align: "center", minWidth: 100,key:'layer'},
+         { title: "区域", align: "center", minWidth: 100,key:'region'},
+          { title: "户型", align: "center", minWidth: 100,key:'household'},
+          { title: "房号", align: "center", minWidth: 100,key:'house_number'},
+           { title: "生产数量", align: "center", minWidth: 100,key:'product_num'},
+          { title: "组合名称", align: "center", key: "compose_name", minWidth: 100 },
+        { title: "部件名称", align: "center", key: "part_name", minWidth: 100 },
         {
-          title: "材料",
+          title: "产品材料",
           align: "center",
-          resizable: true,
-                        width: 150,
-          render: (h, params) => {
-            return h("span", {}, params.row.board1 +';'+params.row.board2);
-          },
+          minWidth: 100,
+         key:'material_remark'
         },
-        { title: "木皮2", align: "center", key: "skin2", resizable: true,
-                        width: 150 },
-        { title: "毛料尺寸", align: "center", key: "wool_size",  resizable: true,
-                        width: 150 },
+        { title: "饰面名称", align: "center", key: "finish_remark", minWidth: 100 },
+        { title: "毛料尺寸", align: "center", key: "wool_size", minWidth: 100 },
+        
+        { title: "精裁尺寸", align: "center", key: "cut_size", minWidth: 100 },
         {
-          title: "原料数量",
+          title: "数量",
           align: "center",
-          key: "wool_number",
-          resizable: true,
-                        width: 100,
+          key: "num",
+          minWidth: 80,
         },
-        { title: "精裁尺寸", align: "center", key: "cut_size",  resizable: true,
-                        width: 100 },
         {
-          title: "零部件数量",
+          title: "贴皮方式",
           align: "center",
-          key: "num",
-           resizable: true,
-                        width: 100,
+          key: "cut_number",
+          minWidth: 90,
         },
-        { title: "贴皮面积", align: "center", key: "stick", resizable: true,
-                        width: 140 },
-        { title: "精裁面积", align: "center", key: "cut",  resizable: true,
-                        width: 140 },
-         { title: "是否打印", align: "center", key: "chip_state",  resizable: true,
-                        width: 80 ,  render: (h, params) => {
-            return h("span", {}, params.row.chip_state==0?'否':'是');
-          }},
-        { title: "工艺要求", align: "center", key: "remark", minWidth: 180 },
+        {
+          title: "封边",
+          align: "center",
+          key: "unbind_number",
+          minWidth: 90,
+        },
+        { title: "贴皮面积", align: "center", key: "skin_area", minWidth: 100 },
+        { title: "精裁面积", align: "center", key: "cut_area", minWidth: 100 },
+       { title: "备注", align: "center", key: "remark", minWidth: 80 },
+ { title: "打印芯片", align: "center", key: "", minWidth: 100,render:(h,params)=>{
+   const {row} = params;
+   return h('span',{},row.chip_state==1?'是':'否')
+ } },
       ], //匹配表头
       processModal: false,
       process_man: "",
@@ -454,7 +447,7 @@ export default {
   },
   methods: {
     important_del(){
-       this.axios.post('/api/delete_cut_order_product',{id:[...this.delList],...this.delData}).then(res=>{
+       this.axios.post('/api/delete_cut_order_product_2',{id:[...this.delList],...this.delData}).then(res=>{
          if(res.code == 200){
            this.$Message.success(res.msg);
            this.delList = [];
@@ -535,7 +528,7 @@ MatchedSelect(row,e){
         this.cut_order_product_ids = this.matchedSelectedList;
        
       }
-     this.axios.post('/api/bst_get_plan_time',{type:-1,id:this.cut_order_product_ids,order_no:this.$route.query.project_number}).then(res=>{
+     this.axios.post('/api/bst_pull',{type:-1,cut_order_product_ids:this.cut_order_product_ids,order_no:this.$route.query.project_number}).then(res=>{
           if(res.code == 200){
            this.processModal = true;
              let time = [];
@@ -580,13 +573,14 @@ MatchedSelect(row,e){
     },
     initData() {
       this.axios
-        .get("/api/bst_matching_on_list", {
-          params: {
+        .post("/api/bst_matching_on_list_2", 
+        {
             id: this.matchedInfo.id,
             image_number: this.matchedInfo.image_number,
             product_name: this.matchedInfo.product_name,
+            region:this.matchedInfo.t_region
           },
-        })
+        )
         .then((res) => {
           this.matchedList = [];
           res.data.list.map((v) => {
@@ -594,6 +588,7 @@ MatchedSelect(row,e){
           });
           this.urlMatchedList = res.data.image_number;
           this.productMatchedList = res.data.product_name;
+          this.regionList = res.data.region;
           // this.matchedList = res.data.list;
           res.data.list.forEach((v, index) => {
             if (v.matching_status == 2) {
@@ -622,7 +617,7 @@ MatchedSelect(row,e){
     getMatchedDetailList(row) {
       row.isCurrenct &&
         this.axios
-          .post("/api/bst_matching_on_detail", {
+          .post("/api/bst_matching_on_detail_2", {
             cut_order_product_id: row.id,
             id: this.matchedInfo.id,
             number: this.matchedInfo.number,
@@ -633,7 +628,7 @@ MatchedSelect(row,e){
             this.regionMatchedList = res.data.region;
             this.numberMatchedList = res.data.number;
             this.partNameMatchedList = res.data.part_name;
-            this.matchedDetailList = res.data.list;
+            this.matchedDetailList = res.data.list[0].detail;
           });
     },
   },

Datei-Diff unterdrückt, da er zu groß ist
+ 440 - 170
src/views/leadMatch/MatchList/HXYMatchPage.vue


+ 1 - 1
vue.config.js

@@ -2,7 +2,7 @@ const axios_default_ip =
   process.env.NODE_ENV == "dev"
     ? "http://121.41.102.225:82"
     : process.env.NODE_ENV == "test-prd"
-    ? "http://hxy_api.qingyaokeji.com" //测试服
+    ? "http://121.41.102.225:82" //测试服
     : process.env.NODE_ENV == "prd_other"
     ? "http://121.37.173.82:82" //贝斯特
     : "http://124.71.176.88:882";

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.