Parcourir la source

订单 售后 提示未提交数量

yusheng il y a 9 mois
Parent
commit
b308e71b2f
27 fichiers modifiés avec 427 ajouts et 294 suppressions
  1. 11 0
      src/api/common/index.js
  2. 2 0
      src/views/purchasingManage/purchaseOrder/accountstatement/index.vue
  3. 32 15
      src/views/purchasingManage/purchaseOrder/index.vue
  4. 1 0
      src/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog.vue
  5. 1 0
      src/views/purchasingManage/purchaseOrder/invoice/components/inventoryTable.vue
  6. 2 0
      src/views/purchasingManage/purchaseOrder/invoice/index.vue
  7. 2 0
      src/views/purchasingManage/purchaseOrder/invoiceConfirm/index.vue
  8. 2 0
      src/views/purchasingManage/purchaseOrder/orderAssociation/accountstatementList.vue
  9. 2 0
      src/views/purchasingManage/purchaseOrder/outSourceSend/index.vue
  10. 1 0
      src/views/purchasingManage/purchaseOrder/returnGoods/index.vue
  11. 2 0
      src/views/saleManage/saleOrder/accountstatement/index.vue
  12. 3 5
      src/views/saleManage/saleOrder/components/addDialog.vue
  13. 2 0
      src/views/saleManage/saleOrder/customerReturnOrder/index.vue
  14. 2 0
      src/views/saleManage/saleOrder/entrustedReceive/index.vue
  15. 2 0
      src/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue
  16. 59 18
      src/views/saleManage/saleOrder/index.vue
  17. 2 0
      src/views/saleManage/saleOrder/invoice/index.vue
  18. 2 0
      src/views/saleManage/saleOrder/invoiceConfirm/index.vue
  19. 237 235
      src/views/saleManage/saleOrder/orderAssociation/accountstatementList.vue
  20. 2 0
      src/views/saleManage/saleOrder/palletManagement/index.vue
  21. 1 0
      src/views/saleManage/saleOrder/returnGoods/index.vue
  22. 2 0
      src/views/salesServiceManagement/cost/index.vue
  23. 2 0
      src/views/salesServiceManagement/demandList/index.vue
  24. 48 20
      src/views/salesServiceManagement/index.vue
  25. 2 0
      src/views/salesServiceManagement/toDoList/index.vue
  26. 2 0
      src/views/salesServiceManagement/workOrder/index.vue
  27. 1 1
      vue.config.js

+ 11 - 0
src/api/common/index.js

@@ -0,0 +1,11 @@
+import request from '@/utils/request';
+/**
+ * 销售订单 采购订单 售后管理 Tab页待办提示请求接口
+ */
+export async function getToDoReminder() {
+  const res = await request.get(`/eom/common/getToDoReminder`, );
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 2 - 0
src/views/purchasingManage/purchaseOrder/accountstatement/index.vue

@@ -366,6 +366,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
       /*新增发票*/
       handleAddInvoice(row) {

+ 32 - 15
src/views/purchasingManage/purchaseOrder/index.vue

@@ -10,7 +10,9 @@
               :class="{ active: activeComp == item.key }"
               @click="activeComp = item.key"
             >
-              {{ item.name }}
+             <el-badge :value="toDoReminder[item.reminder]||0" class="item">
+                {{ item.name }}
+              </el-badge>
             </li>
           </ul>
         </div>
@@ -175,23 +177,23 @@
           </div>
         </div>
         <div v-if="activeComp == 'outsourceSend'">
-          <outSourceSend></outSourceSend>
+          <outSourceSend  @getToDoReminder="getToDoReminder"></outSourceSend>
         </div>
         <div v-if="activeComp == 'invoice'">
-          <invoice></invoice>
+          <invoice  @getToDoReminder="getToDoReminder"></invoice>
         </div>
         <div v-if="activeComp == 'invoiceConfirm'">
-          <invoiceConfirm></invoiceConfirm>
+          <invoiceConfirm  @getToDoReminder="getToDoReminder"></invoiceConfirm>
         </div>
 
         <div v-if="activeComp == 'returnorder'" class="returnorder">
-          <return-goods></return-goods>
+          <return-goods  @getToDoReminder="getToDoReminder"></return-goods>
         </div>
         <div v-if="activeComp == 'exceptionList'">
-          <exceptionList :relationType="2"></exceptionList>
+          <exceptionList :relationType="2"  @getToDoReminder="getToDoReminder"> </exceptionList>
         </div>
         <div v-if="activeComp == 'accountstatement'">
-          <accountstatement></accountstatement>
+          <accountstatement  @getToDoReminder="getToDoReminder"></accountstatement>
         </div>
       </div>
     </el-card>
@@ -281,6 +283,7 @@
   import exportButton from '@/components/upload/exportButton.vue';
   import { parameterGetByCode } from '@/api/main/index.js';
   import exceptionList from '@/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue';
+  import { getToDoReminder } from '@/api/common/index';
 
   export default {
     mixins: [dictMixins, tabMixins],
@@ -311,13 +314,13 @@
       return {
         activeComp: 'saleorder',
         tabOptions: [
-          { key: 'saleorder', name: '采购订单' },
-          { key: 'outsourceSend', name: '委外发货单' },
-          { key: 'invoice', name: '收货单' },
-          { key: 'invoiceConfirm', name: '收货确认单' },
-          { key: 'exceptionList', name: '异常列表' },
-          { key: 'returnorder', name: '退货单' },
-          { key: 'accountstatement', name: '对账单' }
+          { key: 'saleorder', name: '采购订单' ,reminder: 'purchaseOrderNum'},
+          { key: 'outsourceSend', name: '委外发货单' ,reminder: 'outsourcingDeliveryNoteNum'},
+          { key: 'invoice', name: '收货单',reminder: 'receiptNum' },
+          { key: 'invoiceConfirm', name: '收货确认单',reminder: 'receiptConfirmationFormNum' },
+          { key: 'exceptionList', name: '异常列表',reminder: 'purchaseExceptionListNum' },
+          { key: 'returnorder', name: '退货单',reminder: 'purchaseReturnOrderNum' },
+          { key: 'accountstatement', name: '对账单' ,reminder: 'purchaseStatementAccountNum'}
         ],
 
         selection: [], //单选中集合
@@ -530,7 +533,9 @@
           }
         ],
         cacheKeyUrl: 'eos-5f2ac512-purchaseOrder-saleorder',
-        isRequired: true
+        isRequired: true,
+        timeR: null,
+        toDoReminder: {}
       };
     },
     computed: {},
@@ -543,8 +548,20 @@
           this.isRequired = res.value === '1';
         }
       });
+      this.getToDoReminder();
+      this.timeR = setInterval(() => {
+        this.getToDoReminder();
+      }, 60000);
+    },
+    beforeDestroy() {
+      clearInterval(this.timeR);
     },
     methods: {
+      getToDoReminder() {
+        getToDoReminder().then((res) => {
+          this.toDoReminder = res;
+        });
+      },
       //更多菜单
       handleCommand(command, row) {
         console.log(command, row);

+ 1 - 0
src/views/purchasingManage/purchaseOrder/invoice/components/addInvoiceDialog.vue

@@ -292,6 +292,7 @@
             if (productList && productList.length > 0) {
               productList.forEach((v) => {
                 v.orderTotalCount = v.orderTotalCount || v.totalCount;
+                v.orderProductId=v.id
               });
             }
             this.form = Object.assign({}, this.form, {

+ 1 - 0
src/views/purchasingManage/purchaseOrder/invoice/components/inventoryTable.vue

@@ -224,6 +224,7 @@
               dictName="质保期单位"
               clearable
               v-model="scope.row.guaranteePeriodUnitCode"
+                :isOne="scope.$index === 0"
               @change="
                 setDeliveryDays(scope.row, scope.$index, 'guaranteePeriod')
               "

+ 2 - 0
src/views/purchasingManage/purchaseOrder/invoice/index.vue

@@ -364,6 +364,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 2 - 0
src/views/purchasingManage/purchaseOrder/invoiceConfirm/index.vue

@@ -302,6 +302,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 2 - 0
src/views/purchasingManage/purchaseOrder/orderAssociation/accountstatementList.vue

@@ -169,6 +169,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 2 - 0
src/views/purchasingManage/purchaseOrder/outSourceSend/index.vue

@@ -318,6 +318,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 1 - 0
src/views/purchasingManage/purchaseOrder/returnGoods/index.vue

@@ -323,6 +323,7 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
       },
 
       //新增编辑

+ 2 - 0
src/views/saleManage/saleOrder/accountstatement/index.vue

@@ -401,6 +401,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 3 - 5
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -655,6 +655,7 @@
         title: '',
         formDef,
         form: copyObj(formDef),
+        
         tableLinkData: [],
         // 组织机构树形结构数据
         groupTreeData: [],
@@ -716,9 +717,7 @@
       };
     },
     computed: {
-      clientEnvironmentId() {
-        return this.$store.state.user.info.clientEnvironmentId;
-      },
+
       rules() {
         let isRequired = this.isRequired;
         return {
@@ -1272,14 +1271,13 @@
       async open(type, row, contactCategoryId) {
         this.businessId = '';
         this.title = type === 'add' ? '新增' : '修改';
+        this.clientEnvironmentId=this.$store.state.user.info.clientEnvironmentId;
         this.row = row;
         if (this.enterprisePage.length == 0) {
           await this.getEnterprisePage();
         }
         this.visible = true;
 
-        x;
-
         if (type == 'add') {
           this.isUpdate = false;
           if (this.enterprisePage.length > 0) {

+ 2 - 0
src/views/saleManage/saleOrder/customerReturnOrder/index.vue

@@ -360,6 +360,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //创建/修改客户退货单

+ 2 - 0
src/views/saleManage/saleOrder/entrustedReceive/index.vue

@@ -323,6 +323,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 2 - 0
src/views/saleManage/saleOrder/exceptionManagement/exceptionList/index.vue

@@ -348,6 +348,8 @@
       reload(where) {
         this.$nextTick(() => {
           this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
         });
       }
     }

+ 59 - 18
src/views/saleManage/saleOrder/index.vue

@@ -5,12 +5,16 @@
         <div class="switch_left">
           <ul>
             <li
+           
               v-for="item in tabOptions"
               :key="item.key"
               :class="{ active: activeComp == item.key }"
               @click="activeComp = item.key"
             >
-              {{ item.name }}
+              <el-badge :value="toDoReminder[item.reminder]||0" class="item" v-if="item.reminder">
+                {{ item.name }}
+              </el-badge>
+              <span v-else>{{ item.name }}</span>
             </li>
           </ul>
         </div>
@@ -213,28 +217,28 @@
           </div>
         </div>
         <div v-if="activeComp == 'invoice'">
-          <invoice></invoice>
+          <invoice @getToDoReminder="getToDoReminder"></invoice>
         </div>
         <div v-if="activeComp == 'invoiceConfirm'">
-          <invoice-confirm></invoice-confirm>
+          <invoice-confirm @getToDoReminder="getToDoReminder"></invoice-confirm>
         </div>
         <div v-if="activeComp == 'entrustedReceive'">
-          <entrustedReceive></entrustedReceive>
+          <entrustedReceive @getToDoReminder="getToDoReminder"></entrustedReceive>
         </div>
         <div v-if="activeComp == 'returnorder'" class="returnorder">
-          <return-goods></return-goods>
+          <return-goods @getToDoReminder="getToDoReminder"></return-goods>
         </div>
         <div v-if="activeComp == 'accountstatement'">
-          <accountstatement></accountstatement>
+          <accountstatement @getToDoReminder="getToDoReminder"></accountstatement>
         </div>
         <div v-if="activeComp == 'customerReturnOrder'">
-          <customerReturnOrder></customerReturnOrder>
+          <customerReturnOrder @getToDoReminder="getToDoReminder"></customerReturnOrder>
         </div>
         <div v-if="activeComp == 'exceptionList'">
-          <exceptionList></exceptionList>
+          <exceptionList @getToDoReminder="getToDoReminder"></exceptionList>
         </div>
         <div v-if="activeComp == 'trayList'">
-          <palletManagement></palletManagement>
+          <palletManagement @getToDoReminder="getToDoReminder"></palletManagement>
         </div>
       </div>
     </el-card>
@@ -326,6 +330,7 @@
     getByRepeatBomAttribute,
     saveOrderBomList
   } from '@/api/saleManage/saleorder';
+  import { getToDoReminder } from '@/api/common/index';
   import { exportSaleorder } from '@/api/system/file/index.js';
   import dictMixins from '@/mixins/dictMixins';
   import { reviewStatus, saleOrderProgressStatusEnum } from '@/enum/dict';
@@ -380,15 +385,35 @@
         activeName: 'all',
         activeComp: 'saleorder',
         tabOptions: [
-          { key: 'saleorder', name: '销售订单' },
-          { key: 'entrustedReceive', name: '受托收货单' },
-          { key: 'invoice', name: '发货单' },
-          { key: 'invoiceConfirm', name: '发货确认单' },
+          { key: 'saleorder', name: '销售订单', reminder: 'salesOrderNum' },
+          {
+            key: 'entrustedReceive',
+            name: '受托收货单',
+            reminder: 'entrustedReceiptNum'
+          },
+          { key: 'invoice', name: '发货单', reminder: 'deliveryNoteNum' },
+          {
+            key: 'invoiceConfirm',
+            name: '发货确认单',
+            reminder: 'deliveryConfirmationFormNum'
+          },
           { key: 'trayList', name: '托盘清单' },
-          { key: 'exceptionList', name: '异常列表' },
-          { key: 'returnorder', name: '退货单' },
-          { key: 'customerReturnOrder', name: '退货处理单' },
-          { key: 'accountstatement', name: '对账单' }
+          {
+            key: 'exceptionList',
+            name: '异常列表',
+            reminder: 'exceptionListNum'
+          },
+          { key: 'returnorder', name: '退货单', reminder: 'returnOrderNum' },
+          {
+            key: 'customerReturnOrder',
+            name: '退货处理单',
+            reminder: 'returnProcessingFormNum'
+          },
+          {
+            key: 'accountstatement',
+            name: '对账单',
+            reminder: 'statementAccountNum'
+          }
         ],
         selection: [], //单选中集合
         delVisible: false, //批量删除弹框状态
@@ -401,7 +426,9 @@
         cacheKeyUrl: 'eos-c2e9664a-saleManage-saleOrder',
         isRequired: true,
         isTotalCount: '0',
-        columnsVersion: 1
+        columnsVersion: 1,
+        timeR: null,
+        toDoReminder: {}
       };
     },
 
@@ -420,6 +447,11 @@
       }).then((res) => {
         this.isTotalCount = res.value;
       });
+      this.getToDoReminder();
+      this.timeR = setInterval(() => {
+        this.getToDoReminder();
+      }, 60000);
+
       // if (!('Notification' in window)) {
       //   console.log('此浏览器不支持桌面通知');
       // } else if (Notification.permission === 'granted') {
@@ -438,6 +470,9 @@
       //   });
       // }
     },
+    beforeDestroy() {
+      clearInterval(this.timeR);
+    },
     computed: {
       clientEnvironmentId() {
         return this.$store.state.user.info.clientEnvironmentId;
@@ -727,6 +762,11 @@
       }
     },
     methods: {
+      getToDoReminder() {
+        getToDoReminder().then((res) => {
+          this.toDoReminder = res;
+        });
+      },
       //更多菜单
       handleCommand(command, row) {
         if (command === 'invoice') {
@@ -802,6 +842,7 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.getToDoReminder()
       },
       handleClick() {
         this.activeName;

+ 2 - 0
src/views/saleManage/saleOrder/invoice/index.vue

@@ -471,6 +471,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 2 - 0
src/views/saleManage/saleOrder/invoiceConfirm/index.vue

@@ -368,6 +368,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       //新增编辑

+ 237 - 235
src/views/saleManage/saleOrder/orderAssociation/accountstatementList.vue

@@ -1,240 +1,243 @@
 <template>
-    <div class="ele-body">
-      <el-card shadow="never" v-loading="loading">
-           <div class="ele-border-lighter form-content" v-loading="loading">
-  
-              <!-- 数据表格 -->
-              <ele-pro-table
-                ref="table"
-                :columns="columns"
-                :datasource="datasource"
-                height="calc(100vh - 385px)"
-                full-height="calc(100vh - 116px)"
-                tool-class="ele-toolbar-form"
-                :selection.sync="selection"
-                cache-key="eomContactPageTable"
-              >
-              
-                <!-- 查看详情列 -->
-             
-                <template v-slot:statementNo="{ row }">
-                  <el-link type="primary" :underline="false" @click="openorderDetail(row,'statementNo')"> {{ row.statementNo }}</el-link>
-                </template>
-                <template v-slot:orderNo="{ row }">
-                <el-link type="primary" :underline="false" @click="openorderDetail(row,'orderNo')"> {{ row.orderNo }}</el-link>
-              </template>
-               
-              </ele-pro-table>
-            </div>
-      </el-card>
-  
-      <detail-dialog ref="DetailDialogRef"></detail-dialog>
-    </div>
-  </template>
-  
-  <script>
+  <div class="ele-body">
+    <el-card shadow="never" v-loading="loading">
+      <div class="ele-border-lighter form-content" v-loading="loading">
+        <!-- 数据表格 -->
+        <ele-pro-table
+          ref="table"
+          :columns="columns"
+          :datasource="datasource"
+          height="calc(100vh - 385px)"
+          full-height="calc(100vh - 116px)"
+          tool-class="ele-toolbar-form"
+          :selection.sync="selection"
+          cache-key="eomContactPageTable"
+        >
+          <!-- 查看详情列 -->
+
+          <template v-slot:statementNo="{ row }">
+            <el-link
+              type="primary"
+              :underline="false"
+              @click="openorderDetail(row, 'statementNo')"
+            >
+              {{ row.statementNo }}</el-link
+            >
+          </template>
+          <template v-slot:orderNo="{ row }">
+            <el-link
+              type="primary"
+              :underline="false"
+              @click="openorderDetail(row, 'orderNo')"
+            >
+              {{ row.orderNo }}</el-link
+            >
+          </template>
+        </ele-pro-table>
+      </div>
+    </el-card>
+
+    <detail-dialog ref="DetailDialogRef"></detail-dialog>
+  </div>
+</template>
+
+<script>
   import detailDialog from '@/views/saleManage/saleOrder/accountstatement/components/detailDialog.vue';
-  import {reviewStatus} from '@/enum/dict';
-  import {getAccountstatementList} from '@/api/saleManage/accountstatement';
+  import { reviewStatus } from '@/enum/dict';
+  import { getAccountstatementList } from '@/api/saleManage/accountstatement';
   import dictMixins from '@/mixins/dictMixins';
-  
-  
+
   export default {
-      mixins: [dictMixins],
-      components: {
-        detailDialog,
-      },
-      props:{
-        orderId:String
-      },
-      data() {
-        return {
-          activeComp: 'saleorder',
-          tabOptions: [
-            { key: 'saleorder', name: '销售订单' },
-            { key: 'invoice', name: '发货单' },
-            { key: 'returnorder', name: '退货单' }
-          ],
-          selection:[],   //单选中集合
-          delVisible:false,  //批量删除弹框状态
-          loading: false,  // 加载状态
-          columns: [
-            {
-               width: 45,
-               type: 'selection',
-               columnKey: 'selection',
-               align: 'center'
-            },
-            {
-              columnKey: 'index',
-              label: '序号',
-              type: 'index',
-              width: 55,
-              align: 'center',
-              showOverflowTooltip: true,
-              fixed: 'left'
-            },
-            {
-              prop: 'statementNo',
-              label: '对账单编码',
-              align: 'center',
-              slot: 'statementNo',
-              showOverflowTooltip: true,
-              minWidth: 200
-            },
-           
-            {
-              prop: 'contactName',
-              label: '客户名称',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 180,
-            },
-            {
-              prop: 'projectName',
-              label: '项目名称',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 200,
-            },
-            {
-              prop: 'accountPeriod',
-              label: '账期',
-              align: 'center',
-              slot: 'accountPeriod',
-              showOverflowTooltip: true,
-              minWidth: 200
-            },
-            {
-              prop: 'orderNum',
-              label: '订单量',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 200,
-            },
-            {
-              prop: 'productNum',
-              label: '产品总数量',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 200,
-            },
-            {
-              prop: 'totalPrice',
-              label: '产品总金额',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 200,
-            },
-            {
-              prop: 'reviewStatus',
-              label: '状态',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 200,
-              formatter: (_row, _column, cellValue) => {
+    mixins: [dictMixins],
+    components: {
+      detailDialog
+    },
+    props: {
+      orderId: String
+    },
+    data() {
+      return {
+        activeComp: 'saleorder',
+        tabOptions: [
+          { key: 'saleorder', name: '销售订单' },
+          { key: 'invoice', name: '发货单' },
+          { key: 'returnorder', name: '退货单' }
+        ],
+        selection: [], //单选中集合
+        delVisible: false, //批量删除弹框状态
+        loading: false, // 加载状态
+        columns: [
+          {
+            width: 45,
+            type: 'selection',
+            columnKey: 'selection',
+            align: 'center'
+          },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            prop: 'statementNo',
+            label: '对账单编码',
+            align: 'center',
+            slot: 'statementNo',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+
+          {
+            prop: 'contactName',
+            label: '客户名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 180
+          },
+          {
+            prop: 'projectName',
+            label: '项目名称',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'accountPeriod',
+            label: '账期',
+            align: 'center',
+            slot: 'accountPeriod',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'orderNum',
+            label: '订单量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'productNum',
+            label: '产品总数量',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'totalPrice',
+            label: '产品总金额',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200
+          },
+          {
+            prop: 'reviewStatus',
+            label: '状态',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 200,
+            formatter: (_row, _column, cellValue) => {
               return reviewStatus[_row.reviewStatus];
             }
-            },
-           
-            {
-              prop: 'createTime',
-              label: '创建时间',
-              align: 'center',
-              showOverflowTooltip: true,
-              minWidth: 170
-            },
-           
-            {
-              columnKey: 'action',
-              label: '操作',
-              width: 230,
-              align: 'center',
-              resizable: false,
-              slot: 'action',
-              showOverflowTooltip: true,
-              fixed: 'right',
-            }
-          ]
-        };
+          },
+
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 170
+          },
+
+          {
+            columnKey: 'action',
+            label: '操作',
+            width: 230,
+            align: 'center',
+            resizable: false,
+            slot: 'action',
+            showOverflowTooltip: true,
+            fixed: 'right'
+          }
+        ]
+      };
+    },
+    computed: {},
+
+    methods: {
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        return getAccountstatementList({
+          pageNum: page,
+          size: limit,
+          type: 1,
+          orderId: this.orderId,
+          ...where
+        });
+      },
+
+      /* 刷新表格 */
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder');
       },
-      computed: {},
-   
-      methods: {
-      
-      
-        /* 表格数据源 */
-        datasource({ page, limit, where, order }) {
-          return getAccountstatementList({
-            pageNum: page,
-            size: limit,
-            type:1,
-            orderId:this.orderId,
-            ...where
-          });
-        },
-      
-     
-    
-        /* 刷新表格 */
-        reload(where) {
-          this.$refs.table.reload({ page: 1, where });
-        },
-        
-        //新增编辑
-        openEdit(type,row) {
-          this.$refs.accountDialogRef.open( type,row);
-          this.$refs.accountDialogRef.$refs.form &&
+
+      //新增编辑
+      openEdit(type, row) {
+        this.$refs.accountDialogRef.open(type, row);
+        this.$refs.accountDialogRef.$refs.form &&
           this.$refs.accountDialogRef.$refs.form.clearValidate();
-        },
-       
-        //批量删除
-        allDelBtn(){
-          if(this.selection.length===0) return
-          this.delVisible=true
-        },
-        
-        //删除接口
-        remove(delData) {
-          deletetAccountstatement(delData).then((res) => {
-            this.$message.success('删除成功!');
-            this.reload();
-          });
-        },
-  
+      },
+
+      //批量删除
+      allDelBtn() {
+        if (this.selection.length === 0) return;
+        this.delVisible = true;
+      },
+
+      //删除接口
+      remove(delData) {
+        deletetAccountstatement(delData).then((res) => {
+          this.$message.success('删除成功!');
+          this.reload();
+        });
+      },
+
       //删除弹框确定
-        commitBtn(){
-          const dataId=this.selection.map(v=>v.id)
-          this.remove(dataId)
-        },
-  
+      commitBtn() {
+        const dataId = this.selection.map((v) => v.id);
+        this.remove(dataId);
+      },
+
       //查看详情
-      openorderDetail(row,type){
-        
-          if(type==='statementNo'){
-            this.$refs.DetailDialogRef.open(row);
+      openorderDetail(row, type) {
+        if (type === 'statementNo') {
+          this.$refs.DetailDialogRef.open(row);
+        }
+        if (type === 'orderNo') {
+          this.$refs.orderDetailDialogRef.open({ id: row.orderId });
+        }
       }
-      if(type==='orderNo'){
-        this.$refs.orderDetailDialogRef.open({id:row.orderId});
-      }
-        },
-  
-      }
-    };
-  </script>
-  
-  <style lang="scss" scoped>
-  .ele-body{
-    padding-top:0;
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .ele-body {
+    padding-top: 0;
     padding-bottom: 0;
   }
- :deep .el-card__body{
-  padding: 0;
-}
-  :deep(.el-link--inner){
+  :deep .el-card__body {
+    padding: 0;
+  }
+  :deep(.el-link--inner) {
     margin-left: 0px !important;
   }
-  
+
   .sys-organization-list {
     height: calc(100vh - 264px);
     box-sizing: border-box;
@@ -248,21 +251,20 @@
       margin-left: 10px;
     }
   }
-  
-  .switch_left ul .active{
+
+  .switch_left ul .active {
     border-top: 4px solid var(--color-primary);
-      color: var(--color-primary-5);
+    color: var(--color-primary-5);
   }
-  .switch{
+  .switch {
     padding-bottom: 20px;
   }
-  
+
   .el-dropdown-link {
-      cursor: pointer;
-      color: var(--color-primary-5);
-    }
-    .el-icon-arrow-down {
-      font-size: 12px;
-    }
-  </style>
-  
+    cursor: pointer;
+    color: var(--color-primary-5);
+  }
+  .el-icon-arrow-down {
+    font-size: 12px;
+  }
+</style>

+ 2 - 0
src/views/saleManage/saleOrder/palletManagement/index.vue

@@ -167,6 +167,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
       openEdit(row) {
         this.$refs.detailDialog.open(row);

+ 1 - 0
src/views/saleManage/saleOrder/returnGoods/index.vue

@@ -409,6 +409,7 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
       },
 
       //新增编辑

+ 2 - 0
src/views/salesServiceManagement/cost/index.vue

@@ -224,6 +224,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       openEdit(row, type) {

+ 2 - 0
src/views/salesServiceManagement/demandList/index.vue

@@ -420,6 +420,8 @@
       /* 刷新表格 */
       reload(where) {
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
 
       openEdit(row, type) {

+ 48 - 20
src/views/salesServiceManagement/index.vue

@@ -10,8 +10,16 @@
                 :key="item.key"
                 :class="{ active: activeComp == item.key }"
                 @click="hander(item.key)"
-                >{{ item.name }}</li
               >
+                <el-badge
+                  :value="toDoReminder[item.reminder] || 0"
+                  class="item"
+                  v-if="item.reminder"
+                >
+                  {{ item.name }}
+                </el-badge>
+                <span v-else>{{ item.name }}</span>
+              </li>
             </ul>
           </div>
           <!-- <div class="right" style="padding: 10px">
@@ -20,13 +28,16 @@
         </div>
         <div class="main">
           <div v-if="activeComp == 'demandList'">
-            <demandList ref="demandListRef" />
+            <demandList
+              ref="demandListRef"
+              @getToDoReminder="getToDoReminder"
+            />
           </div>
           <div v-if="activeComp == 'toDoList'">
-            <toDoList ref="toDoListRef" />
+            <toDoList ref="toDoListRef" @getToDoReminder="getToDoReminder" />
           </div>
           <div v-if="activeComp == 'workOrder'">
-            <workOrder ref="workOrderRef" />
+            <workOrder ref="workOrderRef" @getToDoReminder="getToDoReminder" />
           </div>
           <div v-if="activeComp == 'evaluate'">
             <evaluate ref="evaluateRef" />
@@ -41,9 +52,9 @@
             <knowledge ref="knowledgeRef" />
           </div>
           <div v-if="activeComp == 'cost'">
-            <Cost ref="costRef" />
+            <Cost ref="costRef" @getToDoReminder="getToDoReminder" />
           </div>
-           <div v-if="activeComp == 'statisReport'">
+          <div v-if="activeComp == 'statisReport'">
             <statisReport ref="statisReportRef" />
           </div>
         </div>
@@ -60,7 +71,9 @@
   import knowledge from './knowledge';
   import recycle from './recycle';
   import Cost from './cost';
-  import statisReport from './statisReport'
+  import statisReport from './statisReport';
+  import { getToDoReminder } from '@/api/common/index';
+
   export default {
     components: {
       demandList,
@@ -77,28 +90,43 @@
       return {
         activeComp: 'demandList',
         tabOptions: [
-          { key: 'demandList', name: '售后需求' },
-          { key: 'toDoList', name: '售后计划' },
-          { key: 'workOrder', name: '售后工单' },
-          { key: 'cost', name: '费用清单' },
+          {
+            key: 'demandList',
+            name: '售后需求',
+            reminder: 'afterSalesDemandNum'
+          },
+          { key: 'toDoList', name: '售后计划', reminder: 'afterSalesPlanNum' },
+          {
+            key: 'workOrder',
+            name: '售后工单',
+            reminder: 'afterSalesWorkOrderNum'
+          },
+          { key: 'cost', name: '费用清单', reminder: 'expenseListNum' },
           { key: 'evaluate', name: '客户评价' },
           { key: 'accessory', name: '配件申请记录' },
           { key: 'recycle', name: '配件回收记录' },
           { key: 'knowledge', name: '故障知识库' },
           { key: 'statisReport', name: '统计报表' }
-        ]
+        ],
+        timeR: null,
+        toDoReminder: {}
       };
     },
-    mounted() {
-      // switch (this.$route.query.title) {
-      //   case '工单':
-      //     this.activeComp = 'workOrder';
-      //     break;
-      //   default:
-      //     break;
-      // }
+    created() {
+      this.getToDoReminder();
+      this.timeR = setInterval(() => {
+        this.getToDoReminder();
+      }, 60000);
+    },
+    beforeDestroy() {
+      clearInterval(this.timeR);
     },
     methods: {
+      getToDoReminder() {
+        getToDoReminder().then((res) => {
+          this.toDoReminder = res;
+        });
+      },
       hander(key) {
         this.activeComp = key;
       }

+ 2 - 0
src/views/salesServiceManagement/toDoList/index.vue

@@ -249,6 +249,8 @@
         this.$refs.table.reload({ page: 1, where });
         this.radioId = '';
         this.currentRow = {};
+        this.$emit('getToDoReminder')
+
       },
       async cancel(row) {
         let flag = await this.permission(row);

+ 2 - 0
src/views/salesServiceManagement/workOrder/index.vue

@@ -449,6 +449,8 @@
           where.orderStatus = this.orderStatus;
         }
         this.$refs.table.reload({ page: 1, where });
+        this.$emit('getToDoReminder')
+
       },
       async cancel(row) {
         const res = await deleteSalesWorkOrder([row.id]);

+ 1 - 1
vue.config.js

@@ -36,7 +36,7 @@ module.exports = {
     proxy: {
       // 当我们的本地的请求 有/api的时候,就会代理我们的请求地址向另外一个服务器发出请求
       '/api': {
-        target: 'http://192.168.1.144:18086',//开发
+        target: 'http://192.168.1.251:18086',//开发
         // target: 'http://192.168.1.251:18186',//测试
         // target: 'http://192.168.1.23:18086',//罗
         // target: 'http://192.168.1.144:18086',//付