Browse Source

Merge branch 'develop_yh46' of jianguan-web/jg-ocs-html into develop_yh45

李磊 10 months ago
parent
commit
246b5828de
100 changed files with 3450 additions and 2206 deletions
  1. BIN
      public/templ/采购产品导入模板.xlsx
  2. 1 1
      public/version.json
  3. 11 0
      src/api/expenseManagement.js
  4. 114 28
      src/api/promoActive.js
  5. 3 3
      src/api/promotion.js
  6. 202 0
      src/api/purchase.js
  7. 176 115
      src/api/salesNew.js
  8. 27 16
      src/api/spareParts.js
  9. 1 1
      src/components/Select/index.js
  10. 6 4
      src/components/UploadFile/index.vue
  11. 11 9
      src/components/index.less
  12. 5 2
      src/components/newThem.less
  13. 58 0
      src/config/router.config.js
  14. 41 28
      src/store/modules/app.js
  15. 2 3
      src/views/allocationManagement/allocateReturnConfirmation/detailModal.vue
  16. 332 304
      src/views/allocationManagement/allocateReturnConfirmation/list.vue
  17. 43 53
      src/views/allocationManagement/allocationList/list.vue
  18. 55 45
      src/views/allocationManagement/matchSendOutOrder/list.vue
  19. 4 4
      src/views/allocationManagement/transferOut/basicInfoModal.vue
  20. 6 3
      src/views/allocationManagement/transferOut/chooseImportModal.vue
  21. 20 9
      src/views/allocationManagement/transferOut/detail.vue
  22. 25 19
      src/views/allocationManagement/transferOut/dsModal.vue
  23. 58 36
      src/views/allocationManagement/transferOut/edit.vue
  24. 14 5
      src/views/allocationManagement/transferOut/importGuideModal.vue
  25. 55 44
      src/views/allocationManagement/transferOut/list.vue
  26. 31 23
      src/views/allocationManagement/transferOut/printModal.vue
  27. 20 15
      src/views/allocationManagement/transferOut/printStatusModal.vue
  28. 49 29
      src/views/allocationManagement/transferReturn/basicInfoModal.vue
  29. 37 29
      src/views/allocationManagement/transferReturn/check.vue
  30. 5 3
      src/views/allocationManagement/transferReturn/chooseImportModal.vue
  31. 15 7
      src/views/allocationManagement/transferReturn/detail.vue
  32. 52 38
      src/views/allocationManagement/transferReturn/edit.vue
  33. 45 40
      src/views/allocationManagement/transferReturn/editGrp.vue
  34. 14 5
      src/views/allocationManagement/transferReturn/importGuideModal.vue
  35. 34 24
      src/views/allocationManagement/transferReturn/list.vue
  36. 10 7
      src/views/allocationManagement/transferReturn/print.vue
  37. 20 17
      src/views/allocationManagement/transferReturn/printModal.vue
  38. 65 49
      src/views/allocationManagement/transfersPrint/list.vue
  39. 10 4
      src/views/allocationManagement/transfersPrint/recordModal.vue
  40. 12 4
      src/views/basicData/transferTypeManagement/editModal.vue
  41. 9 3
      src/views/basicData/transferTypeManagement/list.vue
  42. 18 12
      src/views/basicData/warehouse/editModal.vue
  43. 8 2
      src/views/basicData/warehouse/list.vue
  44. 7 1
      src/views/basicData/warehouse/storingLocation/editModal.vue
  45. 14 7
      src/views/basicData/warehouse/storingLocation/list.vue
  46. 3 1
      src/views/common/chooseProductsModal.vue
  47. 14 5
      src/views/common/supplier.js
  48. 30 24
      src/views/dataExport/exportCheck/list.vue
  49. 34 29
      src/views/dataExport/exportSales/list.vue
  50. 27 18
      src/views/dealerManagement/businessOwnerSettings/addModal.vue
  51. 39 16
      src/views/dealerManagement/businessOwnerSettings/categorySet.vue
  52. 19 11
      src/views/dealerManagement/businessOwnerSettings/chooseAreaModal.vue
  53. 43 28
      src/views/dealerManagement/businessOwnerSettings/chooseDealer.vue
  54. 27 13
      src/views/dealerManagement/businessOwnerSettings/chooseSupplier.vue
  55. 26 14
      src/views/dealerManagement/businessOwnerSettings/list.vue
  56. 37 29
      src/views/dealerManagement/businessOwnerSettings/settingsIndex.vue
  57. 68 67
      src/views/dealerManagement/businessOwnerSettings/supplierSet.vue
  58. 1 0
      src/views/dealerManagement/dealerAccountManagement/detailModal.vue
  59. 26 16
      src/views/dealerManagement/dealerAccountManagement/editModal.vue
  60. 16 12
      src/views/dealerManagement/dealerAccountManagement/list.vue
  61. 23 21
      src/views/dealerManagement/dealerZoneSearch/list.vue
  62. 13 7
      src/views/dealerManagement/marketingDivisionSetNew/addAreaModal.vue
  63. 16 9
      src/views/dealerManagement/marketingDivisionSetNew/addZoneModal.vue
  64. 15 10
      src/views/dealerManagement/marketingDivisionSetNew/list.vue
  65. 39 32
      src/views/dealerManagement/marketingDivisionSetNew/viewDealers.vue
  66. 27 14
      src/views/dealerManagement/merchantInfoManagement/chooseTypeModal.vue
  67. 17 25
      src/views/dealerManagement/merchantInfoManagement/detailModal.vue
  68. 71 66
      src/views/dealerManagement/merchantInfoManagement/edit.vue
  69. 59 15
      src/views/dealerManagement/merchantInfoManagement/list.vue
  70. 22 15
      src/views/dealerManagement/merchantInfoManagement/permissionSettingNew.vue
  71. 10 8
      src/views/dealerManagement/merchantInfoManagement/priceLevelModal.vue
  72. 21 14
      src/views/dealerManagement/merchantInfoManagement/updateCooperate.vue
  73. 20 12
      src/views/dealerManagement/merchantInfoManagement/updateDealerLevel.vue
  74. 9 2
      src/views/dealerManagement/provincialWarehouseManagement/addModal.vue
  75. 32 22
      src/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue
  76. 15 9
      src/views/dealerManagement/provincialWarehouseManagement/list.vue
  77. 41 30
      src/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue
  78. 19 11
      src/views/dealerManagement/rebateBinding/categoryList.vue
  79. 21 14
      src/views/dealerManagement/rebateBinding/categoryTree.vue
  80. 35 21
      src/views/dealerManagement/rebateBinding/list.vue
  81. 33 15
      src/views/dealerManagement/rebateBinding/priceDiffModal.vue
  82. 45 27
      src/views/dowloadFile/list.vue
  83. 127 49
      src/views/expenseManagement/expenseReimbursement/add.vue
  84. 43 28
      src/views/expenseManagement/expenseReimbursement/baseDataModal.vue
  85. 12 8
      src/views/expenseManagement/expenseReimbursement/chooseDepartUserModal.vue
  86. 7 2
      src/views/expenseManagement/expenseReimbursement/chooseImportModal.vue
  87. 29 21
      src/views/expenseManagement/expenseReimbursement/detail.vue
  88. 27 8
      src/views/expenseManagement/expenseReimbursement/epenseCdfModal.vue
  89. 89 60
      src/views/expenseManagement/expenseReimbursement/epenseDetailModal.vue
  90. 4 6
      src/views/expenseManagement/expenseReimbursement/importGuideModal.vue
  91. 78 58
      src/views/expenseManagement/expenseReimbursement/list.vue
  92. 116 113
      src/views/expenseManagement/expenseReimbursement/previewModal.vue
  93. 7 14
      src/views/expenseManagement/expenseReimbursement/productInfoModal.vue
  94. 1 1
      src/views/expenseManagement/expenseReimbursement/verifyModal.vue
  95. 37 27
      src/views/expenseManagement/expenseReimbursementDetail/list.vue
  96. 7 5
      src/views/financialManagement/collectionDetailStatic/list.vue
  97. 22 19
      src/views/financialManagement/financialCollection/detail.vue
  98. 3 0
      src/views/financialManagement/financialCollection/edit.vue
  99. 79 54
      src/views/financialManagement/financialCollection/fcDetailModal.vue
  100. 4 0
      src/views/financialManagement/financialCollection/list.vue

BIN
public/templ/采购产品导入模板.xlsx


+ 1 - 1
public/version.json

@@ -1,4 +1,4 @@
 {
-    "version": "2.2.422",
+    "version": "2.2.466",
     "message": "发现有新版本发布,确定更新系统?"
 }

+ 11 - 0
src/api/expenseManagement.js

@@ -169,6 +169,17 @@ export const expenseAcctDetailSave = (params) => {
     }
   })
 }
+// 批量保存费用明细
+export const updateBatchExpenseAcctDetail = (params) => {
+  return axios({
+    url: `/expenseAcctDetail/updateDetailByAccount`,
+    data: params,
+    method: 'post',
+    headers:{
+      'module': encodeURIComponent('批量修改记账名称')
+    }
+  })
+}
 // 费用类型
 export const expenseTypeList = (params) => {
   return axios({

+ 114 - 28
src/api/promoActive.js

@@ -1,6 +1,6 @@
 import { axios } from '@/utils/request'
 
-//  优惠活动 列表  有分页
+//  修理厂促销  列表  有分页
 export const promoActiveList = (params) => {
   const url = `/promoActive/queryPage/${params.pageNo}/${params.pageSize}`
   delete params.pageNo
@@ -9,60 +9,146 @@ export const promoActiveList = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
-        'module': encodeURIComponent('列表查询')
+    headers: {
+      'module': encodeURIComponent('列表查询')
     }
   })
 }
-//  优惠活动 保存
-export const promoActiveSave = (params) => {
+//  修理厂促销 新增
+export const promoActiveCreate = (params) => {
   return axios({
-    url: '/promoActive/save',
+    url: '/promoActive/create',
     data: params,
     method: 'post',
-    headers:{
-        'module': encodeURIComponent('新增')
+    headers: {
+      'module': encodeURIComponent('新增')
     }
   })
 }
-//  优惠活动 删除
+
+//  修理厂促销 详情
+export const promoActiveDetail = (params) => {
+  const url = `/promoActive/findBySn/${params.sn}`
+  return axios({
+    url: url,
+    method: 'get'
+  })
+}
+//  修理厂促销 编辑
+export const promoActiveUpdate = (params) => {
+  return axios({
+    url: '/promoActive/update',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('编辑')
+    }
+  })
+}
+
+//  修理厂促销 删除
 export const promoActiveDel = (params) => {
   const url = `/promoActive/delete/${params.sn}`
   return axios({
     url: url,
     method: 'get',
-    headers:{
-        'module': encodeURIComponent('删除')
+    headers: {
+      'module': encodeURIComponent('删除')
     }
   })
 }
-//  优惠活动 详情
-export const promoActiveDetail = (params) => {
-  const url = `/promoActive/findBySn/${params.sn}`
+// 修理厂促销 促销发布
+export const promoActivePublish = (params) => {
   return axios({
-    url: url,
-    method: 'get'
+    url: '/promoActive/updatePublish',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('促销发布')
+    }
   })
 }
-//  优惠活动 启禁用
-export const promoActiveEnable = (params) => {
-  const url = `/promoActive/enable/${params.sn}/${params.flag}`
+// 修理厂促销 选择产品列表
+export const queryWaitingProductPage = (params) => {
+  const url = `/promoRuleProduct/queryWaitingProductPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
   return axios({
     url: url,
-    method: 'get',
-    headers:{
-        'module': encodeURIComponent('启用禁用')
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 修理厂促销   保存产品范围
+export const saveBatchEntity = (params) => {
+  return axios({
+    url: '/promoRuleProductRange/saveBatchEntity',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('保存产品范围')
+    }
+  })
+}
+// 批量创建产品
+export const promoCreateBatch = (params) => {
+  return axios({
+    url: '/promoRuleProduct/createBatch',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('批量创建产品')
     }
   })
 }
-//  优惠活动 详情
-export const promoActiveDetailD = (params) => {
-  const url = `/promoActive/findDetailBySn/${params.sn}`
+export const promoUpdateBatch = (params) => {
+  return axios({
+    url: '/promoRuleProduct/updateBatch',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('批量创建产品')
+    }
+  })
+}
+// 获取已选产品列表数据  有分页
+export const promoRuleProductList = (params) => {
+  const url = `/promoRuleProduct/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
   return axios({
     url: url,
-    method: 'get',
-    headers:{
-        'module': encodeURIComponent('优惠活动明细')
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 批量删除
+export const deleteBatch = (params) => {
+  return axios({
+    url: '/promoRuleProduct/deleteBatch',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('批量删除')
+    }
+  })
+}
+// 删除产品范围  数据变化 promoActiveSn  productTypeSnList
+export const deleteByProductType = (params) => {
+  return axios({
+    url: '/promoRuleProduct/deleteByProductType',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('批量删除')
     }
   })
 }

+ 3 - 3
src/api/promotion.js

@@ -155,9 +155,9 @@ export const promotionDateModify = (params) => {
 // 中止
 export const promotionIsOver = (params) => {
   return axios({
-    url: `/promotion/isOver/${params.sn}`,
-    data: {},
-    method: 'get',
+    url: '/promotion/isOver',
+    data: params,
+    method: 'post',
     headers: {
       'module': encodeURIComponent('终止')
     }

+ 202 - 0
src/api/purchase.js

@@ -0,0 +1,202 @@
+import { axios } from '@/utils/request'
+
+//  采购入库 列表  分页
+export const purchaseList = (params) => {
+  const url = `/purchase/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+//  采购入库 列表合计
+export const purchasePageCount = (params) => {
+  return axios({
+    url: '/purchase/queryPageCount',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表合计')
+    }
+  })
+}
+//  采购入库 列表 取消
+export const purchaseCancel = (params) => {
+  const url = `/purchase/cancel/${params.sn}`
+  return axios({
+    url: url,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('取消')
+    }
+  })
+}
+
+// 采购入库 明细列表 分页
+export const purchaseDetailPageList = (params) => {
+  const url = `/purchase/queryDetailPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+//  采购入库 明细列表  基础信息
+export const queryDetailCount = (params) => {
+  const url = `/purchase/queryBySn/${params.sn}`
+  return axios({
+    url: url,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('基础信息')
+    }
+  })
+}
+//  采购入库 明细列表 统计信息
+export const purchaseDetailPageCount = (params) => {
+  return axios({
+    url: `/purchase/queryDetailPageCount`,
+    data: params,
+    method: 'post'
+  })
+}
+// 新增/编辑 采购入库详情
+export const savePurchaseDetail = (params) => {
+  return axios({
+    url: '/purchase/saveDetail',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('新增/编辑')
+    }
+  })
+}
+// 编辑基础信息
+export const detailBaseSave = (params) => {
+  return axios({
+    url: '/purchase/setSupplierInfo',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('基础信息编辑')
+    }
+  })
+}
+
+// 采购入库提交
+export const purchaseSubmit = (params) => {
+  return axios({
+    url: `/purchase/submit/${params.sn}`,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('提交')
+    }
+  })
+}
+// 采购入库  明细详情
+export const getDetailData = (params) => {
+  const url = `/purchase/queryDetailBySn/${params.sn}`
+  return axios({
+    url: url,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('明细详情')
+    }
+  })
+}
+
+// 采购入库 编辑页面 删除 sparePartsDetailSn
+export const purchaseDetailDel = (params) => {
+  const url = `/purchase/deleteDetail/${params.sn}`
+  return axios({
+    url: url,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('删除')
+    }
+  })
+}
+
+//  采购入库   解析导入的文件
+export const purchaseImportData = (params) => {
+  return axios({
+    url: '/purchase/detail/parseProducts',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('导入和不可导入列表')
+    }
+  })
+}
+// 采购入库 导出错误项
+export const exportPurchaseData = params => {
+  const url = `/purchase/detail/downloadFailExcel`
+  return axios.request({
+    url: url,
+    data: params,
+    method: 'post',
+    responseType: 'blob',
+    headers: {
+      'module': encodeURIComponent('导出错误项')
+    }
+  })
+}
+// 采购入库 确定要导入的数据
+
+export const purchaseImportBatchInsert = (params) => {
+  return axios({
+    url: 'purchase/detail/batchInsert',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('确定导入')
+    }
+  })
+}
+
+// 采购入库 审核
+export const purchaseAudit = (params) => {
+  return axios({
+    url: '/purchase/audit',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('审核')
+    }
+  })
+}
+
+// 采购入库 上传凭证
+export const saveAttachment = (params) => {
+  return axios({
+    url: '/purchase/saveAttachment',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('上传凭证')
+    }
+  })
+}
+// 采购入库  轮胎唯一码
+export const traceCodeQueryList = (params) => {
+  return axios({
+    url: '/traceCode/queryList',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('查看唯一码')
+    }
+  })
+}

+ 176 - 115
src/api/salesNew.js

@@ -2,143 +2,168 @@ import { axios } from '@/utils/request'
 
 // 销售 统计查询
 export const salesCount = (params) => {
-    return axios({
-      url: `/sales/queryCount`,
-      data: params,
-      method: 'post'
-    })
-  }
+  return axios({
+    url: `/sales/queryCount`,
+    data: params,
+    method: 'post'
+  })
+}
 //  销售 列表  有分页
 export const salesList = (params) => {
-    const url = `/sales/queryPage/${params.pageNo}/${params.pageSize}`
-    delete params.pageNo
-    delete params.pageSize
-    return axios({
-        url: url,
-        data: params,
-        method: 'post',
-        headers:{
-          'module': encodeURIComponent('列表查询')
-        }
-    })
+  const url = `/sales/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+// 第三方库存
+export const getThirdStockQty = (params) => {
+  return axios({
+    url: `/sunFulcess/getStockQty`,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 是否已转采购单
+export const getCreatePurchaseFlag = (params) => {
+  return axios({
+    url: `/sales/getCreatePurchaseFlag`,
+    data: params,
+    method: 'post'
+  })
+}
+// 转采购单
+export const allCreatePurchase = (params) => {
+  return axios({
+    url: `/sales/allCreatePurchase`,
+    data: params,
+    method: 'post'
+  })
 }
 //  销售 待转费用单列表  有分页
 export const salesConvertExpenseList = (params) => {
-    const url = `/salesPromo/queryBatchConvertExpenseAccountPage/${params.pageNo}/${params.pageSize}`
-    delete params.pageNo
-    delete params.pageSize
-    return axios({
-        url: url,
-        data: params,
-        method: 'post',
-        headers:{
-          'module': encodeURIComponent('待转费用报销单列表')
-        }
-    })
+  const url = `/salesPromo/queryBatchConvertExpenseAccountPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('待转费用报销单列表')
+    }
+  })
 }
 //  销售 新增
 export const salesSave = (params) => {
-    return axios({
-      url: '/sales/insert',
-      data: params,
-      method: 'post',
-      headers:{
-        'module': encodeURIComponent('新增销售单')
-      }
-    })
+  return axios({
+    url: '/sales/insert',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('新增销售单')
+    }
+  })
 }
 // 销售 编辑
 export const salesModify = (params) => {
-    return axios({
-      url: '/sales/modifyWarehouse',
-      data: params,
-      method: 'post',
-      headers:{
-        'module': encodeURIComponent('修改仓库')
-      }
-    })
-  }
+  return axios({
+    url: '/sales/modifyWarehouse',
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('修改仓库')
+    }
+  })
+}
 //  销售 详情bysn
 export const salesDetailBySn = (params) => {
-    return axios({
-      url: `/sales/findBySn/${params.salesBillSn}`,
-      method: 'get'
-    })
-  }
+  return axios({
+    url: `/sales/findBySn/${params.salesBillSn}`,
+    method: 'get'
+  })
+}
 // 查询客户名称
 export const salesDetailByNo = (params) => {
-    return axios({
-      url: `/sales/findBySaleBillNo/${params.salesBillNo}`,
-      method: 'get',
-      headers:{
-        'module': encodeURIComponent('查询客户信息')
-      }
-    })
-  }
+  return axios({
+    url: `/sales/findBySaleBillNo/${params.salesBillNo}`,
+    method: 'get',
+    headers: {
+      'module': encodeURIComponent('查询客户信息')
+    }
+  })
+}
 //  销售 删除
 export const salesDel = (params) => {
-    return axios({
-      url: `/sales/delete/${params.salesBillSn}`,
-      method: 'get',
-      headers:{
-        'module': encodeURIComponent('删除')
-      }
-    })
-  }
+  return axios({
+    url: `/sales/delete/${params.salesBillSn}`,
+    method: 'get',
+    headers: {
+      'module': encodeURIComponent('删除')
+    }
+  })
+}
 //  销售 取消
 export const salesCancle = (params) => {
-    return axios({
-      url: `/sales/cancle/${params.salesBillSn}`,
-      method: 'get',
-      headers:{
-        'module': encodeURIComponent('取消')
-      }
-    })
-  }
+  return axios({
+    url: `/sales/cancle/${params.salesBillSn}`,
+    method: 'get',
+    headers: {
+      'module': encodeURIComponent('取消')
+    }
+  })
+}
 
 // 根据销售单sn查询参加的活动
 export const salesPromoQueryList = (params) => {
-    return axios({
-        url: `/salesPromo/queryExtList`,
-        data: params,
-        method: 'post'
-    })
+  return axios({
+    url: `/salesPromo/queryExtList`,
+    data: params,
+    method: 'post'
+  })
 }
 // 更换促销,可更换活动列表
 export const salesPromoMatchProduct = (params) => {
   return axios({
-      url: `/salesPromo/queryMatchProduct`,
-      data: params,
-      method: 'post'
+    url: `/salesPromo/queryMatchProduct`,
+    data: params,
+    method: 'post'
   })
 }
 
 // 判断是否有新的活动
 export const salesQueryUnPartPromo = (params) => {
   return axios({
-      url: `/salesPromo/queryUnPartPromo/${params.salesBillSn}`,
-      data: params,
-      method: 'post'
+    url: `/salesPromo/queryUnPartPromo/${params.salesBillSn}`,
+    data: params,
+    method: 'post'
   })
 }
 // 活动优惠明细接口
 export const salesPromoQueryCount = (params) => {
   return axios({
-      url: `/salesPromo/queryCount`,
-      data: params,
-      method: 'post'
+    url: `/salesPromo/queryCount`,
+    data: params,
+    method: 'post'
   })
 }
 
 // 提交时活动规则校验
 export const salesPromoValidaSubmit = (params) => {
   return axios({
-      url: `/salesPromo/validationSubmit/${params.salesBillSn}`,
-      data: params,
-      method: 'post',
-      headers:{
-        'module': encodeURIComponent('提交前活动规则校验')
-      }
+    url: `/salesPromo/validationSubmit/${params.salesBillSn}`,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('提交前活动规则校验')
+    }
   })
 }
 
@@ -148,7 +173,7 @@ export const salesWriteAuditPass = (params) => {
     url: '/sales/auditPass',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('审核通过')
     }
   })
@@ -159,7 +184,7 @@ export const salesWriteAuditReject = (params) => {
     url: '/sales/auditReject',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('审核驳回')
     }
   })
@@ -170,7 +195,7 @@ export const salesWriteAuditPush = (params) => {
     url: '/sales/auditPush',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('一键审核')
     }
   })
@@ -181,7 +206,7 @@ export const salesWriteSubmit = (params) => {
     url: '/sales/submit',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('提交')
     }
   })
@@ -195,13 +220,30 @@ export const submitCheck = (params) => {
     data: params
   })
 }
+// 改单弹窗价格列表
+export const changeBillCheck = (params) => {
+  return axios({
+    url: '/sales/changeBillCheck',
+    method: 'post',
+    data: params
+  })
+}
+// 更新改单数据
+export const changeBillCheckUpdatePrice = (params) => {
+  return axios({
+    url: '/sales/changeBillCheckUpdatePrice',
+    method: 'post',
+    data: params
+  })
+}
+
 // 当前价格  提交
 export const updateBatch = (params) => {
   return axios({
     url: '/sales/detail/updateBatch',
     method: 'post',
     data: params,
-    headers:{
+    headers: {
       'module': encodeURIComponent('价格批量更新')
     }
   })
@@ -214,7 +256,7 @@ export const salesDetailAllList = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('销售单明细列表查询')
     }
   })
@@ -237,27 +279,47 @@ export const queryBatchCreateBySalesBillSn = (params) => {
     method: 'post'
   })
 }
-
+// 批量查询合并后的报销单
+export const queryBatchCreateBySalesPromoSnListGroupType = (params) => {
+  return axios({
+    url: `/expenseAccount/queryBatchCreateBySalesPromoSnListGroupType`,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('销售单合并后转费用报销单')
+    }
+  })
+}
+// 保存合并选项
+export const expenseAccountSaveGroupType = (params) => {
+  return axios({
+    url: `/expenseAccount/saveCreateGroupType`,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('销售单转费用报销单,确定合并')
+    }
+  })
+}
 // 保存费用报销单
 export const expenseAccountSave = (params) => {
   return axios({
     url: `/expenseAccount/saveCreate`,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('转费用报销单')
     }
   })
 }
 
-
 //  销售 打印
 export const salesPrint = (params) => {
   return axios({
     url: '/sales/print',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('销售打印')
     }
   })
@@ -268,7 +330,7 @@ export const salesPrintPreview = (params) => {
     url: '/sales/printPreview',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('销售打印预览')
     }
   })
@@ -283,14 +345,14 @@ export const salesDetailProductType = (params) => {
 // 销售 详情  打印
 export const salesDetailPrint = params => {
   const url = `/sales/print/${params.priceType}`
-  const id = params.priceType.indexOf('_TYPE')>=0 ? '销售分类打印' : '销售打印'
+  const id = params.priceType.indexOf('_TYPE') >= 0 ? '销售分类打印' : '销售打印'
   delete params.priceType
   return axios.request({
     url: url,
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent(id)
     }
   })
@@ -304,7 +366,7 @@ export const salesDetailExcel = params => {
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导出Excel')
     }
   })
@@ -317,13 +379,12 @@ export const salesDetailTypeExcel = params => {
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('销售分类导出')
     }
   })
 }
 
-
 // 仓库销售单
 //  按仓库查询销售单 列表  有分页
 export const queryPageForWarehouse = (params) => {
@@ -334,7 +395,7 @@ export const queryPageForWarehouse = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('列表查询')
     }
   })
@@ -356,7 +417,7 @@ export const queryPageForWarehouseDetail = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('明细列表查询')
     }
   })
@@ -378,7 +439,7 @@ export const exportForWarehouse = params => {
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导出')
     }
   })
@@ -392,8 +453,8 @@ export const salesOverviewQueryPage = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('列表查询')
     }
   })
-}
+}

+ 27 - 16
src/api/spareParts.js

@@ -9,7 +9,7 @@ export const sparePartsList = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('列表查询')
     }
   })
@@ -21,7 +21,7 @@ export const sparePartsDetailExport = (params) => {
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导出明细')
     }
   })
@@ -32,7 +32,7 @@ export const sparePartsAudit = (params) => {
   return axios({
     url: `/spareParts/audit/${params.sn}`,
     method: 'get',
-    headers:{
+    headers: {
       'module': encodeURIComponent('审核')
     }
   })
@@ -43,7 +43,7 @@ export const sparePartsBatchAudit = (params) => {
     url: `/spareParts/batchAudit`,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('批量审核')
     }
   })
@@ -54,7 +54,7 @@ export const sparePartsAuditVerify = (params) => {
     url: `/spareParts/auditVerify`,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('审核校验')
     }
   })
@@ -66,7 +66,7 @@ export const sparePartsAuditFail = (params) => {
     data: params,
     method: 'post',
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导出审核错误项')
     }
   })
@@ -78,7 +78,7 @@ export const sparePartsDelete = (params) => {
     url: `/spareParts/delete/${params.sn}`,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('删除')
     }
   })
@@ -90,7 +90,7 @@ export const sparePartsDeleteDetail = (params) => {
     url: `/spareParts/deleteDetail/${params.sn}`,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('删除')
     }
   })
@@ -105,7 +105,7 @@ export const sparePartsDetailList = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('明细列表查询')
     }
   })
@@ -119,6 +119,17 @@ export const sparePartsPageCount = (params) => {
     method: 'post'
   })
 }
+//  散件入库 明细列表  基础信息
+export const queryDetailCount = (params) => {
+  const url = `/spareParts/queryBySn/${params.sn}`
+  return axios({
+    url: url,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('基础信息')
+    }
+  })
+}
 
 // 新增散件入库单
 export const sparePartsSave = (params) => {
@@ -126,8 +137,8 @@ export const sparePartsSave = (params) => {
     url: `/spareParts/save`,
     data: params,
     method: 'post',
-    headers:{
-      'module': encodeURIComponent(params.id?'编辑':'新增')
+    headers: {
+      'module': encodeURIComponent(params.id ? '编辑' : '新增')
     }
   })
 }
@@ -138,8 +149,8 @@ export const sparePartsSaveDetail = (params) => {
     url: `/spareParts/saveDetail`,
     data: params,
     method: 'post',
-    headers:{
-      'module': encodeURIComponent(params.id?'编辑':'新增产品')
+    headers: {
+      'module': encodeURIComponent(params.id ? '编辑' : '新增产品')
     }
   })
 }
@@ -173,7 +184,7 @@ export const sparePartsDetailBatchInsert = params => {
     url: '/spareParts/detail/batchInsert',
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导入')
     }
   })
@@ -186,7 +197,7 @@ export const sparePartsDetailFailExcel = (params) => {
     method: 'post',
     data: params.list,
     responseType: 'blob',
-    headers:{
+    headers: {
       'module': encodeURIComponent('导出错误项')
     }
   })
@@ -201,7 +212,7 @@ export const queryDetailStockPage = (params) => {
     url: url,
     data: params,
     method: 'post',
-    headers:{
+    headers: {
       'module': encodeURIComponent('明细列表查询')
     }
   })

+ 1 - 1
src/components/Select/index.js

@@ -28,7 +28,7 @@ export default {
     },
     isEnable: { // 是否只获取已启用的数据
       type: Boolean,
-      default: false
+      default: true
     },
     notIn: {
       type: Array,

+ 6 - 4
src/components/UploadFile/index.vue

@@ -179,10 +179,12 @@ export default {
         }
         this.previewVisible = true
       } else {
-        const src = file.response.data
-        if (!Array.isArray(src)) {
-          this.previewImage = file.url || file.thumbUrl
-          this.previewVisible = true
+        if (file.response && file.response.status && file.response.status == 200) {
+          var src = file.response.data
+          if (Array.isArray(src)) {
+            src = file.response.data[0].filePath
+          }
+          window.location.href = src.replace('http:', 'https:')
         }
       }
     },

+ 11 - 9
src/components/index.less

@@ -51,7 +51,7 @@
   }
 }
 .ant-btn-primary.button-primary[disabled],.ant-btn-primary.button-info[disabled],.ant-btn-primary.button-warning[disabled],.ant-btn-primary.button-geekblue[disabled],.ant-btn-primary.button-purple[disabled]{
-   color: rgba(255, 255, 255, 0.5);
+   color: rgba(255, 255, 255, 0.6);
  }
 .ant-btn-primary.button-success {
   background-color: #11b116;
@@ -278,11 +278,12 @@
       user-select: auto !important;
     }
   }
-  input:disabled{
-    opacity: 1!important;
-    color: #fff!important;
-    -webkit-text-fill-color: #fff!important;
-  }
+  
+  // input:disabled{
+  //   opacity: 1!important;
+  //   color: #fff!important;
+  //   -webkit-text-fill-color: #fff!important;
+  // }
   .ant-table-row{
     td{
       > div:not(.ant-table-row-expand-icon):empty::after{
@@ -343,11 +344,12 @@
 .ant-alert-message, .ant-card-head{
   color: #000000!important;
 }
-.ant-select-disabled .ant-select-selection,.ant-cascader-picker-disabled{
-  color: #999!important;
+.ant-input-disabled, .ant-input-number-disabled, .ant-input-number input[readonly], .ant-input[disabled], .ant-select-disabled .ant-select-selection,.ant-cascader-picker-disabled{
+  background-color: #f8f8f8 !important;
+    color: #333 !important;
+    cursor: not-allowed;
 }
 
-
 //头部样式
 .header-bar{
   margin:6px auto;

+ 5 - 2
src/components/newThem.less

@@ -1,13 +1,16 @@
+// The prefix to use on all css classes from ant-pro.
+@ant-pro-prefix: ant-pro;
 @font-size-base: 12px;
 @table-row-hover-bg: color(~`colorPalette('@{primary-color}', 0.5) `);
 @text-color: fade(@black, 100%);
-@disabled-bg: #fafafa;
+@disabled-bg: #DEDEDE;
 @modal-body-padding: 15px;
 @menu-item-height: 30px;
 @collapse-header-padding: 6px 8px;
 @table-padding-vertical: 5px;
 @table-padding-horizontal: 5px;
-@input-disabled-bg: #fdfdfd;
+@border-color-base: #dedede;
+@border-color-split: #dedede;
 
 // vue-easytable new style
 @ve-default-font-size: 12px;

+ 58 - 0
src/config/router.config.js

@@ -862,6 +862,42 @@ export const asyncRouterMap = [
           permission: 'M_purchasingManagement'
         },
         children: [
+          {
+            path: '/purchasingManagement/purchaseReceipt',
+            redirect: '/purchasingManagement/purchaseReceipt/list',
+            name: 'purchaseReceipt',
+            component: BlankLayout,
+            meta: {
+              title: '采购入库',
+              icon: 'gold',
+              permission: 'M_purchaseReceipt'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'purchaseReceiptList',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReceipt/list.vue'),
+                meta: {
+                  title: '采购入库列表',
+                  icon: 'gold',
+                  hidden: true,
+                  permission: 'M_purchaseReceiptList'
+                }
+              },
+              {
+                path: 'edit',
+                name: 'purchaseReceiptEdit',
+                component: () => import(/* webpackChunkName: "purchasingManagement" */ '@/views/purchasingManagement/purchaseReceipt/edit.vue'),
+                meta: {
+                  title: '编辑采购入库单',
+                  icon: 'gold',
+                  hidden: true
+                  // permission: 'B_purchaseReceiptEdit'
+                }
+              }
+            ]
+          },
           {
             path: '/purchasingManagement/bulkWarehousingOrder',
             redirect: '/purchasingManagement/bulkWarehousingOrder/list',
@@ -3454,6 +3490,28 @@ export const asyncRouterMap = [
                   hidden: true,
                   permission: 'M_promotionManagementList'
                 }
+              },
+              {
+                path: 'add/:sn/:pageType',
+                name: 'promotionManagementAdd',
+                component: () => import(/* webpackChunkName: "promotionRulesManagement" */ '@/views/promotionRulesManagement/promotionManagement/edit.vue'),
+                meta: {
+                  title: '新增修理厂促销',
+                  icon: 'file-ppt',
+                  hidden: true,
+                  permission: 'B_promotionManagementAdd'
+                }
+              },
+              {
+                path: 'edit/:sn/:pageType',
+                name: 'promotionManagementEdit',
+                component: () => import(/* webpackChunkName: "promotionRulesManagement" */ '@/views/promotionRulesManagement/promotionManagement/edit.vue'),
+                meta: {
+                  title: '编辑修理厂促销',
+                  icon: 'file-ppt',
+                  hidden: true,
+                  permission: 'B_promotionManagementEdit'
+                }
               }
             ]
           },

+ 41 - 28
src/store/modules/app.js

@@ -36,7 +36,7 @@ const app = {
     employeeList: [], // 申请人列表
     defectiveReturnReason: [], // 不良品申请退货列表
     goodReturnReason: [], // 良品申请退货列表
-    bookReason:[], // 收款事由
+    bookReason: [], // 收款事由
     tempBillOfData: null, // 临时存储收货单数据
     authMenusList: [], // 权限菜单数据
     priceAuthOptions: [], // 价格权限选项
@@ -48,11 +48,11 @@ const app = {
     warehouseAuthList: null, // 有权限的仓库列表
     warehouseAllList: null, // 无权限所有仓库列表
     defWarehouse: null, // 默认仓库
-    isWarehouse: false,// 仓库管理权限
-    isShowCustomerSearch:false ,//客服查询权限
+    isWarehouse: false, // 仓库管理权限
+    isShowCustomerSearch: false, // 客服查询权限
     interFaceList: [
       // 销售单,下推
-     {
+      {
         a: 'sales/findBySn',
         b: [
           'sales/submit',
@@ -78,7 +78,7 @@ const app = {
           'sales/detail/pushOfBatch',
           'dispatch/detail/deleteBatch',
           'dispatch/detail/updateQty'
-          ],
+        ],
         timeStr: ''
       },
       // 销售退货
@@ -109,18 +109,19 @@ const app = {
           'salesReturn/detail/insertByReceive',
           'salesReturn/detail/insertByCustomerService',
           'salesReturn/detail/updateAllReason'
-          ],
+        ],
         timeStr: ''
       },
       // 散件入库
       {
-        a: 'spareParts/queryDetailPageCount',
+        a: 'spareParts/queryBySn',
         b: [
           'spareParts/saveDetail',
           'spareParts/deleteDetail',
           'spareParts/detail/parseProducts',
-          'spareParts/detail/batchInsert'
-          ],
+          'spareParts/detail/batchInsert',
+          'spareParts/queryDetailPageCount'
+        ],
         timeStr: ''
       },
       // 采购退货
@@ -131,11 +132,23 @@ const app = {
           'sparePartsReturn/detail/delete',
           'sparePartsReturn/detail/save',
           'sparePartsReturn/detail/saveBatch'
-          ],
+        ],
+        timeStr: ''
+      },
+      // 采购入库
+      {
+        a: 'purchase/queryBySn',
+        b: [
+          'purchase/saveDetail',
+          'purchase/deleteDetail',
+          'purchase/detail/batchInsert',
+          'purchase/setSupplierInfo',
+          'purchase/submit'
+        ],
         timeStr: ''
       },
       // 调拨
-     {
+      {
         a: 'allocateBill/findBySn',
         b: [
           'allocateBill/submit',
@@ -147,10 +160,10 @@ const app = {
           'allocateBill/detail/parseProducts',
           'allocateBill/detail/batchInsert',
           ''
-          ],
+        ],
         timeStr: ''
       },
-      //调拨退货
+      // 调拨退货
       {
         a: 'allocateReturn/queryBySn',
         b: [
@@ -161,7 +174,7 @@ const app = {
           'allocReturnDetail/insert',
           'allocReturnDetail/insertBatch',
           'allocReturnDetail/update'
-          ],
+        ],
         timeStr: ''
       },
       // 发货单
@@ -171,7 +184,7 @@ const app = {
           'sendBill/update',
           'sendBill/updateIssueRemark',
           'sendBill/updateTransportInfo'
-          ],
+        ],
         timeStr: ''
       },
       // 提货单
@@ -242,7 +255,7 @@ const app = {
     SET_employeeList: (state, val) => {
       state.employeeList = val
     },
-    SET_returnReason:(state, obj) => {
+    SET_returnReason: (state, obj) => {
       state[obj.key] = obj.val
     },
     SET_showPdfPrint: (state, val) => {
@@ -304,18 +317,18 @@ const app = {
         }
       })
     },
-    getLookUpDataByCode({ commit }, params) {
-        getLookUpData({
-          pageNo: 1,
-          pageSize: 1000,
-          lookupCode: params.code,
-          isEnable: params.isEnable
-        }).then(res => {
-          if (res.status == 200) {
-            commit('SET_returnReason', {key: params.key, val: res.data.list})
-          }
-        })
-    },
+    getLookUpDataByCode ({ commit }, params) {
+      getLookUpData({
+        pageNo: 1,
+        pageSize: 1000,
+        lookupCode: params.code,
+        isEnable: params.isEnable
+      }).then(res => {
+        if (res.status == 200) {
+          commit('SET_returnReason', { key: params.key, val: res.data.list })
+        }
+      })
+    }
   }
 }
 

+ 2 - 3
src/views/allocationManagement/allocateReturnConfirmation/detailModal.vue

@@ -16,6 +16,7 @@
 </template>
 
 <script>
+// 组件
 import detail from '@/views/allocationManagement/transferReturn/detail'
 export default {
   name: 'AllocateReturnDetailModal',
@@ -35,8 +36,6 @@ export default {
       isShow: this.openModal //  是否打开弹框
     }
   },
-  methods: {
-  },
   watch: {
     //  父页面传过来的弹框状态
     openModal (newValue, oldValue) {
@@ -47,7 +46,7 @@ export default {
       if (!newValue) {
         this.$emit('close')
         this.$store.state.app.curActionPermission = ''
-      }else{
+      } else {
         this.$store.state.app.curActionPermission = 'M_allocateReturnConfirmationDetail'
       }
     }

+ 332 - 304
src/views/allocationManagement/allocateReturnConfirmation/list.vue

@@ -3,50 +3,72 @@
     <a-card size="small" :bordered="false" class="searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper" >
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="transferReturnConfirmation-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" @change="dateChange" />
+                <rangeDate id="transferReturnConfirmation-rangeDate" ref="rangeDate" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="调拨退货单号">
-                <a-input id="transferReturnConfirmation-allocateReturnNo" v-model.trim="queryParam.allocateReturnNo"
-                  allowClear placeholder="请输入调拨退货单号" />
+                <a-input
+                  id="transferReturnConfirmation-allocateReturnNo"
+                  v-model.trim="queryParam.allocateReturnNo"
+                  allowClear
+                  placeholder="请输入调拨退货单号" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="客户名称" :label-col="{ span:7 }" :wrapper-col="{ span:17}">
-                <a-input id="transferReturnConfirmation-targetName" v-model.trim="queryParam.targetName" allowClear
+                <a-input
+                  id="transferReturnConfirmation-targetName"
+                  v-model.trim="queryParam.targetName"
+                  allowClear
                   placeholder="请输入客户名称" />
               </a-form-item>
             </a-col>
             <template v-if="advanced">
               <a-col :md="6" :sm="24">
                 <a-form-item label="是否抓单">
-                  <v-select v-model="queryParam.grabFlag" ref="grabFlag" id="transferReturnConfirmation-grabFlag"
-                    code="FLAG" placeholder="请选择" allowClear></v-select>
+                  <v-select
+                    v-model="queryParam.grabFlag"
+                    ref="grabFlag"
+                    id="transferReturnConfirmation-grabFlag"
+                    code="FLAG"
+                    placeholder="请选择"
+                    allowClear></v-select>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="状态">
-                  <v-select v-model="queryParam.state" ref="state" id="transferReturnConfirmation-state"
-                    code="ALLOCATE_RETURN_STATE_CONFIRM" placeholder="请选择状态" allowClear></v-select>
+                  <v-select
+                    v-model="queryParam.state"
+                    ref="state"
+                    id="transferReturnConfirmation-state"
+                    code="ALLOCATE_RETURN_STATE_CONFIRM"
+                    placeholder="请选择状态"
+                    allowClear></v-select>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="仓库">
-                  <chooseWarehouse ref="warehouse" v-model="queryParam.warehouseSn"></chooseWarehouse>
+                  <chooseWarehouse ref="warehouse" id="transferReturnConfirmation-warehouse" v-model="queryParam.warehouseSn"></chooseWarehouse>
                 </a-form-model-item>
               </a-col>
             </template>
             <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled"
+              <a-button
+                type="primary"
+                @click="$refs.table.refresh(true)"
+                :disabled="disabled"
                 id="transferReturnConfirmation-refresh">查询</a-button>
-              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled"
+              <a-button
+                style="margin-left: 5px"
+                @click="resetSearchForm"
+                :disabled="disabled"
                 id="transferReturnConfirmation-reset">重置</a-button>
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+              <a @click="advanced=!advanced" style="margin-left: 5px" id="transferReturnConfirmation-advanced">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'" />
               </a>
@@ -58,28 +80,36 @@
     <a-card size="small" :bordered="false">
       <a-spin :spinning="spinning" tip="Loading...">
         <!-- 列表 -->
-        <s-table 
-        class="sTable fixPagination" 
-        ref="table" 
-        :style="{ height: tableHeight+70+'px' }" 
-        size="small"
-        :rowKey="(record) => record.id" 
-        :columns="columns" 
-        :pageSize="30"
-        :data="loadData" :scroll="{ y: tableHeight }"
-        :defaultLoadData="false" bordered>
+        <s-table
+          class="sTable fixPagination"
+          ref="table"
+          :style="{ height: tableHeight+70+'px' }"
+          size="small"
+          :rowKey="(record) => record.id"
+          :columns="columns"
+          :pageSize="30"
+          :data="loadData"
+          :scroll="{ y: tableHeight }"
+          :defaultLoadData="false"
+          bordered>
           <!-- 销退单号 -->
           <template slot="allocateReturnNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('M_allocateReturnConfirmationDetail')" class="link-bule"
+            <span
+              v-if="$hasPermissions('M_allocateReturnConfirmationDetail')"
+              class="link-bule"
+              :id="'transferReturnConfirmation-allocateReturnNo-'+record.id"
               @click="handleDetail(record)">{{ record.allocateReturnNo }}</span>
             <span v-else>{{ record.allocateReturnNo }}</span>
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
-            <a-button size="small" type="link"
+            <a-button
+              size="small"
+              type="link"
               v-if="record.state=='WAIT_FINANCIAL_AUDIT' && $hasPermissions('B_allocateReturnConfirmationAudit')"
-              class="button-warning" @click="handleAudit(record)"
-              id="transferReturnConfirmation-audit-btn">退货确认</a-button>
+              class="button-warning"
+              @click="handleAudit(record)"
+              :id="'transferReturnConfirmation-submit-'+record.id">退货确认</a-button>
             <span v-else>--</span>
           </template>
         </s-table>
@@ -91,304 +121,302 @@
 </template>
 
 <script>
-  import {
-    commonMixin
-  } from '@/utils/mixin'
-  import rangeDate from '@/views/common/rangeDate.vue'
-  import {
-    STable,
-    VSelect
-  } from '@/components'
-  import AllocateReturnDetailModal from './detailModal.vue'
-  import chooseWarehouse from '@/views/common/chooseWarehouse'
-  import {
-    allocateReturnQueryConfirmPage,
-    allocateReturnFinanceAudit
-  } from '@/api/allocateReturn'
-  export default {
-    name: 'AllocateReturnConfirmationList',
-    mixins: [commonMixin],
-    components: {
-      STable,
-      VSelect,
-      AllocateReturnDetailModal,
-      rangeDate,
-      chooseWarehouse
-    },
-    data() {
-      return {
-        spinning: false,
-        tableHeight: 0,
-        queryParam: { //  查询条件
-          beginDate: '',
-          endDate: '',
-          allocateReturnNo: '', //  单号
-          targetName: '',
-          grabFlag: undefined,
-          state: undefined, //  状态
-          warehouseSn: undefined
-        },
-        disabled: false, //  查询、重置按钮是否可操作
-        advanced: true,
-        // 加载数据方法 必须为 Promise 对象
-        loadData: parameter => {
-          this.disabled = true
-          this.spinning = true
-          return allocateReturnQueryConfirmPage(Object.assign(parameter, this.queryParam)).then(res => {
-            let data
-            if (res.status == 200) {
-              data = res.data
-              const no = (data.pageNo - 1) * data.pageSize
-              for (var i = 0; i < data.list.length; i++) {
-                data.list[i].no = no + i + 1
-              }
-              this.disabled = false
-            }
-            this.spinning = false
-            return data
-          })
-        },
-        openModal: false,
-        itemSn: ''
-      }
-    },
-    // 根据权限显示列表字段
-    computed: {
-      columns() {
-        const arr = [{
-            title: '序号',
-            dataIndex: 'no',
-            width: '4%',
-            align: 'center'
-          },
-          {
-            title: '创建时间',
-            dataIndex: 'createDate',
-            width: '11%',
-            align: 'center',
-            customRender: function(text) {
-              return text || '--'
-            }
-          },
-          {
-            title: '退货单号',
-            scopedSlots: {
-              customRender: 'allocateReturnNo'
-            },
-            width: '16%',
-            align: 'center'
-          },
-          {
-            title: '调拨退货客户',
-            dataIndex: 'targetName',
-            align: 'center',
-            width: '15%',
-            customRender: function(text) {
-              return text || '--'
-            },
-            ellipsis: true
-          },
-          {
-            title: '仓库',
-            dataIndex: 'warehouseName',
-            align: 'center',
-            width: '15%',
-            customRender: function(text) {
-              return text || '--'
-            },
-            ellipsis: true
-          },
-          {
-            title: '是否抓单',
-            dataIndex: 'grabFlagDictValue',
-            width: '7%',
-            align: 'center',
-            customRender: function(text) {
-              return text || '--'
-            }
-          },
-          {
-            title: '退货总数量',
-            dataIndex: 'totalQty',
-            width: '7%',
-            align: 'center',
-            customRender: function(text) {
-              return ((text || text == 0) ? text : '--')
-            }
-          },
-          {
-            title: '坏件数量',
-            dataIndex: 'totalBadQty',
-            width: '7%',
-            align: 'center',
-            customRender: function(text) {
-              return ((text || text == 0) ? text : '--')
-            }
-          },
-          {
-            title: '返库数量',
-            dataIndex: 'totalBackStockQty',
-            width: '7%',
-            align: 'center',
-            customRender: function(text) {
-              return ((text || text == 0) ? text : '--')
-            }
-          },
-          // { title: '退货总金额', dataIndex: 'totalPrice', width: '7%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
-          {
-            title: '确认时间',
-            dataIndex: 'financeAuditTime',
-            width: '11%',
-            align: 'center',
-            customRender: function(text) {
-              return text || '--'
-            }
-          },
-          {
-            title: '状态',
-            dataIndex: 'stateDictValue',
-            width: '6%',
-            align: 'center',
-            customRender: function(text) {
-              return text || '--'
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import rangeDate from '@/views/common/rangeDate.vue'
+import { STable, VSelect } from '@/components'
+import AllocateReturnDetailModal from './detailModal.vue'
+import chooseWarehouse from '@/views/common/chooseWarehouse'
+// 接口
+import { allocateReturnQueryConfirmPage, allocateReturnFinanceAudit } from '@/api/allocateReturn'
+export default {
+  name: 'AllocateReturnConfirmationList',
+  mixins: [commonMixin],
+  components: { STable, VSelect, AllocateReturnDetailModal, rangeDate, chooseWarehouse },
+  data () {
+    return {
+      spinning: false,
+      tableHeight: 0, // 表格高度
+      //  查询条件
+      queryParam: {
+        beginDate: '', // 创建开始时间
+        endDate: '', // 创建结束时间
+        allocateReturnNo: '', //  单号
+        targetName: '', // 调拨退货客户
+        grabFlag: undefined, // 是否抓单
+        state: undefined, //  状态
+        warehouseSn: undefined// 出库仓库
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      advanced: true, // 展开关闭
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        // 获取列表数据  有分页
+        return allocateReturnQueryConfirmPage(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            // 计算表格序号
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
             }
-          },
-          {
-            title: '操作',
-            scopedSlots: {
-              customRender: 'action'
-            },
-            width: '8%',
-            align: 'center'
+            this.disabled = false
           }
-        ]
-        if (this.$hasPermissions('M_allocateReturnConfirmationList_salesPrice')) { //  售价权限
-          arr.splice(9, 0, {
-            title: '退货总金额',
-            dataIndex: 'totalPrice',
-            width: '7%',
-            align: 'right',
-            customRender: text => ((text || text == 0) ? this.toThousands(text) : '--')
-          })
+          this.spinning = false
+          return data
+        })
+      },
+      openModal: false, // 打开详情弹窗
+      itemSn: ''// 当前行sn
+    }
+  },
+  // 根据权限显示列表字段
+  computed: {
+    // 表头
+    columns () {
+      const arr = [{
+        title: '序号',
+        dataIndex: 'no',
+        width: '4%',
+        align: 'center'
+      },
+      {
+        title: '创建时间',
+        dataIndex: 'createDate',
+        width: '11%',
+        align: 'center',
+        customRender: function (text) {
+          return text || '--'
         }
-        return arr
-      }
-    },
-    methods: {
-      //  创建时间  change
-      dateChange(date) {
-        this.queryParam.beginDate = date[0]
-        this.queryParam.endDate = date[1]
       },
-      custChange(val) {
-        this.queryParam.buyerSn = val.key
+      {
+        title: '退货单号',
+        scopedSlots: {
+          customRender: 'allocateReturnNo'
+        },
+        width: '16%',
+        align: 'center'
       },
-      //  重置
-      resetSearchForm() {
-        this.$refs.rangeDate.resetDate()
-        this.queryParam.beginDate = ''
-        this.queryParam.endDate = ''
-        this.queryParam.allocateReturnNo = ''
-        this.queryParam.targetName = ''
-        this.queryParam.grabFlag = undefined
-        this.queryParam.state = undefined
-        this.queryParam.warehouseSn = undefined
-        this.$refs.table.refresh(true)
+      {
+        title: '调拨退货客户',
+        dataIndex: 'targetName',
+        align: 'center',
+        width: '15%',
+        customRender: function (text) {
+          return text || '--'
+        },
+        ellipsis: true
       },
-      // 详情
-      handleDetail(row) {
-        this.itemSn = row.allocateReturnSn
-        this.openModal = true
+      {
+        title: '仓库',
+        dataIndex: 'warehouseName',
+        align: 'center',
+        width: '15%',
+        customRender: function (text) {
+          return text || '--'
+        },
+        ellipsis: true
       },
-      closeModal() {
-        this.itemSn = ''
-        this.openModal = false
+      {
+        title: '是否抓单',
+        dataIndex: 'grabFlagDictValue',
+        width: '7%',
+        align: 'center',
+        customRender: function (text) {
+          return text || '--'
+        }
       },
-      // 退货确认
-      handleAudit(row) {
-        const _this = this
-        this.$confirm({
-          title: '提示',
-          content: '请点击下方按钮确认操作',
-          centered: true,
-          closable: true,
-          okText: '通过',
-          cancelText: '不通过',
-          onOk() {
-            _this.auditOrder(row.allocateReturnSn, 'FINISH')
-          },
-          onCancel(e) {
-            if (!e.triggerCancel) {
-              _this.auditOrder(row.allocateReturnSn, 'FINANCIAL_REJECT')
-            }
-            _this.$destroyAll()
-          }
-        })
+      {
+        title: '退货总数量',
+        dataIndex: 'totalQty',
+        width: '7%',
+        align: 'center',
+        customRender: function (text) {
+          return ((text || text == 0) ? text : '--')
+        }
       },
-      auditOrder(sn, flag) {
-        const _this = this
-        _this.spinning = true
-        allocateReturnFinanceAudit({
-          allocateReturnSn: sn,
-          state: flag
-        }).then(res => {
-          if (res.status == 200) {
-            _this.$message.success(res.message)
-            _this.$refs.table.refresh()
-            _this.spinning = false
-          } else {
-            _this.spinning = false
-          }
-        })
+      {
+        title: '坏件数量',
+        dataIndex: 'totalBadQty',
+        width: '7%',
+        align: 'center',
+        customRender: function (text) {
+          return ((text || text == 0) ? text : '--')
+        }
       },
-      pageInit() {
-        const _this = this
-        this.$nextTick(() => { // 页面渲染完成后的回调
-          _this.setTableH()
-        })
+      {
+        title: '返库数量',
+        dataIndex: 'totalBackStockQty',
+        width: '7%',
+        align: 'center',
+        customRender: function (text) {
+          return ((text || text == 0) ? text : '--')
+        }
+      },
+      // { title: '退货总金额', dataIndex: 'totalPrice', width: '7%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+      {
+        title: '确认时间',
+        dataIndex: 'financeAuditTime',
+        width: '11%',
+        align: 'center',
+        customRender: function (text) {
+          return text || '--'
+        }
+      },
+      {
+        title: '状态',
+        dataIndex: 'stateDictValue',
+        width: '6%',
+        align: 'center',
+        customRender: function (text) {
+          return text || '--'
+        }
       },
-      setTableH() {
-        const tableSearchH = this.$refs.tableSearch.offsetHeight
-        this.tableHeight = window.innerHeight - tableSearchH - 200
+      {
+        title: '操作',
+        scopedSlots: {
+          customRender: 'action'
+        },
+        width: '8%',
+        align: 'center'
       }
-    },
-    watch: {
-      advanced(newValue, oldValue) {
-        const _this = this
-        this.$nextTick(() => { // 页面渲染完成后的回调
-          _this.setTableH()
+      ]
+      if (this.$hasPermissions('M_allocateReturnConfirmationList_salesPrice')) { //  售价权限
+        arr.splice(9, 0, {
+          title: '退货总金额',
+          dataIndex: 'totalPrice',
+          width: '7%',
+          align: 'right',
+          customRender: text => ((text || text == 0) ? this.toThousands(text) : '--')
         })
-      },
-      '$store.state.app.winHeight'(newValue, oldValue) { //  窗口变更时,需同时更改表格高度
-        this.setTableH()
       }
+      return arr
+    }
+  },
+  methods: {
+    //  创建时间  change
+    dateChange (date) {
+      this.queryParam.beginDate = date[0]
+      this.queryParam.endDate = date[1]
     },
-    mounted() {
-      if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
-        this.pageInit()
-        this.resetSearchForm()
-      }
+    // 退货客户
+    custChange (val) {
+      this.queryParam.buyerSn = val.key
     },
-    activated() {
-      // 如果是新页签打开,则重置当前页面
-      if (this.$store.state.app.isNewTab) {
-        this.pageInit()
-        this.resetSearchForm()
-      }
-      // 仅刷新列表,不重置页面
-      if (this.$store.state.app.updateList) {
-        this.pageInit()
-        this.$refs.table.refresh()
-      }
+    //  重置
+    resetSearchForm () {
+      this.$refs.rangeDate.resetDate()
+      this.queryParam.beginDate = ''
+      this.queryParam.endDate = ''
+      this.queryParam.allocateReturnNo = ''
+      this.queryParam.targetName = ''
+      this.queryParam.grabFlag = undefined
+      this.queryParam.state = undefined
+      this.queryParam.warehouseSn = undefined
+      this.$refs.table.refresh(true)
     },
-    beforeRouteEnter(to, from, next) {
-      next(vm => {})
+    // 详情
+    handleDetail (row) {
+      this.itemSn = row.allocateReturnSn
+      this.openModal = true
+    },
+    // 关闭详情弹窗
+    closeModal () {
+      this.itemSn = ''
+      this.openModal = false
+    },
+    // 退货确认
+    handleAudit (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '请点击下方按钮确认操作',
+        centered: true,
+        closable: true,
+        okText: '通过',
+        cancelText: '不通过',
+        onOk () {
+          _this.auditOrder(row.allocateReturnSn, 'FINISH')
+        },
+        onCancel (e) {
+          if (!e.triggerCancel) {
+            _this.auditOrder(row.allocateReturnSn, 'FINANCIAL_REJECT')
+          }
+          _this.$destroyAll()
+        }
+      })
+    },
+    // 退货确认成功
+    auditOrder (sn, flag) {
+      const _this = this
+      _this.spinning = true
+      allocateReturnFinanceAudit({
+        allocateReturnSn: sn,
+        state: flag
+      }).then(res => {
+        if (res.status == 200) {
+          _this.$message.success(res.message)
+          _this.$refs.table.refresh()
+          _this.spinning = false
+        } else {
+          _this.spinning = false
+        }
+      })
+    },
+    // 初始化
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    },
+    // 计算表格高度
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 200
+    }
+  },
+  watch: {
+    // 展开关闭 监听表格高度变化
+    advanced (newValue, oldValue) {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    },
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+      this.resetSearchForm()
     }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+      this.resetSearchForm()
+    }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
   }
+}
 </script>
 
 <style lang="less">
   .transferReturnConfirmation-wrap {
-     
+
   }
-</style>
+</style>

+ 43 - 53
src/views/allocationManagement/allocationList/list.vue

@@ -4,7 +4,7 @@
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
         <a-form-model
-          id="allocateBillList-form"
+          id="allocationList-form"
           ref="ruleForm"
           class="form-model-con"
           layout="inline"
@@ -14,13 +14,13 @@
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-model-item label="创建时间" prop="time">
-                <rangeDate ref="rangeDate" :value="queryParam.time" @change="dateChange" />
+                <rangeDate id="allocationList-rangeDate" ref="rangeDate" :value="queryParam.time" @change="dateChange" />
               </a-form-model-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-model-item label="调往对象">
                 <a-input
-                  id="allocateBillList-targetName"
+                  id="allocationList-targetName"
                   v-model.trim="queryParam.targetName"
                   allowClear
                   placeholder="请输入调往对象" />
@@ -29,7 +29,7 @@
             <a-col :md="6" :sm="24">
               <a-form-model-item label="费用/调拨类型">
                 <AllocateType
-                  id="allocateBillList-costTypeName"
+                  id="allocationList-allocateTypeVal"
                   v-model="allocateTypeVal"
                   :changeOnSelect="true"
                   placeholder="请选择费用/调拨类型"
@@ -39,7 +39,7 @@
             <template v-if="advanced">
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="收货客户名称">
-                  <dealerSearchList ref="receiverSn" @change="custChange" />
+                  <dealerSearchList id="allocationList-receiverSn" ref="receiverSn" @change="custChange" />
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -47,7 +47,7 @@
                   <v-select
                     v-model="queryParam.state"
                     ref="state"
-                    id="allocateBillList-state"
+                    id="allocationList-state"
                     code="ALLOCATE_STATUS2"
                     placeholder="请选择业务状态"
                     allowClear></v-select>
@@ -56,7 +56,7 @@
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="调拨单号">
                   <a-input
-                    id="allocateBillList-allocateNo"
+                    id="allocationList-allocateNo"
                     v-model.trim="queryParam.allocateNo"
                     allowClear
                     placeholder="请输入调拨单号" />
@@ -64,7 +64,7 @@
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="调出仓库">
-                  <warehouse v-model="queryParam.warehouseSn" id="allocateBillList-warehouseSn" placeholder="请选择调出仓库" />
+                  <warehouse v-model="queryParam.warehouseSn" id="allocationList-warehouseSn" placeholder="请选择调出仓库" />
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -72,7 +72,7 @@
                   <v-select
                     v-model="queryParam.printState"
                     ref="printState"
-                    id="allocateBillList-printState"
+                    id="allocationList-printState"
                     code="PRINT_STATUS"
                     placeholder="请选择打印状态"
                     allowClear></v-select>
@@ -83,7 +83,7 @@
                   <v-select
                     v-model="queryParam.checkStatus"
                     ref="checkStatus"
-                    id="allocateBillList-checkStatus"
+                    id="allocationList-checkStatus"
                     code="CHECK_STATUS"
                     placeholder="请选择对单状态"
                     allowClear></v-select>
@@ -95,13 +95,13 @@
                 type="primary"
                 @click="handleSearch"
                 :disabled="disabled"
-                id="allocateBillList-refresh">查询</a-button>
+                id="allocationList-refresh">查询</a-button>
               <a-button
                 style="margin-left: 5px"
                 @click="resetSearchForm"
                 :disabled="disabled"
-                id="allocateBillList-reset">重置</a-button>
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+                id="allocationList-reset">重置</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 5px" id="allocationList-advanced">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'" />
               </a>
@@ -132,13 +132,14 @@
           </template>
           <!-- 调拨单号 -->
           <template slot="allocateNo" slot-scope="text, record">
-            <span class="link-bule" @click="handleDetail(record,2)">{{ record.allocateNo }}</span>
+            <span class="link-bule" :id="'allocationList-allocateNo-'+record.id" @click="handleDetail(record,2)">{{ record.allocateNo }}</span>
           </template>
           <!-- 发货单号  -->
           <template slot="sendBillNo" slot-scope="text, record">
             <span
               v-if="record.sendBill&&record.sendBill.sendBillNo"
               class="link-bule"
+              :id="'allocationList-sendBillNo-'+record.id"
               @click="handleDetail(record,1)">{{ record.sendBill.sendBillNo }}</span>
             <span v-else>--</span>
           </template>
@@ -169,84 +170,69 @@
 </template>
 
 <script>
-import {
-  commonMixin
-} from '@/utils/mixin'
+import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
 import getDate from '@/libs/getDate.js'
+// 组件
 import rangeDate from '@/views/common/rangeDate.vue'
-import {
-  STable,
-  VSelect
-} from '@/components'
+import { STable, VSelect } from '@/components'
 import commonModal from '@/views/common/commonModal.vue'
 import detailModal from '@/views/salesManagement/sendOutOrder/detailModal.vue'
 import AllocateType from '@/views/common/allocateType.js'
 import dealerSearchList from '@/views/common/dealerSearchList.vue'
 import warehouse from '@/views/common/chooseWarehouse.js'
-import {
-  queryOverviewPage
-} from '@/api/allocateBill'
 import allocationDetailModal from '@/views/allocationManagement/transferOut/detail.vue'
+// 接口
+import { queryOverviewPage } from '@/api/allocateBill'
 export default {
-  name: 'PushOrderManagementList',
+  name: 'AllocationList',
   mixins: [commonMixin],
-  components: {
-    STable,
-    VSelect,
-    allocationDetailModal,
-    AllocateType,
-    warehouse,
-    dealerSearchList,
-    rangeDate,
-    commonModal,
-    detailModal
-  },
+  components: { STable, VSelect, allocationDetailModal, AllocateType, warehouse, dealerSearchList, rangeDate, commonModal, detailModal },
   data () {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
       disabled: false, //  查询、重置按钮是否可操作
-      showDetailModal: false,
-      showTipModal: false,
-      bizSn: null,
-      tableHeight: 0,
-      allocateTypeVal: [],
+      showDetailModal: false, // 调拨单详情弹窗
+      showTipModal: false, // 发货单详情弹窗
+      bizSn: null, // 调拨单sn
+      tableHeight: 0, // 表格高度
+      allocateTypeVal: [], // 调拨类型
 
       // 查询参数
-      queryParam: { //  查询条件
+      queryParam: {
+        // 创建时间默认值
         time: [
           moment(getDate.getThreeMonthDays().starttime, 'YYYY-MM-DD'),
           moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')
         ],
-        beginDate: getDate.getThreeMonthDays().starttime,
-        endDate: getDate.getCurrMonthDays().endtime,
+        beginDate: getDate.getThreeMonthDays().starttime, // 创建开始时间
+        endDate: getDate.getCurrMonthDays().endtime, // 创建结束时间
         targetName: '', //  调往对象
         costTypeSn: undefined, // 费用类型
         allocateSortSn: undefined, //  调拨类型1
         allocateTypeSn: undefined, //  调拨类型2
         state: undefined, //  业务状态
         allocateNo: '', //  调拨单号
-        receiverSn: undefined,
-        checkStatus: undefined,
-        printState: undefined,
-        warehouseSn: undefined
+        receiverSn: undefined, // 收货客户sn
+        checkStatus: undefined, // 对单状态
+        printState: undefined, // 打印状态
+        warehouseSn: undefined// 出库仓库sn
       },
+      // 表单验证规则
       rules: {
-        'time': [{
-          required: true,
-          message: '请选择退货完成时间',
-          trigger: 'change'
-        }]
+        'time': [{ required: true, message: '请选择退货完成时间', trigger: 'change' }]
       },
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return queryOverviewPage(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -260,6 +246,7 @@ export default {
     }
   },
   computed: {
+    // 表头
     columns () {
       const _this = this
       const arr = [{
@@ -613,6 +600,7 @@ export default {
       this.$refs.receiverSn.resetForm()
       this.$refs.table.refresh(true)
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -620,12 +608,14 @@ export default {
       })
       _this.resetSearchForm()
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 200
     }
   },
   watch: {
+    // 展开关闭  监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调

+ 55 - 45
src/views/allocationManagement/matchSendOutOrder/list.vue

@@ -3,40 +3,40 @@
     <a-card size="small" :bordered="false" class="searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="matchSendOutOrderList-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+                <rangeDate ref="rangeDate" id="matchSendOutOrderList-time" :value="time" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="调往对象">
-                <a-input id="allocateBillList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
+                <a-input id="matchSendOutOrderList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="收货客户名称">
-                <dealerSearchList ref="receiverSn" @change="custChange" />
+                <dealerSearchList id="matchSendOutOrderList-receiverSn" ref="receiverSn" @change="custChange" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24" v-show="isShowWarehouse">
+              <a-form-item label="调出仓库">
+                <warehouse
+                  v-model="queryParam.warehouseSn"
+                  isPermission
+                  id="matchSendOutOrderList-warehouseSn"
+                  placeholder="请选择调出仓库"
+                />
               </a-form-item>
             </a-col>
             <template v-if="advanced">
-              <a-col :md="6" :sm="24" v-show="isShowWarehouse">
-                <a-form-item label="调出仓库">
-                  <warehouse
-                    v-model="queryParam.warehouseSn"
-                    isPermission
-                    id="allocateBillList-warehouseSn"
-                    placeholder="请选择调出仓库"
-                  />
-                </a-form-item>
-              </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="业务状态">
                   <v-select
                     v-model="queryParam.state"
                     ref="state"
-                    id="allocateBillList-state"
+                    id="matchSendOutOrderList-state"
                     code="ALLOCATE_STATUS"
                     placeholder="请选择业务状态"
                     allowClear
@@ -45,7 +45,7 @@
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="调拨单号">
-                  <a-input id="allocateBillList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
+                  <a-input id="matchSendOutOrderList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -53,7 +53,7 @@
                   <v-select
                     v-model="queryParam.checkStatus"
                     ref="checkStatus"
-                    id="allocateBillList-checkStatus"
+                    id="matchSendOutOrderList-checkStatus"
                     code="CHECK_STATUS"
                     placeholder="请选择对单状态"
                     allowClear
@@ -62,19 +62,19 @@
               </a-col>
               <a-col :md="6" :sm="24" v-show="isShowCustomerSearch">
                 <a-form-item label="客服">
-                  <customerService ref="customerName" v-model="queryParam.bizUserSn"></customerService>
+                  <customerService ref="customerName" id="matchSendOutOrderList-bizUserSn" v-model="queryParam.bizUserSn"></customerService>
                 </a-form-item>
               </a-col>
             </template>
             <a-col :md="isShowCustomerSearch?24:6" :sm="24" :style="{textAlign: isShowCustomerSearch?'center':''}">
-             <div class="table-page-search-submitButtons">
-               <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="allocateBillList-refresh">查询</a-button>
-               <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="allocateBillList-reset">重置</a-button>
-               <a @click="advanced=!advanced" style="margin-left: 5px">
-                 {{ advanced ? '收起' : '展开' }}
-                 <a-icon :type="advanced ? 'up' : 'down'"/>
-               </a>
-             </div>
+              <div class="table-page-search-submitButtons">
+                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="matchSendOutOrderList-refresh">查询</a-button>
+                <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="matchSendOutOrderList-reset">重置</a-button>
+                <a @click="advanced=!advanced" style="margin-left: 5px" id="matchSendOutOrderList-advanced">
+                  {{ advanced ? '收起' : '展开' }}
+                  <a-icon :type="advanced ? 'up' : 'down'"/>
+                </a>
+              </div>
             </a-col>
           </a-row>
         </a-form>
@@ -97,7 +97,7 @@
           bordered>
           <!-- 单号 -->
           <template slot="allocateNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('M_transferOut_detail')" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
+            <span v-if="$hasPermissions('M_transferOut_detail')" :id="'matchSendOutOrderList-allocateNo'+record.id" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
             <span v-else>{{ record.allocateNo }}</span>
           </template>
           <!-- 操作 -->
@@ -108,7 +108,7 @@
               v-if="record.checkStatus == 'WAIT'&&$hasPermissions('B_YxAudit')"
               class="button-warning"
               @click="handleYxAudit(record)"
-              id="allocateBillList-checkStatus">对单通过</a-button>
+              :id="'matchSendOutOrderList-checkStatus'+record.id">对单通过</a-button>
             <span v-else>--</span>
           </template>
         </s-table>
@@ -131,6 +131,7 @@
 import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
 import getDate from '@/libs/getDate.js'
+// 组件
 import { STable, VSelect } from '@/components'
 import rangeDate from '@/views/common/rangeDate.vue'
 import commonModal from '@/views/common/commonModal.vue'
@@ -138,43 +139,48 @@ import dealerSearchList from '@/views/common/dealerSearchList.vue'
 import customerService from '@/views/common/customerService.vue'
 import allocationDetailModal from '@/views/allocationManagement/transferOut/detail.vue'
 import warehouse from '@/views/common/chooseWarehouse.js'
+// 接口
 import { allocateBillList, allocateBillCheck } from '@/api/allocateBill'
 export default {
   name: 'MatchSendOutOrderAllocationList',
   mixins: [commonMixin],
-  components: { STable, VSelect, rangeDate, dealerSearchList, commonModal, allocationDetailModal, warehouse,customerService },
+  components: { STable, VSelect, rangeDate, dealerSearchList, commonModal, allocationDetailModal, warehouse, customerService },
   data () {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      // 创建时间 默认值
       time: [
         moment(getDate.getThreeMonthDays().starttime, 'YYYY-MM-DD'),
         moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')
       ],
-      queryParam: { //  查询条件
-        beginDate: getDate.getThreeMonthDays().starttime,
-        endDate: getDate.getCurrMonthDays().endtime,
+      //  查询条件
+      queryParam: {
+        beginDate: getDate.getThreeMonthDays().starttime, // 开始时间
+        endDate: getDate.getCurrMonthDays().endtime, // 结束时间
         targetName: '', //  调往对象
         state: undefined, //  业务状态
         allocateNo: '', //  调拨单号
-        warehouseSn: undefined,
-        receiverSn: undefined,
-        checkStatus: undefined,
-        printState: undefined,
-        bizUserSn:undefined
+        warehouseSn: undefined, // 出库仓库
+        receiverSn: undefined, // 收货客户名称
+        checkStatus: undefined, // 对单状态
+        printState: undefined, // 打印状态
+        bizUserSn: undefined// 客服
       },
-      showDetailModal: false,
+      showDetailModal: false, // 详情弹窗
       disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
+      exportLoading: false, // 导出按钮加载状态
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return allocateBillList(Object.assign(parameter, this.queryParam, { authWarehouseFlag: 1 })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -185,15 +191,14 @@ export default {
           return data
         })
       },
-      visibleAudit: false,
-      auditInfo: null,
-      bizSn: '',
-      spinningAudit: false,
+      bizSn: '', // 调拨sn
+      spinningAudit: false, // 审核按钮加载状态
       openModal: false //  新增编辑  弹框
-      
+
     }
   },
   computed: {
+    // 表头
     columns () {
       const arr = [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
@@ -218,6 +223,7 @@ export default {
     }
   },
   methods: {
+    // 收货客户名称 change
     custChange (val) {
       if (val.row) {
         this.queryParam.receiverSn = val.row.dealerSn
@@ -275,11 +281,13 @@ export default {
       this.bizSn = row.allocateSn
       this.showDetailModal = true
     },
+    // 关闭详情弹窗
     cancelDetail () {
       this.$store.state.app.curActionPermission = ''
       this.showDetailModal = false
       this.bizSn = null
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -287,12 +295,14 @@ export default {
       })
       this.openModal = false
     },
+    // 表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 200
     }
   },
   watch: {
+    // 展开关闭  监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调

+ 4 - 4
src/views/allocationManagement/transferOut/basicInfoModal.vue

@@ -207,8 +207,8 @@ export default {
       })
     },
     departementChange (v, row) {
-       console.log(v,row)
-       this.form.targetName = row.name
+      console.log(v, row)
+      this.form.targetName = row.name
     },
     // 调拨类别 change
     allocateTypeChange (val, opt) {
@@ -257,9 +257,9 @@ export default {
       const ind = this.dealerData.findIndex(item => item.dealerSn == value)
       this.form.targetName = this.dealerData[ind].dealerName
       const wsn = this.dealerData[ind].defaultWarehouseSn
-      if(this.$refs.warehouse.hasWarehouse(wsn)){
+      if (this.$refs.warehouse.hasWarehouse(wsn)) {
         this.form.warehouseSn = wsn
-      }else{
+      } else {
         this.form.warehouseSn = undefined
       }
     },

+ 6 - 3
src/views/allocationManagement/transferOut/chooseImportModal.vue

@@ -68,6 +68,7 @@
 <script>
 import { commonMixin } from '@/utils/mixin'
 import { hdExportExcel } from '@/libs/exportExcel'
+// 接口
 import { allocateBillParseProducts, allocateBillFailExcel } from '@/api/allocateBill'
 export default {
   name: 'TransferOutChooseImportModal',
@@ -104,15 +105,17 @@ export default {
         { title: '单位', dataIndex: 'productUnit', width: 60, align: 'center', customRender: function (text) { return text || '--' } },
         { title: '备注', dataIndex: 'errorDesc', width: 180, align: 'center', customRender: function (text) { return text || '--' } }
       ],
-      loadData: [],
-      unLoadData: [],
-      loading: false
+      loadData: [], // 可导入数据
+      unLoadData: [], // 错误数据
+      loading: false// 表格加载状态
     }
   },
   methods: {
+    // 获取表格数据
     getData () {
       const _this = this
       this.loading = true
+      // 获取列表数据  无分页
       allocateBillParseProducts(this.paramsData).then(res => {
         this.loading = false
         if (res.status == 200) {

+ 20 - 9
src/views/allocationManagement/transferOut/detail.vue

@@ -14,7 +14,7 @@
             @click.stop="handleEdit">
             <a-icon type="edit"/>编辑
           </a-button>
-          <a-button type="link" class="button-default" @click="showDetail=!showDetail">
+          <a-button id="allocateBillDetail-showDetail-btn" type="link" class="button-default" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
@@ -25,7 +25,7 @@
             type="primary"
             class="button-info"
             v-if="$hasPermissions('B_transferOut_print')"
-            id="allocateBillDetail-db-print-btn"
+            id="allocateBillDetail-dbPrint-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbPrint')">调拨打印</a-button>
           <a-button
@@ -33,7 +33,7 @@
             type="primary"
             class="button-info"
             v-if="$hasPermissions('B_transferOutType_print')"
-            id="allocateBillDetail-dbfl-print-btn"
+            id="allocateBillDetail-dbflPrint-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbflPrint')">调拨分类打印</a-button>
           <a-divider type="vertical" />
@@ -50,7 +50,7 @@
             type="default"
             class="button-info"
             v-if="$hasPermissions('B_transferOutType_export')"
-            id="allocateBillDetail-export-btn"
+            id="allocateBillDetail-exportType-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbflExport')">调拨分类导出</a-button>
         </template>
@@ -96,6 +96,7 @@
                 <div v-if="basicInfoData&&basicInfoData.attachmentList&&basicInfoData.attachmentList.length">
                   <a
                     target="_blank"
+                    id="allocateBillDetail-attachmentList"
                     style="color: #00aaff;text-decoration: underline;margin-right: 15px;"
                     :href="item.filePath"
                     v-for="item in basicInfoData.attachmentList"
@@ -149,6 +150,7 @@
                 <div v-if="basicInfoData&&basicInfoData.attachmentList&&basicInfoData.attachmentList.length">
                   <a
                     target="_blank"
+                    id="allocateBillDetail-attachmentList"
                     style="color: #00aaff;text-decoration: underline;margin-right: 15px;"
                     :href="item.filePath"
                     v-for="item in basicInfoData.attachmentList"
@@ -202,9 +204,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import printModal from './printModal.vue'
 import { printBase64Fun, exportExcel } from '@/libs/JGPrint.js'
+// 接口
 import { allocateBillDetailList, allocateBillDetail, allocateBillDetailCount, allocateBillDetailPrint, allocateBillDetailExcel } from '@/api/allocateBill'
 export default {
   name: 'TransferOutDetail',
@@ -222,10 +226,12 @@ export default {
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
+        // 获取列表数据  有分页
         return allocateBillDetailList(Object.assign(parameter, { allocateSn: this.outBizSn || this.$route.params.sn })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -238,17 +244,19 @@ export default {
       },
       basicInfoData: null, //  基本信息
       productTotal: null, //  合计
-      localDataSource: [],
-      openModal: false,
-      nowType: null,
-      showDetail: false,
-      tableHeight: 0
+      localDataSource: [], // 表格数据
+      openModal: false, // 打印导出弹窗
+      nowType: null, // dbflExport 调拨分类 dbPrint调拨
+      showDetail: false, // 显示隐藏基础信息
+      tableHeight: 0// 计算表格高度
     }
   },
   computed: {
+    // 是否显示基础信息编辑按钮
     isEdit () {
       return this.basicInfoData && ((this.basicInfoData.state == 'WAIT_SUBMIT') || (this.basicInfoData.state == 'WAIT_AUDIT') || (this.basicInfoData.state == 'AUDIT_REJECT')) && this.$hasPermissions('M_transferOut_edit')
     },
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -278,6 +286,7 @@ export default {
     }
   },
   watch: {
+    // 基础信息显示关闭  表格高度变化
     showDetail (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -356,12 +365,14 @@ export default {
           printType: taskName + '打印'
         }, !this.basicInfoData.printState || this.basicInfoData.printState == 'UNABLE_PRINT' || this.basicInfoData.printState == 'CANCEL_PRINT')
     },
+    // 初始化
     pageInit () {
       this.$refs.table.refresh(true)
       this.getDetail()
       this.getDetailCount()
       this.setTableH()
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 280

+ 25 - 19
src/views/allocationManagement/transferOut/dsModal.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="dealerAccountEdit-modal"
+    class="transferOutDs-modal"
     :footer="null"
     :maskClosable="false"
     title="提交调拨单"
@@ -12,7 +12,7 @@
     <div>
       <a-spin :spinning="spinning" tip="Loading...">
         <a-form-model
-          id="dealerAccountEdit-form"
+          id="transferOutDs-form"
           ref="ruleForm"
           :model="form"
           :rules="rules"
@@ -20,11 +20,11 @@
           :wrapper-col="formItemLayout.wrapperCol"
         >
           <a-form-model-item label="收货客户名称" v-if="dealerLevel != 'OTHER'">
-            <dealerSubareaScopeList ref="custList" defValKey="buyerSn" @change="custChange" v-model="form.receiverSn" />
+            <dealerSubareaScopeList id="transferOutDs-custList" ref="custList" defValKey="buyerSn" @change="custChange" v-model="form.receiverSn" />
           </a-form-model-item>
           <a-form-model-item label="收货客户名称" v-else>
             <a-input
-              id="dealerAccountEdit-receiverName"
+              id="transferOutDs-receiverName"
               :maxLength="30"
               v-model.trim="form.receiverName"
               placeholder="请输入收货客户名称"
@@ -32,7 +32,7 @@
           </a-form-model-item>
           <a-form-model-item label="发货编号" prop="sendNo">
             <a-input
-              id="dealerAccountEdit-phone"
+              id="transferOutDs-sendNo"
               :maxLength="10"
               v-model.trim="form.sendNo"
               placeholder="请输入发货编号"
@@ -43,29 +43,29 @@
           </a-form-model-item>
           <a-form-model-item label="发货说明">
             <a-input
-              id="dealerAccountEdit-explainInfo"
+              id="transferOutDs-explainInfo"
               type="textarea"
               :maxLength="630"
               v-model.trim="form.explainInfo"
               placeholder="请输入发货说明"/>
           </a-form-model-item>
           <a-form-model-item label="备货打印" prop="printState">
-            <a-radio-group v-model="form.printState">
-              <a-radio value="NO_PRINT">
+            <a-radio-group id="transferOutDs-printState" v-model="form.printState">
+              <a-radio value="NO_PRINT" id="transferOutDs-printState1">
                 允许打印
               </a-radio>
-              <a-radio value="UNABLE_PRINT">
+              <a-radio value="UNABLE_PRINT" id="transferOutDs-printState2">
                 暂不打印
               </a-radio>
-              <a-radio value="CANCEL_PRINT">
+              <a-radio value="CANCEL_PRINT" id="transferOutDs-printState3">
                 取消打印
               </a-radio>
             </a-radio-group>
           </a-form-model-item>
         </a-form-model>
         <div class="btn-cont">
-          <a-button type="primary" id="dealerAccountEdit-save" @click="handleSave">确定</a-button>
-          <a-button id="dealerAccountEdit-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+          <a-button type="primary" id="transferOutDs-save" @click="handleSave">确定</a-button>
+          <a-button id="transferOutDs-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
         </div>
       </a-spin>
     </div>
@@ -74,9 +74,10 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
 export default {
-  name: 'DealerAccountEditModal',
+  name: 'TransferOutDsModal',
   mixins: [commonMixin],
   components: { dealerSubareaScopeList },
   props: {
@@ -93,17 +94,20 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // form表单label布局
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
+      // 提交参数
       form: {
-        sendNo: '',
-        printState: '',
-        receiverSn: '',
-        receiverName: '',
-        explainInfo: ''
+        sendNo: '', // 发货编号
+        printState: '', // 备货打印状态
+        receiverSn: '', // 收货客户sn
+        receiverName: '', // 收货客户名称
+        explainInfo: ''// 发货说明
       },
+      // 表单验证规则
       rules: {
         sendNo: [{ required: true, message: '请输入发货编号', trigger: 'change' }],
         printState: [{ required: true, message: '请选择备货打印', trigger: 'change' }]
@@ -112,10 +116,12 @@ export default {
     }
   },
   methods: {
+    // 获取常用发货编号
     setSendNo (i) {
       this.form.sendNo = i
       this.$refs.ruleForm.validateField('sendNo')
     },
+    // 收货客户名称
     custChange (val) {
       this.form.receiverSn = val.key || ''
       this.form.receiverName = val.name || ''
@@ -171,7 +177,7 @@ export default {
 </script>
 
 <style lang="less">
-  .dealerAccountEdit-modal{
+  .transferOutDs-modal{
     .ant-modal-body {
       padding: 40px 40px 24px;
     }

+ 58 - 36
src/views/allocationManagement/transferOut/edit.vue

@@ -6,7 +6,7 @@
         <template slot="subTitle">
           <a id="allocateBillEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
           <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ basicInfoData&&basicInfoData.allocateNo }}</span>
-          <a-button type="link" class="button-default" @click="showDetail=!showDetail">
+          <a-button type="link" id="allocateBillEdit-showDetail" class="button-default" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
@@ -17,7 +17,7 @@
             type="primary"
             class="button-info"
             v-if="$hasPermissions('B_transferOut_print')"
-            id="allocateBillEdit-db-print-btn"
+            id="allocateBillEdit-dbPrint-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbPrint')">调拨打印</a-button>
           <a-button
@@ -25,7 +25,7 @@
             type="default"
             class="button-info"
             v-if="$hasPermissions('B_transferOutType_print')"
-            id="allocateBillEdit-dbfl-print-btn"
+            id="allocateBillEdit-dbflPrint-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbflPrint')">调拨分类打印</a-button>
           <a-divider type="vertical" />
@@ -42,7 +42,7 @@
             type="default"
             class="button-info"
             v-if="$hasPermissions('B_transferOutType_export')"
-            id="allocateBillDetail-export-btn"
+            id="allocateBillDetail-exportType-btn"
             :disabled="localDataSource.length==0"
             @click="handlePrint('dbflExport')">调拨分类导出</a-button>
         </template>
@@ -91,6 +91,7 @@
               <div v-if="basicInfoData&&basicInfoData.attachmentList&&basicInfoData.attachmentList.length">
                 <a
                   target="_blank"
+                  id="allocateBillDetail-attachmentList"
                   style="color: #00aaff;text-decoration: underline;margin-right: 15px;"
                   :href="item.filePath"
                   v-for="item in basicInfoData.attachmentList"
@@ -107,7 +108,7 @@
       <a-card size="small" title="选择产品" :bordered="false" class="allocateBillEdit-cont">
         <!-- 筛选条件 -->
         <div class="table-page-search-wrapper">
-          <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-form layout="inline" id="allocateBillDetail-form" @keyup.enter.native="$refs.table.refresh(true)">
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-item label="产品编码" prop="productCode">
@@ -125,8 +126,8 @@
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="storeTransferOutList-refresh">查询</a-button>
-                <a-button style="margin-left: 8px" @click="resetSearchForm(0)" :disabled="disabled" id="storeTransferOutList-reset">重置</a-button>
+                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="allocateBillEdit-refresh">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm(0)" :disabled="disabled" id="allocateBillEdit-reset">重置</a-button>
               </a-col>
             </a-row>
           </a-form>
@@ -138,7 +139,7 @@
           size="small"
           index="0"
           tableId="table1"
-          :rowKey="(record) => record.stockSn"
+          :rowKey="(record) => record.id"
           :columns="columns"
           :customRow="handleClickRow"
           :data="loadData"
@@ -158,6 +159,7 @@
             <div v-else>
               <span v-if="record.powerFlag!=0">{{ record.priceLevelDictValue }}</span>
               <v-select
+                :id="'allocateBillEdit-priceLevelDictValue'+record.id"
                 v-else
                 style="width:90%;"
                 size="small"
@@ -172,6 +174,7 @@
           <template slot="qty" slot-scope="text, record">
             <a-input-number
               size="small"
+              :id="'allocateBillEdit-qty'+record.id"
               v-model="record.qty"
               :precision="0"
               :min="1"
@@ -182,6 +185,7 @@
           <!-- 操作 -->
           <template slot="action1" slot-scope="text, record">
             <a-button
+              :id="'allocateBillEdit-add-btn'+record.id"
               size="small"
               type="link"
               class="button-primary"
@@ -205,21 +209,21 @@
         <a-row :gutter="15">
           <a-col :span="16">
             <div class="table-page-search-wrapper">
-              <a-form layout="inline" @keyup.enter.native="$refs.chooseTable.refresh(true)">
+              <a-form id="allocateBillEdit-form-search" layout="inline" @keyup.enter.native="$refs.chooseTable.refresh(true)">
                 <a-row :gutter="15">
                   <a-col :md="9" :sm="24">
                     <a-form-item label="产品编码" prop="productCode">
-                      <a-input id="allocateBillEdit-productCode" v-model.trim="chooseQueryParam.productCode" placeholder="请输入产品编码" allowClear />
+                      <a-input id="allocateBillEdit-select-productCode" v-model.trim="chooseQueryParam.productCode" placeholder="请输入产品编码" allowClear />
                     </a-form-item>
                   </a-col>
                   <a-col :md="9" :sm="24">
                     <a-form-item label="产品名称" prop="productName">
-                      <a-input id="allocateBillEdit-productName" v-model.trim="chooseQueryParam.productName" placeholder="请输入产品名称" allowClear />
+                      <a-input id="allocateBillEdit-select-productName" v-model.trim="chooseQueryParam.productName" placeholder="请输入产品名称" allowClear />
                     </a-form-item>
                   </a-col>
                   <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="storeTransferOutList-refresh">查询</a-button>
-                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm(0)" :disabled="chooseDisabled" id="storeTransferOutList-reset">重置</a-button>
+                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="allocateBillEdit-select-refresh">查询</a-button>
+                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm(0)" :disabled="chooseDisabled" id="allocateBillEdit-select-reset">重置</a-button>
                   </a-col>
                 </a-row>
               </a-form>
@@ -229,10 +233,10 @@
             <span v-if="selNums">已选{{ selNums }}项</span>
             <a-button
               style="margin:0 10px;"
-              id="salesEdit-plDel-btn"
+              id="allocateBillEdit-plDel-btn"
               @click="openPlSet">批量设置费用归属</a-button>
             <a-button id="allocateBillEdit-import-btn" @click="openGuideModal=true">导入产品</a-button>
-            <a-button type="danger" style="margin-left: 10px" @click.stop="handleDel('', 'all')" id="chainTransferOutEdit-del-all-btn">整单删除</a-button>
+            <a-button type="danger" style="margin-left: 10px" @click.stop="handleDel('', 'all')" id="allocateBillEdit-del-all-btn">整单删除</a-button>
           </a-col>
         </a-row>
         <!-- 列表 -->
@@ -258,7 +262,7 @@
             <div v-if="$route.params.dealerLevel == 'OTHER'">
               <a-select
                 size="small"
-                id="allocateBillEdit-price"
+                :id="'allocateBillEdit-select-price'+record.id"
                 option-label-prop="label"
                 v-model="record.price"
                 placeholder="请选择"
@@ -277,7 +281,7 @@
           <template slot="qty" slot-scope="text, record">
             <a-input-number
               size="small"
-              id="allocateBillEdit-qty"
+              :id="'allocateBillEdit-select-qty'+record.id"
               v-model="record.qty"
               :precision="0"
               :min="1"
@@ -291,6 +295,7 @@
             <a-select
               style="width:100%"
               placeholder="请选择部门"
+              :id="'allocateBillEdit-departmentSn'+record.id"
               size="small"
               allowClear
               v-model="record.departmentSn"
@@ -298,7 +303,7 @@
               @change="e => handleChange(e, record)"
               option-filter-prop="children"
               :filter-option="filterOption">
-              <a-select-option v-for="item in departmentList" :key="item.departmentSn" :value="item.departmentSn">{{ item.name }}</a-select-option>
+              <a-select-option :id="'allocateBillEdit-departmentSn'+item.departmentSn" v-for="item in departmentList" :key="item.departmentSn" :value="item.departmentSn">{{ item.name }}</a-select-option>
             </a-select>
           </template>
           <!-- 操作 -->
@@ -309,7 +314,7 @@
               class="button-error"
               :loading="spinning"
               @click="handleDel(record)"
-              id="allocateBillEdit-del-btn">删除</a-button>
+              :id="'allocateBillEdit-del-btn'+record.id">删除</a-button>
           </template>
         </s-table>
       </a-card>
@@ -363,6 +368,7 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import ImportGuideModal from './importGuideModal.vue'
 import basicInfoModal from './basicInfoModal.vue'
@@ -370,6 +376,7 @@ import printModal from './printModal.vue'
 import dsModal from './dsModal.vue'
 import commonModal from '@/views/common/commonModal.vue'
 import { printBase64Fun, exportExcel } from '@/libs/JGPrint.js'
+// 接口
 import { queryStockProductForOtherPage } from '@/api/stock'
 import { productPriceInfo } from '@/api/product'
 import { departmentQueryList } from '@/api/expenseManagement'
@@ -382,33 +389,37 @@ export default {
   data () {
     return {
       spinning: false,
-      showDsModal: false,
-      editRemark: false,
-      showPlModal: false,
+      showDsModal: false, // 提交调拨单弹窗
+      editRemark: false, // 编辑基础信息弹窗
+      showPlModal: false, // 批量设置部门弹窗
       showDetail: false, // 基础信息
+      // 查询条件
       queryParam: {
-        productCode: '',
-        productName: '',
-        productOrigCode: ''
+        productCode: '', // 产品编码
+        productName: '', // 产品名称
+        productOrigCode: ''// 原厂编码
       },
+      // 已选产品查询条件
       chooseQueryParam: {
-        productCode: '',
-        productName: ''
+        productCode: '', // 产品编码
+        productName: ''// 产品名称
       },
       disabled: false, //  查询、重置按钮是否可操作
-      loading: false,
+      loading: false, // 表格加载状态
       chooseDisabled: false, //  查询、重置按钮是否可操作
       advanced: false, // 高级搜索 展开/关闭
       departmentList: [], // 部门列表
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
+        // 获取列表数据 有分页
         const dealerLevel = this.dealerLevel == 'OTHER' ? undefined : this.dealerLevel
         const warehouseSn = this.basicInfoData.warehouseSn
         const fun = this.dealerLevel == 'OTHER' ? queryStockProductForOtherPage : queryStockProductPage
         const dealerSnInfo = this.dealerLevel != 'OTHER' ? this.basicInfoData.dealerInfo.dealerSn : undefined
         return fun(Object.assign(parameter, this.queryParam, { zeroQtyFlag: '0', dealerLevel: dealerLevel, warehouseSn: warehouseSn, dealerSn: dealerSnInfo })).then(res => {
           const data = res.data
+          // 计算表格序号
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -420,14 +431,16 @@ export default {
           return data
         })
       },
-      loadDataSource: [],
-      localDataSource: [],
+      loadDataSource: [], // 调拨列表数据
+      localDataSource: [], // 调拨已选数据
       // 加载数据方法 必须为 Promise 对象
       chooseLoadData: parameter => {
         this.chooseDisabled = true
+        // 获取已选列表数据  有分页
         const params = Object.assign(parameter, this.chooseQueryParam, { allocateSn: this.allocateSn })
         return allocateBillDetailList(params).then(res => {
           const data = res.data
+          // 计算表格序号
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -444,18 +457,20 @@ export default {
       productTotal: null, //  合计
       basicInfoData: null, // 基本信息
       openGuideModal: false, //  导入产品引导
-      openModal: false,
-      nowType: null,
-      rowSelectionInfo: null,
-      plSetVal: undefined,
-      dealerLevel: undefined,
-      allocateSn: undefined
+      openModal: false, // 打印预览/快捷打印弹窗
+      nowType: null, // 打印预览/快捷打印 类型
+      rowSelectionInfo: null, // 已选数据集合
+      plSetVal: undefined, // 部门sn
+      dealerLevel: undefined, // 经销商等级
+      allocateSn: undefined// 调拨sn
     }
   },
   computed: {
+    // 计算已选产品条数
     selNums () {
       return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length || 0
     },
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -483,6 +498,7 @@ export default {
       }
       return arr
     },
+    // 已选列表表头
     chooseColumns () {
       const _this = this
       const arr = [
@@ -536,10 +552,12 @@ export default {
         this.$message.warning('请先选择产品!')
       }
     },
+    // 关闭批量设置费用归属部门弹窗
     closePlSet () {
       this.showPlModal = false
       this.plSetVal = undefined
     },
+    // 批量设置费用归属部门成功
     setPlSetOk () {
       if (!this.plSetVal) {
         this.$message.warning('请选择费用归属部门!')
@@ -700,6 +718,7 @@ export default {
         this.$message.warning('请选择产品')
       }
     },
+    // 提交
     handleSubmit (params) {
       const _this = this
       const data = Object.assign({ allocateSn: this.$route.params.sn }, params || {})
@@ -791,6 +810,7 @@ export default {
         _this.$store.state.app.curActionPermission = ''
       })
     },
+    // 打印导出
     exportFl (data) {
       this.handleExcel(data.printType, '调拨分类', data)
     },
@@ -799,6 +819,7 @@ export default {
       this.nowType = type
       this.openModal = true
     },
+    // 打印调拨分类、调拨 成功
     handleOk (objs) {
       const _this = this
       const params = JSON.parse(JSON.stringify(objs))
@@ -828,6 +849,7 @@ export default {
       this.$refs.chooseTable.clearSelected()
       this.$refs.chooseTable.refresh()
     },
+    // 初始化
     pageInit () {
       this.dealerLevel = this.$route.params.dealerLevel
       this.allocateSn = this.$route.params.sn

+ 14 - 5
src/views/allocationManagement/transferOut/importGuideModal.vue

@@ -19,7 +19,13 @@
             <li>2) 除了“产品编码”、“数量”两列,其他列可自定义,不影响数据导入</li>
             <li>3) 如果导入的产品已经存在,则不会导入该行</li>
           </ul>
-          <a-button type="link" icon="download" style="padding: 0 0 0 23px;" :loading="exportLoading" @click="handleExport">下载导入模板</a-button>
+          <a-button
+            id="importGuide-download"
+            type="link"
+            icon="download"
+            style="padding: 0 0 0 23px;"
+            :loading="exportLoading"
+            @click="handleExport">下载导入模板</a-button>
         </div>
         <div class="explain-item">
           <div class="explain-tit">
@@ -64,8 +70,10 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import ChooseImportModal from './chooseImportModal.vue'
 import { Upload } from '@/components'
+// 接口
 import { allocateBillDownload } from '@/api/allocateBill'
 export default {
   name: 'TransferOutImportGuideModal',
@@ -85,12 +93,12 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       openImportModal: false, //  导入
-      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload',
-      paramsData: null,
-      uploadParams: {
+      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload', // 上传文件路径
+      paramsData: null, // 上传参数
+      uploadParams: { // 上传参数
         savePathType: 'local'
       },
-      exportLoading: false
+      exportLoading: false// 导出按钮加载状态
     }
   },
   methods: {
@@ -146,6 +154,7 @@ export default {
         }
       })
     },
+    // 下载模板
     download (data) {
       if (!data) { return }
       const url = window.URL.createObjectURL(new Blob([data]))

+ 55 - 44
src/views/allocationManagement/transferOut/list.vue

@@ -3,27 +3,27 @@
     <a-card size="small" :bordered="false" class="searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="transferOutList-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+                <rangeDate ref="rangeDate" id="transferOutList-time" :value="time" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="调往对象">
-                <a-input id="allocateBillList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
+                <a-input id="transferOutList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="费用/调拨类型">
-                <AllocateType id="allocateBillList-costTypeName" v-model="allocateTypeVal" :changeOnSelect="true" placeholder="请选择费用/调拨类型" @change="changeAllocatype"></AllocateType>
+                <AllocateType id="transferOutList-costTypeName" v-model="allocateTypeVal" :changeOnSelect="true" placeholder="请选择费用/调拨类型" @change="changeAllocatype"></AllocateType>
               </a-form-item>
             </a-col>
             <template v-if="advanced">
               <a-col :md="6" :sm="24">
                 <a-form-item label="收货客户名称">
-                  <dealerSearchList ref="receiverSn" @change="custChange" />
+                  <dealerSearchList id="transferOutList-receiverName" ref="receiverSn" @change="custChange" />
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -31,7 +31,7 @@
                   <v-select
                     v-model="queryParam.state"
                     ref="state"
-                    id="allocateBillList-state"
+                    id="transferOutList-state"
                     code="ALLOCATE_STATUS"
                     placeholder="请选择业务状态"
                     allowClear
@@ -40,7 +40,7 @@
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="调拨单号">
-                  <a-input id="allocateBillList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
+                  <a-input id="transferOutList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -48,7 +48,7 @@
                   <warehouse
                     isPermission
                     v-model="queryParam.warehouseSn"
-                    id="allocateBillList-warehouseSn"
+                    id="transferOutList-warehouseSn"
                     placeholder="请选择调出仓库"
                   />
                 </a-form-item>
@@ -58,7 +58,7 @@
                   <v-select
                     v-model="queryParam.printState"
                     ref="printState"
-                    id="allocateBillList-printState"
+                    id="transferOutList-printState"
                     code="PRINT_STATUS"
                     placeholder="请选择打印状态"
                     allowClear
@@ -70,7 +70,7 @@
                   <v-select
                     v-model="queryParam.checkStatus"
                     ref="checkStatus"
-                    id="allocateBillList-checkStatus"
+                    id="transferOutList-checkStatus"
                     code="CHECK_STATUS"
                     placeholder="请选择对单状态"
                     allowClear
@@ -79,13 +79,13 @@
               </a-col>
               <a-col :md="6" :sm="24" v-show="isShowCustomerSearch">
                 <a-form-item label="客服">
-                  <customerService ref="customerName" v-model="queryParam.bizUserSn"></customerService>
+                  <customerService id="transferOutList-bizUserSn" ref="customerName" v-model="queryParam.bizUserSn"></customerService>
                 </a-form-item>
               </a-col>
             </template>
             <a-col :md="6" :sm="24">
-              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="allocateBillList-refresh">查询</a-button>
-              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="allocateBillList-reset">重置</a-button>
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="transferOutList-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="transferOutList-reset">重置</a-button>
               <a-button
                 style="margin-left: 5px"
                 type="primary"
@@ -94,8 +94,8 @@
                 @click="handleExport"
                 :disabled="disabled"
                 :loading="exportLoading"
-                id="allocateBillList-export">导出</a-button>
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+                id="transferOutList-export">导出</a-button>
+              <a @click="advanced=!advanced" id="transferOutList-advanced" style="margin-left: 5px">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'"/>
               </a>
@@ -108,7 +108,7 @@
       <a-spin :spinning="spinning" tip="Loading...">
         <!-- 操作按钮 -->
         <div class="table-operator">
-          <a-button v-if="$hasPermissions('B_transferOut_add')" id="allocateBillList-add" type="primary" @click="openModal=true">新增</a-button>
+          <a-button v-if="$hasPermissions('B_transferOut_add')" id="transferOutList-add" type="primary" @click="openModal=true">新增</a-button>
         </div>
         <!-- 列表 -->
         <s-table
@@ -124,7 +124,7 @@
           bordered>
           <!-- 单号 -->
           <template slot="allocateNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('M_transferOut_detail')" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
+            <span v-if="$hasPermissions('M_transferOut_detail')" :id="'transferOutList-detail'+record.id" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
             <span v-else>{{ record.allocateNo }}</span>
           </template>
           <!-- 起止时间 -->
@@ -144,7 +144,7 @@
           <template slot="printStateWord" slot-scope="text, record">
             <span v-if="record.printState">
               <span v-if="record.printState=='NO_PRINT'||record.printState=='PRINT'">{{ record.printStateDictValue }}</span>
-              <span @click="handlePrint(record)" class="link-bule" v-else>{{ record.printStateDictValue }}</span>
+              <span :id="'transferOutList-print'+record.id" @click="handlePrint(record)" class="link-bule" v-else>{{ record.printStateDictValue }}</span>
             </span>
             <span v-else>--</span>
           </template>
@@ -156,28 +156,28 @@
             v-if="record.state == 'WAIT_AUDIT' && record.printState!='UNABLE_PRINT' && record.printState!='NO_PRINT' && $hasPermissions('B_tfo_yxPrint')"
             class="button-warning"
             @click="handleYxPrint(record)"
-            id="allocateBillList-examine-btn">允许打印</a-button> -->
+            id="transferOutList-examine-btn">允许打印</a-button> -->
             <a-button
               size="small"
               type="link"
               v-if="record.state == 'WAIT_AUDIT' && $hasPermissions('B_transferOut_audit')"
               class="button-warning"
               @click="handleExamine(record)"
-              id="allocateBillList-examine-btn">审核</a-button>
+              :id="'transferOutList-audit-btn'+record.id">审核</a-button>
             <a-button
               size="small"
               type="link"
               v-if="((record.state == 'WAIT_SUBMIT') || (record.state == 'WAIT_AUDIT') || (record.state == 'AUDIT_REJECT')) && $hasPermissions('M_transferOut_edit')"
               class="button-info"
               @click="handleEdit(record)"
-              id="allocateBillList-edit-btn">编辑</a-button>
+              :id="'transferOutList-edit-btn'+record.id">编辑</a-button>
             <a-button
               size="small"
               type="link"
               v-if="((record.state == 'WAIT_SUBMIT') || (record.state == 'WAIT_AUDIT') || (record.state == 'AUDIT_REJECT')) && $hasPermissions('B_transferOut_del')"
               class="button-error"
               @click="handleDel(record)"
-              id="allocateBillList-del-btn">删除</a-button>
+              :id="'transferOutList-del-btn'+record.id">删除</a-button>
             <span v-if="((record.state != 'WAIT_SUBMIT') && (record.state != 'WAIT_AUDIT') && (record.state != 'AUDIT_REJECT'))||(!$hasPermissions('B_transferOut_audit') && !$hasPermissions('M_transferOut_edit') && !$hasPermissions('B_transferOut_del'))">--</span>
           </template>
         </s-table>
@@ -202,6 +202,8 @@
 import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
 import getDate from '@/libs/getDate.js'
+import { hdExportExcel } from '@/libs/exportExcel'
+// 组件
 import { STable, VSelect } from '@/components'
 import basicInfoModal from './basicInfoModal.vue'
 import rangeDate from '@/views/common/rangeDate.vue'
@@ -209,10 +211,10 @@ import auditModal from '@/views/common/auditModal.vue'
 import warehouse from '@/views/common/chooseWarehouse.js'
 import customerService from '@/views/common/customerService'
 import dealerSearchList from '@/views/common/dealerSearchList.vue'
-import { allocateBillList, allocateBillDel, allocateBillAudit, allocateBillExport, allocateBillAblePrint } from '@/api/allocateBill'
 import AllocateType from '@/views/common/allocateType.js'
-import { hdExportExcel } from '@/libs/exportExcel'
 import printModal from './printStatusModal.vue'
+// 接口
+import { allocateBillList, allocateBillDel, allocateBillAudit, allocateBillExport, allocateBillAblePrint } from '@/api/allocateBill'
 export default {
   name: 'TransferOutList',
   mixins: [commonMixin],
@@ -221,38 +223,42 @@ export default {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      // 创建时间
       time: [
         moment(getDate.getThreeMonthDays().starttime, 'YYYY-MM-DD'),
         moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')
       ],
-      allocateTypeVal: [],
-      queryParam: { //  查询条件
-        beginDate: getDate.getThreeMonthDays().starttime,
-        endDate: getDate.getCurrMonthDays().endtime,
+      allocateTypeVal: [], // 费用/调拨类型
+      //  查询条件
+      queryParam: {
+        beginDate: getDate.getThreeMonthDays().starttime, // 开始创建时间
+        endDate: getDate.getCurrMonthDays().endtime, // 结束创建时间
         targetName: '', //  调往对象
         costTypeSn: undefined, // 费用类型
         allocateSortSn: undefined, //  调拨类型1
         allocateTypeSn: undefined, //  调拨类型2
         state: undefined, //  业务状态
         allocateNo: '', //  调拨单号
-        receiverSn: undefined,
-        checkStatus: undefined,
-        printState: undefined,
-        warehouseSn: undefined,
-        bizUserSn: undefined
+        receiverSn: undefined, // 收货客户名称
+        checkStatus: undefined, // 对单状态
+        printState: undefined, // 打印状态
+        warehouseSn: undefined, // 出库仓库
+        bizUserSn: undefined // 客服
       },
-      disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
-      printIsShow: false,
+      printIsShow: false, // 打印弹窗
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据 有分页
         return allocateBillList(Object.assign(parameter, this.queryParam, { authWarehouseFlag: 1 })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -263,16 +269,15 @@ export default {
           return data
         })
       },
-      visibleAudit: false,
-      auditInfo: null,
-      spinningAudit: false,
+      visibleAudit: false, // 审核弹窗
+      auditInfo: null, // 审核当前行数据
+      spinningAudit: false, // 审核按钮加载状态
       openModal: false, //  新增编辑  弹框
-      printInfo: null
+      printInfo: null// 打印当前行信息
     }
   },
   computed: {
-    // dataIndex: 'printStateDictValue',
-    columns () {
+    columns () { // 表头
       const _this = this
       const arr = [
         { title: '序号', dataIndex: 'no', width: '3.5%', align: 'center' },
@@ -311,6 +316,7 @@ export default {
       this.printIsShow = false
       this.$refs.table.refresh(true)
     },
+    // 收货客户名称
     custChange (val) {
       if (val.row) {
         this.queryParam.receiverSn = val.row.dealerSn
@@ -325,6 +331,7 @@ export default {
       this.queryParam.beginDate = date[0]
       this.queryParam.endDate = date[1]
     },
+    // 费用/调拨类型
     changeAllocatype (val, opts) {
       this.allocateTypeVal = val || []
       this.queryParam.costTypeSn = val && val[0] ? val[0] : ''
@@ -398,7 +405,7 @@ export default {
         }
       })
     },
-    //  审核
+    //  打开审核弹窗
     handleExamine (row) {
       this.auditInfo = row
       this.visibleAudit = true
@@ -442,6 +449,7 @@ export default {
         _this.$store.state.app.curActionPermission = ''
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -449,10 +457,12 @@ export default {
       })
       this.openModal = false
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 240
     },
+    // 打印
     handlePrint (item) {
       const obj = {
         no: item.allocateNo,
@@ -467,6 +477,7 @@ export default {
     }
   },
   watch: {
+    // 展开关闭  监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调

+ 31 - 23
src/views/allocationManagement/transferOut/printModal.vue

@@ -22,7 +22,7 @@
         <a-form-model-item style="margin-bottom: 0;" label="发货编号">{{ itemData&&itemData.sendNo || '--' }}</a-form-model-item>
         <a-form-model-item style="margin-bottom: 0;" label="收货客户名称">{{ itemData&&itemData.receiverName || '--' }}</a-form-model-item>
         <a-form-model-item style="margin-bottom: 0;" label="产品分类" prop="id" v-if="nowType=='dbflPrint'||nowType=='dbflExport'">
-          <a-select id="allocateBill-print-form" v-model="form.id" placeholder="请选择产品分类">
+          <a-select id="allocateBill-print-typeList" v-model="form.id" placeholder="请选择产品分类">
             <a-select-option v-for="item in typeList" :value="item.id" :key="item.id">
               <span v-if="item.id != 'all'">{{ item.productBrandName }} - {{ item.productTypeName3 }}</span>
               <span v-else>全部</span>
@@ -30,37 +30,37 @@
           </a-select>
         </a-form-model-item>
         <a-form-model-item label="货位编号" prop="orderBy" v-if="nowType=='dbflPrint'">
-          <a-radio-group v-model="form.orderBy">
-            <a-radio value="ASC">打印(↑升序)</a-radio>
-            <a-radio value="DESC">打印(↓降序)</a-radio>
-            <a-radio value="-1">不打印</a-radio>
+          <a-radio-group v-model="form.orderBy" id="allocateBill-print-orderBy">
+            <a-radio value="ASC" id="allocateBill-print-orderBy-asc">打印(↑升序)</a-radio>
+            <a-radio value="DESC" id="allocateBill-print-orderBy-desc">打印(↓降序)</a-radio>
+            <a-radio value="-1" id="allocateBill-print-orderBy-1">不打印</a-radio>
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item label="产品价格" style="margin-bottom: 0;" prop="priceType" v-if="nowType=='dbPrint'">
-          <a-radio-group v-model="form.priceType">
-            <a-radio value="ALLOCATE_BILL_PRICE" v-if="$hasPermissions('B_transferOut_print_salesPrice')">销售价</a-radio>
-            <a-radio value="ALLOCATE_BILL_COST" v-if="$hasPermissions('B_transferOut_print_costPrice')">成本价</a-radio>
-            <a-radio value="ALLOCATE_BILL">不打印</a-radio>
+          <a-radio-group v-model="form.priceType" id="allocateBill-print-priceType">
+            <a-radio value="ALLOCATE_BILL_PRICE" id="allocateBill-print-priceType1" v-if="$hasPermissions('B_transferOut_print_salesPrice')">销售价</a-radio>
+            <a-radio value="ALLOCATE_BILL_COST" id="allocateBill-print-priceType2" v-if="$hasPermissions('B_transferOut_print_costPrice')">成本价</a-radio>
+            <a-radio value="ALLOCATE_BILL" id="allocateBill-print-priceType3">不打印</a-radio>
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item label="产品价格" style="margin-bottom: 0;" prop="priceType" v-if="nowType=='dbExport'">
-          <a-radio-group v-model="form.priceType">
-            <a-radio value="ALLOCATE_BILL_PRICE" v-if="$hasPermissions('B_transferOut_detail_export_salesPrice')">销售价</a-radio>
-            <a-radio value="ALLOCATE_BILL_COST" v-if="$hasPermissions('B_transferOut_detail_export_costPrice')">成本价</a-radio>
-            <a-radio value="ALLOCATE_BILL">不导出</a-radio>
+          <a-radio-group v-model="form.priceType" id="allocateBill-print-priceType">
+            <a-radio value="ALLOCATE_BILL_PRICE" id="allocateBill-print-priceType1" v-if="$hasPermissions('B_transferOut_detail_export_salesPrice')">销售价</a-radio>
+            <a-radio value="ALLOCATE_BILL_COST" id="allocateBill-print-priceType2" v-if="$hasPermissions('B_transferOut_detail_export_costPrice')">成本价</a-radio>
+            <a-radio value="ALLOCATE_BILL" id="allocateBill-print-priceType3">不导出</a-radio>
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item label="备注" v-if="nowType=='dbPrint'">
-          <a-checkbox @change="onChangeRemark" :checked="remarkFlag">
+          <a-checkbox @change="onChangeRemark" :checked="remarkFlag" id="allocateBill-print-remark">
             打印
           </a-checkbox>
         </a-form-model-item>
       </a-form-model>
       <div class="btn-cont">
-        <a-button id="allocateBill-print-close" @click="handleClose('preview')">取消</a-button>
+        <a-button id="allocateBill-printcancel" @click="handleClose('preview')">取消</a-button>
         <a-button
           v-if="nowType=='dbflPrint'||nowType=='dbPrint'"
-          id="allocateBill-print-save"
+          id="allocateBill-print-dbflPrint"
           type="primary"
           class="button-info"
           @click="handleSave('preview')"
@@ -68,13 +68,13 @@
         <a-button
           v-if="hidePrint&&(nowType=='dbflPrint'||nowType=='dbPrint')"
           type="primary"
-          id="allocateBill-print-back"
+          id="allocateBill-print-dbflPrint"
           @click="handleSave('print')"
           style="margin-left: 15px;">确定打印</a-button>
         <a-button
           v-if="nowType=='dbflExport'||nowType=='dbExport'"
           type="primary"
-          id="allocateBill-print-back"
+          id="allocateBill-print-export"
           @click="handleSave('export')"
           style="margin-left: 15px;">确定导出</a-button>
       </div>
@@ -104,27 +104,32 @@ export default {
   data () {
     return {
       isShow: this.openModal, //  是否打开弹框
+      // 提交参数
       form: {
-        id: 'all',
-        priceType: 'ALLOCATE_BILL',
-        orderBy: undefined,
+        id: 'all', // 产品分类
+        priceType: 'ALLOCATE_BILL', // 产品价格
+        orderBy: undefined, // 排序
         remarkFlag: 1// 备货打印  1打印 0不打印
       },
-      remarkFlag: true,
+      //
+      remarkFlag: true, // 备货打印
+      // 表单验证规则
       rules: {
         id: [{ required: true, message: '请选择产品分类', trigger: 'change' }],
         priceType: [{ required: true, message: '请选择产品价格', trigger: 'change' }],
         orderBy: [{ required: true, message: '请选择货位编号', trigger: 'change' }]
       },
+      // form表单label布局
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
       spinning: false,
-      typeList: []
+      typeList: []// 产品分类列表数据
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
       let title = ''
       if (this.nowType == 'dbPrint') {
@@ -138,11 +143,13 @@ export default {
       }
       return title
     },
+    // 打印状态
     hidePrint () {
       return this.itemData && this.itemData.printState && this.itemData.printState != 'UNABLE_PRINT' && this.itemData.printState != 'CANCEL_PRINT'
     }
   },
   methods: {
+    // 打印
     onChangeRemark (e) {
       this.remarkFlag = e.target.checked
       this.form.remarkFlag = e.target.checked ? 1 : 0
@@ -214,6 +221,7 @@ export default {
         }
       })
     },
+    // 关闭
     handleClose () {
       this.$emit('close')
       this.$refs.ruleForm.resetFields()

+ 20 - 15
src/views/allocationManagement/transferOut/printStatusModal.vue

@@ -9,7 +9,7 @@
     width="40%">
     <a-spin :spinning="spinning" tip="Loading...">
       <a-form-model
-        id="chooseCustom-form"
+        id="printStatusModal-form"
         ref="ruleForm"
         :model="form"
         :rules="rules"
@@ -22,14 +22,14 @@
           <span>{{ form.targetName }}</span>
         </a-form-model-item>
         <a-form-model-item label="调拨打印:" prop="printStateInfo">
-          <a-radio-group v-model="form.printStateInfo">
-            <a-radio value="NO_PRINT">允许打印</a-radio>
-            <a-radio value="CANCEL_PRINT" v-if="form.printState == 'UNABLE_PRINT'">取消打印</a-radio>
+          <a-radio-group id="printStatusModal-printStateInfo" v-model="form.printStateInfo">
+            <a-radio value="NO_PRINT" id="printStatusModal-printStateInfo1">允许打印</a-radio>
+            <a-radio value="CANCEL_PRINT" v-if="form.printState == 'UNABLE_PRINT'" id="printStatusModal-printStateInfo0">取消打印</a-radio>
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item :wrapper-col="{ span: 12, offset: 6 }" style="text-align: center;margin-top: 50px;">
-          <a-button @click="cancel" style="margin-right: 15px" id="chooseCustom-btn-back">取消</a-button>
-          <a-button type="primary" :loading="confirmLoading" @click="handleSubmit" id="chooseCustom-btn-submit">确定</a-button>
+          <a-button @click="cancel" style="margin-right: 15px" id="printStatusModal-cancel-btn">取消</a-button>
+          <a-button type="primary" :loading="confirmLoading" @click="handleSubmit" id="printStatusModal-submit-btn">确定</a-button>
         </a-form-model-item>
       </a-form-model>
     </a-spin>
@@ -37,6 +37,7 @@
 </template>
 
 <script>
+// 接口
 import { updatePrintState } from '@/api/allocateBill.js'
 export default {
   name: 'PrintModal',
@@ -51,11 +52,11 @@ export default {
   },
   data () {
     return {
-      opened: this.show,
+      opened: this.show, // 打开弹窗
       spinning: false,
-      title: '调拨打印状态',
-
-      confirmLoading: false,
+      title: '调拨打印状态', // 弹窗标题
+      confirmLoading: false, // 确定按钮加载状态
+      // form表单label布局
       formItemLayout: {
         labelCol: {
           span: 6
@@ -64,18 +65,20 @@ export default {
           span: 18
         }
       },
+      // 提交参数
       form: {
-        no: undefined,
+        no: undefined, //
         payerName: undefined,
-        printStatus: '',
-        allocateSn: '',
-        printStateInfo: ''
+        printStatus: '', // 打印状态
+        allocateSn: '', // 调拨单号
+        printStateInfo: ''// 调拨打印状态
       },
+      // 表单验证规则
       rules: { printStateInfo: [{ required: true, message: '请选择调拨打印状态', trigger: 'change' }] }
     }
   },
   methods: {
-    //  保存
+    // 确定保存验证
     handleSubmit () {
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
@@ -86,6 +89,7 @@ export default {
         }
       })
     },
+    // 确定保存
     handleSave () {
       const _this = this
       const ajax_form = {
@@ -105,6 +109,7 @@ export default {
         _this.confirmLoading = false
       })
     },
+    // 关闭
     cancel () {
       this.opened = false
       this.$emit('cancel')

+ 49 - 29
src/views/allocationManagement/transferReturn/basicInfoModal.vue

@@ -1,16 +1,17 @@
 <template>
   <a-modal
     centered
-    class="allocateBill-basicInfo-modal"
+    class="transferReturn-basicInfo-modal"
     :footer="null"
     :maskClosable="false"
     title="新增调拨退货"
     v-model="isShow"
     @cancel="isShow = false"
     :width="800">
+    <!-- 搜索条件 -->
     <a-spin :spinning="spinning" tip="Loading...">
       <a-form-model
-        id="allocateBill-basicInfo-form"
+        id="transferReturn-basicInfo-form"
         ref="ruleForm"
         :model="form"
         :rules="rules"
@@ -21,7 +22,7 @@
           <v-select
             code="TARGET_TYPE"
             showType="radio"
-            id="allocateBill-basicInfo-targetType"
+            id="transferReturn-basicInfo-targetType"
             v-model="form.targetType"
             @change="targetTypeChange"
             allowClear
@@ -31,7 +32,7 @@
           <a-select
             v-if="isDealer"
             show-search
-            id="allocateBill-basicInfo-dealerName"
+            id="transferReturn-basicInfo-dealerName"
             v-model="form.targetSn"
             placeholder="请输入名称搜索经销商"
             :filter-option="false"
@@ -40,20 +41,32 @@
             @change="handleChange"
           >
             <a-spin v-if="fetching" slot="notFoundContent" size="small" />
-            <a-select-option v-for="item in dealerData" :key="item.dealerSn" :value="item.dealerSn">{{ item.dealerName }}</a-select-option>
+            <a-select-option v-for="item in dealerData" :id="'basicInfo-dealerName'+item.dealerSn" :key="item.dealerSn" :value="item.dealerSn">{{ item.dealerName }}</a-select-option>
           </a-select>
-          <department v-else-if="isDepartment" style="width: 100%;" placeholder="请选择部门" @change="departementChange" v-model="form.targetSn"></department>
-          <a-input v-else v-model.trim="form.targetName" placeholder="请输入调拨退货对象名称(最多30个字符)" allowClear :maxLength="30" />
+          <department
+            v-else-if="isDepartment"
+            id="transferReturn-basicInfo-targetSn"
+            style="width: 100%;"
+            placeholder="请选择部门"
+            @change="departementChange"
+            v-model="form.targetSn"></department>
+          <a-input
+            id="transferReturn-basicInfo-targetName"
+            v-else
+            v-model.trim="form.targetName"
+            placeholder="请输入调拨退货对象名称(最多30个字符)"
+            allowClear
+            :maxLength="30" />
         </a-form-model-item>
         <a-form-model-item label="费用/调拨退货类型" prop="costTypeSn">
-          <AllocateType id="allocateBill-basicInfo-allocateTypeSn" v-model="allocateTypeVal" placeholder="请选择费用/调拨退货类型" @change="allocateTypeChange"></AllocateType>
+          <AllocateType id="transferReturn-basicInfo-allocateTypeVal" v-model="allocateTypeVal" placeholder="请选择费用/调拨退货类型" @change="allocateTypeChange"></AllocateType>
         </a-form-model-item>
         <a-form-model-item label="是否抓单" prop="grabFlag">
           <v-select
             code="FLAG"
             showType="radio"
             :disabled="form.targetType !== 'DEALER'"
-            id="allocateBill-basicInfo-grabFlag"
+            id="transferReturn-basicInfo-grabFlag"
             v-model="form.grabFlag"
             allowClear
             placeholder="请选择"></v-select>
@@ -61,17 +74,17 @@
         <a-form-model-item label="调入仓库" prop="warehouseSn">
           <warehouse
             v-model="form.warehouseSn"
-            id="allocateBill-basicInfo-warehouseSn"
+            id="transferReturn-basicInfo-warehouseSn"
             placeholder="请选择调入仓库"
           />
         </a-form-model-item>
         <a-form-model-item label="备注" prop="remark">
-          <a-textarea id="allocateBill-basicInfo-remark" :maxLength="120" v-model="form.remarks" placeholder="请输入备注(最多120个字符)" allowClear />
+          <a-textarea id="transferReturn-basicInfo-remark" :maxLength="120" v-model="form.remarks" placeholder="请输入备注(最多120个字符)" allowClear />
         </a-form-model-item>
       </a-form-model>
       <div class="btn-cont">
-        <a-button type="primary" id="allocateBill-basicInfo-modal-save" @click="handleSave">保存</a-button>
-        <a-button id="allocateBill-basicInfo-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+        <a-button type="primary" id="transferReturn-basicInfo-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="transferReturn-basicInfo-modal-cancel" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
       </div>
     </a-spin>
   </a-modal>
@@ -80,12 +93,14 @@
 <script>
 import { commonMixin } from '@/utils/mixin'
 import debounce from 'lodash/debounce'
+// 组件
 import { VSelect } from '@/components'
-import { allocateReturnSave, allocateReturnQueryBySn } from '@/api/allocateReturn'
 import department from '@/views/expenseManagement/expenseReimbursement/department.js'
 import warehouse from '@/views/common/chooseWarehouse.js'
-import { dealerSubareaScopeList } from '@/api/dealer'
 import AllocateType from '@/views/common/allocateType.js'
+// 接口
+import { dealerSubareaScopeList } from '@/api/dealer'
+import { allocateReturnSave, allocateReturnQueryBySn } from '@/api/allocateReturn'
 export default {
   name: 'TransferOutBasicInfoModal',
   components: { VSelect, AllocateType, department, warehouse },
@@ -102,22 +117,25 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // form表单label布局
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 20 }
       },
-      allocateTypeVal: [],
+      allocateTypeVal: [], // 费用/调拨退货类型  下拉数据
+      // 提交参数
       form: {
-        targetType: 'DEALER',
-        targetSn: undefined,
-        targetName: '',
-        costTypeSn: undefined,
-        allocateSortSn: undefined,
-        allocateReturnTypeSn: undefined,
-        warehouseSn: undefined,
-        grabFlag: '1',
-        remarks: ''
+        targetType: 'DEALER', // 调往对象
+        targetSn: undefined, // 调往对象sn
+        targetName: '', // 调往对象名称
+        costTypeSn: undefined, // 费用/调拨退货类型sn
+        allocateSortSn: undefined, // 调拨对象sn
+        allocateReturnTypeSn: undefined, // 调拨类别sn
+        warehouseSn: undefined, // 出库仓库
+        grabFlag: '1', // 是否抓单 1是 0否
+        remarks: ''// 备注
       },
+      // 表单验证规则
       rules: {
         targetType: [{ required: true, message: '请选择调往对象', trigger: 'change' }],
         targetSn: [{ required: true, message: '请选择调往对象名称', trigger: 'change' }],
@@ -126,7 +144,7 @@ export default {
         grabFlag: [{ required: true, message: '请选择是否抓单', trigger: 'change' }],
         warehouseSn: [{ required: true, message: '请选择调入仓库', trigger: 'change' }]
       },
-      fetching: false,
+      fetching: false, // 经销商名称搜索 状态
       dealerData: [] //  经销商  下拉数据
     }
   },
@@ -160,9 +178,10 @@ export default {
       this.form.targetName = this.dealerData[ind].dealerName
       this.form.warehouseSn = this.dealerData[ind].defaultWarehouseSn
     },
+    // 选择部门
     departementChange (v, row) {
-       console.log(v,row)
-       this.form.targetName = row.name
+      console.log(v, row)
+      this.form.targetName = row.name
     },
     // 调拨类别 change
     allocateTypeChange (val, opt) {
@@ -221,6 +240,7 @@ export default {
       this.form.targetType = val
       this.form.grabFlag = val != 'DEALER' ? '0' : '1'
     },
+    // 重置
     resetForm () {
       this.$refs.ruleForm.resetFields()
       this.form = {
@@ -254,7 +274,7 @@ export default {
 </script>
 
 <style lang="less">
-.allocateBill-basicInfo-modal {
+.transferReturn-basicInfo-modal {
 	.ant-modal-body {
 		padding: 40px 40px 24px;
 	}

+ 37 - 29
src/views/allocationManagement/transferReturn/check.vue

@@ -1,17 +1,24 @@
 <template>
-  <div class="salesReturnCheck-wrap">
+  <div class="transferReturnCheck-wrap">
     <a-spin :spinning="spinning" tip="Loading...">
-      <a-page-header :ghost="false" :backIcon="false" class="salesReturnCheck-back" >
+      <a-page-header :ghost="false" :backIcon="false" class="transferReturnCheck-back" >
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
-          <a id="salesReturnCheck-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
+          <a id="transferReturnCheck-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
           <span style="margin: 0 15px;color: #666;">调拨退货对象名称:{{ ordeDetail&&ordeDetail.targetName || '--' }} ({{ ordeDetail&&ordeDetail.grabFlag==1 ? '抓单' : '不抓单' }})</span>
         </template>
       </a-page-header>
       <a-card size="small" :bordered="false" class="salesReturnCheck-cont">
         <div>
-          <a-button type="primary" :loading="loading" class="button-info" @click="backStock('BATCH_BACK','批量返库')">批量返库</a-button>
-          <a-button v-if="grabFlag==1" type="default" :loading="loading" style="margin-right: 15px;" @click="backStock('BATCH_BAD','批量坏件')">批量坏件</a-button>
+          <!-- 操作按钮 -->
+          <a-button type="primary" id="transferReturnCheck-backStock" :loading="loading" class="button-info" @click="backStock('BATCH_BACK','批量返库')">批量返库</a-button>
+          <a-button
+            v-if="grabFlag==1"
+            id="transferReturnCheck-badStock"
+            type="default"
+            :loading="loading"
+            style="margin-right: 15px;"
+            @click="backStock('BATCH_BAD','批量坏件')">批量坏件</a-button>
           <span>已选 {{ rowSelectionInfo&&rowSelectionInfo.selectedRows.length }} 项</span>
         </div>
         <!-- 已选配件列表 -->
@@ -37,6 +44,7 @@
               v-model="record.backStockQty"
               :precision="0"
               :min="0"
+              :id="'transferReturnCheck-returnQty'+record.ids"
               :max="record.returnQty"
               placeholder="请输入"
               @blur="e => onCellBlur(e.target.value, record)"
@@ -54,55 +62,52 @@
         type="primary"
         class="button-primary"
         @click="handleSubmit()"
-        id="salesReturn-handleSubmit">提交</a-button>
+        id="transferReturnCheck-handleSubmit">提交</a-button>
     </div>
   </div>
 </template>
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
-import {
-  allocReturnDetailQueryPage,
-  allocateReturnQueryBySn,
-  allocateReturnCheckSubmit,
-  allocateReturnCheck
-} from '@/api/allocateReturn'
+import { allocReturnDetailQueryPage, allocateReturnQueryBySn, allocateReturnCheckSubmit, allocateReturnCheck } from '@/api/allocateReturn'
 export default {
   name: 'TransferReturnCheck',
   mixins: [commonMixin],
-  components: {
-    STable,
-    VSelect
-  },
+  components: { STable, VSelect },
   data () {
     return {
       spinning: false,
       tableHeight: 0, // 表格高度
-      orderSn: null,
-      grabFlag: null,
-      disabled: false,
+      orderSn: null, // 调拨退货sn
+      grabFlag: null, // 是否抓单 0否 1是
+      disabled: false, // 查询、重置按钮是否可操作
       isInster: false, // 是否正在添加产品
-      ordeDetail: { discountAmount: 0 },
-      loading: false,
-      // 已选产品
-      dataSource: [],
+      ordeDetail: {
+        discountAmount: 0 // 折扣金额
+      }, // 单据详细数据
+      loading: false, // 操作按钮加载状态
+      dataSource: [], // 已选产品
+      // 产品信息数据
       productForm: {
-        allocateReturnSn: ''
+        allocateReturnSn: '' // 调拨退货sn
       },
-      chooseLoadData: [],
+      chooseLoadData: [], // 已选列表数据
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
-        // 查询总计
+        // 获取列表数据 有分页
         this.productForm.allocateReturnSn = this.$route.params.sn
         return allocReturnDetailQueryPage(Object.assign(parameter, this.productForm)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
+              // 重组列表数据名称
               data.list[i].ids = data.list[i].no + '-' + data.list[i].productSn
               data.list[i].badQty = (data.list[i].badQty || data.list[i].badQty == 0) ? data.list[i].badQty : data.list[i].returnQty
               data.list[i].backStockQty = data.list[i].backStockQty || 0
@@ -114,10 +119,11 @@ export default {
           return data
         })
       },
-      rowSelectionInfo: null
+      rowSelectionInfo: null// 已选数据
     }
   },
   computed: {
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -133,8 +139,8 @@ export default {
       if (this.grabFlag == 1) { //  抓单
         arr.splice(1, 0, { title: '调拨单号', dataIndex: 'allocateNo', width: '12%', align: 'center', customRender: function (text) { return text || '--' } })
       }
-      if(this.$hasPermissions('M_transferReturnCheck_salesPrice')){
-        arr.splice(this.grabFlag == 1?8:7,0,{ title: '退货单价', dataIndex: 'price', align: 'right', width: '10%', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+      if (this.$hasPermissions('M_transferReturnCheck_salesPrice')) {
+        arr.splice(this.grabFlag == 1 ? 8 : 7, 0, { title: '退货单价', dataIndex: 'price', align: 'right', width: '10%', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
       }
       return arr
     }
@@ -233,6 +239,7 @@ export default {
         }
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -243,6 +250,7 @@ export default {
       this.$refs.table.clearTable()
       this.getOrderDetail()
     },
+    // 计算表格高度
     setTableH () {
       this.tableHeight = window.innerHeight - 340
     }

+ 5 - 3
src/views/allocationManagement/transferReturn/chooseImportModal.vue

@@ -68,6 +68,7 @@
 <script>
 import { commonMixin } from '@/utils/mixin'
 import { hdExportExcel } from '@/libs/exportExcel'
+// 接口
 import { allocateBillParseProducts, allocateBillFailExcel } from '@/api/allocateBill'
 export default {
   name: 'TransferReturnImportModal',
@@ -104,12 +105,13 @@ export default {
         { title: '单位', dataIndex: 'productUnit', width: 60, align: 'center', customRender: function (text) { return text || '--' } },
         { title: '备注', dataIndex: 'errorDesc', width: 180, align: 'center', customRender: function (text) { return text || '--' } }
       ],
-      loadData: [],
-      unLoadData: [],
-      loading: false
+      loadData: [], // 可导入数据
+      unLoadData: [], // 导入错误数据
+      loading: false// 表格加载状态
     }
   },
   methods: {
+    // 获取导入数据
     getData () {
       const _this = this
       this.loading = true

+ 15 - 7
src/views/allocationManagement/transferReturn/detail.vue

@@ -96,8 +96,10 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import print from './print.vue'
+// 接口
 import { allocReturnDetailQueryPage, allocateReturnQueryBySn } from '@/api/allocateReturn'
 export default {
   name: 'TransferReturnDetail',
@@ -108,11 +110,11 @@ export default {
       type: [Number, String],
       default: ''
     },
-    showPrice: {
+    showPrice: {// 是否显示价格
       type: Boolean,
       default: false
     },
-    pageType: {
+    pageType: {// 页面类型
       type: String,
       default: 'pages'
     }
@@ -123,10 +125,12 @@ export default {
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
+        // 获取列表数据 有分页
         return allocReturnDetailQueryPage(Object.assign(parameter, { allocateReturnSn: this.outBizSn || this.$route.params.sn })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -138,17 +142,17 @@ export default {
         })
       },
       basicInfoData: null, //  基本信息
-      localDataSource: [],
-      openModal: false,
-      nowType: null,
-      showDetail: true,
-      tableHeight: 0
+      localDataSource: [], // 表格数据
+      showDetail: true, // 显示隐藏基础信息
+      tableHeight: 0// 表格高度
     }
   },
   computed: {
+    // 是否可编辑基础信息
     isEdit () {
       return this.basicInfoData && ((this.basicInfoData.state == 'WAIT_SUBMIT') || (this.basicInfoData.state == 'FINANCIAL_REJECT') || (this.basicInfoData.state == 'AUDIT_REJECT')) && this.$hasPermissions('B_transferReturnEdit')
     },
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -173,6 +177,7 @@ export default {
     }
   },
   watch: {
+    // 显示隐藏基础信息  监听表格高度变化
     showDetail (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -182,6 +187,7 @@ export default {
     '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
       this.setTableH()
     },
+    // 根据页面类型计算表格高度
     outBizSn (newValue, oldValue) {
       if (newValue) {
         this.pageInit()
@@ -208,6 +214,7 @@ export default {
       const row = this.basicInfoData
       this.$router.push({ name: row.grabFlag == 1 ? 'transferReturnGrpEdit' : 'transferReturnEdit', params: { sn: row.allocateReturnSn, targetType: row.targetType, dealerLevel: row.dealerLevel } })
     },
+    // 初始化
     pageInit () {
       if (this.outBizSn || this.$route.params.sn) {
         this.$refs.table.refresh(true)
@@ -215,6 +222,7 @@ export default {
         this.setTableH()
       }
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 285

+ 52 - 38
src/views/allocationManagement/transferReturn/edit.vue

@@ -1,13 +1,13 @@
 <template>
-  <div class="allocateBillEdit-wrap">
+  <div class="transferReturnEdit-wrap">
     <!-- <a-spin :spinning="spinning" tip="Loading..."> -->
     <div class="ant-spin-nested-loading">
-      <a-page-header :ghost="false" :backIcon="false" class="allocateBillEdit-back" >
+      <a-page-header :ghost="false" :backIcon="false" class="transferReturnEdit-back" >
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
-          <a id="allocateBillEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
+          <a id="transferReturnEdit-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
           <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ basicInfoData&&basicInfoData.allocateReturnNo }}</span>
-          <a-button type="link" class="button-default" @click="showDetail=!showDetail">
+          <a-button id="transferReturnEdit-showDetail" type="link" class="button-default" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
@@ -16,7 +16,7 @@
           <print :params="{allocateReturnSn: allocateReturnSn}" :basicInfoData="basicInfoData" :disabled="localDataSource.length==0" @loading="spinning=true" @unloading="spinning=false"></print>
         </template>
       </a-page-header>
-      <a-card size="small" :bordered="false" v-if="basicInfoData" class="allocateBillEdit-cont" v-show="showDetail">
+      <a-card size="small" :bordered="false" v-if="basicInfoData" class="transferReturnEdit-cont" v-show="showDetail">
         <a-descriptions :column="3">
           <a-descriptions-item label="调拨退货单号">{{ (basicInfoData&&basicInfoData.allocateReturnNo) || '--' }}</a-descriptions-item>
           <a-descriptions-item label="调拨退货对象">{{ (basicInfoData&&basicInfoData.targetTypeDictValue) || '--' }}</a-descriptions-item>
@@ -34,7 +34,7 @@
           </a-descriptions-item>
           <a-descriptions-item label="费用/调拨退货类型">
             <AllocateType
-              id="allocateEdit-allocateReturnTypeSn"
+              id="transferReturnEdit-allocateTypeVal"
               style="width: 220px;"
               v-model="allocateTypeVal"
               :allowClear="false"
@@ -50,24 +50,24 @@
         </a-descriptions>
       </a-card>
       <!-- 选择产品 -->
-      <a-card size="small" title="选择产品" :bordered="false" class="allocateBillEdit-cont">
+      <a-card size="small" title="选择产品" :bordered="false" class="transferReturnEdit-cont">
         <!-- 筛选条件 -->
         <div class="table-page-search-wrapper">
-          <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-form layout="inline" id="transferReturnEdit-form" @keyup.enter.native="$refs.table.refresh(true)">
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-item label="产品编码" prop="productCode">
-                  <a-input id="allocateBillEdit-productCode" v-model.trim="queryParam.productCode" placeholder="请输入产品编码" allowClear />
+                  <a-input id="transferReturnEdit-productCode" v-model.trim="queryParam.productCode" placeholder="请输入产品编码" allowClear />
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="产品名称" prop="productName">
-                  <a-input id="allocateBillEdit-productName" v-model.trim="queryParam.productName" placeholder="请输入产品名称" allowClear />
+                  <a-input id="transferReturnEdit-productName" v-model.trim="queryParam.productName" placeholder="请输入产品名称" allowClear />
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="storeTransferOutList-refresh">查询</a-button>
-                <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="storeTransferOutList-reset">重置</a-button>
+                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="transferReturnEdit-refresh">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="transferReturnEdit-reset">重置</a-button>
               </a-col>
             </a-row>
           </a-form>
@@ -80,6 +80,7 @@
           index="0"
           tableId="table1"
           :rowKey="(record) => record.stockSn"
+          rowKeyName="stockSn"
           :columns="columns"
           :customRow="handleClickRow"
           :data="loadData"
@@ -97,6 +98,7 @@
               v-model="record.priceLevel"
               allowClear
               placeholder="请选择价格级别"
+              :id="'transferReturnEdit-priceLevel'+record.stockSn"
               @change="e => handlePriceLevel(e,index)"></v-select>
           </template>
           <!-- 退货单价 -->
@@ -113,6 +115,7 @@
                 :min="1"
                 :max="99999999"
                 placeholder="请输入"
+                :id="'transferReturnEdit-qty'+record.stockSn"
                 style="width: 100%;" />
             </div>
           </template>
@@ -124,13 +127,13 @@
               v-if="record.lastStockCost"
               class="button-primary"
               @click="handleAdd(record)"
-              id="allocateBillEdit-add-btn">添加</a-button>
+              :id="'transferReturnEdit-add-btn'+record.stockSn">添加</a-button>
             <span v-else>--</span>
           </template>
         </s-table>
       </a-card>
       <!-- 已选产品 -->
-      <a-card size="small" title="已选产品" :bordered="false" class="allocateBillEdit-cont">
+      <a-card size="small" title="已选产品" :bordered="false" class="transferReturnEdit-cont">
         <!-- 总计 -->
         <a-alert type="info" style="margin-bottom:10px">
           <div slot="message">
@@ -155,8 +158,8 @@
                     </a-form-item>
                   </a-col>
                   <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="storeTransferOutList-refresh">查询</a-button>
-                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm" :disabled="chooseDisabled" id="storeTransferOutList-reset">重置</a-button>
+                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="editGrap-refresh">查询</a-button>
+                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm" :disabled="chooseDisabled" id="editGrap-reset">重置</a-button>
                   </a-col>
                 </a-row>
               </a-form>
@@ -185,6 +188,7 @@
             <a-input-number
               size="small"
               v-model="record.returnQty"
+              :id="'editGrap-returnQty'+record.id"
               :precision="0"
               :min="1"
               :max="99999999"
@@ -194,7 +198,7 @@
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
-            <a-button size="small" type="link" class="button-error" @click="handleDel(record)" id="allocateBillEdit-del-btn">删除</a-button>
+            <a-button size="small" type="link" class="button-error" @click="handleDel(record)" :id="'transferReturnEdit-del-btn'+record.id">删除</a-button>
           </template>
         </s-table>
       </a-card>
@@ -203,7 +207,7 @@
     <div class="affix-cont">
       <a-button
         type="primary"
-        id="allocateBillEdit-submit"
+        id="transferReturnEdit-submit"
         size="large"
         :disabled="spinning"
         class="button-primary"
@@ -224,14 +228,15 @@
       @cancel="editRemark = false"
       :width="600">
       <a-textarea
+        id="transferReturnEdit-remarks"
         v-model="basicInfoData.remarks"
         placeholder="请输入备注(最多120个字符)"
         :maxLength="120"
         :auto-size="{ minRows: 3, maxRows: 5 }"
       />
       <div class="btn-cont">
-        <a-button type="primary" id="allocateBill-basicInfo-modal-save" @click="handleEditRemark">保存</a-button>
-        <a-button id="allocateBill-basicInfo-modal-back" @click="editRemark = false" style="margin-left: 15px;">取消</a-button>
+        <a-button type="primary" id="transferReturnEdit-save" @click="handleEditRemark">保存</a-button>
+        <a-button id="transferReturnEdit-cancel" @click="editRemark = false" style="margin-left: 15px;">取消</a-button>
       </div>
     </a-modal>
   </div>
@@ -239,11 +244,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 // import ImportGuideModal from './importGuideModal.vue'
 import print from './print.vue'
 import warehouse from '@/views/common/chooseWarehouse.js'
 import AllocateType from '@/views/common/allocateType.js'
+// 接口
 import {
   allocateReturnSave,
   allocReturnDetailQueryPage,
@@ -264,21 +271,23 @@ export default {
     const _this = this
     return {
       spinning: false,
+      // 查询条件
       queryParam: {
-        productCode: '',
-        productName: '',
-        productOrigCode: ''
+        productCode: '', // 产品编码
+        productName: '', // 产品名称
+        productOrigCode: ''// 原厂编码
       },
+      // 已选列表查询条件
       chooseQueryParam: {
-        productCode: '',
-        productName: ''
+        productCode: '', // 产品编码
+        productName: '' // 产品名称
       },
-      editRemark: false,
+      editRemark: false, // 编辑备注
       disabled: false, //  查询、重置按钮是否可操作
-      loading: false,
+      loading: false, // 加载状态
       chooseDisabled: false, //  查询、重置按钮是否可操作
       advanced: false, // 高级搜索 展开/关闭
-      dealerLevel: '',
+      dealerLevel: '', // 经销商等级
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
@@ -286,8 +295,10 @@ export default {
         const dealerLevel = _this.dealerLevel == 'OTHER' ? undefined : _this.dealerLevel
         const dealerSnInfo = _this.dealerLevel != 'OTHER' ? _this.basicInfoData.dealerEntity.dealerSn : undefined
         const ajaxName = _this.basicInfoData.targetType === 'DEALER' ? queryStockProductPage : stockQueryStockProductPage
+        // 获取列表数据  有分页
         return ajaxName(Object.assign(parameter, this.queryParam, { dealerLevel: dealerLevel === '0' ? '' : dealerLevel, warehouseSn: warehouseSn, dealerSn: dealerSnInfo })).then(res => {
           const data = res.data
+          // 计算表格序号
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -303,15 +314,17 @@ export default {
           return data
         })
       },
-      loadDataSource: [],
-      localDataSource: [],
-      allocateReturnSn: '',
+      loadDataSource: [], // 列表数据
+      localDataSource: [], // 已选列表数据
+      allocateReturnSn: '', // 调拨退货sn
       // 加载数据方法 必须为 Promise 对象
       chooseLoadData: parameter => {
         this.chooseDisabled = true
+        // 获取已选列表数据  有分页
         const params = Object.assign(parameter, { product: { name: this.chooseQueryParam.productName, code: this.chooseQueryParam.productCode }, allocateReturnSn: this.allocateReturnSn })
         return allocReturnDetailQueryPage(params).then(res => {
           const data = res.data
+          // 计算表格序号
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -325,13 +338,12 @@ export default {
       },
       basicInfoData: null, // 基本信息
       openGuideModal: false, //  导入产品引导
-      openModal: false,
-      nowType: null,
-      allocateTypeVal: [],
-      showDetail: false
+      allocateTypeVal: [], // 费用/调拨退货类型 列表数据
+      showDetail: false// 显示隐藏基础信息
     }
   },
   computed: {
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -349,6 +361,7 @@ export default {
       }
       return arr
     },
+    // 已选数据表头
     chooseColumns () {
       const _this = this
       const arr = [
@@ -582,6 +595,7 @@ export default {
       this.getDetail(true)
       this.$refs.chooseTable.refresh()
     },
+    // 初始化
     pageInit () {
       this.allocateReturnSn = this.$route.params.sn
       this.refashPage()
@@ -605,7 +619,7 @@ export default {
 </script>
 
 <style lang="less">
-  .allocateBillEdit-wrap{
+  .transferReturnEdit-wrap{
     position: relative;
     height: 100%;
     box-sizing: border-box;
@@ -614,13 +628,13 @@ export default {
       height: 100%;
       padding-bottom: 51px;
     }
-    .allocateBillEdit-back{
+    .transferReturnEdit-back{
       margin-bottom: 6px;
       .ant-page-header-heading-sub-title{
         margin:0;
       }
     }
-    .allocateBillEdit-cont{
+    .transferReturnEdit-cont{
       margin-bottom: 6px;
       .sub-title{
         font-size: 12px;

+ 45 - 40
src/views/allocationManagement/transferReturn/editGrp.vue

@@ -7,7 +7,7 @@
         <template slot="subTitle">
           <a id="editGrap-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
           <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ basicInfoData&&basicInfoData.allocateReturnNo }}</span>
-          <a-button type="link" class="button-default" @click="showDetail=!showDetail">
+          <a-button type="link" id="editGrap-showDetail" class="button-default" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
@@ -35,7 +35,7 @@
             </a-descriptions-item>
             <a-descriptions-item label="费用/调拨退货类型">
               <AllocateType
-                id="allocateEdit-allocateReturnTypeSn"
+                id="editGrap-allocateTypeVal"
                 style="width: 220px;"
                 v-model="allocateTypeVal"
                 placeholder="请选择费用/调拨退货类型"
@@ -58,7 +58,7 @@
             <a-button
               type="primary"
               class="button-info"
-              id="salesEdit-plDel-btn"
+              id="editGrap-plAdd"
               @click="handleBatchAdd">批量添加</a-button>
             <span>已选{{ selectTotal }}项</span>
           </div>
@@ -80,8 +80,8 @@
                 </a-form-item>
               </a-col>
               <a-col :md="4" :sm="24" style="margin-bottom: 10px;">
-                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="storeTransferOutList-refresh">查询</a-button>
-                <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="storeTransferOutList-reset">重置</a-button>
+                <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="editGrap-refresh">查询</a-button>
+                <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="editGrap-reset">重置</a-button>
               </a-col>
             </a-row>
           </a-form>
@@ -116,13 +116,14 @@
                 </div>
               </template> -->
           <!-- 本次可退数量 -->
-          <template slot="returnNumber" slot-scope="text, record,index">
+          <template slot="returnNumber" slot-scope="text, record">
             <a-input-number
               v-if="record.refundableQty!=0"
               size="small"
               v-model="record.returnableQty"
               :precision="0"
               :min="0"
+              :id="'editGrap-refundableQty-'+record.allocateNo +'-'+ record.productSn"
               :max="record.refundableQty"
               placeholder="请输入"
               style="width: 100%;" />
@@ -135,8 +136,8 @@
               v-if="record.refundableQty"
               type="link"
               class="button-primary"
-              @click="handleAdd(record)"
-              id="editGrap-add-btn">添加</a-button>
+              :id="'editGrap-add-btn-'+record.allocateNo +'-'+ record.productSn"
+              @click="handleAdd(record)">添加</a-button>
             <span v-else>--</span>
           </template>
         </s-table>
@@ -158,17 +159,17 @@
                 <a-row :gutter="15">
                   <a-col :md="9" :sm="24">
                     <a-form-item label="产品编码" prop="productCode">
-                      <a-input id="editGrap-productCode" v-model.trim="chooseQueryParam.productCode" placeholder="请输入产品编码" allowClear />
+                      <a-input id="editGrap-choosed-productCode" v-model.trim="chooseQueryParam.productCode" placeholder="请输入产品编码" allowClear />
                     </a-form-item>
                   </a-col>
                   <a-col :md="9" :sm="24">
                     <a-form-item label="产品名称" prop="productName">
-                      <a-input id="editGrap-productName" v-model.trim="chooseQueryParam.productName" placeholder="请输入产品名称" allowClear />
+                      <a-input id="editGrap-choosed-productName" v-model.trim="chooseQueryParam.productName" placeholder="请输入产品名称" allowClear />
                     </a-form-item>
                   </a-col>
                   <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="storeTransferOutList-refresh">查询</a-button>
-                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm" :disabled="chooseDisabled" id="storeTransferOutList-reset">重置</a-button>
+                    <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="chooseDisabled" id="editGrap-choosed-refresh">查询</a-button>
+                    <a-button style="margin-left: 8px" @click="chooseResetSearchForm" :disabled="chooseDisabled" id="editGrap-choosed-reset">重置</a-button>
                   </a-col>
                 </a-row>
               </a-form>
@@ -228,7 +229,7 @@
     <!-- 修改基础信息 -->
     <a-modal
       centered
-      wrapClassName="allocateBill-editRemark-modal"
+      wrapClassName="transferReturn-editRemark-modal"
       v-if="basicInfoData"
       :footer="null"
       :maskClosable="false"
@@ -243,8 +244,8 @@
         :auto-size="{ minRows: 3, maxRows: 5 }"
       />
       <div class="btn-cont">
-        <a-button type="primary" id="allocateBill-basicInfo-modal-save" @click="handleEditRemark">保存</a-button>
-        <a-button id="allocateBill-basicInfo-modal-back" @click="editRemark = false" style="margin-left: 15px;">取消</a-button>
+        <a-button type="primary" id="transferReturn-editGrp-modal-save" @click="handleEditRemark">保存</a-button>
+        <a-button id="transferReturn-editGrp-modal-cancel" @click="editRemark = false" style="margin-left: 15px;">取消</a-button>
       </div>
     </a-modal>
   </div>
@@ -252,22 +253,15 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+//组件
 import { STable, VSelect } from '@/components'
 // import ImportGuideModal from './importGuideModal.vue'
 import print from './print.vue'
 import warehouse from '@/views/common/chooseWarehouse.js'
-import { allocDetailQueryPageForReturn } from '@/api/allocateBill'
 import AllocateType from '@/views/common/allocateType.js'
-import {
-  allocateReturnSave,
-  allocReturnDetailQueryPage,
-  allocateReturnQueryBySn,
-  allocReturnDetailInsert,
-  allocReturnDetailUpdate,
-  allocateReturnSubmit,
-  allocReturnDetailDelete,
-  allocReturnDetailInsertBatch
-} from '@/api/allocateReturn'
+//接口
+import { allocDetailQueryPageForReturn } from '@/api/allocateBill'
+import {allocateReturnSave, allocReturnDetailQueryPage, allocateReturnQueryBySn,allocReturnDetailInsert,allocReturnDetailUpdate,allocateReturnSubmit, allocReturnDetailDelete,allocReturnDetailInsertBatch} from '@/api/allocateReturn'
 
 export default {
   name: 'TransferReturnGrpEdit',
@@ -276,30 +270,34 @@ export default {
   data () {
     return {
       spinning: false,
-      showDetail: false,
+      showDetail: false,//控制基础信息显示
+      // 查询条件
       queryParam: {
-        productCode: '',
-        productName: '',
-        allocateNo: ''
+        productCode: '',//产品编码
+        productName: '',//产品名称
+        allocateNo: ''//调拨单号
       },
+      //已选产品查询条件
       chooseQueryParam: {
-        productCode: '',
-        productName: ''
+        productCode: '',//产品编码
+        productName: ''//产品名称
       },
-      editRemark: false,
+      editRemark: false,//编辑备注
       disabled: false, //  查询、重置按钮是否可操作
-      loading: false,
+      loading: false,//表格加载状态
       chooseDisabled: false, //  查询、重置按钮是否可操作
       advanced: false, // 高级搜索 展开/关闭
-      allocateReturnSn: '',
+      allocateReturnSn: '',//调拨sn
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         const targetSn = this.basicInfoData.targetSn
         const allocateNo = this.queryParam.allocateNo
+        //获取待选产品列表  有分页
         const otherParams = { allocateBill: { targetType: this.basicInfoData.targetType, targetSn: targetSn, allocateNo: allocateNo } }
         return allocDetailQueryPageForReturn(Object.assign(parameter, this.queryParam, otherParams)).then(res => {
           const data = res.data
+          //计算表格序号 优化表格数据
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -312,14 +310,16 @@ export default {
           return data
         })
       },
-      loadDataSource: [],
-      localDataSource: [],
+      loadDataSource: [],//待选表格数据
+      localDataSource: [],//已选表格数据
       // 加载数据方法 必须为 Promise 对象
       chooseLoadData: parameter => {
         this.chooseDisabled = true
+        //获取已选表格数据  有分页
         const params = Object.assign(parameter, { product: { name: this.chooseQueryParam.productName, code: this.chooseQueryParam.productCode }, allocateReturnSn: this.allocateReturnSn })
         return allocReturnDetailQueryPage(params).then(res => {
           const data = res.data
+          //计算表格序号
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
@@ -332,14 +332,16 @@ export default {
       },
       basicInfoData: null, // 基本信息
       openGuideModal: false, //  导入产品引导
-      rowSelectionInfo: null,
-      allocateTypeVal: []
+      rowSelectionInfo: null,//已选表格数据
+      allocateTypeVal: []//调拨退货类型列表
     }
   },
   computed: {
+    //计算所选条数
     selectTotal () {
       return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length || 0
     },
+    //表头
     columns () {
       const _this = this
       const arr = [
@@ -358,6 +360,7 @@ export default {
       arr.splice(5, 0, { title: '调拨单价', dataIndex: 'price', width: '10%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
       return arr
     },
+    //已选列表表头
     chooseColumns () {
       const _this = this
       const arr = [
@@ -420,6 +423,7 @@ export default {
         }
       })
     },
+    //添加成功后的操作提示
     showFailMessage (data) {
       const h = this.$createElement
       const htmlStr = [h('p', data.message)]
@@ -634,6 +638,7 @@ export default {
       this.$refs.table.refresh()
       this.$refs.chooseTable.refresh()
     },
+    //初始化
     pageInit () {
       this.allocateReturnSn = this.$route.params.sn
       this.getDetail()
@@ -695,7 +700,7 @@ export default {
       }
     }
   }
-  .allocateBill-editRemark-modal{
+  .transferReturn-editRemark-modal{
     .btn-cont{
       text-align: center;
       padding-top: 20px;

+ 14 - 5
src/views/allocationManagement/transferReturn/importGuideModal.vue

@@ -19,7 +19,13 @@
             <li>2) 除了“产品编码”、“数量”两列,其他列可自定义,不影响数据导入</li>
             <li>3) 如果导入的产品已经存在,则不会导入该行</li>
           </ul>
-          <a-button type="link" icon="download" style="padding: 0 0 0 23px;" :loading="exportLoading" @click="handleExport">下载导入模板</a-button>
+          <a-button
+            id="importGuide-download"
+            type="link"
+            icon="download"
+            style="padding: 0 0 0 23px;"
+            :loading="exportLoading"
+            @click="handleExport">下载导入模板</a-button>
         </div>
         <div class="explain-item">
           <div class="explain-tit">
@@ -64,8 +70,10 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import ChooseImportModal from './chooseImportModal.vue'
 import { Upload } from '@/components'
+// 接口
 import { allocateBillDownload } from '@/api/allocateBill'
 export default {
   name: 'TransferReturnImportGuideModal',
@@ -85,12 +93,12 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       openImportModal: false, //  导入
-      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload',
-      paramsData: null,
-      uploadParams: {
+      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload', // 上传文件地址
+      paramsData: null, // 上传文件参数
+      uploadParams: {// 上传文件参数
         savePathType: 'local'
       },
-      exportLoading: false
+      exportLoading: false// 导出按钮加载状态
     }
   },
   methods: {
@@ -146,6 +154,7 @@ export default {
         }
       })
     },
+    // 下载模板
     download (data) {
       if (!data) { return }
       const url = window.URL.createObjectURL(new Blob([data]))

+ 34 - 24
src/views/allocationManagement/transferReturn/list.vue

@@ -3,11 +3,11 @@
     <a-card size="small" :bordered="false" class="searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="transferReturn-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+                <rangeDate ref="rangeDate" id="transferReturn-time" :value="time" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
@@ -49,7 +49,7 @@
               </a-col>
               <a-col :md="6" :sm="24" v-show="isShowCustomerSearch">
                 <a-form-item label="客服">
-                  <customerService ref="customerName" v-model="queryParam.bizUserSn"></customerService>
+                  <customerService id="transferReturn-bizUserSn" ref="customerName" v-model="queryParam.bizUserSn"></customerService>
                 </a-form-item>
               </a-col>
             </template>
@@ -65,7 +65,7 @@
               :disabled="disabled"
               :loading="exportLoading"
               id="transferReturn-export">导出</a-button> -->
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+              <a @click="advanced=!advanced" style="margin-left: 5px" id="transferReturn-advanced">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'"/>
               </a>
@@ -95,7 +95,7 @@
           bordered>
           <!-- 单号 -->
           <template slot="allocateReturnNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('M_transferReturnDetail')" class="link-bule" @click="handleDetail(record)">{{ record.allocateReturnNo }}</span>
+            <span v-if="$hasPermissions('M_transferReturnDetail')" :id="'transferReturn-allocateReturnNo'+record.id" class="link-bule" @click="handleDetail(record)">{{ record.allocateReturnNo }}</span>
             <span v-else>{{ record.allocateReturnNo }}</span>
           </template>
           <!-- 调拨类型 -->
@@ -114,28 +114,28 @@
               v-if="record.state == 'WAIT_AUDIT' && $hasPermissions('B_transferReturnAudit')"
               class="button-warning"
               @click="handleExamine(record)"
-              id="transferReturn-examine-btn">审核</a-button>
+              :id="'transferReturn-audit-btn'+record.id">审核</a-button>
             <a-button
               size="small"
               type="link"
               class="button-warning"
               v-if="record.state=='WAIT_CHECK' && $hasPermissions('M_transferReturnCheck')"
               @click="handleCheck(record)"
-              id="transferReturn-examine-btn">品检</a-button>
+              :id="'transferReturn-check-btn'+record.id">品检</a-button>
             <a-button
               size="small"
               type="link"
               v-if="((record.state == 'WAIT_SUBMIT') || (record.state == 'FINANCIAL_REJECT') || (record.state == 'AUDIT_REJECT')) && $hasPermissions('B_transferReturnEdit')"
               class="button-info"
               @click="handleEdit(record)"
-              id="transferReturn-edit-btn">编辑</a-button>
+              :id="'transferReturn-edit-btn'+record.id">编辑</a-button>
             <a-button
               size="small"
               type="link"
               v-if="((record.state == 'WAIT_SUBMIT') || (record.state == 'FINANCIAL_REJECT') || (record.state == 'AUDIT_REJECT')) && $hasPermissions('B_transferReturnDel')"
               class="button-error"
               @click="handleDel(record)"
-              id="transferReturn-del-btn">删除</a-button>
+              :id="'transferReturn-del-btn'+record.id">删除</a-button>
             <!-- 带财务确认或已完结 -->
             <span v-if="record.state == 'WAIT_FINANCIAL_AUDIT'||record.state == 'FINISH'">--</span>
           </template>
@@ -157,15 +157,17 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { hdExportExcel } from '@/libs/exportExcel'
+// 组件
 import { STable, VSelect } from '@/components'
 import basicInfoModal from './basicInfoModal.vue'
 import rangeDate from '@/views/common/rangeDate.vue'
 import auditModal from '@/views/common/auditModal.vue'
-import { allocateReturnQueryPage, allocateReturnAudit, allocateReturnDelete } from '@/api/allocateReturn'
 import AllocateType from '@/views/common/allocateType.js'
 import warehouse from '@/views/common/chooseWarehouse.js'
 import customerService from '@/views/common/customerService'
-import { hdExportExcel } from '@/libs/exportExcel'
+// 接口
+import { allocateReturnQueryPage, allocateReturnAudit, allocateReturnDelete } from '@/api/allocateReturn'
 export default {
   name: 'TransferReturnList',
   mixins: [commonMixin],
@@ -174,31 +176,34 @@ export default {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
-      tableHeight: 0,
-      time: [],
-      allocateTypeVal: [],
-      queryParam: { //  查询条件
-        beginDate: '',
-        endDate: '',
+      tableHeight: 0, // 表格高度
+      time: [], // 创建时间
+      allocateTypeVal: [], // 费用/调拨退货类型
+      //  查询条件
+      queryParam: {
+        beginDate: '', // 开始时间
+        endDate: '', // 结束时间
         targetName: '', //  调往对象
         costTypeSn: undefined, // 费用类型
         allocateSortSn: undefined, //  调拨类别
         allocateReturnTypeSn: undefined, // 调拨退货类型2
         state: undefined, //  业务状态
-        warehouseSn: undefined,
+        warehouseSn: undefined, // 出库仓库
         allocateReturnNo: '', //  调拨单号
-        bizUserSn: undefined
+        bizUserSn: undefined// 客服
       },
       disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
+      exportLoading: false, // 导出按钮加载状态
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return allocateReturnQueryPage(Object.assign(parameter, this.queryParam, { authWarehouseFlag: 0 })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -209,13 +214,14 @@ export default {
           return data
         })
       },
-      visibleAudit: false,
-      auditInfo: null,
-      spinningAudit: false,
+      visibleAudit: false, // 审核弹窗
+      auditInfo: null, // 审核当前行数据
+      spinningAudit: false, // 审核按钮加载状态
       openModal: false //  新增编辑  弹框
     }
   },
   computed: {
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -247,6 +253,7 @@ export default {
       this.queryParam.beginDate = date[0]
       this.queryParam.endDate = date[1]
     },
+    // 选择费用/调拨退货类型
     changeAllocatype (val, opts) {
       this.allocateTypeVal = val || []
       this.queryParam.costTypeSn = val && val[0] ? val[0] : ''
@@ -295,7 +302,7 @@ export default {
       this.auditInfo = row
       this.visibleAudit = true
     },
-    // 审核
+    // 审核成功
     auditOrder (state) {
       const _this = this
       _this.spinningAudit = true
@@ -334,6 +341,7 @@ export default {
         _this.spinning = false
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -341,12 +349,14 @@ export default {
       })
       this.openModal = false
     },
+    // 表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 255
     }
   },
   watch: {
+    // 展开关闭  监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调

+ 10 - 7
src/views/allocationManagement/transferReturn/print.vue

@@ -5,7 +5,7 @@
       type="primary"
       class="button-info"
       v-if="$hasPermissions('B_transferReturnPrint')"
-      id="editGrap-db-print-btn"
+      id="transferReturn-db-print-btn"
       :disabled="disabled"
       @click="handlePrint('preview')">打印预览</a-button>
     <a-button
@@ -13,7 +13,7 @@
       type="primary"
       class="button-info"
       v-if="$hasPermissions('B_transferReturnPrint')"
-      id="editGrap-dbfl-print-btn"
+      id="transferReturn-dbfl-print-btn"
       :disabled="disabled"
       @click="handlePrint('print')">快捷打印</a-button>
     <a-divider type="vertical" />
@@ -22,7 +22,7 @@
       type="default"
       class="button-warning"
       v-if="$hasPermissions('B_transferReturnExport')"
-      id="editGrap-export-btn"
+      id="transferReturn-export-btn"
       :disabled="disabled"
       @click="handleExcel">导出Excel</a-button>
     <!-- 打印导出 -->
@@ -34,7 +34,9 @@
 
 <script>
 import { printFun, exportExcel } from '@/libs/JGPrint.js'
+// 组件
 import printModal from './printModal.vue'
+// 接口
 import { allocateReturnExcel, allocateReturnPrint } from '@/api/allocateReturn'
 export default {
   components: { printModal },
@@ -58,8 +60,8 @@ export default {
   },
   data () {
     return {
-      openModal: false,
-      nowType: null
+      openModal: false, // 打开打印导出
+      nowType: null// 打印类型
     }
   },
   methods: {
@@ -68,6 +70,7 @@ export default {
       this.nowType = type
       this.openModal = true
     },
+    // 打印导出
     handleOk (obj) {
       const _this = this
       const params = {
@@ -79,10 +82,10 @@ export default {
         params.orderBy = obj.orderBy
       }
       _this.$emit('loading')
-      printFun(allocateReturnPrint, params, obj.isPreview, '调拨退货单', () => { 
+      printFun(allocateReturnPrint, params, obj.isPreview, '调拨退货单', () => {
         _this.$emit('unloading')
         _this.$store.state.app.curActionPermission = ''
-     })
+      })
     },
     // 导出
     handleExcel () {

+ 20 - 17
src/views/allocationManagement/transferReturn/printModal.vue

@@ -20,23 +20,23 @@
         <a-form-model-item style="margin:0" label="调拨退货单号">{{ itemData&&itemData.allocateReturnNo || '--' }}</a-form-model-item>
         <a-form-model-item style="margin:0" label="调拨退货对象">{{ itemData&&itemData.targetName || '--' }}</a-form-model-item>
         <a-form-model-item label="产品价格" prop="priceType">
-          <a-radio-group v-model="form.priceType">
-            <a-radio value="thj" v-if="$hasPermissions('B_transferReturnPrint_salesPrice')">退货价</a-radio>
-            <a-radio value="cbj" v-if="$hasPermissions('B_transferReturnPrint_costPrice')">成本价</a-radio>
-            <a-radio value="bdy">不打印</a-radio>
+          <a-radio-group id="allocateBill-print-priceType" v-model="form.priceType">
+            <a-radio value="thj" id="allocateBill-print-priceType1" v-if="$hasPermissions('B_transferReturnPrint_salesPrice')">退货价</a-radio>
+            <a-radio value="cbj" id="allocateBill-print-priceType2" v-if="$hasPermissions('B_transferReturnPrint_costPrice')">成本价</a-radio>
+            <a-radio value="bdy" id="allocateBill-print-priceType3">不打印</a-radio>
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item label="货位编号" prop="orderBy">
-          <a-radio-group v-model="form.orderBy">
-            <a-radio value="ASC">打印(↑升序)</a-radio>
-            <a-radio value="DESC">打印(↓降序)</a-radio>
-            <a-radio value="-1">不打印</a-radio>
+          <a-radio-group id="allocateBill-print-orderBy" v-model="form.orderBy">
+            <a-radio value="ASC" id="allocateBill-print-orderBy1">打印(↑升序)</a-radio>
+            <a-radio value="DESC" id="allocateBill-print-orderBy2">打印(↓降序)</a-radio>
+            <a-radio value="-1" id="allocateBill-print-orderBy3">不打印</a-radio>
           </a-radio-group>
         </a-form-model-item>
       </a-form-model>
       <div class="btn-cont">
-        <a-button id="allocateBill-print-save" @click="handleSave(0)">取消</a-button>
-        <a-button type="primary" id="allocateBill-print-back" @click="handleSave(1)" style="margin-left: 15px;">确定</a-button>
+        <a-button id="allocateBill-print-cancel" @click="handleSave(0)">取消</a-button>
+        <a-button type="primary" id="allocateBill-print-save" @click="handleSave(1)" style="margin-left: 15px;">确定</a-button>
       </div>
     </a-spin>
   </a-modal>
@@ -62,21 +62,24 @@ export default {
   },
   data () {
     return {
+      spinning: false,
       isShow: this.openModal, //  是否打开弹框
+      // 提交参数
       form: {
         id: 'all',
-        priceType: undefined,
-        orderBy: undefined
+        priceType: undefined, // 产品价格
+        orderBy: undefined// 货位编号
       },
+      // 表单验证规则
       rules: {
         priceType: [{ required: true, message: '请选择产品价格', trigger: 'change' }],
         orderBy: [{ required: true, message: '请选择货位编号', trigger: 'change' }]
       },
+      // form表单label布局
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 18 }
-      },
-      spinning: false
+      }
     }
   },
   methods: {
@@ -120,9 +123,9 @@ export default {
       if (!newValue) {
         this.$emit('close')
         this.$refs.ruleForm.resetFields()
-      }else{
-        if(!this.$hasPermissions('B_transferReturnPrint_salesPrice')&&!this.$hasPermissions('B_transferReturnPrint_costPrice')){
-          this.form.priceType = "bdy"
+      } else {
+        if (!this.$hasPermissions('B_transferReturnPrint_salesPrice') && !this.$hasPermissions('B_transferReturnPrint_costPrice')) {
+          this.form.priceType = 'bdy'
         }
       }
     }

+ 65 - 49
src/views/allocationManagement/transfersPrint/list.vue

@@ -1,23 +1,23 @@
 <template>
-  <div class="allocateBillList-wrap">
+  <div class="transfersPrintList-wrap">
     <a-card size="small" :bordered="false" :class="currentTab==2 ? 'searchBox' : 'searchBoxNormal'">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="transfersPrintList-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+                <rangeDate id="transfersPrintList-time" ref="rangeDate" :value="time" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="调往对象">
-                <a-input id="allocateBillList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
+                <a-input id="transfersPrintList-targetName" v-model.trim="queryParam.targetName" allowClear placeholder="请输入调往对象"/>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="收货客户名称">
-                <dealerSearchList ref="receiverSn" @change="custChange"/>
+                <dealerSearchList id="transfersPrintList-receiver" ref="receiverSn" @change="custChange"/>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24" v-if="currentTab==2&&!isShowCustomerSearch">
@@ -25,7 +25,7 @@
                 <v-select
                   v-model="queryParam.state"
                   ref="state"
-                  id="allocateBillList-state"
+                  id="transfersPrintList-state"
                   code="ALLOCATE_STATUS"
                   placeholder="请选择业务状态"
                   allowClear
@@ -38,7 +38,7 @@
                   <v-select
                     v-model="queryParam.state"
                     ref="state"
-                    id="allocateBillList-state"
+                    id="transfersPrintList-state"
                     code="ALLOCATE_STATUS"
                     placeholder="请选择业务状态"
                     allowClear
@@ -47,7 +47,7 @@
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="调拨单号">
-                  <a-input id="allocateBillList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
+                  <a-input id="transfersPrintList-allocateNo" v-model.trim="queryParam.allocateNo" allowClear placeholder="请输入调拨单号"/>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" v-if="currentTab == 1">
@@ -55,7 +55,7 @@
                   <v-select
                     v-model="queryParam.printState"
                     ref="printState"
-                    id="allocateBillList-printState"
+                    id="transfersPrintList-printState"
                     code="PRINT_STATUS"
                     placeholder="请选择打印状态"
                     allowClear
@@ -67,31 +67,31 @@
                   <warehouse
                     v-model="queryParam.warehouseSn"
                     isPermission
-                    id="allocateBillList-warehouseSn"
+                    id="transfersPrintList-warehouseSn"
                     placeholder="请选择调出仓库"
                   />
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="所在区域">
-                  <subarea id="allocateBillList-subarea" ref="subarea" @change="subareaChange"></subarea>
+                  <subarea id="transfersPrintList-subarea" ref="subarea" @change="subareaChange"></subarea>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-item label="地区">
-                  <Area id="allocateBillList-shippingAddrProvinceSn" v-model="queryParam.shippingAddrProvinceSn" placeholder="请选择省"></Area>
+                  <Area id="transfersPrintList-shippingAddrProvinceSn" v-model="queryParam.shippingAddrProvinceSn" placeholder="请选择省"></Area>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" v-show="isShowCustomerSearch">
                 <a-form-item label="客服">
-                  <customerService ref="customerName" v-model="queryParam.bizUserSn"></customerService>
+                  <customerService ref="customerName" id="transfersPrintList-bizUserSn" v-model="queryParam.bizUserSn"></customerService>
                 </a-form-item>
               </a-col>
             </template>
             <a-col :md="currentTab==2&&!isShowCustomerSearch ?24:6" :sm="24" :style="{textAlign: (currentTab==2&&!isShowCustomerSearch)?'center':''}">
-              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="allocateBillList-refresh">查询</a-button>
-              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="allocateBillList-reset">重置</a-button>
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="transfersPrintList-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="transfersPrintList-reset">重置</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 5px" id="transfersPrintList-advanced">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'"/>
               </a>
@@ -101,10 +101,10 @@
       </div>
     </a-card>
     <div style="background-color: #fff;">
-      <a-tabs v-model="currentTab" @change="changeTab">
-        <a-tab-pane :key="1" tab="全部">
+      <a-tabs v-model="currentTab" @change="changeTab" id="transfersPrintList-tabs">
+        <a-tab-pane :key="1" tab="全部" id="transfersPrintList-tabs1">
         </a-tab-pane>
-        <a-tab-pane :key="2" tab="待打印">
+        <a-tab-pane :key="2" tab="待打印" id="transfersPrintList-tabs2">
         </a-tab-pane>
       </a-tabs>
     </div>
@@ -124,12 +124,12 @@
           bordered>
           <!-- 单号 -->
           <template slot="allocateNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('M_transferOut_detail')" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
+            <span v-if="$hasPermissions('M_transferOut_detail')" :id="'transfersPrintList-allocateNo'+record.id" class="link-bule" @click="handleDetail(record)">{{ record.allocateNo }}</span>
             <span v-else>{{ record.allocateNo }}</span>
           </template>
           <!-- 打印状态 -->
           <template slot="printStatus" slot-scope="text, record">
-            <span v-if="record.printState=='NO_PRINT'" class="link-bule" @click="editPrintStatus(record)">{{ record.printStateDictValue }}</span>
+            <span v-if="record.printState=='NO_PRINT'" :id="'transfersPrintList-printStatus'+record.id" class="link-bule" @click="editPrintStatus(record)">{{ record.printStateDictValue }}</span>
             <span v-else>{{ record.printStateDictValue }}</span>
           </template>
           <div slot="costTitle">
@@ -148,14 +148,14 @@
               v-if="record.printState == 'NO_PRINT'&&$hasPermissions('B_transferOut_type_print')"
               class="button-warning"
               @click="handlePrint(record)"
-              id="allocateBillList-printState">调拨分类打印</a-button>
+              :id="'transfersPrintList-printState-btn'+record.id">调拨分类打印</a-button>
             <a-button
               size="small"
               type="link"
               v-else-if="record.printState == 'PRINT'&&$hasPermissions('B_tfoPrint_record')"
               class="button-success"
               @click="handlePrintRecord(record)"
-              id="allocateBillList-printRecord">打印记录</a-button>
+              :id="'transfersPrintList-printRecord-btn'+record.id">打印记录</a-button>
             <span v-else>--</span>
           </template>
         </s-table>
@@ -198,6 +198,8 @@
 import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
 import getDate from '@/libs/getDate.js'
+import { printBase64Fun } from '@/libs/JGPrint.js'
+// 组件
 import { STable, VSelect } from '@/components'
 import subarea from '@/views/common/subarea.js'
 import Area from '@/views/common/area.js'
@@ -209,8 +211,8 @@ import warehouse from '@/views/common/chooseWarehouse.js'
 import customerService from '@/views/common/customerService'
 import allocationDetailModal from '@/views/allocationManagement/transferOut/detail.vue'
 import recordModal from './recordModal.vue'
+// 接口
 import { allocateBillList, allocateBillDetailPrint, updatePrintState } from '@/api/allocateBill'
-import { printBase64Fun } from '@/libs/JGPrint.js'
 export default {
   name: 'TransfersPrintList',
   mixins: [commonMixin],
@@ -219,44 +221,48 @@ export default {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
-      tableHeight: 0,
-      itemData: null,
-      bizSn: '',
-      showRecordModal: false,
-      showPrintModal: false,
-      showDetailModal: false,
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      itemData: null, // 当前行数据
+      bizSn: '', // 调拨sn
+      showRecordModal: false, // 打印记录弹窗
+      showPrintModal: false, // 打印弹窗
+      showDetailModal: false, // 调拨单详情弹窗
+      // 创建时间默认值
       time: [
-        moment(getDate.getThreeMonthDays().starttime, 'YYYY-MM-DD'),
-        moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')
+        moment(getDate.getThreeMonthDays().starttime, 'YYYY-MM-DD'), // 开始时间
+        moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')// 几位数使劲
       ],
-      queryParam: { //  查询条件
-        beginDate: getDate.getThreeMonthDays().starttime,
-        endDate: getDate.getCurrMonthDays().endtime,
+      //  查询条件
+      queryParam: {
+        beginDate: getDate.getThreeMonthDays().starttime, // 开始时间
+        endDate: getDate.getCurrMonthDays().endtime, // 结束时间
         targetName: '', //  调往对象
         state: undefined, //  业务状态
         allocateNo: '', //  调拨单号
-        receiverSn: undefined,
-        checkStatus: undefined,
-        warehouseSn: undefined,
-        printState: 'NO_PRINT',
+        receiverSn: undefined, // 收货客户名称
+        checkStatus: undefined, // 选中状态
+        warehouseSn: undefined, // 调出仓库
+        printState: 'NO_PRINT', // 打印状态
         subareaArea: {
-          subareaSn: undefined,
-          subareaAreaSn: undefined
+          subareaSn: undefined, // 区域
+          subareaAreaSn: undefined// 分区
         },
-        shippingAddrProvinceSn: undefined,
-        bizUserSn: undefined
+        shippingAddrProvinceSn: undefined, // 选中省份
+        bizUserSn: undefined// 客服
       },
-      currentTab: 2,
-      disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
+      currentTab: 2, // tabs默认值
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return allocateBillList(Object.assign(parameter, this.queryParam, { authWarehouseFlag: 1 })).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -267,12 +273,13 @@ export default {
           return data
         })
       },
-      visibleAudit: false,
+      visibleAudit: false, // 审核弹窗
       openModal: false, //  打印弹框
-      tipData: null
+      tipData: null// 操作提示回显数据
     }
   },
   computed: {
+    // 表头
     columns () {
       const _this = this
       const arr = [
@@ -305,6 +312,7 @@ export default {
     }
   },
   methods: {
+    // 收货客户名称 change
     custChange (val) {
       if (val.row) {
         this.queryParam.receiverSn = val.row.dealerSn
@@ -314,6 +322,7 @@ export default {
         this.queryParam.receiverName = val.key
       }
     },
+    // tabs事件
     changeTab (v) {
       this.currentTab = v
       this.resetSearchForm()
@@ -323,6 +332,7 @@ export default {
       this.queryParam.beginDate = date[0]
       this.queryParam.endDate = date[1]
     },
+    // 区域分区
     subareaChange (val) {
       this.queryParam.subareaArea = {
         subareaSn: val[0] ? val[0] : undefined,
@@ -396,11 +406,13 @@ export default {
       this.bizSn = row.allocateSn
       this.showDetailModal = true
     },
+    // 关闭详情弹窗
     cancelDetail () {
       this.showDetailModal = false
       this.$store.state.app.curActionPermission = ''
       this.bizSn = null
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -408,6 +420,7 @@ export default {
       })
       this.openModal = false
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 266
@@ -419,10 +432,12 @@ export default {
         this.showPrintModal = true
       })
     },
+    // 关闭操作提示弹窗
     canselModal () {
       this.showPrintModal = false
       this.resetSearchForm()
     },
+    // 操作提示成功呢
     updatePrintStatus () {
       const _this = this
       _this.spinning = true
@@ -440,6 +455,7 @@ export default {
     }
   },
   watch: {
+    // 展开关闭 监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -474,7 +490,7 @@ export default {
 }
 </script>
 <style lang="less">
-  .allocateBillList-wrap{
+  .transfersPrintList-wrap{
     .ant-tabs-bar{
       margin: 0;
     }

+ 10 - 4
src/views/allocationManagement/transfersPrint/recordModal.vue

@@ -45,14 +45,16 @@
         bordered>
       </s-table>
       <div class="btn-box">
-        <a-button @click="handleCommonCancel" v-if="isCancel">{{ cancelText }}</a-button>
+        <a-button :id="'record-cancel-'+record.id" @click="handleCommonCancel" v-if="isCancel">{{ cancelText }}</a-button>
       </div>
     </a-spin>
   </a-modal>
 </template>
 
 <script>
+// 组件
 import { STable, VSelect } from '@/components'
+// 接口
 import { printLogQueryPage } from '@/api/data'
 export default {
   name: 'RecordModal',
@@ -78,10 +80,11 @@ export default {
   data () {
     return {
       isShow: this.openModal, //  是否打开弹框
-      disabled: false,
+      disabled: false, // 查询、重置按钮是否可操作
       spinning: false,
-      tipData: null,
-      params: null,
+      tipData: null, // 调拨当前数据
+      params: null, // 提交数据
+      // 表头
       columns: [
         { title: '序号', dataIndex: 'no', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '打印时间', dataIndex: 'printDate', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -93,10 +96,12 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据 有分页
         return printLogQueryPage(Object.assign(parameter, this.params || {})).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -110,6 +115,7 @@ export default {
     }
   },
   methods: {
+    // 赋值
     setData (data, params) {
       this.tipData = data
       this.params = params

+ 12 - 4
src/views/basicData/transferTypeManagement/editModal.vue

@@ -33,8 +33,8 @@
           </a-form-model-item>
         </a-form-model>
         <div class="btn-cont">
-          <a-button id="storeTransferOut-type-edit-modal-back" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
-          <a-button type="primary" id="storeTransferOut-type-edit-modal-save" @click="handleSave">保存</a-button>
+          <a-button id="transferTypeManagementEdit-cancel" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
+          <a-button type="primary" id="transferTypeManagementEdit-save" @click="handleSave">保存</a-button>
         </div>
       </a-spin>
     </div>
@@ -43,9 +43,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { VSelect } from '@/components'
-import { allocateTypeSave } from '@/api/allocateType'
 import allocateType from '@/views/common/allocateType'
+// 接口
+import { allocateTypeSave } from '@/api/allocateType'
 export default {
   name: 'TransferTypeManagementEditModal',
   mixins: [commonMixin],
@@ -65,6 +67,7 @@ export default {
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
       return (this.itemSn ? '编辑' : '新增') + '调拨类型'
     }
@@ -73,16 +76,19 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // form 表单
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
-      allocateType: [],
+      allocateType: [], // 调拨类别
+      // 提交参数
       form: {
         name: '', // 调拨类型名称
         allocateCategory: undefined, //  调拨类别
         treeLevel: 3
       },
+      // 表单验证规则
       rules: {
         allocateCategory: [
           { required: true, message: '请选择调拨类别', trigger: 'change' }
@@ -94,6 +100,7 @@ export default {
     }
   },
   methods: {
+    // 调拨类型名称 去空格
     filterEmpty () {
       let str = this.form.name
       str = str.replace(/\ +/g, '')
@@ -101,6 +108,7 @@ export default {
       str = str.replace(/[\r\n]/g, '')
       this.form.name = str
     },
+    // 调拨类别 change
     changeCategory (v, opt) {
       this.form.allocateCategory = v && v[1] ? v[1] : ''
     },

+ 9 - 3
src/views/basicData/transferTypeManagement/list.vue

@@ -30,14 +30,14 @@
             class="button-info"
             @click="handleEdit(record)"
             v-if="$hasPermissions('B_transferTypeManagement_edit')"
-            id="transferTypeManagementList-edit-btn">编辑</a-button>
+            :id="'transferTypeManagementList-edit-btn-'+record.id">编辑</a-button>
           <a-button
             size="small"
             type="link"
             class="button-error"
             @click="handleDel(record)"
             v-if="$hasPermissions('B_transferTypeManagement_del')"
-            id="transferTypeManagementList-del-btn">删除</a-button>
+            :id="'transferTypeManagementList-del-btn-'+record.id">删除</a-button>
           <span v-if="!$hasPermissions('B_transferTypeManagement_del') &&!$hasPermissions('B_transferTypeManagement_edit')">--</span>
         </template>
       </s-table>
@@ -49,8 +49,10 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import transferTypeManagementEditModal from './editModal.vue'
+// 接口
 import { allocateTypeList, allocateTypeDel } from '@/api/allocateType'
 export default {
   name: 'TransferTypeManagementList',
@@ -59,7 +61,7 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       columns: [
         { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -71,10 +73,12 @@ export default {
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
+        // 获取列表数据 有分页
         return allocateTypeList(Object.assign(parameter, {})).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -123,12 +127,14 @@ export default {
       this.openModal = false
       this.$refs.table.refresh(true)
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 185

+ 18 - 12
src/views/basicData/warehouse/editModal.vue

@@ -48,7 +48,7 @@
             <v-select
               v-model="form.warehouseType"
               ref="state"
-              id="allocateBillList-state"
+              id="warehouseEdit-state"
               code="WAREHOUSE_TYPE"
               placeholder="请选择仓库类型"
               allowClear
@@ -73,9 +73,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
-import { warehouseSave } from '@/api/warehouse'
 import AreaList from '@/views/common/areaList.js'
+// 接口
+import { warehouseSave } from '@/api/warehouse'
 export default {
   name: 'WarehouseEditModal',
   mixins: [commonMixin],
@@ -103,22 +105,24 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // 表单 label 布局
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
+      // 提交参数
       form: {
         name: '', // 仓库名称
-        address: '',
-        addressInfo: undefined,
-        provinceSn: undefined,
-        provinceName: undefined,
-        citySn: undefined,
-        cityName: undefined,
-        districtSn: undefined,
-        districtName: undefined,
+        address: '', // 详细地址
+        addressInfo: undefined, // 选择省市区
+        provinceSn: undefined, // 省份sn
+        provinceName: undefined, // 省份名称
+        citySn: undefined, // 市sn
+        cityName: undefined, // 市名称
+        districtSn: undefined, // 区sn
+        districtName: undefined, // 区名称
         erpWarehouseCode: undefined, // ERP仓库编码
-        warehouseType: undefined
+        warehouseType: undefined// 仓库类型
       },
       rules: {
         name: [
@@ -140,6 +144,7 @@ export default {
     }
   },
   methods: {
+    // 仓库名称 去除空格
     filterEmpty () {
       let str = this.form.name
       str = str.replace(/\ +/g, '')
@@ -147,6 +152,7 @@ export default {
       str = str.replace(/[\r\n]/g, '')
       this.form.name = str
     },
+    // 地区
     areaChange (val, row) {
       this.form.addressInfo = val
       this.form.provinceSn = val[0] ? val[0] : ''
@@ -170,7 +176,7 @@ export default {
           districtSn: this.nowData.districtSn ? this.nowData.districtSn : '',
           districtName: this.nowData.districtName ? this.nowData.districtName : '',
           erpWarehouseCode: this.nowData.erpWarehouseCode ? this.nowData.erpWarehouseCode : '', // ERP仓库编码
-          warehouseType:this.nowData.warehouseType ? this.nowData.warehouseType : '',
+          warehouseType: this.nowData.warehouseType ? this.nowData.warehouseType : '',
           addressInfo: addressVal
         }
       }

+ 8 - 2
src/views/basicData/warehouse/list.vue

@@ -71,9 +71,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import { warehouseList, warehouseDel } from '@/api/warehouse'
+// 组件
 import { STable } from '@/components'
 import warehouseEditModal from './editModal.vue'
+// 接口
+import { warehouseList, warehouseDel } from '@/api/warehouse'
 export default {
   name: 'WarehouseList',
   mixins: [commonMixin],
@@ -84,7 +86,7 @@ export default {
       queryParam: { //  查询条件
         name: '' //  仓库名称
       },
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: '10%', align: 'center' },
@@ -96,10 +98,12 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return warehouseList(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -164,12 +168,14 @@ export default {
     goStoringLocation (row) {
       this.$router.push({ path: `/basicData/storingLocation/${row.warehouseSn}`, query: { name: row.name } })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 250

+ 7 - 1
src/views/basicData/warehouse/storingLocation/editModal.vue

@@ -29,7 +29,7 @@
           </a-form-model-item>
           <a-form-model-item label="所属仓库" prop="warehouseSn">
             <a-select id="storingLocationEdit-warehouseSn" disabled placeholder="请选择所属仓库" allowClear v-model="form.warehouseSn">
-              <a-select-option v-for="item in warehouseList" :key="item.id" :value="item.warehouseSn">{{ item.name }}</a-select-option>
+              <a-select-option :id="'storingLocationEdit-warehouseSn-'+item.id" v-for="item in warehouseList" :key="item.id" :value="item.warehouseSn">{{ item.name }}</a-select-option>
             </a-select>
           </a-form-model-item>
         </a-form-model>
@@ -44,7 +44,9 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable } from '@/components'
+// 接口
 import { warehouseLocSave, warehouseAllList } from '@/api/warehouse'
 export default {
   name: 'StoringLocationEditModal',
@@ -65,6 +67,7 @@ export default {
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
       return (this.itemSn ? '编辑' : '新增') + '仓位'
     }
@@ -73,14 +76,17 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // form表单 label布局
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
+      // 提交参数
       form: {
         name: '', // 仓位名称
         warehouseSn: undefined //  所属仓库
       },
+      // 表单验证规则
       rules: {
         name: [
           { required: true, message: '请输入仓位名称', trigger: 'blur' }

+ 14 - 7
src/views/basicData/warehouse/storingLocation/list.vue

@@ -11,7 +11,7 @@
       <a-card size="small" :bordered="false" class="storingLocationList-cont">
         <!-- 搜索条件 -->
         <div ref="tableSearch" class="table-page-search-wrapper">
-          <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-form layout="inline" id="storingLocationList-form" @keyup.enter.native="$refs.table.refresh(true)">
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-item label="仓位名称">
@@ -49,14 +49,14 @@
               class="button-info"
               v-if="record.defaultFlag!='1'"
               @click="handleEdit(record)"
-              id="storingLocationList-edit-btn">编辑</a-button>
+              :id="'storingLocationList-edit-btn-'+record.id">编辑</a-button>
             <a-button
               size="small"
               type="link"
               class="button-error"
               v-if="record.defaultFlag!='1'"
               @click="handleDel(record)"
-              id="storingLocationList-del-btn">删除</a-button>
+              :id="'storingLocationList-del-btn-'+record.id">删除</a-button>
             <span v-if="record.defaultFlag=='1'">--</span>
           </template>
         </s-table>
@@ -69,9 +69,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import { warehouseLocList, warehouseLocDel } from '@/api/warehouse'
+// 组件
 import { STable } from '@/components'
 import storingLocationEditModal from './editModal.vue'
+// 接口
+import { warehouseLocList, warehouseLocDel } from '@/api/warehouse'
 export default {
   name: 'StoringLocationList',
   mixins: [commonMixin],
@@ -79,12 +81,13 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
-      queryParam: { //  查询条件
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      //  查询条件
+      queryParam: {
         warehouseSn: this.$route.params.sn, //  仓库sn
         name: '' //  仓位名称
       },
-      disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: '10%', align: 'center' },
         { title: '仓位名称', dataIndex: 'name', align: 'center', width: '45%', customRender: function (text) { return text || '--' }, ellipsis: true },
@@ -94,10 +97,12 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据 有分页
         return warehouseLocList(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -168,12 +173,14 @@ export default {
     handleBack () {
       this.$router.push({ path: '/basicData/warehouse/list', query: { closeLastOldTab: true } })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 295

+ 3 - 1
src/views/common/chooseProductsModal.vue

@@ -133,7 +133,7 @@ export default {
       loading: false, //  表格加载中
       columns: [
         { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
-        { title: '产品编码', dataIndex: 'code', align: 'left',width: 200 },
+        { title: '产品编码', dataIndex: 'code', align: 'left', width: 200 },
         { title: '产品名称', dataIndex: 'name', align: 'left', ellipsis: true, customRender: function (text) { return text || '--' } }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -145,6 +145,7 @@ export default {
           url = productPricingList //  获取定价产品
         }
         const params = Object.assign(parameter, this.queryParam)
+        // 不是供应商也不是经销权选择产品
         if (this.type != 'supplier' && this.type != 'dealership') { //  促销
           params.onlineFalg = 1
         }
@@ -291,6 +292,7 @@ export default {
           })
         }
         this.$nextTick(() => { // 页面渲染完成后的回调
+          _this.handleSearch() // 重新渲染表格
           _this.$refs.table.setTableSelected(selectedRowKeys, selectedRows) // 设置表格选中项
         })
       }

+ 14 - 5
src/views/common/supplier.js

@@ -40,6 +40,10 @@ const Employee = {
     isPermission: {
       type: Boolean,
       default: false
+    },
+    pageSn: {
+      type: String,
+      default: ''
     }
   },
   data () {
@@ -69,16 +73,21 @@ const Employee = {
       this.$emit('change', value, item)
     },
     getList () {
-      const funs = this.isPermission ? supplierAuthAllList : supplierAllList
+      const _this = this
+      const funs = _this.isPermission ? supplierAuthAllList : supplierAllList
       funs().then(res => {
         if (res.status == 200) {
-          if (this.enableFlag != '') {
-            this.list = res.data.filter(item => item.enableFlag == this.enableFlag)
+          if (_this.enableFlag != '') {
+            if (_this.pageSn === '福麦斯') {
+              _this.list = res.data.filter(item => item.supplierName.includes('福麦斯'))
+            } else {
+              _this.list = res.data.filter(item => item.enableFlag == _this.enableFlag)
+            }
           } else {
-            this.list = res.data
+            _this.list = res.data
           }
         } else {
-          this.list = []
+          _this.list = []
         }
       })
     }

+ 30 - 24
src/views/dataExport/exportCheck/list.vue

@@ -29,7 +29,7 @@
           <a-row :gutter="15">
             <a-col :md="12" :sm="24">
               <a-form-model-item label="选择盘点单" prop="checkWarehouseSn">
-                <a-select id="exportCheckList-print" v-model="queryParam.checkWarehouseSn" placeholder="请选择盘点单" allowClear>
+                <a-select id="exportCheckList-checkWarehouseSn" v-model="queryParam.checkWarehouseSn" placeholder="请选择盘点单" allowClear>
                   <a-select-option v-for="item in checkList" :value="item.checkWarehouseSn" :key="item.checkWarehouseSn">
                     <span>{{ item.financeAuditTime }} - {{ item.checkWarehouseNo }}</span>
                   </a-select-option>
@@ -39,13 +39,13 @@
           </a-row>
           <a-form-model-item :wrapper-col="{ span: 12, offset: 6 }">
             <a-button
-                type="primary"
-                class="button-warning"
-                @click="handleExport"
-                :disabled="disabled"
-                :loading="exportLoading"
-                id="exportCheckList-export">导出</a-button>
-            <a-button @click="pageInit" style="margin-left: 15px" id="chooseCustom-btn-back">重置</a-button>
+              type="primary"
+              class="button-warning"
+              @click="handleExport"
+              :disabled="disabled"
+              :loading="exportLoading"
+              id="exportCheckList-export">导出</a-button>
+            <a-button @click="pageInit" style="margin-left: 15px" id="exportCheckList-reset">重置</a-button>
           </a-form-model-item>
         </a-form-model>
       </div>
@@ -55,10 +55,12 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { hdExportExcel } from '@/libs/exportExcel'
+// 组件
 import { STable, VSelect } from '@/components'
-import { checkWarehouseExcelList, checkWarehouseExport } from '@/api/checkWarehouse'
 import warehouse from '@/views/common/chooseWarehouse.js'
-import { hdExportExcel } from '@/libs/exportExcel'
+// 接口
+import { checkWarehouseExcelList, checkWarehouseExport } from '@/api/checkWarehouse'
 export default {
   name: 'ExportCheckList',
   mixins: [commonMixin],
@@ -66,28 +68,30 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
-      labelCol: { span: 8 },
-      wrapperCol: { span: 16 },
-      queryParam: { //  查询条件
-        checkWarehouseSn: undefined,
-        warehouseSn: undefined
+      labelCol: { span: 8 }, // label 标签布局
+      wrapperCol: { span: 16 }, // 表单设置布局
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      //  查询条件
+      queryParam: {
+        checkWarehouseSn: undefined, // 盘点单 sn
+        warehouseSn: undefined// 仓库sn
       },
+      // 表单验证规则
       rules: {
         checkWarehouseSn: [{ required: true, message: '请选择盘点单', trigger: 'change' }],
         warehouseSn: [{ required: true, message: '请选择仓库', trigger: 'change' }]
       },
-      disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
-      checkList: []
+      checkList: []// 盘点单数据
     }
   },
   methods: {
+    // 获取盘点单数据
     getList (v) {
       this.queryParam.checkWarehouseSn = undefined
       this.checkList = []
-      if(v){
-        checkWarehouseExcelList({warehouseSn: this.queryParam.warehouseSn}).then(res => {
+      if (v) {
+        checkWarehouseExcelList({ warehouseSn: this.queryParam.warehouseSn }).then(res => {
           if (res.status == 200) {
             this.checkList = res.data || []
           } else {
@@ -114,15 +118,17 @@ export default {
         }
       })
     },
-    loadWareHouse(){
+    // 加载仓库信息
+    loadWareHouse () {
       const defWareHouse = this.$store.state.app.defWarehouse
       this.queryParam.checkWarehouseSn = undefined
-      this.queryParam.warehouseSn = this.isShowWarehouse ? undefined : (defWareHouse?defWareHouse.warehouseSn:undefined)
+      this.queryParam.warehouseSn = this.isShowWarehouse ? undefined : (defWareHouse ? defWareHouse.warehouseSn : undefined)
 
-      if(!this.isShowWarehouse){
+      if (!this.isShowWarehouse) {
         this.getList(true)
       }
     },
+    // 初始化数据
     pageInit () {
       this.$refs.ruleForm.resetFields()
     }

+ 34 - 29
src/views/dataExport/exportSales/list.vue

@@ -1,10 +1,10 @@
 <template>
-  <a-card size="small" :bordered="false" class="exportCheckList-wrap">
+  <a-card size="small" :bordered="false" class="exportSalesList-wrap">
     <a-spin :spinning="spinning" tip="Loading...">
       <!-- 搜索条件 -->
       <div ref="tableSearch">
         <a-form-model
-          id="exportCheckList-form"
+          id="exportSalesList-form"
           ref="ruleForm"
           class="form-model-con"
           :model="queryParam"
@@ -19,7 +19,7 @@
                   v-model="queryParam.warehouseSn"
                   isPermission
                   @load="loadWareHouse"
-                  id="exportCheckList-warehouseSn"
+                  id="exportSalesList-warehouseSn"
                   placeholder="请选择仓库"
                   @change="getList"
                 />
@@ -29,7 +29,7 @@
           <a-row :gutter="15">
             <a-col :md="12" :sm="24">
               <a-form-model-item label="选择时间范围" prop="dateArr">
-                <a-select id="exportCheckList-print" v-model="queryParam.dateArr" placeholder="请选择时间范围" allowClear>
+                <a-select id="exportSalesList-dateArr" v-model="queryParam.dateArr" placeholder="请选择时间范围" allowClear>
                   <a-select-option v-for="item in checkList" :value="item" :key="item">
                     <span>{{ item }}</span>
                   </a-select-option>
@@ -39,13 +39,13 @@
           </a-row>
           <a-form-model-item :wrapper-col="{ span: 12, offset: 6 }">
             <a-button
-                type="primary"
-                class="button-warning"
-                @click="handleExport"
-                :disabled="disabled"
-                :loading="exportLoading"
-                id="exportCheckList-export">导出</a-button>
-            <a-button @click="pageInit" style="margin-left: 15px" id="chooseCustom-btn-back">重置</a-button>
+              type="primary"
+              class="button-warning"
+              @click="handleExport"
+              :disabled="disabled"
+              :loading="exportLoading"
+              id="exportSalesList-export">导出</a-button>
+            <a-button @click="pageInit" style="margin-left: 15px" id="exportSalesList-reset">重置</a-button>
           </a-form-model-item>
         </a-form-model>
       </div>
@@ -55,11 +55,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { hdExportExcel } from '@/libs/exportExcel'
+// 组件
 import { STable, VSelect } from '@/components'
+import warehouse from '@/views/common/chooseWarehouse.js'
+// 接口
 import { checkWarehouseExcelList } from '@/api/checkWarehouse'
 import { exportSalesOutProduct } from '@/api/stockOut.js'
-import warehouse from '@/views/common/chooseWarehouse.js'
-import { hdExportExcel } from '@/libs/exportExcel'
 export default {
   name: 'ExportSalesList',
   mixins: [commonMixin],
@@ -67,28 +69,29 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
-      labelCol: { span: 8 },
-      wrapperCol: { span: 16 },
-      queryParam: { //  查询条件
-        dateArr: undefined,
-        warehouseSn: undefined
+      labelCol: { span: 8 }, // form表单label横向距离
+      wrapperCol: { span: 16 }, // form表单行缩进距离
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      //  查询条件
+      queryParam: {
+        dateArr: undefined, // 时间范围
+        warehouseSn: undefined// 仓库
       },
       rules: {
-        'dateArr': [{ required: true, message: '请选择时间范围', trigger: 'change' }],
+        dateArr: [{ required: true, message: '请选择时间范围', trigger: 'change' }],
         warehouseSn: [{ required: true, message: '请选择仓库', trigger: 'change' }]
       },
-      disabled: false, //  查询、重置按钮是否可操作
-      exportLoading: false,
-      checkList: []
+      checkList: []// 时间范围数据
     }
   },
   methods: {
+    // 获取时间范围数据
     getList (v) {
       this.queryParam.dateArr = undefined
       this.checkList = []
-      if(v){
-        checkWarehouseExcelList({warehouseSn: this.queryParam.warehouseSn}).then(res => {
+      if (v) {
+        checkWarehouseExcelList({ warehouseSn: this.queryParam.warehouseSn }).then(res => {
           if (res.status == 200) {
             const arr = res.data.reverse()
             for (let i = arr.length - 1; i > 0; i--) {
@@ -118,15 +121,17 @@ export default {
         }
       })
     },
-    loadWareHouse(){
+    // 选择仓库 change
+    loadWareHouse () {
       const defWareHouse = this.$store.state.app.defWarehouse
       this.queryParam.dateArr = undefined
-      this.queryParam.warehouseSn = this.isShowWarehouse ? undefined : (defWareHouse?defWareHouse.warehouseSn:undefined)
+      this.queryParam.warehouseSn = this.isShowWarehouse ? undefined : (defWareHouse ? defWareHouse.warehouseSn : undefined)
 
-      if(!this.isShowWarehouse){
+      if (!this.isShowWarehouse) {
         this.getList(true)
       }
     },
+    // 初始化数据
     pageInit () {
       this.$refs.ruleForm.resetFields()
     }
@@ -152,7 +157,7 @@ export default {
 }
 </script>
 <style lang="less">
-  .exportCheckList-wrap{
+  .exportSalesList-wrap{
     height: 99%;
     .form-model-con{
       margin-top: 50px;

+ 27 - 18
src/views/dealerManagement/businessOwnerSettings/addModal.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="businessOwnerSettings-modal"
+    class="businessOwnerSettings-add-modal"
     :footer="null"
     :maskClosable="false"
     :title="itemId ?'编辑人员':'新增人员'"
@@ -13,23 +13,24 @@
         ref="ruleForm"
         :model="form"
         :label-col="labelCol"
+        id="businessOwnerSettings-add-form"
         :wrapper-col="wrapperCol"
         :rules="rules"
       >
         <a-form-model-item label="人员名称" prop="userSn">
-          <userName ref="userName" id="businessOwnerSettings-userSn" @change="userChange"></userName>
+          <userName ref="userName" id="businessOwnerSettings-add-userSn" @change="userChange"></userName>
         </a-form-model-item>
         <a-form-model-item label="人员类型" prop="bizUserType">
           <v-select
             v-model="form.bizUserType"
             ref="printStatus"
-            id="businessOwnerSettings-printStatus"
+            id="businessOwnerSettings-add-printStatus"
             code="BIZ_USER_TYPE"
             placeholder="请选择人员类型"
             allowClear></v-select>
         </a-form-model-item>
         <a-form-model-item label="管辖经销商" prop="allDealerFlag">
-          <a-radio-group v-model="form.allDealerFlag">
+          <a-radio-group v-model="form.allDealerFlag" id="businessOwnerSettings-add-allDealerFlag">
             <a-radio value="1">
               全部经销商
             </a-radio>
@@ -39,7 +40,7 @@
           </a-radio-group>
         </a-form-model-item>
         <a-form-model-item label="管辖品类" prop="allProductFlag">
-          <a-radio-group v-model="form.allProductFlag">
+          <a-radio-group v-model="form.allProductFlag" id="businessOwnerSettings-add-allProductFlag">
             <a-radio value="1">
               全部品类
             </a-radio>
@@ -50,7 +51,7 @@
         </a-form-model-item>
         <!-- 供应商 -->
         <a-form-model-item label="供应商" prop="allSupplierFlag" v-if="form.bizUserType == 'cg'">
-          <a-radio-group v-model="form.allSupplierFlag">
+          <a-radio-group v-model="form.allSupplierFlag" id="businessOwnerSettings-add-allSupplierFlag">
             <a-radio value="1">
               全部供应商
             </a-radio>
@@ -61,11 +62,11 @@
         </a-form-model-item>
         <!-- 人员类型为仓库管理员时 显示管辖仓库 -->
         <a-form-model-item label="管辖仓库" prop="bizUserScopeList" v-if="form.bizUserType == 'cg'">
-          <chooseWarehouse ref="warehouse" modeType="multiple" :value="warehouseList" @change="handleWarehouse"></chooseWarehouse>
+          <chooseWarehouse ref="warehouse" id="businessOwnerSettings-add-bizUserType" modeType="multiple" :value="warehouseList" @change="handleWarehouse"></chooseWarehouse>
         </a-form-model-item>
         <div style="display: flex;justify-content: center;padding: 30px 0;">
-          <a-button @click="isShow=false">取消</a-button>
-          <a-button style="margin-left: 15px;" type="primary" @click="handleSave">{{ itemId?'保存':'确定' }}</a-button>
+          <a-button id="businessOwnerSettings-close-btn" @click="isShow=false">取消</a-button>
+          <a-button id="businessOwnerSettings-save-btn" style="margin-left: 15px;" type="primary" @click="handleSave">{{ itemId?'保存':'确定' }}</a-button>
         </div>
       </a-form-model>
     </a-spin>
@@ -73,13 +74,14 @@
 </template>
 
 <script>
-
+// 组件
 import userName from '@/views/common/userName'
 import chooseWarehouse from '@/views/common/chooseWarehouse'
 import { VSelect } from '@/components'
+// 接口
 import { bizuserSave } from '@/api/bizuser.js'
 export default {
-  name: 'ProductInfoDetailModal',
+  name: 'BusinessOwnerSettings',
   components: { VSelect, userName, chooseWarehouse },
   props: {
     openModal: { //  弹框显示状态
@@ -96,17 +98,19 @@ export default {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
       form: {
-        userSn: '',
+        userSn: '', // 人员名称
         bizUserType: undefined, // 人员类型
-        allDealerFlag: undefined,
-        allProductFlag: undefined,
-        bizUserScopeList: [],
-        allSupplierFlag: undefined
+        allDealerFlag: undefined, // 管辖经销商
+        allProductFlag: undefined, // 管辖产品
+        bizUserScopeList: [], // 管辖仓库
+        allSupplierFlag: undefined// 供应商
       },
-      warehouseList: [],
-      user_name: '',
+      warehouseList: [], // 管辖仓库
+      user_name: '', // 用户名称
+      // 表单label布局
       labelCol: { span: 5 },
       wrapperCol: { span: 16 },
+      // 验证表单规则
       rules: {
         userSn: [{ required: true, message: '请输入人员名称', trigger: 'change' }],
         bizUserType: [{ required: true, message: '请选择人员类型', trigger: 'change' }],
@@ -118,6 +122,7 @@ export default {
     }
   },
   methods: {
+    // 保存
     handleSave () {
       const _this = this
       this.$refs.ruleForm.validate(valid => {
@@ -144,6 +149,7 @@ export default {
         }
       })
     },
+    // 管辖仓库 change
     handleWarehouse (val) {
       this.warehouseList = val
       const arr = []
@@ -155,6 +161,7 @@ export default {
       })
       this.form.bizUserScopeList = arr
     },
+    // 重置
     resetSearchForm () {
       this.user_name = ''
       if (this.form.bizUserType && this.form.bizUserType == 'cg') {
@@ -165,9 +172,11 @@ export default {
       this.$refs.userName.resetForm()
       this.$refs.ruleForm.resetFields()
     },
+    // 人员名称
     userChange (val) {
       this.form.userSn = val.key
     },
+    // 获取编辑回显数据
     getEditInfo (obj) {
       this.$refs.userName.setDufaultVal(obj.userName)
       const arr = []

+ 39 - 16
src/views/dealerManagement/businessOwnerSettings/categorySet.vue

@@ -2,8 +2,9 @@
   <div class="categorySet-wrap">
     <a-spin :spinning="spinning" tip="Loading...">
       <a-card size="small" :bordered="false" class="categorySet-cont">
+        <!-- 操作按钮 -->
         <div class="table-operator" ref="categorySetAddBtn">
-          <a-button type="primary" @click="addCategory" :disabled="disabled">新增管辖品类</a-button>
+          <a-button type="primary" id="categorySet-add" @click="addCategory" :disabled="disabled">新增管辖品类</a-button>
         </div>
         <s-table
           class="sTable fixPagination"
@@ -22,19 +23,25 @@
             <div style="max-height:64px;overflow-y:scroll;">
               <a-row v-if="record.productTypeList && record.productTypeList.length>0">
                 <a-col :span="20">
-                  <a-tag style="margin-bottom:10px;" closable @close.prevent="delLabel(record.bizUserScopeSn,con,'typeList')" v-for="(con,i) in record.productTypeList" :key="i">
+                  <a-tag
+                    :id="'categorySet-chooseType'+record.bizUserScopeSn"
+                    style="margin-bottom:10px;"
+                    closable
+                    @close.prevent="delLabel(record.bizUserScopeSn,con,'typeList')"
+                    v-for="(con,i) in record.productTypeList"
+                    :key="i">
                     {{ con.dataName }}
                   </a-tag>
                 </a-col>
                 <a-col :span="4" style="text-align:right;">
-                  <a-tag style="background: #fff; borderStyle: dashed;" @click="addClassifyTag(index, record)" color="blue">
+                  <a-tag style="background: #fff; borderStyle: dashed;" :id="'categorySet-chooseType-btn'+record.bizUserScopeSn" @click="addClassifyTag(index, record)" color="blue">
                     <a-icon type="plus" /> 选择
                   </a-tag>
                 </a-col>
               </a-row>
               <a-row v-else>
                 <a-col :span="24">
-                  <a-tag style="background: #fff; borderStyle: dashed;" @click="addClassifyTag(index, record)" color="blue">
+                  <a-tag style="background: #fff; borderStyle: dashed;" :id="'categorySet-chooseType-btn1'+record.bizUserScopeSn" @click="addClassifyTag(index, record)" color="blue">
                     <a-icon type="plus" /> 选择
                   </a-tag>
                 </a-col>
@@ -46,19 +53,25 @@
             <div style="max-height:64px;overflow-y:scroll;">
               <a-row v-if="record.productBrandList && record.productBrandList.length>0">
                 <a-col :span="20">
-                  <a-tag style="margin-bottom:10px;" closable @close.prevent="delLabel(record.bizUserScopeSn,item,'brandList')" v-for="(item,j) in record.productBrandList" :key="j">
+                  <a-tag
+                    style="margin-bottom:10px;"
+                    :id="'categorySet-chooseBrand'+record.bizUserScopeSn"
+                    closable
+                    @close.prevent="delLabel(record.bizUserScopeSn,item,'brandList')"
+                    v-for="(item,j) in record.productBrandList"
+                    :key="j">
                     {{ item.dataName }}
                   </a-tag>
                 </a-col>
                 <a-col :span="4" style="text-align:right;">
-                  <a-tag style="background: #fff; borderStyle: dashed;" @click="addBrandTag(index, record)" color="blue">
+                  <a-tag style="background: #fff; borderStyle: dashed;" :id="'categorySet-chooseBrand-btn'+record.bizUserScopeSn" @click="addBrandTag(index, record)" color="blue">
                     <a-icon type="plus" /> 选择
                   </a-tag>
                 </a-col>
               </a-row>
               <a-row v-else>
                 <a-col :span="24">
-                  <a-tag style="background: #fff; borderStyle: dashed;" @click="addBrandTag(index, record)" color="blue">
+                  <a-tag style="background: #fff; borderStyle: dashed;" :id="'categorySet-chooseBrand-btn1'+record.bizUserScopeSn" @click="addBrandTag(index, record)" color="blue">
                     <a-icon type="plus" /> 选择
                   </a-tag>
                 </a-col>
@@ -70,6 +83,7 @@
               size="small"
               type="link"
               class="button-error"
+              :id="'categorySet-delete-btn'+record.bizUserScopeSn"
               @click="handleDel(record)"
             >
               删除
@@ -87,9 +101,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
+import { STable } from '@/components'
 import ChooseBrandModal from '@/views/common/chooseBrandModal.vue'
 import ChooseTypeModal from '@/views/common/chooseTypeModal.vue'
-import { STable } from '@/components'
+// 接口
 import { getNewScopeSn, queryProductScopePage, saveProductBrandList, saveProductTypeList, bizuserScopeDelete, deleteProductBrand, deleteProductType } from '@/api/bizuser'
 export default {
   name: 'CategorySet',
@@ -104,24 +120,25 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '分类', dataIndex: 'no', width: '42%', align: 'center', scopedSlots: { customRender: 'classify' } },
         { title: '品牌', dataIndex: 'name', width: '42%', align: 'center', scopedSlots: { customRender: 'brand' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '16%', align: 'center' }
       ],
+      // 查询参数
       queryParam: {
         hasDetail: 1
       },
-      dataSource: [],
+      dataSource: [], // 列表数据
       openModal: false, //  新增编辑产品品牌  弹框
       itemSn: '', //  当前sn
       nowData: null, //  当前记录数据
-      openBrandModal: false,
-      openTypeModal: false,
-      chooseBrand: [],
-      chooseType: [],
+      openBrandModal: false, // 打开品牌弹窗
+      openTypeModal: false, // 打开分类弹窗
+      chooseBrand: [], // 选择品牌数据
+      chooseType: [], // 选择分类数据
       chooseObj: null, // 选择品牌 内容
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
@@ -129,11 +146,12 @@ export default {
         this.spinning = true
         this.queryParam.userSn = this.$route.query.sn
         this.queryParam.bizUserSn = this.bizUserSn
+        // 获取列表数据  有分页
         return queryProductScopePage(Object.assign(parameter, this.queryParam)).then(res => {
           const data = res.data
+          // 计算列表序号
           const no = (data.pageNo - 1) * data.pageSize
           this.total = data.count || 0
-
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
           }
@@ -203,6 +221,7 @@ export default {
       this.chooseObj = row
       this.openTypeModal = true
     },
+    // 打开分类弹窗
     handleClassifyModal (con) {
       const chooseList = con
       this.openTypeModal = false
@@ -230,6 +249,7 @@ export default {
       this.chooseBrand = obj
       this.saveChangeData('BRAND')
     },
+    // 保存时重组数据
     saveChangeData (type) {
       const _this = this
       if (type == 'BRAND') { //  选择品牌
@@ -254,6 +274,7 @@ export default {
         }
       }
     },
+    // 保存
     save (list, type) {
       const ajaxdata = { userSn: this.$route.query.sn, bizUserScopeSn: this.chooseObj.bizUserScopeSn, bizUserSn: this.bizUserSn }
       if (type == 'BRAND') {
@@ -291,6 +312,7 @@ export default {
         }
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -298,6 +320,7 @@ export default {
       })
       this.$refs.table.refresh()
     },
+    // 计算表格高度
     setTableH () {
       const addBtnHeight = this.$refs.categorySetAddBtn.offsetHeight
       this.tableHeight = window.innerHeight - addBtnHeight - 325
@@ -316,6 +339,6 @@ export default {
 
 <style lang="less">
   .categorySet-wrap{
-     
+
   }
 </style>

+ 19 - 11
src/views/dealerManagement/businessOwnerSettings/chooseAreaModal.vue

@@ -10,12 +10,13 @@
     <div class="areaSetModal">
       <div :style="{ height: tableHeight+84.5+'px' }">
         <div>
-          <a-checkbox :checked="checkAll" @change="onCheckAllChange">全选</a-checkbox>
+          <a-checkbox id="chooseAreaModal-checkAll-btn" :checked="checkAll" @change="onCheckAllChange">全选</a-checkbox>
         </div>
         <div :style="{ height: tableHeight+30+'px' }" style="overflow-y:scroll;">
           <a-tree
             v-model="checkedKeys"
             checkable
+            id="chooseAreaModal-tree"
             :auto-expand-parent="autoExpandParent"
             :tree-data="subregionData"
             :checkStrictly="true"
@@ -27,8 +28,8 @@
         </div>
       </div>
       <div class="areaFooter">
-        <a-button style="margin-right: 15px" @click="visible = false" :disabled="disabled" id="areaSet-reset">取消</a-button>
-        <a-button type="primary" @click="save" :disabled="disabled" id="areaSet-refresh">保存</a-button>
+        <a-button style="margin-right: 15px" @click="visible = false" :disabled="disabled" id="chooseAreaModal-close">取消</a-button>
+        <a-button type="primary" @click="save" :disabled="disabled" id="chooseAreaModal-save">保存</a-button>
       </div>
     </div>
   </a-drawer>
@@ -36,6 +37,7 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 接口
 import { subareaQueryAll } from '@/api/subarea'
 export default {
   mixins: [commonMixin],
@@ -65,16 +67,18 @@ export default {
   },
   data () {
     return {
-      autoExpandParent: true,
+      autoExpandParent: true, // 是否展开子级数据
       checkAll: false, //  全选
+      // 选中数据
       checkedKeys: {
-        checked: [], halfChecked: []
+        checked: [],
+        halfChecked: []
       },
-      subregionData: null,
-      tableHeight: 0,
-      visible: false,
-      disabled: false,
-      parentArr: []
+      subregionData: null, // 树数据
+      tableHeight: 0, // 表格高度
+      visible: false, // 是否打开弹窗
+      disabled: false, // 取消、保存按钮禁用状态
+      parentArr: []// 父级展开数据
     }
   },
   methods: {
@@ -84,6 +88,7 @@ export default {
       this.parentArr = expandedKeys
       this.autoExpandParent = false
     },
+    // 获取区域数据
     getArea () {
       subareaQueryAll().then(res => {
         if (res.status == 200) {
@@ -106,7 +111,7 @@ export default {
         }
       })
     },
-
+    // 保存
     save () {
       this.$emit('ok', this.checkedKeys)
     },
@@ -133,9 +138,11 @@ export default {
         })
       }
     },
+    // 选中  check
     onCheck (checkedKeys) {
       this.checkedKeys = checkedKeys
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -143,6 +150,7 @@ export default {
       })
       this.getArea()
     },
+    // 计算表格高度
     setTableH () {
       this.tableHeight = window.innerHeight - 325
     }

+ 43 - 28
src/views/dealerManagement/businessOwnerSettings/chooseDealer.vue

@@ -15,9 +15,9 @@
             </a-form-item>
           </a-col>
           <a-col :md="8" :sm="24">
-            <a-form-model-item label="商户级别" prop="dealerLevel">
-              <v-select code="DEALER_LEVEL" id="ucModal-dealerLevel" v-model="queryParam.dealer.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
-            </a-form-model-item>
+            <a-form-item label="商户级别" prop="dealerLevel">
+              <v-select code="DEALER_LEVEL" id="chooseDealer-dealerLevel" v-model="queryParam.dealer.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+            </a-form-item>
           </a-col>
           <a-col :md="8" :sm="24" v-if="pageType!='viewDealers'">
             <a-form-item label="所在区域/分区">
@@ -27,13 +27,13 @@
           <div v-else>
             <a-col :md="8" :sm="24">
               <a-form-item label="审核状态">
-                <v-select code="AUDIT_STATE" id="viewDealers-auditState" v-model="queryParam.auditState" allowClear placeholder="请选择审核状态"></v-select>
+                <v-select code="AUDIT_STATE" id="chooseDealer-auditState" v-model="queryParam.auditState" allowClear placeholder="请选择审核状态"></v-select>
               </a-form-item>
             </a-col>
             <a-col :md="8" :sm="24">
-              <a-form-model-item label="地区">
-                <AreaList id="viewDealers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
-              </a-form-model-item>
+              <a-form-item label="地区">
+                <AreaList id="chooseDealer-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+              </a-form-item>
             </a-col>
           </div>
           <a-col :md="pageType!='viewDealers'?8:6" :sm="24" style="margin-bottom: 10px;">
@@ -42,14 +42,15 @@
           </a-col>
         </a-row>
       </a-form>
-      <!-- 列表 -->
+      <!-- 操作按钮 -->
       <div style="margin-bottom: 10px">
-        <a-button type="primary" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
+        <a-button type="primary" id="chooseDealer-add" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
         <span style="margin-left: 5px">
           <template v-if="selectCount"> {{ `已选 ${selectCount} 项` }} </template>
         </span>
       </div>
     </div>
+    <!-- 列表 -->
     <s-table
       class="sTable"
       ref="table"
@@ -75,7 +76,7 @@
           class="button-error"
           @click="handleAdd(record)"
           v-if="record.subareaAreaSn != parentData.subareaAreaSn"
-          id="marketingDivisionSetNew-del-btn">添加</a-button>
+          :id="'chooseDealer-add-btn'+record.dealerSn">添加</a-button>
         <span style="color:#666" v-else>已添加</span>
       </template>
     </s-table>
@@ -84,11 +85,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import AreaList from '@/views/common/areaList.js'
-import { bizuserScopeQueryDealer } from '@/api/bizuser'
 import subarea from '@/views/common/subarea.js'
 import dealerType from '@/views/common/dealerType.js'
+// 接口
+import { bizuserScopeQueryDealer } from '@/api/bizuser'
 export default {
   name: 'ChooseDealer',
   mixins: [commonMixin],
@@ -108,36 +111,39 @@ export default {
   data () {
     return {
       spinning: false,
-      dealerType: [],
-      queryParam: { //  查询条件
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      loading: false, // 批量添加loading
+      dealerType: [], // 商户类型
+      //  查询条件
+      queryParam: {
         dealer: {
-          nameLike: '',
+          nameLike: '', // 经销商名称/别名
           dealerType1: undefined, //  商户类型
           dealerType2: undefined, //  商户类型
           dealerLevel: null
         },
-        auditState: undefined,
-        provinceSn: undefined,
-        citySn: undefined,
-        districtSn: undefined,
-        subareaSn: undefined,
-        subareaAreaSn: undefined
+        auditState: undefined, // 审核状态
+        provinceSn: undefined, // 省sn
+        citySn: undefined, // 市sn
+        districtSn: undefined, // 区sn
+        subareaSn: undefined, // 区域
+        subareaAreaSn: undefined// 分区
       },
-      userSn: '',
-      pageFlag: false,
-      chooseInfo: [],
-      tableHeight: 0,
-      disabled: false, //  查询、重置按钮是否可操作
-      loading: false, // 批量添加loading
+      userSn: '', // 用户sn
+      pageFlag: false, // 是否显示选择框
+      chooseInfo: [], // 选中数据
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
         this.queryParam.userSn = this.userSn
+        // 获取列表数据  有分页
         return bizuserScopeQueryDealer(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           const _this = this
           if (res.status == 200) {
             data = res.data
+            // 计算列表序号
             const no = 0
             const chooseData = []
             for (var i = 0; i < data.list.length; i++) {
@@ -163,7 +169,7 @@ export default {
           return data
         })
       },
-      rowSelectionInfo: null
+      rowSelectionInfo: null// 选中数据
     }
   },
   computed: {
@@ -185,6 +191,7 @@ export default {
       }
       return arr
     },
+    // 计算选中数据条数
     selectCount () {
       return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length
     }
@@ -194,19 +201,23 @@ export default {
     rowSelectionFun (obj) {
       this.rowSelectionInfo = obj || null
     },
+    // 商户类型 change
     getDealerType (v, o) {
       this.queryParam.dealer.dealerType1 = v[0]
       this.queryParam.dealer.dealerType2 = v[1]
     },
+    // 地区 change
     areaChange (val) {
       this.queryParam.provinceSn = val[0] ? val[0] : ''
       this.queryParam.citySn = val[1] ? val[1] : ''
       this.queryParam.districtSn = val[2] ? val[2] : ''
     },
+    // 查询
     searchForm (flag) {
       this.$refs.table.refresh(flag)
       this.spinning = false
     },
+    // 区域分区
     subareaChange (val) {
       this.queryParam.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaAreaSn = val[1] ? val[1] : undefined
@@ -219,7 +230,7 @@ export default {
           nameLike: '',
           dealerType1: undefined, //  商户类型
           dealerType2: undefined, //  商户类型
-          dealerLevel: null
+          dealerLevel: null// 商户级别
         },
         auditState: undefined,
         provinceSn: undefined,
@@ -237,6 +248,7 @@ export default {
       this.$refs.table.refresh(true)
       this.pageFlag = false
     },
+    // 清除表格内容
     clearTable () {
       this.rowSelectionInfo = null
       this.$refs.table.clearTable()
@@ -252,6 +264,7 @@ export default {
       this.spinning = false
       this.$emit('plAdd', dealerSnList)
     },
+    // 添加
     handleAdd (row) {
       if (row.subareaArea) {
         const _this = this
@@ -269,6 +282,7 @@ export default {
         this.$emit('add', row)
       }
     },
+    // 初始化
     pageInit (data) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -278,6 +292,7 @@ export default {
       this.userSn = data.sn
       this.resetSearchForm()
     },
+    // 计算表格数据
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 285

+ 27 - 13
src/views/dealerManagement/businessOwnerSettings/chooseSupplier.vue

@@ -2,7 +2,7 @@
   <a-spin :spinning="spinning" tip="Loading...">
     <!-- 搜索条件 -->
     <div ref="tableSearch" class="table-page-search-wrapper newTableSearchName">
-      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+      <a-form layout="inline" id="chooseSupplier-form" @keyup.enter.native="$refs.table.refresh(true)">
         <a-row :gutter="15">
           <a-col :md="8" :sm="24">
             <a-form-item label="供应商名称">
@@ -15,14 +15,15 @@
           </a-col>
         </a-row>
       </a-form>
-      <!-- 列表 -->
+      <!-- 操作按钮 -->
       <div style="margin-bottom: 10px">
-        <a-button type="primary" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
+        <a-button type="primary" ghost :loading="loading" id="chooseSupplier-add" @click="handleBatchAudit">批量添加</a-button>
         <span style="margin-left: 5px">
           <template v-if="selectCount"> {{ `已选 ${selectCount} 项` }} </template>
         </span>
       </div>
     </div>
+    <!-- 列表 -->
     <s-table
       class="sTable"
       ref="table"
@@ -43,10 +44,12 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import AreaList from '@/views/common/areaList.js'
-import { querySupplierPage } from '@/api/bizuser'
 import subarea from '@/views/common/subarea.js'
+// 接口
+import { querySupplierPage } from '@/api/bizuser'
 export default {
   name: 'ChooseSupplier',
   mixins: [commonMixin],
@@ -54,26 +57,29 @@ export default {
   data () {
     return {
       spinning: false,
-      queryParam: { //  查询条件
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      loading: false, // 批量添加loading
+      //  查询条件
+      queryParam: {
         supplier: {
-          supplierName: ''
+          supplierName: ''// 供应商名称
         }
       },
-      userSn: '',
-      pageFlag: false,
-      chooseInfo: [],
-      tableHeight: 0,
-      disabled: false, //  查询、重置按钮是否可操作
-      loading: false, // 批量添加loading
+      userSn: '', // 用户sn
+      pageFlag: false, // 是否显示选择框
+      chooseInfo: [], // 选中数据
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.spinning = true
         this.queryParam.userSn = this.userSn
+        // 获取列表数据  有分页
         return querySupplierPage(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           const _this = this
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = 0
             const chooseData = []
             for (var i = 0; i < data.list.length; i++) {
@@ -96,7 +102,7 @@ export default {
           return data
         })
       },
-      rowSelectionInfo: null
+      rowSelectionInfo: null// 列表选择数据
     }
   },
   computed: {
@@ -109,6 +115,7 @@ export default {
       ]
       return arr
     },
+    // 计算列表选中数据条数
     selectCount () {
       return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length
     }
@@ -118,15 +125,18 @@ export default {
     rowSelectionFun (obj) {
       this.rowSelectionInfo = obj || null
     },
+    // 地区
     areaChange (val) {
       this.queryParam.provinceSn = val[0] ? val[0] : ''
       this.queryParam.citySn = val[1] ? val[1] : ''
       this.queryParam.districtSn = val[2] ? val[2] : ''
     },
+    // 查询
     searchForm (flag) {
       this.$refs.table.refresh(flag)
       this.spinning = false
     },
+    // 区域分区
     subareaChange (val) {
       this.queryParam.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaAreaSn = val[1] ? val[1] : undefined
@@ -142,6 +152,7 @@ export default {
       this.$refs.table.refresh(true)
       this.pageFlag = false
     },
+    // 清除表格内容
     clearTable () {
       this.rowSelectionInfo = null
       this.$refs.table.clearTable()
@@ -157,6 +168,7 @@ export default {
       this.spinning = false
       this.$emit('plAdd', supplierSnList)
     },
+    // 添加
     handleAdd (row) {
       if (row.subareaArea) {
         const _this = this
@@ -174,6 +186,7 @@ export default {
         this.$emit('add', row)
       }
     },
+    // 初始化
     pageInit (data) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -184,6 +197,7 @@ export default {
       this.resetSearchForm()
       this.pageFlag = false
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 300

+ 26 - 14
src/views/dealerManagement/businessOwnerSettings/list.vue

@@ -3,10 +3,10 @@
     <a-card size="small" :bordered="false" class="searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper newTableSearchName">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="businessOwnerSettings-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
-              <a-form-model-item label="人员类型">
+              <a-form-item label="人员类型">
                 <v-select
                   v-model="queryParam.bizUserType"
                   ref="printStatus"
@@ -14,7 +14,7 @@
                   code="BIZ_USER_TYPE"
                   placeholder="请选择人员类型"
                   allowClear></v-select>
-              </a-form-model-item>
+              </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="人员姓名">
@@ -29,6 +29,7 @@
         </a-form>
       </div>
     </a-card>
+    <!-- 操作按钮 -->
     <a-card size="small" :bordered="false" class="dealerZoneSearch-wrap">
       <a-spin :spinning="spinning" tip="Loading...">
         <div class="table-operator">
@@ -64,9 +65,15 @@
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
-            <a-button size="small" type="link" class="button-warning" v-if="record.allDealerFlag!=1 || record.allProductFlag!=1 ||record.allSupplierFlag&&record.allSupplierFlag!=1" @click="handleSetCategory(record)">设置管辖范围</a-button>
-            <a-button size="small" type="link" class="button-info" @click="handleEdit(record)">编辑</a-button>
-            <a-button size="small" type="link" class="button-error" @click="handleDelete(record)">删除</a-button>
+            <a-button
+              size="small"
+              type="link"
+              :id="'businessOwnerSettings-set-btn'+record.id"
+              class="button-warning"
+              v-if="record.allDealerFlag!=1 || record.allProductFlag!=1 ||record.allSupplierFlag&&record.allSupplierFlag!=1"
+              @click="handleSetCategory(record)">设置管辖范围</a-button>
+            <a-button size="small" type="link" :id="'businessOwnerSettings-edit-btn'+record.id" class="button-info" @click="handleEdit(record)">编辑</a-button>
+            <a-button size="small" type="link" :id="'businessOwnerSettings-del-btn'+record.id" class="button-error" @click="handleDelete(record)">删除</a-button>
           </template>
         </s-table>
       </a-spin>
@@ -78,9 +85,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
-import { queryPage, bizuserDelete } from '@/api/bizuser'
 import addModal from './addModal'
+// 接口
+import { queryPage, bizuserDelete } from '@/api/bizuser'
 export default {
   name: 'BusinessOwnerSettings',
   mixins: [commonMixin],
@@ -89,10 +98,11 @@ export default {
     return {
       spinning: false,
       disabled: false, //  查询、重置按钮是否可操作
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      // 查询参数
       queryParam: {
-        bizUserType: '',
-        userName: undefined
+        bizUserType: '', // 人员类型
+        userName: undefined// 人员姓名
       },
       columns: [
         { title: '创建时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -108,9 +118,11 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据  有分页
         return queryPage(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           data = res.data
+          // 计算列表序号
           const no = (data.pageNo - 1) * data.pageSize
           this.total = data.count || 0
           for (var i = 0; i < data.list.length; i++) {
@@ -122,13 +134,11 @@ export default {
         })
       },
       openAddModal: false, //  编辑  弹框
-      itemId: ''
+      itemId: ''// 当前id
     }
   },
   methods: {
-    userChange (val) {
-      this.queryParam.userSn = val.key
-    },
+    // 设置管辖范围
     handleSetCategory (row) {
       this.$router.push({ name: 'categorySet', query: { sn: row.userSn, id: row.id } })
     },
@@ -181,6 +191,7 @@ export default {
       this.itemId = ''
       this.openAddModal = false
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -188,6 +199,7 @@ export default {
       })
       this.resetSearchForm()
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 240

+ 37 - 29
src/views/dealerManagement/businessOwnerSettings/settingsIndex.vue

@@ -12,31 +12,32 @@
       </div>
       <a-card size="small" :bordered="false" class="categorySet-cont">
         <div>
-          <a-tabs v-model="activeKeyVal" @change="handleTabs">
+          <a-tabs v-model="activeKeyVal" @change="handleTabs" id="settingsIndex-tabs">
             <a-tab-pane key="1" tab="设置管辖区域" v-if="infoObj.allDealerFlag && infoObj.allDealerFlag!=1">
               <div class="areaSet-wrap">
                 <div class="table-page-search-wrapper newTableSearchName" >
-                  <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+                  <a-form layout="inline" id="settingsIndex-form" @keyup.enter.native="$refs.table.refresh(true)">
                     <a-row :gutter="15">
                       <a-col :md="6" :sm="24">
-                        <a-form-model-item label="所在区域/分区">
-                          <subarea id="chooseDealer-subarea" ref="subarea" @change="subareaChange"></subarea>
-                        </a-form-model-item>
+                        <a-form-item label="所在区域/分区">
+                          <subarea id="settingsIndex-subarea" ref="subarea" @change="subareaChange"></subarea>
+                        </a-form-item>
                       </a-col>
                       <a-col :md="6" :sm="24">
                         <a-form-item label="经销商名称">
-                          <a-input id="areaSet-dealerName" v-model.trim="queryParam.dealerName" allowClear placeholder="请输入经销商名称"/>
+                          <a-input id="settingsIndex-dealerName" v-model.trim="queryParam.dealerName" allowClear placeholder="请输入经销商名称"/>
                         </a-form-item>
                       </a-col>
                       <a-col :md="6" :sm="24">
-                        <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="areaSet-refresh">查询</a-button>
-                        <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="areaSet-reset">重置</a-button>
+                        <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="settingsIndex-refresh">查询</a-button>
+                        <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="settingsIndex-reset">重置</a-button>
                       </a-col>
                     </a-row>
                   </a-form>
+                  <!-- 操作按钮 -->
                   <div class="areaSet-btnGroup" style="margin-bottom:10px;">
-                    <a-button type="primary" class="button-info" @click="openAreaModal">选择区域</a-button>
-                    <a-button type="primary" class="button-error" @click="openDealerModal">选择经销商</a-button>
+                    <a-button type="primary" id="settingsIndex-addArea" class="button-info" @click="openAreaModal">选择区域</a-button>
+                    <a-button type="primary" id="settingsIndex-addDealer" class="button-error" @click="openDealerModal">选择经销商</a-button>
                   </div>
                 </div>
                 <a-spin :spinning="spinning" tip="Loading...">
@@ -45,8 +46,7 @@
                     class="sTable fixPagination"
                     ref="table"
                     size="small"
-                    :rowKey="(record) => record.no"
-                    rowKeyName="no"
+                    :rowKey="(record) => record.id"
                     :columns="columns"
                     :data="loadData"
                     :defaultLoadData="false"
@@ -59,10 +59,8 @@
                         size="small"
                         type="link"
                         class="button-error"
-                        @click="handleDel(record)"
-                      >
-                        删除
-                      </a-button>
+                        :id="'settingsIndex-del-btn'+record.id"
+                        @click="handleDel(record)">删除</a-button>
                     </template>
                   </s-table>
                 </a-spin>
@@ -103,32 +101,36 @@
 </template>
 
 <script>
-import { commonMixin } from '@/utils/mixin'
+import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable } from '@/components'
 import categorySet from './categorySet'
 import supplierSet from './supplierSet'
 import chooseAreaModal from './chooseAreaModal'
 import chooseDealer from './chooseDealer.vue'
-import { queryDealerScopePage, bizuserScopeDelete, findById, queryAreaScope, queryDealerScope, saveAreaScope, saveDealerScope } from '@/api/bizuser'
-import subarea from '@/views/common/subarea.js'
+import subarea from '@/views/common/subarea.js'
+// 接口
+import { queryDealerScopePage, bizuserScopeDelete, findById, queryAreaScope, queryDealerScope, saveAreaScope, saveDealerScope } from '@/api/bizuser'
 export default {
   name: 'SettingsIndex',
   mixins: [commonMixin],
   components: { STable, categorySet, chooseAreaModal, chooseDealer, subarea, supplierSet },
   data () {
     return {
-      openChooseArea: false,
-      openChooseDealer: false,
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
+      openChooseArea: false, // 打开选择区域弹窗
+      openChooseDealer: false, // 打开选择经销商弹窗
+      // 查询参数
       queryParam: {
         hasDetail: 0,
-        bizType: undefined,
-        bizSn: undefined,
-        dealerName: ''
+        bizType: undefined, // 区域分区区别
+        bizSn: undefined, // 当前行sn
+        dealerName: ''// 经销商
       },
-      activeKeyVal: '1',
-      infoObj: {},
+      activeKeyVal: '1', // 选项卡值  1设置管辖区域 2设置管辖品类 3设置供应商
+      infoObj: {}, // 基本信息数据
       newChooseData: {// 区域分区回显
         checked: [],
         halfChecked: []
@@ -140,17 +142,18 @@ export default {
         { title: '分区', dataIndex: 'subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '经销商', dataIndex: 'dealerName', width: '16%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '8%', align: 'center' }
-      ],
-      disabled: false, //  查询、重置按钮是否可操作
+      ],
       chooseInfo: [], // 回显选中经销商信息
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
         this.queryParam.userSn = this.$route.query.sn
+        // 获取列表数据  有分页
         return queryDealerScopePage(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算列表序号
             const no = (data.pageNo - 1) * data.pageSize
             this.total = data.count || 0
             for (var i = 0; i < data.list.length; i++) {
@@ -210,6 +213,7 @@ export default {
       })
       this.saveChooseArea(newData)
     },
+    // 保存区域分区数据
     saveChooseArea (list) {
       const _this = this
       const newAjaxData = {}
@@ -222,6 +226,7 @@ export default {
         }
       })
     },
+    // tabs 选择
     handleTabs (val) {
       this.activeKeyVal = val
       if (val == 2) {
@@ -243,6 +248,7 @@ export default {
         this.queryParam.bizType = undefined
       }
     },
+    // 重置
     resetSearchForm () {
       this.queryParam = {
         bizSn: undefined,
@@ -337,6 +343,7 @@ export default {
     handleBack () {
       this.$router.push({ name: 'businessOwnerSettings' })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -344,6 +351,7 @@ export default {
       })
       _this.getBaseInfo()
     },
+    // 计算列表高度
     setTableH () {
       const headHeight = this.$refs.headerBar.offsetHeight
       this.tableHeight = window.innerHeight - headHeight - 340

+ 68 - 67
src/views/dealerManagement/businessOwnerSettings/supplierSet.vue

@@ -1,47 +1,49 @@
 <template>
-  <div class="categorySet-wrap">
+  <div class="supplierSet-wrap">
     <a-spin :spinning="spinning" tip="Loading...">
-        <div class="areaSet-wrap">
-          <div class="table-page-search-wrapper flex-center" style="width:100%;justify-content: space-between;margin-bottom:10px">
-            <div class="areaSet-btnGroup">
-              <a-button type="primary" @click="openSupplierModal">新增</a-button>
-            </div>
-            <div>
-              <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
-                <a-input style="width:300px;" id="areaSet-dealerName" v-model.trim="queryParam.supplierName" allowClear placeholder="请输入供应商名称"/>
-                <a-button style="margin-left: 15px" type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="areaSet-refresh">查询</a-button>
-                <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="areaSet-reset">重置</a-button>
-              </a-form>
-            </div>
-          </div>
-          <a-spin :spinning="spinning" tip="Loading...">
-            <!-- 列表 -->
-            <s-table
-              class="sTable fixPagination"
-              ref="table"
-              size="small"
-              :rowKey="(record) => record.no"
-              rowKeyName="no"
-              :columns="columns"
-              :data="loadData"
-              :defaultLoadData="false"
-              :style="{ height: tableHeight + 70 +'px' }"
-              :scroll="{ y: tableHeight }"
-              bordered>
-              <!-- 操作 -->
-              <template slot="action" slot-scope="text, record">
-                <a-button
-                  size="small"
-                  type="link"
-                  class="button-error"
-                  @click="handleDel(record)"
-                >
-                  删除
-                </a-button>
-              </template>
-            </s-table>
-          </a-spin>
+      <div class="supplierSetCon-wrap">
+        <!-- 操作按钮 -->
+        <div class="table-page-search-wrapper flex-center" style="width:100%;justify-content: space-between;margin-bottom:10px">
+          <div class="supplierSet-btnGroup">
+            <a-button type="primary" id="supplierSet-add" @click="openSupplierModal">新增</a-button>
+          </div>
+          <!-- 搜索条件 -->
+          <div>
+            <a-form layout="inline" id="supplierSet-form" @keyup.enter.native="$refs.table.refresh(true)">
+              <a-input style="width:300px;" id="supplierSet-dealerName" v-model.trim="queryParam.supplierName" allowClear placeholder="请输入供应商名称"/>
+              <a-button style="margin-left: 15px" type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="supplierSet-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="supplierSet-reset">重置</a-button>
+            </a-form>
+          </div>
         </div>
+        <a-spin :spinning="spinning" tip="Loading...">
+          <!-- 列表 -->
+          <s-table
+            class="sTable fixPagination"
+            ref="table"
+            size="small"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            :defaultLoadData="false"
+            :style="{ height: tableHeight + 70 +'px' }"
+            :scroll="{ y: tableHeight }"
+            bordered>
+            <!-- 操作 -->
+            <template slot="action" slot-scope="text, record">
+              <a-button
+                size="small"
+                type="link"
+                :id="'supplierSet-del-btn'+record.id"
+                class="button-error"
+                @click="handleDel(record)"
+              >
+                删除
+              </a-button>
+            </template>
+          </s-table>
+        </a-spin>
+      </div>
     </a-spin>
     <!-- 选择供应商 -->
     <a-drawer
@@ -60,15 +62,16 @@
 </template>
 
 <script>
-import { commonMixin } from '@/utils/mixin'
-import chooseSupplier from './chooseSupplier.vue'
-import ChooseTypeModal from '@/views/common/chooseTypeModal.vue'
+import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable } from '@/components'
+import chooseSupplier from './chooseSupplier.vue'
+// 接口
 import { querySupplierScopePage, querySupplierScope, saveSupplierList, bizuserScopeDelete } from '@/api/bizuser'
 export default {
-  name: 'CategorySet',
+  name: 'SupplierSet',
   mixins: [commonMixin],
-  components: { chooseSupplier, ChooseTypeModal, STable },
+  components: { chooseSupplier, STable },
   props: {
     bizUserSn: {
       type: String,
@@ -78,7 +81,7 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
@@ -88,29 +91,23 @@ export default {
         // { title: '联系手机', dataIndex: 'subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '8%', align: 'center' }
       ],
-      openChooseSupplier: false,
+      openChooseSupplier: false, // 选择供应商弹窗
+      // 查询参数
       queryParam: {
-        supplierName: ''
+        supplierName: ''// 供应商名称
       },
-      dataSource: [],
-      openModal: false, //  新增编辑产品品牌  弹框
-      itemSn: '', //  当前sn
-      nowData: null, //  当前记录数据
-      openBrandModal: false,
-      openChooseDealer: true,
-      openTypeModal: false,
-      chooseBrand: [],
-      chooseType: [],
-      chooseObj: null, // 选择品牌 内容
+      dataSource: [], // 列表数据
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
-        // this.spinning = true
+        this.spinning = true
         this.queryParam.userSn = this.$route.query.sn
-        this.queryParam.bizUserSn = this.bizUserSn
+        this.queryParam.bizUserSn = this.bizUserSn
+        // 获取列表数据  有分页
         return querySupplierScopePage(Object.assign(parameter, this.queryParam)).then(res => {
           let data
-          data = res.data
+          data = res.data
+          // 计算列表序号
           const no = (data.pageNo - 1) * data.pageSize
           this.total = data.count || 0
           for (var i = 0; i < data.list.length; i++) {
@@ -118,7 +115,7 @@ export default {
           }
           this.dataSource = data.list
           this.disabled = false
-          // this.spinning = false
+          this.spinning = false
           return data
         })
       }
@@ -153,6 +150,7 @@ export default {
         obj.userSn = this.$route.query.sn
         obj.bizUserSn = this.bizUserSn
        obj.bizType = 'supplier'
        obj.bizSn = con
        newData.push(obj)
      })
      this.saveChooseDealer(newData)
     },
+    // 保存所选供应商
     saveChooseDealer (list) {
       const _this = this
       const ajaxData = {}
@@ -181,19 +179,22 @@ export default {
         }
       })
     },
+    // 重置
     resetSearchForm () {
       this.queryParam = {
         supplierName: ''
       }
       this.$refs.table.refresh(true)
-    },
+    },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
       this.$refs.table.refresh()
-    },
+    },
+    // 计算表格高度
     setTableH () {
       this.tableHeight = window.innerHeight - 345
     }
@@ -210,7 +211,7 @@ export default {
 </script>
 
 <style lang="less">
-  .categorySet-wrap{
-    
+  .supplierSet-wrap{
+
   }
 </style>

+ 1 - 0
src/views/dealerManagement/dealerAccountManagement/detailModal.vue

@@ -22,6 +22,7 @@
 </template>
 
 <script>
+// 接口
 import { dealerUserDetail } from '@/api/dealer'
 export default {
   name: 'DealerAccountDetailModal',

+ 26 - 16
src/views/dealerManagement/dealerAccountManagement/editModal.vue

@@ -79,7 +79,9 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import custList from '@/views/common/custList.vue'
+// 接口
 import { dealerUserSave, dealerUserDetail } from '@/api/dealer'
 export default {
   name: 'DealerAccountEditModal',
@@ -99,20 +101,23 @@ export default {
     return {
       isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      // form表单label布局
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
+      // 提交数据
       form: {
-        tenantSn: '',
-        name: '',
-        phone: '',
-        loginName: '',
-        password: '',
+        tenantSn: '', // 经销商sn
+        name: '', // 管理员姓名
+        phone: '', // 管理员手机
+        loginName: '', // 管理员账号
+        password: '', // 管理员密码
         org: {
-          childUserMaxNum: ''
+          childUserMaxNum: ''// 最大可开通用户数
         }
       },
+      // 表单验证规则
       rules: {
         tenantSn: [{ required: true, message: '请选择经销商', trigger: 'change' }],
         name: [{ required: true, message: '请输入管理员姓名', trigger: 'blur' }],
@@ -151,6 +156,7 @@ export default {
         }
       }
     },
+    // 经销商名称 change
     custChange (val) {
       this.form.tenantSn = val.key
     },
@@ -197,6 +203,19 @@ export default {
           this.$refs.ruleForm.resetFields()
         }
       })
+    },
+    // 重置
+    resetSearchForm () {
+      this.$refs.ruleForm.resetFields()
+      this.form.tenantSn = ''
+      this.form.name = ''
+      this.form.phone = ''
+      this.form.loginName = ''
+      this.form.password = ''
+      this.form.org.childUserMaxNum = ''
+      if (this.itemId == '') {
+        this.$refs.custList.resetForm()
+      }
     }
   },
   watch: {
@@ -219,16 +238,7 @@ export default {
     isShow (newValue, oldValue) {
       if (!newValue) {
         this.$emit('close')
-        this.$refs.ruleForm.resetFields()
-        this.form.tenantSn = ''
-        this.form.name = ''
-        this.form.phone = ''
-        this.form.loginName = ''
-        this.form.password = ''
-        this.form.org.childUserMaxNum = ''
-        if (this.itemId == '') {
-          this.$refs.custList.resetForm()
-        }
+        this.resetSearchForm()
       }
     },
     itemId (newValue, oldValue) {

+ 16 - 12
src/views/dealerManagement/dealerAccountManagement/list.vue

@@ -3,7 +3,7 @@
     <a-card size="small" :bordered="false" class="dealerAccountList-wrap searchBoxNormal">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
-        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-form layout="inline" id="dealerAccountList-form" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="经销商名称">
@@ -50,7 +50,7 @@
           <!-- 账号状态 -->
           <template slot="loginFlag" slot-scope="text, record">
             <a-switch
-              id="dealerAccountList-enable"
+              :id="'dealerAccountList-enable'+record.id"
               v-if="$hasPermissions('B_dealerAccount_enable')"
               checkedChildren="启用"
               unCheckedChildren="禁用"
@@ -66,21 +66,21 @@
               v-if="$hasPermissions('B_dealerAccount_edit')"
               class="button-info"
               @click="handleEdit(record)"
-              id="dealerAccountList-edit-btn">编辑</a-button>
+              :id="'dealerAccountList-edit-btn'+record.id">编辑</a-button>
             <a-button
               size="small"
               type="link"
               v-if="$hasPermissions('B_dealerAccount_detail')"
               class="button-success"
               @click="handleDetail(record)"
-              id="dealerAccountList-detail-btn">详情</a-button>
+              :id="'dealerAccountList-detail-btn'+record.id">详情</a-button>
             <a-button
               size="small"
               type="link"
               v-if="$hasPermissions('B_dealerAccount_reset')"
               class="button-warning"
               @click="handleReset(record)"
-              id="dealerAccountList-reset-btn">重置密码</a-button>
+              :id="'dealerAccountList-reset-btn'+record.id">重置密码</a-button>
             <span v-if="!$hasPermissions('B_dealerAccount_edit') && !$hasPermissions('B_dealerAccount_detail') && !$hasPermissions('B_dealerAccount_reset')">--</span>
           </template>
         </s-table>
@@ -101,9 +101,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import dealerAccountEditModal from './editModal.vue'
 import dealerAccountDetailModal from './detailModal.vue'
+// 接口
 import { dealerUserList, dealerUserEnable, dealerUserResetP } from '@/api/dealer'
 export default {
   name: 'DealerAccountManagementList',
@@ -112,15 +114,15 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      disabled: false, //  查询、重置按钮是否可操作
       queryParam: { //  查询条件
         org: {
-          name: ''
+          name: ''// 经销商名称
         },
-        loginName: '',
-        loginFlag: undefined
+        loginName: '', // 管理员账号
+        loginFlag: undefined// 状态
       },
-      disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '11%', align: 'center' },
@@ -139,6 +141,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -153,8 +156,7 @@ export default {
       openModal: false, //  新增编辑  弹框
       openDetailModal: false, // 详情  弹框
       itemId: '', //  当前id
-      nowData: null, //  当前记录数据
-      productBrandList: []
+      nowData: null //  当前记录数据
     }
   },
   methods: {
@@ -226,12 +228,14 @@ export default {
         }
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 240

+ 23 - 21
src/views/dealerManagement/dealerZoneSearch/list.vue

@@ -6,9 +6,9 @@
         <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
-              <a-form-model-item label="所属区域/分区">
+              <a-form-item label="所属区域/分区">
                 <subarea id="dealerZoneSearch-subareaSn" ref="subarea" @change="subareaChange"></subarea>
-              </a-form-model-item>
+              </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="经销商">
@@ -17,7 +17,7 @@
             </a-col>
             <a-col :md="7" :sm="24">
               <a-form-item label="客服/区域负责人/销售总监">
-                <a-input id="dealerZoneSearch-dealerName" v-model.trim="queryParam.bizUserName" allowClear placeholder="请输入客服/区域负责人/销售总监"/>
+                <a-input id="dealerZoneSearch-bizUserName" v-model.trim="queryParam.bizUserName" allowClear placeholder="请输入客服/区域负责人/销售总监"/>
               </a-form-item>
             </a-col>
             <a-col :md="5" :sm="24">
@@ -43,8 +43,7 @@
           ref="table"
           :style="{ height: tableHeight+70+'px' }"
           size="small"
-          :rowKey="(record) => record.no"
-          rowKeyName="no"
+          :rowKey="(record) => record.id"
           :columns="columns"
           :data="loadData"
           :pageSize="30"
@@ -52,7 +51,7 @@
           :defaultLoadData="false"
           bordered>
           <template slot="kf" slot-scope="text, record">
-            <a-tooltip placement="top" v-if="record.userNameKfs">
+            <a-tooltip placement="top" :id="'dealerZoneSearch-userNameKfs'+record.id" v-if="record.userNameKfs">
               <template slot="title">
                 {{ record.userNameKfs }}
               </template>
@@ -61,7 +60,7 @@
             <span v-else>--</span>
           </template>
           <template slot="qyfzr" slot-scope="text, record">
-            <a-tooltip placement="top" v-if="record.userNameQyfzrs">
+            <a-tooltip placement="top" :id="'dealerZoneSearch-userNameQyfzrs'+record.id" v-if="record.userNameQyfzrs">
               <template slot="title">
                 {{ record.userNameQyfzrs }}
               </template>
@@ -70,7 +69,7 @@
             <span v-else>--</span>
           </template>
           <template slot="xszj" slot-scope="text, record">
-            <a-tooltip placement="top" v-if="record.userNameXszjs">
+            <a-tooltip placement="top" :id="'dealerZoneSearch-userNameXszjs'+record.id" v-if="record.userNameXszjs">
               <template slot="title">
                 {{ record.userNameXszjs }}
               </template>
@@ -86,11 +85,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { exportExcel } from '@/libs/JGPrint.js'
+// 组件
 import { STable } from '@/components'
 import subarea from '@/views/common/subarea.js'
-import { exportExcel } from '@/libs/JGPrint.js'
-import { queryDealerWithBizuser, exportDealerWithBizuser } from '@/api/dealerRelation'
 import custList from '@/views/common/custList.vue'
+// 接口
+import { queryDealerWithBizuser, exportDealerWithBizuser } from '@/api/dealerRelation'
 export default {
   name: 'DealerZoneSearch',
   mixins: [commonMixin],
@@ -99,17 +100,18 @@ export default {
     return {
       spinning: false,
       disabled: false, //  查询、重置按钮是否可操作
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
+      exportLoading: false, // 导出loading
+      // 查询条件
       queryParam: {
-        subareaSn: undefined,
-        subareaAreaSn: undefined,
+        subareaSn: undefined, // 区域
+        subareaAreaSn: undefined, // 分区
         dealer: {
-          dealerSn: '',
-          dealerName: ''
+          dealerSn: '', // 经销商sn
+          dealerName: ''// 经销商名称
         },
-        bizUserName: ''
+        bizUserName: ''// 客服/区域负责人/销售总监
       },
-      exportLoading: false, // 导出loading
       columns: [
         { title: '经销商名称', dataIndex: 'dealer.dealerName', width: '15%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '所属区域', dataIndex: 'subareaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -122,14 +124,11 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
+        // 获取列表数据 有分页
         return queryDealerWithBizuser(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
-            const no = 0
-            for (var i = 0; i < data.list.length; i++) {
-              data.list[i].no = no + i + 1
-            }
             this.disabled = false
           }
           this.spinning = false
@@ -150,6 +149,7 @@ export default {
         _this.exportLoading = false
       })
     },
+    // 区域分区
     subareaChange (val) {
       this.queryParam.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaAreaSn = val[1] ? val[1] : undefined
@@ -170,6 +170,7 @@ export default {
       this.queryParam.dealer.dealerSn = val.key
       this.queryParam.dealer.dealerName = val.key ? (val.label.replace('\n', '')).trim() : ''
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -177,6 +178,7 @@ export default {
       })
       this.$refs.table.refresh()
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 200

+ 13 - 7
src/views/dealerManagement/marketingDivisionSetNew/addAreaModal.vue

@@ -39,10 +39,10 @@
 </template>
 
 <script>
+// 接口
 import { subareaSaveSubarea, subareaQuerySubarea } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetEditModal',
-  components: { },
   props: {
     openModal: { //  弹框显示状态
       type: Boolean,
@@ -54,21 +54,25 @@ export default {
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
       return (this.itemId ? '编辑' : '新增') + '区域'
     }
   },
   data () {
     return {
-      isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      // 表单label布局
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
+      // 提交数据
       form: {
         subareaName: '' // 区域名称
       },
+      // 表单验证规则
       rules: {
         subareaName: [
           { required: true, message: '请输入区域名称', trigger: 'blur' }
@@ -77,6 +81,7 @@ export default {
     }
   },
   methods: {
+    // 区域名称
     filterEmpty () {
       let str = this.form.subareaName
       str = str.replace(/\ +/g, '')
@@ -84,10 +89,11 @@ export default {
       str = str.replace(/[\r\n]/g, '')
       this.form.subareaName = str
     },
-    getDetail(){
+    // 获取详情数据
+    getDetail () {
       this.spinning = true
-      subareaQuerySubarea({subareaSn: this.itemId}).then(res=>{
-        if(res.status == 200){
+      subareaQuerySubarea({ subareaSn: this.itemId }).then(res => {
+        if (res.status == 200) {
           this.form.subareaName = res.data[0].subareaName
         }
         this.spinning = false
@@ -131,8 +137,8 @@ export default {
         this.$emit('close')
         this.$refs.ruleForm.resetFields()
         this.form.subareaName = ''
-      }else{
-        if(this.itemId){
+      } else {
+        if (this.itemId) {
           this.getDetail()
         }
       }

+ 16 - 9
src/views/dealerManagement/marketingDivisionSetNew/addZoneModal.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="marketingDivisionSetEdit-modal"
+    class="addZone-modal"
     :footer="null"
     :maskClosable="false"
     :title="modalTit"
@@ -13,6 +13,7 @@
       ref="ruleForm"
       :model="form"
       :rules="zoneRules"
+      id="addZone-modal-form"
       :label-col="formItemLayout.labelCol"
       :wrapper-col="formItemLayout.wrapperCol"
     >
@@ -21,6 +22,7 @@
       </a-form-model-item>
       <a-form-model-item label="分区名称" prop="subareaAreaName">
         <a-input
+          id="addZone-modal-subareaAreaName"
           :maxLength="30"
           v-model.trim="form.subareaAreaName"
           @change="filterEmpty"
@@ -29,16 +31,16 @@
       </a-form-model-item>
     </a-form-model>
     <div class="btn-cont">
-      <a-button id="marketingDivisionSetEdit-modal-back" @click="isShow = false" >取消</a-button>
-      <a-button type="primary" style="margin-left: 15px;" id="marketingDivisionSetEdit-modal-save" @click="handleSave">保存</a-button>
+      <a-button id="addZone-modal-back" @click="isShow = false" >取消</a-button>
+      <a-button type="primary" style="margin-left: 15px;" id="addZone-modal-save" @click="handleSave">保存</a-button>
     </div>
   </a-modal>
 </template>
 
 <script>
-import { subareaSaveSubareaArea, subareaQuerySubareaArea } from '@/api/subarea'
+import { subareaSaveSubareaArea } from '@/api/subarea'
 export default {
-  name: 'MarketingDivisionSetEditModal',
+  name: 'MarketingDivisionAddZoneModal',
   components: { },
   props: {
     openModal: { //  弹框显示状态
@@ -47,27 +49,31 @@ export default {
     },
     parentData: {
       type: Object,
-      default: function(){
+      default: function () {
         return null
       }
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
-      return (this.parentData&&this.parentData.subareaAreaSn ? '编辑' : '新增') + '分区'
+      return (this.parentData && this.parentData.subareaAreaSn ? '编辑' : '新增') + '分区'
     }
   },
   data () {
     return {
-      isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      // 表单label设置
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
+      // 提交数据
       form: {
         subareaAreaName: '' // 分区名称
       },
+      // 表单验证规则
       zoneRules: {
         subareaAreaName: [
           { required: true, message: '请输入分区名称', trigger: 'blur' }
@@ -76,6 +82,7 @@ export default {
     }
   },
   methods: {
+    // 分区名称过滤
     filterEmpty () {
       let str = this.form.subareaAreaName
       str = str.replace(/\ +/g, '')
@@ -123,7 +130,7 @@ export default {
         this.$emit('close')
         this.$refs.ruleForm.resetFields()
         this.form.subareaAreaName = ''
-      }else{
+      } else {
         if (this.parentData.subareaAreaSn) {
           this.form.subareaAreaName = this.parentData.subareaAreaName
         }

+ 15 - 10
src/views/dealerManagement/marketingDivisionSetNew/list.vue

@@ -29,26 +29,26 @@
             class="button-info"
             v-if="record.type && record.type == 'root'"
             @click="addZone(record)"
-            id="marketingDivisionSetNew-edit-btn">新增分区</a-button>
+            :id="'marketingDivisionSetNew-edit-btn'+record.id">新增分区</a-button>
           <a-button
             size="small"
             type="link"
             class="button-success"
             v-else
             @click="handleView(record)"
-            id="marketingDivisionSetNew-edit-btn">查看经销商</a-button>
+            :id="'marketingDivisionSetNew-edit-btn'+record.id">查看经销商</a-button>
           <a-button
             size="small"
             type="link"
             class="button-info"
             @click="handleEdit(record)"
-            id="marketingDivisionSetNew-edit-btn">编辑</a-button>
+            :id="'marketingDivisionSetNew-edit-btn'+record.id">编辑</a-button>
           <a-button
             size="small"
             type="link"
             class="button-error"
             @click="handleDel(record)"
-            id="marketingDivisionSetNew-del-btn">删除</a-button>
+            :id="'marketingDivisionSetNew-del-btn'+record.id">删除</a-button>
         </template>
       </s-table>
     </a-spin>
@@ -76,10 +76,12 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import addAreaModal from './addAreaModal.vue'
 import addZoneModal from './addZoneModal.vue'
 import viewDealers from './viewDealers.vue'
+// 接口
 import { subareaQueryAll, deleteSubareaBySn, deleteSubareaAreaBySn } from '@/api/subarea'
 export default {
   name: 'MarketingDivisionSetNew',
@@ -88,10 +90,10 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
-      openAreaModal: false,
-      openZoneModal: false,
-      openDealerModal: false,
+      tableHeight: 0, // 表格高度
+      openAreaModal: false, // 打开区域弹窗
+      openZoneModal: false, // 打开分区弹窗
+      openDealerModal: false, // 打开经销商弹窗
       columns: [
         { title: '区域分区', scopedSlots: { customRender: 'titles' }, width: '70%', align: 'left' },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '30%', align: 'center' }
@@ -103,6 +105,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算列表序号
             const no = 0
             for (var i = 0; i < data.length; i++) {
               data[i].no = no + i + 1
@@ -114,8 +117,8 @@ export default {
           return data
         })
       },
-      itemId: null,
-      parentData: null
+      itemId: null, // 营销分区id
+      parentData: null// 营销分区一行数据
     }
   },
   methods: {
@@ -170,12 +173,14 @@ export default {
       this.parentData = row
       this.openDealerModal = true
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 230

+ 39 - 32
src/views/dealerManagement/marketingDivisionSetNew/viewDealers.vue

@@ -12,7 +12,7 @@
       <a-spin :spinning="spinning" tip="Loading...">
         <!-- 搜索条件 -->
         <div ref="tableSearch" class="table-page-search-wrapper newTableSearchName">
-          <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-form id="viewDealers-form" layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
             <a-row :gutter="15">
               <a-col :md="8" :sm="24">
                 <a-form-item label="经销商名称/别名">
@@ -25,9 +25,9 @@
                 </a-form-item>
               </a-col>
               <a-col :md="8" :sm="24">
-                <a-form-model-item label="商户级别">
+                <a-form-item label="商户级别">
                   <v-select code="DEALER_LEVEL" id="viewDealers-dealerLevel" v-model="queryParam.dealer.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
-                </a-form-model-item>
+                </a-form-item>
               </a-col>
               <a-col :md="8" :sm="24">
                 <a-form-item label="审核状态">
@@ -35,9 +35,9 @@
                 </a-form-item>
               </a-col>
               <a-col :md="8" :sm="24">
-                <a-form-model-item label="地区">
+                <a-form-item label="地区">
                   <AreaList id="viewDealers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
-                </a-form-model-item>
+                </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
                 <a-button type="primary" @click="searchForm" :disabled="disabled" id="viewDealers-refresh">查询</a-button>
@@ -46,19 +46,17 @@
             </a-row>
           </a-form>
         </div>
+        <!-- 操作按钮 -->
         <div style="margin-top:200px;" v-if="flag">
           <a-empty
             :image="simpleImage"
-            :image-style="{
-              height: '60px',
-            }"
-          >
+            :image-style="{height: '60px'}">
             <span slot="description"> 暂无数据 </span>
-            <a-button type="primary" class="button-error" @click="openAddDealer=true"><a-icon type="plus" />立即绑定经销商</a-button>
+            <a-button type="primary" id="viewDealers-binding" class="button-error" @click="openAddDealer=true"><a-icon type="plus" />立即绑定经销商</a-button>
           </a-empty>
         </div>
         <div class="tableCon" v-else>
-          <div style="margin-bottom:10px;"><a-button type="primary" class="button-error" @click="openAddDealer=true">绑定经销商</a-button></div>
+          <div style="margin-bottom:10px;"><a-button type="primary" id="viewDealers-binding-btn" class="button-error" @click="openAddDealer=true">绑定经销商</a-button></div>
           <s-table
             class="sTable"
             ref="table"
@@ -74,6 +72,7 @@
                 size="small"
                 type="link"
                 class="button-error"
+                :id="'viewDealers-del-btn'+record.id"
                 @click="handleDel(record)"
               >删除</a-button>
             </template>
@@ -81,7 +80,6 @@
         </div>
       </a-spin>
     </a-drawer>
-
     <!-- 绑定经销商 -->
     <a-drawer
       title="绑定经销商"
@@ -107,11 +105,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { Empty } from 'ant-design-vue'
+// 组件
 import { STable, VSelect } from '@/components'
 import chooseDealer from '@/views/common/chooseDealer.vue'
 import AreaList from '@/views/common/areaList.js'
-import { Empty } from 'ant-design-vue'
 import dealerType from '@/views/common/dealerType.js'
+// 接口
 import { queryPageAreaDealer, batchBindDealer, bindDealer, deleteBindDealer } from '@/api/subarea'
 export default {
   mixins: [commonMixin],
@@ -146,29 +146,27 @@ export default {
   },
   data () {
     return {
-      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
       spinning: false,
-      visible: this.showModal,
-      openAddDealer: false,
-      flag: true,
-      dealerType: [],
-      queryParam: { //  查询条件
+      disabled: false, // 查询、重置按钮是否可操作
+      tableHeight: 0, // 表格高度
+      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE, // 数据为空显示图片
+      visible: this.showModal, // 是否显示弹窗
+      openAddDealer: false, // 打开绑定经销商弹窗
+      flag: true, // 是否显示绑定经销商按钮
+      dealerType: [], // 商户类型
+      //  查询条件
+      queryParam: {
         dealer: {
-          nameLike: '',
+          nameLike: '', // 经销商名称/别名
           dealerType1: undefined, //  商户类型
           dealerType2: undefined, //  商户类型
-          dealerLevel: null,
-          auditState: undefined,
-          provinceSn: undefined,
-          citySn: undefined,
-          districtSn: undefined
+          dealerLevel: null, // 商户级别
+          auditState: undefined, // 审核状态
+          provinceSn: undefined, // 省
+          citySn: undefined, // 市
+          districtSn: undefined// 区
         }
       },
-      addrProvinceList: [], //  省下拉
-      addrCityList: [], //  市下拉
-      addrDistrictList: [], //  区下拉
-      disabled: false,
-      tableHeight: 0,
       columns: [
         { title: '经销商名称', dataIndex: 'dealer.dealerName', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '商户别名', dataIndex: 'dealer.dealerAlias', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -184,6 +182,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = 0
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -201,6 +200,7 @@ export default {
     }
   },
   methods: {
+    // 商户类型 change
     getDealerType (v, o) {
       this.queryParam.dealer.dealerType1 = v[0]
       this.queryParam.dealer.dealerType2 = v[1]
@@ -213,7 +213,7 @@ export default {
           this.resetSearchForm()
           this.$refs.chooseDealer.searchForm(false)
         }
-        this.$refs.chooseDealer.searchForm
+        this.$refs.chooseDealer.searchForm()
       })
     },
     // 批量绑定
@@ -245,6 +245,7 @@ export default {
         }
       })
     },
+    // 查询
     searchForm () {
       if (this.flag) {
         this.hasData()
@@ -252,6 +253,7 @@ export default {
         this.$refs.table.refresh(true)
       }
     },
+    // 重置
     resetData () {
       this.dealerType = []
       this.queryParam = {
@@ -268,6 +270,7 @@ export default {
       }
       this.$refs.areaList.clearData()
     },
+    // 重置查询
     resetSearchForm () {
       if (this.flag) {
         this.hasData()
@@ -276,24 +279,28 @@ export default {
         this.$refs.table.refresh(true)
       }
     },
+    // 地区 change
     areaChange (val) {
       this.queryParam.dealer.provinceSn = val[0] ? val[0] : ''
       this.queryParam.dealer.citySn = val[1] ? val[1] : ''
       this.queryParam.dealer.districtSn = val[2] ? val[2] : ''
     },
+    // 是否已有绑定数据
     async hasData () {
       const ret = await queryPageAreaDealer({ pageNo: 1, pageSize: 10, subareaSn: this.parentData.subareaSn, subareaAreaSn: this.parentData.subareaAreaSn }).then(res => res.data)
       this.flag = ret.count == 0
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
       this.flag = true
-      // 判断是已绑定数据
+      // 判断是已绑定数据
       this.hasData()
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 290

+ 27 - 14
src/views/dealerManagement/merchantInfoManagement/chooseTypeModal.vue

@@ -14,6 +14,7 @@
         ref="ruleForm"
         :model="form"
         :rules="rules"
+        id="chooseType-form"
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
       >
@@ -22,7 +23,7 @@
             code="PRICE_LEVEL"
             :notIn="notArr"
             style="width: 70%;"
-            id="productPriceLevel-level"
+            id="chooseType-level"
             v-model="form.priceLevel"
             allowClear
             :disabled="notArrFlag"
@@ -30,10 +31,10 @@
         </a-form-model-item>
         <a-form-model-item label="添加品类" prop="typeVal">
           <span v-for="(con,i) in filterList" :key="con.id" >
-            <a-checkbox :checked="con.checked" @change="e=>onChangeType(e.target.checked,i)" v-show="con.id!=4">
+            <a-checkbox id="chooseType-typeVal" :checked="con.checked" @change="e=>onChangeType(e.target.checked,i)" v-show="con.id!=4">
               {{ con.name }}
             </a-checkbox>
-            <a-checkbox :checked="con.checked" @change="e=>onChangeType(e.target.checked,i)" v-show="con.id==4&&disabledList.length==0">
+            <a-checkbox id="chooseType-typeVal1" :checked="con.checked" @change="e=>onChangeType(e.target.checked,i)" v-show="con.id==4&&disabledList.length==0">
               <a-tooltip placement="rightTop">
                 <template slot="title">
                   <span>选择全品类后,未来新加入的品类也将自动默认为已选择状态,无需再次手动操作。</span>
@@ -48,6 +49,7 @@
           <a-tree
             v-model="checkedList"
             checkable
+            id="chooseType-typeListBox"
             :auto-expand-parent="autoExpandParent"
             :tree-data="treeData"
             :replaceFields="replaceObj"
@@ -65,9 +67,10 @@
 </template>
 
 <script>
-import { dealerScopeCreate, queryWaitingData, dealerScopeQueryList } from '@/api/dealerScope'
-// import chooseTypeList from './chooseTypeList.vue'
+// 组件
 import { VSelect } from '@/components'
+// 接口
+import { dealerScopeCreate, queryWaitingData, dealerScopeQueryList } from '@/api/dealerScope'
 export default {
   name: 'ChooseTypeModal',
   components: { VSelect },
@@ -79,17 +82,18 @@ export default {
   },
   data () {
     return {
-      isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      // label 标签布局
       formItemLayout: {
         labelCol: { span: 3 },
         wrapperCol: { span: 20 }
       },
       form: {
         priceLevel: undefined, // 价格级别
-        typeVal: '0'
+        typeVal: '0'// 产品品类
       },
-      rules: {
+      rules: {// 表单验证规则
         priceLevel: [
           { required: true, message: '请选择价格级别', trigger: 'change' }
         ],
@@ -98,21 +102,23 @@ export default {
         ]
       },
       notArr: [], // 特约经销商  禁用选择
-      notArrFlag: false,
+      notArrFlag: false, // 价格级别禁用状态
       treeData: [], // 品牌分类数据
-      checkedList: [],
+      checkedList: [], // 已选产品分类
       autoExpandParent: false, // 是否自动展开父节点
-      replaceObj: {
+      replaceObj: {// 替换 treeNode 中 对应字段
         children: 'sonList', title: 'name', key: 'sn'
       },
       disabledList: [], // 已选过禁用调的品类数据
+      // 选择数据方式
       filterList: [{ id: '1', name: '全选', checked: false }, { id: '2', name: '自主品牌', checked: false }, { id: '3', name: '代理品牌', checked: false }, { id: '4', name: '全品类', checked: false }],
-      allBarndSnList: [],
-      ownBarndSnList: [],
-      agentBarndSnList: []
+      allBarndSnList: [], // 全选分类数据
+      ownBarndSnList: [], // 自主品牌分类数据
+      agentBarndSnList: []// 代理品牌分类数据
     }
   },
   methods: {
+    // 添加品类
     onChangeType (val, pos) {
       this.filterList.map(item => item.checked = false)
       this.filterList[pos].checked = val
@@ -166,6 +172,7 @@ export default {
               _this.$message.warning('请添加品类!')
               return
             }
+            // 全选时,过滤有禁用的已选过得品牌
             if (_this.disabledList.length > 0) {
               checkedArr = checkedArr.filter(items => {
                 if (!_this.disabledList.includes(items)) return items
@@ -175,6 +182,7 @@ export default {
                 return
               }
             }
+            // 重组 后台所需要的数据结构
             const arr = []
             checkedArr.forEach(item => {
               const newArr = item.split('_')
@@ -207,6 +215,7 @@ export default {
         }
       })
     },
+    // 获取已选择的品类
     getDataList () {
       const _this = this
       queryWaitingData({}).then(res => {
@@ -222,6 +231,7 @@ export default {
         _this.spinning = false
       })
     },
+    // 重组已选择数据,禁用已选择数据
     async getDisabledList () {
       const res = await dealerScopeQueryList({ dealerSn: this.$route.params.sn })
       // 重组数据
@@ -233,6 +243,7 @@ export default {
         this.getDataList()
       }
     },
+    // 遍历树,添加disabled属性
     resetDisabledList (tree, arr) {
       // 遍历树节点
       function traverse (node) {
@@ -251,12 +262,14 @@ export default {
       // 返回修改后的树
       return tree
     },
+    // 点击复选框触发事件
     onCheck (checkedKeys) {
       this.checkedList = checkedKeys.checked
       this.filterList[0].checked = this.checkedList.length === this.allBarndSnList.length
       this.filterList[1].checked = this.checkedList.length === this.ownBarndSnList.length
       this.filterList[2].checked = this.checkedList.length === this.agentBarndSnList.length
     },
+    // 重组选中数据
     changeCheckedList () {
       const ret = []
       this.checkedList.forEach((item, index) => {

+ 17 - 25
src/views/dealerManagement/merchantInfoManagement/detailModal.vue

@@ -10,6 +10,7 @@
     :width="960">
     <a-spin :spinning="spinning" tip="Loading...">
       <div style="max-height: 400px;overflow: auto;" ref="merchantInfoDetail">
+        <!-- 基础信息 -->
         <a-card title="基础信息" size="small" style="margin-bottom: 15px;">
           <a-descriptions :column="2" bordered size="small">
             <a-descriptions-item label="经销商名称">{{ form&&form.dealerName ? form.dealerName : '--' }}</a-descriptions-item>
@@ -99,7 +100,9 @@
 </template>
 
 <script>
+// 组件
 import auditModal from '@/views/common/auditModal.vue'
+// 接口
 import { dealerAudit, dealerDetailBySn, dealerFindUpdateInfoBySn } from '@/api/dealer'
 export default {
   name: 'MerchantInfoManagementModal',
@@ -109,20 +112,20 @@ export default {
       type: Boolean,
       default: false
     },
-    itemId: {
+    itemId: { // 单据id
       type: [Number, String],
       default: ''
     },
-    isAudit: Boolean
+    isAudit: Boolean // 是否显示审核按钮
   },
   data () {
     return {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
-      form: null,
-      title: '',
-      visibleAudit: false,
-      spinningAudit: false
+      form: null, // 详情内容数据
+      title: '', // 弹窗标题
+      visibleAudit: false, // 是否打开审核弹窗
+      spinningAudit: false// 审核按钮加载状态
     }
   },
   methods: {
@@ -147,25 +150,14 @@ export default {
     // 详情编辑
     getDetail () {
       this.spinning = true
-      if (this.isAudit) {
-        dealerFindUpdateInfoBySn({ sn: this.itemId }).then(res => {
-          if (res.status == 200) {
-            this.form = res.data
-            this.spinning = false
-          } else {
-            this.spinning = false
-          }
-        })
-      } else {
-        dealerDetailBySn({ sn: this.itemId }).then(res => {
-          if (res.status == 200) {
-            this.form = res.data
-            this.spinning = false
-          } else {
-            this.spinning = false
-          }
-        })
-      }
+      // 根据是否审核状态选择不同的接口
+      const funs = this.isAudit ? dealerFindUpdateInfoBySn : dealerDetailBySn
+      funs({ sn: this.itemId }).then(res => {
+        if (res.status == 200) {
+          this.form = res.data
+        }
+        this.spinning = false
+      })
     }
   },
   watch: {

+ 71 - 66
src/views/dealerManagement/merchantInfoManagement/edit.vue

@@ -118,7 +118,7 @@
                 </a-col>
                 <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
                   <a-form-model-item label="默认仓库" prop="defaultWarehouseSn" >
-                    <chooseWarehouse ref="warehouse" v-model="form.defaultWarehouseSn"></chooseWarehouse>
+                    <chooseWarehouse ref="warehouse" id="merchantInfoManagementEdit-warehouse" v-model="form.defaultWarehouseSn"></chooseWarehouse>
                   </a-form-model-item>
                 </a-col>
                 <!-- <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
@@ -198,7 +198,7 @@
                   <a-form-model-item label="一般纳税人" prop="isTaxpayer">
                     <v-select
                       code="FLAG"
-                      id="customerManagementEdit-isTaxpayer"
+                      id="merchantInfoManagementEdit-isTaxpayer"
                       v-model="form.isTaxpayer"
                       allowClear
                       placeholder="请选择是否"
@@ -420,12 +420,14 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import { getArea } from '@/api/data'
+import moment from 'moment'
+// 组件
 import { VSelect } from '@/components'
 import dealerType from '@/views/common/dealerType.js'
-import { dealerSave, dealerFindUpdateInfoBySn } from '@/api/dealer'
 import chooseWarehouse from '@/views/common/chooseWarehouse'
-import moment from 'moment'
+// 接口
+import { getArea } from '@/api/data'
+import { dealerSave, dealerFindUpdateInfoBySn } from '@/api/dealer'
 export default {
   name: 'MerchantInfoManagementEdit',
   mixins: [commonMixin],
@@ -433,60 +435,58 @@ export default {
   data () {
     return {
       spinning: false,
+      // form表单布局
       formItemLayout: {
-        labelCol: {
-          span: 8
-        },
-        wrapperCol: {
-          span: 16
-        }
+        labelCol: { span: 8 },
+        wrapperCol: { span: 16 }
       },
-      dealerType: [],
+      dealerType: [], // 商户类型
       form: {
-        dealerName: '',
-        dealerAlias: '',
-        dealerType1: undefined,
-        dealerType2: undefined,
-        contact: '',
-        contactMobile: '',
-        provinceSn: undefined,
-        citySn: undefined,
-        districtSn: undefined,
-        address: '',
-        menuMouldId: undefined,
-        contactRole: '',
-        dealerTelephone: '',
-        busniessMode: '',
-        busniessItmes: '',
-        licenseName: '',
-        busniessScope: '',
-        buildDate: '',
-        isTaxpayer: undefined,
-        indentityCard: '',
-        brithday: '',
-        nativePlace: '',
-        mail: '',
-        contact2: '',
-        contactMobile2: '',
-        contractRole2: '',
-        zipCode: '',
-        receiveContact: '',
-        receiveMobile: '',
-        receiveProvinceSn: undefined,
-        receiveCitySn: undefined,
-        receiveDistrictSn: undefined,
-        receiveAddress: '',
-        tradeAccountName: '',
-        tradeBankName: '',
-        tradeBankAccount: '',
-        jgAutoPartsCode: '',
-        jgDoorHeaderChangeTime: '',
-        isShowSpecialPrice: 0,
-        remark: '',
-        kdMidCustomerFnumber: '',
-        defaultWarehouseSn: undefined,
-        tireStorage: '0'
+        dealerName: '', // 经销商名称
+        dealerAlias: '', // 经销商别名
+        dealerType1: undefined, // 商户类型1
+        dealerType2: undefined, // 商户类型2
+        contact: '', // 联系人1
+        contactMobile: '', // 联系手机1
+        provinceSn: undefined, // 省sn
+        citySn: undefined, // 市 sn
+        districtSn: undefined, // 区sn
+        address: '', // 地址
+        menuMouldId: undefined, // 授权类型
+        contactRole: '', // 联系角色1
+        dealerTelephone: '', // 电话号码
+        busniessMode: '', // 经营方式
+        busniessItmes: '', // 经营项目
+        licenseName: '', // 营业执照名称
+        busniessScope: '', // 公司规模
+        buildDate: '', // 成立时间
+        isTaxpayer: undefined, // 一般纳税人
+        indentityCard: '', // 证件号码
+        brithday: '', // 生日
+        nativePlace: '', // 籍贯
+        mail: '', // 邮箱
+        contact2: '', // 联系人2
+        contactMobile2: '', // 手机号码2
+        contractRole2: '', // 联系角色2
+        zipCode: '', // 邮政编码
+        receiveContact: '', // 收货人
+        receiveMobile: '', // 电话号码
+        receiveProvinceSn: undefined, // 省sn
+        receiveCitySn: undefined, // 市sn
+        receiveDistrictSn: undefined, // 区sn
+        receiveAddress: '', // 收货详细地址
+        tradeAccountName: '', // 银行账户
+        tradeBankName: '', // 开户行
+        tradeBankAccount: '', // 银行卡号
+        jgAutoPartsCode: '', // 箭冠汽配代码
+        jgDoorHeaderChangeTime: '', // 门头更换日期
+        isShowSpecialPrice: 0, // 特约价是否可见 0否  1是
+        remark: '', // 备注
+        kdMidCustomerFnumber: '', // 财务编码
+        defaultWarehouseSn: undefined, // 默认仓库
+        tireStorage: '0' // 是否轮胎省仓
       },
+      // 规则验证
       rules: {
         dealerName: [
           { required: true, message: '请输入经销商名称', trigger: 'change' }
@@ -553,11 +553,12 @@ export default {
       addrProvinceList1: [], //  省下拉
       addrCityList1: [], //  市下拉
       addrDistrictList1: [], //  区下拉
-      dateFormat: 'YYYY-MM-DD',
-      detailData: null
+      dateFormat: 'YYYY-MM-DD', // 日期规则
+      detailData: null// 详情数据
     }
   },
   methods: {
+    // 银行账号 change
     bankAccountChange (e) {
       const { value } = e.target
       this.form.tradeBankAccount = value.replace(/\s*/g, '')
@@ -566,6 +567,7 @@ export default {
     disabledDate (date, dateStrings) {
       return date && date.valueOf() > Date.now()
     },
+    // 商户类型 change
     getDealerType (v, o) {
       this.form.dealerType1 = v[0]
       this.form.dealerType2 = v[1]
@@ -627,7 +629,7 @@ export default {
     },
     // 返回
     handleBack () {
-      this.$router.push({ path: '/dealerManagement/merchantInfoManagement/list', query: { closeLastOldTab: true } })
+      this.$router.push({ name: 'merchantInfoManagementList' })
     },
     // 获取城市列表
     getCityList (val) {
@@ -703,18 +705,20 @@ export default {
       }
       getArea(params).then(res => {
         if (res.status == 200) {
+          const areaData = JSON.parse(JSON.stringify(res.data || []))
+          // 省
           if (leve == 'province') {
-            this.addrProvinceList = JSON.parse(JSON.stringify(res.data || []))
-            this.addrProvinceList1 = JSON.parse(JSON.stringify(res.data || []))
-          } else if (leve == 'city') {
-            this.addrCityList = JSON.parse(JSON.stringify(res.data || []))
+            this.addrProvinceList = areaData
+            this.addrProvinceList1 = areaData
+          } else if (leve == 'city') { // 市
+            this.addrCityList = areaData
             if (index == 1) {
-              this.addrCityList1 = JSON.parse(JSON.stringify(res.data || []))
+              this.addrCityList1 = areaData
             }
-          } else if (leve == 'district') {
-            this.addrDistrictList = JSON.parse(JSON.stringify(res.data || []))
+          } else if (leve == 'district') { // 县
+            this.addrDistrictList = areaData
             if (index == 1) {
-              this.addrDistrictList1 = JSON.parse(JSON.stringify(res.data || []))
+              this.addrDistrictList1 = areaData
             }
           }
         } else {
@@ -735,6 +739,7 @@ export default {
         }
       })
     },
+    // 初始化
     pageInit () {
       this.getArea('province')
       this.$refs.ruleForm.resetFields()

+ 59 - 15
src/views/dealerManagement/merchantInfoManagement/list.vue

@@ -49,7 +49,7 @@
                 :disabled="disabled"
                 :loading="exportLoading"
                 id="merchantInfoManagementList-export">导出</a-button>
-              <a @click="advanced=!advanced" style="margin-left: 5px">
+              <a @click="advanced=!advanced" style="margin-left: 5px" id="merchantInfoManagementList-advanced">
                 {{ advanced ? '收起' : '展开' }}
                 <a-icon :type="advanced ? 'up' : 'down'"/>
               </a>
@@ -78,18 +78,54 @@
           bordered>
           <!-- 经销商 -->
           <template slot="dealerName" slot-scope="text, record">
-            <span v-if="$hasPermissions('B_merchantInfo_detail')" :title="record.dealerName" class="link-bule" @click="handleDetail(record)">{{ record.dealerName }}</span>
+            <span v-if="$hasPermissions('B_merchantInfo_detail')" :id="'merchantInfoManagementList-dealerName'+record.id" :title="record.dealerName" class="link-bule" @click="handleDetail(record)">{{ record.dealerName }}</span>
             <span v-else :title="record.dealerName">{{ record.dealerName }}</span>
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
-            <a-button size="small" type="link" class="button-warning" v-if="record.auditState == 'WAIT' && $hasPermissions('B_merchantInfo_audit')" @click="handleAudit(record)" >审核</a-button>
-            <a-button size="small" type="link" class="button-info" v-if="$hasPermissions('B_merchantInfo_cooperation')" @click="handleCooperation(record)" >合作设置</a-button>
-            <a-button size="small" type="link" class="button-primary" v-if="$hasPermissions('B_merchantInfo_level')" @click="handleLevel(record)">级别设置</a-button>
-            <a-button size="small" type="link" class="button-info" v-if="$hasPermissions('B_merchantInfo_edit')" @click="handleEdit(record)">编辑</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-audit-btn'+record.id"
+              type="link"
+              class="button-warning"
+              v-if="record.auditState == 'WAIT' && $hasPermissions('B_merchantInfo_audit')"
+              @click="handleAudit(record)" >审核</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-cooperation-btn'+record.id"
+              type="link"
+              class="button-info"
+              v-if="$hasPermissions('B_merchantInfo_cooperation')"
+              @click="handleCooperation(record)" >合作设置</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-level-btn'+record.id"
+              type="link"
+              class="button-primary"
+              v-if="$hasPermissions('B_merchantInfo_level')"
+              @click="handleLevel(record)">级别设置</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-edit-btn'+record.id"
+              type="link"
+              class="button-info"
+              v-if="$hasPermissions('B_merchantInfo_edit')"
+              @click="handleEdit(record)">编辑</a-button>
             <br>
-            <a-button size="small" type="link" class="button-error" v-if="record.auditState != 'WAIT'&&record.dealerLevel && $hasPermissions('B_merchantInfo_priceSpread')" @click="handlePriceSpread(record)">差价</a-button>
-            <a-button size="small" type="link" class="button-error" v-if="record.auditState != 'WAIT'&&record.dealerLevel && $hasPermissions('B_merchantInfo_distribution')" @click="handleDistribution(record)">经销权</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-price-btn'+record.id"
+              type="link"
+              class="button-error"
+              v-if="record.auditState != 'WAIT'&&record.dealerLevel && $hasPermissions('B_merchantInfo_priceSpread')"
+              @click="handlePriceSpread(record)">差价</a-button>
+            <a-button
+              size="small"
+              :id="'merchantInfoManagementList-power-btn'+record.id"
+              type="link"
+              class="button-error"
+              v-if="record.auditState != 'WAIT'&&record.dealerLevel && $hasPermissions('B_merchantInfo_distribution')"
+              @click="handleDistribution(record)">经销权</a-button>
             <span v-if="!(record.auditState == 'WAIT' && $hasPermissions('B_merchantInfo_audit')) && !$hasPermissions('B_merchantInfo_cooperation') && !(record.auditState != 'WAIT' && $hasPermissions('B_merchantInfo_distribution')) && !$hasPermissions('B_merchantInfo_level') && !$hasPermissions('B_merchantInfo_edit')">--</span>
           </template>
         </s-table>
@@ -113,13 +149,15 @@
 <script>
 import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
-import { dealerQueryList, dealerExport } from '@/api/dealer'
+// 组件
 import { STable, VSelect } from '@/components'
 import subarea from '@/views/common/subarea.js'
 import merchantInfoManagementDetailModal from './detailModal.vue'
 import UpdateCooperate from './updateCooperate.vue'
 import UpdateDealerLeve from './updateDealerLevel.vue'
 import dealerType from '@/views/common/dealerType.js'
+// 接口
+import { dealerQueryList, dealerExport } from '@/api/dealer'
 export default {
   name: 'MerchantInfoManagementList',
   mixins: [commonMixin],
@@ -128,8 +166,8 @@ export default {
     return {
       spinning: false,
       advanced: true, // 高级搜索 展开/关闭
-      tableHeight: 0,
-      dealerType: [],
+      tableHeight: 0, // 表格高度
+      dealerType: [], // 所选商户类型 列表
       queryParam: { //  查询条件
         nameLike: '', //  商户名称、别名
         dealerType1: undefined, //  商户类型
@@ -144,8 +182,8 @@ export default {
       },
       disabled: false, //  查询、重置按钮是否可操作
       exportLoading: false, // 导出loading
-      dateFormat: 'YYYY-MM-DD',
-      total: 0,
+      dateFormat: 'YYYY-MM-DD', // 日期显示格式
+      total: 0, // 总计
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -163,7 +201,6 @@ export default {
         { title: '生效时间', dataIndex: 'cooperateEffectiveTime', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '12%', align: 'center' }
       ],
-      loading: false,
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
@@ -172,6 +209,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             this.total = data.count || 0
             for (var i = 0; i < data.list.length; i++) {
@@ -190,14 +228,16 @@ export default {
       openUcModal: false, // 合作设置 弹框
       openUdModal: false, // 级别设置 弹框
       itemId: '', //  当前商户sn
-      isAudit: false
+      isAudit: false// 是否显示审核按钮
     }
   },
   methods: {
+    // 区域  change
     subareaChange (val) {
       this.queryParam.subareaArea.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaArea.subareaAreaSn = val[1] ? val[1] : undefined
     },
+    // 商户类型 change
     getDealerType (v, o) {
       this.queryParam.dealerType1 = v[0]
       this.queryParam.dealerType2 = v[1]
@@ -295,6 +335,7 @@ export default {
         }
       })
     },
+    // 导出成功
     download (data) {
       if (!data) { return }
       const url = window.URL.createObjectURL(new Blob([data]))
@@ -307,18 +348,21 @@ export default {
       document.body.appendChild(link)
       link.click()
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 235
     }
   },
   watch: {
+    // 展开关闭  监听表格高度变化
     advanced (newValue, oldValue) {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调

+ 22 - 15
src/views/dealerManagement/merchantInfoManagement/permissionSettingNew.vue

@@ -20,17 +20,17 @@
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="品牌" prop="productBrandSn">
-                  <ProductBrand id="chooseProducts-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
+                  <ProductBrand id="permissionSetting-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="产品分类" prop="productType">
-                  <productTypeAll placeholder="请选择产品分类" @change="changeProductType" v-model="productType" id="chooseProducts-productType"></productTypeAll>
+                  <productTypeAll placeholder="请选择产品分类" @change="changeProductType" v-model="productType" id="permissionSetting-productType"></productTypeAll>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="价格级别" prop="priceLevel">
-                  <v-select code="PRICE_LEVEL" id="productLevelEdit-priceLevel" v-model="queryParam.priceLevel" allowClear placeholder="请选择价格级别"></v-select>
+                  <v-select code="PRICE_LEVEL" id="permissionSetting-priceLevel" v-model="queryParam.priceLevel" allowClear placeholder="请选择价格级别"></v-select>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
@@ -42,10 +42,10 @@
         </div>
         <!-- 操作按钮 -->
         <div class="table-operator">
-          <a-button type="primary" class="button-error" @click="chooseTModal">选择品类</a-button>
+          <a-button type="primary" id="permissionSetting-chooseType" class="button-error" @click="chooseTModal">选择品类</a-button>
           <span v-if="!showEmpty">
-            <a-button type="primary" v-if="$route.params.dealerLevel != 'SPECIAL'" class="button-info" @click="handleEdit()">批量编辑</a-button>
-            <a-button type="primary" ghost class="button-error" @click="handleDel()">批量删除</a-button>
+            <a-button type="primary" id="permissionSetting-moreEdit" v-if="$route.params.dealerLevel != 'SPECIAL'" class="button-info" @click="handleEdit()">批量编辑</a-button>
+            <a-button type="primary" id="permissionSetting-moreDel" ghost class="button-error" @click="handleDel()">批量删除</a-button>
           </span>
         </div>
         <!-- 列表 -->
@@ -77,12 +77,14 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import ChooseTypeModal from './chooseTypeModal.vue'
 import editPriceLevelModal from './priceLevelModal.vue'
 import productTypeAll from '@/views/common/productTypeAll.js'
 import ProductBrand from '@/views/common/productBrand.js'
 import { Empty } from 'ant-design-vue'
+// 接口
 import { dealerScopeModifyPriceLevel, dealerScopeDelete, dealerScopeQueryList } from '@/api/dealerScope'
 export default {
   name: 'MerchantInfoManagementSet',
@@ -91,24 +93,24 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       queryParam: { //  查询条件
         productBrandSn: undefined, //  产品品牌
         productTypeSn1: '', //  产品一级分类
         productTypeSn2: '', //  产品二级分类
         productTypeSn3: '', //  产品三级分类
-        priceLevel: undefined
+        priceLevel: undefined// 价格级别
       },
-      productType: [],
+      productType: [], // 产品分类
       disabled: false, //  查询、重置按钮是否可操作
       openTypeModal: false, //  选择产品分类
-      openPriceLevelModal: false,
-      itemPriceLevel: '',
-      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
-      dataSource: [],
-      showEmpty: false,
+      openPriceLevelModal: false, // 打开修改价格等级弹窗
+      itemPriceLevel: '', // 价格级别数据
+      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE, // 空数据图片
+      dataSource: [], // 列表数据
+      showEmpty: false, // 数据是否为空
       showTableHead: true, // 显示表头
-      selectedRowKeys: []
+      selectedRowKeys: []// 已选数据
     }
   },
   computed: {
@@ -147,6 +149,7 @@ export default {
       ]
       return arr
     },
+    // 选择列表数据
     checkboxOption () {
       const _this = this
       return {
@@ -163,6 +166,7 @@ export default {
     }
   },
   methods: {
+    // 获取列表数据
     getData () {
       const _this = this
       _this.disabled = true
@@ -222,6 +226,7 @@ export default {
         }
       })
     },
+    // 关闭价格级别弹窗
     closePriceLevelModal () {
       this.itemPriceLevel = ''
       this.openPriceLevelModal = false
@@ -273,12 +278,14 @@ export default {
       this.selectedRowKeys = []
       this.$router.push({ path: '/dealerManagement/merchantInfoManagement/list', query: { closeLastOldTab: true } })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 205

+ 10 - 8
src/views/dealerManagement/merchantInfoManagement/priceLevelModal.vue

@@ -4,7 +4,7 @@
     class="chooseType-modal"
     :footer="null"
     :maskClosable="false"
-    title="选择品类"
+    title="编辑价格级别"
     v-model="isShow"
     @cancel="isShow=false"
     width="500px">
@@ -21,26 +21,26 @@
           <v-select
             code="PRICE_LEVEL"
             :notIn="notArr"
-            id="productPriceLevel-level"
+            id="priceLevel-modal-level"
             v-model="form.priceLevel"
             allowClear
             placeholder="请选择价格级别"></v-select>
-
         </a-form-model-item>
         <div class="fontRed">注意:价格变更后,该商户的差价设置将同步清空</div>
       </a-form-model>
       <div class="btn-cont">
-        <a-button id="chooseType-modal-back" @click="isShow = false" >取消</a-button>
-        <a-button type="primary" style="margin-left: 15px;" id="chooseType-modal-save" @click="handleSave">确定</a-button>
+        <a-button id="priceLevel-modal-back" @click="isShow = false" >取消</a-button>
+        <a-button type="primary" style="margin-left: 15px;" id="priceLevel-modal-save" @click="handleSave">确定</a-button>
       </div>
     </a-spin>
   </a-modal>
 </template>
 
 <script>
+// 组件
 import { VSelect } from '@/components'
 export default {
-  name: 'ChooseTypeModal',
+  name: 'PriceLevelModal',
   components: { VSelect },
   props: {
     openModal: { //  弹框显示状态
@@ -54,16 +54,18 @@ export default {
   },
   data () {
     return {
-      isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      // form 表单布局
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
-      notArr: [],
+      notArr: [], // 价格级别禁选数据
       form: {
         priceLevel: undefined // 价格级别
       },
+      // 表单验证规则
       rules: {
         priceLevel: [
           { required: true, message: '请选择价格等级', trigger: 'change' }

+ 21 - 14
src/views/dealerManagement/merchantInfoManagement/updateCooperate.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="merchantInfoManagement-modal"
+    class="updateCooperate-modal"
     :footer="null"
     :maskClosable="false"
     :title="title"
@@ -16,24 +16,25 @@
           :rules="rules"
           :label-col="labelCol"
           :wrapper-col="wrapperCol"
+          id="updateCooperate-form"
         >
           <a-form-model-item label="商户名称">
             {{ form.dealerName }}
           </a-form-model-item>
           <a-form-model-item label="合作状态" prop="cooperateFlag">
-            <v-select code="DEALER_COOPERATE_FLAG" id="ucModal-cooperateFlag" v-model="form.cooperateFlag" allowClear placeholder="请选择合作状态"></v-select>
+            <v-select code="DEALER_COOPERATE_FLAG" id="updateCooperate-cooperateFlag" v-model="form.cooperateFlag" allowClear placeholder="请选择合作状态"></v-select>
           </a-form-model-item>
           <a-form-model-item label="生效时间" prop="cooperateEffectiveTime">
             <a-date-picker
               style="width:100%"
-              id="ucModal-cooperateEffectiveTime"
+              id="updateCooperate-cooperateEffectiveTime"
               v-model="form.cooperateEffectiveTime"
               :format="dateFormat"
               placeholder="请选择日期" />
           </a-form-model-item>
           <div style="display: flex;justify-content: center;padding: 30px 0;">
-            <a-button  @click="cansel">取消</a-button>
-            <a-button style="margin-left: 15px;" type="primary" @click="onSubmit">确定</a-button>
+            <a-button id="updateCooperate-cancel-btn" @click="cancel">取消</a-button>
+            <a-button id="updateCooperate-submit-btn" style="margin-left: 15px;" type="primary" @click="onSubmit">确定</a-button>
           </div>
         </a-form-model>
       </a-spin>
@@ -43,9 +44,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import moment from 'moment'
+// 组件
 import { VSelect } from '@/components'
+// 接口
 import { updateCooperate } from '@/api/dealer'
-import moment from 'moment'
 export default {
   name: 'UpdateCooperate',
   mixins: [commonMixin],
@@ -60,16 +63,17 @@ export default {
     return {
       isShow: this.openUcModal, //  是否打开弹框
       spinning: false,
-      title: '合作设置',
-      dateFormat: 'YYYY-MM-DD',
-      labelCol: { span: 5 },
+      title: '合作设置', // 表格标题
+      dateFormat: 'YYYY-MM-DD', // 日期格式
+      labelCol: { span: 5 }, // form表单label布局
       wrapperCol: { span: 16 },
-      other: '',
+      // 提交数据
       form: {
-        dealerName: '',
-        cooperateFlag: undefined,
-        cooperateEffectiveTime: null
+        dealerName: '', // 商户名称
+        cooperateFlag: undefined, // 合作状态
+        cooperateEffectiveTime: null// 生效时间
       },
+      // 表单验证规则
       rules: {
         cooperateFlag: [
           { required: true, message: '请选择合作状态', trigger: 'change' }
@@ -85,12 +89,14 @@ export default {
     disabledDate (date, dateStrings) {
       return date && date.valueOf() > Date.now()
     },
+    // 赋值
     setData (row) {
       this.form.dealerSn = row.dealerSn
       this.form.dealerName = row.dealerName
       this.form.cooperateFlag = row.cooperateFlag
       this.form.cooperateEffectiveTime = row.cooperateEffectiveTime
     },
+    // 确定提交
     onSubmit () {
       const _this = this
       this.$refs.ruleForm.validate(valid => {
@@ -112,7 +118,8 @@ export default {
         }
       })
     },
-    cansel () {
+    // 取消
+    cancel () {
       this.$emit('close')
       this.$refs.ruleForm.resetFields()
     }

+ 20 - 12
src/views/dealerManagement/merchantInfoManagement/updateDealerLevel.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="merchantInfoManagement-modal"
+    class="updateDealerLevel-modal"
     :footer="null"
     :maskClosable="false"
     :title="title"
@@ -11,6 +11,7 @@
     <div>
       <a-spin :spinning="spinning" tip="Loading...">
         <a-form-model
+          id="updateDealerLevel-form"
           ref="ruleForm"
           :model="form"
           :rules="rules"
@@ -21,11 +22,11 @@
             {{ form.dealerName }}
           </a-form-model-item>
           <a-form-model-item label="商户级别" prop="dealerLevel">
-            <v-select code="DEALER_LEVEL" id="ucModal-dealerLevel" v-model="form.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+            <v-select code="DEALER_LEVEL" id="updateDealerLevel-dealerLevel" v-model="form.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
           </a-form-model-item>
           <div style="display: flex;justify-content: center;padding: 30px 0;">
-            <a-button @click="cansel">取消</a-button>
-            <a-button style="margin-left: 15px;" type="primary" @click="onSubmit">确定</a-button>
+            <a-button id="updateDealerLevel-cancel-btn" @click="cancel">取消</a-button>
+            <a-button id="updateDealerLevel-submit-btn" style="margin-left: 15px;" type="primary" @click="onSubmit">确定</a-button>
           </div>
         </a-form-model>
       </a-spin>
@@ -35,7 +36,9 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { VSelect } from '@/components'
+// 接口
 import { updateDealerLevel } from '@/api/dealer'
 export default {
   name: 'UpdateDealerLevel',
@@ -51,24 +54,26 @@ export default {
     return {
       isShow: this.openUdModal, //  是否打开弹框
       spinning: false,
-      title: '级别设置',
-      labelCol: { span: 5 },
+      title: '级别设置', // 标题
+      labelCol: { span: 5 }, // form表单布局
       wrapperCol: { span: 16 },
-      other: '',
+      // 提交数据
       form: {
-        dealerName: '',
-        dealerLevel: undefined
+        dealerName: '', // 商户名称
+        dealerLevel: undefined// 商户级别
       },
+      // 表单验证规则
       rules: {
         dealerLevel: [
           { required: true, message: '请选择商户级别', trigger: 'change' }
         ]
       },
-      dealerLevelBak: undefined,
-      isProvincialCustomers: ''
+      dealerLevelBak: undefined, // 商户级别回显数据
+      isProvincialCustomers: ''// 省仓客户
     }
   },
   methods: {
+    // 设置数据
     setData (row) {
       this.form.dealerSn = row.dealerSn
       this.form.dealerName = row.dealerName
@@ -76,6 +81,7 @@ export default {
       this.dealerLevelBak = row.dealerLevel
       this.isProvincialCustomers = row.serviceCenterSn ? '1' : '0'// 是否是省仓客户
     },
+    // 提交判断必填项
     onSubmit () {
       const _this = this
       this.$refs.ruleForm.validate(valid => {
@@ -86,6 +92,7 @@ export default {
         }
       })
     },
+    // 提交
     submitForm () {
       const _this = this
       const params = JSON.parse(JSON.stringify(_this.form))
@@ -100,7 +107,8 @@ export default {
         }
       })
     },
-    cansel () {
+    // 取消
+    cancel () {
       this.$emit('close')
       this.$refs.ruleForm.resetFields()
     }

+ 9 - 2
src/views/dealerManagement/provincialWarehouseManagement/addModal.vue

@@ -12,6 +12,7 @@
       <!-- 表单 -->
       <a-form-model
         ref="ruleForm"
+        id="addProvincialWarehouse-form"
         :model="form"
         :rules="zoneRules"
         :label-col="formItemLayout.labelCol"
@@ -20,7 +21,7 @@
       >
         <a-form-model-item label="设为省仓" prop="serviceCenterName">
           <custList
-            id="dealerZoneSearch-dealerName"
+            id="addProvincialWarehouse-dealerName"
             cooperateFlag="1"
             dealerLevel="PROVINCE"
             placeholder="请输入经销商名称搜索"
@@ -37,7 +38,9 @@
 </template>
 
 <script>
+// 组件
 import custList from '@/views/common/custList.vue'
+// 接口
 import { serviceCenterAdd } from '@/api/serviceCenter'
 export default {
   name: 'AddProvincialWarehouseModal',
@@ -55,22 +58,26 @@ export default {
     }
   },
   computed: {
+    // 弹窗标题
     modalTit () {
       return (this.parentData && this.parentData.subareaAreaSn ? '编辑' : '新增') + '省仓'
     }
   },
   data () {
     return {
-      isShow: this.openModal, //  是否打开弹框
       spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      // 表单label布局
       formItemLayout: {
         labelCol: { span: 4 },
         wrapperCol: { span: 18 }
       },
+      // 提交数据
       form: {
         serviceCenterSn: undefined, // 经销商sn
         serviceCenterName: undefined// 经销商名称
       },
+      // 表单规则验证
       zoneRules: {
         serviceCenterName: [
           { required: true, message: '请输入经销商名称', trigger: 'blur' }

+ 32 - 22
src/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue

@@ -5,9 +5,9 @@
       <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
         <a-row :gutter="15">
           <a-col :md="8" :sm="24">
-            <a-form-model-item label="地区">
-              <AreaList id="viewDealers-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
-            </a-form-model-item>
+            <a-form-item label="地区">
+              <AreaList id="chooseDealer-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+            </a-form-item>
           </a-col>
           <a-col :md="8" :sm="24">
             <a-form-item label="经销商名称/别名">
@@ -20,9 +20,9 @@
             </a-form-item>
           </a-col>
           <a-col :md="8" :sm="24">
-            <a-form-model-item label="商户级别" prop="dealerLevel">
-              <v-select code="DEALER_LEVEL" id="ucModal-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
-            </a-form-model-item>
+            <a-form-item label="商户级别" prop="dealerLevel">
+              <v-select code="DEALER_LEVEL" id="chooseDealer-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
+            </a-form-item>
           </a-col>
           <a-col :md="8" :sm="24">
             <a-form-item label="所在区域/分区">
@@ -37,7 +37,7 @@
       </a-form>
       <!-- 列表 -->
       <div style="margin-bottom: 10px">
-        <a-button type="primary" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
+        <a-button type="primary" id="chooseDealer-add" ghost :loading="loading" @click="handleBatchAudit">批量添加</a-button>
         <span style="margin-left: 5px">
           <template v-if="selectCount"> {{ `已选 ${selectCount} 项` }} </template>
         </span>
@@ -66,17 +66,19 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import AreaList from '@/views/common/areaList.js'
 import subarea from '@/views/common/subarea.js'
 import dealerType from '@/views/common/dealerType.js'
-import { getDealerListInfo, dealerQueryList } from '@/api/dealer'
+// 组件
+import { dealerQueryList } from '@/api/dealer'
 export default {
   name: 'ChooseDealer',
   mixins: [commonMixin],
   components: { STable, VSelect, subarea, AreaList, dealerType },
   props: {
-    pageType: {
+    pageType: {// 页面类型
       type: String,
       default: 'dealerPromotion'
     },
@@ -87,26 +89,26 @@ export default {
   },
   data () {
     return {
-      tableHeight: 0,
       spinning: false,
-      dealerType: [],
-      queryParam: { //  查询条件
-        nameLike: '',
+      disabled: false, //  查询、重置按钮是否可操作
+      loading: false, // 批量添加loading,
+      tableHeight: 0, // 表格高度
+      dealerType: [], // 商户类型
+      //  查询条件
+      queryParam: {
+        nameLike: '', // 经销商名称/别名
         dealerType1: undefined, //  商户类型
         dealerType2: undefined, //  商户类型
-        dealerLevel: null,
+        dealerLevel: null, // 商户级别
         subareaArea: {
           subareaSn: undefined, //  区域
           subareaAreaSn: undefined // 分区
         },
-        auditState: undefined,
-        provinceSn: undefined,
-        citySn: undefined,
-        districtSn: undefined
+        provinceSn: undefined, // 省sn
+        citySn: undefined, // 市sn
+        districtSn: undefined// 区sn
       },
-      disabled: false, //  查询、重置按钮是否可操作
-      loading: false, // 批量添加loading,
-      rowSelectionInfo: null,
+      rowSelectionInfo: null, // 已选列表数据
       columns: [
         { title: '经销商名称', dataIndex: 'dealerName', width: '30%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '商户别名', dataIndex: 'dealerAlias', align: 'left', width: '30%', customRender: function (text) { return text || '--' }, ellipsis: true },
@@ -126,6 +128,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -142,6 +145,7 @@ export default {
     }
   },
   computed: {
+    // 计算选中数据条数
     selectCount () {
       return this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length
     }
@@ -151,18 +155,22 @@ export default {
     rowSelectionFun (obj) {
       this.rowSelectionInfo = obj || null
     },
+    // 商户类型 change
     getDealerType (v, o) {
       this.queryParam.dealerType1 = v[0]
       this.queryParam.dealerType2 = v[1]
     },
+    // 地区 change
     areaChange (val) {
       this.queryParam.provinceSn = val[0] ? val[0] : ''
       this.queryParam.citySn = val[1] ? val[1] : ''
       this.queryParam.districtSn = val[2] ? val[2] : ''
     },
+    // 查询
     searchForm () {
       this.$refs.table.refresh()
     },
+    // 所在区域/分区 change
     subareaChange (val) {
       this.queryParam.subareaArea.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaArea.subareaAreaSn = val[1] ? val[1] : undefined
@@ -179,7 +187,6 @@ export default {
           subareaSn: undefined, //  区域
           subareaAreaSn: undefined // 分区
         },
-        auditState: undefined,
         provinceSn: undefined,
         citySn: undefined,
         districtSn: undefined
@@ -188,6 +195,7 @@ export default {
       this.$refs.areaList.clearData()
       this.$refs.table.refresh()
     },
+    // 清除所选数据
     clearSelect () {
       this.$refs.table.clearSelected()
     },
@@ -200,10 +208,12 @@ export default {
       }
       this.$emit('plAdd', _this.rowSelectionInfo.selectedRows)
     },
+    // 初始化
     pageInit (data) {
       this.setTableH()
       this.resetSearchForm()
     },
+    // 计算表格高度
     setTableH () {
       const headHeight = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - headHeight - 190

+ 15 - 9
src/views/dealerManagement/provincialWarehouseManagement/list.vue

@@ -83,23 +83,27 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
 import provincialWarehouseAddModal from './addModal.vue'
+// 接口
 import { serviceCenterList, provincialWarehouseEnable, serviceCenterBinding } from '@/api/serviceCenter'
 export default {
-  name: 'DealerAccountManagementList',
+  name: 'ProvincialWarehouse',
   mixins: [commonMixin],
   components: { STable, VSelect, provincialWarehouseAddModal },
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
-      queryParam: { //  查询条件
-        serviceCenterName: '',
-        dealerName: '',
-        enableFlag: undefined
-      },
+      tableHeight: 0, // 列表高度
       disabled: false, //  查询、重置按钮是否可操作
+      openModal: false, //  新增编辑  弹框
+      //  查询条件
+      queryParam: {
+        serviceCenterName: '', // 省仓名称
+        dealerName: '', // 经销商名称
+        enableFlag: undefined// 省仓状态
+      },
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '10%', align: 'center' },
@@ -119,6 +123,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -129,8 +134,7 @@ export default {
           this.spinning = false
           return data
         })
-      },
-      openModal: false //  新增编辑  弹框
+      }
     }
   },
   methods: {
@@ -189,12 +193,14 @@ export default {
         this.$refs.table.refresh()
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 240

+ 41 - 30
src/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue

@@ -18,14 +18,14 @@
               <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
                 <a-row :gutter="15">
                   <a-col :md="4" :sm="24">
-                    <a-form-model-item label="地区">
-                      <AreaList id="actualSalesReportList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
-                    </a-form-model-item>
+                    <a-form-item label="地区">
+                      <AreaList id="relatedDealersList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+                    </a-form-item>
                   </a-col>
                   <a-col :md="4" :sm="24">
-                    <a-form-model-item label="区域/分区">
+                    <a-form-item label="区域/分区">
                       <subarea ref="subarea" id="relatedDealersList-subarea" @change="subareaChange"></subarea>
-                    </a-form-model-item>
+                    </a-form-item>
                   </a-col>
                   <a-col :md="4" :sm="24">
                     <a-form-item label="经销商名称">
@@ -38,14 +38,15 @@
                     </a-form-item>
                   </a-col>
                   <a-col :md="4" :sm="24">
-                    <a-form-model-item label="商户级别" prop="dealerLevel">
+                    <a-form-item label="商户级别" prop="dealerLevel">
                       <v-select code="DEALER_LEVEL" id="relatedDealersList-dealerLevel" v-model="queryParam.dealerLevel" allowClear placeholder="请选择商户级别"></v-select>
-                    </a-form-model-item>
+                    </a-form-item>
                   </a-col>
                   <a-col :md="4" :sm="24" style="margin-bottom: 10px;">
-                    <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryCheckMakeInventoryList-refresh">查询</a-button>
-                    <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="inventoryCheckMakeInventoryList-reset">重置</a-button>
+                    <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="relatedDealersList-refresh">查询</a-button>
+                    <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="relatedDealersList-reset">重置</a-button>
                     <a-button
+                      id="relatedDealersList-export"
                       style="margin-left: 10px"
                       type="primary"
                       class="button-warning"
@@ -58,8 +59,9 @@
                 </a-row>
               </a-form>
             </div>
+            <!-- 操作按钮 -->
             <div class="relatedDealersList-btn" style="margin-bottom:10px;">
-              <a-button type="primary" @click="openDealersModal">新增经销商</a-button>
+              <a-button id="relatedDealersList-add" type="primary" @click="openDealersModal">新增经销商</a-button>
             </div>
             <!-- 列表 -->
             <s-table
@@ -87,7 +89,7 @@
                   v-if="$hasPermissions('B_serviceCenter_unbinding')"
                   class="button-info"
                   @click="handleDelete(record)"
-                  id="provincialWarehouse-edit-btn">解绑</a-button>
+                  :id="'relatedDealersList-edit-btn'+record.dealerSn">解绑</a-button>
                 <span v-else>--</span>
               </template>
             </s-table>
@@ -103,8 +105,7 @@
       :visible="openDealerModal"
       class="lookUpCustomers-modal"
       @close="closeDealerModal"
-      width="72%"
-    >
+      width="72%">
       <div class="dealerModalCon">
         <chooseDealer ref="dealerChoose" :itemSn="$route.params.sn" @plAdd="handleAddDealer"></chooseDealer>
       </div>
@@ -114,38 +115,42 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { hdExportExcel } from '@/libs/exportExcel'
+// 组件
 import { STable, VSelect } from '@/components'
 import chooseDealer from './chooseDealer.vue'
 import subarea from '@/views/common/subarea.js'
 import AreaList from '@/views/common/areaList.js'
-import { hdExportExcel } from '@/libs/exportExcel'
 import dealerType from '@/views/common/dealerType.js'
+// 接口
 import { queryServiceCenterDealerPage, serviceCenterBinding, serviceCenterUnbinding, serviceCenterExport } from '@/api/serviceCenter'
 export default {
-  name: 'LookUpCustomers',
+  name: 'RelatedDealersList',
   mixins: [commonMixin],
   components: { STable, VSelect, chooseDealer, subarea, AreaList, dealerType },
   data () {
     return {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
-      disabled: false,
-      exportLoading: false,
-      dealerType: [],
+      disabled: false, // 查询、重置按钮是否可操作
+      exportLoading: false, // 导出按钮加载状态
+      dealerType: [], // 商户类型
+      // 查询参数
       queryParam: {
-        subareaSn: undefined,
-        subareaAreaSn: undefined,
-        provinceSn: undefined,
-        citySn: undefined,
-        districtSn: undefined,
-        nameLike: '',
-        relationType: 'purchase',
+        subareaSn: undefined, // 区域
+        subareaAreaSn: undefined, // 分区
+        provinceSn: undefined, // 省sn
+        citySn: undefined, // 市sn
+        districtSn: undefined, // 区sn
+        nameLike: '', // 经销商名称
+        relationType: 'purchase', // 关系类型
         dealerType1: undefined, //  商户类型
         dealerType2: undefined, //  商户类型
-        dealerLevel: undefined
+        dealerLevel: undefined// 商户级别
       },
-      tableHeight: 0,
-      activeKeyVal: '1',
+      tableHeight: 0, // 表格高度
+      activeKeyVal: '1', // 基础信息是否显示
+      openDealerModal: false, // 打开经销商弹窗
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
@@ -154,6 +159,7 @@ export default {
           let data
           if (res.status == 200) {
             data = res.data
+            // 计算表格序号
             const no = (data.pageNo - 1) * data.pageSize
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
@@ -178,8 +184,7 @@ export default {
         { title: '商户级别', dataIndex: 'dealerLevelDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '添加时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '12%', align: 'center' }
-      ],
-      openDealerModal: false
+      ]
     }
   },
   methods: {
@@ -195,6 +200,7 @@ export default {
       this.openDealerModal = false
       this.$refs.dealerChoose.clearSelect()
     },
+    // 商户类型 change
     getDealerType (v, o) {
       this.queryParam.dealerType1 = v[0]
       this.queryParam.dealerType2 = v[1]
@@ -222,11 +228,13 @@ export default {
         this.$refs.table.refresh()
       })
     },
+    // 地区 change
     areaChange (val) {
       this.queryParam.provinceSn = val[0] ? val[0] : ''
       this.queryParam.citySn = val[1] ? val[1] : ''
       this.queryParam.districtSn = val[2] ? val[2] : ''
     },
+    // 区域分区  change
     subareaChange (val) {
       this.queryParam.subareaSn = val[0] ? val[0] : undefined
       this.queryParam.subareaAreaSn = val[1] ? val[1] : undefined
@@ -247,6 +255,7 @@ export default {
         }
       })
     },
+    // 确定解绑
     submitDel (params) {
       this.spinning = true
       serviceCenterUnbinding(params).then(res => {
@@ -292,6 +301,7 @@ export default {
     handleBack () {
       this.$router.push({ name: 'provincialWarehouseList' })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
@@ -299,6 +309,7 @@ export default {
       })
       _this.resetSearchForm()
     },
+    // 计算列表高度
     setTableH () {
       const headHeight = this.$refs.headerBar.offsetHeight
       this.tableHeight = window.innerHeight - headHeight - 340

+ 19 - 11
src/views/dealerManagement/rebateBinding/categoryList.vue

@@ -21,9 +21,11 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import { Empty } from 'ant-design-vue'
+// 组件
 import { VSelect } from '@/components'
+// 接口
 import { dealerUpsList, dealerUpsDelete } from '@/api/dealer'
-import { Empty } from 'ant-design-vue'
 // 子表格
 const ChildTableComp = {
   name: 'ChildTableComp',
@@ -48,7 +50,7 @@ const ChildTableComp = {
   },
   data () {
     return {
-      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
+      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE, // 为空 图片地址
       columns: [
         { title: '序号', field: 'no', key: 'a', width: 40, align: 'center', operationColumn: false },
         { title: '品牌', field: 'productBrandName', key: 'b', width: 100, align: 'center', operationColumn: false, renderBodyCell: ({ row, column, rowIndex }, h) => { return row[column.field] || '--' } },
@@ -75,13 +77,13 @@ export default {
   },
   data () {
     return {
-      disabled: false, //  查询、重置按钮是否可操作
       spinning: false,
+      disabled: false, //  查询、重置按钮是否可操作
       simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
-      dataSource: [],
-      list: [],
-      tableHeight: this.maxHeight,
-      columnWidthResizeOption: {
+      dataSource: [], // 列表数据
+      list: [], // 重组后适合的列表数据
+      tableHeight: this.maxHeight, // 表格高度
+      columnWidthResizeOption: {// 表格列宽设置
         // default false
         enable: true,
         // column resize min width
@@ -98,9 +100,9 @@ export default {
           this.changeExpandedRowKeys(afterExpandedRowKeys)
         }
       },
-      showEmpty: true,
-      checkedDealerSn: [],
-      isTeyue: false
+      showEmpty: true, // 是否显示空页面
+      checkedDealerSn: [], // 选中的经销商sn集合
+      isTeyue: false// 是否显示删除按钮
     }
   },
   computed: {
@@ -149,7 +151,7 @@ export default {
           </div>
         )
       }
-
+      // 表格展开收起功能
       const expendFormat = function (record, data, h) {
         if (_this.isTeyue) {
           return (<span>-</span>)
@@ -213,7 +215,9 @@ export default {
       const no = 0
       for (let i = 0; i < listData.length; i++) {
         const item = listData[i]
+        // 筛选品牌 一级、二级、三级分类数据 渲染展开表格
         const rebateScopeList = item.rebateScopeList ? this.filterData(item.rebateScopeList, queryParam) : [{ productBrandName: null, productTypeName1: null, productTypeName2: null, productTypeName3: null }]
+        // SUPERIORS 上级经销商    HEAD 总部经销商    ASSIGN 指定经销商
         const supDealerList = item.rebateDealerList.find(b => b.rebateParentType == 'SUPERIORS')
         const headDealerList = item.rebateDealerList.find(b => b.rebateParentType == 'HEAD')
         const zdDealerList = item.rebateDealerList.filter(b => b.rebateParentType == 'ASSIGN')
@@ -247,6 +251,7 @@ export default {
 
       return ret.filter(item => item.childData.length > 0)
     },
+    // 列表数据查询
     searchTable (queryParam) {
       if (this.dataSource.length) {
         this.$emit('loaded', this.dataSource)
@@ -270,12 +275,14 @@ export default {
         })
       }
     },
+    // 编辑
     handleEdit (record, e) {
       console.log(e)
       e.stopPropagation()
       const row = this.dataSource.find(item => item.dealerUpsSn == record.dealerUpsSn && item.dealerSn == record.dealerSn)
       this.$emit('edit', row)
     },
+    // 删除
     handleDel (record, e) {
       e.stopPropagation()
       const _this = this
@@ -298,6 +305,7 @@ export default {
         }
       })
     },
+    // 初始化
     pageInit (queryParam, isTeyue) {
       this.isTeyue = isTeyue
       // 获取列表

+ 21 - 14
src/views/dealerManagement/rebateBinding/categoryTree.vue

@@ -33,11 +33,13 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
-import { VSelect } from '@/components'
-import { dealerUpsPlTree } from '@/api/dealer'
 import { Empty } from 'ant-design-vue'
+// 组件
+import { VSelect } from '@/components'
 import ProductBrand from '@/views/common/productBrand.js'
 import ProductType from '@/views/common/productType.js'
+// 接口
+import { dealerUpsPlTree } from '@/api/dealer'
 export default {
   name: 'DetailProductList',
   mixins: [commonMixin],
@@ -59,27 +61,29 @@ export default {
   data () {
     return {
       spinning: false,
-      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE,
-      dataSource: [],
-      showEmpty: true,
-      dealerSn: undefined,
-      parentDealerSn: undefined,
-      checkedKeys: [],
-      halfCheckedKeys: [],
-      allLeafKeys: [],
-      allBrands: [],
-      check1: false,
-      check2: false,
-      check3: false
+      simpleImage: Empty.PRESENTED_IMAGE_SIMPLE, // 为空显示的图片
+      dataSource: [], // 树数据
+      showEmpty: true, // 是否显示为空图片
+      dealerSn: undefined, // 经销商sn
+      parentDealerSn: undefined, // 上级经销商sn
+      checkedKeys: [], // 选中数据
+      halfCheckedKeys: [], // 选中孩子节点数据
+      allLeafKeys: [], // 所有子节点数据
+      allBrands: [], // 所有品牌数据
+      check1: false, // 全选
+      check2: false, // 自主品牌
+      check3: false// 代理品牌
     }
   },
   computed: {
 
   },
   methods: {
+    // 树 check 事件
     onCheck (checkedKeys, info) {
       // console.log('onCheck', checkedKeys, info)
       this.checkedKeys = checkedKeys
+      // 选中孩子节点数据
       this.halfCheckedKeys = info.halfCheckedKeys
       if (this.check1) {
         this.check1 = false
@@ -91,6 +95,7 @@ export default {
         this.check3 = false
       }
     },
+    // 获取选中数据,重组所选数据结构
     getResult () {
       // 所有已选叶子节点
       const ret = this.allLeafKeys.filter(item => this.checkedKeys.includes(item.sn))
@@ -176,6 +181,7 @@ export default {
         this.$message.info('请选择上级经销商')
       }
     },
+    // 获取树数据
     async getTreeData () {
       this.dataSource = []
       this.allLeafKeys = []
@@ -195,6 +201,7 @@ export default {
       }
       this.spinning = false
     },
+    // 初始化
     pageInit (detailData, parentDealerSn, dealerSn) {
       this.detailData = detailData
       this.parentDealerSn = parentDealerSn

+ 35 - 21
src/views/dealerManagement/rebateBinding/list.vue

@@ -22,12 +22,12 @@
             <a-row :gutter="15">
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="品牌">
-                  <ProductBrand v-model="queryParam.productBrandSn"></ProductBrand>
+                  <ProductBrand id="rebateBinding-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24">
                 <a-form-model-item label="产品分类">
-                  <ProductType placeholder="请选择产品分类" @change="changeProductType" v-model="productType"></ProductType>
+                  <ProductType id="rebateBinding-productType" placeholder="请选择产品分类" @change="changeProductType" v-model="productType"></ProductType>
                 </a-form-model-item>
               </a-col>
               <!-- <a-col :md="6" :sm="24" v-if="!isTeyue">
@@ -42,7 +42,13 @@
               </a-col> -->
               <a-col :md="6" :sm="24" v-show="false">
                 <a-form-model-item label="差价归属方">
-                  <v-select code="REBATE_PARENT_TYPE" ref="rpType" v-model="queryParam.rebateParentType" allowClear placeholder="请选择差价归属方"></v-select>
+                  <v-select
+                    id="rebateBinding-rebateParentType"
+                    code="REBATE_PARENT_TYPE"
+                    ref="rpType"
+                    v-model="queryParam.rebateParentType"
+                    allowClear
+                    placeholder="请选择差价归属方"></v-select>
                 </a-form-model-item>
               </a-col>
               <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
@@ -56,14 +62,13 @@
         <div class="table-operator" style="display: flex;align-items: center;justify-content: space-between;" v-if="showBtns">
           <a-button id="rebateBinding-brand" type="primary" class="button-error" @click="openGlModal">差价设置</a-button>
           <div v-if="!isTeyue && hasData">
-            <a-button type="default" @click="expandAllRow">{{ expandAll?'收起全部':'展开全部' }}</a-button>
+            <a-button id="rebateBinding-isTeyue" type="default" @click="expandAllRow">{{ expandAll?'收起全部':'展开全部' }}</a-button>
           </div>
         </div>
         <!-- 列表 -->
         <categoryList ref="categoryList" @loaded="loadList" @del="delOk" @edit="handleEdit" :maxHeight="tableHeight"></categoryList>
       </a-card>
     </a-spin>
-
     <!-- 差价设置 -->
     <priceDiffModal ref="priceDiffModal" :openModal="openModal" @ok="resetGetData" @close="openModal=false"></pricediffmodal>
   </div>
@@ -71,12 +76,14 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import { STable, VSelect } from '@/components'
-import { dealerDetailBySn } from '@/api/dealer'
 import ProductType from '@/views/common/productType.js'
 import ProductBrand from '@/views/common/productBrand.js'
 import priceDiffModal from './priceDiffModal.vue'
 import categoryList from './categoryList'
+// 接口
+import { dealerDetailBySn } from '@/api/dealer'
 export default {
   name: 'RebateBinding',
   mixins: [commonMixin],
@@ -84,27 +91,29 @@ export default {
   data () {
     return {
       spinning: false,
-      tableHeight: 0,
+      tableHeight: 0, // 表格高度
       disabled: false, //  查询、重置按钮是否可操作
       loading: false, //  表格加载中
-      openModal: false,
-      detail: null,
-      productType: [],
-      queryParam: { //  查询条件
-        rebateParentType: undefined,
-        priceLevel: undefined,
-        productBrandSn: undefined,
-        productTypeSn1: undefined,
-        productTypeSn2: undefined,
-        productTypeSn3: undefined,
-        dealerName: ''
+      openModal: false, // 差价设置弹窗
+      detail: null, // 详情数据
+      productType: [], // 产品分类查询数据
+      //  查询条件
+      queryParam: {
+        rebateParentType: undefined, // 差价归属方
+        priceLevel: undefined, // 价格级别
+        productBrandSn: undefined, // 品牌
+        productTypeSn1: undefined, // 产品一级分类
+        productTypeSn2: undefined, // 产品二级分类
+        productTypeSn3: undefined, // 产品三级分类
+        dealerName: ''// 经销商名称
       },
-      showBtns: true,
-      expandAll: false,
-      hasData: false
+      showBtns: true, // 是否显示操作按钮
+      expandAll: false, // 显示展开全部  收起全部按钮
+      hasData: false // 列表数据是否为空
     }
   },
   computed: {
+    // 判断是否显示特约经销商内容
     isTeyue () {
       return this.detail && this.detail.dealerLevel == 'SPECIAL'
     }
@@ -114,6 +123,7 @@ export default {
     handleBack () {
       this.$router.push({ name: 'merchantInfoManagementList', query: { closeLastOldTab: true } })
     },
+    // 获取列表数据
     loadList (list) {
       this.showBtns = this.isTeyue ? list.length == 0 : true
       this.hasData = list.length > 0
@@ -140,6 +150,7 @@ export default {
       this.queryParam.productTypeSn2 = val[1] ? val[1] : undefined
       this.queryParam.productTypeSn3 = val[2] ? val[2] : undefined
     },
+    // 收起全部 展开全部 事件
     expandAllRow () {
       if (this.expandAll) {
         this.$refs.categoryList.foldAll()
@@ -148,6 +159,7 @@ export default {
       }
       this.expandAll = !this.expandAll
     },
+    // 差价设置成功,关闭弹窗,初始化弹窗所需数据
     resetGetData () {
       this.expandAll = false
       this.$refs.categoryList.dataSource = []
@@ -192,6 +204,7 @@ export default {
         this.spinning = false
       })
     },
+    // 初始化
     pageInit () {
       const _this = this
       this.getDetail()
@@ -199,6 +212,7 @@ export default {
         _this.setTableH()
       })
     },
+    // 获取表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - (!this.showBtns ? 50 : 205)

+ 33 - 15
src/views/dealerManagement/rebateBinding/priceDiffModal.vue

@@ -12,7 +12,7 @@
     <a-spin :spinning="spinning" tip="Loading...">
       <div style="min-height:100px;">
         <a-form-model
-          id="dealerAccountEdit-form"
+          id="priceDifference-form"
           ref="ruleForm"
           :model="form"
           :rules="rules"
@@ -26,19 +26,21 @@
             <a-row :gutter="10">
               <a-col :span="17">
                 <custList
+                  id="priceDifference-custList"
                   v-if="!form.dealerUpsSn || isSpecial"
                   ref="custList"
                   :notDealerSn="notDealer"
                   :notDealerType="['SPECIAL']"
                   @change="custSupChange"
                   placeholder="请输入经销商名称搜索"></custList>
-                <a-input v-else :value="superDealerName" disabled />
+                <a-input id="priceDifference-superDealerName" v-else :value="superDealerName" disabled />
               </a-col>
               <a-col :span="4" v-if="!isSpecial">
                 <a-input-number
                   :precision="2"
                   :min="0"
                   :max="100"
+                  id="priceDifference-parentAllotRate"
                   v-model="parentAllotRate"
                   @change="rateSupChange"
                   placeholder="请输入比例"/> %
@@ -47,6 +49,7 @@
                 <a-button
                   type="primary"
                   ghost
+                  id="priceDifference-zdDealearList"
                   @click="addItem()"
                 >添加指定</a-button>
               </a-col>
@@ -55,13 +58,14 @@
           <a-form-model-item label="指定经销商" v-if="zdDealearList.length">
             <a-row :gutter="10" v-for="(item,index) in zdDealearList" :key="item.id">
               <a-col :span="17">
-                <custList :ref="'custList-'+item.id" :notDealerSn="notZdDealer" @change="(v,r)=>custChange(v,r,index)" placeholder="请输入经销商名称搜索"></custList>
+                <custList id="priceDifference-notZdDealer" :ref="'custList-'+item.id" :notDealerSn="notZdDealer" @change="(v,r)=>custChange(v,r,index)" placeholder="请输入经销商名称搜索"></custList>
               </a-col>
               <a-col :span="4">
                 <a-input-number
                   :precision="2"
                   :min="0"
                   :max="100"
+                  id="priceDifference-allotRate"
                   v-model="item.allotRate"
                   @change="(v)=>rateChange(v,index)"
                   placeholder="请输入比例"/> %
@@ -80,6 +84,7 @@
                   type="primary"
                   title="删除"
                   size="small"
+                  id="priceDifference-del"
                   shape="circle"
                   ghost
                   icon="minus"/>
@@ -89,13 +94,14 @@
           <a-form-model-item label="箭冠总公司" v-if="!isSpecial">
             <a-row :gutter="10">
               <a-col :span="17">
-                <a-input value="箭冠总公司" disabled />
+                <a-input id="priceDifference-headOffice" value="箭冠总公司" disabled />
               </a-col>
               <a-col :span="4">
                 <a-input-number
                   :precision="2"
                   :min="0"
                   :max="100"
+                  id="priceDifference-hAllotRate"
                   v-model="hAllotRate"
                   @change="rateHChange"
                   placeholder="请输入比例"/> %
@@ -108,9 +114,10 @@
         <categoryTree v-if="showTable&&!isSpecial&&!form.dealerUpsSn" ref="categoryTree"></categoryTree>
       </div>
       <div class="btn-cont">
-        <a-button @click="isShow = false" style="font-size: 12px;">取消</a-button>
+        <a-button id="priceDifference-cancel-btn" @click="isShow = false" style="font-size: 12px;">取消</a-button>
         <a-button
           type="primary"
+          id="priceDifference-save-btn"
           style="margin-left: 20px;"
           @click="handleSave"
         >确定</a-button>
@@ -121,10 +128,12 @@
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+// 组件
 import custList from '@/views/common/custList.vue'
 import { VSelect } from '@/components'
-import { dealerUpsCreate, dealerUpsUpdate } from '@/api/dealer'
 import categoryTree from './categoryTree'
+// 接口
+import { dealerUpsCreate, dealerUpsUpdate } from '@/api/dealer'
 export default {
   name: 'PriceDiffModal',
   mixins: [commonMixin],
@@ -139,38 +148,44 @@ export default {
     return {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
-      title: '差价设置',
+      title: '差价设置', // 标题
+      // 表单label布局设置
       formItemLayout: {
         labelCol: { span: 3 },
         wrapperCol: { span: 20 }
       },
+      // 提交参数
       form: {
-        dealerSn: undefined,
-        dealerUpsSn: undefined,
+        dealerSn: undefined, // 经销商sn
+        dealerUpsSn: undefined, // 上级经销商
         rebateParentType: [], // 差价归属
         rebateDealerList: [], // 经销商列表
         rebateScopeList: [] // 品类列表
       },
       parentAllotRate: '', // 上级经销商分配比例
       hAllotRate: '', // 总部分配比例
+      // 表单规则验证
       rules: {
         rebateParentType: [{ required: true, message: '请选择差价归属方', trigger: 'change' }]
       },
-      cjgsfList: [],
-      zdDealearList: [],
-      detailData: null,
-      superDealerName: '',
-      checkedDealerSn: [],
-      showTable: false
+      cjgsfList: [], // 箭冠总公司列表
+      zdDealearList: [], // 指定经销商列表
+      detailData: null, // 详情数据
+      superDealerName: '', // 经销商数据
+      checkedDealerSn: [], // 选中经销商sn
+      showTable: false// 是否显示品牌分类列表
     }
   },
   computed: {
+    // 是否是特约经销商
     isSpecial () {
       return this.detailData && this.detailData.dealerLevel == 'SPECIAL'
     },
+    // 上级经销商数据
     notDealer () {
       return this.form.rebateDealerList.concat(this.zdDealearList).concat([{ 'parentDealerSn': this.form.dealerSn }])
     },
+    // 指定经销商列表数据
     notZdDealer () {
       return this.form.rebateDealerList.concat(this.zdDealearList)
     }
@@ -254,6 +269,7 @@ export default {
         })
       }
     },
+    // 上级经销商 比例 change
     rateSupChange (val) {
       this.form.rebateDealerList[0]['allotRate'] = val
     },
@@ -265,6 +281,7 @@ export default {
         this.$refs.categoryTree.pageInit(this.detailData, parentDealerSn, this.form.dealerSn)
       }
     },
+    // 箭冠总公司  比例
     rateHChange (val) {
       this.form.rebateDealerList[1]['allotRate'] = val
     },
@@ -273,6 +290,7 @@ export default {
       console.log(val, index)
       this.zdDealearList[index]['parentDealerSn'] = val.key
     },
+    // 指定经销商  比例
     rateChange (val, index) {
       console.log(val, index)
       this.zdDealearList[index]['allotRate'] = val

+ 45 - 27
src/views/dowloadFile/list.vue

@@ -1,5 +1,5 @@
 <template>
-  <a-card size="small" :bordered="false" class="noticeManagementList-wrap">
+  <a-card size="small" :bordered="false" class="dowloadFIle-wrap">
     <a-spin :spinning="spinning" tip="Loading...">
       <!-- 搜索条件 -->
       <div ref="tableSearch" class="table-page-search-wrapper">
@@ -7,29 +7,35 @@
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="创建时间">
-                <rangeDate ref="rangeDate" @change="dateChange" />
+                <a-range-picker
+                  id="dowloadFIle-beginDate"
+                  showTime
+                  :disabled-date="disabledDate"
+                  v-model="time"
+                  format="YYYY-MM-DD HH:mm:ss"
+                  @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="文件名称">
-                <a-input id="noticeManagementList-fileName" v-model.trim="queryParam.fileName" allowClear placeholder="请输入文件名称"/>
+                <a-input id="dowloadFIle-fileName" v-model.trim="queryParam.fileName" allowClear placeholder="请输入文件名称"/>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
               <a-form-item label="状态">
-                <v-select code="EXPORT_TASK_STATE" id="noticeManagementList-taskState" v-model="queryParam.taskState" allowClear placeholder="请选择状态"></v-select>
+                <v-select code="EXPORT_TASK_STATE" id="dowloadFIle-taskState" v-model="queryParam.taskState" allowClear placeholder="请选择状态"></v-select>
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24" style="margin-bottom: 10px;">
-              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="noticeManagementList-refresh">查询</a-button>
-              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="noticeManagementList-reset">重置</a-button>
+              <a-button type="primary" @click="searchForm" :disabled="disabled" id="dowloadFIle-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="dowloadFIle-reset">重置</a-button>
             </a-col>
           </a-row>
         </a-form>
       </div>
       <!-- 总计 -->
       <a-alert type="info" style="margin-bottom:10px">
-        <div slot="message">注意:所有文件只保留7天,超过7天后,状态变为过期,不能下载</div>
+        <div slot="message">注意:所有文件只保留7天,超过7天后,不能下载</div>
       </a-alert>
       <!-- 列表 -->
       <s-table
@@ -45,7 +51,7 @@
         bordered>
         <!-- 操作 -->
         <template slot="action" slot-scope="text, record">
-          <a :href="record.fileUrl" style="padding: 5px 0 0 23px;display: block;" v-if="record.taskState=='SUCCESS'">下载文件</a>
+          <a :id="'file-'+record.id" :href="record.fileUrl" style="padding: 5px 0 0 23px;display: block;" v-if="record.taskState=='SUCCESS'">下载文件</a>
           <span v-else>--</span>
         </template>
       </s-table>
@@ -54,23 +60,30 @@
 </template>
 
 <script>
+import moment from 'moment'
 import { commonMixin } from '@/utils/mixin'
+import getDate from '@/libs/getDate.js'
 import { STable, VSelect } from '@/components'
 import { taskList, dowloadFile } from '@/api/dowloadFile'
-import rangeDate from '@/views/common/rangeDate.vue'
 export default {
   name: 'DowloadFile',
   mixins: [commonMixin],
-  components: { STable, VSelect, rangeDate },
+  components: { STable, VSelect },
   data () {
+    const startDate = moment(getDate.getRecentTime().starttime).subtract('days', 1).format('YYYY-MM-DD HH:mm:ss')
     return {
       spinning: false,
       tableHeight: 0,
+      // 默认时间
+      time: [
+        startDate,
+        getDate.getRecentTime().endtime
+      ],
       queryParam: { //  查询条件
-        beginDate: '',
-        endDate: '',
-        fileName: '',
-        taskState: undefined
+        beginDate: startDate, // 开始时间
+        endDate: getDate.getRecentTime().endtime, // 结束时间
+        fileName: '', // 文件名称
+        taskState: undefined // 状态
       },
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
@@ -92,7 +105,7 @@ export default {
             for (var i = 0; i < data.list.length; i++) {
               data.list[i].no = no + i + 1
               const furl = data.list[i].fileUrl
-              data.list[i].fileUrl = furl ? furl.replace('http:',location.protocol) : ''
+              data.list[i].fileUrl = furl ? furl.replace('http:', location.protocol) : ''
             }
             this.total = data.count || 0
             this.disabled = false
@@ -108,36 +121,41 @@ export default {
     }
   },
   methods: {
+    // 禁用时间
+    disabledDate (current) {
+      return current && (current < moment(getDate.getRecentTime().starttime).subtract('days', 2) || current > moment().endOf('day'))
+    },
+    // 下载文件
     dowloadExcel (url) {
       dowloadFile(url, '')
-      // const elt = document.createElement('a')
-      // elt.setAttribute('href', url)
-      // elt.setAttribute('download', '')
-      // elt.style.display = 'none'
-      // document.body.appendChild(elt)
-      // elt.click()
-      // document.body.removeChild(elt)
     },
     //  时间  change
-    dateChange (date) {
-      this.queryParam.beginDate = date[0] ? date[0] : ''
-      this.queryParam.endDate = date[1] ? date[1] : ''
+    dateChange (date, dateString) {
+      this.queryParam.beginDate = dateString[0] ? moment(dateString[0]).format('YYYY-MM-DD HH:mm:ss') : ''
+      this.queryParam.endDate = dateString[1] ? moment(dateString[1]).format('YYYY-MM-DD HH:mm:ss') : ''
+    },
+    // 查询
+    searchForm () {
+      this.$refs.table.refresh(true)
     },
     //  重置
     resetSearchForm () {
-      this.queryParam.beginDate = null
-      this.queryParam.endDate = null
+      this.time = [moment(getDate.getRecentTime().starttime).subtract('days', 1).format('YYYY-MM-DD HH:mm:ss'), getDate.getRecentTime().endtime]
+      this.queryParam.beginDate = moment(getDate.getRecentTime().starttime).subtract('days', 1).format('YYYY-MM-DD HH:mm:ss')
+      this.queryParam.endDate = getDate.getRecentTime().endtime
       this.queryParam.fileName = ''
       this.queryParam.type = undefined
       this.queryParam.taskState = undefined
       this.$refs.table.refresh(true)
     },
+    // 页面初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 表格高度计算
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 235

+ 127 - 49
src/views/expenseManagement/expenseReimbursement/add.vue

@@ -4,10 +4,10 @@
       <a-page-header :ghost="false" :backIcon="false" class="expenseReimbursementAddcont" >
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
-          <a id="purchaseOrderEdit-back-btn" href="javascript:;" @click="handleBack(0)"><a-icon type="left" /> 返回列表</a>
+          <a id="expenseEdit-back-btn" href="javascript:;" @click="handleBack(0)"><a-icon type="left" /> 返回列表</a>
           <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ detailData&&detailData.expenseAccountNo }}</span>
           <span style="margin: 0 10px;color: #666;">申请人:{{ detailData&&detailData.applyPersonName || '--' }}</span>
-          <a-button size="small" type="link" class="button-default" @click="showDetail=!showDetail">
+          <a-button size="small" type="link" class="button-default" id="expenseEdit-showdesc" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
@@ -15,7 +15,7 @@
       <a-card :bordered="false" size="small" class="expenseReimbursementAddcont" v-show="showDetail">
         <div slot="title">
           <span>基础信息</span>
-          <div style="cursor:pointer;color: #00aaff;float:right;" @click.stop="handleEditBase" >
+          <div style="cursor:pointer;color: #00aaff;float:right;" id="expenseEdit-showEditModal" @click.stop="handleEditBase" >
             <a-icon type="edit" /> 编辑基础信息
           </div>
         </div>
@@ -33,7 +33,13 @@
           <a-descriptions-item label="主题" :span="3">{{ detailData&&detailData.title || '--' }}</a-descriptions-item>
           <a-descriptions-item label="详细说明" :span="3">{{ detailData&&detailData.content.join(',')||'' }}</a-descriptions-item>
           <a-descriptions-item label="附件" :span="3">
-            <a target="_blank" style="color: #00aaff;text-decoration: underline;margin-right: 15px;" :href="item.filePath" v-for="item in detailData.expenseAccountFilesList" :key="item.id">
+            <a
+              target="_blank"
+              style="color: #00aaff;text-decoration: underline;margin-right: 15px;"
+              :href="item.filePath"
+              v-for="item in detailData.expenseAccountFilesList"
+              :id="item.id"
+              :key="item.id">
               {{ item.fileName }}
             </a>
           </a-descriptions-item>
@@ -45,8 +51,9 @@
           <div style="display: flex;justify-content: space-between;align-items: center;">
             <div>费用明细</div>
             <div>
-              <a-button size="small" class="button-info" type="primary" @click="openGuideModal=true">导入费用明细</a-button>
-              <a-button size="small" class="button-error" type="primary" @click="newExpenseDetail">新增费用明细</a-button>
+              <a-button id="expenseEdit-plEdit" size="small" class="button-info" type="primary" @click="plEdit">变更记账名称</a-button>
+              <a-button id="expenseEdit-import" size="small" class="button-info" type="primary" @click="openGuideModal=true">导入费用明细</a-button>
+              <a-button id="expenseEdit-new" size="small" class="button-error" type="primary" @click="newExpenseDetail">新增费用明细</a-button>
             </div>
           </div>
         </div>
@@ -63,6 +70,8 @@
           :rowKey="(record) => record.id"
           :columns="columns"
           :data="loadData"
+          :row-selection="{ columnWidth: 40 }"
+          @rowSelection="rowSelectionFun"
           :defaultLoadData="false"
           :showPagination="false"
           bordered>
@@ -72,18 +81,21 @@
               type="link"
               class="button-info"
               @click="setProduct(record)"
+              :id="'expenseEdit-set-'+record.id"
             >设置产品信息</a-button>
             <a-button
               size="small"
               type="link"
               class="button-info"
               @click="handleEdit(record)"
+              :id="'expenseEdit-edit-'+record.id"
             >编辑</a-button>
             <a-button
               size="small"
               type="link"
               class="button-error"
               @click="handleDel(record)"
+              :id="'expenseEdit-del-'+record.id"
             >删除</a-button>
           </template>
           <!-- 记账名称 -->
@@ -91,6 +103,10 @@
             <div>{{ text }}</div>
             <div v-if="record.accountNameFnumber">({{ record.accountNameFnumber }})</div>
           </template>
+          <!-- 原记账名称 -->
+          <template slot="yjzname" slot-scope="text,record">
+            <div>{{ text == record.accountName || !text ? '--' : text }}</div>
+          </template>
           <!-- 费用承担方 -->
           <template slot="fycdf" slot-scope="text,record">
             <div v-for="(item,index) in record.detailSplitList" :key="item.id+'-'+index">
@@ -128,12 +144,14 @@
     </div>
     <!-- 费用明细 -->
     <epenseDetailModal
+      ref="epenseDetailForm"
       :openModal="openEpenseDetailModal"
       :expenseAccountSn="$route.params.sn"
       :expenseAccountNo="detailData?detailData.expenseAccountNo:''"
       :expenseAccountDetailSn="expenseAccountDetailSn"
+      :isBatch="isBatch"
       @ok="epenseDetailOk"
-      @close="openEpenseDetailModal=false"></epenseDetailModal>
+      @close="epenseDetailClose"></epenseDetailModal>
     <!-- 产品信息设置 -->
     <productInfoModal
       ref="productInfo"
@@ -160,7 +178,7 @@ import productInfoModal from './productInfoModal.vue'
 import baseDataModal from './baseDataModal.vue'
 import ImportGuideModal from './importGuideModal.vue'
 import chooseDepartUserModal from './chooseDepartUserModal.vue'
-import { expenseAccountDetail, expenseAcctDetailDelete, expenseAcctDetailFindList, expenseAccountSubmit, expenseInsertImport } from '@/api/expenseManagement.js'
+import { expenseAccountDetail, expenseAcctDetailDelete, updateBatchExpenseAcctDetail, expenseAcctDetailFindList, expenseAccountSubmit, expenseInsertImport } from '@/api/expenseManagement.js'
 export default {
   name: 'ExpenseReimbursementEdit',
   mixins: [commonMixin],
@@ -169,15 +187,15 @@ export default {
     const _this = this
     return {
       spinning: false,
-      detailData: null,
-      openBaseModal: false,
-      openGuideModal: false,
-      openDepartUserModal: false,
+      detailData: null, // 详情信息
+      openBaseModal: false, // 基础信息编辑弹框
+      openGuideModal: false, // 导入费用明细弹框
+      openDepartUserModal: false, // 选择审核人员弹框
       openEpenseDetailModal: false, // 费用明细弹框
-      expenseAccountDetailSn: '',
+      expenseAccountDetailSn: '', // 费用明细sn
       openProductInfoModal: false, // 产品信息弹框
-      showDetail: false,
-      total: 0,
+      showDetail: false, // 是否显示详细信息
+      total: 0, // 总记录数
       loadData: parameter => {
         const params = Object.assign(parameter, { expenseAccountSn: this.$route.params.sn })
         return expenseAcctDetailFindList(params).then(res => {
@@ -203,20 +221,23 @@ export default {
         })
       },
       columns: [
-        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '记账类型', dataIndex: 'accountTypeDictValue', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
         { title: '记账名称', dataIndex: 'accountName', scopedSlots: { customRender: 'jzname' }, align: 'center', width: '10%' },
-        { title: '所属区域', dataIndex: 'subareaNames', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '所属分区', dataIndex: 'subareaAreaName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
-        { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
-        { title: '记账费用', dataIndex: 'expense', align: 'center', width: '10%', customRender: function (text) { return (text == 0 || text) ? _this.toThousands(text) : '--' } },
+        { title: '原记账名称', dataIndex: 'origAccountName', scopedSlots: { customRender: 'yjzname' }, align: 'center', width: '10%' },
+        { title: '所属区域', dataIndex: 'subareaNames', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '所属分区', dataIndex: 'subareaAreaName', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
+        { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
+        { title: '记账费用', dataIndex: 'expense', align: 'center', width: '8%', customRender: function (text) { return (text == 0 || text) ? _this.toThousands(text) : '--' } },
         { title: '费用承担方', scopedSlots: { customRender: 'fycdf' }, align: 'center', width: '15%' },
-        { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '12%' },
+        { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '10%' },
         { title: '销售单号', dataIndex: 'salesBillNo', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '备注', dataIndex: 'remarks', align: 'center', width: '10%', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '100px', align: 'center' }
-      ]
+      ],
+      isBatch: false, // 是否变更记账名称
+      rowSelectionInfo: null // 批量选择的数据
     }
   },
   methods: {
@@ -224,10 +245,11 @@ export default {
     handleEditBase (event) {
       this.openBaseModal = true
     },
+    // 刷新列表
     refashData () {
       this.getDetail(true)
     },
-    //  费用单基础详情
+    //  获取费用单基础详情
     getDetail (type) {
       this.spinning = true
       this.disabled = true
@@ -245,46 +267,92 @@ export default {
         }
       })
     },
+    // 查询列表
     getExpenseDetailList () {
       this.$refs.table.refresh()
     },
     // 确认导入明细
     hanldeImprotOk (obj) {
-      console.log(obj)
       expenseInsertImport(obj).then(res => {
         if (res.status == 200) {
           this.getDetail(false)
         }
       })
     },
-    // 新增明细
-    newExpenseDetail () {
+    // 批量修改明细
+    plEdit () {
+      if (!this.rowSelectionInfo || (this.rowSelectionInfo && this.rowSelectionInfo.selectedRowKeys.length < 1)) {
+        this.$message.warning('请在列表勾选后再进行操作!')
+        return
+      }
       this.expenseAccountDetailSn = ''
       this.openEpenseDetailModal = true
+      this.isBatch = true
     },
-    // 新增明细成功
-    epenseDetailOk () {
-      // 刷新列表
-      this.openEpenseDetailModal = false
-      this.getDetail(false)
+    // 表格选中项
+    rowSelectionFun (obj) {
+      this.rowSelectionInfo = obj || null
     },
-    // 设置产品
-    setProduct (row) {
-      this.openProductInfoModal = true
-      this.expenseAccountDetailSn = row.expenseAccountDetailSn
-      this.$refs.productInfo.setBaseData(row)
-    },
-    // 新增产品成功
-    productInfoOk () {
-      // 刷新列表
-      this.openProductInfoModal = false
-      this.getDetail(false)
+    // 新增明细
+    newExpenseDetail () {
+      this.expenseAccountDetailSn = ''
+      this.openEpenseDetailModal = true
     },
     // 编辑明细
     handleEdit (row) {
       this.openEpenseDetailModal = true
       this.expenseAccountDetailSn = row.expenseAccountDetailSn
     },
+    // 新增修改明细成功
+    epenseDetailOk (data) {
+      // 如果是批量修改
+      if (this.isBatch) {
+        const rows = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
+        const params = []
+        if (rows.length) {
+          rows.forEach(item => {
+            params.push({
+              expenseAccountDetailSn: item.expenseAccountDetailSn,
+              origAccountName: item.origAccountName,
+              origAccountNameSn: item.origAccountNameSn,
+              accountNameSn: data.accountNameSn,
+              accountType: data.accountType,
+              provinceName: data.provinceName,
+              provinceSn: data.provinceSn,
+              subareaArea: data.subareaArea,
+              cityName: data.cityName,
+              citySn: data.citySn,
+              expenseAccountNo: data.expenseAccountNo,
+              expenseAccountSn: data.expenseAccountSn,
+              remarks: data.remarks
+            })
+          })
+          // 组织数据
+          updateBatchExpenseAcctDetail(params).then(res => {
+            if (res.status == 200) {
+              this.$message.success(res.message)
+              // 修改成功
+              this.$refs.table.clearTable()
+              this.epenseDetailClose()
+              this.getDetail(false)// 刷新列表
+            }
+            this.$refs.epenseDetailForm.spinning = false
+          })
+        } else {
+          this.$message.warning('请在列表勾选后再进行操作!')
+          this.$refs.epenseDetailForm.spinning = false
+        }
+      } else {
+        // 单个修改成功
+        this.epenseDetailClose()
+        this.getDetail(false)// 刷新列表
+      }
+    },
+    // 明细弹框关闭
+    epenseDetailClose () {
+      this.openEpenseDetailModal = false
+      this.isBatch = false
+    },
     // 删除明细
     handleDel (row) {
       const _this = this
@@ -307,6 +375,19 @@ export default {
         }
       })
     },
+    // 设置产品
+    setProduct (row) {
+      this.openProductInfoModal = true
+      this.expenseAccountDetailSn = row.expenseAccountDetailSn
+      this.$refs.productInfo.setBaseData(row)
+    },
+    // 新增产品成功
+    productInfoOk () {
+      // 刷新列表
+      this.openProductInfoModal = false
+      this.getDetail(false)
+    },
+    // 提交前,选择审批人员
     beforeSubmit () {
       if (this.total) {
         this.openDepartUserModal = true
@@ -329,10 +410,10 @@ export default {
     handleBack (data) {
       this.$router.push({ name: 'expenseReimbursementList' })
     },
+    // 初始化页面
     pageInit () {
-      console.log(1)
+      this.$refs.table.clearTable()
       if (this.$route.params.sn) { //  编辑页
-        console.log(2)
         this.getDetail(false)
       }
     }
@@ -343,10 +424,7 @@ export default {
     }
   },
   activated () {
-    // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
-    if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
-      this.pageInit()
-    }
+    this.pageInit()
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 43 - 28
src/views/expenseManagement/expenseReimbursement/baseDataModal.vue

@@ -1,5 +1,6 @@
 <template>
   <a-modal
+    v-drag
     v-model="opened"
     :title="title"
     centered
@@ -19,18 +20,18 @@
         <a-row>
           <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
             <a-form-model-item label="申请人" prop="applyPersonSn">
-              <employee style="width: 100%;" @change="employeeChange" id="expenseReimbursement-Employee" v-model="form.applyPersonSn"></employee>
+              <employee style="width: 100%;" @change="employeeChange" id="expenseReimbursementAddform-Employee" v-model="form.applyPersonSn"></employee>
             </a-form-model-item>
           </a-col>
           <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
             <a-form-model-item label="申请部门" prop="applyDepartmentSn">
-              <department style="width: 100%;" @change="departementChange" id="expenseReimbursement-Department" v-model="form.applyDepartmentSn"></department>
+              <department style="width: 100%;" @change="departementChange" id="expenseReimbursementAddform-Department" v-model="form.applyDepartmentSn"></department>
             </a-form-model-item>
           </a-col>
           <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
             <a-form-model-item label="费用类型" prop="expenseType">
               <expenseType
-                id="expenseReimbursement-expenseType"
+                id="expenseReimbursementAddform-expenseType"
                 v-model="expenseTypes"
                 @change="expenseChange"
                 placeholder="请选择费用类型"
@@ -40,6 +41,7 @@
           <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
             <a-form-model-item label="费用产生月" prop="expenseDate">
               <a-month-picker
+                id="expenseReimbursementAddform-expenseDate"
                 placeholder="请选择月份"
                 v-model="form.expenseDate"
                 locale="zh-cn"
@@ -51,7 +53,7 @@
           <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
             <a-form-model-item label="主题" prop="title" :label-col="{span:3}" :wrapper-col="{span:19}">
               <a-textarea
-                id="expenseReimbursementAdd-title"
+                id="expenseReimbursementAddform-title"
                 :maxLength="100"
                 :rows="3"
                 v-model.trim="form.title"
@@ -62,7 +64,7 @@
           <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
             <a-form-model-item label="详细说明" prop="content" :label-col="{span:3}" :wrapper-col="{span:19}">
               <a-textarea
-                id="expenseReimbursementAdd-content"
+                id="expenseReimbursementAddform-content"
                 placeholder="请详细描述费用报销内容(最多500个字符)"
                 v-model.trim="form.content"
                 :rows="3"
@@ -76,7 +78,7 @@
             <a-form-model-item label="附件" help="(支持图片、word、excel、PDF等格式,最多10个附件)" :label-col="{span:3}" :wrapper-col="{span:19}">
               <Upload
                 style="height: 100%;"
-                id="noticeEdit-attachList"
+                id="expenseReimbursementAddform-attachList"
                 v-model="form.expenseAccountFilesList"
                 ref="attachList"
                 :fileSize="10"
@@ -90,8 +92,8 @@
           </a-col>
         </a-row>
         <div style="text-align: center;margin-top: 20px;">
-          <a-button @click="cancel" style="margin-right: 15px" id="chooseCustom-btn-back">取消</a-button>
-          <a-button type="primary" :loading="spinning" @click="handleSubmit" id="chooseCustom-btn-submit">保存</a-button>
+          <a-button @click="cancel" style="margin-right: 15px" id="expenseReimbursementAddform-btn-back">取消</a-button>
+          <a-button type="primary" :loading="spinning" @click="handleSubmit" id="expenseReimbursementAddform-btn-submit">保存</a-button>
         </div>
       </a-form-model>
     </a-spin>
@@ -118,17 +120,17 @@ export default {
   data () {
     return {
       opened: this.show,
-      expenseAccountSn: this.itemSn,
+      expenseAccountSn: this.itemSn, // 费用报销单sn
       spinning: false,
-      title: '新增费用报销单',
+      title: '新增费用报销单', // 弹框标题
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 14 }
       },
-      fromPage: null,
-      attachList: [],
-      attachAction: process.env.VUE_APP_API_BASE_URL + '/uploadGetFileInfo',
-      expenseTypes: [],
+      fromPage: null, // 打开方式,sales:销售单转费用单,salesMearge:合并销售单转,其它手动创建
+      attachList: [], // 附件列表
+      attachAction: process.env.VUE_APP_API_BASE_URL + '/uploadGetFileInfo', // 附件上传地址
+      expenseTypes: [], // 费用类型值
       form: {
         applyPersonSn: undefined, // 申请人
         applyDepartmentSn: undefined, //  申请部门
@@ -165,21 +167,24 @@ export default {
     }
   },
   methods: {
+    // 关闭弹框
     cancel () {
       this.spinning = false
       this.$emit('close')
     },
+    // 初始化
     pageInit () {
       this.$nextTick(() => {
         if (this.expenseAccountSn) { //  编辑页
           this.getDetail()
           this.title = '编辑费用报销单'
-        }else{
+        } else {
           this.title = '新增费用报销单'
         }
       })
     },
-    retsetForm(){
+    // 重置表单
+    retsetForm () {
       this.form = {
         applyPersonSn: undefined, // 申请人
         applyDepartmentSn: undefined, //  申请部门
@@ -208,19 +213,22 @@ export default {
         this.$refs.ruleForm.validateField(['applyPersonSn', 'applyDepartmentSn'])
       })
     },
+    // 申请部门选择
     departementChange () {
       this.$nextTick(() => {
         this.$refs.ruleForm.validateField('applyDepartmentSn')
       })
     },
+    // 费用产生月
     expenseDateChange (v, d) {
       this.form.expenseDate = d
     },
+    // 费用产生月禁止范围
     disabledDate (current) {
       return current && current > moment().endOf('day')
     },
+    // 费用类型选择
     expenseChange (val, opts) {
-      console.log(val, opts)
       this.expenseTypes = val || []
       this.form.expenseType = val && val[0] ? val[0] : ''
       this.form.expenseType2 = val && val[1] ? val[1] : ''
@@ -237,24 +245,23 @@ export default {
         item.fileType = item.extName
       })
     },
-    // 设置数据
-    setDetail(data, from){
-      console.log(data)
+    // 编辑时设置数据
+    setDetail (data, from) {
       this.spinning = false
       this.disabled = false
       this.fromPage = from
       this.form = Object.assign(this.form, data)
       // 获取附件列表
-      if(this.$refs.attachList){
+      if (this.$refs.attachList) {
         this.form.expenseAccountFilesList = ''
         this.attachList = data.expenseAccountFilesList
         this.$refs.attachList.setFileList(this.attachList)
       }
-      setTimeout(()=>{
+      setTimeout(() => {
         this.expenseTypes = data.expenseType ? [this.form.expenseType, this.form.expenseType2, this.form.expenseType3] : []
       }, 500)
     },
-    //  详情
+    //  获取详情
     getDetail () {
       this.spinning = true
       this.disabled = true
@@ -277,13 +284,20 @@ export default {
           const form = JSON.parse(JSON.stringify(_this.form))
           form.expenseDate = form.expenseDate + '-01'
           form.expenseAccountFilesList = this.attachList
+          // console.log(form)
           _this.spinning = true
-          console.log(form)
-          // 从销售单转的费用
-          if(_this.fromPage=='sales'){
-            _this.$emit('expenseSaveOk',form)
+
+          // 从销售单转的费用,直接提交
+          if (_this.fromPage == 'sales') {
+            _this.$emit('expenseSaveOk', form, this.fromPage)
+            return false
+          }
+          // 从销售单转的费用,合并提交
+          if (_this.fromPage == 'salesMearge') {
+            _this.$emit('expenseSaveOk', form, this.fromPage)
             return false
           }
+          // 手动建的费用单
           expenseAccountSave(form).then(res => {
             if (res.status == 200) {
               _this.$message.success(res.message)
@@ -291,6 +305,7 @@ export default {
                 if (this.expenseAccountSn) {
                   _this.$emit('refashData')
                 } else {
+                  // 跳转到费用明细单页面
                   _this.$router.push({ name: 'expenseReimbursementEdit', params: { sn: res.data.expenseAccountSn } })
                 }
                 _this.spinning = false
@@ -311,7 +326,7 @@ export default {
       this.opened = newValue
       if (newValue) {
         this.pageInit()
-      }else{
+      } else {
         this.retsetForm()
       }
     },

+ 12 - 8
src/views/expenseManagement/expenseReimbursement/chooseDepartUserModal.vue

@@ -46,7 +46,7 @@
         </div>
         <div class="btn-cont">
           <a-button id="departUser-back" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
-          <a-button :loading="uploading" style="margin-right: 15px;" @click="updateUser">刷新人员</a-button>
+          <a-button id="departUser-refash" :loading="uploading" style="margin-right: 15px;" @click="updateUser">刷新人员</a-button>
           <a-button type="primary" id="departUser-save" @click="handleSave">确定</a-button>
         </div>
       </div>
@@ -67,7 +67,7 @@ export default {
       type: Boolean,
       default: false
     },
-    type: {
+    type: { // 类型
       type: String,
       default: ''
     },
@@ -101,17 +101,19 @@ export default {
     }
   },
   methods: {
+    // 刷新人员数据
     updateUser () {
       this.uploading = true
       this.$refs.departUserApp.updateDeptUser()
       // this.$refs.departUserCc.updateDeptUser()
     },
+    // 选择人员
     changeApprovers (value) {
       this.form.approvers = value
       this.$refs.ruleForm.clearValidate()
     },
+    // 获取人员组织树数据
     getTreeVal (data) {
-      console.log(data)
       const ret = []
       data.map(item => {
         ret.push(item.value)
@@ -131,7 +133,6 @@ export default {
           if (form.ccList) {
             form.ccList = this.getTreeVal(form.ccList)
           }
-          console.log(form)
           this.$emit('submit', form)
           this.$emit('close')
         } else {
@@ -139,6 +140,7 @@ export default {
         }
       })
     },
+    // 格式化人员数据
     getFormatUser (list) {
       const ret = []
       list.map(item => {
@@ -146,16 +148,16 @@ export default {
       })
       return ret
     },
+    // 获取默认人员选项
     async getDefAudit () {
-      // 费用单''   提货单'billOfLading'   财务单'financeOrder'
+      // 费用单时 type = ''
       if (!this.type) {
         // 默认写死的人员
         const data = await getDefaultCofig({ code: 'EXPENSE_ACCOUNT_DING_USER' }).then(res => res.data)
         const ret = JSON.parse(data.value)
-        console.log(ret)
         this.form.approvers = this.getFormatUser(ret.approvers)
         this.form.ccList = this.getFormatUser(ret.ccList)
-      } else if (this.type && this.type == 'financeOrder') {
+      } else if (this.type && this.type == 'financeOrder') { // 财务单 type = 'financeOrder'
         // 取最新一次审核通过值
         const data = await queryLastFinishDingUser().then(res => res.data)
         if (data.approversTaskList) {
@@ -164,7 +166,8 @@ export default {
         if (data.ccTaskList) {
           this.form.ccList = this.getFormatUser(data.ccTaskList)
         }
-      } else if (this.type && this.type == 'billOfLading') {
+      } else if (this.type && this.type == 'billOfLading') { // 提货单 type = 'billOfLading'
+        // 取最新一次审核通过值
         const data = await getFinishDingUser().then(res => res.data)
         if (data.approversTaskList) {
           this.form.approvers = this.getFormatUser(data.approversTaskList)
@@ -174,6 +177,7 @@ export default {
         }
       }
     },
+    // 重置
     resetForm () {
       this.$nextTick(() => {
         this.$refs.ruleForm.resetFields()

+ 7 - 2
src/views/expenseManagement/expenseReimbursement/chooseImportModal.vue

@@ -125,6 +125,7 @@ export default {
   data () {
     return {
       isShow: this.openModal, //  是否打开弹框
+      // 正确列表
       nowColumns: [
         { title: '序号', dataIndex: 'no', width: '8%', align: 'center' },
         { title: '记账类型', dataIndex: 'importAccountType', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -138,6 +139,7 @@ export default {
         { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '15%' }
       ],
       loadData: [],
+      // 错误数据列表
       nowUnColumns: [
         { title: '序号', dataIndex: 'no', width: '9%', align: 'center' },
         { title: '记账类型', dataIndex: 'importAccountType', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -156,7 +158,7 @@ export default {
     }
   },
   methods: {
-    // 格式化数据
+    // 格式化产品数据
     formatProduct (list) {
       const ret = []
       list.map(item => {
@@ -169,6 +171,7 @@ export default {
       })
       return ret
     },
+    // 格式化承担人员数据
     formatSplit (list) {
       const ret = []
       list.map(item => {
@@ -185,6 +188,7 @@ export default {
             })
           })
         } else {
+          // 没有承担人员
           ret.push({
             splitObjName: item.importSplitObjName,
             splitObjType: item.importSplitObjType,
@@ -194,6 +198,7 @@ export default {
       })
       return ret
     },
+    // 获取数据
     getData () {
       const paramsData = JSON.parse(JSON.stringify(this.paramsData))
       this.loadData = paramsData.rightList || []
@@ -227,7 +232,7 @@ export default {
         this.isShow = false
       }
     },
-    // 导出
+    // 导出错误项
     handleError () {
       const _this = this
       if (_this.paramsData.errorList.length < 1) {

+ 29 - 21
src/views/expenseManagement/expenseReimbursement/detail.vue

@@ -3,18 +3,19 @@
     <a-spin :spinning="spinning" tip="Loading...">
       <a-page-header :ghost="false" :backIcon="false" class="expenseManagementDetail-cont">
         <template slot="subTitle">
-          <a href="javascript:;" @click="handleBack">
+          <a href="javascript:;" @click="handleBack" id="epenseDetail-back-btn" >
             <a-icon type="left"></a-icon>
             返回列表
           </a>
           <span style="margin: 0 15px;color: #666;font-weight: bold;">单号:{{ detailData&&detailData.expenseAccountNo || '--' }}</span>
           <span style="margin: 0 10px;color: #666;">申请人:{{ detailData&&detailData.applyPersonName }}</span>
-          <a-button type="link" size="small" class="button-default" @click="showDetail=!showDetail">
+          <a-button id="epenseDetail-showDesc-btn" type="link" size="small" class="button-default" @click="showDetail=!showDetail">
             <a-icon :type="showDetail ? 'eye-invisible' : 'eye'"/> {{ showDetail?'隐藏':'查看' }}信息
           </a-button>
         </template>
         <!-- 操作区,位于 title 行的行尾 -->
         <template slot="extra">
+          <a-checkbox v-model="printRemark" v-if="$hasPermissions('B_eRPrint')" id="print-remark">打印备注</a-checkbox>
           <a-button
             :disabled="detailData==null"
             key="1"
@@ -79,6 +80,10 @@
             <div>{{ text }}</div>
             <div v-if="record.accountNameFnumber">({{ record.accountNameFnumber }})</div>
           </template>
+          <!-- 原记账名称 -->
+          <template slot="yjzname" slot-scope="text,record">
+            <div>{{ text == record.accountName || !text ? '--' : text }}</div>
+          </template>
           <!-- 费用承担方 -->
           <template slot="fycdf" slot-scope="text,record">
             <div v-for="(item,index) in record.detailSplitList" :key="item.id+'-'+index">
@@ -133,23 +138,23 @@ export default {
     return {
       spinning: false,
       disabled: false,
-      baseData: null,
-      showTipModal: false,
-      showDetail: false,
-      printType: '',
-      count: 0,
+      showTipModal: false, // 费用报销单打印预览弹框
+      showDetail: false, // 是否显示详细信息
+      printType: '', // 打印类型
+      count: 0, // 费用明细条数
       columns: [
-        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
-        { title: '记账类型', dataIndex: 'accountTypeDictValue', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
-        { title: '记账名称', dataIndex: 'accountName', scopedSlots: { customRender: 'jzname' }, align: 'center', width: '14%' },
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '记账类型', dataIndex: 'accountTypeDictValue', align: 'center', width: '6%', customRender: function (text) { return text || '--' } },
+        { title: '记账名称', dataIndex: 'accountName', scopedSlots: { customRender: 'jzname' }, align: 'center', width: '8%' },
+        { title: '原记账名称', dataIndex: 'origAccountName', scopedSlots: { customRender: 'yjzname' }, align: 'center', width: '8%' },
         { title: '所属区域', dataIndex: 'subareaNames', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '所属分区', dataIndex: 'subareaAreaName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
-        { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
-        { title: '记账费用', dataIndex: 'expense', align: 'right', width: '8%', customRender: function (text) { return (text || text == 0) ? _this.toThousands(text) : '--' } },
-        { title: '费用承担方', scopedSlots: { customRender: 'fycdf' }, align: 'center', width: '14%' },
-        { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '12%' },
-        { title: '销售单号', dataIndex: 'salesBillNo', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '所属省份', dataIndex: 'provinceName', align: 'center', width: '7%', customRender: function (text) { return text || '--' } },
+        { title: '所属城市', dataIndex: 'cityName', align: 'center', width: '7%', customRender: function (text) { return text || '--' } },
+        { title: '记账费用', dataIndex: 'expense', align: 'center', width: '8%', customRender: function (text) { return (text || text == 0) ? _this.toThousands(text) : '--' } },
+        { title: '费用承担方', scopedSlots: { customRender: 'fycdf' }, align: 'center', width: '12%' },
+        { title: '产品信息', scopedSlots: { customRender: 'cpxx' }, align: 'center', width: '10%' },
+        { title: '销售单号', dataIndex: 'salesBillNo', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '备注', dataIndex: 'remarks', align: 'center', width: '8%', customRender: function (text) { return text || '--' } }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -170,13 +175,13 @@ export default {
           return data
         })
       },
-      chooseLoadData: [],
-      detailData: null, //  详情数据
-      total: 0
+      detailData: null, // 详情数据
+      total: 0, // 总条数
+      printRemark: false // 是否打印备注
     }
   },
   methods: {
-    //  返回
+    //  返回列表
     handleBack () {
       this.$router.push({ name: 'expenseReimbursementList' })
     },
@@ -192,8 +197,10 @@ export default {
       if (type == 'preview') {
         this.showTipModal = true
       }
+      // 设置打印内容
       this.$nextTick(() => {
         this.$refs.printModal.setData([{
+          printRemark: this.printRemark,
           expenseInfo: this.detailData,
           fyListData,
           spListData: spListData || []
@@ -207,6 +214,7 @@ export default {
         this.spinning = false
       })
     },
+    // 打印成功
     printOk (data) {
       if (data && data.status == 200) {
         expenseAccountUpdateBatch([{
@@ -223,7 +231,7 @@ export default {
         this.spinning = false
       }
     },
-    //  详情
+    //  详情信息
     getDetail () {
       this.spinning = true
       this.detailData = null

+ 27 - 8
src/views/expenseManagement/expenseReimbursement/epenseCdfModal.vue

@@ -20,6 +20,7 @@
             <!-- 费用承担方类型 -->
             <template slot="fycdftype" slot-scope="text,record,index">
               <v-select
+                :id="'cdfTable-splitObjType-'+index"
                 code="EXPENSE_ACCOUNT_DETAIL_SPLIT_OBJ_TYPE"
                 allowClear
                 style="width: 100%;"
@@ -32,7 +33,7 @@
             <!-- 费用承担方 -->
             <template slot="fycdf" slot-scope="text,record,index">
               <!-- 部门 -->
-              <department v-show="record.splitObjType=='DEPARTMENT'" style="width: 100%;" placeholder="请选择承担方" v-model="record.splitObjSn"></department>
+              <department :id="'cdfTable-department-'+index" v-show="record.splitObjType=='DEPARTMENT'" style="width: 100%;" placeholder="请选择承担方" v-model="record.splitObjSn"></department>
               <!-- 经销商 -->
               <custList
                 v-show="record.splitObjType=='CUSTOMER'"
@@ -46,19 +47,22 @@
                 v-show="record.splitObjType=='SUPPLIER'"
                 style="width: 100%;"
                 enableFlag="1"
+                :id="'cdfTable-supplier-'+index"
                 v-model="record.splitObjSn"
                 placeholder="请选择(输入名称搜索)"></supplier>
               <!-- 其它往来 -->
-              <otherTransactions 
-              style="width: 100%;"
-              v-show="record.splitObjType=='OTHER_ORG'" 
-              v-model="record.splitObjSn" 
-              placeholder="请选择(输入名称搜索)"></otherTransactions>
+              <otherTransactions
+                style="width: 100%;"
+                :id="'cdfTable-otherTransactions-'+index"
+                v-show="record.splitObjType=='OTHER_ORG'"
+                v-model="record.splitObjSn"
+                placeholder="请选择(输入名称搜索)"></otherTransactions>
               <span v-if="!record.splitObjType">--</span>
             </template>
             <!-- 费用承担金额 -->
             <template slot="amount" slot-scope="text,record,index">
               <a-input-number
+                :id="'cdfTable-splitAmount-'+index"
                 v-show="record.splitObjType"
                 style="width: 100%;"
                 v-model="record.splitAmount"
@@ -75,10 +79,12 @@
               <div
                 style="display: flex;align-items: center;width: 100%;padding: 5px 0;border-bottom: 1px solid #eee;"
                 v-for="(item,idx) in record.childDetailSplitList"
+                :id="item.id"
                 :key="item.id">
                 <employee style="width: 40%;" placeholder="请选择承担人员" v-model="item.splitObjSn"></employee>
                 -
                 <a-input-number
+                  :id="'cdfTable-childsplitAmount-'+index"
                   style="width: 40%;"
                   v-model="item.splitAmount"
                   :precision="2"
@@ -89,6 +95,7 @@
                 <div style="padding-left: 15px;" v-if="record.childDetailSplitList&&record.childDetailSplitList.length>1">
                   <a-button
                     @click="handleDelCdry(record,idx)"
+                    :id="'cdfTable-childsplitAmoun-del-'+index"
                     title="删除"
                     size="small"
                     type="danger"
@@ -98,6 +105,7 @@
                 <div v-if="record.childDetailSplitList&&idx == record.childDetailSplitList.length - 1">
                   <a-button
                     @click="handleAddCdry(record,idx)"
+                    :id="'cdfTable-childsplitAmoun-add-'+index"
                     title="添加承担人员"
                     size="small"
                     type="primary"
@@ -110,6 +118,7 @@
             </template>
             <template slot="action" slot-scope="text,record,index">
               <a-button
+                :id="'cdfTable-del-'+index"
                 size="small"
                 type="link"
                 class="button-error"
@@ -118,6 +127,7 @@
             </template>
             <template slot="footer" slot-scope="currentPageData">
               <a-button
+                :id="'cdfTable-add-'+index"
                 type="link"
                 class="button-info"
                 block
@@ -148,10 +158,12 @@ export default {
     }
   },
   watch: {
+    // 费用明细列表
     list (newValue, oldValue) {
       this.dataList = JSON.parse(JSON.stringify(newValue))
       this.dataList.map(item => {
         item.no = item.id
+        // 部门
         if (item.splitObjType == 'DEPARTMENT' && (!item.childDetailSplitList || item.childDetailSplitList.length == 0)) {
           this.$set(item, 'childDetailSplitList', [{
             splitObjType: 'EMPLOYEE',
@@ -159,12 +171,14 @@ export default {
             splitAmount: 0
           }])
         }
+        // 客户
         if (item.splitObjType == 'CUSTOMER') {
           this.$nextTick(() => {
             this.$refs['custList-' + item.no].setDufaultVal(item.splitObjName)
           })
         }
       })
+      // 默认添加一条
       if (this.dataList.length == 0) {
         this.handleAddRow()
       }
@@ -198,24 +212,27 @@ export default {
         splitObjSn: undefined,
         splitAmount: Number(row.splitAmount).toFixed(2)
       }] : [])
+      // 客户
       if (row.splitObjType == 'CUSTOMER') {
         this.$set(row, 'splitObjSn', undefined)
         this.$set(row, 'splitObjName', undefined)
         this.$refs['custList-' + row.no].dealerName = []
       }
+      // 供应商
       if (row.splitObjType == 'SUPPLIER') {
         this.$set(row, 'splitObjSn', undefined)
       }
+      // 费用合计
       this.$emit('fyTotal', this.fyTotal())
     },
-    // 经销商
+    // 选择经销商
     custChange (v, obj, id) {
       const row = this.dataList[id.split('-')[1]]
       this.$set(row, 'splitObjSn', v.key)
       this.$set(row, 'splitObjName', obj.dealerName)
       this.$emit('fyTotal', this.fyTotal())
     },
-    // 承担费用
+    // 选择承担费用
     splitAmountChange () {
       this.$emit('fyTotal', this.fyTotal())
     },
@@ -232,6 +249,7 @@ export default {
         hasError = 1
       } else {
         ret.map(item => {
+          // 如果时部门
           if (item.splitObjType == 'DEPARTMENT') {
             const al = item.childDetailSplitList.filter(a => !a.splitObjSn && a.splitAmount > 0)
             if (al.length) {
@@ -317,6 +335,7 @@ export default {
         }
       })
     },
+    // 费用合计计算
     fyTotal: function () {
       let total = 0
       this.dataList.map(item => { total = total + item.splitAmount })

+ 89 - 60
src/views/expenseManagement/expenseReimbursement/epenseDetailModal.vue

@@ -4,7 +4,7 @@
     class="epenseDetailModal-modal"
     :footer="null"
     :maskClosable="false"
-    :title="title+'费用明细'"
+    :title="title"
     v-model="isShow"
     @cancel="isShow=false"
     width="60%">
@@ -33,16 +33,28 @@
               <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                 <a-form-model-item label="记账名称" prop="accountNameSn">
                   <!-- 部门 -->
-                  <department v-show="form.accountType=='INNER_ACCOUNT'" @change="accountNameSnChange" v-model="form.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></department>
+                  <department id="epenseDetailModal-accountName" v-show="form.accountType=='INNER_ACCOUNT'" @change="accountNameSnChange" v-model="form.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></department>
                   <!-- 经销商 -->
-                  <custList v-show="form.accountType=='CUSTOMER'" cooperateFlag="1" ref="custList" @change="accountNameSnChange" placeholder="请选择记账名称(输入名称搜索)"></custList>
+                  <custList
+                    id="epenseDetailModal-accountName1"
+                    v-show="form.accountType=='CUSTOMER'"
+                    cooperateFlag="1"
+                    ref="custList"
+                    @change="accountNameSnChange"
+                    placeholder="请选择记账名称(输入名称搜索)"></custList>
                   <!-- 供应商 -->
-                  <supplier v-show="form.accountType=='OUT_ACCOUNT'" enableFlag="1" @change="accountNameSnChange" v-model="form.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></supplier>
+                  <supplier
+                    id="epenseDetailModal-accountName2"
+                    v-show="form.accountType=='OUT_ACCOUNT'"
+                    enableFlag="1"
+                    @change="accountNameSnChange"
+                    v-model="form.accountNameSn"
+                    placeholder="请选择记账名称(输入名称搜索)"></supplier>
                   <!-- 其它往来 -->
-                  <otherTransactions v-show="form.accountType=='OTHER_ACCOUNT'" @change="accountNameSnChange" v-model="form.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></otherTransactions>
+                  <otherTransactions id="epenseDetailModal-accountName3" v-show="form.accountType=='OTHER_ACCOUNT'" @change="accountNameSnChange" v-model="form.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></otherTransactions>
                   <span v-if="!form.accountType">
-                    <a-select style="width: 100%" placeholder="请选择记账名称">
-                      <a-select-option value="" :disabled="true">
+                    <a-select style="width: 100%" placeholder="请选择记账名称" id="epenseDetailModal-accountName4">
+                      <a-select-option value="" :disabled="true" id="epenseDetailModal-accountName-kong">
                         请先选择记账类型
                       </a-select-option>
                     </a-select>
@@ -65,7 +77,7 @@
               </a-col>
               <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                 <a-form-model-item label="所属省份" prop="provinceSn">
-                  <Area id="epenseDetailModal-area" @change="provinceChange" placeholder="请选择所属省份" v-model="form.provinceSn"></Area>
+                  <Area id="epenseDetailModal-provinceSn" @change="provinceChange" placeholder="请选择所属省份" v-model="form.provinceSn"></Area>
                 </a-form-model-item>
               </a-col>
             </a-row>
@@ -73,7 +85,7 @@
               <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                 <a-form-model-item label="所属城市" prop="citySn">
                   <Area
-                    id="epenseDetailModal-area"
+                    id="epenseDetailModal-citySn"
                     ref="city"
                     @change="cityChange"
                     placeholder="请选择所属城市"
@@ -82,7 +94,13 @@
                     v-model="form.citySn"></Area>
                 </a-form-model-item>
               </a-col>
-              <a-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
+              <a-col
+                :xs="24"
+                :sm="24"
+                :md="12"
+                :lg="12"
+                :xl="12"
+                v-if="!isBatch">
                 <a-form-model-item label="记账费用">
                   <a-input
                     style="width: 100%;color: red;font-weight: bold;"
@@ -96,13 +114,13 @@
             <a-row>
               <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
                 <a-form-model-item label="备注" prop="remarks" :label-col="{span:2}" :wrapper-col="{span:20}">
-                  <a-textarea placeholder="请输入备注(最多500个字符)" v-model="form.remarks" :rows="4" :maxLength="500"/>
+                  <a-textarea id="epenseDetailModal-remarks" placeholder="请输入备注(最多500个字符)" v-model="form.remarks" :rows="4" :maxLength="500"/>
                 </a-form-model-item>
               </a-col>
             </a-row>
           </a-form-model>
           <!-- 费用承担方 -->
-          <epenseCdfModal ref="epenseCdf" :list="form.detailSplitList" @fyTotal="getFyTotal"></epenseCdfModal>
+          <epenseCdfModal v-if="!isBatch" ref="epenseCdf" :list="form.detailSplitList" @fyTotal="getFyTotal"></epenseCdfModal>
         </div>
         <div class="btn-cont">
           <a-button id="epenseDetailModal-back" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
@@ -139,9 +157,13 @@ export default {
       type: String,
       default: ''
     },
-    expenseAccountDetailSn: {
+    expenseAccountDetailSn: { // 明细sn
       type: String,
       default: ''
+    },
+    isBatch: { // 是否批量修改
+      type: Boolean,
+      default: false
     }
   },
   data () {
@@ -171,7 +193,7 @@ export default {
         expenseAccountSn: '', // 报销单SN
         expenseAccountNo: '', // 报销单号
         expenseAccountDetailSn: '', // 报销明细sn
-        detailSplitList: []
+        detailSplitList: [] // 费用承担方明细
       },
       rules: {
         accountType: [
@@ -198,9 +220,9 @@ export default {
           this.form.citySn = row.citySn
           this.form.provinceName = row.provinceName
           this.form.cityName = row.cityName
-          this.form.subareaArea.subareaName = row.subareaArea.subareaName
-          this.form.subareaArea.subareaAreaName = row.subareaArea.subareaAreaName
-          this.subareaList = [row.subareaArea.subareaName, row.subareaArea.subareaAreaName]
+          this.form.subareaArea.subareaName = row.subareaArea ? row.subareaArea.subareaName : ''
+          this.form.subareaArea.subareaAreaName = row.subareaArea ? row.subareaArea.subareaAreaName : ''
+          this.subareaList = row.subareaArea ? [row.subareaArea.subareaName, row.subareaArea.subareaAreaName] : []
         } else {
           this.form.accountNameSn = ''
           this.form.provinceSn = ''
@@ -224,7 +246,6 @@ export default {
     },
     // 省
     provinceChange (v, row) {
-      console.log(v, row)
       this.form.provinceName = row ? row.name : ''
       this.form.provinceSn = v || ''
       this.form.citySn = undefined
@@ -264,58 +285,65 @@ export default {
       this.$refs.ruleForm.validate(valid => {
         if (valid) {
           const form = JSON.parse(JSON.stringify(_this.form))
-          const cdfList = this.$refs.epenseCdf.getList()
-          if (cdfList[0] == 1) {
-            this.$warning({
-              title: '是否存在以下情况,请按照要求填写',
-              content: <div><p>1、费用承担方至少有一个</p><p>2、带星号的列为必填项,不能为空</p></div>,
-              centered: true
-            })
-            return
-          }
-          if (cdfList[0] == 3) {
-            this.$warning({
-              title: '提示',
-              content: '请检查每行承担人员是否已经选择',
-              centered: true
-            })
-            return
-          }
-          if (cdfList[0] == 2) {
-            this.$warning({
-              title: '提示',
-              content: '请检查每行人员平摊费用合计是否等于承担金额',
-              centered: true
-            })
-            return
-          }
-          // 获取承担人列表数据
-          form.detailSplitList = cdfList[1]
           form.provinceName = form.provinceName ? form.provinceName : ''
           form.provinceSn = form.provinceSn ? form.provinceSn : ''
           form.citySn = form.citySn ? form.citySn : ''
           form.cityName = form.cityName ? form.cityName : ''
-          form.expense = Math.abs(form.expense)
 
-          console.log(form)
+          // 如果是批量修改记账名称
+          if (this.isBatch) {
+            _this.spinning = true
+            _this.$emit('ok', form)
+          } else {
+            // 校验明细承担人列表
+            const cdfList = this.$refs.epenseCdf.getList()
+            if (cdfList[0] == 1) {
+              this.$warning({
+                title: '是否存在以下情况,请按照要求填写',
+                content: <div><p>1、费用承担方至少有一个</p><p>2、带星号的列为必填项,不能为空</p></div>,
+                centered: true
+              })
+              return
+            }
+            if (cdfList[0] == 3) {
+              this.$warning({
+                title: '提示',
+                content: '请检查每行承担人员是否已经选择',
+                centered: true
+              })
+              return
+            }
+            if (cdfList[0] == 2) {
+              this.$warning({
+                title: '提示',
+                content: '请检查每行人员平摊费用合计是否等于承担金额',
+                centered: true
+              })
+              return
+            }
+            // 获取承担人列表数据
+            form.detailSplitList = cdfList[1]
+            form.expense = Math.abs(form.expense) // 费用合计
 
-          _this.spinning = true
-          expenseAcctDetailSave(form).then(res => {
-            if (res.status == 200) {
-              _this.$message.success(res.message)
-              setTimeout(() => {
-                _this.$emit('ok')
+            _this.spinning = true
+            expenseAcctDetailSave(form).then(res => {
+              if (res.status == 200) {
+                _this.$message.success(res.message)
+                setTimeout(() => {
+                  _this.$emit('ok')
+                  _this.spinning = false
+                }, 200)
+              } else {
                 _this.spinning = false
-              }, 200)
-            } else {
-              _this.spinning = false
-            }
-          })
+              }
+            })
+          }
         } else {
           return false
         }
       })
     },
+    // 重置表单
     resetForm () {
       this.$nextTick(() => {
         this.$refs.ruleForm.resetFields()
@@ -367,13 +395,14 @@ export default {
       } else {
         this.form.expenseAccountSn = this.expenseAccountSn
         this.form.expenseAccountNo = this.expenseAccountNo
+        // 编辑
         if (this.expenseAccountDetailSn) {
-          this.title = '编辑'
+          this.title = '编辑费用明细'
           this.form.expenseAccountDetailSn = this.expenseAccountDetailSn || ''
           this.getExpenseAccountDetail()
         } else {
           this.resetForm()
-          this.title = '新增'
+          this.title = this.isBatch ? '批量变更记账名称' : '新增费用明细'
         }
       }
     }

+ 4 - 6
src/views/expenseManagement/expenseReimbursement/importGuideModal.vue

@@ -17,9 +17,9 @@
           <ul>
             <li>1) 导入的Excel文件中必须包含名为“记账类型”、“记账名称”、“费用承担方类型”、“费用承担方”、“费用承担金额”的列,且名称必须相同</li>
             <li>2) 其他列可根据实际情况填写,如果符合规则,系统会一起导入</li>
-            <li><a :href="filePath" style="margin: 5px 0 0 15px;display: block;">
-            <a-icon type="download" style="padding-right: 5px;" />下载导入模板
-          </a></li>
+            <li><a :href="filePath" id="importGuide-link" style="margin: 5px 0 0 15px;display: block;">
+              <a-icon type="download" style="padding-right: 5px;" />下载导入模板
+            </a></li>
           </ul>
         </div>
         <div class="explain-item">
@@ -90,7 +90,7 @@ export default {
         savePathType: 'local'
       },
       exportLoading: false,
-      filePath: location.protocol + '//' +location.host + '/templ/费用明细模板.xlsx' + '?a=' + new Date().getTime()
+      filePath: location.protocol + '//' + location.host + '/templ/费用明细模板.xlsx' + '?a=' + new Date().getTime() // 模板地址
     }
   },
   methods: {
@@ -109,13 +109,11 @@ export default {
     },
     // 上传文件  change
     changeImport (file) {
-      console.log(file, JSON.parse(file))
       if (file && JSON.parse(file).length > 0) {
         this.paramsData = Object.assign({}, JSON.parse(file)[0] || null, this.params)
       } else {
         this.paramsData = null
       }
-      console.log(this.paramsData)
     },
     // 导入
     hanldeOk (obj) {

+ 78 - 58
src/views/expenseManagement/expenseReimbursement/list.vue

@@ -78,9 +78,9 @@
             </template>
             <a-col :md="6" :sm="24">
               <span class="table-page-search-submitButtons">
-                <a-button type="primary" :disabled="disabled" @click="searchForm">查询</a-button>
-                <a-button style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()">重置</a-button>
-                <a @click="advanced=!advanced" style="margin-left: 8px">
+                <a-button type="primary" :disabled="disabled" @click="searchForm" id="salesManagementList-search">查询</a-button>
+                <a-button style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()" id="salesManagementList-reset">重置</a-button>
+                <a @click="advanced=!advanced" style="margin-left: 8px" id="salesManagementList-advanced">
                   {{ advanced ? '收起' : '展开' }}
                   <a-icon :type="advanced ? 'up' : 'down'"/>
                 </a>
@@ -94,9 +94,16 @@
       <a-spin :spinning="spinning" tip="Loading...">
         <!-- 操作按钮 -->
         <div class="table-operator">
-          <a-button type="primary" v-if="$hasPermissions('B_eRNew')" @click="handleEdit()">新增</a-button>
-          <a-button type="primary" :loading="spinning" @click="handlePlPrint()" ghost>批量打印</a-button>
-          <span style="margin-left: 8px">
+          <a-button id="salesManagementList-add" type="primary" v-if="$hasPermissions('B_eRNew')" @click="handleEdit()">新增</a-button>
+          <a-button
+            id="salesManagementList-batchPrint"
+            type="primary"
+            v-if="$hasPermissions('B_eRPrint')"
+            :loading="spinning"
+            @click="handlePlPrint()"
+            ghost>批量打印</a-button>
+          <a-checkbox id="salesManagementList-print-remarks" v-model="printRemark" v-if="$hasPermissions('B_eRPrint')">打印备注</a-checkbox>
+          <span style="margin-left: 8px" v-if="$hasPermissions('B_eRPrint')">
             <template v-if="rowSelectionInfo && rowSelectionInfo.selectedRowKeys.length>0">{{ `已选 ${rowSelectionInfo.selectedRowKeys.length} 项` }}</template>
           </span>
         </div>
@@ -117,7 +124,7 @@
           bordered>
           <!-- 单号 -->
           <template slot="expenseAccountNo" slot-scope="text, record">
-            <span v-if="$hasPermissions('B_eRdetail')" class="link-bule" @click="handleDetail(record)">{{ record.expenseAccountNo }}</span>
+            <span :id="'salesManagementList-detail-'+record.id" v-if="$hasPermissions('B_eRdetail')" class="link-bule" @click="handleDetail(record)">{{ record.expenseAccountNo }}</span>
             <div v-else>{{ record.expenseAccountNo||'--' }}</div>
           </template>
           <!-- 总数量 -->
@@ -130,43 +137,48 @@
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
-            <a-button
-              v-if="record.state=='WAIT_SUBMIT'&&$hasPermissions('B_ERtEdit')"
-              size="small"
-              type="link"
-              class="button-info"
-              @click="handleEdit(record)"
-            >
-              编辑
-            </a-button>
-            <a-button
-              v-if="record.state=='WAIT_SUBMIT'&&$hasPermissions('B_ERDel')"
-              size="small"
-              type="link"
-              class="button-error"
-              @click="handleDel(record)"
-            >
-              删除
-            </a-button>
-            <a-button
-              v-if="record.state!='WAIT_SUBMIT'&&$hasPermissions('B_ERAudit')"
-              size="small"
-              type="link"
-              class="button-info"
-              @click="handleSH(record)"
-            >
-              审核进度
-            </a-button>
-            <a-button
-              v-if="record.state=='AUDIT_REJECT'"
-              size="small"
-              type="link"
-              class="button-info"
-              @click="againEdit(record)"
-            >
-              再次编辑
-            </a-button>
-          <!-- <span v-if="record.state=='AUDIT_REJECT' || record.state=='AUDIT_PASS'">--</span> -->
+            <div>
+              <a-button
+                :id="'salesManagementList-edit-'+record.id"
+                v-if="record.state=='WAIT_SUBMIT'&&$hasPermissions('B_ERtEdit')"
+                size="small"
+                type="link"
+                class="button-info"
+                @click="handleEdit(record)"
+              >
+                编辑
+              </a-button>
+              <a-button
+                :id="'salesManagementList-del-'+record.id"
+                v-if="record.state=='WAIT_SUBMIT'&&$hasPermissions('B_ERDel')"
+                size="small"
+                type="link"
+                class="button-error"
+                @click="handleDel(record)"
+              >
+                删除
+              </a-button>
+              <a-button
+                :id="'salesManagementList-audit-'+record.id"
+                v-if="record.state!='WAIT_SUBMIT'&&$hasPermissions('B_ERAudit')"
+                size="small"
+                type="link"
+                class="button-info"
+                @click="handleSH(record)"
+              >
+                审核进度
+              </a-button>
+              <a-button
+                :id="'salesManagementList-editAge-'+record.id"
+                v-if="record.state=='AUDIT_REJECT'"
+                size="small"
+                type="link"
+                class="button-info"
+                @click="againEdit(record)"
+              >
+                再次编辑
+              </a-button>
+            </div>
           </template>
         </s-table>
       </a-spin>
@@ -216,10 +228,10 @@ export default {
       disabled: false, //  查询、重置按钮是否可操作
       openModal: false, // 审核进度弹框是否显示
       openBaseModal: false, // 基础信息新建
-      showTipModal: false,
+      showTipModal: false, // 打印预览组件
       itemSn: '', // 费用单sn
-      tableHeight: 0,
-      expenseTypes: [],
+      tableHeight: 0, // 表格高度
+      expenseTypes: [], // 费用类型
       // 查询参数
       queryParam: {
         expenseDate: moment().format('YYYY-MM'), // 月份
@@ -231,7 +243,7 @@ export default {
         printStatus: undefined, // 打印状态
         state: undefined, // 状态
         salesBillNo: '', // 销售单号
-        bizUserSn: undefined
+        bizUserSn: undefined // 客服
       },
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
@@ -273,7 +285,8 @@ export default {
           return data
         })
       },
-      rowSelectionInfo: null // 批量选择的数据
+      rowSelectionInfo: null, // 批量选择的数据
+      printRemark: false // 是否打印备注
     }
   },
   methods: {
@@ -281,6 +294,7 @@ export default {
     rowSelectionFun (obj) {
       this.rowSelectionInfo = obj || null
     },
+    // 打印结束,记录打印状态
     printOk (data) {
       if (data && data.status == 200) {
         const rows = this.rowSelectionInfo && this.rowSelectionInfo.selectedRows || []
@@ -312,10 +326,11 @@ export default {
         _this.$message.warning('请在列表勾选后再进行批量操作!')
         return false
       }
+      // 开始打印
       this.spinning = true
       const pageData = []
       const businessSnList = []
-
+      // 循环获取
       for (let i = 0; i < rows.length; i++) {
         // 费用明细
         const fyListData = await expenseAcctDetailFindList({ expenseAccountSn: rows[i].expenseAccountSn }).then(res => res.data)
@@ -323,7 +338,9 @@ export default {
         if (rows[i].state != 'WAIT_SUBMIT') {
           businessSnList.push(rows[i].expenseAccountSn)
         }
+        // 组装数据
         pageData.push({
+          printRemark: this.printRemark,
           expenseInfo: rows[i],
           fyListData: fyListData,
           spListData: []
@@ -337,7 +354,6 @@ export default {
           item.spListData = sp ? sp.taskVOList : []
         }
       })
-      console.log(pageData)
       // 打开预览弹框
       this.showTipModal = true
       this.$nextTick(() => {
@@ -345,25 +361,28 @@ export default {
         this.spinning = false
       })
     },
+    // 费用发生月份
     onChange (date, dateString) {
       this.queryParam.expenseDate = dateString
     },
+    // 费用发生月份禁用范围
     disabledDate (current) {
       return current && current > moment().endOf('day')
     },
+    // 费用类型选择
     expenseChange (val, opts) {
-      console.log(val, opts)
       this.expenseTypes = val || []
       this.queryParam.expenseType = val && val[0] ? val[0] : ''
       this.queryParam.expenseType2 = val && val[1] ? val[1] : ''
       this.queryParam.expenseType3 = val && val[2] ? val[2] : ''
     },
-    // 详情
+    // 详情页面
     handleDetail (row) {
       this.$router.push({ name: 'expenseReimbursementListDetail', params: { sn: row.expenseAccountSn } })
     },
     // 新增、编辑
     handleEdit (row) {
+      // 编辑
       if (row && row.expenseAccountSn) {
         this.$router.push({ name: 'expenseReimbursementEdit', params: { sn: row.expenseAccountSn } })
       } else {
@@ -384,15 +403,13 @@ export default {
             if (res.status == 200) {
               _this.$message.success(res.message)
               _this.$refs.table.refresh()
-              _this.spinning = false
-            } else {
-              _this.spinning = false
             }
+            _this.spinning = false
           })
         }
       })
     },
-    // 审核进度
+    // 审核进度弹框
     handleSH (row) {
       this.openModal = true
       this.itemSn = row.expenseAccountSn
@@ -417,11 +434,12 @@ export default {
         }
       })
     },
+    // 查询列表
     searchForm () {
       this.$refs.table.refresh(true)
       this.$refs.table.clearSelected()
     },
-    // 重置
+    // 重置列表
     resetSearchForm () {
       this.queryParam = {
         expenseDate: '', // 月份
@@ -439,12 +457,14 @@ export default {
       this.expenseTypes = []
       this.searchForm()
     },
+    // 页面初始化
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 240

+ 116 - 113
src/views/expenseManagement/expenseReimbursement/previewModal.vue

@@ -1,126 +1,129 @@
 <template>
-  <div class="container-print-view" 
-  style="width:100%;font-size: 12pt;height: 600px;overflow: auto;" 
+  <div
+    class="container-print-view"
+    style="width:100%;font-size: 12pt;height: 600px;overflow: auto;"
   >
-  <div class="expense-detail-print" style="width:564pt;margin:0 auto;" v-for="item in list" :key="item.expenseInfo.expenseAccountSn">
-    <div class="container-title" style="text-align: center;font-size: 24px;font-weight: 600;margin: 20px 0;">箭冠汽配企业费用报销单</div>
-    <div class="container-info" style="width:564pt;border: 1px solid #000000;">
-      <div class="container-info-basics" v-if="item.expenseInfo">
-        <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
-          <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">申请人:{{ item.expenseInfo.applyPersonName?item.expenseInfo.applyPersonName:'' }}</span>
-          <span style="display: inline-block;border-right: none;padding: 10px;">申请部门:{{ item.expenseInfo.applyDepartmentName?item.expenseInfo.applyDepartmentName:'' }}</span>
-        </div>
-        <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
-          <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">费用类型:{{ item.expenseInfo.expenseTypeName?item.expenseInfo.expenseTypeName:'' }}</span>
-          <span style="display: inline-block;border-right: none;padding: 10px;">费用发生月份:{{ item.expenseInfo.expenseDate?item.expenseInfo.expenseDate.substring(0, 7):'' }}</span>
-        </div>
-        <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
-          <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">费用单号:{{ item.expenseInfo.expenseAccountNo?item.expenseInfo.expenseAccountNo:'' }}{{ item.expenseInfo.stateDictValue?'('+item.expenseInfo.stateDictValue+')':'' }}</span>
-          <span style="display: inline-block;border-right: none;padding: 10px;">合计金额:{{ (item.expenseInfo.applyExpenseTotal ||item.expenseInfo.applyExpenseTotal==0)?item.expenseInfo.applyExpenseTotal+'元':'' }}</span>
-        </div>
-        <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;overflow: hidden;">
-          <div style="border-right: none;float: left;padding: 10px 0 10px 10px;">主题:</div>
-          <div style="padding: 10px 10px 10px 50px;text-align: center;font-weight: bold;">
-            {{ item.expenseInfo.title?item.expenseInfo.title:'' }}
+    <div class="expense-detail-print" style="width:564pt;margin:0 auto;" v-for="item in list" :key="item.expenseInfo.expenseAccountSn">
+      <div class="container-title" style="text-align: center;font-size: 24px;font-weight: 600;margin: 20px 0;">箭冠汽配企业费用报销单</div>
+      <div class="container-info" style="width:564pt;border: 1px solid #000000;">
+        <div class="container-info-basics" v-if="item.expenseInfo">
+          <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
+            <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">申请人:{{ item.expenseInfo.applyPersonName?item.expenseInfo.applyPersonName:'' }}</span>
+            <span style="display: inline-block;border-right: none;padding: 10px;">申请部门:{{ item.expenseInfo.applyDepartmentName?item.expenseInfo.applyDepartmentName:'' }}</span>
           </div>
-        </div>
-        <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
-          <span style="display: inline-block;width: 100%;padding: 10px 10px 5px;border-right: 1px solid #000000;border-right: none;">详细说明:</span>
-          <div style="padding:0 20px 10px 40px;">
-            <div v-for="(ditem,index) in item.expenseInfo.content" :key="index+'-content'">
-              {{ ditem || '--' }}
+          <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
+            <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">费用类型:{{ item.expenseInfo.expenseTypeName?item.expenseInfo.expenseTypeName:'' }}</span>
+            <span style="display: inline-block;border-right: none;padding: 10px;">费用发生月份:{{ item.expenseInfo.expenseDate?item.expenseInfo.expenseDate.substring(0, 7):'' }}</span>
+          </div>
+          <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
+            <span style="display: inline-block;width: 50%;padding: 10px;border-right: 1px solid #000000;">费用单号:{{ item.expenseInfo.expenseAccountNo?item.expenseInfo.expenseAccountNo:'' }}{{ item.expenseInfo.stateDictValue?'('+item.expenseInfo.stateDictValue+')':'' }}</span>
+            <span style="display: inline-block;border-right: none;padding: 10px;">合计金额:{{ (item.expenseInfo.applyExpenseTotal ||item.expenseInfo.applyExpenseTotal==0)?item.expenseInfo.applyExpenseTotal+'元':'' }}</span>
+          </div>
+          <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;overflow: hidden;">
+            <div style="border-right: none;float: left;padding: 10px 0 10px 10px;">主题:</div>
+            <div style="padding: 10px 10px 10px 50px;text-align: center;font-weight: bold;">
+              {{ item.expenseInfo.title?item.expenseInfo.title:'' }}
+            </div>
+          </div>
+          <div class="basics-item" style="width: 100%;border-bottom: 1px solid #000000;padding:0;margin:0;">
+            <span style="display: inline-block;width: 100%;padding: 10px 10px 5px;border-right: 1px solid #000000;border-right: none;">详细说明:</span>
+            <div style="padding:0 20px 10px 40px;">
+              <div v-for="(ditem,index) in item.expenseInfo.content" :key="index+'-content'">
+                {{ ditem || '--' }}
+              </div>
             </div>
           </div>
         </div>
-      </div>
-      <div class="container-fytable" style="padding:0 10px;" v-if="item.fyListData">
-        <div class="table-title" style="padding: 10px 0;">费用明细:</div>
-        <table
-          border="1"
-          cellspacing="0"
-          cellpadding="0"
-          style="width: 100%;border-collapse: collapse;font-size:10pt;text-align: center;"
-          align="center">
-          <thead>
-            <tr>
-              <th style="padding:5px 0;width:6%;">序号</th>
-              <th style="padding:5px 0;width:22%;">记账方</th>
-              <!-- <th style="padding:5px 0;width:15%;">区域/省/市</th> -->
-              <th style="padding:5px 0;width:10%;">记账费用</th>
-              <th style="padding:5px 0;width:30%;">费用承担方</th>
-              <th style="padding:5px 0;width:22%;">产品信息</th>
-            </tr>
-          </thead>
-          <tbody>
-            <tr v-for="(fyItem,index) in item.fyListData" :key="index">
-              <td style="text-align: center;width:6%;">{{ index+1 }}</td>
-              <td style="text-align: left;width:22%;padding:0 5px;">
-                <div>{{ fyItem.accountTypeDictValue }}</div>
-                <div>{{ fyItem.accountName||'' }}</div>
-                <div v-if="fyItem.accountNameFnumber">({{ fyItem.accountNameFnumber }})</div>
-              </td>
-              <!-- <td style="text-align: left;width:15%;padding:5px 5px;">
+        <div class="container-fytable" style="padding:0 10px;" v-if="item.fyListData">
+          <div class="table-title" style="padding: 10px 0;">费用明细:</div>
+          <table
+            border="1"
+            cellspacing="0"
+            cellpadding="0"
+            style="width: 100%;border-collapse: collapse;font-size:10pt;text-align: center;"
+            align="center">
+            <thead>
+              <tr>
+                <th style="padding:5px 0;width:6%;">序号</th>
+                <th style="padding:5px 0;width:22%;">记账方</th>
+                <!-- <th style="padding:5px 0;width:15%;">区域/省/市</th> -->
+                <th style="padding:5px 0;width:10%;">记账费用</th>
+                <th style="padding:5px 0;width:30%;">费用承担方</th>
+                <th style="padding:5px 0;width:22%;">产品信息</th>
+                <th v-if="item.printRemark">备注</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr v-for="(fyItem,index) in item.fyListData" :key="index">
+                <td style="text-align: center;width:6%;">{{ index+1 }}</td>
+                <td style="text-align: left;width:22%;padding:0 5px;">
+                  <div>{{ fyItem.accountTypeDictValue }}</div>
+                  <div>{{ fyItem.accountName||'' }}</div>
+                  <div v-if="fyItem.accountNameFnumber">({{ fyItem.accountNameFnumber }})</div>
+                </td>
+                <!-- <td style="text-align: left;width:15%;padding:5px 5px;">
                 <div>{{ fyItem.subareaNames }}</div>
                 <div>{{ fyItem.provinceName }}</div>
                 <div>{{ fyItem.cityName }}</div>
               </td> -->
-              <td style="text-align: right;width:10%;padding:0 5px;">{{ fyItem.expense||fyItem.expense==0?toThousands(fyItem.expense):'' }}</td>
-              <td style="text-align: left;width:30%;padding:0 5px;vertical-align: top;">
-                <div v-for="(ditem,index) in fyItem.detailSplitList" :key="ditem.id+'-'+index" style="padding: 3px 0;" >
-                  {{ ditem.splitObjName }}
-                  <span v-if="ditem.splitObjFnumber">({{ ditem.splitObjFnumber }})</span>
-                  <span v-if="ditem.childDetailSplit&&ditem.childDetailSplit.splitObjName">/</span>
-                  {{ ditem.childDetailSplit?ditem.childDetailSplit.splitObjName:'' }}: {{ ditem.childDetailSplit?toThousands(ditem.childDetailSplit.splitAmount):toThousands(ditem.splitAmount) }}
-                </div>
-              </td>
-              <td style="text-align: left;width:22%;padding:0 5px;vertical-align: top;">
-                <div v-for="ditem in fyItem.detailProductsList" :key="ditem.id" style="padding: 3px 0;">
-                  <div v-if="ditem.productCode">{{ ditem.productCode }}: {{ toThousands(ditem.expense) }}</div>
-                  <div v-else-if="ditem.productBrandName">{{ ditem.productBrandName }}<span v-if="ditem.productTypeShowName">/</span>{{ ditem.productTypeShowName }}: {{ toThousands(ditem.expense) }}</div>
-                  <div v-else>{{ ditem.productTypeShowName }}: {{ toThousands(ditem.expense) }}</div>
-                </div>
-              </td>
-            </tr>
-          </tbody>
-        </table>
-      </div>
-      <div class="container-fytable" style="padding:0 10px 5px;" v-if="item.spListData&&item.spListData.length">
-        <p class="table-title">审批信息:</p>
-        <table
-          border="1"
-          cellspacing="0"
-          cellpadding="0"
-          style="width: 100%;border-collapse: collapse;border: 1px solid black;font-size:10pt;text-align: center;"
-          align="center">
-          <thead>
-            <tr style="height: 30px;padding: 5px;">
-              <th style="padding:5px 0;width:8%;">序号</th>
-              <th style="padding:5px 0;width:15%;">人员姓名</th>
-              <th style="padding:5px 0;width:15%;">人员类型</th>
-              <th style="padding:5px 0;width:10%;">状态</th>
-              <th style="padding:5px 0;width:17%;">审批意见</th>
-              <th style="padding:5px 0;width:15%;">附件</th>
-              <th style="padding:5px 0;width:20%;">时间</th>
-            </tr>
-          </thead>
-          <tbody>
-            <tr style="height: 30px;padding: 5px;" v-for="(spitem,index) in item.spListData" :key="index">
-              <td style="padding:5px 0;">{{ index+1||'' }}</td>
-              <td style="padding:5px 0;">{{ spitem.userName||'' }}</td>
-              <td style="padding:5px 0;">{{ spitem.userType||'' }}</td>
-              <td style="padding:5px 0;">{{ spitem.state||'' }}</td>
-              <td style="padding:5px 0;">{{ spitem.remark||'' }}</td>
-              <td style="padding:5px 0;">{{ spitem.hasAttachments!= '0' ? '请在钉钉中查看附件内容' : '--' }}</td>
-              <td style="padding:5px 0;">{{ spitem.date||'' }}</td>
-            </tr></tbody>
-        </table>
-      </div>
-      <div class="container-fytable" style="padding:0 10px;" v-else>
-        <p class="table-title">审批信息:暂无</p>
+                <td style="text-align: right;width:10%;padding:0 5px;">{{ fyItem.expense||fyItem.expense==0?toThousands(fyItem.expense):'' }}</td>
+                <td style="text-align: left;width:30%;padding:0 5px;vertical-align: top;">
+                  <div v-for="(ditem,index) in fyItem.detailSplitList" :key="ditem.id+'-'+index" style="padding: 3px 0;" >
+                    {{ ditem.splitObjName }}
+                    <span v-if="ditem.splitObjFnumber">({{ ditem.splitObjFnumber }})</span>
+                    <span v-if="ditem.childDetailSplit&&ditem.childDetailSplit.splitObjName">/</span>
+                    {{ ditem.childDetailSplit?ditem.childDetailSplit.splitObjName:'' }}: {{ ditem.childDetailSplit?toThousands(ditem.childDetailSplit.splitAmount):toThousands(ditem.splitAmount) }}
+                  </div>
+                </td>
+                <td style="text-align: left;width:22%;padding:0 5px;vertical-align: top;">
+                  <div v-for="ditem in fyItem.detailProductsList" :key="ditem.id" style="padding: 3px 0;">
+                    <div v-if="ditem.productCode">{{ ditem.productCode }}: {{ toThousands(ditem.expense) }}</div>
+                    <div v-else-if="ditem.productBrandName">{{ ditem.productBrandName }}<span v-if="ditem.productTypeShowName">/</span>{{ ditem.productTypeShowName }}: {{ toThousands(ditem.expense) }}</div>
+                    <div v-else>{{ ditem.productTypeShowName }}: {{ toThousands(ditem.expense) }}</div>
+                  </div>
+                </td>
+                <td v-if="item.printRemark">{{ fyItem.remarks }}</td>
+              </tr>
+            </tbody>
+          </table>
+        </div>
+        <div class="container-fytable" style="padding:0 10px 5px;" v-if="item.spListData&&item.spListData.length">
+          <p class="table-title">审批信息:</p>
+          <table
+            border="1"
+            cellspacing="0"
+            cellpadding="0"
+            style="width: 100%;border-collapse: collapse;border: 1px solid black;font-size:10pt;text-align: center;"
+            align="center">
+            <thead>
+              <tr style="height: 30px;padding: 5px;">
+                <th style="padding:5px 0;width:8%;">序号</th>
+                <th style="padding:5px 0;width:15%;">人员姓名</th>
+                <th style="padding:5px 0;width:15%;">人员类型</th>
+                <th style="padding:5px 0;width:10%;">状态</th>
+                <th style="padding:5px 0;width:17%;">审批意见</th>
+                <th style="padding:5px 0;width:15%;">附件</th>
+                <th style="padding:5px 0;width:20%;">时间</th>
+              </tr>
+            </thead>
+            <tbody>
+              <tr style="height: 30px;padding: 5px;" v-for="(spitem,index) in item.spListData" :key="index">
+                <td style="padding:5px 0;">{{ index+1||'' }}</td>
+                <td style="padding:5px 0;">{{ spitem.userName||'' }}</td>
+                <td style="padding:5px 0;">{{ spitem.userType||'' }}</td>
+                <td style="padding:5px 0;">{{ spitem.state||'' }}</td>
+                <td style="padding:5px 0;">{{ spitem.remark||'' }}</td>
+                <td style="padding:5px 0;">{{ spitem.hasAttachments!= '0' ? '请在钉钉中查看附件内容' : '--' }}</td>
+                <td style="padding:5px 0;">{{ spitem.date||'' }}</td>
+              </tr></tbody>
+          </table>
+        </div>
+        <div class="container-fytable" style="padding:0 10px;" v-else>
+          <p class="table-title">审批信息:暂无</p>
+        </div>
       </div>
     </div>
   </div>
-  </div>
 </template>
 
 <script>
@@ -140,17 +143,17 @@ export default {
       this.list = list
     },
     // 打印
-    prints(){
+    prints () {
       const _this = this
       const html = document.getElementsByClassName('expense-detail-print')
       // 自动排版
-      const result = groupLessThan(html,true)
+      const result = groupLessThan(html, true)
       this.$store.state.app.curActionPermission = 'B_eRPrint'
       // html, type, callback, printLogParams
       jGPlPrint(result, 'print', function (res) {
         _this.$store.state.app.curActionPermission = ''
         _this.$emit('printOk', res)
-      },null,'费用报销单')
+      }, null, '费用报销单')
     }
   }
 }

+ 7 - 14
src/views/expenseManagement/expenseReimbursement/productInfoModal.vue

@@ -36,6 +36,7 @@
             <div slot="customTitle"><span style="color: red;">*</span>费用金额</div>
             <template slot="action" slot-scope="text,record,index">
               <a-button
+                :id="'productInfoModal-del-'+record.id"
                 size="small"
                 type="link"
                 class="button-error"
@@ -52,17 +53,18 @@
                 style="width: 100%;"
                 :disabled="!!record.productCode"
                 :ref="'productType-'+record.no"
-                :id="'productType-'+index"
+                :id="'productInfoModal-productType-'+record.id"
                 v-model="record.productType"
                 @change="changeProductType"></ProductTypeAll>
             </template>
             <!-- 产品编码 -->
             <template slot="productCode" slot-scope="text,record,index">
-              <productCodeList :ref="'productCode-'+record.no" :key="'productCode-'+index" :id="'productCode-'+index" @change="e => productCodeChange(e, record)" />
+              <productCodeList :ref="'productCode-'+record.no" :key="'productCode-'+index" :id="'productCode-'+record.id" @change="e => productCodeChange(e, record)" />
             </template>
             <!-- 费用金额 -->
             <template slot="expense" slot-scope="text,record">
               <a-input-number
+                :id="'productInfoModal-expense-'+record.id"
                 style="width: 100%;"
                 v-model="record.expense"
                 :precision="2"
@@ -73,6 +75,7 @@
             </template>
             <template slot="footer" slot-scope="currentPageData">
               <a-button
+                :id="'productInfoModal-add-'+record.id"
                 type="link"
                 class="button-info"
                 v-if="dataList.length==0"
@@ -113,7 +116,7 @@ export default {
       type: String,
       default: ''
     },
-    expenseAccountDetailSn: {
+    expenseAccountDetailSn: { // 费用单sn
       type: String,
       default: ''
     }
@@ -123,7 +126,7 @@ export default {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
       dataList: [],
-      baseData: null,
+      baseData: null, // 详细信息
       columns: [
         { title: '产品品牌', scopedSlots: { customRender: 'productBrand' }, align: 'center', width: '20%' },
         { title: '产品分类', scopedSlots: { customRender: 'productType' }, align: 'center', width: '30%' },
@@ -136,7 +139,6 @@ export default {
   methods: {
     // 产品编码
     productCodeChange (val, row) {
-      console.log(val, row)
       row.productSn = val.key || undefined
       row.productCode = val.row && val.row.code ? val.row.code : undefined
       row.productName = val.row && val.row.name ? val.row.name : undefined
@@ -163,7 +165,6 @@ export default {
     },
     //  产品分类  change
     changeProductType (val, id, options) {
-      console.log(val, id, options)
       const index = id.split('-')[1]
       const row = this.dataList[index]
       if (val.length > 1) {
@@ -223,10 +224,6 @@ export default {
       // 校验数据
       const retList = JSON.parse(JSON.stringify(this.dataList))
       console.log(retList)
-      // if (retList.length == 0) {
-      //   this.$message.info('请添加产品信息')
-      //   return
-      // }
       let hasError = 0
       retList.map(item => {
         if (!item.expense) {
@@ -238,10 +235,6 @@ export default {
         delete item.productType
         delete item.no
       })
-      // if (hasError == 1) {
-      //   this.$message.info('请输入费用金额')
-      //   return
-      // }
       if (hasError == 2) {
         this.$message.info('产品品牌、产品分类、产品编码,三个至少填一个')
         return

+ 1 - 1
src/views/expenseManagement/expenseReimbursement/verifyModal.vue

@@ -36,7 +36,7 @@ export default {
       type: Boolean,
       default: false
     },
-    itemSn: {
+    itemSn: { // 费用单sn
       type: [Number, String],
       default: ''
     }

+ 37 - 27
src/views/expenseManagement/expenseReimbursementDetail/list.vue

@@ -7,7 +7,7 @@
           <a-row :gutter="15">
             <a-col :md="6" :sm="24">
               <a-form-item label="审核时间">
-                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+                <rangeDate id="expenseReimbursementDetailList-rangeDate" ref="rangeDate" :value="time" @change="dateChange" />
               </a-form-item>
             </a-col>
             <a-col :md="6" :sm="24">
@@ -40,6 +40,7 @@
               <a-col :md="6" :sm="24">
                 <a-form-item label="费用发生月份">
                   <a-month-picker
+                    id="expenseReimbursementDetailList-month"
                     placeholder="请选择月份"
                     v-model="queryParam.expenseDate"
                     @change="onChange"
@@ -61,14 +62,14 @@
               <a-col :md="6" :sm="24">
                 <a-form-item label="记账名称">
                   <!-- 部门 -->
-                  <department v-show="queryParam.accountType=='INNER_ACCOUNT'" @change="accountNameSnChange" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></department>
+                  <department id="expenseReimbursementDetailList-department" v-show="queryParam.accountType=='INNER_ACCOUNT'" @change="accountNameSnChange" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></department>
                   <!-- 经销商 -->
-                  <custList v-show="queryParam.accountType=='CUSTOMER'" ref="custList" @change="accountNameSnChange" placeholder="请选择记账名称(输入名称搜索)"></custList>
+                  <custList id="expenseReimbursementDetailList-custList" v-show="queryParam.accountType=='CUSTOMER'" ref="custList" @change="accountNameSnChange" placeholder="请选择记账名称(输入名称搜索)"></custList>
                   <!-- 供应商 -->
-                  <supplier v-show="queryParam.accountType=='OUT_ACCOUNT'" @change="accountNameSnChange" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></supplier>
+                  <supplier id="expenseReimbursementDetailList-supplier" v-show="queryParam.accountType=='OUT_ACCOUNT'" @change="accountNameSnChange" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></supplier>
                   <!-- 其它往来 -->
-                  <otherTransactions v-show="queryParam.accountType=='OTHER_ACCOUNT'" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></otherTransactions>
-                  <a-select style="width: 100%" v-if="!queryParam.accountType" placeholder="请选择记账名称">
+                  <otherTransactions id="expenseReimbursementDetailList-other" v-show="queryParam.accountType=='OTHER_ACCOUNT'" v-model="queryParam.accountNameSn" placeholder="请选择记账名称(输入名称搜索)"></otherTransactions>
+                  <a-select style="width: 100%" v-if="!queryParam.accountType" placeholder="请选择记账名称" id="expenseReimbursementDetailList-kong">
                     <a-select-option value="" :disabled="true">
                       请先选择记账类型
                     </a-select-option>
@@ -99,6 +100,7 @@
                 <a-form-item label="费用承担方类型" :label-col="{ span:7 }" :wrapper-col="{ span:17}">
                   <v-select
                     code="EXPENSE_ACCOUNT_DETAIL_SPLIT_OBJ_TYPE"
+                    id="expenseReimbursementDetailList-splitObjType"
                     allowClear
                     style="width: 100%;"
                     v-model="queryParam.splitObjType"
@@ -110,10 +112,10 @@
               <a-col :md="6" :sm="24">
                 <a-form-item label="费用承担方" :label-col="{ span:7 }" :wrapper-col="{ span:17}">
                   <!-- 部门 -->
-                  <department v-show="queryParam.splitObjType=='DEPARTMENT'" style="width: 100%;" placeholder="请选择承担方" v-model="queryParam.splitObjSn"></department>
+                  <department id="expenseReimbursementDetailList-department" v-show="queryParam.splitObjType=='DEPARTMENT'" style="width: 100%;" placeholder="请选择承担方" v-model="queryParam.splitObjSn"></department>
                   <!-- 经销商 -->
-                  <custList v-show="queryParam.splitObjType=='CUSTOMER'" ref="custList" @change="custChange" placeholder="请选择(输入名称搜索)"></custList>
-                  <a-select style="width: 100%" v-if="!queryParam.splitObjType" placeholder="请选择">
+                  <custList id="expenseReimbursementDetailList-custList" v-show="queryParam.splitObjType=='CUSTOMER'" ref="custList" @change="custChange" placeholder="请选择(输入名称搜索)"></custList>
+                  <a-select style="width: 100%" v-if="!queryParam.splitObjType" placeholder="请选择" id="expenseReimbursementDetailList-kong1">
                     <a-select-option value="" :disabled="true">
                       请先选择承担方类型
                     </a-select-option>
@@ -122,12 +124,12 @@
               </a-col>
               <a-col :md="6" :sm="24" v-show="queryParam.splitObjType=='DEPARTMENT'">
                 <a-form-item label="费用承担人" :label-col="{ span:7 }" :wrapper-col="{ span:17}">
-                  <employee style="width: 100%;" placeholder="请选择承担人员" v-model="queryParam.childSplitObjSn"></employee>
+                  <employee id="expenseReimbursementDetailList-employee" style="width: 100%;" placeholder="请选择承担人员" v-model="queryParam.childSplitObjSn"></employee>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24" v-show="queryParam.splitObjType==undefined">
                 <a-form-item label="费用承担人" :label-col="{ span:7 }" :wrapper-col="{ span:17}">
-                  <a-select style="width: 100%" placeholder="请选择">
+                  <a-select style="width: 100%" placeholder="请选择" id="expenseReimbursementDetailList-kong2">
                     <a-select-option value="" :disabled="true">
                       请先选择承担方类型
                     </a-select-option>
@@ -142,8 +144,8 @@
             </template>
             <a-col :md="6" :sm="24">
               <div class="table-page-search-submitButtons">
-                <a-button type="primary" :disabled="disabled" @click="$refs.table.refresh(true)">查询</a-button>
-                <a-button style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()">重置</a-button>
+                <a-button id="expenseReimbursementDetailList-search" type="primary" :disabled="disabled" @click="$refs.table.refresh(true)">查询</a-button>
+                <a-button id="expenseReimbursementDetailList-reset" style="margin-left: 8px" :disabled="disabled" @click="resetSearchForm()">重置</a-button>
                 <a-button
                   style="margin-left: 10px"
                   type="primary"
@@ -153,7 +155,7 @@
                   :loading="exportLoading"
                   v-if="$hasPermissions('B_expenseAcctDetailReport')"
                   id="expenseAcctDetail-export">导出</a-button>
-                <a @click="advanced=!advanced" style="margin-left: 8px">
+                <a @click="advanced=!advanced" style="margin-left: 8px" id="expenseReimbursementDetailList-advanced">
                   {{ advanced ? '收起' : '展开' }}
                   <a-icon :type="advanced ? 'up' : 'down'"/>
                 </a>
@@ -220,14 +222,14 @@ export default {
       advanced: true, // 高级搜索 展开/关闭
       disabled: false, //  查询、重置按钮是否可操作
       openModal: false, // 选择客户弹框是否显示
-      exportLoading: false,
+      exportLoading: false, // 导出loading
       tableHeight: 0,
       time: [
         moment(getDate.getCurrMonthDays().starttime, 'YYYY-MM-DD'),
         moment(getDate.getCurrMonthDays().endtime, 'YYYY-MM-DD')
       ],
-      countData: null,
-      expenseTypes: [],
+      countData: null, // 统计信息
+      expenseTypes: [], // 费用类型
       // 查询参数
       queryParam: {
         expenseDate: undefined, // 月份
@@ -244,15 +246,15 @@ export default {
         splitObjType: undefined, // 费用承担方类型
         splitObjSn: undefined, //  费用承担方
         childSplitObjSn: undefined, // 费用承担人
-        subareaArea: {
+        subareaArea: { // 区域信息
           subareaName: '',
           subareaAreaName: ''
         },
-        provinceName: '',
-        cityName: '',
+        provinceName: '', // 省
         provinceSn: undefined,
+        cityName: '', // 市
         citySn: undefined,
-        bizUserSn: undefined
+        bizUserSn: undefined // 客服
       },
       addrProvinceList: [], // 省列表
       addrCityList: [], // 城市列表数据
@@ -315,46 +317,52 @@ export default {
       this.queryParam.beginDate = date[0]
       this.queryParam.endDate = date[1]
     },
+    // 费用发生月份
     onChange (date, dateString) {
       this.queryParam.expenseDate = dateString
     },
+    // 费用发生月份禁用时间
+    disabledDate (current) {
+      return current && current > moment().endOf('day')
+    },
+    // 费用类型
     expenseChange (val, opts) {
-      console.log(val, opts)
       this.expenseTypes = val || []
       this.queryParam.expenseType = val && val[0] ? val[0] : ''
       this.queryParam.expenseType2 = val && val[1] ? val[1] : ''
       this.queryParam.expenseType3 = val && val[2] ? val[2] : ''
     },
+    // 经销商 ,费用承担方
     custChange (val) {
       this.queryParam.splitObjSn = val.key
     },
-    disabledDate (current) {
-      return current && current > moment().endOf('day')
-    },
+    // 申请人选择
     employeeChange (v) {
       this.queryParam.employeeSn = v.key
     },
+    // 申请部门选择
     applyDepartmentChange (v) {
       this.queryParam.applyDepartmentSn = v.key
     },
     // 记账名称变化时
     accountNameSnChange (v, row) {
-      console.log(v, row)
       if (v) {
         this.queryParam.accountNameSn = v.key
       }
     },
+    // 费用承担方类型
     splitObjTypeChange (v) {
       this.queryParam.splitObjSn = undefined
       this.queryParam.childSplitObjSn = undefined
       this.$refs.custList.dealerName = []
     },
+    // 统计信息
     getDetailCount (params) {
       expenseAccountDetailCount(params).then(res => {
         this.countData = res.data || null
       })
     },
-    //  导出
+    //  导出费用报销明细统计报表
     handleExport () {
       const _this = this
       const params = JSON.parse(JSON.stringify(_this.queryParam))
@@ -401,12 +409,14 @@ export default {
       this.expenseTypes = []
       this.$refs.table.refresh(true)
     },
+    // 初始化页面
     pageInit () {
       const _this = this
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
       })
     },
+    // 计算表格高度
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       this.tableHeight = window.innerHeight - tableSearchH - 235

+ 7 - 5
src/views/financialManagement/collectionDetailStatic/list.vue

@@ -165,6 +165,7 @@
           授信还款总金额:<strong>{{ toThousands(countData&&countData.payCreditAmount||0) }}</strong>;
           余款抵扣总金额:<strong>{{ toThousands(countData&&countData.balanceAmount||0) }}</strong>;
           跨月打款总金额:<strong>{{ toThousands(countData&&countData.nextMonthAmount||0) }}</strong>;
+          特殊申请发货总金额:<strong>{{ toThousands(countData&&countData.specialSendAmount||0) }}</strong>;
         </div>
       </div>
       <a-spin :spinning="spinning" tip="Loading...">
@@ -354,6 +355,7 @@ export default {
         { title: '授信还款', dataIndex: 'payCreditAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '余款抵扣', dataIndex: 'balanceAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '跨月打款', dataIndex: 'nextMonthAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+        { title: '特殊申请发货', dataIndex: 'specialSendAmount', width: '5%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '户名', dataIndex: 'bankAccount', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
         { title: '汇入银行', dataIndex: 'bankName', align: 'center', width: '5%', customRender: function (text) { return text || '--' } },
         { title: '足额打款', dataIndex: 'fullPaymentFlagDictValue', align: 'center', width: '5%', customRender: function (text) { return (text == 0 || text) ? text : '--' } },
@@ -407,7 +409,7 @@ export default {
               dataList.map(item => {
                 data.push({ id: item.id, printStatus: 'NO_PRINT' })
               })
-              _this.plUpdateStatus(data,1)
+              _this.plUpdateStatus(data, 1)
             }
           })
         } else {
@@ -418,16 +420,16 @@ export default {
       if (e.key == 2) { // 批量开票
         const data = []
         rows.map(item => {
-          data.push({ id: item.id, invoiceDate: '', remarks: ''})
+          data.push({ id: item.id, invoiceDate: '', remarks: '' })
         })
         _this.plinvoiceInfo = data
         _this.plinvoiceIsShow = true
       }
     },
     // 批量操作
-    plUpdateStatus (data,type) {
+    plUpdateStatus (data, type) {
       this.spinning = true
-      financeBookDetailUpdateBatch(data,type).then(res => {
+      financeBookDetailUpdateBatch(data, type).then(res => {
         if (res.status == 200) {
           this.searchForm()
         }
@@ -440,7 +442,7 @@ export default {
         item.invoiceDate = data.invoiceDate
         item.remarks = data.remarks
       })
-      this.plUpdateStatus(this.plinvoiceInfo,0)
+      this.plUpdateStatus(this.plinvoiceInfo, 0)
     },
     // 表格选中项
     rowSelectionFun (obj) {

+ 22 - 19
src/views/financialManagement/financialCollection/detail.vue

@@ -13,24 +13,24 @@
         </template>
       </a-page-header>
       <a-card :bordered="false" class="financialCollectionAddcont" v-show="showDetail">
-         <a-descriptions :column="{ xs: 2, sm: 3, md: 3}" v-if="detailData" ref="tableSearch">
-           <a-descriptions-item label="创建时间">{{ detailData&&detailData.createDate || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="收款单号">
-             {{ detailData&&detailData.bookNo || '--' }}
-           </a-descriptions-item>
-           <a-descriptions-item label="申请人">{{ detailData&&detailData.applyPersonName || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="审核时间">{{ detailData&&detailData.auditDate || '--' }}</a-descriptions-item>
-           <a-descriptions-item span="2" label="收款事由">{{ detailData&&detailData.bookReason || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="状态">{{ detailData&&detailData.statusDictValue || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="付款方类型">{{ detailData&&detailData.payerTypeDictValue || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="付款方">{{ detailData&&detailData.payerName || '--' }}</a-descriptions-item>
-           <a-descriptions-item label="备注" :span="3">{{ detailData&&detailData.remarks||'--' }}</a-descriptions-item>
-           <a-descriptions-item label="附件" :span="3">
-             <a target="_blank" style="color: #00aaff;text-decoration: underline;margin-right: 15px;" :href="item.filePath" v-for="item in detailData.attachmentList" :key="item.id">
-               {{ item.fileName }}
-             </a>
-           </a-descriptions-item>
-         </a-descriptions>
+        <a-descriptions :column="{ xs: 2, sm: 3, md: 3}" v-if="detailData" ref="tableSearch">
+          <a-descriptions-item label="创建时间">{{ detailData&&detailData.createDate || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="收款单号">
+            {{ detailData&&detailData.bookNo || '--' }}
+          </a-descriptions-item>
+          <a-descriptions-item label="申请人">{{ detailData&&detailData.applyPersonName || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="审核时间">{{ detailData&&detailData.auditDate || '--' }}</a-descriptions-item>
+          <a-descriptions-item span="2" label="收款事由">{{ detailData&&detailData.bookReason || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="状态">{{ detailData&&detailData.statusDictValue || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="付款方类型">{{ detailData&&detailData.payerTypeDictValue || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="付款方">{{ detailData&&detailData.payerName || '--' }}</a-descriptions-item>
+          <a-descriptions-item label="备注" :span="3">{{ detailData&&detailData.remarks||'--' }}</a-descriptions-item>
+          <a-descriptions-item label="附件" :span="3">
+            <a target="_blank" style="color: #00aaff;text-decoration: underline;margin-right: 15px;" :href="item.filePath" v-for="item in detailData.attachmentList" :key="item.id">
+              {{ item.fileName }}
+            </a>
+          </a-descriptions-item>
+        </a-descriptions>
       </a-card>
       <!-- 财务明细 -->
       <a-card :bordered="false" size="small" class="financialCollectionAddcont" v-if="$route.params.sn||bookSn">
@@ -46,7 +46,9 @@
             收款金额合计 {{ toThousands(detailData.receiptTotalAmount ||0) }},
             使用授信合计 {{ toThousands(detailData.useTotalAmount||0) }},
             授信还款合计 {{ toThousands(detailData.payTotalAmount||0) }},
-            余款抵扣合计 {{ toThousands(detailData.balanceTotalAmount||0) }}
+            余款抵扣合计 {{ toThousands(detailData.balanceTotalAmount||0) }},
+            跨月打款合计 {{ toThousands(detailData.nextMonthTotalAmount||0) }},
+            特殊申请发货合计 {{ toThousands(detailData.specialTotalAmount||0) }}
           </div>
         </a-alert>
         <!-- 列表 -->
@@ -141,6 +143,7 @@ export default {
         { title: '授信还款', dataIndex: 'payTotalAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '余款抵扣', dataIndex: 'balanceAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '跨月打款', dataIndex: 'nextMonthAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+        { title: '特殊申请发货', dataIndex: 'specialSendAmount', width: '5%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '户名', dataIndex: 'bankAccount', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
         { title: '汇入银行', dataIndex: 'bankName', align: 'center', width: '8%', customRender: function (text) { return text || '--' } },
         { title: '足额打款', dataIndex: 'fullPaymentFlagDictValue', align: 'center', width: '5%', customRender: function (text) { return (text == 0 || text) ? text : '--' } },

+ 3 - 0
src/views/financialManagement/financialCollection/edit.vue

@@ -58,6 +58,8 @@
             使用授信合计 {{ toThousands(detailData.useTotalAmount||0) }},
             授信还款合计 {{ toThousands(detailData.payTotalAmount||0) }},
             余款抵扣合计 {{ toThousands(detailData.balanceTotalAmount||0) }}
+            跨月打款合计 {{ toThousands(detailData.nextMonthTotalAmount||0) }},
+            特殊申请发货合计 {{ toThousands(detailData.specialTotalAmount||0) }}
           </div>
         </a-alert>
         <!-- 列表 -->
@@ -256,6 +258,7 @@ export default {
         { title: '授信还款', dataIndex: 'payTotalAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '余款抵扣', dataIndex: 'balanceAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '跨月打款', dataIndex: 'nextMonthAmount', align: 'right', width: '5%', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+        { title: '特殊申请发货', dataIndex: 'specialSendAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '户名', dataIndex: 'bankAccount', align: 'center', width: '7%', customRender: function (text) { return text || '--' } },
         { title: '汇入银行', dataIndex: 'bankName', align: 'center', width: '7%', customRender: function (text) { return text || '--' } },
         { title: '足额打款', dataIndex: 'fullPaymentFlagDictValue', align: 'center', width: '5%', customRender: function (text) { return (text == 0 || text) ? text : '--' } },

+ 79 - 54
src/views/financialManagement/financialCollection/fcDetailModal.vue

@@ -18,7 +18,13 @@
         <a-row>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="收款日期" prop="receiptDate">
-              <a-date-picker inputReadOnly style="width:100%" format="YYYY-MM-DD" v-model="form.receiptDate" placeholder="请选择收款日期" />
+              <a-date-picker
+                id="fcDetailModal-receiptDate"
+                inputReadOnly
+                style="width:100%"
+                format="YYYY-MM-DD"
+                v-model="form.receiptDate"
+                placeholder="请选择收款日期" />
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
@@ -39,12 +45,13 @@
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="付款方" prop="dealerSn">
               <!-- <dealerSubareaScopeList ref="settleClientName" @change="custChange" :disabled="true" /> -->
-              {{form.payerName}}
+              {{ form.payerName }}
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="付款账户类型" prop="payerAccountType">
               <v-select
+                id="fcDetailModal-payerAccountType"
                 v-model="form.payerAccountType"
                 showType="radio"
                 code="PAYER_ACCOUNT_TYPE"
@@ -58,13 +65,13 @@
           <!-- 公户 -->
           <a-col :span="12" v-if="form.payerAccountType=='PUBLIC'">
             <a-form-model-item style="margin-bottom:5px;" label="营业执照名称">
-              <a-input :maxLength="30" placeholder="请输入营业执照名称" v-model="form.payerAccountInfo"></a-input>
+              <a-input id="fcDetailModal-payerAccountInfo" :maxLength="30" placeholder="请输入营业执照名称" v-model="form.payerAccountInfo"></a-input>
             </a-form-model-item>
           </a-col>
           <!-- 私户 -->
           <a-col :span="12" v-if="form.payerAccountType=='PRIVATE'">
             <a-form-model-item style="margin-bottom:5px;" label="付款账户">
-              <a-input :maxLength="30" placeholder="付款账户" v-model="form.payerAccountInfo"></a-input>
+              <a-input id="fcDetailModal-payerAccountInfo1" :maxLength="30" placeholder="付款账户" v-model="form.payerAccountInfo"></a-input>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
@@ -78,12 +85,12 @@
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="付款方" prop="payerName">
               <!-- <a-input :maxLength="30" placeholder="请输入付款方名称" disabled v-model="form.payerName"></a-input> -->
-              {{form.payerName}}
+              {{ form.payerName }}
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="付款账户">
-              <a-input :maxLength="30" placeholder="付款账户" v-model="form.payerAccountInfo"></a-input>
+              <a-input id="fcDetailModal-payerAccountInfo2" :maxLength="30" placeholder="付款账户" v-model="form.payerAccountInfo"></a-input>
             </a-form-model-item>
           </a-col>
         </a-row>
@@ -93,6 +100,7 @@
             <a-form-model-item style="margin-bottom:5px;" label="订单金额">
               <a-input-number
                 style="width:100%"
+                id="fcDetailModal-orderAmount"
                 :min="0"
                 :max="99999999"
                 :precision="2"
@@ -104,6 +112,7 @@
             <a-form-model-item style="margin-bottom:5px;" label="收款金额">
               <a-input-number
                 style="width:100%"
+                id="fcDetailModal-receiptAmount"
                 :min="0"
                 :max="99999999"
                 :precision="2"
@@ -113,19 +122,20 @@
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="使用授信">
-              <a-checkbox v-model="form.useCreditFlag" @change="form.detailItemUseList=[]">是</a-checkbox>
+              <a-checkbox id="fcDetailModal-useCreditFlag" v-model="form.useCreditFlag" @change="form.detailItemUseList=[]">是</a-checkbox>
               <span v-if="form.useCreditFlag">合计: {{ useTotalAmount||'--' }}</span>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="授信还款">
-              <a-checkbox v-model="form.payCreditFlag" @change="form.detailItemPayList=[]">是</a-checkbox>
+              <a-checkbox id="fcDetailModal-payCreditFlag" v-model="form.payCreditFlag" @change="form.detailItemPayList=[]">是</a-checkbox>
               <span v-if="form.payCreditFlag">合计:  {{ payTotalAmount||'--' }}</span>
             </a-form-model-item>
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="余款抵扣">
               <a-input-number
+                id="fcDetailModal-balanceAmount"
                 style="width:100%"
                 :min="0"
                 :max="99999999"
@@ -138,6 +148,7 @@
             <a-form-model-item style="margin-bottom:5px;" label="跨月打款">
               <a-input-number
                 style="width:100%"
+                id="fcDetailModal-nextMonthAmount"
                 :min="0"
                 :max="99999999"
                 :precision="2"
@@ -145,9 +156,32 @@
                 v-model="form.nextMonthAmount"></a-input-number>
             </a-form-model-item>
           </a-col>
+          <a-col :span="12">
+            <a-form-model-item style="margin-bottom:5px;" label="特殊申请发货">
+              <a-input-number
+                style="width:100%"
+                id="fcDetailModal-specialSendAmount"
+                :min="0"
+                :max="99999999"
+                :precision="2"
+                placeholder="请输入特殊申请发货金额"
+                v-model="form.specialSendAmount"></a-input-number>
+            </a-form-model-item>
+          </a-col>
+          <a-col :span="12">
+            <a-form-model-item style="margin-bottom:5px;" label="足额打款">
+              <v-select
+                showType="radio"
+                id="fcDetailModal-fullPaymentFlag"
+                v-model="form.fullPaymentFlag"
+                code="FLAG"
+                placeholder="请选择是否足额打款"
+                allowClear></v-select>
+            </a-form-model-item>
+          </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="户名" prop="bankAccount">
-              <a-select placeholder="请选择户名" v-model="form.bankAccount" style="width: 100%" @change="handleChange">
+              <a-select placeholder="请选择户名" v-model="form.bankAccount" id="fcDetailModal-bankAccount" style="width: 100%" @change="handleChange">
                 <a-select-option v-for="item in bankList" :value="item.bankAccount">
                   {{ item.bankAccount }}
                 </a-select-option>
@@ -156,25 +190,16 @@
           </a-col>
           <a-col :span="12">
             <a-form-model-item style="margin-bottom:5px;" label="汇入银行" prop="bankName">
-              <a-select placeholder="请选择汇入银行" v-model="form.bankName" style="width: 100%">
+              <a-select placeholder="请选择汇入银行" id="fcDetailModal-bankName" v-model="form.bankName" style="width: 100%">
                 <a-select-option v-for="item in bankNameList" :value="item">
                   {{ item }}
                 </a-select-option>
               </a-select>
             </a-form-model-item>
           </a-col>
-          <a-col :span="12">
-            <a-form-model-item style="margin-bottom:5px;" label="足额打款">
-              <v-select
-                v-model="form.fullPaymentFlag"
-                code="FLAG"
-                placeholder="请选择是否足额打款"
-                allowClear></v-select>
-            </a-form-model-item>
-          </a-col>
           <a-col :span="24">
             <a-form-model-item style="margin-bottom:5px;" label="说明" :labelCol="{span:3}" :wrapper-col="{ span: 20 }">
-              <a-textarea :rows="2" :maxLength="500" placeholder="请输入说明(最多500个字符)" v-model="form.explainInfo"></a-textarea>
+              <a-textarea :rows="2" id="fcDetailModal-explainInfo" :maxLength="500" placeholder="请输入说明(最多500个字符)" v-model="form.explainInfo"></a-textarea>
             </a-form-model-item>
           </a-col>
           <!-- 使用授信列表 -->
@@ -189,8 +214,8 @@
           </a-col>
           <a-col :span="24">
             <a-form-model-item :wrapper-col="{ span: 12, offset: 6 }" style="text-align: center;margin-top: 50px;">
-              <a-button @click="cancel" style="margin-right: 15px" id="chooseCustom-btn-back">取消</a-button>
-              <a-button type="primary" :loading="confirmLoading" @click="handleSubmit" id="chooseCustom-btn-submit">保存</a-button>
+              <a-button @click="cancel" style="margin-right: 15px" id="fcDetailModal-btn-back">取消</a-button>
+              <a-button type="primary" :loading="confirmLoading" @click="handleSubmit" id="fcDetailModal-btn-submit">保存</a-button>
             </a-form-model-item>
           </a-col>
         </a-row>
@@ -232,32 +257,33 @@ export default {
       disabled: false,
       title: '新增收款明细',
       confirmLoading: false,
-      bookDetailSn: '',
+      bookDetailSn: '', // 收款明细sn
       formItemLayout: {
         labelCol: { span: 6 },
         wrapperCol: { span: 16 }
       },
       form: {
-        payerType: 'DEALER',
-        payerAccountType: 'PUBLIC',
-        dealerSn: undefined,
-        payerName: '',
-        payerAccountInfo: '',
-        licenseName: '',
-        receiptDate: moment(),
-        dealerCode: '',
-        orderAmount: '',
-        receiptAmount: '',
-        useCreditFlag: false,
-        detailItemUseList: [],
-        payCreditFlag: false,
-        detailItemPayList: [],
-        balanceAmount: '',
-        nextMonthAmount: '',
-        bankAccount: '东莞箭冠',
-        bankName: '东莞银行',
-        fullPaymentFlag: '1',
-        explainInfo: ''
+        payerType: 'DEALER', // 付款方
+        payerAccountType: 'PUBLIC', // 付款账户
+        dealerSn: undefined, // 客户sn
+        payerName: '', // 付款方名称
+        payerAccountInfo: '', // 付款账户
+        licenseName: '', // 营业执照
+        receiptDate: moment(), // 收款日期
+        dealerCode: '', // 财务编码
+        orderAmount: '', // 订单金额
+        receiptAmount: '', // 收款金额
+        useCreditFlag: false, // 是否使用授信
+        detailItemUseList: [], // 授信使用项目
+        payCreditFlag: false, // 是否授信还款
+        detailItemPayList: [], // 授信还款项目
+        balanceAmount: '', // 余额
+        nextMonthAmount: '', // 下月额度
+        specialSendAmount: '', // 特批额度
+        bankAccount: '东莞箭冠', // 汇入银行户名
+        bankName: '东莞银行', // 汇入银行
+        fullPaymentFlag: '1', // 足额打款
+        explainInfo: '' // 说明
       },
       rules: {
         receiptDate: [ { required: true, message: '请选择收款日期', trigger: ['change', 'blur'] } ],
@@ -265,8 +291,8 @@ export default {
         dealerSn: [ { required: true, message: '请选择付款方', trigger: ['change', 'blur'] } ],
         payerName: [ { required: true, message: '请输入付款方名称', trigger: ['change', 'blur'] } ],
         payerAccountType: [ { required: true, message: '请选择付款账户类型', trigger: ['change', 'blur'] } ],
-        bankAccount:[{ required: true, message: '请选择户名', trigger: ['change', 'blur'] }],
-        bankName:[{ required: true, message: '请选择汇入银行', trigger: ['change', 'blur'] }]
+        bankAccount: [{ required: true, message: '请选择户名', trigger: ['change', 'blur'] }],
+        bankName: [{ required: true, message: '请选择汇入银行', trigger: ['change', 'blur'] }]
       },
       useTotalAmount: '',
       payTotalAmount: '',
@@ -315,23 +341,22 @@ export default {
         this.form.licenseName = ''
         this.form.payerAccountInfo = ''
       }
-      if(this.form.payerAccountType=='PUBLIC'){
+      if (this.form.payerAccountType == 'PUBLIC') {
         this.form.bankAccount = '东莞箭冠'
         this.form.bankName = '东莞银行'
         this.bankNameList = ['东莞银行']
-      }else{
+      } else {
         this.form.bankAccount = '张丽添'
         this.form.bankName = '农业银行'
         this.bankNameList = ['农业银行']
       }
     },
     handleChange (v) {
-      console.log(v)
-      if(v){
+      if (v) {
         this.form.bankAccount = v
         const row = this.bankList.find(item => item.bankAccount == v)
         this.bankNameList = row.bankName
-        this.form.bankName = undefined  
+        this.form.bankName = undefined
       }
     },
     getLastPayerAccount () {
@@ -356,7 +381,6 @@ export default {
     },
     // 客户
     custChange (v) {
-      console.log(v)
       if (v && v.key) {
         this.form.dealerSn = v.key
         this.form.payerName = v.row ? v.row.dealerName : ''
@@ -430,10 +454,10 @@ export default {
     setDetail (data) {
       this.form = Object.assign(this.form, { payerTypeDictValue: data.payerTypeDictValue, payerType: data.payerType, dealerSn: data.dealerSn, payerName: data.payerName })
       this.$nextTick(() => {
-        if(this.form.dealerSn){
+        if (this.form.dealerSn) {
           // this.$refs.settleClientName.getDetail(this.form.dealerSn)
           this.getDealerDetail(this.form.dealerSn)
-        }else{
+        } else {
           this.form.bankAccount = '张丽添'
           this.form.bankName = '农业银行'
           this.bankNameList = ['农业银行']
@@ -476,7 +500,7 @@ export default {
       })
       this.bankNameList = []
       this.bankNameList = ['东莞银行']
-      if(this.$refs.ruleForm){
+      if (this.$refs.ruleForm) {
         this.$refs.ruleForm.resetFields()
       }
       this.form = {
@@ -496,6 +520,7 @@ export default {
         detailItemPayList: [],
         balanceAmount: '',
         nextMonthAmount: '',
+        specialSendAmount: '',
         bankAccount: '东莞箭冠',
         bankName: '东莞银行',
         fullPaymentFlag: '1',

+ 4 - 0
src/views/financialManagement/financialCollection/list.vue

@@ -92,6 +92,8 @@
               使用授信总金额:{{ toThousands(countData&&countData.useTotalAmount||0) }};
               授信还款总金额:{{ toThousands(countData&&countData.payTotalAmount||0) }};
               余款抵扣总金额:{{ toThousands(countData&&countData.balanceTotalAmount||0) }};
+              跨月打款总金额:{{ toThousands(countData&&countData.nextMonthTotalAmount||0) }};
+              特殊申请发货总金额:{{ toThousands(countData&&countData.specialTotalAmount||0) }};
             </div>
           </div>
           <div></div>
@@ -251,6 +253,8 @@ export default {
         { title: '使用授信总金额', dataIndex: 'useTotalAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '授信还款总金额', dataIndex: 'payTotalAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '余款抵扣总金额', dataIndex: 'balanceTotalAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+        { title: '跨月打款总金额', dataIndex: 'nextMonthTotalAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
+        { title: '特殊申请发货总金额', dataIndex: 'specialTotalAmount', width: '6%', align: 'right', customRender: text => ((text || text == 0) ? this.toThousands(text) : '--') },
         { title: '审核时间', dataIndex: 'auditDate', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '状态', dataIndex: 'statusDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '8%', align: 'center' }

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