黄梓星 преди 1 година
родител
ревизия
1b5ec4525d
променени са 100 файла, в които са добавени 3198 реда и са изтрити 384 реда
  1. 0 1
      .gitignore
  2. 8 2
      package.json
  3. 29 2
      src/api/business/purchase/apply.js
  4. 10 1
      src/api/business/purchase/catalogue.js
  5. 14 0
      src/api/business/purchase/contract.js
  6. 80 2
      src/api/business/purchase/purchase-order.js
  7. 8 0
      src/api/business/purchase/task.js
  8. 9 0
      src/api/business/spd/bo/iuapquery/basic.js
  9. 8 0
      src/api/business/spd/bo/task.js
  10. 52 0
      src/api/business/spd/fillin/dailysale_quantity_assess.js
  11. 35 0
      src/api/business/spd/fillin/dailysale_quantity_assess_item.js
  12. 44 0
      src/api/business/spd/goal_management/annualSaleGoal.js
  13. 44 0
      src/api/business/spd/goal_management/annualSaleGoalDetails.js
  14. 44 0
      src/api/business/spd/goal_management/annualSaleGoalMerge.js
  15. 26 0
      src/api/business/spd/goal_management/annualSaleMergeDetails.js
  16. 57 0
      src/api/business/spd/goal_management/commonWays.js
  17. 44 0
      src/api/business/spd/goal_management/monthGoalMerge.js
  18. 53 0
      src/api/business/spd/goal_management/monthGoalMergeDetails.js
  19. 44 0
      src/api/business/spd/goal_management/monthReturnGoal.js
  20. 44 0
      src/api/business/spd/goal_management/monthReturnGoalDetails.js
  21. 44 0
      src/api/business/spd/goal_management/monthReturnMerge.js
  22. 53 0
      src/api/business/spd/goal_management/monthReturnMergeDetails.js
  23. 44 0
      src/api/business/spd/goal_management/monthSaleGoal.js
  24. 44 0
      src/api/business/spd/goal_management/monthSaleGoalDetails.js
  25. 52 0
      src/api/business/spd/starget/target.js
  26. 68 0
      src/api/business/spd/starget/targetTemplate.js
  27. 71 0
      src/api/business/spd/task_management/visitingPlan/visitingPlan.js
  28. 61 0
      src/api/changeApply/basic.js
  29. 9 0
      src/api/classify/basic.js
  30. 25 25
      src/api/login.js
  31. 25 14
      src/api/material/basic.js
  32. 10 0
      src/api/monitor/service.js
  33. 8 1
      src/api/purchase/DemandSummary.js
  34. 16 0
      src/api/purchase/deliveryAddress.js
  35. 27 0
      src/api/purchase/ownership.js
  36. 15 0
      src/api/purchase/purchaseDemand.js
  37. 29 1
      src/api/purchase/transferOrder.js
  38. 34 0
      src/api/purchase/workSpace.js
  39. 57 1
      src/api/requisition/basic.js
  40. 9 0
      src/api/system/role.js
  41. 17 2
      src/assets/styles/element-ui.scss
  42. 10 0
      src/assets/styles/font.scss
  43. 33 20
      src/assets/styles/index.scss
  44. 23 0
      src/assets/styles/margin.scss
  45. 23 0
      src/assets/styles/padding.scss
  46. 4 1
      src/assets/styles/sidebar.scss
  47. 196 0
      src/components/BatchImport/index.vue
  48. 5 3
      src/components/DictTag/index.vue
  49. 21 8
      src/components/FileUpload/index.vue
  50. 33 27
      src/components/ImageUpload/index.vue
  51. 2 2
      src/components/Pagination/index.vue
  52. 1 1
      src/components/PopDialog/dose.vue
  53. 1 1
      src/components/PopDialog/drug.vue
  54. 15 7
      src/components/PopDialog/fourClass.vue
  55. 15 7
      src/components/PopDialog/index.vue
  56. 1 1
      src/components/PopDialog/innerPackingUnit.vue
  57. 1 1
      src/components/PopDialog/midPack.vue
  58. 1 1
      src/components/PopDialog/organization.vue
  59. 1 1
      src/components/PopDialog/place.vue
  60. 1 1
      src/components/PopDialog/productFactory.vue
  61. 1 1
      src/components/PopDialog/serviceline.vue
  62. 1 1
      src/components/PopDialog/staff.vue
  63. 1 1
      src/components/PopDialog/tax.vue
  64. 1 1
      src/components/PopDialog/unit.vue
  65. 1 1
      src/components/Refers/batchRefer.vue
  66. 54 5
      src/components/Refers/refers.vue
  67. 121 0
      src/components/Refers/sigleTreeRefer.vue
  68. 7 5
      src/components/Refers/treeRefer.vue
  69. 10 0
      src/components/Retrieve/api/index.js
  70. 93 0
      src/components/Retrieve/index.vue
  71. 42 0
      src/components/computed-input-v2/index.vue
  72. 7 21
      src/components/computed-input/index.vue
  73. 137 0
      src/components/date-wrapper/index.vue
  74. 51 0
      src/components/draggable/index.vue
  75. 4 2
      src/components/file-preview/index.vue
  76. 56 0
      src/components/popover-select-v2/fetch/index.js
  77. 334 0
      src/components/popover-select-v2/index.vue
  78. 276 0
      src/components/popover-select-v2/multiple.vue
  79. 10 26
      src/components/popover-select/components/ADDRESS_PARAM.js
  80. 4 15
      src/components/popover-select/components/ALLOCATION_PARAM.js
  81. 5 15
      src/components/popover-select/components/BALATYPE_PARAM.js
  82. 4 8
      src/components/popover-select/components/CONTACTS_PARAM.js
  83. 13 16
      src/components/popover-select/components/CURRENCY_PARAM.js
  84. 4 15
      src/components/popover-select/components/CUSTOMERDEPT_PARAM.js
  85. 4 14
      src/components/popover-select/components/CUSTOMER_PARAM.js
  86. 11 0
      src/components/popover-select/components/CUSTOMER_PARAM_ZT.js
  87. 4 8
      src/components/popover-select/components/DEPT_PARAM.js
  88. 7 0
      src/components/popover-select/components/LINKMAN_PARAM.js
  89. 11 0
      src/components/popover-select/components/MANUFACTURER_PARAM.js
  90. 97 30
      src/components/popover-select/components/MATERIAL_PARAM.js
  91. 10 0
      src/components/popover-select/components/MK_CUSTOMER_BYPRINCIPAL.js
  92. 11 0
      src/components/popover-select/components/MK_SALESAREA_PARAM.js
  93. 7 0
      src/components/popover-select/components/MK_TARGET_CYCLE_PARAM.js
  94. 7 0
      src/components/popover-select/components/MK_TARGET_INDEX_PARAM.js
  95. 7 0
      src/components/popover-select/components/MK_TARGET_TEMPLATE_PARAM.js
  96. 4 14
      src/components/popover-select/components/OPERATING_PARAM.js
  97. 9 13
      src/components/popover-select/components/ORG_PARAM.js
  98. 4 8
      src/components/popover-select/components/PAYAGREEMENT_PARAM.js
  99. 5 15
      src/components/popover-select/components/PROCESSTYPE_PARAM.js
  100. 5 15
      src/components/popover-select/components/PROJECT_PARAM.js

+ 0 - 1
.gitignore

@@ -22,4 +22,3 @@ selenium-debug.log
 package-lock.json
 yarn.lock
 vue.config.js
-vue.config.js

+ 8 - 2
package.json

@@ -43,8 +43,10 @@
     "@riophae/vue-treeselect": "0.4.0",
     "axios": "0.24.0",
     "clipboard": "2.0.8",
-    "core-js": "3.25.3",
+    "core-js": "^3.25.3",
     "echarts": "^5.4.0",
+    "el-table-horizontal-scroll": "^1.2.5",
+    "el-table-infinite-scroll": "^2.0.0",
     "element-ui": "2.15.12",
     "file-saver": "2.0.5",
     "fuse.js": "6.4.3",
@@ -57,6 +59,7 @@
     "quill": "1.3.7",
     "screenfull": "5.0.2",
     "sortablejs": "1.10.2",
+    "umy-ui": "^1.1.6",
     "vue": "2.6.12",
     "vue-amap": "^0.5.10",
     "vue-count-to": "1.0.13",
@@ -65,7 +68,9 @@
     "vue-print-nb": "^1.7.5",
     "vue-router": "3.4.9",
     "vuedraggable": "2.24.3",
-    "vuex": "3.6.0"
+    "vuex": "3.6.0",
+    "vxe-table": "^3.6.13",
+    "xe-utils": "^3.5.12"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "4.4.6",
@@ -79,6 +84,7 @@
     "eslint": "7.15.0",
     "eslint-plugin-vue": "7.2.0",
     "lint-staged": "10.5.3",
+    "regenerator-runtime": "^0.14.0",
     "runjs": "4.4.2",
     "sass": "1.32.13",
     "sass-loader": "10.1.1",

+ 29 - 2
src/api/business/purchase/apply.js

@@ -9,9 +9,9 @@ export function LIST(data, params) {
   });
 }
 
-export function ITEM(data) {
+export function ITEM(data, isCopy) {
   return request({
-    url: `/pu/priceApply/${data}`,
+    url: `/pu/priceApply/${data}/${isCopy}`,
     method: "GET",
   });
 }
@@ -38,3 +38,30 @@ export function REMOVE(data) {
     method: "delete",
   });
 }
+
+// 模板下载
+export function mbDownload(data) {
+  return request({
+    url: `/pu/priceApply/download`,
+    method: 'post',
+    data: data,
+    responseType: 'blob'
+  })
+}
+// 导入失败文件下载
+export function failDownload(data) {
+  return request({
+    url: `/pu/priceApply/downloadFailData`,
+    method: 'post',
+    data: data,
+    responseType: 'blob'
+  })
+}
+//收回
+export function oaBack(data) {
+  return request({
+    url: `/oaflow/rollback`,
+    method: "POST",
+    data: data,
+  });
+}

+ 10 - 1
src/api/business/purchase/catalogue.js

@@ -50,8 +50,17 @@ export function EXIST(data) {
 
 export function EXPORT(data) {
   return request({
-    url: "/pu/price/catalogue/export",
+    url: "/pu/price/catalogue/exportByIds",
     method: "POST",
     data: data,
   });
 }
+// 采购需求单导出
+export function exportAll(data) {
+  return request({
+    url: `/pu/price/catalogue/export`,
+    method: 'post',
+    data: data,
+    responseType: 'blob'
+  })
+}

+ 14 - 0
src/api/business/purchase/contract.js

@@ -93,6 +93,20 @@ export function SUBMIT(data) {
   });
 }
 
+export function LINKAGREEMENT(data) {
+  return request({
+    url: `/pu/contract/agreement/getCode/${data}`,
+    method: "GET",
+  });
+}
+
+export const ToOA =(userName, fdId) => {
+  return request({
+    url: `/oaflow/redirectToOa/${userName}/${fdId}`,
+    method: 'get',
+  })
+}
+
 const switchUrl = (prop) => {
   if (prop === "contractItemList") return "/pu/contract/item";
   if (prop === "contractClauseList") return "/pu/contract/clause";

+ 80 - 2
src/api/business/purchase/purchase-order.js

@@ -74,6 +74,16 @@ const getPrice = (data) => {
   });
 }
 
+// 采购订单-计算金额
+const calculateOrderAmount = (data) => {
+  return request({
+    url: `/pu/order/calculateOrderAmount`,
+    method: "post",
+    data,
+  });
+}
+
+
 // 采购订单退回
 const documentsReturn = (data) => {
   return request({
@@ -83,7 +93,7 @@ const documentsReturn = (data) => {
   });
 }
 
-// 采购订单退回
+// 采购订单整单关闭
 const close = (data) => {
   return request({
     url: `/pu/order/close`,
@@ -118,6 +128,67 @@ const REFER = (data, params) => {
     params: params,
   });
 }
+// 获取入库数据
+const putInStorage = (data) =>{
+  return request({
+    url: "/pu/order/putInStorage",
+    method: "POST",
+    data: data,
+  });
+}
+// 获取退货订单
+const returnedGoods = (data) =>{
+  return request({
+    url: "/pu/order/returnedGoods",
+    method: "POST",
+    data: data,
+  });
+}
+
+const toOA =(userName, fdId) => {
+  return request({
+    url: `/oaflow/redirectToOa/${userName}/${fdId}`,
+    method: 'get',
+  })
+}
+
+
+
+// 采购订单修订导出
+const orderExport =(data) => {
+  return request({
+    url: `/pu/order/export`,
+    method: "POST",
+    data: data,
+  })
+}
+
+// 行导入
+const orderImport = (data) =>{
+  return request({
+    url: "/pu/order/import",
+    method: "POST",
+    data: data,
+  });
+}
+// 模板下载
+const downloadFailData = (data) =>{
+  return request({
+    url: "/pu/order/downloadFailData",
+    method: "POST",
+    data: data,
+  });
+}
+
+//收回
+export function oaBack(data) {
+  return request({
+    url: `/oaflow/rollback`,
+    method: "POST",
+    data: data,
+  });
+}
+
 
 export default {
   list,
@@ -128,10 +199,17 @@ export default {
   revision,
   remove,
   getPrice,
+  calculateOrderAmount,
   documentsReturn,
   close,
   toNc,
   payRequest,
   REFER,
-
+  putInStorage,
+  returnedGoods,
+  toOA,
+  orderExport,
+  orderImport,
+  downloadFailData,
+  oaBack
 }

+ 8 - 0
src/api/business/purchase/task.js

@@ -64,3 +64,11 @@ export function EXPORT(data, params) {
     params: params,
   });
 }
+
+export function PRINT(params) {
+  return request({
+    url: "/pu/order/print",
+    method: "GET",
+    params: params,
+  });
+}

+ 9 - 0
src/api/business/spd/bo/iuapquery/basic.js

@@ -16,4 +16,13 @@ export function listSaleArea(query) {
     method: 'get',
     params: query
   })
+}
+
+//根据负责人查询客户列表
+export function byPrincipal(query) {
+  return request({
+    url: '/mk/bo/iuapquery/customer/byPrincipal',
+    method: 'get',
+    params: query
+  })
 }

+ 8 - 0
src/api/business/spd/bo/task.js

@@ -42,3 +42,11 @@ export function delTask(taskId) {
     method: 'delete'
   })
 }
+
+//提交任务
+export function submit(id) {
+  return request({
+    url: '/mk/bo/task/submit/' + id,
+    method: 'post'
+  })
+}

+ 52 - 0
src/api/business/spd/fillin/dailysale_quantity_assess.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询日预估销售产品数据填充列表
+export function listAssess(query) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询日预估销售产品数据填充详细
+export function getAssess(id) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess/' + id,
+    method: 'get'
+  })
+}
+
+// 新增日预估销售产品数据填充
+export function addAssess(data) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改日预估销售产品数据填充
+export function updateAssess(data) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除日预估销售产品数据填充
+export function delAssess(id) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess/' + id,
+    method: 'delete'
+  })
+}
+
+export function getSaleMaterialList(query) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssess/salematerial/list',
+    method: 'get',
+    params: query
+  })
+}

+ 35 - 0
src/api/business/spd/fillin/dailysale_quantity_assess_item.js

@@ -0,0 +1,35 @@
+import request from '@/utils/request'
+
+// 查询明细
+export function listItem(query) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssessItem/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 批量修改明细
+export function saveItems(data) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssessItem',
+    method: 'put',
+    data: data
+  })
+}
+
+//删除明细
+export function delItems(id) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssessItem/' + id,
+    method: 'delete'
+  })
+}
+
+//全选销售物料
+export function selectAllSaleMat(id) {
+  return request({
+    url: '/mk/fillin/dailySaleQuantityAssessItem/selectAll/' + id,
+    method: 'post',
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/annualSaleGoal.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询年度销售目标列表
+export function listAnnualSaleGoal(query) {
+  return request({
+    url: '/goal_management/annualSaleGoal/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询年度销售目标详细
+export function getAnnualSaleGoal(id) {
+  return request({
+    url: '/goal_management/annualSaleGoal/' + id,
+    method: 'get'
+  })
+}
+
+// 新增年度销售目标
+export function addAnnualSaleGoal(data) {
+  return request({
+    url: '/goal_management/annualSaleGoal',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改年度销售目标
+export function updateAnnualSaleGoal(data) {
+  return request({
+    url: '/goal_management/annualSaleGoal',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除年度销售目标
+export function delAnnualSaleGoal(id) {
+  return request({
+    url: '/goal_management/annualSaleGoal/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/annualSaleGoalDetails.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询年度销售目标明细列表
+export function listAnnualSaleGoalDetails(query) {
+  return request({
+    url: '/goal_management/annualSaleGoalDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询年度销售目标明细详细
+export function getAnnualSaleGoalDetails(id) {
+  return request({
+    url: '/goal_management/annualSaleGoalDetails/parent/' + id,
+    method: 'get'
+  })
+}
+
+// 新增年度销售目标明细
+export function addAnnualSaleGoalDetails(data) {
+  return request({
+    url: '/goal_management/annualSaleGoalDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改年度销售目标明细
+export function updateAnnualSaleGoalDetails(data) {
+  return request({
+    url: '/goal_management/annualSaleGoalDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除年度销售目标明细
+export function delAnnualSaleGoalDetails(id) {
+  return request({
+    url: '/goal_management/annualSaleGoalDetails/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/annualSaleGoalMerge.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询年销售目标合并列表
+export function listAnnualSaleGoalMerge(query) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询年销售目标合并详细
+export function getAnnualSaleGoalMerge(id) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge/' + id,
+    method: 'get'
+  })
+}
+
+// 新增年销售目标合并
+export function addAnnualSaleGoalMerge(data) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改年销售目标合并
+export function updateAnnualSaleGoalMerge(data) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除年销售目标合并
+export function delAnnualSaleGoalMerge(id) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge/' + id,
+    method: 'delete'
+  })
+}

+ 26 - 0
src/api/business/spd/goal_management/annualSaleMergeDetails.js

@@ -0,0 +1,26 @@
+import request from '@/utils/request'
+
+// 查询年销售目标合并明细详细
+export function getAnnualSaleMergeDetails(parentId) {
+  return request({
+    url: '/goal_management/annualSaleMergeDetails/parent/' + parentId,
+    method: 'get'
+  })
+}
+
+// 删除年销售目标合并明细
+export function delAnnualSaleMergeDetails(id) {
+  return request({
+    url: '/goal_management/annualSaleMergeDetails/' + id,
+    method: 'delete'
+  })
+}
+
+// 年销售目标合并明细
+export function mergeAnnualSaleMergeDetails(data) {
+  return request({
+    url: '/goal_management/annualSaleGoalMerge/merge',
+    method: 'post',
+    data: data
+  })
+}

+ 57 - 0
src/api/business/spd/goal_management/commonWays.js

@@ -0,0 +1,57 @@
+// 此文件为算法实验文件,用来验证算法的正确性与稳定性
+
+// 合并数组
+function mergeArray() {
+  // 原始数组
+  const arr = [
+    { saleOrg: 'org1', saleZone: 'zone1', custom: 'custom1', creator: 'creator1', totalGoal: 100 },
+    { saleOrg: 'org1', saleZone: 'zone1', custom: 'custom2', creator: 'creator1', totalGoal: 200 },
+    { saleOrg: 'org2', saleZone: 'zone2', custom: 'custom3', creator: 'creator3', totalGoal: 300 },
+    { saleOrg: 'org2', saleZone: 'zone2', custom: 'custom4', creator: 'creator3', totalGoal: 400 },
+    { saleOrg: 'org3', saleZone: 'zone3', custom: 'custom5', creator: 'creator5', totalGoal: 500 }
+  ];
+// 根据saleOrg、saleZone和creator属性进行合并并相加totalGoal的函数
+  const mergeAndSumTotalGoal = (array) => {
+    return Array.from(array.reduce((map, obj) => {
+      const key = `${obj.saleOrg}-${obj.saleZone}-${obj.creator}`;
+      if (map.has(key)) {
+        const existingObj = map.get(key);
+        existingObj.totalGoal += obj.totalGoal;
+      } else {
+        map.set(key, { ...obj });
+      }
+      return map;
+    }, new Map()).values());
+  };
+// 调用合并函数
+  const mergedArray = mergeAndSumTotalGoal(arr);
+  console.log(mergedArray);
+}
+
+// 计算子表小计
+export function getSummary(param) {
+  const { columns, data } = param;
+  const sums = [];
+  columns.forEach((column, index) => {
+    if (index === 0) {
+      sums[index] = '小计';
+      return;
+    }
+    const values = data.map(item => Number(item[column.property]));
+    if (!values.every(value => isNaN(value))) {
+      sums[index] = values.reduce((prev, curr) => {
+        const value = Number(curr);
+        if (!isNaN(value)) {
+          return ((prev * 10000000 + curr * 10000000) / 10000000).toFixed(2);
+        } else {
+          return prev;
+        }
+      }, 0);
+      sums[index] += '';
+    } else {
+      sums[index] = '*';
+    }
+  });
+
+  return sums;
+}

+ 44 - 0
src/api/business/spd/goal_management/monthGoalMerge.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月销售目标合并列表
+export function listMonthGoalMerge(query) {
+  return request({
+    url: '/goal_management/monthGoalMerge/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月销售目标合并详细
+export function getMonthGoalMerge(id) {
+  return request({
+    url: '/goal_management/monthGoalMerge/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月销售目标合并
+export function addMonthGoalMerge(data) {
+  return request({
+    url: '/goal_management/monthGoalMerge',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月销售目标合并
+export function updateMonthGoalMerge(data) {
+  return request({
+    url: '/goal_management/monthGoalMerge',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月销售目标合并
+export function delMonthGoalMerge(id) {
+  return request({
+    url: '/goal_management/monthGoalMerge/' + id,
+    method: 'delete'
+  })
+}

+ 53 - 0
src/api/business/spd/goal_management/monthGoalMergeDetails.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询月销售目标合并明细列表
+export function listMonthGoalMergeDetails(query) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月销售目标合并明细详细
+export function getMonthGoalMergeDetails(id) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails/parent/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月销售目标合并明细
+export function addMonthGoalMergeDetails(data) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月销售目标合并明细
+export function updateMonthGoalMergeDetails(data) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月销售目标合并明细
+export function delMonthGoalMergeDetails(id) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails/' + id,
+    method: 'delete'
+  })
+}
+
+// 合并月销售目标明细
+export function mergeMonthSaleMergeDetails(data) {
+  return request({
+    url: '/goal_management/monthGoalMergeDetails/merge',
+    method: 'post',
+    data: data
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/monthReturnGoal.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月回款目标填报列表
+export function listMonthReturnGoal(query) {
+  return request({
+    url: '/mk/monthReturnGoal/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月回款目标填报详细
+export function getMonthReturnGoal(id) {
+  return request({
+    url: '/mk/monthReturnGoal/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月回款目标填报
+export function addMonthReturnGoal(data) {
+  return request({
+    url: '/mk/monthReturnGoal',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月回款目标填报
+export function updateMonthReturnGoal(data) {
+  return request({
+    url: '/mk/monthReturnGoal',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月回款目标填报
+export function delMonthReturnGoal(id) {
+  return request({
+    url: '/mk/monthReturnGoal/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/monthReturnGoalDetails.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月回款目标填报明细列表
+export function listMonthReturnGoalDetails(query) {
+  return request({
+    url: '/mk/monthReturnGoalDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月回款目标填报明细详细
+export function getMonthReturnGoalDetails(id) {
+  return request({
+    url: '/mk/monthReturnGoalDetails/parent/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月回款目标填报明细
+export function addMonthReturnGoalDetails(data) {
+  return request({
+    url: '/mk/monthReturnGoalDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月回款目标填报明细
+export function updateMonthReturnGoalDetails(data) {
+  return request({
+    url: '/mk/monthReturnGoalDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月回款目标填报并明细
+export function delMonthReturnGoalDetails(id) {
+  return request({
+    url: '/mk/monthReturnGoalDetails/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/monthReturnMerge.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月回款目标填报列表
+export function listMonthReturnMerge(query) {
+  return request({
+    url: '/mk/monthReturnMerge/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月回款目标填报详细
+export function getMonthReturnMerge(id) {
+  return request({
+    url: '/mk/monthReturnMerge/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月回款目标填报
+export function addMonthReturnMerge(data) {
+  return request({
+    url: '/mk/monthReturnMerge',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月回款目标填报
+export function updateMonthReturnMerge(data) {
+  return request({
+    url: '/mk/monthReturnMerge',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月回款目标填报
+export function delMonthReturnMerge(id) {
+  return request({
+    url: '/mk/monthReturnMerge/' + id,
+    method: 'delete'
+  })
+}

+ 53 - 0
src/api/business/spd/goal_management/monthReturnMergeDetails.js

@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+// 查询月回款目标填报明细列表
+export function listMonthReturnMergeDetails(query) {
+  return request({
+    url: '/mk/monthReturnMergeDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月回款目标填报明细详细
+export function getMonthReturnMergeDetails(id) {
+  return request({
+    url: '/mk/monthReturnMergeDetails/parent/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月回款目标填报明细
+export function addMonthReturnMergeDetails(data) {
+  return request({
+    url: '/mk/monthReturnMergeDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月回款目标填报明细
+export function updateMonthReturnMergeDetails(data) {
+  return request({
+    url: '/mk/monthReturnMergeDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月回款目标填报并明细
+export function delMonthReturnMergeDetails(id) {
+  return request({
+    url: '/mk/monthReturnMergeDetails/' + id,
+    method: 'delete'
+  })
+}
+
+// 合并月销售目标明细
+export function mergeMonthReturnMergeDetails(data) {
+  return request({
+    url: '/mk/monthReturnMergeDetails/merge',
+    method: 'post',
+    data: data
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/monthSaleGoal.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月销售目标填报列表
+export function listMonthSaleGoal(query) {
+  return request({
+    url: '/goal_management/monthSaleGoal/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月销售目标填报详细
+export function getMonthSaleGoal(id) {
+  return request({
+    url: '/goal_management/monthSaleGoal/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月销售目标填报
+export function addMonthSaleGoal(data) {
+  return request({
+    url: '/goal_management/monthSaleGoal',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月销售目标填报
+export function updateMonthSaleGoal(data) {
+  return request({
+    url: '/goal_management/monthSaleGoal',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月销售目标填报
+export function delMonthSaleGoal(id) {
+  return request({
+    url: '/goal_management/monthSaleGoal/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
src/api/business/spd/goal_management/monthSaleGoalDetails.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询月销售目标明细列表
+export function listMonthSaleGoalDetails(query) {
+  return request({
+    url: '/goal_management/monthSaleGoalDetails/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询月销售目标明细详细
+export function getMonthSaleGoalDetails(id) {
+  return request({
+    url: '/goal_management/monthSaleGoalDetails/parent/' + id,
+    method: 'get'
+  })
+}
+
+// 新增月销售目标明细
+export function addMonthSaleGoalDetails(data) {
+  return request({
+    url: '/goal_management/monthSaleGoalDetails',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改月销售目标明细
+export function updateMonthSaleGoalDetails(data) {
+  return request({
+    url: '/goal_management/monthSaleGoalDetails',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除月销售目标明细
+export function delMonthSaleGoalDetails(id) {
+  return request({
+    url: '/goal_management/monthSaleGoalDetails/' + id,
+    method: 'delete'
+  })
+}

+ 52 - 0
src/api/business/spd/starget/target.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询营销目标列表
+export function listTarget(query) {
+  return request({
+    url: '/mk/target/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询营销目标详细
+export function getTarget(id) {
+  return request({
+    url: '/mk/target/' + id,
+    method: 'get'
+  })
+}
+
+// 查询营销目标明细
+export function getTargetItem(id) {
+  return request({
+    url: '/mk/target/item/' + id,
+    method: 'get'
+  })
+}
+
+// 新增营销目标
+export function addTarget(data) {
+  return request({
+    url: '/mk/target',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改营销目标
+export function updateTarget(data) {
+  return request({
+    url: '/mk/target',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除营销目标
+export function delTarget(id) {
+  return request({
+    url: '/mk/target/' + id,
+    method: 'delete'
+  })
+}

+ 68 - 0
src/api/business/spd/starget/targetTemplate.js

@@ -0,0 +1,68 @@
+import request from '@/utils/request'
+
+// 查询目标模板列表
+export function listTargetTemplate(query) {
+  return request({
+    url: '/mk/target/targetTemplate/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询目标模板详细
+export function getTargetTemplate(id) {
+  return request({
+    url: '/mk/target/targetTemplate/' + id,
+    method: 'get'
+  })
+}
+
+// 新增目标模板
+export function addTargetTemplate(data) {
+  return request({
+    url: '/mk/target/targetTemplate',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改目标模板
+export function updateTargetTemplate(data) {
+  return request({
+    url: '/mk/target/targetTemplate',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除目标模板
+export function delTargetTemplate(id) {
+  return request({
+    url: '/mk/target/targetTemplate/' + id,
+    method: 'delete'
+  })
+}
+
+// 获取动态表头数据
+export function getHeaderData(id) {
+  return request({
+    url: '/mk/target/targetTemplate/getHeaderData/' + id,
+    method: 'get'
+  })
+}
+
+//校验目标模板是否被引用
+export function checkQuote(id) {
+  return request({
+    url: '/mk/target/targetTemplate/checkQuote/' + id,
+    method: 'get'
+  })
+}
+
+//校验目标模板是否被引用
+export function download(id) {
+  return request({
+    url: '/mk/target/targetTemplate/download/' + id,
+    method: 'get'
+  })
+}

+ 71 - 0
src/api/business/spd/task_management/visitingPlan/visitingPlan.js

@@ -0,0 +1,71 @@
+import request from '@/utils/request'
+
+//拜访计划列表
+export function getPlanList(data) {
+    return request({
+        url: '/mk/bo/plan/list',
+        method: 'get',
+        params: data
+    })
+}
+//拜访计划新增
+export function addPlan(data) {
+    return request({
+        url: '/mk/bo/plan/',
+        method: 'post',
+        data: data
+    })
+}
+//拜访计划编辑
+export function editPlan(data) {
+    return request({
+        url: '/mk/bo/plan/edit',
+        method: 'put',
+        data: data
+    })
+}
+//拜访计划提交
+export function submitPlan(data) {
+    return request({
+      url: `/mk/bo/plan/submit`,
+      method: 'post',
+      data: data
+    })
+}
+//拜访计划基本信息详情
+export function getPlanDetail(id) {
+    return request({
+      url: '/mk/bo/plan/' + id,
+      method: 'get',
+    })
+}
+//拜访计划基本子表详情
+export function getPlanSonDetail(planId) {
+    return request({
+      url: `/mk/bo/item/` + planId,
+      method: 'get',
+    })
+}
+//拜访计划删除
+export function delPlan(id) {
+    return request({
+        url: '/mk/bo/plan/' + id,
+        method: 'delete'
+    })
+}
+//拜访计划明细删除
+export function delPlanItem(id) {
+    return request({
+        url: '/mk/bo/item/' + id,
+        method: 'delete'
+    })
+}
+//拜访计划导出
+export function exportPlan(data) {
+    return request({
+      url: `/mk/bo/plan/export`,
+      method: 'post',
+      data: data,
+      responseType: 'blob'
+    })
+}

+ 61 - 0
src/api/changeApply/basic.js

@@ -62,3 +62,64 @@ export function getProductFactory(data) {
     data: data
   })
 }
+// 获取生产厂家列表信息
+export function getRecordList(params) {
+  return request({
+    url: `/material/record/list`,
+    method: 'get',
+    params: params
+  })
+}
+
+// 模板下载
+export function changeDownload(data) {
+  return request({
+    url: `/material/change/download`,
+    method: 'post',
+    data: data
+  })
+}
+
+// 导入
+export function changeImport(data) {
+  return request({
+    url: `/material/change/import`,
+    method: 'post',
+    data: data
+  })
+}
+
+// 下载失败导入文件数据
+export function downloadFailData(data) {
+  return request({
+    url: `/material/change/downloadFailData`,
+    method: 'post',
+    data: data,
+    responseType: 'blob',
+  })
+}
+
+export function toOA(userName, fdId) {
+  return request({
+    url: `/oaflow/redirectToOa/${userName}/${fdId}`,
+    method: 'get',
+  })
+}
+
+
+// 行模板下载
+export function downloadInner(data) {
+  return request({
+    url: `/material/change/downloadInner`,
+    method: 'post',
+    data: data
+  })
+}
+// 行模板下载
+export function importInner(data) {
+  return request({
+    url: `/material/change/importInner`,
+    method: 'post',
+    data: data
+  })
+}

+ 9 - 0
src/api/classify/basic.js

@@ -40,3 +40,12 @@ export function edit(data) {
     data: data
   })
 }
+// 物料基本分类模板下载
+export function downLoadClassify(data) {
+  return request({
+    url: `/system/classify/download`,
+    method: 'post',
+    data: data,
+    responseType: 'blob'
+  })
+}

+ 25 - 25
src/api/login.js

@@ -1,4 +1,4 @@
-import request from '@/utils/request'
+import request from "@/utils/request";
 
 // 登录方法
 export function login(username, password, code, uuid) {
@@ -6,54 +6,54 @@ export function login(username, password, code, uuid) {
     username,
     password,
     code,
-    uuid
-  }
+    uuid,
+  };
   return request({
-    url: '/login',
+    url: "/login",
     headers: {
-      isToken: false
+      isToken: false,
     },
-    method: 'post',
-    data: data
-  })
+    method: "post",
+    data: data,
+  });
 }
 
 // 注册方法
 export function register(data) {
   return request({
-    url: '/register',
+    url: "/register",
     headers: {
-      isToken: false
+      isToken: false,
     },
-    method: 'post',
-    data: data
-  })
+    method: "post",
+    data: data,
+  });
 }
 
 // 获取用户详细信息
 export function getInfo() {
   return request({
-    url: '/getInfo',
-    method: 'get'
-  })
+    url: "/getInfo",
+    method: "get",
+  });
 }
 
 // 退出方法
 export function logout() {
   return request({
-    url: '/logout',
-    method: 'post'
-  })
+    url: "/logout",
+    method: "post",
+  });
 }
 
 // 获取验证码
 export function getCodeImg() {
   return request({
-    url: '/captchaImage',
+    url: "/captchaImage",
     headers: {
-      isToken: false
+      isToken: false,
     },
-    method: 'get',
-    timeout: 20000
-  })
-}
+    method: "get",
+    timeout: 20000,
+  });
+}

+ 25 - 14
src/api/material/basic.js

@@ -42,7 +42,7 @@ const medcineDetails = (id) => {
   })
 }
 
-// 根据物料id获取医药行业信息详细信息  
+// 根据物料id获取医药行业信息详细信息
 const medcineDetailsInfo = (id) => {
   return request({
     url: `/system/medcine/detailsInfo/${id}`,
@@ -69,7 +69,7 @@ const costList = (data) => {
   })
 }
 
-// 成本信息详情 
+// 成本信息详情
 const costDetails = (id) => {
   return request({
     url: `/system/cost/details/${id}`,
@@ -144,7 +144,7 @@ const planList = (data) => {
   })
 }
 
-// 查询计划信息详情 
+// 查询计划信息详情
 const planDetails = (id) => {
   return request({
     url: `/system/plan/details/${id}`,
@@ -153,7 +153,7 @@ const planDetails = (id) => {
   })
 }
 
-// 获取利润中心信息列表 
+// 获取利润中心信息列表
 const centerList = (data) => {
   return request({
     url: `/system/center/list`,
@@ -162,7 +162,7 @@ const centerList = (data) => {
   })
 }
 
-// 获取利润中心详细信息 
+// 获取利润中心详细信息
 const centerDetails = (id) => {
   return request({
     url: `/system/center/details/${id}`,
@@ -171,7 +171,7 @@ const centerDetails = (id) => {
   })
 }
 
-// 获取采购信息列表  
+// 获取采购信息列表
 const purchaseList = (data) => {
   return request({
     url: `/system/purchase/list`,
@@ -180,7 +180,7 @@ const purchaseList = (data) => {
   })
 }
 
-// 获取采购详细信息 
+// 获取采购详细信息
 const purchaseDetails = (id) => {
   return request({
     url: `/system/purchase/details/${id}`,
@@ -189,7 +189,7 @@ const purchaseDetails = (id) => {
   })
 }
 
-// 获取库存信息列表  
+// 获取库存信息列表
 const inventoryList = (data) => {
   return request({
     url: `/system/inventory/list`,
@@ -198,7 +198,7 @@ const inventoryList = (data) => {
   })
 }
 
-// 获取库存详细信息 
+// 获取库存详细信息
 const inventoryDetails = (id) => {
   return request({
     url: `/system/inventory/details/${id}`,
@@ -232,7 +232,7 @@ const materialEdit = (data) => {
   })
 }
 
-// 修改医药行业信息 /dev-api/drp-admin/system/medcine/edit   
+// 修改医药行业信息 /dev-api/drp-admin/system/medcine/edit
 const medcineEdit = (data) => {
   return request({
     url: `/system/medcine/edit `,
@@ -278,7 +278,7 @@ const medcineitemBatchSave = (data) => {
   })
 }
 
-// 修改财务信息 /dev-api/drp-admin/system/finance/edit 
+// 修改财务信息 /dev-api/drp-admin/system/finance/edit
 const financeEdit = (data) => {
   return request({
     url: `/system/finance/edit `,
@@ -432,7 +432,15 @@ const saveVersions = (data) => {
     data,
   })
 }
-
+// 物料导出
+export function exportMartial(data) {
+  return request({
+    url: `/system/material/downloadFailData`,
+    method: 'post',
+    data: data,
+    responseType: 'blob'
+  })
+}
 export default {
   // 查询
   materialList,
@@ -485,5 +493,8 @@ export default {
   delPurchase,
   // 维护新版本
   versions,
-  saveVersions
-}
+  saveVersions,
+
+  //导出
+  exportMartial
+}

+ 10 - 0
src/api/monitor/service.js

@@ -0,0 +1,10 @@
+import request from '@/utils/request'
+
+//查询服务列表
+export function listService(query) {
+    return request({
+      url: 'serviceScan/list',
+      method: 'get',
+      params: query
+    })
+  }

+ 8 - 1
src/api/purchase/DemandSummary.js

@@ -23,6 +23,13 @@ export function auditSummary(id) {
     method: 'get',
   })
 }
+// 采购需求汇总审核
+export function cancelAudits(id) {
+  return request({
+    url: `/pu/demand/item/summary/cancel/audit/${id}`,
+    method: 'get',
+  })
+}
 // 采购需求汇总确认
 export function confirmSummary(data) {
   return request({
@@ -88,7 +95,7 @@ export function exportList(data) {
 // 采购需求汇总明细导出
 export function exportItems(data) {
   return request({
-    url: `/pu/demand/item/exports`,
+    url: `/pu/demand/item/exports?pageSize=${data.pageSize}&pageNum=${data.pageNum}`,
     method: 'post',
     data: data,
     responseType: 'blob'

+ 16 - 0
src/api/purchase/deliveryAddress.js

@@ -37,4 +37,20 @@ export function delAddress(ids) {
     url: `/pu/delivery/address/delete/${ids}`,
     method: 'DELETE',
   })
+}
+// 收货地址档案同步NC
+export function toNc(data) {
+  return request({
+    url: `/pu/delivery/address/toNc`,
+    method: 'post',
+    data: data
+  })
+}
+// 收货地址档案启用停用
+export function enable(data) {
+  return request({
+    url: `/pu/delivery/address/enable`,
+    method: 'post',
+    data: data
+  })
 }

+ 27 - 0
src/api/purchase/ownership.js

@@ -0,0 +1,27 @@
+import request from '@/utils/request'
+
+// 列表
+export function materialList(query) {
+  return request({
+    url: '/pu/ownership/item/materialList',
+    method: 'get',
+    params: query
+  })
+}
+
+// 详细
+export function getDetail(id) {
+  return request({
+    url: '/pu/ownership/item/' + id,
+    method: 'get'
+  })
+}
+
+// 修改
+export function update(data) {
+  return request({
+    url: '/pu/ownership/item/',
+    method: 'put',
+    data: data
+  })
+}

+ 15 - 0
src/api/purchase/purchaseDemand.js

@@ -78,4 +78,19 @@ export function queryMan(id) {
     url: `/material/division/queryBuyer?materialId=${id}`,
     method: 'get',
   })
+}
+// 跳转OA
+export function toOA(userName, fdId) {
+  return request({
+    url: `/oaflow/redirectToOa/${userName}/${fdId}`,
+    method: 'get',
+  })
+}
+// 确认提交?
+export function confirmSubmit(data) {
+  return request({
+    url: `/pu/demand/confirm/submit`,
+    method: 'POST',
+    data: data
+  })
 }

+ 29 - 1
src/api/purchase/transferOrder.js

@@ -33,7 +33,6 @@ export function submitOrder(data) {
   })
 }
 // 调拨订单详情
-// 调拨订单详情
 export function getOrderDetail(id) {
   return request({
     url: `/pu/allot/detail/${id}`,
@@ -61,4 +60,33 @@ export function getResevedDetail(id) {
     url: `/pu/ownership/detail/${id}`,
     method: 'get',
   })
+}
+
+// 查询调拨物料明细列表
+export function listStAllotItem(pid) {
+  return request({
+    url: `/pu/allot/material/byPid/${pid}`,
+    method: 'get',
+  })
+}
+
+//导入
+export function importData(data) {
+  return request({
+    url: `/pu/allot/importData`,
+    method: 'post',
+    data: data,
+    headers: {
+      'Content-Type': 'multipart/form-data'
+    }
+  })
+}
+
+//收回
+export function oaBack(data) {
+  return request({
+    url: `/oaflow/rollback`,
+    method: "POST",
+    data: data,
+  });
 }

+ 34 - 0
src/api/purchase/workSpace.js

@@ -0,0 +1,34 @@
+import request from '@/utils/request'
+
+// 工作台列表
+export function getWorkSpaceList(data) {
+  return request({
+    url: `oaflow/list?pageSize=${data.pageSize}&pageNum=${data.pageNum}`,
+    method: 'post',
+    data: data
+  })
+}
+// 工作台审批
+export function auditWork(data) {
+  return request({
+    url: `oaflow/approve`,
+    method: 'post',
+    data: data
+  })
+}
+// 统一所有页面的收回流程接口
+export function rebacktWork(data) {
+  return request({
+    url: `oaflow/rollback`,
+    method: 'post',
+    data: data
+  })
+}
+// 单据概述
+export function getWorkDetailList(data) {
+  return request({
+    url: `oaflow/detail?pageSize=${data.pageSize}&pageNum=${data.pageNum}`,
+    method: 'post',
+    data: data
+  })
+}

+ 57 - 1
src/api/requisition/basic.js

@@ -8,14 +8,16 @@ export function getReqList(params) {
     params: params
   })
 }
+
 // 物料申请单-新增
 export function addReq(data) {
   return request({
     url: `/system/apply/material`,
     method: 'post',
-    data: data
+    data: data,
   })
 }
+
 // 获取物料申请单详情
 export function getReqDetail(id) {
   return request({
@@ -23,6 +25,7 @@ export function getReqDetail(id) {
     method: 'get',
   })
 }
+
 // 物料申请单-修改提交
 export function editReq(data) {
   return request({
@@ -31,6 +34,16 @@ export function editReq(data) {
     data: data
   })
 }
+
+// 物料申请单-修改提交
+export function betchSubmit(data) {
+  return request({
+    url: `/system/apply/material/submit/${data}`,
+    method: 'post',
+    // data: data
+  })
+}
+
 // 物料申请单-删除
 export function delReq(id) {
   return request({
@@ -47,6 +60,7 @@ export function getUnit(data) {
     data: data
   })
 }
+
 // 参照-产地
 export function getPlace(data) {
   return request({
@@ -55,6 +69,7 @@ export function getPlace(data) {
     data: data
   })
 }
+
 // 参照-税类
 export function getTax(data) {
   return request({
@@ -63,6 +78,7 @@ export function getTax(data) {
     data: data
   })
 }
+
 // 参照-采购员
 export function getStaff(data) {
   return request({
@@ -71,6 +87,7 @@ export function getStaff(data) {
     data: data
   })
 }
+
 // 参照-业务线
 export function getLine(data) {
   return request({
@@ -79,6 +96,7 @@ export function getLine(data) {
     data: data
   })
 }
+
 // 参照-剂型-树形
 export function getDose(data) {
   return request({
@@ -87,6 +105,7 @@ export function getDose(data) {
     data: data
   })
 }
+
 // 参照-采购组织-树形
 // 查询部门下拉树结构
 export function getOrgs(data) {
@@ -96,6 +115,7 @@ export function getOrgs(data) {
     params: data
   })
 }
+
 // 参照-药品类别(子表)-树形
 export function getDrug(data) {
   return request({
@@ -104,6 +124,7 @@ export function getDrug(data) {
     data: data
   })
 }
+
 // 参照-中包装单位
 export function getMidPack(data) {
   return request({
@@ -111,4 +132,39 @@ export function getMidPack(data) {
     method: 'post',
     data: data
   })
+}
+
+// 导入
+export function importData(data) {
+  return request({
+    url: `/system/apply/material/import`,
+    method: 'post',
+    data: data
+  })
+}
+
+// 下载失败导入文件数据
+export function fileImport(data) {
+  return request({
+    url: `/system/apply/material/downloadFailData`,
+    method: 'post',
+    data: data,
+    responseType: 'blob',
+  })
+}
+
+export function toOA(userName, fdId) {
+  return request({
+    url: `/oaflow/redirectToOa/${userName}/${fdId}`,
+    method: 'get',
+  })
+}
+
+//收回
+export function oaBack(data) {
+  return request({
+    url: `/oaflow/rollback`,
+    method: "POST",
+    data: data,
+  });
 }

+ 9 - 0
src/api/system/role.js

@@ -117,3 +117,12 @@ export function deptTreeSelect(roleId) {
     method: 'get'
   })
 }
+
+// 角色列表
+export function listOptionselect(query) {
+  return request({
+    url: '/system/role/optionselect',
+    method: 'get',
+    params: query
+  })
+}

+ 17 - 2
src/assets/styles/element-ui.scss

@@ -69,7 +69,7 @@
 // dropdown
 .el-dropdown-menu {
   a {
-    display: block
+    display: block;
   }
 }
 
@@ -89,4 +89,19 @@
   > .el-submenu__title
   .el-submenu__icon-arrow {
   display: none;
-}
+}
+
+.el-autocomplete-suggestion .el-autocomplete-suggestion__wrap {
+  padding: 10px 0 0 0;
+}
+
+.el-super-table {
+  width: 100%;
+}
+.el-super-table .el-table__cell {
+  height: 50px;
+}
+
+.el-super-table td.el-table__cell {
+  border-right: 0;
+}

+ 10 - 0
src/assets/styles/font.scss

@@ -0,0 +1,10 @@
+.fe-1 {
+  white-space: nowrap;
+  overflow: hidden;
+  text-overflow: ellipsis;
+}
+@for $i from 3 through 10 {
+  .fs-#{$i} {
+    font-size: 4px * $i;
+  }
+}

+ 33 - 20
src/assets/styles/index.scss

@@ -1,16 +1,20 @@
-@import './variables.scss';
-@import './mixin.scss';
-@import './transition.scss';
-@import './element-ui.scss';
-@import './sidebar.scss';
-@import './btn.scss';
+@import "./variables.scss";
+@import "./mixin.scss";
+@import "./transition.scss";
+@import "./element-ui.scss";
+@import "./sidebar.scss";
+@import "./btn.scss";
+@import "./margin.scss";
+@import "./padding.scss";
+@import "./font.scss";
 
 body {
   height: 100%;
   -moz-osx-font-smoothing: grayscale;
   -webkit-font-smoothing: antialiased;
   text-rendering: optimizeLegibility;
-  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+  font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB,
+    Microsoft YaHei, Arial, sans-serif;
 }
 
 label {
@@ -64,7 +68,6 @@ div:focus {
 .fl {
   float: left;
 }
-
 .pr-5 {
   padding-right: 5px;
 }
@@ -104,7 +107,8 @@ aside {
   display: block;
   line-height: 32px;
   font-size: 16px;
-  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen,
+    Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;
   color: #2c3e50;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
@@ -134,7 +138,7 @@ aside {
 }
 
 .text-center {
-  text-align: center
+  text-align: center;
 }
 
 .sub-navbar {
@@ -145,7 +149,13 @@ aside {
   text-align: right;
   padding-right: 20px;
   transition: 600ms ease position;
-  background: linear-gradient(90deg, rgba(32, 182, 249, 1) 0%, rgba(32, 182, 249, 1) 0%, rgba(33, 120, 241, 1) 100%, rgba(33, 120, 241, 1) 100%);
+  background: linear-gradient(
+    90deg,
+    rgba(32, 182, 249, 1) 0%,
+    rgba(32, 182, 249, 1) 0%,
+    rgba(33, 120, 241, 1) 100%,
+    rgba(33, 120, 241, 1) 100%
+  );
 
   .subtitle {
     font-size: 20px;
@@ -190,22 +200,25 @@ aside {
   z-index: 1000 !important;
 }
 
-
 /**修改全局的滚动条*/
 /**滚动条的宽度*/
 ::-webkit-scrollbar {
-	width: 8px;
+  width: 12px;
 }
 ::-webkit-scrollbar-thumb {
-	background-color: #eaecf1;
-	border-radius: 3px;
+  background-color: #eaecf1;
+  border-radius: 3px;
 }
 /*表格*/
 .el-table__body-wrapper::-webkit-scrollbar {
-	width: 10px;
-	height: 10px;
+  width: 12px;
+  height: 12px;
 }
 .el-table__body-wrapper::-webkit-scrollbar-thumb {
-	background-color: #a1a3a9;
-	border-radius: 3px;
-}
+  background-color: #a1a3a9;
+  border-radius: 3px;
+}
+.el-input__suffix {
+  display: flex;
+  align-items: center;
+}

+ 23 - 0
src/assets/styles/margin.scss

@@ -0,0 +1,23 @@
+@for $i from 0 through 10 {
+  .m-#{$i} {
+    margin: 4px * $i;
+  }
+  .mx-#{$i} {
+    margin: 0 4px * $i;
+  }
+  .my-#{$i} {
+    margin: 4px * $i 0;
+  }
+  .mt-#{$i} {
+    margin-top: 4px * $i;
+  }
+  .mr-#{$i} {
+    margin-right: 4px * $i;
+  }
+  .mb-#{$i} {
+    margin-bottom: 4px * $i;
+  }
+  .ml-#{$i} {
+    margin-left: 4px * $i;
+  }
+}

+ 23 - 0
src/assets/styles/padding.scss

@@ -0,0 +1,23 @@
+@for $i from 0 through 8 {
+  .p-#{$i} {
+    padding: 4px * $i;
+  }
+  .px-#{$i} {
+    padding: 0 4px * $i;
+  }
+  .py-#{$i} {
+    padding: 4px * $i 0;
+  }
+  .pt-#{$i} {
+    padding-top: 4px * $i;
+  }
+  .pr-#{$i} {
+    padding-right: 4px * $i;
+  }
+  .pb-#{$i} {
+    padding-bottom: 4px * $i;
+  }
+  .pl-#{$i} {
+    padding-left: 4px * $i;
+  }
+}

+ 4 - 1
src/assets/styles/sidebar.scss

@@ -4,6 +4,7 @@
     min-height: 100%;
     transition: margin-left .28s;
     margin-left: $base-sidebar-width;
+    // margin-left: 0;
     position: relative;
   }
 
@@ -51,7 +52,7 @@
     }
 
     .is-horizontal {
-      display: none;
+
     }
 
     a {
@@ -109,11 +110,13 @@
 
   .hideSidebar {
     .sidebar-container {
+      // display: none;
       width: 54px !important;
     }
 
     .main-container {
       margin-left: 54px;
+      // margin-left: 0;
     }
 
     .submenu-title-noDropdown {

+ 196 - 0
src/components/BatchImport/index.vue

@@ -0,0 +1,196 @@
+
+
+<script>
+export default {
+  name:'BatchImport',
+  props:{
+    disabled:{
+      type:Boolean,
+      default:false,
+    },
+    limit:{
+      type:Number,
+      default:1,
+    },
+    fileType:{
+      type:Array,
+      default:()=>['xls', 'xlsx'],
+    },
+    size:{
+      type:String,
+      default:'mini',
+    },
+    isShowTip:{
+      type:Boolean,
+      default:true,
+    },
+    isTemplate:{
+      type:Boolean,
+      default:true,
+    },
+    fileSize: {
+      type: Number,
+      default: 100,
+    },
+  },
+  computed:{
+     // 是否显示提示
+     showTip() {
+      return this.isShowTip && (this.fileType || this.fileSize);
+    },
+    accept(){
+      return this.fileType.map(item =>(`.${item}`)).join(',');
+    }
+  },
+  data(){
+    return {
+      title:'批量导入',
+      visible:false,
+      loading:false,
+      fileList:[],
+      number: 0,
+
+    }
+  },
+  methods:{
+    // 确认上传
+    async submitUpload(){
+      if(this.fileList.length){
+        this.$emit('import',this.fileList);
+      }else{
+      this.$notify.warning({
+        title:'警告',
+        message: '请上传文件之后在确认!',
+      });
+
+      }
+      
+    },
+    // 模板下载
+    async templateDownload(){
+      this.$emit('temDownload')
+      // 放父组件
+      // this.download('/system/material/download', {}, `物料基本信息模板.xlsx`);
+    },
+    // 
+    beforeClose(done){
+      this.fileList = [];
+      // 关闭前清空
+      done();
+    },
+    // 预览
+    handlePreview(){},
+    // 移除
+    handleRemove(file, fileList){
+      this.fileList = fileList;
+    },
+    // 文件改变
+    onChange(file, fileList){
+      this.fileList = fileList;
+    },
+    setVisible(prop){
+      this.visible = prop;
+      if(!prop){
+        this.fileList = [];
+      }
+    },
+    open(){
+      this.setVisible(true);
+    },
+    // 取消
+    cancal(){
+      this.setVisible(false);
+    },
+     // 上传前校检格式和大小
+     handleBeforeUpload(file) {
+      // 校检文件类型
+      if (this.fileType) {
+        const fileName = file.name.split(".");
+        const fileExt = fileName[fileName.length - 1];
+        const isTypeOk = this.fileType.indexOf(fileExt) >= 0;
+        if (!isTypeOk) {
+          this.$modal.msgError(
+            `文件格式不正确, 请上传${this.fileType.join("/")}格式文件!`
+          );
+          return false;
+        }
+      }
+      // 校检文件大小
+      if (this.fileSize) {
+        const isLt = file.size / 1024 / 1024 < this.fileSize;
+        if (!isLt) {
+          this.$modal.msgError(`上传文件大小不能超过 ${this.fileSize} MB!`);
+          return false;
+        }
+      }
+      this.$modal.loading("正在上传文件,请稍候...");
+      this.number++;
+      return true;
+    },
+    
+  },
+  created(){},
+}
+</script>
+
+<template>
+  <el-button 
+    :disabled="disabled"
+    :size="size"
+    @click="open"
+    type="primary"
+  >
+    {{ title }}
+    <el-dialog 
+      :title="title" 
+      :visible.sync="visible"
+      v-loading="loading"
+      width="35%" 
+      center
+      :before-close="beforeClose"
+      append-to-body
+    >
+      <el-upload
+        ref="upload"
+        action="#"
+        :on-preview="handlePreview"
+        :accept="accept"
+        :before-upload="handleBeforeUpload"
+        :on-remove="handleRemove"
+        :file-list="fileList"
+        :auto-upload="false"
+        :on-change="onChange" 
+        :limit="limit"
+        :disabled="disabled"
+        style="text-align: center;"
+      >
+        <el-button 
+          slot="trigger" 
+          :size="size" 
+          type="primary"
+        >选取文件</el-button>
+        <el-button
+          v-if="isTemplate"
+          style="margin-left: 10px;" 
+          :size="size" 
+          type="success" 
+          @click="templateDownload"
+        >下载模板</el-button>
+        <div slot="tip" class="el-upload__tip" v-if="isShowTip">
+          请上传
+          <template v-if="fileSize">
+            大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+          </template>
+          <template v-if="fileType">
+            格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+          </template>
+        </div>
+      </el-upload>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitUpload" :size="size">确 定</el-button>
+        <el-button @click="cancal" :size="size">取 消</el-button>
+      </div>
+    </el-dialog>
+  </el-button>
+</template>

+ 5 - 3
src/components/DictTag/index.vue

@@ -2,12 +2,14 @@
   <div>
     <template v-for="(item, index) in options">
       <template v-if="values.includes(item.value)">
-        <span
+        <el-tag
           v-if="item.raw.listClass == 'default' || item.raw.listClass == ''"
+          type="primary"
+          :size="size"
           :key="item.value"
           :index="index"
           :class="item.raw.cssClass"
-          >{{ item.label }}</span
+          >{{ item.label }}</el-tag
         >
         <el-tag
           v-else
@@ -33,7 +35,7 @@ export default {
       type: Array,
       default: null,
     },
-    value: [Number, String, Array],
+    value: [Number, String, Array,Boolean],
     size: String,
   },
   computed: {

+ 21 - 8
src/components/FileUpload/index.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="upload-file">
     <el-upload
-      drag
       multiple
       :action="uploadFileUrl"
       :before-upload="handleBeforeUpload"
@@ -14,14 +13,15 @@
       :headers="headers"
       class="upload-file-uploader"
       ref="fileUpload"
+      :disabled="disabled"
     >
       <!-- 上传按钮 -->
-      <!-- <el-button size="mini" type="primary">选取文件</el-button> -->
-      <i class="el-icon-upload"></i>
+      <el-button size="mini" type="primary" :disabled="disabled">选取文件</el-button>
+      <!-- <i class="el-icon-upload"></i>
       <div class="el-upload__text">
         将文件拖到此处,或
         <em>点击上传</em>
-      </div>
+      </div> -->
       <!-- 上传提示 -->
       <div class="el-upload__tip" slot="tip" v-if="showTip">
         请上传
@@ -55,8 +55,12 @@
           <span class="el-icon-document"> {{ file.name }} </span>
         </el-link>
         <div class="ele-upload-list__item-content-action">
-          <el-link :underline="false" @click="handleDelete(index)" type="danger"
-            >删除</el-link
+          <el-link 
+            :underline="false" 
+            @click="handleDelete(index)" 
+            type="danger"
+            :disabled="disabled"
+          >删除</el-link
           >
         </div>
       </li>
@@ -80,18 +84,22 @@ export default {
     // 大小限制(MB)
     fileSize: {
       type: Number,
-      default: 5,
+      default: 100,
     },
     // 文件类型, 例如['png', 'jpg', 'jpeg']
     fileType: {
       type: Array,
-      default: () => ["doc", "xls", "ppt", "txt", "pdf"],
+      default: () => ["doc", "xls", "ppt", "txt", "pdf",'png', 'jpg', 'jpeg','docx','xlsx','pptx'],
     },
     // 是否显示提示
     isShowTip: {
       type: Boolean,
       default: true,
     },
+    disabled:{
+      type:Boolean,
+      default:false,
+    }
   },
   data() {
     return {
@@ -235,6 +243,11 @@ export default {
   },
 };
 </script>
+<style lang="scss">
+.el-form-item.is-error .el-upload-dragger {
+  border: 1px dashed #ff4949;
+}
+</style>
 
 <style scoped lang="scss">
 .upload-file-uploader {

+ 33 - 27
src/components/ImageUpload/index.vue

@@ -15,16 +15,20 @@
       :headers="headers"
       :file-list="fileList"
       :on-preview="handlePictureCardPreview"
-      :class="{hide: this.fileList.length >= this.limit}"
+      :class="{ hide: this.fileList.length >= this.limit }"
     >
       <i class="el-icon-plus"></i>
     </el-upload>
-    
+
     <!-- 上传提示 -->
     <div class="el-upload__tip" slot="tip" v-if="showTip">
       请上传
-      <template v-if="fileSize"> 大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b> </template>
-      <template v-if="fileType"> 格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b> </template>
+      <template v-if="fileSize">
+        大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
+      </template>
+      <template v-if="fileType">
+        格式为 <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
+      </template>
       的文件
     </div>
 
@@ -55,7 +59,7 @@ export default {
     },
     // 大小限制(MB)
     fileSize: {
-       type: Number,
+      type: Number,
       default: 5,
     },
     // 文件类型, 例如['png', 'jpg', 'jpeg']
@@ -66,8 +70,8 @@ export default {
     // 是否显示提示
     isShowTip: {
       type: Boolean,
-      default: true
-    }
+      default: true,
+    },
   },
   data() {
     return {
@@ -81,7 +85,7 @@ export default {
       headers: {
         Authorization: "Bearer " + getToken(),
       },
-      fileList: []
+      fileList: [],
     };
   },
   watch: {
@@ -89,14 +93,14 @@ export default {
       handler(val) {
         if (val) {
           // 首先将值转为数组
-          const list = Array.isArray(val) ? val : this.value.split(',');
+          const list = Array.isArray(val) ? val : this.value.split(",");
           // 然后将数组转为对象数组
-          this.fileList = list.map(item => {
+          this.fileList = list.map((item) => {
             if (typeof item === "string") {
               if (item.indexOf(this.baseUrl) === -1) {
-                  item = { name: this.baseUrl + item, url: this.baseUrl + item };
+                item = { name: this.baseUrl + item, url: this.baseUrl + item };
               } else {
-                  item = { name: item, url: item };
+                item = { name: item, url: item };
               }
             }
             return item;
@@ -107,8 +111,8 @@ export default {
         }
       },
       deep: true,
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   computed: {
     // 是否显示提示
@@ -125,7 +129,7 @@ export default {
         if (file.name.lastIndexOf(".") > -1) {
           fileExtension = file.name.slice(file.name.lastIndexOf(".") + 1);
         }
-        isImg = this.fileType.some(type => {
+        isImg = this.fileType.some((type) => {
           if (file.type.indexOf(type) > -1) return true;
           if (fileExtension && fileExtension.indexOf(type) > -1) return true;
           return false;
@@ -135,7 +139,9 @@ export default {
       }
 
       if (!isImg) {
-        this.$modal.msgError(`文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`);
+        this.$modal.msgError(
+          `文件格式不正确, 请上传${this.fileType.join("/")}图片格式文件!`
+        );
         return false;
       }
       if (this.fileSize) {
@@ -167,8 +173,8 @@ export default {
     },
     // 删除图片
     handleDelete(file) {
-      const findex = this.fileList.map(f => f.name).indexOf(file.name);
-      if(findex > -1) {
+      const findex = this.fileList.map((f) => f.name).indexOf(file.name);
+      if (findex > -1) {
         this.fileList.splice(findex, 1);
         this.$emit("input", this.listToString(this.fileList));
       }
@@ -202,25 +208,25 @@ export default {
           strs += list[i].url.replace(this.baseUrl, "") + separator;
         }
       }
-      return strs != '' ? strs.substr(0, strs.length - 1) : '';
-    }
-  }
+      return strs != "" ? strs.substr(0, strs.length - 1) : "";
+    },
+  },
 };
 </script>
 <style scoped lang="scss">
 // .el-upload--picture-card 控制加号部分
 ::v-deep.hide .el-upload--picture-card {
-    display: none;
+  display: none;
 }
 // 去掉动画效果
 ::v-deep .el-list-enter-active,
 ::v-deep .el-list-leave-active {
-    transition: all 0s;
+  transition: all 0s;
 }
 
-::v-deep .el-list-enter, .el-list-leave-active {
-    opacity: 0;
-    transform: translateY(0);
+::v-deep .el-list-enter,
+.el-list-leave-active {
+  opacity: 0;
+  transform: translateY(0);
 }
 </style>
-

+ 2 - 2
src/components/Pagination/index.vue

@@ -36,13 +36,13 @@ export default {
     pageSizes: {
       type: Array,
       default() {
-        return [1, 10, 20, 30, 50];
+        return [10, 20, 50, 100, 200, 500];
       },
     },
     // 移动端页码按钮的数量端默认值5
     pagerCount: {
       type: Number,
-      default: document.body.clientWidth < 992 ? 5 : 7,
+      default: 5,
     },
     layout: {
       type: String,

+ 1 - 1
src/components/PopDialog/dose.vue

@@ -35,7 +35,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/drug.vue

@@ -39,7 +39,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 15 - 7
src/components/PopDialog/fourClass.vue

@@ -24,12 +24,14 @@
                 </el-input>
 
                 <el-tree
+                  v-loading="loading"
                   class="filter-tree"
                   :data="threedata"
                   :props="defaultProps"
                   accordion
                   node-key="id"
-                  highlight-current
+                  :highlight-current="true"
+                  :current-node-key="checkId"
                   @node-click="clickTree"
                   :filter-node-method="filterNode"
                   ref="tree"
@@ -43,7 +45,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"
@@ -79,6 +81,7 @@ export default {
       isLast: false,
       // 选中的节点
       choosePoint: {},
+      checkId: null,
     };
   },
   props: {},
@@ -88,21 +91,28 @@ export default {
     },
   },
   methods: {
-    init() {
+    init(id) {
       this.visible = true;
+      if(id) {
+        this.checkId = id
+      }
       this.$nextTick(() => {
         this.refreshList();
       });
     },
     // 获取数据列表
     refreshList(data) {
-      this.loading = true;
+      this.loading = true
       getTree({ isEnable: "0" }).then((res) => {
         console.log("res", res);
         if (res.code === 200) {
           this.threedata = res.rows.sort((a, b) => a.code - b.code);
+          this.loading = false
         }
-        this.loading = false;
+      }).then(() => {
+        this.$refs['tree'].setCurrentKey(this.checkId)
+      }).catch(err => {
+        this.loading = false
       });
     },
     clickTree(data) {
@@ -115,8 +125,6 @@ export default {
       this.choosePoint = data;
     },
     filterNode(value, data) {
-      console.log("value", value);
-      console.log("data", data);
       if (!value) return true;
       return data.materialType.indexOf(value) !== -1;
     },

+ 15 - 7
src/components/PopDialog/index.vue

@@ -8,7 +8,7 @@
             <el-form size="small" :inline="true" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()"
               @submit.native.prevent>
               <el-form-item prop="code">
-                <el-input size="small" v-model="searchForm.code" placeholder="请输入物料编号查询" clearable></el-input>
+                <el-input size="small" v-model.trim="searchForm.code" placeholder="请输入物料编号查询" clearable></el-input>
               </el-form-item>
               <el-form-item prop="name">
                 <el-input size="small" v-model="searchForm.name" placeholder="请输入物料名称查询" clearable></el-input>
@@ -21,7 +21,7 @@
           </el-header>
           <el-main>
             <el-table :data="dataList" v-loading="loading" size="small" border ref="contractTable" @row-click="rowSelect"
-              @select="handleSelectionChange" height="calc(100% - 40px)" style="width: 100%">
+              @select="handleSelectionChange" :selection="selectedRows" @selection-change="watchSel"  height="calc(100% - 40px)" style="width: 100%">
               <el-table-column type="selection" header-align="center" align="center" width="50">
               </el-table-column>
               <el-table-column prop="code" header-align="center" align="center" sortable="custom" min-width="90"
@@ -39,7 +39,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
         <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
       </span>
@@ -67,6 +67,7 @@ export default {
       orders: [],
       loading: false,
       visible: false,
+      selectedRows:[]
     };
   },
   props: {
@@ -79,7 +80,7 @@ export default {
     // 是否启用单选
     single: {
       type: Boolean,
-      default: false
+      default: true
     }
   },
   methods: {
@@ -136,14 +137,21 @@ export default {
       this.searchForm.pageNo = 1;
       this.refreshList();
     },
+    watchSel(rows) {
+      console.log('监听得到选中吗', rows)
+      this.dataListAllSelections = rows
+    },
     // 表格选中数据
-    rowSelect(row, column, event) {
-      this.$refs.contractTable.clearSelection();
+    rowSelect(row) {
+      // this.$refs.contractTable.clearSelection();
+      // this.$refs.contractTable.toggleRowSelection(row);
+      // this.dataListAllSelections = this.single ? [row] : selection
       this.$refs.contractTable.toggleRowSelection(row);
-      this.dataListAllSelections = this.single ? [row] : selection
     },
     // 选中数据
     handleSelectionChange(selection, row) {
+      console.log('selection',selection)
+      console.log('row',[row])
       if (this.single && selection.length > 1) {
         this.$refs.contractTable.clearSelection();
         this.$refs.contractTable.toggleRowSelection(row);

+ 1 - 1
src/components/PopDialog/innerPackingUnit.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/midPack.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/organization.vue

@@ -35,7 +35,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/place.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/productFactory.vue

@@ -103,7 +103,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/serviceline.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/staff.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/tax.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/PopDialog/unit.vue

@@ -95,7 +95,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button
           size="small"
           @click="visible = false"

+ 1 - 1
src/components/Refers/batchRefer.vue

@@ -34,7 +34,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
         <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
       </span>

+ 54 - 5
src/components/Refers/refers.vue

@@ -18,19 +18,24 @@
           </el-header>
           <el-main>
             <el-table :data="dataList" v-loading="loading" size="small" border ref="contractTable"
-              @select="handleSelectionChange" @row-click="rowSelect" height="calc(100% - 40px)">
+              @select="handleSelectionChange" @row-dblclick="choose"  @row-click="rowSelect" height="calc(100% - 40px)">
               <el-table-column show-overflow-tooltip type="selection" header-align="center" align="center" width="50"/>
-              <el-table-column show-overflow-tooltip prop="id" header-align="center" align="center" min-width="90" :label="reciveForm.title + 'id'"/>
-              <el-table-column show-overflow-tooltip prop="code" header-align="center" align="center" min-width="90" :label="reciveForm.title + '编码'"/>
-              <el-table-column show-overflow-tooltip prop="name" header-align="center" align="center" min-width="90" :label="reciveForm.title + '名称'"/>
+              <!-- <el-table-column show-overflow-tooltip prop="id" header-align="center" align="center" min-width="90" :label="reciveForm.title + 'id'"/> -->
+              <el-table-column show-overflow-tooltip prop="code" header-align="center" align="center" min-width="90" label="编码"/>
+              <el-table-column show-overflow-tooltip prop="name" header-align="center" align="center" min-width="90" label="名称"/>
+              <el-table-column show-overflow-tooltip v-if="warehouseAttributes" prop="warehouseAttributes" header-align="center" align="center" min-width="90" label="仓库属性"/>
               <el-table-column show-overflow-tooltip v-if="orgName" prop="orgName" header-align="center" align="center" min-width="90" label="所属组织"/>
               <el-table-column show-overflow-tooltip v-if="warehouseCode" prop="warehouseCode" header-align="center" align="center" min-width="90" label="所属仓库编码"/>
               <el-table-column show-overflow-tooltip v-if="warehouseName" prop="warehouseName" header-align="center" align="center" min-width="90" label="所属仓库"/>
+              <el-table-column show-overflow-tooltip v-if="warehouseProperty" prop="warehouseProperty" header-align="center" align="center" min-width="90" label="仓库属性" :formatter="cksx"/>
               <el-table-column show-overflow-tooltip v-if="contactsName" prop="contactsName" header-align="center" align="center" min-width="90" label="联系人"/>
               <el-table-column show-overflow-tooltip v-if="contactsPhone" prop="contactsPhone" header-align="center" align="center" min-width="90" label="联系人电话"/>
               <el-table-column show-overflow-tooltip v-if="address" prop="address" header-align="center" align="center" min-width="90" label="详细地址"/>
               <el-table-column show-overflow-tooltip v-if="materialClassifyName" prop="materialClassifyName" header-align="center" align="center" min-width="90" label="物料分类"/>
               <el-table-column show-overflow-tooltip v-if="remark" prop="remark" header-align="center" align="center" min-width="90" label="备注"/>
+              <el-table-column show-overflow-tooltip v-if="shortName" prop="shortName" header-align="center" align="center" min-width="90" label="简称"/>
+              <el-table-column show-overflow-tooltip v-if="mneCode" prop="mneCode" header-align="center" align="center" min-width="90" label="助记码"/>
+              <el-table-column show-overflow-tooltip v-if="deptName" prop="deptName" header-align="center" align="center" min-width="90" label="部门"/>
             </el-table>
             <el-pagination @size-change="sizeChangeHandle" @current-change="currentChangeHandle"
               :current-page="searchForm.pageNo" :page-sizes="[5, 10, 15, 20]" :page-size="searchForm.pageSize"
@@ -39,7 +44,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
         <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
       </span>
@@ -63,13 +68,18 @@ export default {
       dataList: [],
       total: 0,
       orgName: false,
+      deptName: false,
+      warehouseAttributes: false,
       warehouseCode: false,
       warehouseName: false,
+      warehouseProperty: false,
       contactsName: false,
       contactsPhone: false,
       address: false,
       materialClassifyName: false,
       remark: false,
+      shortName: false,
+      mneCode: false,
       orders: [],
       loading: false,
       visible: false,
@@ -89,6 +99,20 @@ export default {
     }
   },
   methods: {
+    cksx(row) {
+      switch (row.warehouseProperty) {
+        case '1':
+          return '电商库存'
+        case '2':
+          return '区域分仓公共库存'
+        case '3':
+          return '各项目仓库存'
+        case '4':
+          return '中心仓公共库存'
+        case '5':
+          return '事业发展部仓库'
+      }
+    },
     init(val) {
       this.visible = true;
       console.log("🚀 ~ file: refers.vue:79 ~ init ~ init(val):", val)
@@ -113,6 +137,18 @@ export default {
         } else {
           this.orgName = false
         }
+        // 仓库里面加仓库属性
+        if(res.rows.length !== 0 && res.rows[0].warehouseAttributes) {
+          this.warehouseAttributes = true
+        } else {
+          this.warehouseAttributes = false
+        }
+        // 人员内加部门
+        if(res.rows.length !== 0 && res.rows[0].deptId) {
+          this.deptName = true
+        } else {
+          this.deptName = false
+        }
         // 选择货位里面加仓库
         if(res.rows.length !== 0 && res.rows[0].warehouseCode) {
           this.warehouseCode = true
@@ -125,16 +161,26 @@ export default {
         if(res.rows.length !== 0 && res.rows[0].contactsName) {
           this.contactsName = true
           this.contactsPhone = true
+          this.warehouseProperty = true
           this.address = true
           this.materialClassifyName = true
           this.remark = true
         } else {
           this.contactsName = false
           this.contactsPhone = false
+          this.warehouseProperty = false
           this.address = false
           this.materialClassifyName = false
           this.remark = false
         }
+        // 补单供应商档案
+        if (res.rows.length !== 0 && res.rows[0].mneCode) {
+          this.shortName = true
+          this.mneCode = true
+        } else {
+          this.shortName = false
+          this.mneCode = false
+        }
         this.loading = false;
         this.$nextTick(() => {
           this.setSelectRow();
@@ -189,6 +235,9 @@ export default {
       console.log('选择的数据?', this.dataListAllSelections)
       this.$emit("doSubmit", this.dataListAllSelections);
     },
+    choose() {
+      this.doSubmit()
+    }
   },
 };
 </script>

+ 121 - 0
src/components/Refers/sigleTreeRefer.vue

@@ -0,0 +1,121 @@
+<template>
+  <div>
+    <el-dialog :title="reciveForm.title" width="500px" :close-on-click-modal="false" :append-to-body="true" v-dialogDrag
+      class="userDialog" :visible.sync="visible">
+      <el-container style="height: 500px">
+        <el-container>
+          <el-main>
+            <el-row :gutter="24" class="content">
+              <el-col :span="24">
+                <el-input placeholder="输入关键字进行过滤" size="small" v-model="filterText" style="margin-bottom: 16px">
+                </el-input>
+
+                <el-tree class="filter-tree" :data="threedata" :props="defaultProps" accordion node-key="id"
+                  highlight-current @node-click="clickTree" :filter-node-method="filterNode" ref="tree">
+                  <span slot-scope="{ node, data }">
+                    {{ data.code }}{{ data.name }}
+                  </span>
+                </el-tree>
+              </el-col>
+            </el-row>
+          </el-main>
+        </el-container>
+      </el-container>
+      <span slot="footer">
+        <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+        <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { getRefer } from '@/api/purchase/basic'
+export default {
+  data() {
+    return {
+      loading: false,
+      visible: false,
+      filterText: "",
+      threedata: [],
+      defaultProps: {
+        children: "children",
+        label: "name",
+      },
+      // 判断是否为最末级节点
+      // isLast: false,
+      // 选中的节点
+      choosePoint: {},
+      // 接收的参数
+      reciveForm: {},
+    };
+  },
+  props: {},
+  watch: {
+    filterText(val) {
+      this.$refs.tree.filter(val);
+    },
+  },
+  methods: {
+    init(val) {
+      this.visible = true;
+      this.filterText = ''
+      this.reciveForm = val
+      this.$nextTick(() => {
+        this.refreshList();
+      });
+    },
+    // 获取数据列表
+    refreshList(data) {
+      this.loading = true;
+      let params = this.reciveForm
+      getRefer(params).then((res) => {
+        console.log("res", res);
+        if (res.code === 200) {
+          this.threedata = res.rows
+        }
+        this.loading = false;
+      });
+    },
+    clickTree(data) {
+      console.log("树形节点信息:", data);
+      this.choosePoint = data;
+      // console.log('查看打勾的',this.$refs.tree.getCheckedNodes())
+      // this.choosePoint = this.$refs.tree.getCheckedNodes()
+    },
+    filterNode(value, data) {
+      if (!value) return true;
+      return data.name.indexOf(value) !== -1;
+    },
+    doSubmit() {
+      console.log("子组件选择的数据", this.choosePoint);
+      this.$emit("doSubmit", this.choosePoint);
+      this.visible = false;
+    },
+    loadNode(node, resolve) {
+      console.log("node, resolve", node, resolve);
+      // if (!node.data.length)
+      //   resolve(node.data.childrens.sort((a, b) => a.code - b.code));
+      // else resolve(this.threedata);
+    },
+  },
+};
+</script>
+<style lang="scss">
+.userDialog {
+  .el-dialog__body {
+    padding: 10px 0px 0px 10px;
+    color: #606266;
+    font-size: 14px;
+    word-break: break-all;
+  }
+
+  .el-main {
+    padding: 20px 20px 5px 20px;
+
+    .el-pagination {
+      margin-top: 5px;
+    }
+  }
+}
+</style>

+ 7 - 5
src/components/Refers/treeRefer.vue

@@ -10,8 +10,8 @@
                 <el-input placeholder="输入关键字进行过滤" size="small" v-model="filterText" style="margin-bottom: 16px">
                 </el-input>
 
-                <el-tree class="filter-tree" :data="threedata" :props="defaultProps" accordion node-key="id"
-                  highlight-current @node-click="clickTree" :filter-node-method="filterNode" ref="tree">
+                <el-tree class="filter-tree" :data="threedata" :props="defaultProps" show-checkbox check-strictly accordion node-key="id"
+                  highlight-current @check="clickTree" :filter-node-method="filterNode" ref="tree">
                   <span slot-scope="{ node, data }">
                     {{ data.code }}{{ data.name }}
                   </span>
@@ -21,7 +21,7 @@
           </el-main>
         </el-container>
       </el-container>
-      <span slot="footer" class="dialog-footer">
+      <span slot="footer">
         <el-button size="small" @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
         <el-button size="small" type="primary" icon="el-icon-circle-check" @click="doSubmit()">确定</el-button>
       </span>
@@ -78,8 +78,10 @@ export default {
       });
     },
     clickTree(data) {
-      console.log("树形节点信息:", data);
-      this.choosePoint = data;
+      // console.log("树形节点信息:", data);
+      // this.choosePoint = data;
+      // console.log('查看打勾的',this.$refs.tree.getCheckedNodes())
+      this.choosePoint = this.$refs.tree.getCheckedNodes()
     },
     filterNode(value, data) {
       if (!value) return true;

+ 10 - 0
src/components/Retrieve/api/index.js

@@ -0,0 +1,10 @@
+import request from "@/utils/request";
+
+// 模OA流程收回
+export const rollback = (data) =>{
+  return request({
+    url: "/oaflow/rollback",
+    method: "POST",
+    data: data,
+  });
+}

+ 93 - 0
src/components/Retrieve/index.vue

@@ -0,0 +1,93 @@
+<template>
+  <el-button 
+    v-if="isShow"
+    :type="type" 
+    :size="size"
+    @click.native="retrieve"
+  >
+    {{ title }}
+  </el-button>
+</template>
+
+<script>
+// import {rollback} from "@/api/business/purchase/purchase-order.js"
+import {rollback} from "./api/index";
+export default {
+  name:'Retrieve',
+  props:{
+    data:{
+      type:[Object],
+      require:true,
+    },
+    type:{
+      type:String,
+      default:'text',
+    },
+    size:{
+      type:String,
+      default:'mini',
+    },
+
+  },
+  computed:{
+    isShow:{
+      get(){
+        if(this.data.status === '1'){
+
+          return true;
+        }
+        return false;
+      },
+      set(){
+
+      }
+    }
+  },
+  data(){
+    return {
+      title:'收 回',
+    }
+  },
+  methods:{
+    retrieve(){
+
+      // if(this.data.status === '1'){
+
+        this.$confirm('是否继续此操作?', '提示', {
+            confirmButtonText: '确定',
+            cancelButtonText: '取消',
+            type: 'warning'
+          }).then(async() => {
+  
+            try {
+              this.$modal.loading("请稍候...");
+              console.log(this.data,'this.data');
+              let {code,msg} = await rollback({...this.data});
+              if(code == 200){
+                this.$emit('success');
+              }
+              
+            } catch (error) {
+              
+            }finally{
+              this.$modal.closeLoading();
+            }
+  
+          }).catch(() => {        
+          });
+      
+      // }else{
+      //   this.$notify.warning({
+      //     title: '警告',
+      //     message: '!',
+      //   });
+      // }
+
+    },
+
+  },
+  created(){},
+  mounted(){},
+
+}
+</script>

+ 42 - 0
src/components/computed-input-v2/index.vue

@@ -0,0 +1,42 @@
+<template>
+  <span v-on="$listeners">{{ innerValue || "--" }}</span>
+</template>
+
+<script>
+export default {
+  name: "ComputedInputV2",
+  props: {
+    // v-model
+    value: {
+      type: [Number, String],
+      require: true,
+    },
+    // formatter
+    formatter: {
+      type: Function,
+      default: () => {},
+      require: true,
+    },
+    // formatter
+    source: {
+      type: Object,
+    },
+  },
+  data() {
+    return {};
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.formatter(this.source || this.value);
+      },
+    },
+  },
+  watch: {},
+  methods: {},
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 7 - 21
src/components/computed-input/index.vue

@@ -12,11 +12,9 @@ export default {
       require: true,
     },
     // v-model
-    computed: {
+    formatter: {
       type: Function,
-      default: () => {
-        return () => {};
-      },
+      default: () => {},
       require: true,
     },
     // 源数据
@@ -24,20 +22,6 @@ export default {
       type: Object,
       require: true,
     },
-    // 组件大小
-    size: {
-      type: String,
-      dafault: () => {
-        return "mini";
-      },
-    },
-    // 提示
-    placeholder: {
-      type: String,
-      dafault: () => {
-        return "";
-      },
-    },
   },
   data() {
     return {};
@@ -50,15 +34,17 @@ export default {
   watch: {
     newSource: {
       handler: function (newProp) {
-        const { computed } = this.$props;
-        this.$emit("input", computed(newProp));
+        const { formatter } = this.$props;
+        this.$emit("input", formatter(newProp));
       },
       deep: true,
       immediate: true,
     },
   },
   methods: {},
-  created() {},
+  created() {
+   
+  },
   mounted() {},
   destroyed() {},
 };

+ 137 - 0
src/components/date-wrapper/index.vue

@@ -0,0 +1,137 @@
+<template>
+  <div class="date-wrapper">
+    <el-date-picker 
+      :type="type" 
+      :placeholder="startPlaceholder" 
+      :clearable="clearable"  
+      :value-format="valueFormat" 
+      v-model="startTime"
+      :picker-options="pickerOptions" 
+      ></el-date-picker>
+      <span style="padding: 0 3px">{{rangeSeparator}}</span>
+    <el-date-picker 
+      :type="type" 
+      :placeholder="endPlaceholder" 
+      :clearable="clearable" 
+      :value-format="valueFormat" 
+      v-model="endTime" 
+      :picker-options="pickerOptions1" 
+      ></el-date-picker>
+  </div>
+</template>
+<script>
+
+  export default {
+    name: "dateWrapper",
+    props:{
+      value:{
+        type:Array,
+        require:true,
+      },
+      rangeSeparator:{
+        type:String,
+        default:'-'
+      },
+      type:{
+        type:String,
+        default:'date',
+      },
+      valueFormat:{
+        type:String,
+        default:'yyyy-MM-dd',
+      },
+      startPlaceholder:{
+        type:String,
+        default:'选择开始日期'
+      },
+      endPlaceholder:{
+        type:String,
+        default:'选择结束日期'
+      },
+      clearable:{
+        type:Boolean,
+        require:false,
+      }
+    },
+    computed:{
+      startTime:{
+        get(){
+          console.log(this.value,'this.value');
+          return (this.value && this.value[0]) || '';
+        },
+        set(value){
+          console.log(value,'startTime');
+          this.$emit('input',[value,this.endTime])
+        }
+      },
+      
+      endTime: {
+        get(){
+          return (this.value &&this.value[1]) || '';
+        },
+        set(value){
+          console.log(value,'endTime');
+          this.$emit('input',[this.startTime,value])
+        }
+      },
+
+      pickerOptions: {
+        get(){
+          const that = this
+          return {
+            disabledDate(time) {
+              if(that.endTime && that.endTime !== ''){
+                return time.getTime() > new Date(that.endTime).getTime()
+              }
+            }
+          }
+        },
+        set(value){
+          this.$emit("input", value);
+        }
+      },
+      pickerOptions1:{
+        get(){
+          const that = this
+          return {
+            disabledDate(time) {
+              if(that.startTime && that.startTime !== ''){
+                return (time.getTime()+ 3600 * 1000 * 24) < new Date(that.startTime).getTime()
+              }
+            }
+          }
+        },
+        set(value){
+          this.$emit("input", value);
+        }
+      }
+    },
+    data() {
+      return {
+        // form:{
+        //   startTime: '',
+        //   endTime: '',
+        // }
+      }
+    }
+  }
+</script>
+<style lang="scss">
+  .date-wrapper{
+    display: flex;
+    justify-content: flex-start;
+    vertical-align: center;
+    .el-date-editor{
+      // width: 102px !important;
+      .el-input__inner{
+        padding: 0px 0px 0 10px !important;
+      }
+      .el-input__prefix{
+        display: none;
+      }
+      .el-input__suffix{
+        text-align: right;
+      }
+    }
+  }
+</style>

+ 51 - 0
src/components/draggable/index.vue

@@ -0,0 +1,51 @@
+<template>
+  <draggable
+    v-bind="$attrs"
+    v-on="$listeners"
+    v-model="innerValue"
+    animation="250"
+    forceFallback="true"
+  >
+    <transition-group>
+      <slot></slot>
+    </transition-group>
+  </draggable>
+</template>
+
+<script>
+import draggable from "vuedraggable";
+export default {
+  name: "Draggable",
+  props: {
+    // v-model
+    value: {
+      type: [Array],
+      require: true,
+    },
+    group: {
+      type: [String, Object],
+      require: true,
+    },
+  },
+  components: { draggable },
+  data() {
+    return {};
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+  },
+  watch: {},
+  methods: {},
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<style scoped></style>

+ 4 - 2
src/components/file-preview/index.vue

@@ -1,10 +1,10 @@
 <template>
-  <div class="file-preview">
+  <div v-if="fileList.length" class="file-preview">
     <el-button
       :size="size"
       type="text"
       @click="visible = true"
-      style="font-size: 12px"
+      style="font-size: 12px; padding: 0"
     >
       附 件
     </el-button>
@@ -41,6 +41,7 @@
       </div>
     </el-dialog>
   </div>
+  <span v-else>--</span>
 </template>
 
 <script>
@@ -59,6 +60,7 @@ export default {
   },
   data() {
     return {
+      separator: ";",
       visible: false,
       fileList: [],
     };

+ 56 - 0
src/components/popover-select-v2/fetch/index.js

@@ -0,0 +1,56 @@
+import { REFER } from "@/components/popover-select/api";
+
+// 币种
+export const currency = async (prop) => {
+  try {
+    // try
+    const { code, rows } = await REFER({
+      search: prop,
+      type: "CURRENCY_PARAM",
+    });
+    if (code === 200) {
+      return rows[0] || {};
+    }
+  } catch (err) {
+    // catch
+    console.error(err);
+  } finally {
+    // finally
+  }
+};
+// 税率
+export const tax = async (prop) => {
+  try {
+    // try
+    const { code, rows } = await REFER({
+      search: prop,
+      type: "TAX_RATE_PARAM",
+    });
+    if (code === 200) {
+      return rows[0] || {};
+    }
+  } catch (err) {
+    // catch
+    console.error(err);
+  } finally {
+    // finally
+  }
+};
+// 单位
+export const unit = async (prop) => {
+  try {
+    // try
+    const { code, rows } = await REFER({
+      search: prop,
+      type: "UNIT_PARAM",
+    });
+    if (code === 200) {
+      return rows[0] || {};
+    }
+  } catch (err) {
+    // catch
+    console.error(err);
+  } finally {
+    // finally
+  }
+};

+ 334 - 0
src/components/popover-select-v2/index.vue

@@ -0,0 +1,334 @@
+<script>
+import { REFER } from "../popover-select/api/index";
+
+export default {
+  name: "PopoverSelectV2",
+  props: {
+    // v-model
+    value: {
+      type: [Array, String,Number],
+      require: true,
+    },
+    // 参照类型 ,对应后端
+    referName: {
+      type: String,
+      require: true,
+    },
+    // 作为 value 唯一标识的键名,绑定值
+    valueKey: {
+      type: String,
+      dafault: () => {
+        return "code";
+      },
+    },
+    // 默认查询参数
+    queryParams: {
+      type: Function,
+      default: () => {},
+    },
+    // 需映射源数据
+    source: {
+      type: Object,
+      default: () => ({}),
+    },
+    // 参照内外映射
+    dataMapping: {
+      type: Object,
+      default: () => ({}),
+    },
+    // 多选
+    checkbox: {
+      type: Boolean,
+      default: false,
+    },
+    // 参照弹窗标题
+    title: {
+      type: String,
+      dafault: () => {
+        return "TITEL";
+      },
+    },
+  },
+  components: {
+    ElSuperTable: () => import("@/components/super-table/index.vue"),
+  },
+  data() {
+    return {
+      size: "mini",
+      width: "50%",
+      page: { pageNum: 1, pageSize: 10, total: 0 },
+      visible: false,
+      loading: false,
+      model: {
+        search: "",
+        isPage: true,
+      },
+      data: [],
+      selectData: [],
+    };
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+    TableColumns() {
+      const { referName } = this.$props;
+      return require(`../popover-select/components/${referName}`).default;
+    },
+  },
+  watch: {
+    innerValue: {
+      handler: function (newValue) {
+        if (!newValue) {
+          const {
+            $props: { source, dataMapping },
+          } = this;
+          for (let key in dataMapping) {
+            source[key] = undefined;
+          }
+          this.$emit("update:source", source);
+        }
+      },
+    },
+  },
+  methods: {
+    // open dialog
+    async open() {
+      this.visible = true;
+      await this.useReset();
+    },
+    // hide dialog
+    async hide() {
+      this.visible = false;
+    },
+    // fetch list
+    async fetchList(prop, page) {
+      try {
+        // try
+        this.loading = true;
+        const { pageNum, pageSize } = page;
+        const { referName: type, source, queryParams } = this.$props;
+        const { code, rows, total } = await REFER(
+          {
+            ...prop,
+            ...queryParams(source),
+            type: type,
+          },
+          {
+            pageNum,
+            pageSize,
+          }
+        );
+        if (code === 200) {
+          this.data = rows;
+
+
+          // 处理新增字段无法映射
+          let that = this;
+
+          this.TableColumns.forEach(({item,attr}) =>{
+
+            that.data = that.data.map(d =>{
+
+              if(!attr.is && attr.formatter){
+                d[item.key] = attr.formatter(d);
+              }
+
+              return d;
+
+            })
+
+          })
+
+          this.page.total = total;
+        }
+      } catch (err) {
+        // catch
+        console.error(err);
+      } finally {
+        // finally
+        this.loading = false;
+      }
+    },
+    // reset
+    async useReset() {
+      this.data = [];
+      this.page.pageNum = 1;
+      this.page.pageSize = 10;
+      this.model.search = null;
+      await this.fetchList(this.model, this.page);
+    },
+    // query
+    async useQuery() {
+      await this.fetchList(this.model, this.page);
+    },
+    // auto
+    async useAutocomplete(prop, cb) {
+      if (prop) {
+        this.page.pageSize = 1000000;
+        this.model.search = prop;
+        await this.fetchList(this.model, this.page);
+        await cb(this.data);
+      } else {
+        cb([]);
+      }
+    },
+    // select
+    useSelect(prop) {
+      this.selectData = prop;
+    },
+    // confirm
+    useConfirm(prop) {
+      this.hide();
+
+      const {
+        $props: { source, checkbox, valueKey, dataMapping },
+      } = this;
+
+      if (checkbox) {
+        this.selectData = [...prop];
+        this.$emit(
+          "change",
+          this.selectData.map((item) => {
+            for (let key in dataMapping) {
+              item[key] = item[dataMapping[key]];
+            }
+            return item;
+          }),
+          this.$props
+        );
+
+      } else {
+        for (let key in dataMapping) {
+          source[key] = prop[0][dataMapping[key]];
+        }
+        this.innerValue = prop[0][valueKey];
+        this.$emit("update:source", source);
+        this.$emit("change", prop[0], this.$props);
+      }
+    },
+  },
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+
+<template>
+  <div class="popover-select-v2">
+    <el-autocomplete
+      clearable
+      v-bind="$attrs"
+      v-model="innerValue"
+      :value-key="valueKey"
+      :fetch-suggestions="useAutocomplete"
+      @select="useConfirm([$event])"
+      style="width: 100%"
+    >
+      <i class="el-icon-search" slot="suffix" @click="open"> </i>
+      <template slot-scope="{ item }">
+        <p
+          style="
+            text-overflow: ellipsis;
+            overflow: hidden;
+            line-height: 15px;
+            margin: 5px 0;
+          "
+        >
+          {{ item.name }}
+        </p>
+        <p
+          style="
+            font-size: 12px;
+            color: #b4b4b4;
+            line-height: 15px;
+            margin: 5px 0;
+          "
+        >
+          {{ item.code }}
+        </p>
+      </template>
+    </el-autocomplete>
+    <el-dialog
+      :width="width"
+      :visible.sync="visible"
+      :show-close="false"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+    >
+      <div slot="title" style="display: flex; justify-content: space-between">
+        <el-form
+          :size="size"
+          :inline="true"
+          :model="model"
+          @submit.native.prevent
+          style="display: flex; flex-direction: column"
+        >
+          <div>
+            <el-form-item prop="search">
+              <el-input
+                v-model="model.search"
+                @change="useQuery"
+                @keydown.enter="useQuery"
+              >
+              </el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button icon="el-icon-search" @click="useQuery">搜索</el-button>
+              <el-button icon="el-icon-refresh" @click="useReset">重置</el-button>
+            </el-form-item>
+          </div>
+        </el-form>
+        <div>
+          <el-button
+            type="primary"
+            :size="$attrs.size"
+            :loading="loading"
+            @click="useConfirm(selectData)"
+          >
+            确认
+          </el-button>
+          <el-button :size="$attrs.size" :loading="loading" @click="hide">
+            取消
+          </el-button>
+        </div>
+      </div>
+      <div
+        v-loading="loading"
+        style="height: 40vh; display: flex; margin-top: -30px"
+      >
+        <el-super-table
+          v-model="data"
+          :size="size"
+          :page="page"
+          :columns="TableColumns"
+          :radio="!checkbox"
+          :checkbox="checkbox"
+          pagination
+          highlight-current-row
+          @pagination="useQuery"
+          @row-select="useSelect"
+          @row-dblclick="useConfirm([$event])"
+        >
+        </el-super-table>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<style scoped>
+.popover-select-v2 .el-autocomplete {
+  width: inherit;
+}
+.popover-select-v2 .el-autocomplete .el-icon-search {
+  cursor: pointer;
+}
+::v-deep .el-table--mini .el-table__cell {
+  height: 50px;
+}
+</style>

+ 276 - 0
src/components/popover-select-v2/multiple.vue

@@ -0,0 +1,276 @@
+<script>
+import { REFER } from "../popover-select/api/index";
+import deepCopy from "@gby/deep-copy";
+
+export default {
+  name: "PopoverSelectV2",
+  props: {
+    // v-model
+    value: {
+      type: [Array, String, Number],
+      require: true,
+    },
+    // 参照类型 ,对应后端
+    referName: {
+      type: String,
+      require: true,
+    },
+    // 作为 value 唯一标识的键名,绑定值
+    valueKey: {
+      type: [String, null, undefined],
+    },
+    // 默认查询参数
+    queryParams: {
+      type: Function,
+      default: () => {},
+    },
+    // 需映射源数据
+    source: {
+      type: Object,
+      default: () => ({}),
+    },
+    // 参照内外映射
+    dataMapping: {
+      type: Object,
+      default: () => ({}),
+    },
+  },
+  components: {
+    ElSuperTable: () => import("@/components/super-table/index.vue"),
+  },
+  data() {
+    return {
+      size: "mini",
+      width: "50%",
+      page: { pageNum: 1, pageSize: 10, total: 0 },
+      visible: false,
+      loading: false,
+      scroll: false,
+      model: {
+        search: "",
+        isPage: true,
+      },
+      data: [],
+      selectData: [],
+      lastSelectData: [],
+    };
+  },
+  computed: {
+    innerValue: {
+      get() {
+        return this.value;
+      },
+      set(value) {
+        this.$emit("input", value);
+      },
+    },
+    TableColumns: {
+      get() {
+        const { referName } = this.$props;
+        return require(`../popover-select/components/${referName}`).default;
+      },
+    },
+  },
+  watch: {
+    innerValue: {
+      handler: function (newValue) {
+        if (!newValue) this.lastSelectData = [];
+      },
+    },
+  },
+  methods: {
+    // open dialog
+    async open() {
+      this.visible = true;
+      await this.useReset();
+    },
+    // hide dialog
+    async hide() {
+      this.visible = false;
+    },
+    // fetch list
+    async fetchList(prop, page) {
+      try {
+        // try
+        this.loading = true;
+        const { pageNum, pageSize } = page;
+        const { referName: type, source, queryParams } = this.$props;
+        const { code, rows, total } = await REFER(
+          {
+            ...prop,
+            ...queryParams(source),
+            type: type,
+          },
+          {
+            pageNum,
+            pageSize,
+          }
+        );
+        if (code === 200) {
+          this.data = rows;
+          this.page.total = total;
+        }
+      } catch (err) {
+        // catch
+        console.error(err);
+      } finally {
+        // finally
+        this.loading = false;
+      }
+    },
+    // reset
+    async useReset() {
+      this.data = [];
+      this.model.search = null;
+      await this.fetchList(this.model, this.page);
+    },
+    // query
+    async useQuery() {
+      await this.fetchList(this.model, this.page);
+    },
+    // select
+    useSelect(prop) {
+      this.selectData = prop;
+    },
+    // delete
+    useDelete(prop) {
+      this.selectData.splice(prop, 1);
+      this.useConfirm(this.selectData);
+    },
+    // confirm
+    useConfirm(prop) {
+      const {
+        $props: { valueKey },
+      } = this;
+      // string
+      if (typeof valueKey === "string") {
+        this.innerValue = prop.map((item) => item[valueKey]);
+      }
+      // null
+      else {
+        this.innerValue = prop;
+      }
+      //
+      this.hide();
+      this.lastSelectData = deepCopy(prop);
+      this.$emit("change", prop, this.$props);
+    },
+    // cancel
+    useCancel() {
+      this.hide();
+    },
+  },
+  created() {},
+  mounted() {},
+  destroyed() {},
+};
+</script>
+<template>
+  <div class="popover-select-v2 popover-select-v2--multiple">
+    <el-input v-bind="$attrs" @focus="open">
+      <i class="el-icon-search" slot="suffix" @click="open"> </i>
+    </el-input>
+    <el-dialog
+      :width="width"
+      :visible.sync="visible"
+      :show-close="false"
+      :close-on-click-modal="false"
+      :close-on-press-escape="false"
+      append-to-body
+    >
+      <div slot="title" style="display: flex; justify-content: space-between">
+        <el-form
+          :size="size"
+          :inline="true"
+          :model="model"
+          @submit.native.prevent
+          style="display: flex; flex-direction: column"
+        >
+          <div>
+            <el-form-item prop="search">
+              <el-input
+                v-model="model.search"
+                @change="useQuery"
+                @keydown.enter="useQuery"
+              >
+              </el-input>
+            </el-form-item>
+            <el-form-item>
+              <el-button icon="el-icon-refresh" @click="useReset"></el-button>
+            </el-form-item>
+          </div>
+        </el-form>
+        <div>
+          <el-button
+            type="primary"
+            :size="$attrs.size"
+            :loading="loading"
+            @click="useConfirm(selectData)"
+          >
+            确认
+          </el-button>
+          <el-button :size="$attrs.size" :loading="loading" @click="hide">
+            取消
+          </el-button>
+        </div>
+      </div>
+      <div
+        v-loading="loading"
+        style="height: 40vh; display: flex; margin-top: -30px"
+      >
+        <el-super-table
+          v-model="data"
+          :size="size"
+          :page="page"
+          :columns="TableColumns"
+          checkbox
+          pagination
+          highlight-current-row
+          @pagination="useQuery"
+          @row-select="useSelect"
+          @row-dblclick="useConfirm([$event])"
+        >
+        </el-super-table>
+      </div>
+    </el-dialog>
+    <el-scrollbar
+      v-if="lastSelectData.length"
+      :viewStyle="{
+        display: 'flex',
+        alignItems: 'center',
+        padding: '5px 0 0 5px',
+      }"
+      class="popover-select-v2_tags"
+    >
+      <el-tag
+        v-for="(tag, index) in lastSelectData"
+        :size="size"
+        hit
+        closable
+        @close="useDelete(index)"
+        style="margin-right: 5px"
+      >
+        {{ tag.name || tag[valueKey] }}
+      </el-tag>
+    </el-scrollbar>
+  </div>
+</template>
+<style scoped>
+.popover-select-v2 .el-input {
+  width: inherit;
+}
+.popover-select-v2 .el-input .el-icon-search {
+  cursor: pointer;
+}
+.popover-select-v2 .popover-select-v2_tags {
+  position: absolute;
+  left: 0;
+  top: 50%;
+  transform: translateY(-50%);
+  width: calc(100% - 40px);
+  height: 100%;
+}
+::v-deep .el-table--mini .el-table__cell {
+  height: 50px;
+}
+</style>

+ 10 - 26
src/components/popover-select/components/ADDRESS_PARAM.js

@@ -1,39 +1,23 @@
 // 收货地址
 export default [
-  // {
-  //   key: "id",
-  //   title: "ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "仓库",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "仓库", width: "auto" },
+    attr: {},
   },
   {
-    key: "address",
-    title: "地址",
-    type: "Input",
-    search: true,
+    item: { key: "address", title: "地址", width: "auto" },
+    attr: {},
   },
   {
-    key: "contactsName",
-    title: "联系人",
-    type: "Input",
-    search: true,
+    item: { key: "contactsName", title: "联系人", width: "auto" },
+    attr: {},
   },
   {
-    key: "contactsPhone",
-    title: "电话",
-    type: "Input",
-    search: true,
+    item: { key: "contactsPhone", title: "电话", width: "auto" },
+    attr: {},
   },
 ];

+ 4 - 15
src/components/popover-select/components/ALLOCATION_PARAM.js

@@ -1,22 +1,11 @@
 // 货位
 export default [
-  // 树
-  // {
-  //   key: "id",
-  //   title: "ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "货位",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "货位" , width: "auto"},
+    attr: {},
   },
 ];

+ 5 - 15
src/components/popover-select/components/BALATYPE_PARAM.js

@@ -1,21 +1,11 @@
 // 结算方式
 export default [
-  // {
-  //   key: "id",
-  //   title: "结算方式ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "结算方式",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "结算方式" , width: "auto"},
+    attr: {},
   },
-];
+];

+ 4 - 8
src/components/popover-select/components/CONTACTS_PARAM.js

@@ -1,15 +1,11 @@
 // 客户部门
 export default [
   {
-    key: "code",
-    title: "人员编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "人员名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];

+ 13 - 16
src/components/popover-select/components/CURRENCY_PARAM.js

@@ -1,30 +1,27 @@
+// 币种
 export default [
   {
-    key: "name",
-    title: "币种",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "币种", width: "auto" },
+    attr: {},
   },
   {
-    key: "code",
-    title: "币种简称",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "币种简称" , width: "auto"},
+    attr: {},
   },
   {
-    key: "",
-    title: "单价精度",
+    item: { key: "", title: "单价精度" , width: "auto"},
+    attr: {},
   },
   {
-    key: "",
-    title: "单价舍入规则",
+    item: { key: "", title: "单价舍入规则" , width: "auto"},
+    attr: {},
   },
   {
-    key: "",
-    title: "金额精度",
+    item: { key: "", title: "金额精度" , width: "auto"},
+    attr: {},
   },
   {
-    key: "",
-    title: "金额舍入规则",
+    item: { key: "", title: "金额舍入规则", width: "auto" },
+    attr: {},
   },
 ];

+ 4 - 15
src/components/popover-select/components/CUSTOMERDEPT_PARAM.js

@@ -1,22 +1,11 @@
 // 客户部门
 export default [
-  // {
-  //   key: "id",
-  //   title: "客户部门ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "客户部门编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "客户部门名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];
-

+ 4 - 14
src/components/popover-select/components/CUSTOMER_PARAM.js

@@ -1,21 +1,11 @@
 // 收货客户
 export default [
-  // {
-  //   key: "id",
-  //   title: "收货客户ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "收货客户编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "收货客户名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];

+ 11 - 0
src/components/popover-select/components/CUSTOMER_PARAM_ZT.js

@@ -0,0 +1,11 @@
+// 收货客户
+export default [
+  {
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
+  },
+  {
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
+  },
+];

+ 4 - 8
src/components/popover-select/components/DEPT_PARAM.js

@@ -1,14 +1,10 @@
 export default [
   {
-    key: "code",
-    title: "组织编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "组织名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];

+ 7 - 0
src/components/popover-select/components/LINKMAN_PARAM.js

@@ -0,0 +1,7 @@
+// 收货客户
+export default [
+  {
+    item: { key: "name", title: "名称", width: "auto" },
+    attr: {},
+  },
+];

+ 11 - 0
src/components/popover-select/components/MANUFACTURER_PARAM.js

@@ -0,0 +1,11 @@
+// 生产厂家
+export default [
+  {
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
+  },
+  {
+    item: { key: "name", title: "名称", width: "auto" },
+    attr: {},
+  },
+];

+ 97 - 30
src/components/popover-select/components/MATERIAL_PARAM.js

@@ -1,48 +1,115 @@
 export default [
   {
-    key: "code",
-    title: "编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称", width: "auto" },
+    attr: {},
   },
   {
-    key: "specification",
-    title: "规格",
-    type: "Input",
-    search: true,
+    item: { key: "specification", title: "规格", width: "auto" },
+    attr: {},
   },
   {
-    key: "manufacturerIdName",
-    title: "生产厂家",
-    type: "Input",
-    search: true,
+    item: { key: "manufacturerIdName", title: "生产厂家", width: "auto" },
+    attr: {},
   },
   {
-    key: "unitIdName",
-    title: "单位",
-    type: "Input",
-    search: true,
+    item: { key: "unitIdName", title: "单位", width: "auto" },
+    attr: {},
   },
   {
-    key: "registrationNo",
-    title: "注册证号",
-    type: "ComputedInput",
-    computed: (prop) => {
-      return prop.materialMedcine.registrationNo;
+    item: { key: "registrationNo", title: "注册证号", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.registrationNo;
+      },
     },
   },
   {
-    key: "isDrug",
-    title: "物料药品属性",
-    type: "ComputedInput",
-    computed: (prop) => {
-      return prop.materialMedcine.isDrug == '0' ? 'Y' : 'N';
+    item: { key: "isMedicineYN", title: "医药物料", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.isMedicine == "0" ? "Y" : "N";
+      },
+    },
+  },
+  {
+    item: { key: "isDrug", title: "物料药品属性", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.isDrug == "0" ? "Y" : "N";
+      },
+    },
+  },
+  {
+    item: { key: "isDrugNumber", title: "药品", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.isDrug;
+      },
+    },
+  },
+  // {
+  //   item: {
+  //     key: "oriRegistrationNo",
+  //     title: "注册证号/备案凭证编号",
+  //     width: "auto",
+  //   },
+  //   attr: {
+  //     formatter: (prop) => {
+  //       return prop.materialMedcine.oriRegistrationNo;
+  //     },
+  //   },
+  // },
+  {
+    item: { key: "dosageFrom", title: "剂型", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.dosageFrom;
+      },
+    },
+  },
+  {
+    item: { key: "dosageFromName", title: "剂型名称", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.dosageFromName;
+      },
+    },
+  },
+  {
+    item: { key: "curingType", title: "养护类型", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.curingType;
+      },
+    },
+  },
+  {
+    item: { key: "medicalInstruments", title: "医疗器械", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.medicalInstruments;
+      },
+    },
+  },
+  {
+    item: { key: "ratifyBatchNo", title: "批准文号", width: "auto" },
+    attr: {
+      type:'ComputedInput',
+      formatter: (prop) => {
+        return prop.materialMedcine.ratifyBatchNo;
+      },
     },
   },
 ];

+ 10 - 0
src/components/popover-select/components/MK_CUSTOMER_BYPRINCIPAL.js

@@ -0,0 +1,10 @@
+export default [
+  {
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
+  },
+  {
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
+  },
+];

+ 11 - 0
src/components/popover-select/components/MK_SALESAREA_PARAM.js

@@ -0,0 +1,11 @@
+// 销售区域
+export default [
+  {
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
+  },
+  {
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
+  },
+];

+ 7 - 0
src/components/popover-select/components/MK_TARGET_CYCLE_PARAM.js

@@ -0,0 +1,7 @@
+// 目标周期
+export default [
+  {
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
+  },
+];

+ 7 - 0
src/components/popover-select/components/MK_TARGET_INDEX_PARAM.js

@@ -0,0 +1,7 @@
+// 目标指标
+export default [
+  {
+    item: { key: "name", title: "名称", width: "auto" },
+    attr: {},
+  },
+];

+ 7 - 0
src/components/popover-select/components/MK_TARGET_TEMPLATE_PARAM.js

@@ -0,0 +1,7 @@
+// 目标摸吧
+export default [
+  {
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
+  },
+];

+ 4 - 14
src/components/popover-select/components/OPERATING_PARAM.js

@@ -1,21 +1,11 @@
 // 经营性项目
 export default [
-  // {
-  //   key: "id",
-  //   title: "经营性项目ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "经营性项目编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "经营性项目名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];

+ 9 - 13
src/components/popover-select/components/ORG_PARAM.js

@@ -1,14 +1,10 @@
 export default [
-    {
-      key: "code",
-      title: "组织编码",
-      type: "Input",
-      search: true,
-    },
-    {
-      key: "name",
-      title: "组织名称",
-      type: "Input",
-      search: true,
-    },
-  ]
+  {
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
+  },
+  {
+    item: { key: "name", title: "名称", width: "auto" },
+    attr: {},
+  },
+];

+ 4 - 8
src/components/popover-select/components/PAYAGREEMENT_PARAM.js

@@ -1,14 +1,10 @@
 export default [
   {
-    key: "code",
-    title: "付款协议编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码" , width: "auto"},
+    attr: {},
   },
   {
-    key: "name",
-    title: "付款协议名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
 ];

+ 5 - 15
src/components/popover-select/components/PROCESSTYPE_PARAM.js

@@ -1,21 +1,11 @@
 // 处理方式
 export default [
-  // {
-  //   key: "id",
-  //   title: "ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "处理方式",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
-];
+];

+ 5 - 15
src/components/popover-select/components/PROJECT_PARAM.js

@@ -1,21 +1,11 @@
 // 在建工程项目
 export default [
-  // {
-  //   key: "id",
-  //   title: "在建工程项目ID",
-  //   type: "Input",
-  //   search: true,
-  // },
   {
-    key: "code",
-    title: "在建工程项目编码",
-    type: "Input",
-    search: true,
+    item: { key: "code", title: "编码", width: "auto" },
+    attr: {},
   },
   {
-    key: "name",
-    title: "在建工程项目名称",
-    type: "Input",
-    search: true,
+    item: { key: "name", title: "名称" , width: "auto"},
+    attr: {},
   },
-];
+];

Някои файлове не бяха показани, защото твърде много файлове са промени