浏览代码

部分新功能,售后关联模块

cz 1 年之前
父节点
当前提交
220a6d1b0c

+ 1 - 0
src/assets/icons/svg/afterSales.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1713160535776" class="icon" viewBox="0 0 1820 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11286" xmlns:xlink="http://www.w3.org/1999/xlink" width="355.46875" height="200"><path d="M850.074 329.99H742.705l-7.742 12.802v18.066h115.11zM733.31 394.411h115.111v32.52H733.311z m0 62.77h115.111v30.868H733.311z" fill="#D81E06" p-id="11287"></path><path d="M1164.23 159.646c-102.207-40.573-199.148-63.389-318.905-63.389-119.86 0-216.698 22.92-318.905 63.389-19.409 7.02-33.45 26.43-33.45 49.348v331.293c0 174.474 246.638 320.66 329.436 361.233 7.02 3.51 15.899 5.265 22.919 5.265 7.02 0 15.899-1.755 22.919-5.265 82.797-40.573 329.435-186.759 329.435-361.233V208.994c0.103-22.919-14.04-42.225-33.45-49.348zM663.417 329.474h11.356c1.033 0.103 1.962 0.206 2.891 0.206 6.298 0 14.866-2.684 19.719-15.382l19.408-34.379h42.328l-4.955 16.518h93.018l3.304-16.518h49.864l-3.304 16.518h130.288v33.553H898.493v30.868h127.19v33.553h-127.19v32.52h127.19v30.25h-127.19v30.868h127.19v31.9h-339.14V371.285h-23.125v-41.811z m327.164 311.058h-305.69v-96.321h342.443v66.072c-0.62 12.286-5.059 28.907-36.753 30.25z" fill="#D81E06" p-id="11288"></path><path d="M730.007 613.587h239.204c9.602 0 12.905-6.091 12.905-11.253v-24.468H730.007v35.721z" fill="#D81E06" p-id="11289"></path></svg>

+ 167 - 0
src/components/contractCom/contractDetails.vue

@@ -10,6 +10,8 @@
       <el-tab-pane label="结算表" name="six" v-if="isShowSalesFinancemanArrange">
       </el-tab-pane>
       <el-tab-pane label="单证" name="seven" v-if="isShowSalesFinancemanArrange"></el-tab-pane>
+      <el-tab-pane label="售后" name="eight"> </el-tab-pane>
+
     </el-tabs>
     <div class="content-box" v-if="['first', 'second'].includes(activeName)">
       <div class="left">
@@ -68,6 +70,21 @@
     <div v-if="activeName === 'seven'">
       <Document> </Document>
     </div>
+    <div v-if="activeName === 'eight'">
+      <byTable :hidePagination="true" :hideSearch="true" :source="afterSalesTableData" :config="afterSalesConfig" highlight-current-row
+               :action-list="[]">
+        <template #amount="{ item }">
+          <div>{{ item.currency }} {{ moneyFormat(item.amount, 2) }}</div>
+        </template>
+        <template #accountManagementName="{ item }">
+          <div>
+            {{ item.accountManagementName }} ({{
+              item.accountManagementOpening
+            }})
+          </div>
+        </template>
+      </byTable>
+    </div>
 
     <el-dialog title="PDF查看" v-if="pdfDialog" v-model="pdfDialog" width="920">
       <!-- <ContractPDFOne :rowData="rowData"></ContractPDFOne> -->
@@ -107,6 +124,7 @@ const leftList = ref([]);
 const contractDataList = ref([]);
 const purchaseDataList = ref([]);
 const tableData = ref([]);
+const afterSalesTableData = ref([]);
 const transactionType = ref([
   {
     label: "请款",
@@ -170,6 +188,147 @@ const config = computed(() => {
     },
   ];
 });
+const afterSalesType = computed(
+  () => proxy.useUserStore().allDict["after_sales_type"]
+);
+const afterSalesReason = computed(
+  () => proxy.useUserStore().allDict["after_sales_reason"]
+);
+const statusData = ref([
+  {
+    label: "草稿",
+    value: 0,
+  },
+  {
+    label: "审批中",
+    value: 10,
+  },
+  {
+    label: "驳回",
+    value: 20,
+  },
+  {
+    label: "审批通过",
+    value: 30,
+  },
+  {
+    label: "终止",
+    value: 99,
+  },
+]);
+const afterSalesConfig = computed(() => {
+  return [
+    {
+      attrs: {
+        label: "售后单号",
+        prop: "createTime",
+        width: 155,
+      },
+    },
+    {
+      attrs: {
+        label: "审批状态",
+        prop: "status",
+        width: 120,
+        fixed: "left",
+      },
+      render(type) {
+        return proxy.dictValueLabel(type, statusData.value);
+      },
+    },
+    {
+      attrs: {
+        label: "售后类型",
+        prop: "type",
+        width: 80,
+        fixed: "left",
+      },
+      render(val) {
+        return proxy.dictKeyValue(val, afterSalesType.value);
+      },
+    },
+    {
+      attrs: {
+        label: "售后销售订单",
+        prop: "newContractCode",
+        width: 150,
+        fixed: "left",
+      },
+    },
+    {
+      attrs: {
+        label: "售后原因",
+        prop: "reason",
+        width: 130,
+      },
+      render(val) {
+        return proxy.dictKeyValue(val, afterSalesReason.value);
+      },
+    },
+    {
+      attrs: {
+        label: "售后说明",
+        prop: "remark",
+        "min-width": 150,
+      },
+    },
+    {
+      attrs: {
+        label: "售后金额",
+        prop: "amount",
+        slot: "amount",
+        align: "right",
+        width: 100,
+      },
+      render(val) {
+        return proxy.moneyFormat(val, 2);
+      },
+    },
+    {
+      attrs: {
+        label: "初判责任方",
+        prop: "dutyParty",
+        width: 100,
+      },
+    },
+    {
+      attrs: {
+        label: "客户联系人",
+        prop: "contactName",
+        width: 100,
+      },
+    },
+    {
+      attrs: {
+        label: "客户联系电话",
+        prop: "contactTel",
+        width: 150,
+      },
+    },
+    {
+      attrs: {
+        label: "开户行",
+        prop: "accountBank",
+        width: 110,
+      },
+    },
+    {
+      attrs: {
+        label: "账户名",
+        prop: "accountName",
+        width: 110,
+      },
+    },
+    {
+      attrs: {
+        label: "账号",
+        prop: "accountNumber",
+        width: 150,
+      },
+    },
+  ];
+});
+
 const handleClick = () => {};
 
 const handleItemClick = (item) => {
@@ -268,6 +427,14 @@ const getDetailsData = (id) => {
     .then((res) => {
       tableData.value = res;
     });
+
+  proxy
+    .post("/afterSales/page", {
+      contractId: id,
+    })
+    .then((res) => {
+      afterSalesTableData.value = res.rows;
+    });
 };
 if (props.contractId) {
   getDetailsData(props.contractId);

+ 308 - 32
src/components/headerBar/header-bar.vue

@@ -11,7 +11,12 @@
           <div @click.stop="openMenuBox" class="menu-modal">
             <i class="iconfont icon-icomx_gongndh" style="margin: 0 5px 0 0"></i>
             {{ $t("header.functionGuide") }}
-            <i class="iconfont icon-iconm_xialan1" style="margin: 0 0 0 3px"></i>
+            <!-- <i class="iconfont icon-iconm_xialan1" style="margin: 0 0 0 3px"></i> -->
+            <span style="position:relative;top:2px">
+              <el-icon :size="16">
+                <CaretRight />
+              </el-icon>
+            </span>
           </div>
         </li>
         <div class="auto-list">
@@ -29,7 +34,7 @@
             </ul>
           </li>
         </div>
-        <div class="header-bar-warp" v-if="isChildMenu" @click.stop="isChildMenu = false">
+        <div class="header-bar-warp" v-if="false" @click.stop="isChildMenu = false">
           <div class="header-bar-hover" @click.stop>
             <div class="header-bar-hover-content">
               <!-- 左边 -->
@@ -97,10 +102,11 @@
         </div>
       </ul>
       <div class="fr">
-        <!-- <div style="float:right;height: 50px;line-height: 50px;padding-right:20px;color:#fff;font-size:14px;cursor: pointer;" @click="plugDowload">
+        <!-- <div style="float:right;height: 50px;line-height: 50px;margin-right:20px;color:#fff;font-size:14px;cursor: pointer;"
+             @click="plugsDialog=true ">
           插件下载
         </div> -->
-        <div style="float:right;height: 50px;padding-right:20px">
+        <div style="float:right;height: 50px;margin-right:20px">
           <el-badge :value="jobData.sumCount" :max="99" style="cursor: pointer;margin-top:15px;" v-if="jobData.sumCount" @click="handleOpenDrawer">
             <el-icon :size="20" color="#fff">
               <Opportunity />
@@ -138,10 +144,11 @@
                   $t("header.personalCenter")
                 }}</el-dropdown-item>
               </router-link>
+
               <el-dropdown-item command="setLayout">
                 <span>{{ $t("header.layoutSettings") }}</span>
               </el-dropdown-item>
-              <el-dropdown-item divided command="logout">
+              <el-dropdown-item command="logout" divided>
                 <span>{{ $t("header.logout") }}</span>
               </el-dropdown-item>
             </el-dropdown-menu>
@@ -149,6 +156,73 @@
         </el-dropdown>
       </div>
     </header>
+    <el-drawer v-model="isChildMenu" direction="ltr" :show-close="false" close-on-click-modal custom-class="menuDrawerClass" modal-class="modelClass">
+      <template #default>
+        <div class="menu-bar">
+          <div class="menu-warp" @click.stop>
+            <div style="margin:20px 0">
+              <el-input v-model="menuKeyword" placeholder="输入菜单名称进行搜索" class="menu-box" clearable @input="handleSearchMenu" />
+            </div>
+            <div v-if="!menuKeyword">
+              <div v-for="(item, index) in sidebarRoutersCopy" :key="item.name" v-show="item.type == 1 && item.status == '0'"
+                   style="border-bottom:2px dashed #edeaea;padding-bottom:20px;margin-bottom:20px;">
+                <div class="first-order-title">
+                  <TitleInfo :content="item.menuName" :size="16"></TitleInfo>
+                </div>
+                <div class="layout-box">
+                  <ul class="son-box" v-for="i in item.children" :key="i.menuId">
+                    <li class="menu-title">
+                      <div style="width:8px;height:8px;background:#1b374c;margin-right:10px;margin-left:-4px"></div>
+                      <div>{{ i.menuName }}</div>
+                    </li>
+                    <div style="border-left:1px dashed #1b374c;padding-left:10px">
+                      <div v-for="(j, index) in i.children" :key="index">
+                        <li v-if="i.isNone" class="menu-ul" style="cursor: auto"></li>
+                        <li class="menu-ul">
+                          <i style="cursor: pointer;position:relative;top:0px" @click.stop="editMenu(j)">
+                            <svg-icon :icon-class="isHaveCollect(j) ? 'shoucang1' :'shoucang'" />
+                          </i>
+                          <span style="margin-left:6px;cursor: pointer" @click="commonsBannerToRouter(j)">{{ j.menuName }}</span>
+                          <!-- :class="{'search-class':showSearchStyle(j.menuName)}" -->
+                        </li>
+                      </div>
+                    </div>
+                  </ul>
+                </div>
+              </div>
+            </div>
+            <div v-if="menuKeyword">
+              <div v-for="(j, index) in keywordRouters" :key="index">
+                <li class="menu-ul">
+                  <i style="cursor: pointer;position:relative;top:0px" @click.stop="editMenu(j)">
+                    <svg-icon :icon-class="isHaveCollect(j) ? 'shoucang1' :'shoucang'" />
+                  </i>
+                  <span style="margin-left:6px;cursor: pointer" @click="commonsBannerToRouter(j)">{{ j.menuName }}</span>
+                  <!-- :class="{'search-class':showSearchStyle(j.menuName)}" -->
+                </li>
+              </div>
+            </div>
+
+          </div>
+          <div class="right-banner">
+            <div class="first-order-title">
+              <TitleInfo :content="'常用功能'" :size="16"></TitleInfo>
+            </div>
+
+            <div class="collect" id="collect">
+              <div v-for="(menu, index) in commonsRouterList" :key="menu.menuId" class="item">
+                <span class="menu-name" @click="commonsBannerToRouter(menu)">{{menu.menuName}}</span>
+                <span style="cursor:pointer;position:relative;top:2px;" @click="editMenu(menu)">
+                  <el-icon color="#46A6FF" :size="16">
+                    <CircleClose />
+                  </el-icon>
+                </span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </template>
+    </el-drawer>
 
     <el-drawer v-model="openDrawer" direction="rtl" :show-close="false" custom-class="drawerClass" modal-class="modelClass">
       <!-- <template #header>
@@ -315,6 +389,41 @@ const noticeTableModal = ref(false);
 const userData = ref(Cookies.get("nickName") || "");
 const commonsRouterList = ref([]);
 const activeLeftData = ref({});
+const menuKeyword = ref("");
+const keywordRouters = ref([]);
+const handleSearchMenu = (val) => {
+  if (val) {
+    // let els = document.querySelectorAll(".search-class");
+    // if (els && els.length > 0) {
+    //   console.log(els, "ss");
+    //   els[0].scrollIntoView();
+    // els[0].scrollIntoView({
+    //   behavior: "smooth", // 平滑过渡
+    //   block: "nearest", // 上边框与视窗顶部平齐。默认值
+    // });
+    // }
+
+    let arr = [];
+    sidebarRoutersCopy.value.map((item) => {
+      if (item.children) {
+        item.children.map((j) => {
+          if (j.children) {
+            j.children.map((n) => {
+              if (n.menuName.includes(val) || n.menuName.indexOf(val) != -1) {
+                if (n.status == 0 && n.visible == 0 && n.type == 1) {
+                  arr.push(n);
+                }
+              }
+            });
+          }
+        });
+      }
+    });
+    keywordRouters.value = arr;
+  } else {
+    keywordRouters.value = [];
+  }
+};
 const openLeftBaner = (i, index) => {
   // leftBanerType.value = 1;
   activeLeftData.value = i;
@@ -336,9 +445,12 @@ getLogo();
 
 const openMenuBox = () => {
   isChildMenu.value = !isChildMenu.value;
-  nextTick(() => {
-    initSort();
-  });
+  if (isChildMenu.value) {
+    menuKeyword.value = "";
+    nextTick(() => {
+      initSort();
+    });
+  }
 };
 
 const getCollectData = () => {
@@ -511,7 +623,14 @@ const commonsBannerToRouter = (i) => {
         if (j.children) {
           j.children.map((n) => {
             if (n.menuId === i.menuId) {
-              router.push("/" + item.path + "/" + j.path + "/" + n.path);
+              if (n.query) {
+                let query = tansParams(JSON.parse(n.query));
+                router.push(
+                  "/" + item.path + "/" + j.path + "/" + n.path + "?" + query
+                );
+              } else {
+                router.push("/" + item.path + "/" + j.path + "/" + n.path);
+              }
               isChildMenu.value = false;
             }
           });
@@ -519,6 +638,9 @@ const commonsBannerToRouter = (i) => {
       });
     }
   });
+  if (menuKeyword.value) {
+    menuKeyword.value = "";
+  }
 };
 
 //获取浏览器宽度
@@ -531,6 +653,10 @@ function calcAutoListChidren() {
   autoListChidrenNum.value = Math.floor((getBrowserWidth() - 616) / 120);
 }
 
+const getUserData = () => {
+  return userData.value + `(${proxy.useUserStore().currentCompanyName})`;
+};
+
 //一维数组转tree
 const jobData = ref({});
 onMounted(() => {
@@ -546,25 +672,18 @@ onMounted(() => {
         isCommonsBanner: false,
       };
     });
-    sidebarRoutersCopy.value = proxy.handleTree(res.data, "menuId");
-    if (sidebarRoutersCopy.value && sidebarRoutersCopy.value.length > 0) {
-      openLeftBaner(sidebarRoutersCopy.value[0], 0);
-    }
 
-    //循环删除 i.status != 0 || i.visible != 0 的元素
-    sidebarRoutersCopy.value.map((item) => {
-      if (item.children) {
-        item.children.map((j) => {
-          if (j.children) {
-            j.children.map((n) => {
-              if (n.status != 0 || n.visible != 0 || n.type != 1) {
-                j.children.splice(j.children.indexOf(n), 1);
-              }
-            });
-          }
-        });
+    let newArr = [];
+    for (let i = 0; i < res.data.length; i++) {
+      const menu = res.data[i];
+      if (menu.status == "0" && menu.visible == "0" && menu.type == 1) {
+        newArr.push(menu);
       }
-    });
+    }
+    sidebarRoutersCopy.value = proxy.handleTree(newArr, "menuId");
+    // if (sidebarRoutersCopy.value && sidebarRoutersCopy.value.length > 0) {
+    // openLeftBaner(sidebarRoutersCopy.value[0], 0);
+    // }
   });
   getCollectData();
   proxy.get("/statistics/workStatistics").then((res) => {
@@ -660,9 +779,34 @@ const plugDowload = () => {
       link.click();
     });
 };
+
+const showSearchStyle = (name) => {
+  if (menuKeyword.value) {
+    return name.includes(menuKeyword.value);
+  }
+};
 </script>
 
-<style lang="scss">
+<style lang="scss" scope>
+.menuDrawerClass {
+  // width: calc(100vw - 500px) !important;
+  width: 70% !important;
+  min-width: 980px !important;
+  background: #fff;
+  // position: relative !important;
+  top: 50px !important;
+  height: calc(100vh - 50px) !important;
+  transition: none !important;
+  .el-drawer__header {
+    display: none !important;
+  }
+  .el-drawer__body {
+    padding: 0px !important;
+  }
+}
+.open {
+  transition: all 0.3s !important;
+}
 .drawerClass {
   width: 360px !important;
   background: rgba(62, 62, 62, 0.99);
@@ -681,7 +825,7 @@ const plugDowload = () => {
   // height: 270px;
   margin-bottom: 20px;
   min-height: 135px;
-  max-height: 250px;
+  max-height: 300px;
   overflow: auto;
   .job-list {
     display: flex;
@@ -698,9 +842,11 @@ const plugDowload = () => {
       display: flex;
       flex-direction: column;
       justify-content: space-between;
+      border: 0.5px solid #515151;
       &:hover {
         background: #616161;
         // border: 1px solid #fff;
+        border-color: #fff;
       }
     }
     .active-item {
@@ -718,14 +864,17 @@ const plugDowload = () => {
     display: flex;
     justify-content: space-between;
     align-items: center;
+
     &:hover {
       background: #616161;
-      // border: 1px solid #fff;
     }
     .icon {
-      // font-size: 20px;
-      width: 40px;
-      height: 20px;
+      width: 50px;
+      height: 50px;
+    }
+    .icon1 {
+      width: 42px;
+      height: 50px;
     }
     .text {
       margin-left: 10px;
@@ -737,4 +886,131 @@ const plugDowload = () => {
     }
   }
 }
+.menu-bar {
+  display: flex;
+  width: 100%;
+  height: 100%;
+  box-sizing: border-box;
+  overflow: hidden;
+  .first-order-title {
+    height: 40px;
+    line-height: 40px;
+  }
+  .menu-warp {
+    width: calc(100% - 300px);
+    height: 100%;
+    padding: 0 15px;
+    overflow: auto;
+    box-shadow: 2px 0px 0px #eee;
+    &::-webkit-scrollbar {
+      width: 5px !important;
+      height: 5px !important;
+    }
+    .layout-box {
+      // 瀑布流布局 分四列
+      -moz-column-count: 4;
+      /* Firefox */
+      -webkit-column-count: 4;
+      /* Safari 和 Chrome */
+      column-count: 4;
+      -moz-column-gap: 50px;
+      -webkit-column-gap: 50px;
+      column-gap: 50px;
+      padding: 0 20px;
+      .son-box {
+        // 子元素不跨列
+        -moz-page-break-inside: avoid;
+        -webkit-column-break-inside: avoid;
+        break-inside: avoid;
+        list-style: none; /*将默认的样式去掉*/
+        padding: 0; /*去掉默认的内边距*/
+        margin: 0; /*去掉默认的外边距*/
+        .menu-title {
+          font-weight: 700;
+          color: #1b374c;
+          height: 40px;
+          line-height: 40px;
+          // border-bottom: 1px solid #efebeb;
+          font-size: 14px;
+          width: 140px;
+          margin: 0 5vw 0 0;
+          display: flex;
+          align-items: center;
+
+          i {
+            position: relative;
+            top: 3px;
+            margin-right: 5px;
+          }
+        }
+        .menu-ul {
+          // padding-left: 10px;
+          height: 33px;
+          line-height: 33px;
+          font-size: 14px;
+          font-weight: 400;
+        }
+
+        .menu-ul span:hover {
+          color: #0084ff;
+        }
+      }
+    }
+    .menu-ul {
+      // padding-left: 10px;
+      height: 33px;
+      line-height: 33px;
+      font-size: 14px;
+      font-weight: 400;
+    }
+
+    .menu-ul span:hover {
+      color: #0084ff;
+    }
+  }
+  .right-banner {
+    width: 300px;
+    height: 100%;
+    overflow-y: auto;
+    padding: 0 15px;
+    // background: #f1f1f1;
+
+    &::-webkit-scrollbar {
+      width: 2px !important;
+      height: 2px !important;
+    }
+    .collect {
+      // margin-top: 5px;
+
+      .item {
+        // margin-bottom: 4px;
+        font-size: 14px;
+        display: flex;
+        justify-content: space-between;
+        align-items: center;
+        height: 30px;
+        line-height: 30px;
+        // padding: 2px 5px;
+        // border: 1px solid #eee;
+        .menu-name {
+          cursor: pointer;
+          &:hover {
+            color: #0084ff;
+          }
+        }
+      }
+    }
+  }
+}
+.search-class {
+  color: red !important;
+}
+</style>
+
+<style>
+.el-input.menu-box .el-input__wrapper {
+  border: none !important;
+  box-shadow: none !important;
+  border-bottom: 1px solid #c0c4cc !important;
+}
 </style>

+ 1 - 0
src/components/headerBar/header.scss

@@ -102,6 +102,7 @@
 					// color: #333333;
 					// font-size: 15px;
 					// font-weight: bold;
+					// background: #fff;
 				}
 
 				.collect {

+ 3 - 2
src/views/EHSD/procurement/profitBudgetEHSD/index.vue

@@ -11,9 +11,10 @@
     </byTable>
     <div style="padding: 0 20px 0px 20px; background-color: white" v-if="rateStatus">
       <el-table :data="sourceList.data" v-loading="loading" :height="tableHeight" :row-style="changeStyle">
-        <el-table-column label="合同编号" prop="code" width="140" fixed>
+        <el-table-column label="合同编号" prop="code" width="180" fixed>
           <template #default="{ row }">
-            <div style="color: #409eff; cursor: pointer; word-break: break-all" @click="openDetails(row)"> {{ ( row.code) }}</div>
+            <span style="color: #409eff; cursor: pointer; word-break: break-all" @click="openDetails(row)"> {{ ( row.code) }}</span>
+            <svg-icon :icon-class="'afterSales'" style="width:50px;height:30px;position:relative;top:6px" v-if="row.afterSalesId" />
           </template>
         </el-table-column>
         <el-table-column label="合同金额" width="140" fixed>

+ 3 - 2
src/views/EHSD/procurement/profitSettlementEHSD/index.vue

@@ -5,9 +5,10 @@
     </byTable>
     <div style="padding: 0 20px 0px 20px; background-color: white">
       <el-table v-loading="loading" :data="sourceList.data" :height="tableHeight" :row-style="changeStyle">
-        <el-table-column label="合同编号" prop="code" width="140" fixed>
+        <el-table-column label="合同编号" prop="code" width="180" fixed>
           <template #default="{ row }">
-            <div style="color: #409eff; cursor: pointer; word-break: break-all" @click="openDetails(row)"> {{ ( row.code) }}</div>
+            <span style="color: #409eff; cursor: pointer; word-break: break-all" @click="openDetails(row)"> {{ ( row.code) }}</span>
+            <svg-icon :icon-class="'afterSales'" style="width:50px;height:30px;position:relative;top:6px" v-if="row.afterSalesId" />
           </template>
         </el-table-column>
         <el-table-column label="合同金额" width="140" fixed="">

+ 2 - 1
src/views/EHSD/saleContract/contractEHSD/index.vue

@@ -11,6 +11,7 @@
         <template #code="{ item }">
           <div style="width: 100%">
             <a style="color: #409eff; cursor: pointer; word-break: break-all" @click="openDetails(item)">{{ item.code }}</a>
+            <svg-icon :icon-class="'afterSales'" style="width:50px;height:30px;position:relative;top:6px" v-if="item.afterSalesId" />
           </div>
         </template>
 
@@ -326,7 +327,7 @@ const config = computed(() => {
       attrs: {
         label: "合同号",
         slot: "code",
-        width: 140,
+        width: 180,
       },
     },
     {

+ 25 - 0
src/views/customer/file/index.vue

@@ -664,6 +664,19 @@ const config = computed(() => {
               openAllocation.value = true;
             },
           },
+          row.companyId
+            ? {
+                attrs: {
+                  label: "更新",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  clickUpdate(row);
+                },
+              }
+            : {},
           {
             attrs: {
               label: "跟进",
@@ -984,6 +997,18 @@ const clickFollowUp = (item) => {
   openFollow.value = true;
   openRecordMore.value = false;
 };
+
+const clickUpdate = (row) => {
+  proxy.msgTip("更新中", 2);
+  proxy
+    .post("/customer/refreshXiaomanInfo", { companyId: row.companyId })
+    .then((res) => {
+      // setTimeout(() => {
+      //   proxy.msgTip("更新成功", 1);
+      // }, 300);
+    });
+};
+
 const uploadFile = async (file) => {
   const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
   uploadData.value = res.uploadBody;

+ 25 - 0
src/views/customer/highseas/index.vue

@@ -592,6 +592,19 @@ const config = computed(() => {
       },
       renderHTML(row) {
         return [
+          row.companyId
+            ? {
+                attrs: {
+                  label: "更新",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  clickUpdate(row);
+                },
+              }
+            : {},
           {
             attrs: {
               label: "跟进",
@@ -1008,6 +1021,18 @@ const clickFollowUp = (item) => {
   openFollow.value = true;
   openRecordMore.value = false;
 };
+
+const clickUpdate = (row) => {
+  proxy.msgTip("更新中", 2);
+  proxy
+    .post("/customer/refreshXiaomanInfo", { companyId: row.companyId })
+    .then((res) => {
+      // setTimeout(() => {
+      //   proxy.msgTip("更新成功", 1);
+      // }, 300);
+    });
+};
+
 const uploadFile = async (file) => {
   const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
   uploadData.value = res.uploadBody;

+ 25 - 0
src/views/customer/privatesea/index.vue

@@ -592,6 +592,19 @@ const config = computed(() => {
       },
       renderHTML(row) {
         return [
+          row.companyId
+            ? {
+                attrs: {
+                  label: "更新",
+                  type: "primary",
+                  text: true,
+                },
+                el: "button",
+                click() {
+                  clickUpdate(row);
+                },
+              }
+            : {},
           {
             attrs: {
               label: "跟进",
@@ -1008,6 +1021,18 @@ const clickFollowUp = (item) => {
   openFollow.value = true;
   openRecordMore.value = false;
 };
+
+const clickUpdate = (row) => {
+  proxy.msgTip("更新中", 2);
+  proxy
+    .post("/customer/refreshXiaomanInfo", { companyId: row.companyId })
+    .then((res) => {
+      // setTimeout(() => {
+      //   proxy.msgTip("更新成功", 1);
+      // }, 300);
+    });
+};
+
 const uploadFile = async (file) => {
   const res = await proxy.post("/fileInfo/getSing", { fileName: file.name });
   uploadData.value = res.uploadBody;

+ 35 - 1
src/views/salesMange/afterSales/index.vue

@@ -19,6 +19,12 @@
           </div>
         </template>
 
+        <template #newCode="{ item }">
+          <div style="width:100%">
+            <span class="el-click" style="cursor:pointer;color:#409EFF" @click="openDetails(item)">{{item.newContractCode}}</span>
+          </div>
+        </template>
+
         <template #amount="{ item }">
           <div style="width:100%">
             <span style="cursor:pointer;color:#409EFF" @click="getDtl(item)">{{item.currency}} {{moneyFormat(item.amount,2)}}</span>
@@ -293,7 +299,7 @@ const config = computed(() => {
     },
     {
       attrs: {
-        label: "订单",
+        label: "源销售订单",
         prop: "contractCode",
         width: 150,
         fixed: "left",
@@ -301,6 +307,14 @@ const config = computed(() => {
     },
     {
       attrs: {
+        label: "售后销售订单",
+        slot: "newCode",
+        width: 150,
+        fixed: "left",
+      },
+    },
+    {
+      attrs: {
         label: "审批状态",
         prop: "status",
         width: 120,
@@ -897,6 +911,26 @@ const judgeTotal = () => {
 const openFile = (path) => {
   window.open(path, "_blank");
 };
+
+const openDetails = (row) => {
+  // currentContractId.value = row.id;
+  // openDetailsDialog.value = true;
+  // 新页面打开方式
+  // const page = proxy.$router.resolve({
+  //   name: "contractDetails",
+  //   query: {
+  //     currentContractId: row.id,
+  //   },
+  // });
+  // window.open(page.href, "_blank");
+
+  proxy.$router.push({
+    name: "contractDetails",
+    query: {
+      currentContractId: row.newContractId,
+    },
+  });
+};
 </script>
   
 <style lang="scss" scoped>