chenrui 4 lat temu
rodzic
commit
431e6dbbb6
44 zmienionych plików z 7758 dodań i 88 usunięć
  1. 24 0
      src/api/allocLinkageOut.js
  2. 24 0
      src/api/allocWarehouse.js
  3. 10 2
      src/api/data.js
  4. 24 0
      src/api/stock.js
  5. 45 0
      src/api/supplier.js
  6. 77 0
      src/api/warehouse.js
  7. 490 30
      src/config/router.config.js
  8. 101 0
      src/views/allocationManagement/chainTransferOut/basicInfoModal.vue
  9. 107 0
      src/views/allocationManagement/chainTransferOut/detail.vue
  10. 385 0
      src/views/allocationManagement/chainTransferOut/edit.vue
  11. 220 0
      src/views/allocationManagement/chainTransferOut/list.vue
  12. 87 34
      src/views/dealerManagement/marketingDivisionSet/editModal.vue
  13. 8 17
      src/views/dealerManagement/marketingDivisionSet/list.vue
  14. 155 0
      src/views/dealerManagement/merchantInfoManagement/detailModal.vue
  15. 482 1
      src/views/dealerManagement/merchantInfoManagement/edit.vue
  16. 293 1
      src/views/dealerManagement/merchantInfoManagement/list.vue
  17. 161 0
      src/views/financialManagement/inventoryReview/detail.vue
  18. 174 0
      src/views/financialManagement/inventoryReview/list.vue
  19. 135 0
      src/views/financialManagement/returnConfirmation/detail.vue
  20. 186 0
      src/views/financialManagement/returnConfirmation/list.vue
  21. 199 0
      src/views/inventoryManagement/inventoryChecking/checkingTipsModal.vue
  22. 155 0
      src/views/inventoryManagement/inventoryChecking/checkingTypeModal.vue
  23. 183 0
      src/views/inventoryManagement/inventoryChecking/detail.vue
  24. 146 0
      src/views/inventoryManagement/inventoryChecking/financialAuditDetail.vue
  25. 219 0
      src/views/inventoryManagement/inventoryChecking/list.vue
  26. 187 0
      src/views/inventoryManagement/inventoryChecking/makeInventory.vue
  27. 144 0
      src/views/inventoryManagement/inventoryChecking/makeInventoryDetail.vue
  28. 108 0
      src/views/inventoryManagement/inventoryChecking/overall.vue
  29. 326 0
      src/views/inventoryManagement/inventoryChecking/selfDisk.vue
  30. 132 0
      src/views/inventoryManagement/inventoryQuery/detailModal.vue
  31. 200 0
      src/views/inventoryManagement/inventoryQuery/list.vue
  32. 196 0
      src/views/inventoryManagement/inventoryQuery/warehouseDetail.vue
  33. 156 0
      src/views/inventoryManagement/warehouse/editModal.vue
  34. 130 0
      src/views/inventoryManagement/warehouse/list.vue
  35. 193 0
      src/views/inventoryManagement/warehouse/storingLocation/editModal.vue
  36. 152 0
      src/views/inventoryManagement/warehouse/storingLocation/list.vue
  37. 109 0
      src/views/inventoryManagement/warehouseAllocation/basicInfoModal.vue
  38. 141 0
      src/views/inventoryManagement/warehouseAllocation/detail.vue
  39. 398 0
      src/views/inventoryManagement/warehouseAllocation/edit.vue
  40. 219 0
      src/views/inventoryManagement/warehouseAllocation/list.vue
  41. 338 1
      src/views/productManagement/productInfo/edit.vue
  42. 2 2
      src/views/salesManagement/examineVerify/list.vue
  43. 392 0
      src/views/supplierManagement/supplierInfo/edit.vue
  44. 145 0
      src/views/supplierManagement/supplierInfo/list.vue

+ 24 - 0
src/api/allocLinkageOut.js

@@ -0,0 +1,24 @@
+import { axios } from '@/utils/request'
+
+//  连锁调拨调出列表  分页
+export const allocLinkageOutList = (params) => {
+  const url = `/allocLinkageOut/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  连锁调拨调出详情列表  分页
+export const allocLinkageOutDetailList = (params) => {
+  const url = `/allocLinkageOut/queryDetailPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}

+ 24 - 0
src/api/allocWarehouse.js

@@ -0,0 +1,24 @@
+import { axios } from '@/utils/request'
+
+//  仓库调拨列表  分页
+export const allocWarehouseList = (params) => {
+  const url = `/allocWarehouse/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  仓库调拨详情列表  分页
+export const allocWarehouseDetailList = (params) => {
+  const url = `/allocWarehouse/queryDetailPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}

+ 10 - 2
src/api/data.js

@@ -9,7 +9,7 @@ export function login (parameter) {
 }
 
 export const listLookUp = params => {
-  let url = `/lookup/queryLike`
+  const url = `/lookup/queryLike`
   return axios({
     url: url,
     data: params,
@@ -18,7 +18,7 @@ export const listLookUp = params => {
 }
 
 export const getLookUpData = (params) => {
-  let url = `/lookupItem/query/${params.pageNo}/${params.pageSize}`
+  const url = `/lookupItem/query/${params.pageNo}/${params.pageSize}`
   delete params.pageNo
   delete params.pageSize
   return axios({
@@ -127,3 +127,11 @@ export const getDistrictByCity = params => {
     method: 'post'
   })
 }
+// 查询省/市/区
+export const getArea = (params) => {
+  return axios({
+    url: `/area/queryList`,
+    data: params,
+    method: 'post'
+  })
+}

+ 24 - 0
src/api/stock.js

@@ -0,0 +1,24 @@
+import { axios } from '@/utils/request'
+
+//  库存列表  分页
+export const stockList = (params) => {
+  const url = `/stock/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  库存详情列表  分页
+export const stockDetailList = (params) => {
+  const url = `/stock/queryDetailPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}

+ 45 - 0
src/api/supplier.js

@@ -0,0 +1,45 @@
+import { axios } from '@/utils/request'
+
+//  供应商 列表  有分页
+export const supplierList = (params) => {
+  const url = `/supplier/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  供应商 列表  无分页
+export const supplierAllList = (params) => {
+  return axios({
+    url: '/supplier/queryList',
+    data: params,
+    method: 'post'
+  })
+}
+//  供应商 详情
+export const supplierDetail = (params) => {
+  return axios({
+    url: `/supplier/findById/${params.id}`,
+    data: params,
+    method: 'get'
+  })
+}
+//  供应商 保存
+export const supplierSave = (params) => {
+  return axios({
+    url: '/supplier/save',
+    data: params,
+    method: 'post'
+  })
+}
+//  供应商 删除
+export const supplierDel = (params) => {
+  return axios({
+    url: `/supplier/delete/${params.id}`,
+    data: params,
+    method: 'post'
+  })
+}

+ 77 - 0
src/api/warehouse.js

@@ -0,0 +1,77 @@
+import { axios } from '@/utils/request'
+
+//  仓库列表  有分页
+export const warehouseList = (params) => {
+  const url = `/warehouse/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  仓库列表  无分页
+export const warehouseAllList = (params) => {
+  const url = '/warehouse/queryList'
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+// 新增/编辑仓库
+export const warehouseSave = params => {
+  return axios({
+    url: '/warehouse/save',
+    data: params,
+    method: 'post'
+  })
+}
+// 删除仓库
+export const warehouseDel = params => {
+  return axios({
+    url: `/warehouse/delete/${params.id}`,
+    data: {},
+    method: 'get'
+  })
+}
+
+//  仓位列表  有分页
+export const warehouseLocList = (params) => {
+  const url = `/warehouseLoc/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  仓位列表  无分页
+export const warehouseLocAllList = (params) => {
+  const url = '/warehouseLoc/queryList'
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 新增/编辑仓位
+export const warehouseLocSave = params => {
+  return axios({
+    url: '/warehouseLoc/save',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 删除仓位
+export const warehouseLocDel = params => {
+  return axios({
+    url: `/warehouseLoc/delete/${params.id}`,
+    data: {},
+    method: 'get'
+  })
+}

+ 490 - 30
src/config/router.config.js

@@ -511,49 +511,499 @@ export const asyncRouterMap = [
           }
         ]
       },
-      // 菜单管理
+      //  供应商管理
       {
-        path: '/menusAuth',
-        redirect: '/bnSetting/menusAuth',
+        path: '/supplierManagement',
+        redirect: '/supplierManagement/supplierInfo',
         component: PageView,
         meta: {
-          title: '菜单管理',
-          icon: 'bars',
-          permission: 'M_menusAuth_0'
+          title: '供应商管理',
+          icon: 'team'
+          // permission: 'M_shop'
         },
         children: [
           {
-            path: '/menusAuth/storeMenus',
-            name: 'storeMenus',
-            component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/storeMenus.vue'),
+            path: '/supplierManagement/supplierInfo',
+            redirect: '/supplierManagement/supplierInfo/list',
+            name: 'supplierInfo',
+            component: RouteView,
             meta: {
-              title: '连锁菜单管理',
-              icon: 'shop',
-              permission: 'M_menusAuth_lsMenus'
-            }
+              title: '供应商管理',
+              icon: 'team'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'supplierInfoList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/supplierManagement/supplierInfo/list.vue'),
+                meta: {
+                  title: '供应商列表',
+                  icon: 'team',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'add',
+                name: 'supplierInfoAdd',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/supplierManagement/supplierInfo/edit.vue'),
+                meta: {
+                  title: '新增供应商',
+                  icon: 'team',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'edit/:id',
+                name: 'supplierInfoEdit',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/supplierManagement/supplierInfo/edit.vue'),
+                meta: {
+                  title: '编辑供应商',
+                  icon: 'team',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          }
+        ]
+      },
+      // 库存管理
+      {
+        path: '/inventoryManagement',
+        redirect: '/inventoryManagement/inventoryQuery',
+        component: PageView,
+        meta: {
+          title: '库存管理',
+          icon: 'shop'
+          // permission: 'M_shop'
+        },
+        children: [
+          {
+            path: '/inventoryManagement/inventoryQuery',
+            redirect: '/inventoryManagement/inventoryQuery/list',
+            name: 'inventoryQuery',
+            component: RouteView,
+            meta: {
+              title: '库存查询',
+              icon: 'monitor'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'inventoryQueryList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryQuery/list.vue'),
+                meta: {
+                  title: '库存列表',
+                  icon: 'monitor',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'warehouseDetail/:id',
+                name: 'inventoryQueryWarehouseDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryQuery/warehouseDetail.vue'),
+                meta: {
+                  title: '出入库明细',
+                  icon: 'monitor',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
           },
-          // {
-          //   path: '/menusAuth/adminMenus',
-          //   name: 'adminMenus',
-          //   component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/adminMenus.vue'),
-          //   meta: {
-          //     title: 'boss菜单管理',
-          //     icon: 'appstore',
-          //     // permission: 'M_menusAuth_adminMenus'
-          //   }
-          // },
           {
-            path: '/menusAuth/menu',
-            name: 'powerMenu',
-            component: () => import(/* webpackChunkName: "auth" */ '@/views/power/menu/menu.vue'),
+            path: '/inventoryManagement/warehouseAllocation',
+            redirect: '/inventoryManagement/warehouseAllocation/list',
+            name: 'warehouseAllocation',
+            component: RouteView,
             meta: {
-              title: 'IT菜单管理',
-              icon: 'profile',
-              permission: 'M_menusAuth_menu'
-            }
+              title: '仓库调拨',
+              icon: 'gateway'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'warehouseAllocationList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouseAllocation/list.vue'),
+                meta: {
+                  title: '仓库调拨列表',
+                  icon: 'gateway',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'add',
+                name: 'warehouseAllocationAdd',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouseAllocation/edit.vue'),
+                meta: {
+                  title: '新增仓库调拨',
+                  icon: 'gateway',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'edit/:id',
+                name: 'warehouseAllocationEdit',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouseAllocation/edit.vue'),
+                meta: {
+                  title: '编辑仓库调拨',
+                  icon: 'gateway',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'detail/:id/:sn',
+                name: 'warehouseAllocationDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouseAllocation/detail.vue'),
+                meta: {
+                  title: '仓库调拨详情',
+                  icon: 'gateway',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          },
+          {
+            path: '/inventoryManagement/warehouse',
+            redirect: '/inventoryManagement/warehouse/list',
+            name: 'warehouse',
+            component: RouteView,
+            meta: {
+              title: '仓库管理',
+              icon: 'deployment-unit'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'warehouseList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouse/list.vue'),
+                meta: {
+                  title: '仓库列表',
+                  icon: 'deployment-unit',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: '/inventoryManagement/storingLocation/:sn',
+                name: 'storingLocationList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/warehouse/storingLocation/list.vue'),
+                meta: {
+                  title: '仓位列表',
+                  icon: 'deployment-unit',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          },
+          {
+            path: '/inventoryManagement/inventoryChecking',
+            redirect: '/inventoryManagement/inventoryChecking/list',
+            name: 'inventoryChecking',
+            component: RouteView,
+            meta: {
+              title: '库存盘点',
+              icon: 'reconciliation'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'inventoryCheckingList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/list.vue'),
+                meta: {
+                  title: '库存盘点列表',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'overall/:id',
+                name: 'inventoryCheckingOverall',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/overall.vue'),
+                meta: {
+                  title: '盘点人盘点【全盘】',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'selfDisk/:id',
+                name: 'inventoryCheckingSelfDisk',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/selfDisk.vue'),
+                meta: {
+                  title: '盘点人盘点【自选盘点】',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'detail/:id',
+                name: 'inventoryCheckingDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/detail.vue'),
+                meta: {
+                  title: '库存盘点详情',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'makeInventory/:id',
+                name: 'inventoryCheckingMakeInventory',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/makeInventory.vue'),
+                meta: {
+                  title: '待盘点【盘点】',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'makeInventory/detail/:id', /* 待盘点【盘点】详情  */
+                name: 'inventoryCheckingMakeInventoryDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/makeInventoryDetail.vue'),
+                meta: {
+                  title: '库存盘点详情',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'financialAudit/detail/:id', /* 财务审核详情  */
+                name: 'inventoryCheckingFinancialAuditDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/inventoryManagement/inventoryChecking/financialAuditDetail.vue'),
+                meta: {
+                  title: '库存盘点详情',
+                  icon: 'reconciliation',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
           }
         ]
       },
+      // 调拨管理
+      {
+        path: '/allocationManagement',
+        redirect: '/allocationManagement/chainTransferOut',
+        component: PageView,
+        meta: {
+          title: '调拨管理',
+          icon: 'cluster'
+          // permission: 'M_shop'
+        },
+        children: [
+          {
+            path: '/allocationManagement/chainTransferOut',
+            redirect: '/allocationManagement/chainTransferOut/list',
+            name: 'chainTransferOut',
+            component: RouteView,
+            meta: {
+              title: '连锁调出',
+              icon: 'pull-request'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'chainTransferOutList',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/allocationManagement/chainTransferOut/list.vue'),
+                meta: {
+                  title: '连锁调出列表',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'add',
+                name: 'chainTransferOutAdd',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/allocationManagement/chainTransferOut/edit.vue'),
+                meta: {
+                  title: '新增连锁调出',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'edit/:id',
+                name: 'chainTransferOutEdit',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/allocationManagement/chainTransferOut/edit.vue'),
+                meta: {
+                  title: '编辑连锁调出',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              },
+              {
+                path: 'detail/:id/:sn',
+                name: 'chainTransferOutDetail',
+                component: () => import(/* webpackChunkName: "shop" */ '@/views/allocationManagement/chainTransferOut/detail.vue'),
+                meta: {
+                  title: '连锁调出详情',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          }
+        ]
+      },
+      // 财务管理
+      {
+        path: '/financialManagement',
+        redirect: '/financialManagement/inventoryReview',
+        component: PageView,
+        meta: {
+          title: '财务管理',
+          icon: 'property-safety'
+          // permission: 'M_shop'
+        },
+        children: [
+          {
+            path: '/financialManagement/inventoryReview',
+            redirect: '/financialManagement/inventoryReview/list',
+            name: 'inventoryReview',
+            component: RouteView,
+            meta: {
+              title: '盘点审核',
+              icon: 'laptop'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'inventoryReviewList',
+                component: () => import(/* webpackChunkName: "financialManagement" */ '@/views/financialManagement/inventoryReview/list.vue'),
+                meta: {
+                  title: '盘点审核列表',
+                  icon: 'laptop',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'detail/:id',
+                name: 'inventoryReviewDetail',
+                component: () => import(/* webpackChunkName: "financialManagement" */ '@/views/financialManagement/inventoryReview/detail.vue'),
+                meta: {
+                  title: '盘点审核详情',
+                  icon: 'laptop',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          },
+          {
+            path: '/financialManagement/returnConfirmation',
+            redirect: '/financialManagement/returnConfirmation/list',
+            name: 'returnConfirmation',
+            component: RouteView,
+            meta: {
+              title: '退货确认',
+              icon: 'pull-request'
+              // permission: 'M_goodsManage_list'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'returnConfirmationList',
+                component: () => import(/* webpackChunkName: "financialManagement" */ '@/views/financialManagement/returnConfirmation/list.vue'),
+                meta: {
+                  title: '退货确认列表',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'M_goodsManage_list'
+                }
+              },
+              {
+                path: 'detail/:id',
+                name: 'returnConfirmationDetail',
+                component: () => import(/* webpackChunkName: "financialManagement" */ '@/views/financialManagement/returnConfirmation/detail.vue'),
+                meta: {
+                  title: '退货确认详情',
+                  icon: 'pull-request',
+                  hidden: true
+                  // permission: 'B_goodsManage_edit'
+                }
+              }
+            ]
+          }
+        ]
+      },
+      // // 菜单管理
+      // {
+      //   path: '/menusAuth',
+      //   redirect: '/bnSetting/menusAuth',
+      //   component: PageView,
+      //   meta: {
+      //     title: '菜单管理',
+      //     icon: 'bars'
+      //     // permission: 'M_menusAuth_0'
+      //   },
+      //   children: [
+      //     {
+      //       path: '/menusAuth/storeMenus',
+      //       name: 'storeMenus',
+      //       component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/storeMenus.vue'),
+      //       meta: {
+      //         title: '连锁菜单管理',
+      //         icon: 'shop'
+      //         // permission: 'M_menusAuth_lsMenus'
+      //       }
+      //     },
+      //     // {
+      //     //   path: '/menusAuth/adminMenus',
+      //     //   name: 'adminMenus',
+      //     //   component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/adminMenus.vue'),
+      //     //   meta: {
+      //     //     title: 'boss菜单管理',
+      //     //     icon: 'appstore',
+      //     //     // permission: 'M_menusAuth_adminMenus'
+      //     //   }
+      //     // },
+      //     {
+      //       path: '/menusAuth/menu',
+      //       name: 'powerMenu',
+      //       component: () => import(/* webpackChunkName: "auth" */ '@/views/power/menu/menu.vue'),
+      //       meta: {
+      //         title: 'IT菜单管理',
+      //         icon: 'profile'
+      //         // permission: 'M_menusAuth_menu'
+      //       }
+      //     }
+      //   ]
+      // },
       // 权限管理
       {
         path: '/auth',
@@ -584,6 +1034,16 @@ export const asyncRouterMap = [
               icon: 'solution'
               // permission: 'M_auth_roleList'
             }
+          },
+          {
+            path: '/menusAuth/adminMenus',
+            name: 'adminMenus',
+            component: () => import(/* webpackChunkName: "bnSetting" */ '@/views/bnSetting/menu/adminMenus.vue'),
+            meta: {
+              title: '菜单管理',
+              icon: 'appstore'
+              // permission: 'M_menusAuth_adminMenus'
+            }
           }
         ]
       },

+ 101 - 0
src/views/allocationManagement/chainTransferOut/basicInfoModal.vue

@@ -0,0 +1,101 @@
+<template>
+	<a-modal centered class="chainTransferOut-basicInfo-modal" :footer="null" :maskClosable="false" title="新增连锁调出单" v-model="isShow" @cancle="isShow = false" width="80%">
+		<a-form-model
+			id="chainTransferOut-basicInfo-form"
+			ref="ruleForm"
+			:model="form"
+			:rules="rules"
+			:label-col="formItemLayout.labelCol"
+			:wrapper-col="formItemLayout.wrapperCol"
+		>
+			<a-form-model-item label="调出产品类型" prop="sort">
+				<v-select
+					v-model="form.billStatus"
+					ref="billStatus"
+					id="chainTransferOut-basicInfo-billStatus"
+					code="PAYMENT_TYPE"
+					placeholder="请选择调出产品类型"
+					allowClear
+				></v-select>
+			</a-form-model-item>
+			<a-form-model-item label="调往对象" prop="state">
+			  <a-select placeholder="请选择调往对象" allowClear v-model="form.dataSourceNo" :showSearch="true" option-filter-prop="children" :filter-option="filterOption">
+			  	<a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+			  </a-select>
+			</a-form-model-item>
+			<a-form-model-item label="备注" prop="remarks">
+				<a-textarea id="chainTransferOut-basicInfo-remarks" :maxLength="500" v-model="form.remarks" placeholder="请输入备注(最多500个字符)" allowClear />
+			</a-form-model-item>
+		</a-form-model>
+		<div class="btn-cont">
+			<a-button type="primary" id="chainTransferOut-basicInfo-modal-save" @click="handleSave">保存</a-button>
+			<a-button id="chainTransferOut-basicInfo-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+		</div>
+	</a-modal>
+</template>
+
+<script>
+import { VSelect } from '@/components';
+export default {
+	name: 'chainTransferOutBasicInfoModal',
+	components: { VSelect },
+	props: {
+		openModal: {
+			//  弹框显示状态
+			type: Boolean,
+			default: false
+		}
+	},
+	data() {
+		return {
+			isShow: this.openModal, //  是否打开弹框
+			formItemLayout: {
+				labelCol: { span: 6 },
+				wrapperCol: { span: 16 }
+			},
+			form: {
+				name: '', // 仓库名称
+				sort: '' //  排序
+			},
+			rules: {
+				name: [{ required: true, message: '请选择调出产品类型', trigger: 'change' }]
+			},
+			brandData: [] //  供应商  下拉数据
+		};
+	},
+	methods: {
+		//  保存
+		handleSave() {
+			this.isShow = false
+			this.$emit('ok')
+		},
+		filterOption(input, option) {
+			return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+		}
+	},
+	watch: {
+		//  父页面传过来的弹框状态
+		openModal(newValue, oldValue) {
+			this.isShow = newValue
+		},
+		//  重定义的弹框状态
+		isShow(newValue, oldValue) {
+			if (!newValue) {
+				this.$emit('close')
+			}
+		}
+	}
+};
+</script>
+
+<style lang="less">
+.chainTransferOut-basicInfo-modal {
+	.ant-modal-body {
+		padding: 40px 40px 24px;
+	}
+	.btn-cont {
+		text-align: center;
+		margin: 35px 0 10px;
+	}
+}
+</style>

+ 107 - 0
src/views/allocationManagement/chainTransferOut/detail.vue

@@ -0,0 +1,107 @@
+<template>
+  <div class="chainTransferOutDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="chainTransferOutDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="chainTransferOutDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="chainTransferOutDetail-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="chainTransferOutDetail-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <a-card size="small" :bordered="false" class="chainTransferOutDetail-cont">
+      <!-- 总计 -->
+      <a-alert type="info" showIcon style="margin-bottom:15px">
+        <div slot="message">审核状态: <strong>支持市级</strong>,完结状态: <strong>支持市级</strong>,调出对象: <strong>支持市级</strong>,调入单号: <strong>2121212</strong>,总成本:¥<strong>6.33</strong>,总数量: <strong>6</strong> </div>
+      </a-alert>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ x: 1085 }"
+        bordered>
+        <!-- 成本小计 -->
+        <template slot="totalCost" slot-scope="text, record">
+          <span>{{ (record.outCost * record.outQty) || 0 }}</span>
+        </template>
+      </s-table>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { allocLinkageOutDetailList } from '@/api/allocLinkageOut'
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: {
+        allocationLinkageOutSn: this.$route.params.sn
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      brandData: [], //  产品品牌  下拉数据
+      typeData: [], //  产品类别  下拉数据
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true },
+        { title: '原厂编码', dataIndex: 'productOrigCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '成本价(¥)', dataIndex: 'outCost', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '调出仓库', dataIndex: 'warehouseName', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出数量', dataIndex: 'outQty', width: 150, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '成本小计(¥)', scopedSlots: { customRender: 'totalCost' }, width: 135, align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return allocLinkageOutDetailList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      }
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  提交
+    handleSubmit () {},
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/allocationManagement/chainTransferOut/list' })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .chainTransferOutDetail-wrap{
+    .chainTransferOutDetail-back{
+      margin-bottom: 15px;
+    }
+    .chainTransferOutDetail-cont{
+      margin-bottom: 15px;
+    }
+  }
+</style>

+ 385 - 0
src/views/allocationManagement/chainTransferOut/edit.vue

@@ -0,0 +1,385 @@
+<template>
+  <div class="chainTransferOutEdit-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="chainTransferOutEdit-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="chainTransferOutEdit-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="chainTransferOutEdit-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="chainTransferOutEdit-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="chainTransferOutEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1">
+          <template slot="header">
+            基础信息
+            <a-button
+              type="primary"
+              shape="circle"
+              size="small"
+              icon="edit"
+              class="edit-circle-btn"
+              id="chainTransferOutEdit-circle-btn"
+              @click.stop="handleEditInfo" />
+          </template>
+          <a-descriptions :column="3">
+            <a-descriptions-item label="调往对象">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 选择产品 -->
+    <a-card size="small" :bordered="false" class="chainTransferOutEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="选择产品">
+          <!-- 筛选条件 -->
+          <div class="table-page-search-wrapper">
+            <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+              <a-row :gutter="15">
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="产品编码" prop="name">
+                    <a-input id="chainTransferOutEdit-name" v-model="queryParam.name" placeholder="请输入产品编码" allowClear />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="产品名称" prop="name">
+                    <a-input id="chainTransferOutEdit-name" v-model="queryParam.name" placeholder="请输入产品名称" allowClear />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="原厂编码" prop="name">
+                    <a-input id="chainTransferOutEdit-name" v-model="queryParam.name" placeholder="请输入原厂编码" allowClear />
+                  </a-form-item>
+                </a-col>
+                <template v-if="advanced">
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品品牌">
+                      <a-select
+                        placeholder="请选择"
+                        id="chainTransferOutEdit-state"
+                        allowClear
+                        v-model="queryParam.dataSourceNo"
+                        :showSearch="true"
+                        option-filter-prop="children"
+                        :filter-option="filterOption">
+                        <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                      </a-select>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品类别">
+                      <a-cascader :options="typeData" id="chainTransferOutEdit-state" placeholder="请选择产品类别" allowClear v-model="queryParam.brand" />
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="仓库">
+                      <v-select
+                        v-model="queryParam.billStatus"
+                        ref="billStatus"
+                        id="chainTransferOutEdit-billStatus"
+                        code="PAYMENT_TYPE"
+                        placeholder="请选择仓库"
+                        allowClear></v-select>
+                    </a-form-item>
+                  </a-col>
+                </template>
+                <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                  <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="chainTransferOutEdit-refresh">查询</a-button>
+                  <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="chainTransferOutEdit-reset">重置</a-button>
+                  <a @click="advanced=!advanced" style="margin-left: 8px">
+                    {{ advanced ? '收起' : '展开' }}
+                    <a-icon :type="advanced ? 'up' : 'down'"/>
+                  </a>
+                </a-col>
+              </a-row>
+            </a-form>
+          </div>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            :scroll="{ x: 1530 }"
+            bordered>
+            <!-- 调出数量 -->
+            <template slot="transferOutQuantity" slot-scope="text, record">
+              <a-input-number
+                id="chainTransferOutEdit-storageQuantity"
+                :value="record.storageQuantity"
+                :precision="0"
+                :min="0"
+                :max="999999"
+                placeholder="请输入" />
+            </template>
+            <!-- 操作 -->
+            <template slot="action" slot-scope="text, record">
+              <a-button size="small" type="link" @click="handleAdd(record)" id="chainTransferOutEdit-add-btn">添加</a-button>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 已选产品 -->
+    <a-card size="small" :bordered="false" class="chainTransferOutEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="已选产品">
+          <!-- 总计 -->
+          <a-alert type="info" showIcon style="margin-bottom:15px">
+            <div slot="message">总成本:¥<strong>6.33</strong>,总数量: <strong>6</strong> ,总款数: <strong>6</strong> </div>
+          </a-alert>
+          <!-- 筛选条件 -->
+          <a-row :gutter="15" justify="space-between">
+            <a-col :span="17">
+              <div class="table-page-search-wrapper">
+                <a-form layout="inline" @keyup.enter.native="$refs.chooseTable.refresh(true)">
+                  <a-row :gutter="15">
+                    <a-col :md="9" :sm="24">
+                      <a-form-item label="产品编码" prop="name">
+                        <a-input id="chainTransferOutEdit-name" v-model="queryParam.name" placeholder="请输入产品编码" allowClear />
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="9" :sm="24">
+                      <a-form-item label="产品名称" prop="name">
+                        <a-input id="chainTransferOutEdit-name" v-model="queryParam.name" placeholder="请输入产品名称" allowClear />
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                      <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="disabled" id="chainTransferOutList-refresh">查询</a-button>
+                      <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="chainTransferOutList-reset">重置</a-button>
+                    </a-col>
+                  </a-row>
+                </a-form>
+              </div>
+            </a-col>
+            <a-col :span="7">
+              <a-button size="small" style="margin-left: 8px" id="chainTransferOutEdit-import-btn">导入明细</a-button>
+              <a-button size="small" type="danger" style="margin-left: 8px" id="chainTransferOutEdit-del-all-btn">整单删除</a-button>
+            </a-col>
+          </a-row>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="chooseTable"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="chooseColumns"
+            :data="chooseLoadData"
+            :scroll="{ x: 1545 }"
+            bordered>
+            <!-- 调出数量 -->
+            <template slot="transferOutQuantity" slot-scope="text, record">
+              <a-input-number
+                id="chainTransferOutEdit-storageQuantity"
+                :value="record.storageQuantity"
+                :precision="0"
+                :min="0"
+                :max="999999"
+                placeholder="请输入" />
+            </template>
+            <!-- 操作 -->
+            <template slot="action" slot-scope="text, record">
+              <a-button size="small" type="link" @click="handleDel(record)" id="chainTransferOutEdit-del-btn">删除</a-button>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="chainTransferOutEdit-submit" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+    <!-- 选择基本信息弹框 -->
+    <basic-info-modal :openModal="openModal" @ok="handleOk" @close="openModal=false" />
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+import basicInfoModal from './basicInfoModal.vue'
+export default {
+  components: { STable, VSelect, basicInfoModal },
+  data () {
+    return {
+      queryParam: {
+
+      },
+      brandData: [], //  产品品牌  下拉数据
+      typeData: [], //  产品类别  下拉数据
+      disabled: false, //  查询、重置按钮是否可操作
+      advanced: false, // 高级搜索 展开/关闭
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center' },
+        { title: '产品名称', dataIndex: 'custNahme', align: 'center', ellipsis: true },
+        { title: '原厂编码', dataIndex: 'totalP', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌', dataIndex: 'custsNsame', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'custsNdame', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'custsNafme', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '成本价(¥)', dataIndex: 'storageQuantity', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存数量', dataIndex: 'custsNagme', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'custsNsagme', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出数量', scopedSlots: { customRender: 'transferOutQuantity' }, width: 150, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      // 表头
+      chooseColumns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'custNahme', align: 'center', ellipsis: true },
+        { title: '原厂编码', dataIndex: 'totalP', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌', dataIndex: 'custsNsame', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'custsNdame', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'custsNafme', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '成本价(¥)', dataIndex: 'storageQuantity', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'custsNsagme', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出数量', scopedSlots: { customRender: 'transferOutQuantity' }, width: 150, align: 'center' },
+        { title: '成本小计(¥)', dataIndex: 'custsNagme', width: 115, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      chooseLoadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', custssName: 0, creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false // 选择基本信息弹框是否显示
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  添加
+    handleAdd (row) {},
+    //  删除
+    handleDel (row) {},
+    //  编辑基本信息
+    handleEditInfo () {
+      this.openModal = true
+    },
+    //  基本信息  保存
+    handleOk () {
+
+    },
+    //  提交
+    handleSubmit () {},
+    //  导入明细
+    handleImport () {
+      console.log(333)
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/allocationManagement/chainTransferOut/list' })
+    },
+    filterOption (input, option) {
+      	return (
+      		option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      	)
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.openModal = false
+    })
+  }
+}
+</script>
+
+<style lang="less">
+  .chainTransferOutEdit-wrap{
+    .chainTransferOutEdit-back{
+      margin-bottom: 15px;
+    }
+    .chainTransferOutEdit-cont{
+      margin-bottom: 15px;
+      .sub-title{
+        font-size: 12px;
+        color: #808695;
+        margin-left: 10px;
+      }
+      .tag-txt{
+        font-size: 12px;
+        color: #ed1c24;
+      }
+      .edit-circle-btn{
+        margin-left: 15px;
+        i{
+          vertical-align: text-bottom;
+        }
+      }
+      .import-btn{
+        margin-left: 15px;
+      }
+    }
+  }
+</style>

+ 220 - 0
src/views/allocationManagement/chainTransferOut/list.vue

@@ -0,0 +1,220 @@
+<template>
+  <a-card size="small" :bordered="false" class="chainTransferOutList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="创建时间">
+              <a-range-picker
+                style="width:100%"
+                id="chainTransferOutList-createDate"
+                :disabledDate="disabledDate"
+                v-model="createDate"
+                :format="dateFormat"
+                :placeholder="['开始时间', '结束时间']" />
+            </a-form-item>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="调往对象">
+              <v-select
+                v-model="queryParam.putTenantName"
+                ref="putTenantName"
+                id="chainTransferOutList-putTenantName"
+                code="PAYMENT_TYPE"
+                placeholder="请选择调往对象"
+                allowClear></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="调出产品类型">
+              <v-select
+                v-model="queryParam.allocationType"
+                ref="allocationType"
+                id="chainTransferOutList-allocationType"
+                code="PAYMENT_TYPE"
+                placeholder="请选择调出产品类型"
+                allowClear></v-select>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="单据状态">
+                <v-select
+                  v-model="queryParam.state"
+                  ref="state"
+                  id="chainTransferOutList-state"
+                  code="PAYMENT_TYPE"
+                  placeholder="请选择单据状态"
+                  allowClear></v-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="chainTransferOutList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="chainTransferOutList-reset">重置</a-button>
+            <a @click="advanced=!advanced" style="margin-left: 8px">
+              {{ advanced ? '收起' : '展开' }}
+              <a-icon :type="advanced ? 'up' : 'down'"/>
+            </a>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="chainTransferOutList-add" type="primary" @click="handleEdit()">新增调出单</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1500 }"
+      bordered>
+      <!-- 状态 -->
+      <template slot="state" slot-scope="text, record">
+        <a-tag :color="record.state==1?'green':'red'" >{{ record.state==1? '待提交': '待审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleExamine(record)" id="chainTransferOutList-examine-btn">审核</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="chainTransferOutList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleOut(record)" id="chainTransferOutList-out-btn">出库</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="chainTransferOutList-detail-btn">详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="chainTransferOutList-del-btn">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑 -->
+    <basic-info-modal :openModal="openModal" @ok="handleOk" @close="openModal=false" />
+  </a-card>
+</template>
+
+<script>
+import { allocLinkageOutList } from '@/api/allocLinkageOut'
+import { STable, VSelect } from '@/components'
+import basicInfoModal from './basicInfoModal.vue'
+export default {
+  components: { STable, VSelect, basicInfoModal },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      createDate: undefined, //  创建时间
+      queryParam: { //  查询条件
+        putTenantName: undefined, //  调往对象
+        allocationType: undefined, //  调出产品类型
+        state: undefined //  单据状态
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      dateFormat: 'YYYY-MM-DD',
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center' },
+        { title: '连锁调出单号', dataIndex: 'allocationLinkageOutNo', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调往对象', dataIndex: 'putTenantName', width: 140, align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '总款数', dataIndex: 'productTotalCategory', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总数量', dataIndex: 'productTotalQty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总成本', dataIndex: 'productTotalCost', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '审核时间', dataIndex: 'auditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调拨类型', dataIndex: 'allocationType', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', scopedSlots: { customRender: 'state' }, width: 100, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 260, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.queryParam = {}
+        return allocLinkageOutList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      openModal: false, //  新增编辑  弹框
+      itemId: '' //  当前品牌id
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.putTenantName = undefined
+      this.queryParam.allocationType = undefined
+      this.queryParam.state = undefined
+      this.createDate = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  基本信息  保存
+    handleOk () {
+      this.$router.push({ path: `/allocationManagement/chainTransferOut/add` })
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  出库
+    handleOut (row) {
+
+    },
+    //  审核
+    handleExamine () {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要审核通过吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  详情
+    handleDetail (row) {
+      this.$router.push({ path: `/allocationManagement/chainTransferOut/detail/${row.id}/${row.allocationLinkageOutSn}` })
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      this.openModal = true
+    }
+  }
+}
+</script>

+ 87 - 34
src/views/dealerManagement/marketingDivisionSet/editModal.vue

@@ -1,7 +1,7 @@
 <template>
   <a-modal
     centered
-    class="productBrandEdit-modal"
+    class="marketingDivisionSetEdit-modal"
     :footer="null"
     :maskClosable="false"
     :title="modalTit"
@@ -11,49 +11,40 @@
     <!-- 表单 -->
     <div>
       <a-form-model
-        id="productBrandEdit-form"
+        id="marketingDivisionSetEdit-form"
         ref="ruleForm"
         :model="form"
         :rules="rules"
         :label-col="formItemLayout.labelCol"
         :wrapper-col="formItemLayout.wrapperCol"
       >
-        <a-form-model-item label="品牌名称" prop="productBrandName">
+        <a-form-model-item label="分区名称" prop="productBrandName">
           <a-input
-            id="productBrandEdit-productBrandName"
+            id="marketingDivisionSetEdit-productBrandName"
             :maxLength="30"
             v-model="form.productBrandName"
-            placeholder="请输入产品品牌名称(最多30个字符)"
+            placeholder="请输入分区名称(最多30个字符)"
             allowClear />
         </a-form-model-item>
-        <a-form-model-item label="品牌类别" prop="productBrandName">
-          <a-select placeholder="请选择品牌类别" id="productBrandEdit-level" allowClear v-model="form.level">
+        <a-form-model-item label="省份/市" prop="productBrandName">
+          <!-- <a-select placeholder="请选择省份/市" id="productBrandEdit-level" allowClear v-model="form.level">
             <a-select-option v-for="item in productBrandList" :key="item.productBrandSn" :value="item.productBrandSn">{{ item.productBrandName }}</a-select-option>
-          </a-select>
-        </a-form-model-item>
-        <a-form-model-item label="排序字母" prop="productBrandName">
-          <a-select placeholder="请选择排序字母" id="productBrandEdit-level" allowClear v-model="form.levels">
-            <a-select-option v-for="item in productBrandList" :key="item.productBrandSn" :value="item.productBrandSn">{{ item.productBrandName }}</a-select-option>
-          </a-select>
-        </a-form-model-item>
-        <a-form-model-item label="品牌图片" prop="productBrandName">
-          <Upload
-            class="upload"
-            id="productBrandEdit-image"
-            v-model="form.image"
-            ref="image"
-            :fileSize="0.25"
-            @change="changeHomeImage"
-            listType="picture-card" ></Upload>
-          <span class="upload-desc">说明:图片比例1:1,尺寸为120*120px,可上传1张。</span>
-        </a-form-model-item>
-        <a-form-model-item label="品牌介绍" prop="desc">
-          <editor id="productBrandEdit-editor" ref="editor" class="productBrandEdit-editor" @on-change="editorChange" :cache="false"></editor>
+          </a-select> -->
+          <a-tree
+            v-model="checkedKeys"
+            checkable
+            :expanded-keys="expandedKeys"
+            :auto-expand-parent="autoExpandParent"
+            :selected-keys="selectedKeys"
+            :tree-data="treeData"
+            @expand="onExpand"
+            @select="onSelect"
+          />
         </a-form-model-item>
       </a-form-model>
       <div class="btn-cont">
-        <a-button type="primary" id="product-brand-edit-modal-save" @click="handleSave">保存</a-button>
-        <a-button id="product-brand-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
+        <a-button type="primary" id="marketingDivisionSetEdit-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="marketingDivisionSetEdit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
       </div>
     </div>
   </a-modal>
@@ -64,7 +55,7 @@ import { STable, Upload } from '@/components'
 import Editor from '@/components/WEeditor'
 import { dealerProductBrandSave } from '@/api/dealerProductBrand'
 export default {
-  name: 'ProductBrandEditModal',
+  name: 'MarketingDivisionSetEditModal',
   components: { STable, Upload, Editor },
   props: {
     openModal: { //  弹框显示状态
@@ -82,7 +73,7 @@ export default {
   },
   computed: {
     modalTit () {
-      return (this.itemId ? '编辑' : '新增') + '产品品牌'
+      return (this.itemId ? '编辑' : '新增') + '分区'
     }
   },
   data () {
@@ -102,10 +93,72 @@ export default {
           { required: true, message: '请输入产品品牌名称', trigger: 'blur' }
         ]
       },
-      productBrandList: []
+      productBrandList: [],
+      expandedKeys: ['0-0-0', '0-0-1'],
+      autoExpandParent: true,
+      checkedKeys: ['0-0-0'],
+      selectedKeys: [],
+      treeData: [
+        {
+          title: '0-0',
+          key: '0-0',
+          children: [
+            {
+              title: '0-0-0',
+              key: '0-0-0',
+              children: [
+                { title: '0-0-0-0', key: '0-0-0-0' },
+                { title: '0-0-0-1', key: '0-0-0-1' },
+                { title: '0-0-0-2', key: '0-0-0-2' }
+              ]
+            },
+            {
+              title: '0-0-1',
+              key: '0-0-1',
+              children: [
+                { title: '0-0-1-0', key: '0-0-1-0' },
+                { title: '0-0-1-1', key: '0-0-1-1' },
+                { title: '0-0-1-2', key: '0-0-1-2' }
+              ]
+            },
+            {
+              title: '0-0-2',
+              key: '0-0-2'
+            }
+          ]
+        },
+        {
+          title: '0-1',
+          key: '0-1',
+          children: [
+            { title: '0-1-0-0', key: '0-1-0-0' },
+            { title: '0-1-0-1', key: '0-1-0-1' },
+            { title: '0-1-0-2', key: '0-1-0-2' }
+          ]
+        },
+        {
+          title: '0-2',
+          key: '0-2'
+        }
+      ]
     }
   },
   methods: {
+    onExpand (expandedKeys) {
+      console.log('onExpand', expandedKeys)
+      // if not set autoExpandParent to false, if children expanded, parent can not collapse.
+      // or, you can remove all expanded children keys.
+      this.expandedKeys = expandedKeys
+      this.autoExpandParent = false
+    },
+    onCheck (checkedKeys) {
+      console.log('onCheck', checkedKeys)
+      this.checkedKeys = checkedKeys
+    },
+    onSelect (selectedKeys, info) {
+      console.log('onSelect', info)
+      this.selectedKeys = selectedKeys
+    },
     //  保存
     handleSave () {
       const _this = this
@@ -152,7 +205,7 @@ export default {
 </script>
 
 <style lang="less">
-  .productBrandEdit-modal{
+  .marketingDivisionSetEdit-modal{
     .ant-modal-body {
     	padding: 40px 40px 24px;
     }
@@ -165,7 +218,7 @@ export default {
       color: #808695;
     }
     //  文本编辑器  工具栏样式换行
-    .productBrandEdit-editor{
+    .marketingDivisionSetEdit-editor{
       .w-e-toolbar{
         flex-wrap: wrap;
       }

+ 8 - 17
src/views/dealerManagement/marketingDivisionSet/list.vue

@@ -1,5 +1,9 @@
 <template>
   <a-card size="small" :bordered="false" class="marketingDivisionSetList-wrap">
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="marketingDivisionSetList-add" type="primary" @click="handleEdit()">新增分区</a-button>
+    </div>
     <!-- 列表 -->
     <s-table
       class="sTable"
@@ -8,7 +12,6 @@
       :rowKey="(record) => record.id"
       :columns="columns"
       :data="loadData"
-      :scroll="{ x: 2010 }"
       bordered>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
@@ -18,7 +21,7 @@
       </template>
     </s-table>
     <!-- 编辑分区 -->
-    <product-pricing-edit-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
+    <marketing-division-set-edit-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
   </a-card>
 </template>
 
@@ -44,20 +47,8 @@ export default {
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
-        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center' },
-        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
-        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center' },
-        { title: '原厂编码', dataIndex: 'origCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '品牌', dataIndex: 'productBrandName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品类别', scopedSlots: { customRender: 'productType' }, width: 200, align: 'center' },
-        { title: '产品状态', scopedSlots: { customRender: 'status' }, width: 120, align: 'center' },
-        { title: '定价状态', scopedSlots: { customRender: 'sstatus' }, width: 120, align: 'center' },
-        { title: '成本价', dataIndex: 'sterminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '省级价', dataIndex: 'sdterminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '市级价', dataIndex: 'fterminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '特约价', dataIndex: 'gterminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '终端价', dataIndex: 'hterminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '车主价', dataIndex: 'terminaldsdPrice', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '分区名', dataIndex: 'productName', width: 200, align: 'center', ellipsis: true },
+        { title: '省份/市', dataIndex: 'productCode', align: 'center', ellipsis: true },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: 150, align: 'center', fixed: 'right' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -135,7 +126,7 @@ export default {
     },
     //  编辑
     handleEdit (row) {
-      this.itemId = row.id
+      this.itemId = row && row.id ? row.id : null
       this.openModal = true
     },
     //  关闭弹框

+ 155 - 0
src/views/dealerManagement/merchantInfoManagement/detailModal.vue

@@ -0,0 +1,155 @@
+<template>
+  <a-modal
+    centered
+    class="merchantInfoManagement-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="详情"
+    v-model="isShow"
+    @cancle="isShow=false"
+    width="80%">
+    <div>
+      <a-collapse :activeKey="['1']" class="merchantInfoManagement-cont-m">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions bordered :column="3">
+            <a-descriptions-item label="经销商名称:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="经销商别名:">阿大撒</a-descriptions-item>
+            <a-descriptions-item label="商户类型:">双方发生的</a-descriptions-item>
+            <a-descriptions-item label="联系人1:">士大夫</a-descriptions-item>
+            <a-descriptions-item label="联系手机1:">的大多数</a-descriptions-item>
+            <a-descriptions-item label="联系角色1:">是否得到释放</a-descriptions-item>
+            <a-descriptions-item label="联系电话:">价格变更</a-descriptions-item>
+            <a-descriptions-item label="地址:">价格变更</a-descriptions-item>
+            <a-descriptions-item label="是否可用:">价格变更</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+      <a-collapse class="merchantInfoManagement-cont-m">
+        <a-collapse-panel key="1" header="公司信息">
+          <a-descriptions bordered :column="3">
+            <a-descriptions-item label="经营方式:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="经营项目:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="公司规模:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="成立时间:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="一般纳税人:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="身份证号码:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="生日:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="籍贯:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="邮箱:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="联系人2:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="联系角色2:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="联系手机2:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="邮政编码:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="收货人:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="收货人电话:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="收货地址:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="银行账户:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="开户行:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="银行账号:">啊实打实的撒</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+      <a-collapse class="merchantInfoManagement-cont-m">
+        <a-collapse-panel key="1" header="总部信息">
+          <a-descriptions bordered :column="3">
+            <a-descriptions-item label="箭冠汽配代码:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="门头更换日期:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="特约价是否可见:">啊实打实的撒</a-descriptions-item>
+            <a-descriptions-item label="备注:">啊实打实的撒</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+      <div class="btn-cont">
+        <a-button id="merchantInfoManagement-back" @click="isShow = false" style="margin-left: 100px;">返回列表</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+// import { dealerProductDetail } from '@/api/dealerProduct'
+export default {
+  name: 'MerchantInfoManagementModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    }
+  },
+  computed: {
+    productTypeName () {
+      const productTypeName1 = this.detailsData.productTypeName1 ? this.detailsData.productTypeName1 : ''
+      const productTypeName2 = this.detailsData.productTypeName2 ? ' > ' + this.detailsData.productTypeName2 : ''
+      const productTypeName3 = this.detailsData.productTypeName3 ? ' > ' + this.detailsData.productTypeName3 : ''
+      return productTypeName1 + productTypeName2 + productTypeName3
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 4 },
+        wrapperCol: { span: 16 }
+      },
+      detailsData: null, //  详情数据
+      form: {
+        storageQuantity: ''
+      },
+      rules: {
+        supplierName: [
+          { required: true, message: '请输入供应商名称', trigger: 'blur' }
+        ]
+      },
+      brandData: []
+    }
+  },
+  methods: {
+    //  获取详情
+    getDetail () {
+      // dealerProductDetail({ id: this.itemId }).then(res => {
+      //   if (res.status == 200) {
+      //     this.detailsData = res.data
+      //   } else {
+      //     this.detailsData = null
+      //   }
+      // })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .merchantInfoManagement-modal{
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .merchantInfoManagement-cont-m{
+      margin-bottom: 15px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 30px;
+    }
+  }
+</style>

+ 482 - 1
src/views/dealerManagement/merchantInfoManagement/edit.vue

@@ -1,8 +1,489 @@
 <template>
+  <div class="merchantInfoManagementEdit-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="merchantInfoManagementEdit-cont">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="purchaseOrderEdit-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-form-model
+      id="merchantInfoManagementEdit-form"
+      ref="ruleForm"
+      :model="form"
+      :rules="rules"
+      :label-col="formItemLayout.labelCol"
+      :wrapper-col="formItemLayout.wrapperCol">
+      <!-- 基础信息 -->
+      <a-card size="small" :bordered="false" class="merchantInfoManagementEdit-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="基础信息">
+            <a-row>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="经销商名称" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入经销商名称(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="经销商别名" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入经销商别名(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="商户类型">
+                  <a-select placeholder="请选择商户类型" id="productLevelEdit-storageQuantity" allowClear v-model="form.storageQuantity">
+                    <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                  </a-select>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系人1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入联系人1(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系手机1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="11" allowClear placeholder="请输入联系手机1(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系角色1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入联系角色1(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系电话" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="11" allowClear placeholder="请输入联系电话(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                <a-form-model-item label="地址" required style="margin: 0;" :label-col="{span:4}" :wrapper-col="{span:20}">
+                  <a-row :gutter="20">
+                    <!-- 地址 -->
+                    <a-col span="8">
+                      <a-form-model-item prop="provinceSn">
+                        <a-select id="merchantInfoManagementEdit-provinceSn" @change="getCityList" v-model="form.provinceSn" placeholder="请选择省">
+                          <a-select-option v-for="item in addrProvinceList" :value="item.sn" :key="item.sn + 'a'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="citySn">
+                        <a-select id="merchantInfoManagementEdit-citySn" @change="getAreaList" v-model="form.citySn" placeholder="请选择市">
+                          <a-select-option v-for="item in addrCityList" :value="item.sn" :key="item.sn + 'b'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="countySn">
+                        <a-select id="merchantInfoManagementEdit-countySn" @change="areaCharged" v-model="form.countySn" placeholder="请选择区/县">
+                          <a-select-option v-for="item in addrDistrictList" :value="item.sn" :key="item.sn + 'c'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="详细地址" prop="supplierAddress">
+                  <a-input
+                    id="merchantInfoManagementEdit-supplierAddress"
+                    :maxLength="60"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入详细地址(最多60个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="是否可用" prop="enabledFlag">
+                  <a-radio-group
+                    name="radioGroup"
+                    v-model="form.enabledFlag"
+                    id="merchantInfoManagementEdit-enabledFlag" >
+                    <a-radio :value="1">是</a-radio>
+                    <a-radio :value="0">否</a-radio>
+                  </a-radio-group>
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+      <!-- 公司信息 -->
+      <a-card size="small" :bordered="false" class="merchantInfoManagementEdit-cont">
+        <a-collapse>
+          <a-collapse-panel key="1" header="公司信息">
+            <a-row>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="经营方式" prop="productTypeName" help="(例:国有企业)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入经营方式(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="经营项目" prop="productTypeName">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入经营项目(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="公司规模" prop="productTypeName" help="(例:100-999人)">
+                  <a-input-number
+                    id="merchantInfoManagementEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 100%;" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="成立时间" prop="productTypeName">
+                  <a-date-picker
+                    style="width:100%"
+                    id="merchantInfoManagementEdit-time"
+                    :disabledDate="disabledDate"
+                    v-model="form.time"
+                    :format="dateFormat"
+                    placeholder="请选择日期" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="一般纳税人" prop="citySn">
+                  <v-select
+                    code="FLAG"
+                    id="customerManagementEdit-dispatchType"
+                    v-model="form.dispatchType"
+                    allowClear
+                    placeholder="请选择"
+                  ></v-select>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="身份证号码" prop="productTypeName">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="18"
+                    allowClear
+                    placeholder="请输入身份证号码(最多18个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="生日" prop="productTypeName">
+                  <a-date-picker
+                    style="width:100%"
+                    id="merchantInfoManagementEdit-time"
+                    :disabledDate="disabledDate"
+                    v-model="form.time"
+                    :format="dateFormat"
+                    placeholder="请选择日期" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="籍贯" prop="productTypeName">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入籍贯(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="邮箱" prop="productTypeName">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="60"
+                    allowClear
+                    placeholder="请输入邮箱(最多60个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系人2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入联系人2(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系手机2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="11" allowClear placeholder="请输入联系手机2(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系角色2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入联系角色2(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="邮政编码" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入邮政编码(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="收货人" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入收货人(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="收货电话" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="merchantInfoManagementEdit-name" :maxLength="30" allowClear placeholder="请输入收货电话(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                <a-form-model-item label="收货地址" required style="margin: 0;" :label-col="{span:4}" :wrapper-col="{span:20}">
+                  <a-row :gutter="20">
+                    <!-- 地址 -->
+                    <a-col span="8">
+                      <a-form-model-item prop="provinceSn">
+                        <a-select id="merchantInfoManagementEdit-provinceSn" @change="getCityList" v-model="form.provinceSn" placeholder="请选择省">
+                          <a-select-option v-for="item in addrProvinceList" :value="item.sn" :key="item.sn + 'a'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="citySn">
+                        <a-select id="merchantInfoManagementEdit-citySn" @change="getAreaList" v-model="form.citySn" placeholder="请选择市">
+                          <a-select-option v-for="item in addrCityList" :value="item.sn" :key="item.sn + 'b'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="countySn">
+                        <a-select id="merchantInfoManagementEdit-countySn" @change="areaCharged" v-model="form.countySn" placeholder="请选择区/县">
+                          <a-select-option v-for="item in addrDistrictList" :value="item.sn" :key="item.sn + 'c'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="收货详细地址" prop="supplierAddress">
+                  <a-input
+                    id="merchantInfoManagementEdit-supplierAddress"
+                    :maxLength="60"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入收货详细地址(最多60个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="银行账户" prop="productTypeName" help="(例:张三)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入银行账户(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="开户行" prop="productTypeName" help="(例:交通银行)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入开户行(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="银行账号" prop="productTypeName" help="(例:1123 5677 1112 22342 1123)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="merchantInfoManagementEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入银行账号(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+      <!-- 总部信息 -->
+      <a-card size="small" :bordered="false" class="merchantInfoManagementEdit-cont">
+        <a-collapse>
+          <a-collapse-panel key="1" header="总部信息">
+            <a-row>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="箭冠汽配代码" prop="supplierAddress">
+                  <a-input
+                    id="merchantInfoManagementEdit-supplierAddress"
+                    :maxLength="30"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入箭冠汽配代码(最多30个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="门头更换日期" prop="productTypeName">
+                  <a-date-picker
+                    style="width:100%"
+                    id="merchantInfoManagementEdit-time"
+                    :disabledDate="disabledDate"
+                    v-model="form.time"
+                    :format="dateFormat"
+                    placeholder="请选择日期" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="特约价是否可见" prop="enabledFlag">
+                  <a-radio-group
+                    name="radioGroup"
+                    v-model="form.enabledFlag"
+                    id="merchantInfoManagementEdit-enabledFlag" >
+                    <a-radio :value="1">是</a-radio>
+                    <a-radio :value="0">否</a-radio>
+                  </a-radio-group>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                <a-form-model-item label="备注" prop="enabledFlag" :label-col="{span:4}" :wrapper-col="{span:20}">
+                  <a-textarea
+                    id="merchantInfoManagementEdit-supplierAddress"
+                    :maxLength="30"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入箭冠汽配代码(最多30个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+    </a-form-model>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="merchantInfoManagementEdit-submit-btn" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
 </template>
 
 <script>
+import { getArea } from '@/api/data'
+import { VSelect } from '@/components'
+export default {
+  components: { VSelect },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: {
+          span: 8
+        },
+        wrapperCol: {
+          span: 16
+        }
+      },
+      form: {
+        time: ''
+      },
+      rules: {},
+      brandData: [],
+      addrProvinceList: [], //  省下拉
+      addrCityList: [], //  市下拉
+      addrDistrictList: [], //  区下拉
+      dateFormat: 'YYYY-MM-DD'
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    // 提交
+    handleSubmit () {},
+    // 返回
+    handleBack () {
+      this.$router.push({ path: '/dealerManagement/merchantInfoManagement/list' })
+    },
+    // 获取城市列表
+    getCityList (val) {
+      const index = this.addrProvinceList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.provinceName = this.addrProvinceList[index].name
+      }
+      this.addrCityList = []
+      this.addrDistrictList = []
+      this.form.citySn = undefined
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('city', val)
+    },
+    // 获取区县列表
+    getAreaList (val) {
+      const index = this.addrCityList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.cityName = this.addrCityList[index].name
+      }
+      this.addrDistrictList = []
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('district', val)
+    },
+    // 区县变更
+    areaCharged (val) {
+      const index = this.addrDistrictList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.countyName = this.addrDistrictList[index].name
+      }
+      this.form.supplierAddress = ''
+    },
+    //  省/市/区
+    getArea (type, sn) {
+      let params
+      if (type == 'province') {
+        params = { level: '1' }
+      } else {
+        params = { psn: sn }
+      }
+      getArea(params).then(res => {
+        if (res.status == 200) {
+          if (type == 'province') {
+            this.addrProvinceList = res.data || []
+          } else if (type == 'city') {
+            this.addrCityList = res.data || []
+          } else if (type == 'district') {
+            this.addrDistrictList = res.data || []
+          }
+        } else {
+          if (type == 'province') {
+            this.addrProvinceList = []
+          } else if (type == 'city') {
+            this.addrCityList = []
+          } else if (type == 'district') {
+            this.addrDistrictList = []
+          }
+        }
+      })
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.getArea('province')
+      vm.$refs.ruleForm.resetFields()
+      if (vm.$route.params.id) { //  编辑页
+        // vm.getGoodsDetail()
+      }
+    })
+  }
+}
 </script>
 
-<style>
+<style lang="less">
+  .merchantInfoManagementEdit-wrap{
+    .merchantInfoManagementEdit-cont{
+      margin-bottom: 15px;
+    }
+  }
 </style>

+ 293 - 1
src/views/dealerManagement/merchantInfoManagement/list.vue

@@ -1,8 +1,300 @@
 <template>
+  <a-card size="small" :bordered="false" class="merchantInfoManagementList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="区域">
+              <a-cascader
+                @change="changeProductType"
+                change-on-select
+                :options="productTypeList"
+                :fieldNames="{ label: 'productTypeName', value: 'id', children: 'children' }"
+                id="merchantInfoManagementList-productType"
+                placeholder="请选择区域"
+                allowClear />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="商户名称/别名">
+              <a-input id="merchantInfoManagementList-productName" v-model.trim="queryParam.productName" allowClear placeholder="请输入商户名称/别名"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="商户类型">
+              <v-select code="ENABLED_FLAG" id="merchantInfoManagementList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择商户类型"></v-select>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="审核状态">
+                <v-select code="ENABLED_FLAG" id="merchantInfoManagementList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择审核状态"></v-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="合作状态">
+                <v-select code="ENABLED_FLAG" id="merchantInfoManagementList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择合作状态"></v-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24">
+            <a-button style="margin-bottom: 18px;" type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="merchantInfoManagementList-refresh">查询</a-button>
+            <a-button style="margin: 0 0 18px 8px" @click="resetSearchForm" :disabled="disabled" id="merchantInfoManagementList-reset">重置</a-button>
+            <a @click="advanced=!advanced" style="margin-left: 8px">
+              {{ advanced ? '收起' : '展开' }}
+              <a-icon :type="advanced ? 'up' : 'down'"/>
+            </a>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="merchantInfoManagementList-add" type="primary" @click="handleAdd">新增商户</a-button>
+    </div>
+    <!-- 总计 -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div slot="message">合计:<strong>300</strong>条</div>
+    </a-alert>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 2070 }"
+      bordered>
+      <!-- 产品图片 -->
+      <template slot="productPic" slot-scope="text, record">
+        <img :src="record.productPic[0]" width="30" height="30" class="productPic" @click="openPicModal=true" />
+      </template>
+      <!-- 产品类别 -->
+      <template slot="productType" slot-scope="text, record">
+        <a-tooltip placement="top">
+          <template slot="title">
+            <span>{{ record.productTypeName }}</span>
+          </template>
+          {{ record.productTypeName3 }}
+        </a-tooltip>
+      </template>
+      <!-- 状态 -->
+      <template slot="status" slot-scope="text, record">
+        <a-tag :color="record.status==1?'green':'red'" >{{ record.status==1? '待提交': '待单据审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleAudit(record)" id="merchantInfoManagementList-audit-btn">审核</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleCooperation(record)" id="merchantInfoManagementList-cooperation-btn">合作设置</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDistribution(record)" id="merchantInfoManagementList-distribution-btn">经销权</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleLevel(record)" id="merchantInfoManagementList-level-btn">价格级别</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="merchantInfoManagementList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="merchantInfoManagementList-detail-btn">详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="merchantInfoManagementList-del-btn">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 产品详情 -->
+    <merchant-info-management-detail-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
+  </a-card>
 </template>
 
 <script>
+import moment from 'moment'
+import { dealerProductBrandQuery } from '@/api/dealerProductBrand'
+import { dealerProductTypeQuery } from '@/api/dealerProductType'
+import { dealerProductList, dealerProductUpdate, dealerProductExport } from '@/api/dealerProduct'
+import { STable, VSelect } from '@/components'
+import merchantInfoManagementDetailModal from './detailModal.vue'
+export default {
+  components: { STable, VSelect, merchantInfoManagementDetailModal },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      queryParam: { //  查询条件
+        productCode: '', //  产品编码
+        productName: '', //  产品名称
+        origCode: '', //  原厂编码
+        productBrandSn: undefined, //  产品品牌
+        productTypeSn1: '', //  产品一级类别
+        productTypeSn2: '', //  产品二级类别
+        productTypeSn3: '', //  产品三级类别
+        enabledFlag: undefined //  状态
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false, // 导出loading
+      dateFormat: 'YYYY-MM-DD',
+      time: [], //  创建时间
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center' },
+        { title: '区域', scopedSlots: { customRender: 'productPic' }, width: 140, align: 'center' },
+        { title: '商户名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '商户别名', dataIndex: 'productCode', align: 'center' },
+        { title: '商户类型', dataIndex: 'origCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '商户级别', dataIndex: 'productBrandName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '联系人', scopedSlots: { customRender: 'productType' }, width: 150, align: 'center', ellipsis: true },
+        { title: '联系电话', dataIndex: 'terminaldsdPrice', width: 120, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '绑定手机号码', dataIndex: 'cssreateDate', width: 120, align: 'center' },
+        { title: '审核状态', scopedSlots: { customRender: 'status' }, width: 120, align: 'center' },
+        { title: '合作状态', scopedSlots: { customRender: 'status' }, width: 120, align: 'center' },
+        { title: '生效时间', scopedSlots: { customRender: 'status' }, width: 160, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 260, align: 'center', fixed: 'right' }
+      ],
+      selectedRowKeys: [], // Check here to configure the default column
+      loading: false,
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // 创建时间
+        // if (this.time && this.time.length > 0) {
+        //   this.queryParam.beginDate = moment(this.time[0]).format(this.dateFormat)
+        //   this.queryParam.endDate = moment(this.time[1]).format(this.dateFormat)
+        // } else {
+        //   this.queryParam.beginDate = undefined
+        //   this.queryParam.endDate = undefined
+        // }
+        // return dealerProductList(Object.assign(parameter, this.queryParam)).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //     const productTypeName1 = data.list[i].productTypeName1 ? data.list[i].productTypeName1 : ''
+        //     const productTypeName2 = data.list[i].productTypeName2 ? ' > ' + data.list[i].productTypeName2 : ''
+        //     const productTypeName3 = data.list[i].productTypeName3 ? ' > ' + data.list[i].productTypeName3 : ''
+        //     data.list[i].productTypeName = productTypeName1 + productTypeName2 + productTypeName3
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productPic: ['https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', 'https://qn.antdv.com/vue.png'], productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false, //  查看详情  弹框
+      itemId: '', //  当前产品id
+      productBrandList: [], //  品牌下拉数据
+      productTypeList: [] //  类别下拉数据
+    }
+  },
+  computed: {
+    hasSelected () {
+      return this.selectedRowKeys.length > 0
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.productCode = ''
+      this.queryParam.productName = ''
+      this.queryParam.origCode = ''
+      this.queryParam.productBrandSn = undefined
+      this.queryParam.productTypeSn1 = ''
+      this.queryParam.productTypeSn2 = ''
+      this.queryParam.productTypeSn3 = ''
+      this.queryParam.enabledFlag = undefined
+      this.queryParam.beginDate = ''
+      this.queryParam.endDate = ''
+      this.$refs.table.refresh(true)
+    },
+    // 新增
+    handleAdd () {
+      this.$router.push({ path: '/dealerManagement/merchantInfoManagement/add' })
+    },
+    // 编辑
+    handleEdit (row) {
+      this.$router.push({ path: `/dealerManagement/merchantInfoManagement/edit/${row.id}` })
+    },
+    // 合作设置
+    handleCooperation () {},
+    // 经销权
+    handleDistribution () {},
+    // 价格级别
+    handleLevel () {},
+    // 审核
+    handleAudit (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要审核吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    // 删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要删除吗?',
+        centered: true,
+        onOk () {
+          // salesDel({ id: row.id }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  详情
+    handleDetail (row) {
+      this.itemId = row.id
+      this.openModal = true
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  产品类别  change
+    changeProductType (val, opt) {
+      this.queryParam.productTypeSn1 = val[0] ? val[0] : ''
+      this.queryParam.productTypeSn2 = val[1] ? val[1] : ''
+      this.queryParam.productTypeSn3 = val[2] ? val[2] : ''
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      // vm.getProductBrand()
+      // vm.getProductType()
+    })
+  }
+}
 </script>
 
-<style>
+<style lang="less">
+  .merchantInfoManagementList-wrap{
+    .productPic{
+      cursor: pointer;
+    }
+  }
 </style>

+ 161 - 0
src/views/financialManagement/inventoryReview/detail.vue

@@ -0,0 +1,161 @@
+<template>
+  <div class="inventoryReviewDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" >
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="inventoryReviewDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="inventoryReviewDetail-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="inventoryReviewDetail-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 内容 -->
+    <a-page-header title="盘点单号:CG2021010100001" ></a-page-header>
+    <!-- alert -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div slot="message"><strong class="red">红色代表盘盈</strong>,<strong class="green">绿色代表盈亏</strong></div>
+    </a-alert>
+    <!-- 盈亏统计 -->
+    <a-card size="small" :bordered="false" class="inventoryReviewDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="盈亏统计">
+          <a-descriptions :column="2" bordered>
+            <a-descriptions-item label="库存数量">2</a-descriptions-item>
+            <a-descriptions-item label="库存成本">20</a-descriptions-item>
+            <a-descriptions-item label="盘盈数量">¥120.36</a-descriptions-item>
+            <a-descriptions-item label="盘盈成本">3</a-descriptions-item>
+            <a-descriptions-item label="盘亏数量">4</a-descriptions-item>
+            <a-descriptions-item label="盘亏成本">¥11.2</a-descriptions-item>
+            <a-descriptions-item>
+              <template slot="label">
+                盈亏总数量
+                <a-popover>
+                  <template slot="content">
+                    盘盈数量与盘亏数量之和
+                  </template>
+                  <a-icon type="question-circle" theme="twoTone" />
+                </a-popover>
+              </template>
+              4
+            </a-descriptions-item>
+            <a-descriptions-item>
+              <template slot="label">
+                盈亏总成本
+                <a-popover>
+                  <template slot="content">
+                    盘盈成本与盘亏成本之和
+                  </template>
+                  <a-icon type="question-circle" theme="twoTone" />
+                </a-popover>
+              </template>
+              4
+            </a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 产品明细 -->
+    <a-card size="small" :bordered="false" class="inventoryReviewDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="产品明细">
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            :scroll="{ x: 1290 }"
+            bordered>
+            <!-- 采购数量 -->
+            <template slot="purchaseNum" slot-scope="text, record">
+              <span>{{ record.purchaseNum }}</span>
+            </template>
+            <!-- 缺货数量 -->
+            <template slot="outOfStockNum" slot-scope="text, record">
+              <span>{{ record.outOfStockNum }}</span>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productCode', width: 160, align: 'center' },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true },
+        { title: '单位', dataIndex: 'productOrigUnit', width: 100, align: 'center' },
+        { title: '仓库', dataIndex: 'warehouseName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'warehouseLocationName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'qtsy', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存成本', dataIndex: 'price', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点数量', dataIndex: 'qtssy', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点盈亏数量', dataIndex: 'qtdsy', width: 120, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点盈亏成本', dataIndex: 'prifce', width: 120, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+    }
+  },
+  methods: {
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/financialManagement/inventoryReview/list' })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .inventoryReviewDetail-wrap{
+    .inventoryReviewDetail-cont{
+      margin-bottom: 15px;
+    }
+    .green{
+      color: #19be6b;
+    }
+    .red{
+      color: #ed1c24;
+    }
+  }
+</style>

+ 174 - 0
src/views/financialManagement/inventoryReview/list.vue

@@ -0,0 +1,174 @@
+<template>
+  <a-card size="small" :bordered="false" class="inventoryReviewList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="盘点单号">
+              <a-input id="inventoryReviewList-purchaseNo" v-model.trim="queryParam.purchaseNo" allowClear placeholder="请输入盘点单号"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="盘点审核时间">
+              <a-range-picker v-model="queryParam.creatDate" id="inventoryReviewList-creatDate"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="财务审核状态">
+              <v-select
+                v-model="queryParam.billStatus"
+                ref="billStatus"
+                id="inventoryReviewList-billStatus"
+                code="PAYMENT_TYPE"
+                placeholder="请选择财务审核状态"
+                allowClear></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <span class="table-page-search-submitButtons">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryReviewList-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm()" :disabled="disabled" id="inventoryReviewList-reset">重置</a-button>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- alert -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div slot="message">共 <strong>6</strong> 条记录,其中待审核 <strong>14</strong> 条 </div>
+    </a-alert>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1300 }"
+      bordered>
+      <!-- 采购单号 -->
+      <template slot="purchaseNo" slot-scope="text, record">
+        <span style="color: #ed1c24;cursor: pointer;">{{record.purchaseNo}}</span>
+      </template>
+      <!-- 采购入库单号 -->
+      <template slot="purchaseNos" slot-scope="text, record">
+        <span style="color: #ed1c24;cursor: pointer;">{{record.purchaseNo}}</span>
+      </template>
+      <!-- 状态 -->
+      <template slot="state" slot-scope="text, record">
+        <span>{{record.state == 1 ? '已启用' : '已禁用'}}</span>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleExamine(record, 1)" id="inventoryReview-adopt-btn">通过</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleExamine(record, 2)" id="inventoryReview-unadopt-btn">不通过</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="inventoryReview-detail-btn">详情</a-button>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+// import { getRoleList, getServiceList } from '@/api/manage'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      disabled: false, //  查询、重置按钮是否可操作
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '盘点单号', scopedSlots: { customRender: 'purchaseBillNo' }, align: 'center' },
+        { title: '盘点产品款数', dataIndex: 'totalCategory', width: 120, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存总成本', dataIndex: 'totalAmount', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘盈总数量', dataIndex: 'totalQty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘亏总数量', dataIndex: 'totalssQty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点审核时间', dataIndex: 'sauditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '财务审核时间', dataIndex: 'auditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '财务审核状态', scopedSlots: { customRender: 'auditStatus' }, width: 120, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 190, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function(resolve, reject){
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+    }
+  },
+  methods: {
+    //  详情
+    handleDetail(row){
+      this.$router.push({ path: `/financialManagement/inventoryReview/detail/${row.id}`})
+    },
+    //  审核
+    handleExamine(row, type){
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '操作后不可恢复,确定要进行'+ (type==1 ? ' 通过 ' : ' 不通过 ') +'操作吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+  }
+}
+</script>
+<style lang="less">
+  .inventoryReviewList-wrap{
+    .sTable{
+      margin-top: 15px;
+    }
+  }
+</style>

+ 135 - 0
src/views/financialManagement/returnConfirmation/detail.vue

@@ -0,0 +1,135 @@
+<template>
+  <div class="warehousingAuditDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" >
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="warehousingAuditDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="warehousingAuditDetail-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="warehousingAuditDetail-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 内容 -->
+    <a-page-header title="单号:CG2021010100001" ></a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="warehousingAuditDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions :column="3">
+            <a-descriptions-item label="供应商">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="入库时间">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="采购单号">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+          <a-descriptions :column="3" bordered>
+            <a-descriptions-item label="采购总款数">2</a-descriptions-item>
+            <a-descriptions-item label="采购总数量">20</a-descriptions-item>
+            <a-descriptions-item label="采购总成本">¥120.36</a-descriptions-item>
+            <a-descriptions-item label="入库总款数">3</a-descriptions-item>
+            <a-descriptions-item label="入库总数量">4</a-descriptions-item>
+            <a-descriptions-item label="入库总成本">¥11.2</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 入库明细 -->
+    <a-card size="small" :bordered="false" class="warehousingAuditDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="入库明细">
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            :scroll="{ x: 1290 }"
+            bordered>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { getOperationalPrecision } from '@/libs/tools.js'
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productCode', width: 160, align: 'center' },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true },
+        { title: '原厂编码', dataIndex: 'productOrigCode', width: 200, align: 'center' },
+        { title: '采购数量', dataIndex: 'qty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '入库数量', dataIndex: 'qtsy', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '成本价', dataIndex: 'price', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'productOrigUnit', width: 100, align: 'center' },
+        { title: '入库小计', dataIndex: 'warehousingSubtotal', width: 100, align: 'center' },
+        { title: '仓库', dataIndex: 'warehouseName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'warehouseLocationName', width: 100, align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList(Object.assign(parameter, this.queryParam)).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //     const productCode = (data.list[i].productEntity && data.list[i].productEntity.code) || (data.list[i].dealerProductEntity && data.list[i].dealerProductEntity.code)
+        //     const productName = (data.list[i].productEntity && data.list[i].productEntity.name) || (data.list[i].dealerProductEntity && data.list[i].dealerProductEntity.name)
+        //     const productOrigCode = (data.list[i].productEntity && data.list[i].productEntity.origCode) || (data.list[i].dealerProductEntity && data.list[i].dealerProductEntity.origCode)
+        //     const productOrigUnit = (data.list[i].productEntity && data.list[i].productEntity.unit) || (data.list[i].dealerProductEntity && data.list[i].dealerProductEntity.unit)
+        //     data.list[i].productCode = productCode || '--'
+        //     data.list[i].productName = productName || '--'
+        //     data.list[i].productOrigCode = productOrigCode || '--'
+        //     data.list[i].productOrigUnit = productOrigUnit || '--'
+        //     data.list[i].warehouseName = data.list[i].warehouseEntity && data.list[i].warehouseEntity.name || '--'
+        //     data.list[i].warehouseLocationName = data.list[i].warehouseLocationEntity && data.list[i].warehouseLocationEntity.name || '--'
+        //     // 入库小计  由于数据库内小数位数为4位,页面则需显示2位。因此会做小数运算精度处理
+        //     data.list[i].warehousingSubtotal = getOperationalPrecision(data.list[i].price, data.list[i].qty)
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+    }
+  },
+  methods: {
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/financialManagement/warehousingAudit/list' })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .warehousingAuditDetail-cont{
+    margin-bottom: 15px;
+  }
+</style>

+ 186 - 0
src/views/financialManagement/returnConfirmation/list.vue

@@ -0,0 +1,186 @@
+<template>
+  <a-card size="small" :bordered="false" class="warehousingAuditList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="采购单号">
+              <a-input id="warehousingAuditList-purchaseNo" v-model.trim="queryParam.purchaseNo" allowClear placeholder="请输入采购单号"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="采购入库单号">
+              <a-input id="warehousingAuditList-purchaseNo" v-model.trim="queryParam.purchaseNo" allowClear placeholder="请输入采购入库单号"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="入库时间">
+              <a-range-picker v-model="queryParam.creatDate" id="warehousingAuditList-creatDate"/>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="财务审核状态">
+                <v-select
+                  v-model="queryParam.billStatus"
+                  ref="billStatus"
+                  id="warehousingAuditList-billStatus"
+                  code="PAYMENT_TYPE"
+                  placeholder="请选择财务审核状态"
+                  allowClear></v-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24">
+            <span class="table-page-search-submitButtons">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="warehousingAuditList-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm()" :disabled="disabled" id="warehousingAuditList-reset">重置</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 8px">
+                {{ advanced ? '收起' : '展开' }}
+                <a-icon :type="advanced ? 'up' : 'down'"/>
+              </a>
+            </span>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- alert -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div slot="message">共 <strong>6</strong> 条记录,其中待审核 <strong>14</strong> 条 </div>
+    </a-alert>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1290 }"
+      bordered>
+      <!-- 采购单号 -->
+      <template slot="purchaseBillNo" slot-scope="text, record">
+        <span style="color: #ed1c24;cursor: pointer;">{{ record.purchaseBillNo }}</span>
+      </template>
+      <!-- 采购入库单号 -->
+      <template slot="purchaseNos" slot-scope="text, record">
+        <span style="color: #ed1c24;cursor: pointer;">{{ record.purchaseNo }}</span>
+      </template>
+      <!-- 状态 -->
+      <template slot="auditStatus" slot-scope="text, record">
+        <a-tag :color="record.auditStatus=='FINISH'?'green':'red'" >{{ record.auditStatus=='FINISH'? '待备货审核': '待单据审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleExamine(record, 1)" id="warehousingAudit-adopt-btn">通过</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleExamine(record, 2)" id="warehousingAudit-unadopt-btn">不通过</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="warehousingAudit-detail-btn">详情</a-button>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+// import { getRoleList, getServiceList } from '@/api/manage'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      advanced: false, //  高级搜索 展开/关闭
+      disabled: false, //  查询、重置按钮是否可操作
+      // 查询参数
+      queryParam: {},
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '采购单号', scopedSlots: { customRender: 'purchaseBillNo' }, align: 'center' },
+        { title: '采购入库单号', scopedSlots: { customRender: 'purchaseNos' }, align: 'center' },
+        { title: '总款数', dataIndex: 'totalCategory', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '入库总数量', dataIndex: 'totalQty', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '入库总成本', dataIndex: 'totalAmount', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '入库时间', dataIndex: 'sauditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '财务审核时间', dataIndex: 'auditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '财务审核状态', scopedSlots: { customRender: 'auditStatus' }, width: 120, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 190, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+    }
+  },
+  methods: {
+    //  详情
+    handleDetail (row) {
+      this.$router.push({ path: `/financialManagement/warehousingAudit/detail/${row.id}` })
+    },
+    //  审核
+    handleExamine (row, type) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '操作后不可恢复,确定要进行' + (type == 1 ? ' 通过 ' : ' 不通过 ') + '操作吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    }
+  }
+}
+</script>
+<style lang="less">
+  .warehousingAuditList-wrap{
+    .sTable{
+      margin-top: 15px;
+    }
+  }
+</style>

+ 199 - 0
src/views/inventoryManagement/inventoryChecking/checkingTipsModal.vue

@@ -0,0 +1,199 @@
+<template>
+  <a-modal
+    centered
+    class="checkingTipsEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="提示"
+    v-model="isShow"
+    @cancle="isShow=false"
+    width="80%">
+    <div class="checkingTipsEdit-header">
+      <strong>以下为影响出入库的未完成单据</strong>
+      <a-button type="danger" @click="handleExport" :loading="exportLoading" id="checkingTipsEdit-export">导出</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      bordered>
+    </s-table>
+    <a-divider />
+    <div class="checkingTipsEdit-explain">
+      <strong>盘点说明:</strong>
+      <ul class="checkingTipsEdit-explain-list">
+        <li>1、以上影响出入库的未完成单据,不处理也可进行盘点,但建议处理完再进行盘点。</li>
+        <li>2、开始盘点到盘点结束期间,所有出入库单据将不能操作。</li>
+      </ul>
+    </div>
+    <div class="btn-cont">
+      <a-button type="primary" id="checking-tips-edit-modal-check" @click="handleCheck">开始盘点</a-button>
+      <a-button id="checking-tips-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+    </div>
+    <checking-type-modal :openModal="openTypeModal" :nowData="nowTypeData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+import checkingTypeModal from './checkingTypeModal.vue'
+// import { checkingTipsSave } from '@/api/checkingTips'
+export default {
+  name: 'CheckingTipsEditModal',
+  components: { STable, checkingTypeModal },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      exportLoading: false, // 导出loading
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 70, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单号', dataIndex: 'nsso', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单据类型', dataIndex: 'sort', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单据状态', dataIndex: 'name', width: 100, align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return warehouseAllList( this.queryParam ).then(res => {
+        //   const data = res.data
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openTypeModal: false, //  新增编辑  弹框
+      nowTypeData: null //  当前记录数据
+    }
+  },
+  methods: {
+    //  详情
+    getDetail () {
+
+    },
+    //  开始盘点
+    handleCheck () {
+      this.openTypeModal = true
+    },
+    //  新增/编辑  成功
+    handleOk (type) {
+      this.$emit('ok', type)
+      this.isShow = false
+    },
+    //  关闭弹框
+    closeModal () {
+      this.openTypeModal = false
+    },
+    //  导出
+    handleExport () {
+      this.exportLoading = true
+      customerBundleExportDelay({}).then(res => {
+        this.exportLoading = false
+        this.download(res)
+      })
+    },
+    download (data) {
+      if (!data) { return }
+      const url = window.URL.createObjectURL(new Blob([data]))
+      const link = document.createElement('a')
+      link.style.display = 'none'
+      link.href = url
+      const a = moment().format('YYYYMMDDHHmmss')
+      const fname = '未完成单据_盘点' + a
+      link.setAttribute('download', fname + '.xlsx')
+      document.body.appendChild(link)
+      link.click()
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      } else {
+        this.form = {
+          name: '',
+          sort: ''
+        }
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .checkingTipsEdit-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .checkingTipsEdit-header{
+      display: flex;
+      justify-content: space-between;
+      align-items: center;
+      margin-bottom: 20px;
+      strong{
+        font-size: 15px;
+      }
+    }
+    .checkingTipsEdit-explain{
+      strong{
+        display: block;
+        margin-bottom: 5px;
+      }
+      .checkingTipsEdit-explain-list{
+        list-style: none;
+        margin: 0;
+        padding: 0;
+        li{
+          padding: 3px 0;
+        }
+      }
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 155 - 0
src/views/inventoryManagement/inventoryChecking/checkingTypeModal.vue

@@ -0,0 +1,155 @@
+<template>
+  <a-modal
+    centered
+    class="checkingTypeEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="选择盘点类型"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <!-- 表单 -->
+    <div>
+      <a-form-model
+        id="checkingTypeEdit-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="" prop="type">
+          <a-radio-group v-model="form.type" size="large" class="radio-group">
+            <a-radio-button value="a" class="radio-button">
+              全盘<a-icon class="radio-button-icon" type="check" v-show="form.type=='a'" />
+            </a-radio-button>
+            <a-radio-button value="b" class="radio-button">
+              自选盘点<a-icon class="radio-button-icon" type="check" v-show="form.type=='b'" />
+            </a-radio-button>
+          </a-radio-group>
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button type="primary" id="checkingType-edit-modal-save" @click="handleSubmit">确定</a-button>
+        <a-button id="checkingType-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+// import { checkingTypeSave } from '@/api/checkingType'
+export default {
+  name: 'checkingTypeEditModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 0 },
+        wrapperCol: { span: 24 }
+      },
+      form: {
+        type: '', // 盘点类型
+      },
+      rules: {
+        type: [
+          { required: true, message: '请先选择盘点类型', trigger: 'change' }
+        ],
+      }
+    }
+  },
+  methods: {
+    //  确定
+    handleSubmit(){
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          _this.$emit('ok', _this.form.type)
+          _this.isShow = false
+          // const params = {
+          //   id: this.itemId ? this.itemId : undefined,
+          //   name: this.form.name,  //  仓库名称
+          //   sort: this.form.sort,  //  排序
+          //   isDefault: 0  //  是否为默认仓库   0为非默认,1为默认
+          // }
+          // checkingTipsSave(params).then(res => {
+          //   if(res.status == 200){
+          //     _this.$message.success(res.message)
+          //     _this.$emit('ok')
+          //     setTimeout(function () {
+          //       _this.isShow = false
+          //       _this.$refs.ruleForm.resetFields()
+          //     }, 300)
+          //   }else{
+              
+          //   }
+          // })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }else{
+        this.form = {
+          name: '',
+          sort: ''
+        }
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .checkingTypeEdit-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .radio-group{
+      display: block;
+      margin: 30px auto;
+      width: 80%;
+      .radio-button{
+        width: 50%;
+        height: 100px;
+        line-height: 100px;
+        text-align: center;
+        position: relative;
+        &-icon{
+          position: absolute;
+          right: 30px;
+          top: 42px;
+        }
+      }
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 183 - 0
src/views/inventoryManagement/inventoryChecking/detail.vue

@@ -0,0 +1,183 @@
+<template>
+  <div class="inventoryCheckingDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="inventoryCheckingDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="inventoryCheckingDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="1" type="danger" @click="handleExport" :loading="exportLoading" id="inventoryCheckingDetail-export-btn">导出</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="inventoryCheckingDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions :column="3">
+            <a-descriptions-item label="盘点单号">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="监盘审核状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="完结状态">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <a-card size="small" :bordered="false" class="inventoryCheckingDetail-cont">
+      <!-- 总计 -->
+      <a-alert type="info" showIcon style="margin-bottom:15px">
+        <div slot="message">
+          库存总数量:
+          <strong>6</strong>
+          ,盈亏总数量:
+          <strong>6</strong>
+        </div>
+      </a-alert>
+      <!-- 筛选条件 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="类型">
+                <a-select placeholder="请选择" id="inventoryCheckingDetail-type" allowClear v-model="queryParam.dataSourceNo">
+                  <a-select-option v-for="item in brandData" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryCheckingDetail-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="inventoryCheckingDetail-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="record => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ x: 820 }"
+        bordered>
+        <!-- 采购数量 -->
+        <template slot="purchaseNum" slot-scope="text, record">
+          <span>{{ record.purchaseNum }}</span>
+        </template>
+        <!-- 缺货数量 -->
+        <template slot="outOfStockNum" slot-scope="text, record">
+          <span>{{ record.outOfStockNum }}</span>
+        </template>
+      </s-table>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: {
+        dataSourceNo: undefined
+      },
+      exportLoading: false, // 导出loading
+      disabled: false, //  查询、重置按钮是否可操作
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center' },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '单位', dataIndex: 'productOrigUnit', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'qty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点数量', dataIndex: 'qtsy', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盈亏数量', dataIndex: 'qdty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      brandData: []
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {},
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/inventoryChecking/list' })
+    },
+    //  导出
+    handleExport () {
+      const params = this.queryParam
+      if (this.oldTime && this.oldTime.length > 0) {
+        params.beginOldExpiryDate = moment(this.oldTime[0]).format('YYYY-MM-DD')
+        params.endOldExpirydDate = moment(this.oldTime[1]).format('YYYY-MM-DD')
+      } else {
+        params.beginOldExpiryDate = ''
+        params.endOldExpirydDate = ''
+      }
+      if (this.newTime && this.newTime.length > 0) {
+        params.beginDate = moment(this.newTime[0]).format('YYYY-MM-DD')
+        params.endDate = moment(this.newTime[1]).format('YYYY-MM-DD')
+      } else {
+        params.beginDate = ''
+        params.endDate = ''
+      }
+      this.exportLoading = true
+      customerBundleExportDelay(params).then(res => {
+        this.exportLoading = false
+        this.download(res)
+      })
+    },
+    download (data) {
+      if (!data) {
+        return
+      }
+      const url = window.URL.createObjectURL(new Blob([data]))
+      const link = document.createElement('a')
+      link.style.display = 'none'
+      link.href = url
+      const a = moment().format('YYYYMMDDHHmmss')
+      const fname = '仓库调拨' + a
+      link.setAttribute('download', fname + '.xlsx')
+      document.body.appendChild(link)
+      link.click()
+    }
+  }
+}
+</script>
+
+<style lang="less">
+.inventoryCheckingDetail-cont,
+.inventoryCheckingDetail-back {
+  margin-bottom: 15px;
+}
+</style>

+ 146 - 0
src/views/inventoryManagement/inventoryChecking/financialAuditDetail.vue

@@ -0,0 +1,146 @@
+<template>
+  <div class="financialAuditDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="financialAuditDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="financialAuditDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="1" type="primary" id="financialAuditDetail-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="financialAuditDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions :column="3">
+            <a-descriptions-item label="盘点单号">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="监盘审核状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="完结状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="库存总数量">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="库存总成本(¥)">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 详情 -->
+    <a-card size="small" :bordered="false" class="financialAuditDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="详情">
+          <!-- 总计 -->
+          <a-alert type="info" showIcon style="margin-bottom:15px">
+            <div slot="message">盘盈总数量: <strong>6</strong> ,库存总成本(¥): <strong>6</strong> ,盘亏总数量: <strong>6</strong> ,盘亏总成本(¥): <strong>6</strong>,盈亏总数量: <strong>6</strong> ,盈亏总成本(¥): <strong>6</strong> </div>
+          </a-alert>
+          <!-- 筛选条件 -->
+          <div class="table-page-search-wrapper">
+            <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+              <a-row :gutter="15">
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="类型">
+                    <a-select placeholder="请选择" id="financialAuditDetail-type" allowClear v-model="queryParam.dataSourceNo">
+                      <a-select-option v-for="item in brandData" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
+                    </a-select>
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                  <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="financialAuditDetail-refresh">查询</a-button>
+                  <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="financialAuditDetail-reset">重置</a-button>
+                </a-col>
+              </a-row>
+            </a-form>
+          </div>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            bordered>
+            <!-- 采购数量 -->
+            <template slot="purchaseNum" slot-scope="text, record">
+              <span>{{record.purchaseNum}}</span>
+            </template>
+            <!-- 缺货数量 -->
+            <template slot="outOfStockNum" slot-scope="text, record">
+              <span>{{record.outOfStockNum}}</span>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+  </div>
+</template>
+
+<script>
+  import { STable, VSelect } from '@/components'
+  export default{
+    components: { STable, VSelect },
+    data(){
+      return{
+        queryParam: {
+          dataSourceNo: undefined
+        },
+        exportLoading: false, // 导出loading
+        disabled: false, //  查询、重置按钮是否可操作
+        // 表头
+        columns: [
+          { title: '序号', dataIndex: 'no', align: 'center' },
+          { title: '产品编码', dataIndex: 'creatDate', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '产品名称', dataIndex: 'custName', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '单位', dataIndex: 'mementPay', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '库存数量', scopedSlots: { customRender: 'outOfStockNum' }, align: 'center' },
+          { title: '盘点数量', dataIndex: 'tostalP', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+          { title: '盈亏数量', dataIndex: 'totalNums', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        ],
+        // 加载数据方法 必须为 Promise 对象
+        loadData: parameter => {
+          this.disabled = true
+          // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+          //   const data = res.data
+          //   const no = (data.pageNo - 1) * data.pageSize
+          //   for (var i = 0; i < data.list.length; i++) {
+          //     data.list[i].no = no + i + 1
+          //   }
+          //   this.disabled = false
+          //   return data
+          // })
+          const _this = this
+          return new Promise(function(resolve, reject){
+            const data = {
+              pageNo: 1,
+              pageSize: 10,
+              list: [
+                { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+              ],
+              count: 10
+            }
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            _this.disabled = false
+            resolve(data)
+          })
+        },
+        brandData: []
+      }
+    },
+    methods: {
+      //  重置
+      resetSearchForm(){},
+      //  返回列表
+      handleBack(){
+        this.$router.push({ path: '/inventoryManagement/inventoryChecking/list'})
+      },
+    }
+  }
+</script>
+
+<style lang="less">
+  .financialAuditDetail-cont, .financialAuditDetail-back{
+    margin-bottom: 15px;
+  }
+</style>

+ 219 - 0
src/views/inventoryManagement/inventoryChecking/list.vue

@@ -0,0 +1,219 @@
+<template>
+  <a-card size="small" :bordered="false" class="inventoryCheckingList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="创建时间">
+              <a-range-picker
+                style="width:100%"
+                id="inventoryCheckingList-creatTime"
+                :disabledDate="disabledDate"
+                @change="creatTimechange"
+                :format="dateFormat"
+                :placeholder="['开始时间', '结束时间']" />
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="状态">
+              <v-select code="ENABLED_FLAG" id="inventoryCheckingList-enabledFlag" v-model="queryParam.enabledFlag" allowClear placeholder="请选择状态"></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryCheckingList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="inventoryCheckingList-reset">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="inventoryCheckingList-add" type="primary" @click="handleEdit()">新增盘点单</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :showPagination="false"
+      :scroll="{ x: 1480 }"
+      bordered>
+      <!-- 状态 -->
+      <template slot="state" slot-scope="text, record">
+        <a-tag :color="record.state==1?'green':'red'" >{{ record.state==1? '待提交': '待单据审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleEexamine(record)" id="inventoryCheckingList-eexamine-btn">审核</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleInventory(record)" id="inventoryCheckingList-inventory-btn">盘点</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="inventoryCheckingList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="inventoryCheckingList-detail-btn">详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="inventoryCheckingList-del-btn">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑盘点单 -->
+    <inventory-checking-tips-modal :openModal="openModal" :nowData="nowData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </a-card>
+</template>
+
+<script>
+import { warehouseAllList, warehouseDel } from '@/api/warehouse'
+import { STable, VSelect } from '@/components'
+import inventoryCheckingTipsModal from './checkingTipsModal.vue'
+export default {
+  components: { STable, VSelect, inventoryCheckingTipsModal },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        enabledFlag: undefined, //  状态
+        beginDate: '', //  创建时间  开始时间
+        endDate: '' //  创建时间  结束时间
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      dateFormat: 'YYYY-MM-DD',
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '盘点单号', dataIndex: 'nsso', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存总款数', dataIndex: 'no3', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存总数量', dataIndex: 'n4o', width: 110, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '开单人', dataIndex: 'neo', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '单据审核时间', dataIndex: 'shcreateDate', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', scopedSlots: { customRender: 'state' }, width: 100, align: 'center' },
+        { title: '盘点类型', dataIndex: 'sort', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 260, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return warehouseAllList( this.queryParam ).then(res => {
+        //   const data = res.data
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', state: 1, purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '2', state: 2, purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '3', state: 3, purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '4', state: 4, purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '5', state: 5, purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false, //  新增编辑  弹框
+      itemId: '', //  当前id
+      nowData: null //  当前记录数据
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    //  创建时间  change
+    creatTimechange (dates, dateStrings) {
+      this.queryParam.beginDate = dateStrings[0]
+      this.queryParam.endDate = dateStrings[1]
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.name = ''
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      this.itemId = row ? row.id : null
+      this.nowData = row || null
+      this.openModal = true
+    },
+    //  新增/编辑  成功
+    handleOk (type) {
+      if (type == 'a') {
+        this.$router.push({ path: `/inventoryManagement/inventoryChecking/overall/${this.itemId}` })
+      } else if (type == 'b') {
+        this.$router.push({ path: `/inventoryManagement/inventoryChecking/selfDisk/${this.itemId}` })
+      }
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  详情
+    handleDetail (row) {
+      if (row.state == 3) { //  待盘点  详情
+        this.$router.push({ path: `/inventoryManagement/inventoryChecking/makeInventory/detail/${row.id}` })
+      } else if (row.state == 4) { //  待财务审核  详情
+        this.$router.push({ path: `/inventoryManagement/inventoryChecking/financialAudit/detail/${row.id}` })
+      } else { //  其他状态  详情
+        this.$router.push({ path: `/inventoryManagement/inventoryChecking/detail/${row.id}` })
+      }
+    },
+    //  审核
+    handleEexamine (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要审核通过吗?',
+        okText: row.state == 2 ? '确定' : '审核通过',
+        cancelText: row.state == 2 ? '取消' : '驳回重盘',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  盘点
+    handleInventory (row) {
+      this.$router.push({ path: `/inventoryManagement/inventoryChecking/makeInventory/${row.id}` })
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          // warehouseDel({
+          //   id: row.id
+          // }).then(res => {
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    }
+  }
+}
+</script>

+ 187 - 0
src/views/inventoryManagement/inventoryChecking/makeInventory.vue

@@ -0,0 +1,187 @@
+<template>
+  <div class="makeInventory-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="makeInventory-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="makeInventory-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="1" type="primary" id="makeInventory-print-btn">快速打印</a-button>
+        <a-button key="2" id="makeInventory-preview-btn">打印预览</a-button>
+        <a-button key="3" type="danger" @click="handleExport" :loading="exportLoading" id="makeInventory-export-btn">导出</a-button>
+        <a-button key="4" @click="handleImport" id="makeInventory-import-btn">导入</a-button>
+        <a-button key="5" type="link" @click="handleDownImport" id="makeInventory-down-import-btn">下载导入模板</a-button>
+      </template>
+    </a-page-header>
+    <!-- 详情 -->
+    <a-card size="small" :bordered="false" class="makeInventory-cont">
+      <!-- 筛选条件 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品编码">
+                <a-input id="makeInventory-bundleName" v-model.trim="queryParam.bundleName" allowClear placeholder="请输入产品编码"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品名称">
+                <a-input id="makeInventory-bundleName" v-model.trim="queryParam.bundleName" allowClear placeholder="请输入产品名称"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品类别">
+                <a-cascader :options="typeData" id="makeInventory-state" placeholder="请选择产品类别" allowClear v-model="queryParam.brand" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="makeInventory-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="makeInventory-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ x: 1070 }"
+        bordered>
+        <!-- 盘点数量 -->
+        <template slot="outOfStockNum" slot-scope="text, record">
+          <a-input-number
+            id="makeInventory-outOfStockNum"
+            :value="record.outOfStockNum"
+            :precision="0"
+            :min="0"
+            :max="999999"
+            placeholder="请输入" />
+        </template>
+      </s-table>
+    </a-card>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="makeInventory-submit" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: {
+        dataSourceNo: undefined
+      },
+      exportLoading: false, // 导出loading
+      disabled: false, //  查询、重置按钮是否可操作
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'custName', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位', dataIndex: 'mementPay', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'memsentPay', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'memendtPay', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'tostalP', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '盘点数量', scopedSlots: { customRender: 'outOfStockNum' }, width: 150, align: 'center' },
+        { title: '盈亏数量', dataIndex: 'totalNums', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      typeData: []
+    }
+  },
+  methods: {
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/inventoryChecking/list' })
+    },
+    //  导入
+    handleImport () {},
+    //  下载导入模板
+    handleDownImport () {},
+    //  提交
+    handleSubmit () {},
+    //  重置
+    resetSearchForm () {},
+    //  导出
+    handleExport () {
+      const params = this.queryParam
+      if (this.oldTime && this.oldTime.length > 0) {
+        params.beginOldExpiryDate = moment(this.oldTime[0]).format('YYYY-MM-DD')
+        params.endOldExpirydDate = moment(this.oldTime[1]).format('YYYY-MM-DD')
+      } else {
+        params.beginOldExpiryDate = ''
+        params.endOldExpirydDate = ''
+      }
+      if (this.newTime && this.newTime.length > 0) {
+        params.beginDate = moment(this.newTime[0]).format('YYYY-MM-DD')
+        params.endDate = moment(this.newTime[1]).format('YYYY-MM-DD')
+      } else {
+        params.beginDate = ''
+        params.endDate = ''
+      }
+      this.exportLoading = true
+      customerBundleExportDelay(params).then(res => {
+        this.exportLoading = false
+        this.download(res)
+      })
+    },
+    download (data) {
+      if (!data) { return }
+      const url = window.URL.createObjectURL(new Blob([data]))
+      const link = document.createElement('a')
+      link.style.display = 'none'
+      link.href = url
+      const a = moment().format('YYYYMMDDHHmmss')
+      const fname = '仓库调拨' + a
+      link.setAttribute('download', fname + '.xlsx')
+      document.body.appendChild(link)
+      link.click()
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .makeInventory-cont, .makeInventory-back{
+    margin-bottom: 15px;
+  }
+</style>

+ 144 - 0
src/views/inventoryManagement/inventoryChecking/makeInventoryDetail.vue

@@ -0,0 +1,144 @@
+<template>
+  <div class="makeInventoryDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="makeInventoryDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="makeInventoryDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="1" type="primary" id="makeInventoryDetail-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="makeInventoryDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions :column="3">
+            <a-descriptions-item label="盘点单号">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="监盘审核状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="完结状态">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 详情 -->
+    <a-card size="small" :bordered="false" class="makeInventoryDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="详情">
+          <!-- 总计 -->
+          <a-alert type="info" showIcon style="margin-bottom:15px">
+            <div slot="message">库存总数量: <strong>6</strong> ,盈亏总数量: <strong>6</strong></div>
+          </a-alert>
+          <!-- 筛选条件 -->
+          <div class="table-page-search-wrapper">
+            <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+              <a-row :gutter="15">
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="类型">
+                    <a-select placeholder="请选择" id="makeInventoryDetail-type" allowClear v-model="queryParam.dataSourceNo">
+                      <a-select-option v-for="item in brandData" :key="item.id" :value="item.id">{{ item.name }}</a-select-option>
+                    </a-select>
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                  <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="makeInventoryDetail-refresh">查询</a-button>
+                  <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="makeInventoryDetail-reset">重置</a-button>
+                </a-col>
+              </a-row>
+            </a-form>
+          </div>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            bordered>
+            <!-- 采购数量 -->
+            <template slot="purchaseNum" slot-scope="text, record">
+              <span>{{record.purchaseNum}}</span>
+            </template>
+            <!-- 缺货数量 -->
+            <template slot="outOfStockNum" slot-scope="text, record">
+              <span>{{record.outOfStockNum}}</span>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+  </div>
+</template>
+
+<script>
+  import { STable, VSelect } from '@/components'
+  export default{
+    components: { STable, VSelect },
+    data(){
+      return{
+        queryParam: {
+          dataSourceNo: undefined
+        },
+        exportLoading: false, // 导出loading
+        disabled: false, //  查询、重置按钮是否可操作
+        // 表头
+        columns: [
+          { title: '序号', dataIndex: 'no', align: 'center' },
+          { title: '产品编码', dataIndex: 'creatDate', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '产品名称', dataIndex: 'custName', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '单位', dataIndex: 'mementPay', align: 'center', customRender: function (text) { return text || '--' } },
+          { title: '库存数量', scopedSlots: { customRender: 'outOfStockNum' }, align: 'center' },
+          { title: '盘点数量', dataIndex: 'tostalP', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+          { title: '盈亏数量', dataIndex: 'totalNums', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        ],
+        // 加载数据方法 必须为 Promise 对象
+        loadData: parameter => {
+          this.disabled = true
+          // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+          //   const data = res.data
+          //   const no = (data.pageNo - 1) * data.pageSize
+          //   for (var i = 0; i < data.list.length; i++) {
+          //     data.list[i].no = no + i + 1
+          //   }
+          //   this.disabled = false
+          //   return data
+          // })
+          const _this = this
+          return new Promise(function(resolve, reject){
+            const data = {
+              pageNo: 1,
+              pageSize: 10,
+              list: [
+                { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+              ],
+              count: 10
+            }
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            _this.disabled = false
+            resolve(data)
+          })
+        },
+        brandData: []
+      }
+    },
+    methods: {
+      //  重置
+      resetSearchForm(){},
+      //  返回列表
+      handleBack(){
+        this.$router.push({ path: '/inventoryManagement/inventoryChecking/list'})
+      },
+    }
+  }
+</script>
+
+<style lang="less">
+  .makeInventoryDetail-cont, .makeInventoryDetail-back{
+    margin-bottom: 15px;
+  }
+</style>

+ 108 - 0
src/views/inventoryManagement/inventoryChecking/overall.vue

@@ -0,0 +1,108 @@
+<template>
+  <div class="inventoryCheckingOverall-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="inventoryCheckingOverall-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="inventoryChecking-overall-submit" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-card size="small" :bordered="false" class="inventoryCheckingOverall-cont">
+      <!-- 操作按钮 -->
+      <div class="table-operator">
+        <a-checkbox-group @change="onChange" v-model="queryParam.keyword" :disabled="disabled" id="inventoryCheckingOverall-type">
+          <a-checkbox value="A">不含废品仓</a-checkbox>
+          <a-checkbox value="B">有库存</a-checkbox>
+        </a-checkbox-group>
+      </div>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :showPagination="false"
+        bordered>
+      </s-table>
+    </a-card>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="inventoryChecking-overall-submit" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
+</template>
+
+<script>
+import { warehouseAllList, warehouseDel } from '@/api/warehouse'
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        keyword: [] //
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 70, align: 'center' },
+        { title: '产品编码', dataIndex: 'createDate', width: 180, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'nsso', width: 70, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位', dataIndex: 'no3', width: 70, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'n4o', width: 70, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return warehouseAllList( this.queryParam ).then(res => {
+        //   const data = res.data
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+
+    }
+  },
+  methods: {
+    //  提交
+    handleSubmit () {
+
+    },
+    //  返回
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/inventoryChecking/list' })
+    },
+    //
+    onChange () {}
+  }
+}
+</script>
+
+<style lang="less">
+  .inventoryCheckingOverall-wrap{
+    padding: 10px 0 30px;
+    .table-operator{
+      margin-bottom: 25px;
+    }
+    .inventoryCheckingOverall-cont, .inventoryCheckingOverall-back{
+      margin-bottom: 15px;
+    }
+  }
+</style>

+ 326 - 0
src/views/inventoryManagement/inventoryChecking/selfDisk.vue

@@ -0,0 +1,326 @@
+<template>
+  <div class="selfDisk-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="selfDisk-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="selfDisk-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <!-- 选择产品 -->
+    <a-card size="small" :bordered="false" class="selfDisk-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1">
+          <template slot="header">选择产品</template>
+          <!-- 选择产品 -->
+          <div>
+            <!-- 搜索条件 -->
+            <div class="table-page-search-wrapper">
+              <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+                <a-row :gutter="15">
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="关键词">
+                      <a-input id="selfDisk-bundleName" v-model.trim="queryParam.bundleName" allowClear placeholder="产品名称/产品编码/原厂编码"/>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品品牌">
+                      <a-select
+                        placeholder="请选择"
+                        id="selfDisk-state"
+                        allowClear
+                        v-model="queryParam.dataSourceNo"
+                        :showSearch="true"
+                        option-filter-prop="children"
+                        :filter-option="filterOption">
+                        <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                      </a-select>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品类别">
+                      <a-cascader :options="typeData" id="selfDisk-state" placeholder="请选择产品类别" allowClear v-model="queryParam.brand" />
+                    </a-form-item>
+                  </a-col>
+                  <template v-if="advanced">
+                    <a-col :md="6" :sm="24">
+                      <a-form-item label="库存">
+                        <a-select
+                          placeholder="请选择"
+                          id="selfDisk-state"
+                          allowClear
+                          v-model="queryParam.dataSourceNo"
+                          :showSearch="true"
+                          option-filter-prop="children"
+                          :filter-option="filterOption">
+                          <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="24">
+                      <a-form-item label="仓库">
+                        <a-select
+                          placeholder="请选择"
+                          id="selfDisk-state"
+                          allowClear
+                          v-model="queryParam.dataSourceNo"
+                          :showSearch="true"
+                          option-filter-prop="children"
+                          :filter-option="filterOption">
+                          <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="24">
+                      <a-form-item label="仓位">
+                        <a-select
+                          placeholder="请选择"
+                          id="selfDisk-state"
+                          allowClear
+                          v-model="queryParam.dataSourceNo"
+                          :showSearch="true"
+                          option-filter-prop="children"
+                          :filter-option="filterOption">
+                          <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                        </a-select>
+                      </a-form-item>
+                    </a-col>
+                  </template>
+                  <a-col :md="6" :sm="24">
+                    <a-button style="margin-bottom: 18px;" type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="selfDisk-refresh">查询</a-button>
+                    <a-button style="margin: 0 0 18px 8px" @click="resetSearchForm" :disabled="disabled" id="selfDisk-reset">重置</a-button>
+                    <a @click="advanced=!advanced" style="margin-left: 8px">
+                      {{ advanced ? '收起' : '展开' }}
+                      <a-icon :type="advanced ? 'up' : 'down'"/>
+                    </a>
+                  </a-col>
+                </a-row>
+              </a-form>
+            </div>
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="table"
+              size="default"
+              :rowKey="(record) => record.id"
+              :columns="columns"
+              :data="loadData"
+              :scroll="{ x: 1420 }"
+              bordered>
+              <!-- 操作 -->
+              <template slot="action" slot-scope="text, record">
+                <a-button size="small" type="link" @click="handleAdd(record)" id="selfDisk-add-btn">添加</a-button>
+              </template>
+            </s-table>
+          </div>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 已选产品 -->
+    <a-card size="small" :bordered="false" class="selfDisk-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1">
+          <template slot="header">
+            已选产品
+            <a-button size="small" class="import-btn" id="selfDisk-import-btn" @click.stop="handleImport">导入明细</a-button>
+          </template>
+          <!-- 已选产品 -->
+          <div>
+            <!-- 总计 -->
+            <a-alert type="info" showIcon style="margin-bottom:15px">
+              <div slot="message">产品款数 <strong>6</strong> ,采购数量合计 <strong>6</strong> ,采购金额合计¥<strong>6.33</strong></div>
+            </a-alert>
+            <!-- 列表 -->
+            <s-table
+              class="sTable"
+              ref="table"
+              size="default"
+              :rowKey="(record) => record.id"
+              :columns="chooseColumns"
+              :data="chooseLoadData"
+              :scroll="{ x: 1420 }"
+              bordered>
+              <!-- 操作 -->
+              <template slot="action" slot-scope="text, record">
+                <a-button size="small" type="link" @click="handleDel(record)" id="selfDisk-del-btn">删除</a-button>
+              </template>
+            </s-table>
+          </div>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="warehouseAllocationEdit-submit" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: {
+
+      },
+      brandData: [], //  产品品牌  下拉数据
+      typeData: [], //  产品类别  下拉数据
+      advanced: false, //  高级搜索 展开/关闭
+      disabled: false, //  查询、重置按钮是否可操作
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center', sorter: true, customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'custName', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'totalP', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品品牌', dataIndex: 'custssName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品级别', dataIndex: 'custsdName', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'totalNums', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'totalNsums', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'storageQuantity', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', scopedSlots: { customRender: 'outOfStockNum' }, width: 100, align: 'center' },
+        { title: '最后入库时间', scopedSlots: { customRender: 'purchaseNum' }, width: 160, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      // 表头
+      chooseColumns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center', sorter: true },
+        { title: '产品名称', dataIndex: 'custName', align: 'center' },
+        { title: '原厂编码', dataIndex: 'totalP', width: 140, align: 'center' },
+        { title: '产品品牌', dataIndex: 'custsNasme', width: 100, align: 'center' },
+        { title: '产品级别', dataIndex: 'custsNdme', width: 100, align: 'center' },
+        { title: '仓库', dataIndex: 'totalNums', width: 100, align: 'center' },
+        { title: '仓位', dataIndex: 'totalNsums', width: 100, align: 'center' },
+        { title: '库存数量', dataIndex: 'storageQuantity', width: 100, align: 'center' },
+        { title: '单位', scopedSlots: { customRender: 'outOfStockNum' }, width: 100, align: 'center' },
+        { title: '最后入库时间', scopedSlots: { customRender: 'purchaseNum' }, width: 160, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      chooseLoadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', custssName: 0, creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '2', purchaseNo: 'jgqp11111111111', custssName: 0, creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' },
+              { id: '3', purchaseNo: 'jgqp11111111111', custssName: 0, creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false // 选择基本信息弹框是否显示
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  提交
+    handleSubmit () {},
+    //  添加
+    handleAdd (row) {},
+    //  删除
+    handleDel (row) {},
+    //  编辑基本信息
+    handleEditInfo () {
+      this.openModal = true
+    },
+    //  基本信息  保存
+    handleOk () {
+
+    },
+    //  导入明细
+    handleImport () {
+      console.log(333)
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/inventoryChecking/list' })
+    },
+    filterOption (input, option) {
+      	return (
+      		option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      	)
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.openModal = false
+    })
+  }
+}
+</script>
+
+<style lang="less">
+  .selfDisk-wrap{
+    .selfDisk-back{
+      margin-bottom: 15px;
+    }
+    .selfDisk-cont{
+      margin-bottom: 15px;
+      .import-btn{
+        margin-left: 15px;
+      }
+    }
+  }
+</style>

+ 132 - 0
src/views/inventoryManagement/inventoryQuery/detailModal.vue

@@ -0,0 +1,132 @@
+<template>
+  <a-modal
+    centered
+    class="inventoryQueryDetail-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancle="isShow=false"
+    width="80%">
+    <!-- 合计 -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div class="ftext" slot="message">现有库存总数量(个):<strong>998</strong>;现有库存总成本(¥):<strong>2009.00</strong>。</div>
+    </a-alert>
+    <!-- 库存详情 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1220 }"
+      bordered>
+    </s-table>
+    <div class="btn-cont">
+      <a-button id="inventoryQueryDetail-detail-modal-back" @click="isShow = false">返回列表</a-button>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+export default {
+  name: 'InventoryQueryDetailModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    }
+  },
+  computed: {
+    modalTit () {
+      return '库存详情'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productNum', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'productOldNum', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '入库时间', dataIndex: 'productBrand', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'productType', width: 100, align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'productTypes', width: 100, align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '入库类型', dataIndex: 'productTypess', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '库存数量', dataIndex: 'inventoryNum', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '成本单价', dataIndex: 'inventoryMoney', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+    }
+  },
+  methods: {
+
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        const _this = this
+        setTimeout(() => {
+          _this.$refs.table.refresh(true)
+        }, 100)
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .inventoryQueryDetail-modal{
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 200 - 0
src/views/inventoryManagement/inventoryQuery/list.vue

@@ -0,0 +1,200 @@
+<template>
+  <a-card size="small" :bordered="false" class="inventoryQueryList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="产品编码">
+              <a-input id="inventoryQueryList-productCode" v-model.trim="queryParam.productCode" allowClear placeholder="请输入产品编码"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="原厂编码">
+              <a-input id="inventoryQueryList-productOrigCode" v-model.trim="queryParam.productOrigCode" allowClear placeholder="请输入原厂编码"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="产品名称">
+              <a-input id="inventoryQueryList-productName" v-model.trim="queryParam.productName" allowClear placeholder="请输入产品名称"/>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品品牌">
+                <a-select id="inventoryQueryList-brandName" placeholder="请选择产品品牌" allowClear v-model="queryParam.brandName">
+                  <a-select-option v-for="item in brandData" :key="item.stationNo" :value="item.stationNo">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="产品类别">
+                <a-cascader :options="typeData" placeholder="请选择产品类别" allowClear v-model="queryParam.productTypeName" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="库存数量是否为0">
+                <a-switch checkedChildren="是" unCheckedChildren="否" id="inventoryQueryList-currentStockQty" v-model="queryParam.currentStockQty" />
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryQueryList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="inventoryQueryList-reset">重置</a-button>
+            <a-button
+              style="margin-left: 8px"
+              type="danger"
+              @click="handleExport"
+              :disabled="disabled"
+              :loading="exportLoading"
+              id="inventoryQueryList-export">导出</a-button>
+            <a @click="advanced=!advanced" style="margin-left: 8px">
+              {{ advanced ? '收起' : '展开' }}
+              <a-icon :type="advanced ? 'up' : 'down'"/>
+            </a>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 合计 -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div class="ftext" slot="message">现有库存总数量(个):<strong>998</strong>;现有库存总成本(¥):<strong>2009.00</strong>。</div>
+    </a-alert>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1370 }"
+      bordered>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="goDetail(record)" id="inventoryQueryList-detail-btn">库存详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" style="margin-left: 8px" @click="goWarehouseDetail(record)" id="inventoryQueryList-warehouseDetail-btn">出入库明细</a-button>
+      </template>
+    </s-table>
+    <!-- 库存详情 -->
+    <inventory-query-detail-modal :openModal="openModal" :itemId="itemId" @close="closeModal" />
+  </a-card>
+</template>
+
+<script>
+import moment from 'moment'
+import { stockList } from '@/api/stock'
+import { STable } from '@/components'
+import inventoryQueryDetailModal from './detailModal.vue'
+export default {
+  components: { STable, inventoryQueryDetailModal },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      queryParam: { //  查询条件
+        productCode: '', //  产品编码
+        productOrigCode: '', //  原厂编码
+        productName: '', //  产品名称
+        brandName: undefined, //  产品品牌
+        productTypeName: undefined, //  产品类别
+        currentStockQty: false //  库存数量是否为0
+      },
+      exportLoading: false, // 导出loading
+      disabled: false, //  查询、重置按钮是否可操作
+      brandData: [], //  产品品牌下拉数据
+      typeData: [], //  产品类别下拉数据
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '最后入库时间', dataIndex: 'productCosde', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位', dataIndex: 'productOrigCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品品牌', dataIndex: 'brandName', width: 140, align: 'center', customRender: function (text) { return text || '--' }, sorter: true },
+        { title: '库存数量', dataIndex: 'productType', width: 140, align: 'center', customRender: function (text) { return text || '--' }, sorter: true },
+        { title: '库存成本(¥)', dataIndex: 'currentStockCost', width: 165, align: 'center', sorter: true, customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 200, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.queryParam = {}
+        // return stockList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productPic: ['https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', 'https://qn.antdv.com/vue.png'], productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false, //  查看库存详情  弹框
+      itemId: '' //  当前库存记录id
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.productCode = ''
+      this.queryParam.productOrigCode = ''
+      this.queryParam.productName = ''
+      this.queryParam.brandName = undefined
+      this.queryParam.productTypeName = undefined
+      this.queryParam.currentStockQty = false
+      this.$refs.table.refresh(true)
+    },
+    //  库存详情
+    goDetail (row) {
+      this.itemId = row.id
+      this.openModal = true
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  出入库明细
+    goWarehouseDetail (row) {
+      this.$router.push({ path: `/inventoryManagement/inventoryQuery/warehouseDetail/${row.id}` })
+    },
+    //  导出
+    handleExport () {
+      const params = this.queryParam
+      this.exportLoading = true
+      // customerBundleExportDelay(params).then(res => {
+      //   this.exportLoading = false
+      //   this.download(res)
+      // })
+    },
+    download (data) {
+      if (!data) { return }
+      const url = window.URL.createObjectURL(new Blob([data]))
+      const link = document.createElement('a')
+      link.style.display = 'none'
+      link.href = url
+      const a = moment().format('YYYYMMDDHHmmss')
+      const fname = '库存查询' + a
+      link.setAttribute('download', fname + '.xlsx')
+      document.body.appendChild(link)
+      link.click()
+    }
+  }
+}
+</script>

+ 196 - 0
src/views/inventoryManagement/inventoryQuery/warehouseDetail.vue

@@ -0,0 +1,196 @@
+<template>
+  <div class="inventoryQueryWarehouseDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="inventoryQueryWarehouseDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="inventoryQueryWarehouseDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-card size="small" :bordered="false" class="inventoryQueryWarehouseDetail-cont">
+      <!-- 搜索条件 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="变动类型">
+                <a-select id="inventoryQueryWarehouseDetail-bundleNames" placeholder="请选择产品品牌" allowClear v-model="queryParam.brand">
+                  <a-select-option v-for="item in brandData" :key="item.stationNo" :value="item.stationNo">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="单据类型">
+                <a-select id="inventoryQueryWarehouseDetail-bundleNames" placeholder="请选择产品品牌" allowClear v-model="queryParam.brand">
+                  <a-select-option v-for="item in brandData" :key="item.stationNo" :value="item.stationNo">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="仓库">
+                <a-select id="inventoryQueryWarehouseDetail-bundleNames" placeholder="请选择产品品牌" allowClear v-model="queryParam.brand">
+                  <a-select-option v-for="item in brandData" :key="item.stationNo" :value="item.stationNo">{{ item.name }}</a-select-option>
+                </a-select>
+              </a-form-item>
+            </a-col>
+            <template v-if="advanced">
+              <a-col :md="6" :sm="24">
+                <a-form-item label="单据审核时间">
+                  <a-range-picker
+                    style="width:100%"
+                    id="inventoryQueryWarehouseDetail-bundleNamesss"
+                    :disabledDate="disabledDate"
+                    v-model="queryParam.brand"
+                    :format="dateFormat"
+                    :placeholder="['开始时间', '结束时间']" />
+                </a-form-item>
+                </a-form-item>
+              </a-col>
+              <a-col :md="6" :sm="24">
+                <a-form-item label="单位名称">
+                  <a-input id="inventoryQueryWarehouseDetail-orderBundleNo" v-model.trim="queryParam.orderBundleNo" allowClear placeholder="请输入单位名称"/>
+                </a-form-item>
+              </a-col>
+            </template>
+            <a-col :md="6" :sm="24">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="inventoryQueryWarehouseDetail-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="inventoryQueryWarehouseDetail-reset">重置</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 8px">
+                {{ advanced ? '收起' : '展开' }}
+                <a-icon :type="advanced ? 'up' : 'down'"/>
+              </a>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 合计 -->
+      <a-alert type="info" showIcon style="margin-bottom:15px">
+        <div class="ftext" slot="message">当前库存总数量(个):<strong>998</strong>;当前库存总成本(¥):<strong>2009.00</strong>。</div>
+      </a-alert>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :showPagination="false"
+        :scroll="{ x: 1760 }"
+        bordered>
+        <!-- 数量 -->
+        <template slot="number" slot-scope="text, record">
+          <span :class="[record.type == 1 ? 'green' : 'red']">{{ record.type == 1 ? '+' : '-' }}{{ record.number }}</span>
+        </template>
+      </s-table>
+    </a-card>
+  </div>
+</template>
+
+<script>
+// import { customerBundleDelayList, customerBundleExportDelay } from '@/api/FinancialManagement'
+import { STable } from '@/components'
+export default {
+  components: { STable },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      queryParam: { //  查询条件
+        orderBundleNo: '', //  订单编号
+        orderBundle: {
+          custMobile: '' //  客户手机
+        },
+        bundleName: '', //  套餐名称
+        itemName: '', //  服务名称
+        brand: undefined, //  产品品牌
+        inventoryNum: false //  库存数量是否为0
+      },
+      exportLoading: false, // 导出loading
+      disabled: false, //  查询、重置按钮是否可操作
+      brandData: [], //  产品品牌下拉数据
+      typeData: [], //  产品类别下拉数据
+      dateFormat: 'YYYY-MM-DD',
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productNum', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'productOldNum', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '入库批次时间', dataIndex: 'prodsuctBrand', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单据类型', dataIndex: 'productBdrand', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单据审核时间', dataIndex: 'prodfuctBrand', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位名称', dataIndex: 'produhctBrand', width: 200, align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '仓库', dataIndex: 'productBrangd', width: 140, align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '仓位', dataIndex: 'productBjrand', width: 140, align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '数量', scopedSlots: { customRender: 'number' }, width: 100, align: 'center' },
+        { title: '总成本', dataIndex: 'inventoryMoney', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总售价', dataIndex: 'inventoryMoneys', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      }
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/inventoryQuery/list' })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .inventoryQueryWarehouseDetail-wrap{
+    .inventoryQueryWarehouseDetail-back{
+      margin-bottom: 15px;
+    }
+    .inventoryQueryWarehouseDetail-cont{
+      margin-bottom: 15px;
+    }
+    .green{
+      color: #19be6b;
+    }
+    .red{
+      color: #ed1c24;
+    }
+  }
+</style>

+ 156 - 0
src/views/inventoryManagement/warehouse/editModal.vue

@@ -0,0 +1,156 @@
+<template>
+  <a-modal
+    centered
+    class="warehouseEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <!-- 表单 -->
+    <div>
+      <a-form-model
+        id="warehouseEdit-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="仓库名称" prop="name">
+          <a-input
+            id="warehouseEdit-name"
+            :maxLength="30"
+            v-model="form.name"
+            placeholder="请输入仓库名称(最多30个字符)"
+            allowClear />
+        </a-form-model-item>
+        <a-form-model-item label="排序" prop="sort">
+          <a-input-number v-model="form.sort" :min="0" :max="999999" :precision="0" :step="1" placeholder="请输入排序(0~999999)" style="width: 100%;" />
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button type="primary" id="warehouse-edit-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="warehouse-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+import { warehouseSave } from '@/api/warehouse'
+export default {
+  name: 'warehouseEditModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  computed: {
+    modalTit () {
+      return (this.itemId ? '编辑' : '新增') + '仓库'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 16 }
+      },
+      form: {
+        name: '', // 仓库名称
+        sort: ''  //  排序
+      },
+      rules: {
+        name: [
+          { required: true, message: '请输入仓库名称', trigger: 'blur' }
+        ]
+      }
+    }
+  },
+  methods: {
+    //  详情
+    getDetail(){
+      this.form = {
+        name: this.nowData && this.nowData.name ? this.nowData.name : '',
+        sort: this.nowData && (this.nowData.sort || this.nowData.sort == 0) ? this.nowData.sort : ''
+      }
+    },
+    //  保存
+    handleSave(){
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const params = {
+            id: this.itemId ? this.itemId : undefined,
+            name: this.form.name,  //  仓库名称
+            sort: this.form.sort  //  排序
+          }
+          warehouseSave(params).then(res => {
+            if(res.status == 200){
+              _this.$message.success(res.message)
+              _this.$emit('ok')
+              setTimeout(function () {
+                _this.isShow = false
+                _this.$refs.ruleForm.resetFields()
+              }, 300)
+            }else{
+              
+            }
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }else{
+        this.form = {
+          name: '',
+          sort: ''
+        }
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .warehouseEdit-modal{
+    .ant-modal-body {
+    	padding: 40px 40px 24px;
+    }
+    .btn-cont {
+    	text-align: center;
+    	margin: 35px 0 10px;
+    }
+  }
+</style>

+ 130 - 0
src/views/inventoryManagement/warehouse/list.vue

@@ -0,0 +1,130 @@
+<template>
+  <a-card size="small" :bordered="false" class="warehouseList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="仓库名称">
+              <a-input id="warehouseList-name" v-model.trim="queryParam.name" allowClear placeholder="请输入仓库名称"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="warehouseList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="warehouseList-reset">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="warehouseList-add" type="primary" @click="handleEdit()">新增仓库</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      bordered>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="goStoringLocation(record)" id="warehouseList-storingLocation-btn">仓位管理</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="warehouseList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="warehouseList-del-btn" style="margin-left: 10px;">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑仓库 -->
+    <warehouse-edit-modal :openModal="openModal" :nowData="nowData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </a-card>
+</template>
+
+<script>
+import { warehouseList, warehouseDel } from '@/api/warehouse'
+import { STable } from '@/components'
+import warehouseEditModal from './editModal.vue'
+export default {
+  components: { STable, warehouseEditModal },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        name: '' //  仓库名称
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '仓库名称', dataIndex: 'name', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '排序', dataIndex: 'sort', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return warehouseList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      openModal: false, //  新增编辑  弹框
+      itemId: '', //  当前id
+      nowData: null //  当前记录数据
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.name = ''
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      this.itemId = row ? row.id : null
+      this.nowData = row || null
+      this.openModal = true
+    },
+    //  新增/编辑  成功
+    handleOk () {
+      this.$refs.table.refresh(true)
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          warehouseDel({
+            id: row.id
+          }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+            }
+          })
+        }
+      })
+    },
+    //  查看仓位
+    goStoringLocation (row) {
+      this.$router.push({ path: `/inventoryManagement/storingLocation/${row.warehouseSn}`, query: { name: row.name } })
+    }
+  }
+}
+</script>
+
+<style lang="less"></style>

+ 193 - 0
src/views/inventoryManagement/warehouse/storingLocation/editModal.vue

@@ -0,0 +1,193 @@
+<template>
+  <a-modal
+    centered
+    class="storingLocationEdit-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="800">
+    <!-- 表单 -->
+    <div>
+      <a-form-model
+        id="storingLocationEdit-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="仓位名称" prop="name">
+          <a-input
+            id="storingLocationEdit-name"
+            :maxLength="30"
+            v-model="form.name"
+            placeholder="请输入仓位名称(最多30个字符)"
+            allowClear />
+        </a-form-model-item>
+        <a-form-model-item label="所属仓库" prop="warehouseSn">
+          <a-select id="storingLocationEdit-warehouseSn" disabled placeholder="请选择所属仓库" allowClear v-model="form.warehouseSn">
+            <a-select-option v-for="item in warehouseList" :key="item.id" :value="item.warehouseSn">{{ item.name }}</a-select-option>
+          </a-select>
+        </a-form-model-item>
+        <a-form-model-item label="排序" prop="sort">
+          <a-input-number
+            v-model="form.sort"
+            :min="0"
+            :max="999999"
+            :precision="0"
+            :step="1"
+            placeholder="请输入排序(0~999999)"
+            style="width: 100%;" />
+        </a-form-model-item>
+      </a-form-model>
+      <div class="btn-cont">
+        <a-button type="primary" id="storingLocation-edit-modal-save" @click="handleSave">保存</a-button>
+        <a-button id="storingLocation-edit-modal-back" @click="isShow = false" style="margin-left: 15px;">返回列表</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { STable } from '@/components'
+import { warehouseLocSave, warehouseAllList } from '@/api/warehouse'
+export default {
+  name: 'StoringLocationEditModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    itemId: {
+      type: [Number, String],
+      default: ''
+    },
+    nowData: {
+      type: Object,
+      default: null
+    }
+  },
+  computed: {
+    modalTit () {
+      return (this.itemId ? '编辑' : '新增') + '仓位'
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 16 }
+      },
+      form: {
+        name: '', // 仓位名称
+        warehouseSn: undefined, //  所属仓库
+        sort: '' //  排序
+      },
+      rules: {
+        name: [
+          { required: true, message: '请输入仓位名称', trigger: 'blur' }
+        ],
+        warehouseSn: [
+          { required: true, message: '请选择所属仓库', trigger: 'change' }
+        ]
+      },
+      warehouseList: [] //  仓库  下拉数据
+    }
+  },
+  methods: {
+    //  获取仓库列表数据
+    getWarehouseList () {
+      warehouseAllList({}).then(res => {
+        if (res.status == 200) {
+          this.warehouseList = res.data
+        } else {
+          this.warehouseList = []
+        }
+      })
+    },
+    //  详情
+    getDetail () {
+      this.form = {
+        name: this.nowData && this.nowData.name ? this.nowData.name : '',
+        warehouseSn: this.nowData && this.nowData.warehouseSn ? this.nowData.warehouseSn : '',
+        sort: this.nowData && (this.nowData.sort || this.nowData.sort == 0) ? this.nowData.sort : ''
+      }
+    },
+    //  保存
+    handleSave () {
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          const params = {
+            id: this.itemId ? this.itemId : undefined,
+            warehouseSn: this.form.warehouseSn, //  所属仓库
+            name: this.form.name, //  仓库名称
+            sort: this.form.sort //  排序
+          }
+          warehouseLocSave(params).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$emit('ok')
+              setTimeout(function () {
+                _this.isShow = false
+                _this.$refs.ruleForm.resetFields()
+              }, 300)
+            } else {
+
+            }
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$refs.ruleForm.resetFields()
+        this.form = {
+          name: '',
+          warehouseSn: '',
+          sort: ''
+        }
+        this.$emit('close')
+      } else {
+        this.getWarehouseList()
+        this.form = {
+          name: '',
+          warehouseSn: this.nowData && this.nowData.warehouseSn ? this.nowData.warehouseSn : '',
+          sort: ''
+        }
+      }
+    },
+    itemId (newValue, oldValue) {
+      if (this.isShow && newValue) {
+        this.getDetail()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .storingLocationEdit-modal{
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 10px;
+    }
+  }
+</style>

+ 152 - 0
src/views/inventoryManagement/warehouse/storingLocation/list.vue

@@ -0,0 +1,152 @@
+<template>
+  <div class="storingLocationList-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="storingLocationList-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="storingLocationList-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-card size="small" :bordered="false" class="storingLocationList-cont">
+      <!-- 搜索条件 -->
+      <div class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="仓位名称">
+                <a-input id="storingLocationList-name" v-model.trim="queryParam.name" allowClear placeholder="请输入仓位名称"/>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="storingLocationList-refresh">查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="storingLocationList-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 操作按钮 -->
+      <div class="table-operator">
+        <a-button id="storingLocationList-add" type="primary" @click="handleEdit()">新增仓位</a-button>
+      </div>
+      <strong style="display: block;margin: 30px 0 20px;">所属仓库:{{ $route.query.name }}</strong>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        bordered>
+        <!-- 操作 -->
+        <template slot="action" slot-scope="text, record">
+          <a-button size="small" type="link" @click="handleEdit(record)" id="storingLocationList-edit-btn">编辑</a-button>
+          <a-divider type="vertical" style="margin: 0;" />
+          <a-button size="small" type="link" @click="handleDel(record)" id="storingLocationList-del-btn" style="margin-left: 10px;">删除</a-button>
+        </template>
+      </s-table>
+    </a-card>
+    <!-- 新增/编辑仓位 -->
+    <storing-location-edit-modal :openModal="openModal" :nowData="nowData" :itemId="itemId" @ok="handleOk" @close="closeModal" />
+  </div>
+</template>
+
+<script>
+import { warehouseLocList, warehouseLocDel } from '@/api/warehouse'
+import { STable } from '@/components'
+import storingLocationEditModal from './editModal.vue'
+export default {
+  components: { STable, storingLocationEditModal },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        warehouseSn: this.$route.params.sn, //  仓库sn
+        name: '' //  仓位名称
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '仓位名称', dataIndex: 'name', align: 'center', ellipsis: true },
+        { title: '排序', dataIndex: 'sort', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return warehouseLocList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      openModal: false, //  新增编辑产品品牌  弹框
+      itemId: '', //  当前品牌id
+      nowData: null //  当前记录数据
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.warehouseSn = this.$route.params.sn
+      this.queryParam.name = ''
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      if (row) {
+        this.itemId = row.id
+        row.warehouseSn = this.$route.params.sn
+        this.nowData = row
+      } else {
+        this.itemId = null
+        this.nowData = { warehouseSn: this.$route.params.sn }
+      }
+      this.openModal = true
+    },
+    //  新增/编辑  成功
+    handleOk () {
+      this.$refs.table.refresh(true)
+    },
+    //  关闭弹框
+    closeModal () {
+      this.itemId = ''
+      this.openModal = false
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          warehouseLocDel({
+            id: row.id,
+            warehouseSn: _this.$route.params.sn
+          }).then(res => {
+            if (res.status == 200) {
+              _this.$message.success(res.message)
+              _this.$refs.table.refresh()
+            }
+          })
+        }
+      })
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/inventoryManagement/warehouse/list' })
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .storingLocationList-wrap{
+    .storingLocationList-back{
+      margin-bottom: 15px;
+    }
+  }
+</style>

+ 109 - 0
src/views/inventoryManagement/warehouseAllocation/basicInfoModal.vue

@@ -0,0 +1,109 @@
+<template>
+	<a-modal centered class="warehouseAllocation-basicInfo-modal" :footer="null" :maskClosable="false" title="新增散件入库单" v-model="isShow" @cancle="isShow = false" width="80%">
+		<a-form-model
+			id="warehouseAllocation-basicInfo-form"
+			ref="ruleForm"
+			:model="form"
+			:rules="rules"
+			:label-col="formItemLayout.labelCol"
+			:wrapper-col="formItemLayout.wrapperCol"
+		>
+			<a-form-model-item label="调出仓库" prop="sort">
+				<v-select
+					v-model="form.billStatus"
+					ref="billStatus"
+					id="warehouseAllocation-basicInfo-billStatus"
+					code="PAYMENT_TYPE"
+					placeholder="请选择调出仓库"
+					allowClear
+				></v-select>
+			</a-form-model-item>
+			<a-form-model-item label="调入仓库" prop="sort">
+				<v-select
+					v-model="form.billStatus"
+					ref="billStatus"
+					id="warehouseAllocation-basicInfo-billStatus"
+					code="PAYMENT_TYPE"
+					placeholder="请选择调入仓库"
+					allowClear
+				></v-select>
+			</a-form-model-item>
+			<a-form-model-item label="关联单号" prop="address">
+				<a-input id="warehouseAllocation-basicInfo-address" :maxLength="30" v-model="form.address" placeholder="请输入关联单号(最多30个字符)" allowClear />
+			</a-form-model-item>
+			<a-form-model-item label="备注" prop="remarks">
+				<a-textarea id="warehouseAllocation-basicInfo-remarks" :maxLength="500" v-model="form.remarks" placeholder="请输入备注(最多500个字符)" allowClear />
+			</a-form-model-item>
+		</a-form-model>
+		<div class="btn-cont">
+			<a-button type="primary" id="warehouseAllocation-basicInfo-modal-save" @click="handleSave">保存</a-button>
+			<a-button id="warehouseAllocation-basicInfo-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+		</div>
+	</a-modal>
+</template>
+
+<script>
+import { VSelect } from '@/components';
+export default {
+	name: 'WarehouseAllocationBasicInfoModal',
+	components: { VSelect },
+	props: {
+		openModal: {
+			//  弹框显示状态
+			type: Boolean,
+			default: false
+		}
+	},
+	data() {
+		return {
+			isShow: this.openModal, //  是否打开弹框
+			formItemLayout: {
+				labelCol: { span: 6 },
+				wrapperCol: { span: 16 }
+			},
+			form: {
+				name: '', // 仓库名称
+				sort: '' //  排序
+			},
+			rules: {
+				name: [{ required: true, message: '请输入仓库名称', trigger: 'blur' }]
+			},
+			brandData: [] //  供应商  下拉数据
+		};
+	},
+	methods: {
+		//  保存
+		handleSave() {
+			this.isShow = false
+			this.$emit('ok')
+		},
+		filterOption(input, option) {
+			return option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+		}
+	},
+	watch: {
+		//  父页面传过来的弹框状态
+		openModal(newValue, oldValue) {
+			this.isShow = newValue
+		},
+		//  重定义的弹框状态
+		isShow(newValue, oldValue) {
+			if (!newValue) {
+				this.$emit('close')
+			}
+		}
+	}
+};
+</script>
+
+<style lang="less">
+.warehouseAllocation-basicInfo-modal {
+	.ant-modal-body {
+		padding: 40px 40px 24px;
+	}
+	.btn-cont {
+		text-align: center;
+		margin: 35px 0 10px;
+	}
+}
+</style>

+ 141 - 0
src/views/inventoryManagement/warehouseAllocation/detail.vue

@@ -0,0 +1,141 @@
+<template>
+  <div class="warehouseAllocationDetail-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="warehouseAllocationDetail-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="warehouseAllocationDetail-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="warehouseAllocationDetail-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="warehouseAllocationDetail-print-btn">快速打印</a-button>
+        <a-button key="3" type="danger" @click="handleExport" :loading="exportLoading" id="warehouseAllocationDetail-export-btn">导出</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="warehouseAllocationDetail-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions :column="3">
+            <a-descriptions-item label="调出仓库">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="调入仓库">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="调拨单号">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="关联单号">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="审核状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="完结状态">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="备注">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <a-card size="small" :bordered="false" class="warehouseAllocationDetail-cont">
+      <!-- 总计 -->
+      <a-alert type="info" showIcon style="margin-bottom:15px">
+        <div slot="message">总款数: <strong>6</strong> ,总数量: <strong>6</strong> ,总成本:¥<strong>6.33</strong></div>
+      </a-alert>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="default"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ x: 1335 }"
+        bordered>
+        <!-- 产品类别 -->
+        <template slot="productType" slot-scope="text, record">
+          <a-tooltip placement="top">
+            <template slot="title">
+              <span>{{ record.productTypeName }}</span>
+            </template>
+            {{ record.productTypeName3 }}
+          </a-tooltip>
+        </template>
+        <!-- 成本小计 -->
+        <template slot="totalCost" slot-scope="text, record">
+          <span>{{ (record.allocationCost * record.allocationQty) || 0 }}</span>
+        </template>
+      </s-table>
+    </a-card>
+  </div>
+</template>
+
+<script>
+import { allocWarehouseDetailList } from '@/api/allocWarehouse'
+import { STable, VSelect } from '@/components'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      exportLoading: false, // 导出loading
+      queryParam: {
+        allocationWarehouseSn: this.$route.params.sn
+      },
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center', fixed: 'left' },
+        { title: '产品编码', dataIndex: 'productCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: 200, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'productOrigCode', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '类别', scopedSlots: { customRender: 'productType' }, width: 160, align: 'center' },
+        { title: '数量', dataIndex: 'allocationQty', width: 100, align: 'center' },
+        { title: '单位', dataIndex: 'productUnit', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '成本小计(¥)', scopedSlots: { customRender: 'totalCost' }, width: 135, align: 'center' },
+        { title: '调出仓位', dataIndex: 'outWarehouseLocationName', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调入仓位', dataIndex: 'putWarehouseLocationName', width: 140, align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        return allocWarehouseDetailList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+            const productTypeName1 = data.list[i].productTypeName1 ? data.list[i].productTypeName1 : ''
+            const productTypeName2 = data.list[i].productTypeName2 ? ' > ' + data.list[i].productTypeName2 : ''
+            const productTypeName3 = data.list[i].productTypeName3 ? ' > ' + data.list[i].productTypeName3 : ''
+            data.list[i].productTypeName = productTypeName1 + productTypeName2 + productTypeName3
+          }
+          this.disabled = false
+          return data
+        })
+      }
+    }
+  },
+  methods: {
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/allocationManagement/warehouseAllocation/list' })
+    },
+    //  导出
+    handleExport () {
+      const params = this.queryParam
+      this.exportLoading = true
+      customerBundleExportDelay(params).then(res => {
+        this.exportLoading = false
+        this.download(res)
+      })
+    },
+    download (data) {
+      if (!data) { return }
+      const url = window.URL.createObjectURL(new Blob([data]))
+      const link = document.createElement('a')
+      link.style.display = 'none'
+      link.href = url
+      const a = moment().format('YYYYMMDDHHmmss')
+      const fname = '仓库调拨' + a
+      link.setAttribute('download', fname + '.xlsx')
+      document.body.appendChild(link)
+      link.click()
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .warehouseAllocationDetail-cont, .warehouseAllocationDetail-back{
+    margin-bottom: 15px;
+  }
+</style>

+ 398 - 0
src/views/inventoryManagement/warehouseAllocation/edit.vue

@@ -0,0 +1,398 @@
+<template>
+  <div class="warehouseAllocationEdit-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="warehouseAllocationEdit-back">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="warehouseAllocationEdit-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+      <!-- 操作区,位于 title 行的行尾 -->
+      <template slot="extra">
+        <a-button key="2" id="warehouseAllocationEdit-preview-btn">打印预览</a-button>
+        <a-button key="1" type="primary" id="warehouseAllocationEdit-print-btn">快速打印</a-button>
+      </template>
+    </a-page-header>
+    <!-- 基础信息 -->
+    <a-card size="small" :bordered="false" class="warehouseAllocationEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1">
+          <template slot="header">
+            基础信息
+            <a-button
+              type="primary"
+              shape="circle"
+              size="small"
+              icon="edit"
+              class="edit-circle-btn"
+              id="warehouseAllocationEdit-circle-btn"
+              @click.stop="handleEditInfo" />
+          </template>
+          <a-descriptions :column="3">
+            <a-descriptions-item label="调出仓库">箭冠营销中心</a-descriptions-item>
+            <a-descriptions-item label="调入仓库">箭冠营销中心</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 选择产品 -->
+    <a-card size="small" :bordered="false" class="warehouseAllocationEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="选择产品">
+          <!-- 筛选条件 -->
+          <div class="table-page-search-wrapper">
+            <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+              <a-row :gutter="15">
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="产品编码" prop="name">
+                    <a-input id="warehouseAllocationEdit-name" v-model="queryParam.name" placeholder="请输入产品编码" allowClear />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="产品名称" prop="name">
+                    <a-input id="warehouseAllocationEdit-name" v-model="queryParam.name" placeholder="请输入产品名称" allowClear />
+                  </a-form-item>
+                </a-col>
+                <a-col :md="6" :sm="24">
+                  <a-form-item label="原厂编码" prop="name">
+                    <a-input id="warehouseAllocationEdit-name" v-model="queryParam.name" placeholder="请输入原厂编码" allowClear />
+                  </a-form-item>
+                </a-col>
+                <template v-if="advanced">
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品品牌">
+                      <a-select
+                        placeholder="请选择"
+                        id="warehouseAllocationEdit-state"
+                        allowClear
+                        v-model="queryParam.dataSourceNo"
+                        :showSearch="true"
+                        option-filter-prop="children"
+                        :filter-option="filterOption">
+                        <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                      </a-select>
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="产品类别">
+                      <a-cascader :options="typeData" id="warehouseAllocationEdit-state" placeholder="请选择产品类别" allowClear v-model="queryParam.brand" />
+                    </a-form-item>
+                  </a-col>
+                  <a-col :md="6" :sm="24">
+                    <a-form-item label="调出仓位">
+                      <v-select
+                        v-model="queryParam.billStatus"
+                        ref="billStatus"
+                        id="warehouseAllocationEdit-billStatus"
+                        code="PAYMENT_TYPE"
+                        placeholder="请选择调出仓位"
+                        allowClear></v-select>
+                    </a-form-item>
+                  </a-col>
+                </template>
+                <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                  <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="warehouseAllocationList-refresh">查询</a-button>
+                  <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="warehouseAllocationList-reset">重置</a-button>
+                  <a @click="advanced=!advanced" style="margin-left: 8px">
+                    {{ advanced ? '收起' : '展开' }}
+                    <a-icon :type="advanced ? 'up' : 'down'"/>
+                  </a>
+                </a-col>
+              </a-row>
+            </a-form>
+          </div>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="table"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="columns"
+            :data="loadData"
+            :scroll="{ x: 1560 }"
+            bordered>
+            <!-- 调入仓位 -->
+            <template slot="storageQuantity" slot-scope="text, record">
+              <a-select id="warehouseAllocationEdit-warehouse" placeholder="请选择" allowClear v-model="record.warehouse" style="width: 100%;">
+                <a-select-option v-for="item in typeData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+              </a-select>
+            </template>
+            <!-- 调出数量 -->
+            <template slot="transferOutQuantity" slot-scope="text, record">
+              <a-input-number
+                id="warehouseAllocationEdit-storageQuantity"
+                :value="record.storageQuantity"
+                :precision="0"
+                :min="0"
+                :max="999999"
+                placeholder="请输入" />
+            </template>
+            <!-- 操作 -->
+            <template slot="action" slot-scope="text, record">
+              <a-button size="small" type="link" @click="handleAdd(record)" id="warehouseAllocationEdit-add-btn">添加</a-button>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <!-- 已选产品 -->
+    <a-card size="small" :bordered="false" class="warehouseAllocationEdit-cont">
+      <a-collapse :activeKey="['1']">
+        <a-collapse-panel key="1" header="已选产品">
+          <!-- 总计 -->
+          <a-alert type="info" showIcon style="margin-bottom:15px">
+            <div slot="message">总成本:¥<strong>6.33</strong>,总数量: <strong>6</strong> ,总款数: <strong>6</strong> </div>
+          </a-alert>
+          <!-- 筛选条件 -->
+          <a-row :gutter="15" justify="space-between">
+            <a-col :span="17">
+              <div class="table-page-search-wrapper">
+                <a-form layout="inline" @keyup.enter.native="$refs.chooseTable.refresh(true)">
+                  <a-row :gutter="15">
+                    <a-col :md="9" :sm="24">
+                      <a-form-item label="产品编码" prop="name">
+                        <a-input id="warehouseAllocationEdit-name" v-model="queryParam.name" placeholder="请输入产品编码" allowClear />
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="9" :sm="24">
+                      <a-form-item label="产品名称" prop="name">
+                        <a-input id="warehouseAllocationEdit-name" v-model="queryParam.name" placeholder="请输入产品名称" allowClear />
+                      </a-form-item>
+                    </a-col>
+                    <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+                      <a-button type="primary" @click="$refs.chooseTable.refresh(true)" :disabled="disabled" id="warehouseAllocationList-refresh">查询</a-button>
+                      <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="warehouseAllocationList-reset">重置</a-button>
+                    </a-col>
+                  </a-row>
+                </a-form>
+              </div>
+            </a-col>
+            <a-col :span="7">
+              <a-button size="small" type="primary" id="warehouseAllocationEdit-pladd-btn" style="margin-bottom: 8px;">批量添加</a-button>
+              <a-button size="small" id="warehouseAllocationEdit-import-btn" style="margin-left: 8px">导入明细</a-button>
+              <a-button size="small" type="danger" id="warehouseAllocationEdit-del-all-btn" style="margin: 0 0 8px 8px;">整单删除</a-button>
+            </a-col>
+          </a-row>
+          <!-- 列表 -->
+          <s-table
+            class="sTable"
+            ref="chooseTable"
+            size="default"
+            :rowKey="(record) => record.id"
+            :columns="chooseColumns"
+            :data="chooseLoadData"
+            :scroll="{ x: 1460 }"
+            bordered>
+            <!-- 调入仓位 -->
+            <template slot="storageQuantity" slot-scope="text, record">
+              <a-select id="warehouseAllocationEdit-warehouse" placeholder="请选择" allowClear v-model="record.warehouse" style="width: 100%;">
+                <a-select-option v-for="item in typeData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+              </a-select>
+            </template>
+            <!-- 调出数量 -->
+            <template slot="transferOutQuantity" slot-scope="text, record">
+              <a-input-number
+                id="warehouseAllocationEdit-storageQuantity"
+                :value="record.storageQuantity"
+                :precision="0"
+                :min="0"
+                :max="999999"
+                placeholder="请输入" />
+            </template>
+            <!-- 操作 -->
+            <template slot="action" slot-scope="text, record">
+              <a-button size="small" type="link" @click="handleDel(record)" id="warehouseAllocationEdit-del-btn">删除</a-button>
+            </template>
+          </s-table>
+        </a-collapse-panel>
+      </a-collapse>
+    </a-card>
+    <a-affix :offset-bottom="0">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;">
+        <a-button type="primary" id="warehouseAllocationEdit-submit" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+    <!-- 选择基本信息弹框 -->
+    <basic-info-modal :openModal="openModal" @ok="handleOk" @close="openModal=false" />
+  </div>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+import basicInfoModal from './basicInfoModal.vue'
+export default {
+  components: { STable, VSelect, basicInfoModal },
+  data () {
+    return {
+      queryParam: {
+
+      },
+      brandData: [], //  产品品牌  下拉数据
+      typeData: [], //  产品类别  下拉数据
+      disabled: false, //  查询、重置按钮是否可操作
+      advanced: false, // 高级搜索 展开/关闭
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDate', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'custNahme', width: 200, align: 'center', ellipsis: true },
+        { title: '原厂编码', dataIndex: 'totalP', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌', dataIndex: 'custsNsame', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '类别', dataIndex: 'custsNdame', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出仓位', dataIndex: 'custsNafme', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调入仓位', scopedSlots: { customRender: 'storageQuantity' }, width: 140, align: 'center' },
+        { title: '库存数量', dataIndex: 'custsNagme', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'custsNsagme', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出数量', scopedSlots: { customRender: 'transferOutQuantity' }, width: 140, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      // 表头
+      chooseColumns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '产品编码', dataIndex: 'creatDaite', width: 140, align: 'center', sorter: true, customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'custNayme', width: 200, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'custNdayme', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌', dataIndex: 'mementPsay', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '类别', dataIndex: 'mementPay', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出仓位', scopedSlots: { customRender: 'storageQuantity' }, width: 140, align: 'center' },
+        { title: '调入仓位', dataIndex: 'custsNakme', width: 140, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '单位', dataIndex: 'custssNakme', width: 100, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '调出数量', scopedSlots: { customRender: 'transferOutQuantity' }, width: 140, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 100, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      chooseLoadData: parameter => {
+        this.disabled = true
+        // return customerBundleDelayList( Object.assign(parameter, this.queryParam) ).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', purchaseNo: 'jgqp11111111111', custssName: 0, creatDate: '产品1', custName: 'jgqp111123545', totalP: '箭冠品牌', totalNums: '产品分类1', totalPrice: '5', payType: '122' }
+            ],
+            count: 10
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      openModal: false // 选择基本信息弹框是否显示
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.orderBundleNo = ''
+      this.queryParam.orderBundle.custMobile = ''
+      this.queryParam.bundleName = ''
+      this.queryParam.itemName = ''
+      this.oldTime = undefined
+      this.newTime = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  添加
+    handleAdd (row) {},
+    //  删除
+    handleDel (row) {},
+    //  编辑基本信息
+    handleEditInfo () {
+      this.openModal = true
+    },
+    //  基本信息  保存
+    handleOk () {
+
+    },
+    //  提交
+    handleSubmit () {},
+    //  导入明细
+    handleImport () {
+      console.log(333)
+    },
+    //  返回列表
+    handleBack () {
+      this.$router.push({ path: '/allocationManagement/warehouseAllocation/list' })
+    },
+    filterOption (input, option) {
+      	return (
+      		option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      	)
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.openModal = false
+    })
+  }
+}
+</script>
+
+<style lang="less">
+  .warehouseAllocationEdit-wrap{
+    .warehouseAllocationEdit-back{
+      margin-bottom: 15px;
+    }
+    .warehouseAllocationEdit-cont{
+      margin-bottom: 15px;
+      .sub-title{
+        font-size: 12px;
+        color: #808695;
+        margin-left: 10px;
+      }
+      .tag-txt{
+        font-size: 12px;
+        color: #ed1c24;
+      }
+      .edit-circle-btn{
+        margin-left: 15px;
+        i{
+          vertical-align: text-bottom;
+        }
+      }
+      .import-btn{
+        margin-left: 15px;
+      }
+    }
+  }
+</style>

+ 219 - 0
src/views/inventoryManagement/warehouseAllocation/list.vue

@@ -0,0 +1,219 @@
+<template>
+  <a-card size="small" :bordered="false" class="warehouseAllocationList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="创建时间">
+              <a-range-picker
+                style="width:100%"
+                id="warehouseAllocationList-creatDate"
+                :disabledDate="disabledDate"
+                v-model="creatDate"
+                :format="dateFormat"
+                :placeholder="['开始时间', '结束时间']" />
+            </a-form-item>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="调出仓库">
+              <v-select
+                v-model="queryParam.outWarehouseName"
+                ref="outWarehouseName"
+                id="warehouseAllocationList-outWarehouseName"
+                code="PAYMENT_TYPE"
+                placeholder="请选择调出仓库"
+                allowClear></v-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="调入仓库">
+              <v-select
+                v-model="queryParam.putWarehouseName"
+                ref="putWarehouseName"
+                id="warehouseAllocationList-putWarehouseName"
+                code="PAYMENT_TYPE"
+                placeholder="请选择调入仓库"
+                allowClear></v-select>
+            </a-form-item>
+          </a-col>
+          <template v-if="advanced">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="单据状态">
+                <v-select
+                  v-model="queryParam.state"
+                  ref="state"
+                  id="warehouseAllocationList-state"
+                  code="PAYMENT_TYPE"
+                  placeholder="请选择单据状态"
+                  allowClear></v-select>
+              </a-form-item>
+            </a-col>
+          </template>
+          <a-col :md="6" :sm="24" style="margin-bottom: 24px;">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="warehouseAllocationList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="warehouseAllocationList-reset">重置</a-button>
+            <a @click="advanced=!advanced" style="margin-left: 8px">
+              {{ advanced ? '收起' : '展开' }}
+              <a-icon :type="advanced ? 'up' : 'down'"/>
+            </a>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="warehouseAllocationList-add" type="primary" @click="handleEdit()">新增仓库调拨单</a-button>
+    </div>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      :scroll="{ x: 1435 }"
+      bordered>
+      <!-- 状态 -->
+      <template slot="state" slot-scope="text, record">
+        <a-tag :color="record.state==1?'green':'red'" >{{ record.state==1? '待提交': '待审核' }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleExamine(record)" id="warehouseAllocationList-examine-btn">审核</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="warehouseAllocationList-edit-btn">编辑</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDetail(record)" id="warehouseAllocationList-detail-btn">详情</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleDel(record)" id="warehouseAllocationList-del-btn">删除</a-button>
+      </template>
+    </s-table>
+    <!-- 新增/编辑 -->
+    <basic-info-modal :openModal="openModal" @ok="handleOk" @close="openModal=false" />
+  </a-card>
+</template>
+
+<script>
+import { allocWarehouseList } from '@/api/allocWarehouse'
+import { STable, VSelect } from '@/components'
+import basicInfoModal from './basicInfoModal.vue'
+export default {
+  components: { STable, VSelect, basicInfoModal },
+  data () {
+    return {
+      advanced: false, // 高级搜索 展开/关闭
+      creatDate: undefined, //  创建时间
+      queryParam: { //  查询条件
+        outWarehouseName: undefined, //  调出仓库
+        putWarehouseName: undefined, //  调入仓库
+        state: undefined //  审核状态
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      dateFormat: 'YYYY-MM-DD',
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center' },
+        { title: '单号', dataIndex: 'allocationWarehouseNo', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '调出仓库', dataIndex: 'outWarehouseName', width: 140, align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '调入仓库', dataIndex: 'putWarehouseName', width: 140, align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '总款数', dataIndex: 'productTotalCategory', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总数量', dataIndex: 'productTotalQty', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总成本', dataIndex: 'productTotalCost', width: 100, align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '审核时间', dataIndex: 'auditTime', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', scopedSlots: { customRender: 'state' }, width: 100, align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 215, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.queryParam = {}
+        return allocWarehouseList(Object.assign(parameter, this.queryParam)).then(res => {
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          return data
+        })
+      },
+      openModal: false, //  新增编辑  弹框
+      itemId: '' //  当前品牌id
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.outWarehouseName = undefined
+      this.queryParam.putWarehouseName = undefined
+      this.queryParam.state = undefined
+      this.creatDate = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  基本信息  保存
+    handleOk () {
+      this.$router.push({ path: `/allocationManagement/warehouseAllocation/add` })
+    },
+    //  删除
+    handleDel (row) {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '删除后不可恢复,确定要进行删除吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  审核
+    handleExamine () {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认要审核通过吗?',
+        centered: true,
+        onOk () {
+          // delectRolePower({
+          //   id: row.id
+          // }).then(res => {
+          //   console.log(res, 'res1111')
+          //   if (res.status == 200) {
+          //     _this.$message.success(res.message)
+          //     _this.$refs.table.refresh()
+          //   }
+          // })
+        }
+      })
+    },
+    //  详情
+    handleDetail (row) {
+      this.$router.push({ path: `/allocationManagement/warehouseAllocation/detail/${row.id}/${row.allocationWarehouseSn}` })
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      // if(row){  //  编辑
+      //   this.$router.push({ path: `/allocationManagement/warehouseAllocation/edit/${row.id}` })
+      // }else{  //  新增
+      //   this.$router.push({ path: '/allocationManagement/warehouseAllocation/add' })
+      // }
+      this.openModal = true
+    }
+  }
+}
+</script>

+ 338 - 1
src/views/productManagement/productInfo/edit.vue

@@ -1,8 +1,345 @@
 <template>
+  <div class="productInfoEdit-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="productInfoEdit-cont">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="purchaseOrderEdit-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-form-model
+      id="productInfoEdit-form"
+      ref="ruleForm"
+      :model="form"
+      :rules="rules"
+      :label-col="formItemLayout.labelCol"
+      :wrapper-col="formItemLayout.wrapperCol">
+      <!-- 基础信息 -->
+      <a-card size="small" :bordered="false" class="productInfoEdit-cont">
+        <a-row>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品名称" prop="productTypeName">
+              <a-input v-model.trim="form.productTypeName" id="productInfoEdit-name" :maxLength="30" allowClear placeholder="请输入产品名称(最多30个字符)" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品编码" prop="productCode">
+              <a-input
+                id="productInfoEdit-productCode"
+                :maxLength="30"
+                :disabled="!!$route.params.id"
+                v-model="form.productCode"
+                placeholder="请输入产品编码(最多30个字符)"
+                allowClear />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="原厂编码" prop="origCode">
+              <a-input
+                id="productInfoEdit-origCode"
+                :maxLength="30"
+                v-model="form.origCode"
+                placeholder="请输入原厂编码(最多30个字符)"
+                allowClear />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品品牌" prop="productBrandSn">
+              <a-select
+                id="productInfoEdit-productBrand"
+                placeholder="请输入名称或拼音查询,如果没有请点击 '+' 新增"
+                :disabled="!!$route.params.id"
+                allowClear
+                v-model="form.productBrandSn"
+                :showSearch="true"
+                option-filter-prop="children"
+                :filter-option="filterOption">
+                <a-select-option v-for="item in productBrandList" :key="item.productBrandSn" :value="item.productBrandSn" :disabled="item.enabledFlag==0">{{ item.productBrandName }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品类别" prop="productType">
+              <a-cascader
+                @change="changeProductType"
+                :options="productTypeList"
+                :fieldNames="{ label: 'productTypeName', value: 'productTypeSn', children: 'children' }"
+                id="productInfoEdit-productType"
+                placeholder="请选择产品分类"
+                allowClear
+                v-model="form.productType" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="单位" prop="unit">
+              <a-input
+                id="productInfoEdit-unit"
+                :maxLength="30"
+                v-model="form.unit"
+                placeholder="请输入单位(最多30个字符)"
+                allowClear />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="其他编码" prop="origCode">
+              <a-input
+                id="productInfoEdit-origCode"
+                :maxLength="30"
+                v-model="form.origCode"
+                placeholder="请输入其他编码(最多30个字符)"
+                allowClear />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="包装数" prop="origCode" :label-col="{span:8}" :wrapper-col="{span:16}">
+              <a-row>
+                <a-col :span="14">
+                  <a-input-number
+                    id="productInfoEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 70%;" /><span>/单位</span>
+                </a-col>
+                <a-col :span="10">
+                  <a-select placeholder="请选择" id="productLevelEdit-storageQuantity" allowClear v-model="form.storageQuantity">
+                    <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+                  </a-select>
+                </a-col>
+              </a-row>
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="箭冠产品">
+              <v-select
+                code="FLAG"
+                id="productInfoEdit-dispatchType"
+                v-model="form.dispatchType"
+                allowClear
+                placeholder="请选择"
+              ></v-select>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+            <a-form-model-item label="产品图片" help="请上传325*250尺寸的图片,大小不超过0.25MB,png、jpg、jpeg格式。" :label-col="{span:4}" :wrapper-col="{span:20}">
+              <Upload
+                class="upload"
+                id="productInfoEdit-homeImage"
+                v-model="form.homeImage"
+                ref="homeImage"
+                :fileSize="0.25"
+                @change="changeHomeImage"
+                listType="picture-card" ></Upload>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+        <a-row>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品尺寸" prop="productTypeName">
+              <a-input
+                v-model.trim="form.productTypeName"
+                id="productInfoEdit-name"
+                :maxLength="30"
+                allowClear
+                placeholder="请输入产品尺寸(最多30个字符)" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品重量" prop="productTypeName">
+              <a-input
+                v-model.trim="form.productTypeName"
+                id="productInfoEdit-name"
+                :maxLength="30"
+                allowClear
+                placeholder="请输入产品重量(最多30个字符)" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="颜色" prop="productTypeName">
+              <a-select placeholder="请选择" id="productLevelEdit-storageQuantity" allowClear v-model="form.storageQuantity">
+                <a-select-option v-for="item in brandData" :key="item.salesChannelNo" :value="item.salesChannelNo">{{ item.salesChannelName }}</a-select-option>
+              </a-select>
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+            <a-form-model-item label="产品内核尺寸" prop="productTypeName">
+              <a-input
+                v-model.trim="form.productTypeName"
+                id="productInfoEdit-name"
+                :maxLength="30"
+                allowClear
+                placeholder="请输入产品内核尺寸(最多30个字符)" />
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <a-form-model-item label="产品说明" prop="desc" :label-col="{span:3}" :wrapper-col="{span:20}">
+              <editor id="productInfoEdit-editor" ref="editor" class="productInfoEdit-editor" @on-change="editorChange" :cache="false"></editor>
+            </a-form-model-item>
+          </a-col>
+          <a-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
+            <a-form-model-item label="其他说明" prop="desc" :label-col="{span:3}" :wrapper-col="{span:20}">
+              <editor id="productInfoEdit-other-editor" ref="editor" class="productInfoEdit-editor" @on-change="editorChange" :cache="false"></editor>
+            </a-form-model-item>
+          </a-col>
+        </a-row>
+      </a-card>
+
+    </a-form-model>
+    <a-affix :offset-bottom="0" style="z-index: 100;">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;z-index: 100;">
+        <a-button type="primary" id="productInfoEdit-submit-btn" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
 </template>
 
 <script>
+import { getArea } from '@/api/data'
+import { VSelect, Upload } from '@/components'
+import Editor from '@/components/WEeditor'
+export default {
+  components: { VSelect, Upload, Editor },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: {
+          span: 8
+        },
+        wrapperCol: {
+          span: 16
+        }
+      },
+      form: {
+        time: ''
+      },
+      rules: {},
+      brandData: [],
+      addrProvinceList: [], //  省下拉
+      addrCityList: [], //  市下拉
+      addrDistrictList: [], //  区下拉
+      dateFormat: 'YYYY-MM-DD',
+      productBrandList: [], //  品牌下拉数据
+      productTypeList: [] //  分类下拉数据
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    // 提交
+    handleSubmit () {},
+    // 返回
+    handleBack () {
+      this.$router.push({ path: '/dealerManagement/productInfo/list' })
+    },
+    // 产品图片上传
+    changeHomeImage (file) {
+      this.form.homeImage = file
+    },
+    //  文本编辑器
+    editorChange (html, text) {
+      this.form.desc = html
+    },
+    //  产品分类  change
+    changeProductType (val, opt) {
+      this.form.productTypeSn3 = val[2] ? val[2] : ''
+    },
+    filterOption (input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    },
+    // 获取城市列表
+    getCityList (val) {
+      const index = this.addrProvinceList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.provinceName = this.addrProvinceList[index].name
+      }
+      this.addrCityList = []
+      this.addrDistrictList = []
+      this.form.citySn = undefined
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('city', val)
+    },
+    // 获取区县列表
+    getAreaList (val) {
+      const index = this.addrCityList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.cityName = this.addrCityList[index].name
+      }
+      this.addrDistrictList = []
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('district', val)
+    },
+    // 区县变更
+    areaCharged (val) {
+      const index = this.addrDistrictList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.countyName = this.addrDistrictList[index].name
+      }
+      this.form.supplierAddress = ''
+    },
+    //  省/市/区
+    getArea (type, sn) {
+      let params
+      if (type == 'province') {
+        params = { level: '1' }
+      } else {
+        params = { psn: sn }
+      }
+      getArea(params).then(res => {
+        if (res.status == 200) {
+          if (type == 'province') {
+            this.addrProvinceList = res.data || []
+          } else if (type == 'city') {
+            this.addrCityList = res.data || []
+          } else if (type == 'district') {
+            this.addrDistrictList = res.data || []
+          }
+        } else {
+          if (type == 'province') {
+            this.addrProvinceList = []
+          } else if (type == 'city') {
+            this.addrCityList = []
+          } else if (type == 'district') {
+            this.addrDistrictList = []
+          }
+        }
+      })
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.getArea('province')
+      vm.$refs.ruleForm.resetFields()
+      if (vm.$route.params.id) { //  编辑页
+        // vm.getGoodsDetail()
+      }
+    })
+  }
+}
 </script>
 
-<style>
+<style lang="less">
+  .productInfoEdit-wrap{
+    .productInfoEdit-cont{
+      margin-bottom: 15px;
+    }
+    .upload{
+      width: 100%!important;
+    }
+    //  文本编辑器  工具栏样式换行
+    .productInfoEdit-editor{
+      .w-e-toolbar{
+        flex-wrap: wrap;
+        z-index: 0;
+      }
+    }
+  }
 </style>

+ 2 - 2
src/views/salesManagement/examineVerify/list.vue

@@ -92,9 +92,9 @@
       </template>
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
-        <a-button size="small" type="link" @click="handleExamine(record)" id="examineVerifyList-examine-btn" style="margin: 0 0 10px 8px;">备货审核</a-button>
+        <a-button size="small" type="link" @click="handleExamine(record)" id="examineVerifyList-examine-btn">备货审核</a-button>
         <a-divider type="vertical" style="margin: 0;" />
-        <a-button size="small" type="link" @click="handleDetail(record)" id="examineVerifyList-detail-btn" style="margin: 0 0 0 8px;">详情</a-button>
+        <a-button size="small" type="link" @click="handleDetail(record)" id="examineVerifyList-detail-btn">详情</a-button>
       </template>
     </s-table>
   </a-card>

+ 392 - 0
src/views/supplierManagement/supplierInfo/edit.vue

@@ -0,0 +1,392 @@
+<template>
+  <div class="supplierInfoEdit-wrap">
+    <a-page-header :ghost="false" @back="handleBack" class="supplierInfoEdit-cont">
+      <!-- 自定义的二级文字标题 -->
+      <template slot="subTitle">
+        <a id="purchaseOrderEdit-back-btn" href="javascript:;" @click="handleBack">返回列表</a>
+      </template>
+    </a-page-header>
+    <a-form-model
+      id="supplierInfoEdit-form"
+      ref="ruleForm"
+      :model="form"
+      :rules="rules"
+      :label-col="formItemLayout.labelCol"
+      :wrapper-col="formItemLayout.wrapperCol">
+      <!-- 基础信息 -->
+      <a-card size="small" :bordered="false" class="supplierInfoEdit-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="基础信息">
+            <a-row>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="供应商名称" prop="supplierName">
+                  <a-input
+                    id="supplierInfoEdit-supplierName"
+                    :maxLength="30"
+                    v-model="form.supplierName"
+                    placeholder="请输入供应商名称(最多30个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系人1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="30" allowClear placeholder="请输入联系人1(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系手机1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="11" allowClear placeholder="请输入联系手机1(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系角色1" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="30" allowClear placeholder="请输入联系角色1(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系电话" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="11" allowClear placeholder="请输入联系电话(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                <a-form-model-item label="地址" required style="margin: 0;" :label-col="{span:4}" :wrapper-col="{span:20}">
+                  <a-row :gutter="20">
+                    <!-- 地址 -->
+                    <a-col span="8">
+                      <a-form-model-item prop="provinceSn">
+                        <a-select id="supplierInfoEdit-provinceSn" @change="getCityList" v-model="form.provinceSn" placeholder="请选择省">
+                          <a-select-option v-for="item in addrProvinceList" :value="item.sn" :key="item.sn + 'a'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="citySn">
+                        <a-select id="supplierInfoEdit-citySn" @change="getAreaList" v-model="form.citySn" placeholder="请选择市">
+                          <a-select-option v-for="item in addrCityList" :value="item.sn" :key="item.sn + 'b'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="8">
+                      <a-form-model-item prop="countySn">
+                        <a-select id="supplierInfoEdit-countySn" @change="areaCharged" v-model="form.countySn" placeholder="请选择区/县">
+                          <a-select-option v-for="item in addrDistrictList" :value="item.sn" :key="item.sn + 'c'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-row>
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="详细地址" prop="supplierAddress">
+                  <a-input
+                    id="supplierInfoEdit-supplierAddress"
+                    :maxLength="60"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入详细地址(最多60个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="生产周期(天)" prop="supplierAddress">
+                  <a-input-number
+                    id="supplierInfoEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 100%;" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="配送周期(天)" prop="supplierAddress">
+                  <a-input-number
+                    id="supplierInfoEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 100%;" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="贷款结算周期(天)" prop="supplierAddress">
+                  <a-input-number
+                    id="supplierInfoEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 100%;" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="是否合作" prop="enabledFlag">
+                  <a-radio-group
+                    name="radioGroup"
+                    v-model="form.enabledFlag"
+                    id="supplierInfoEdit-enabledFlag" >
+                    <a-radio :value="1">是</a-radio>
+                    <a-radio :value="0">否</a-radio>
+                  </a-radio-group>
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+      <!-- 扩展信息 -->
+      <a-card size="small" :bordered="false" class="supplierInfoEdit-cont">
+        <a-collapse>
+          <a-collapse-panel key="1" header="扩展信息">
+            <a-row>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="经营方式" prop="productTypeName" help="(例:国有企业)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="supplierInfoEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入经营方式(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="公司规模" prop="productTypeName" help="(例:100-999人)">
+                  <a-input-number
+                    id="supplierInfoEdit-name"
+                    v-model="form.storageQuantity"
+                    :precision="0"
+                    :min="1"
+                    :max="999999"
+                    placeholder="请输入"
+                    style="width: 100%;" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="成立时间" prop="productTypeName">
+                  <a-date-picker
+                    style="width:100%"
+                    id="supplierInfoEdit-time"
+                    :disabledDate="disabledDate"
+                    v-model="form.time"
+                    :format="dateFormat"
+                    placeholder="请选择日期" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="银行账户" prop="productTypeName" help="(例:张三)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="supplierInfoEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入银行账户(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="开户行" prop="productTypeName" help="(例:交通银行)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="supplierInfoEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入开户行(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="银行账号" prop="productTypeName" help="(例:1123 5677 1112 22342 1123)">
+                  <a-input
+                    v-model.trim="form.productTypeName"
+                    id="supplierInfoEdit-name"
+                    :maxLength="30"
+                    allowClear
+                    placeholder="请输入银行账号(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系人2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="30" allowClear placeholder="请输入联系人2(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系手机2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="11" allowClear placeholder="请输入联系手机2(最多11个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="12" :lg="8" :xl="8">
+                <a-form-model-item label="联系角色2" prop="productTypeName">
+                  <a-input v-model.trim="form.productTypeName" id="supplierInfoEdit-name" :maxLength="30" allowClear placeholder="请输入联系角色2(最多30个字符)" />
+                </a-form-model-item>
+              </a-col>
+              <a-col :xs="24" :sm="24" :md="24" :lg="16" :xl="16">
+                <a-form-model-item label="备注" prop="enabledFlag" :label-col="{span:4}" :wrapper-col="{span:20}">
+                  <a-textarea
+                    id="merchantInfoManagementEdit-supplierAddress"
+                    :maxLength="30"
+                    v-model="form.supplierAddress"
+                    placeholder="请输入箭冠汽配代码(最多30个字符)"
+                    allowClear />
+                </a-form-model-item>
+              </a-col>
+            </a-row>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+    </a-form-model>
+    <a-affix :offset-bottom="0" style="z-index: 100;">
+      <div style="text-align: center;width: 100%;background-color: #fff;padding: 30px 0;box-shadow: 0 0 20px #dcdee2;z-index: 100;">
+        <a-button type="primary" id="supplierInfoEdit-submit-btn" size="large" @click="handleSubmit" style="padding: 0 60px;">提交</a-button>
+      </div>
+    </a-affix>
+  </div>
+</template>
+
+<script>
+import { getArea } from '@/api/data'
+import { VSelect, Upload } from '@/components'
+import Editor from '@/components/WEeditor'
+export default {
+  components: { VSelect, Upload, Editor },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: {
+          span: 8
+        },
+        wrapperCol: {
+          span: 16
+        }
+      },
+      form: {
+        time: ''
+      },
+      rules: {},
+      brandData: [],
+      addrProvinceList: [], //  省下拉
+      addrCityList: [], //  市下拉
+      addrDistrictList: [], //  区下拉
+      dateFormat: 'YYYY-MM-DD',
+      productBrandList: [], //  品牌下拉数据
+      productTypeList: [] //  分类下拉数据
+    }
+  },
+  methods: {
+    // 不可选日期
+    disabledDate (date, dateStrings) {
+      return date && date.valueOf() > Date.now()
+    },
+    // 提交
+    handleSubmit () {},
+    // 返回
+    handleBack () {
+      this.$router.push({ path: '/dealerManagement/supplierInfo/list' })
+    },
+    // 产品图片上传
+    changeHomeImage (file) {
+      this.form.homeImage = file
+    },
+    //  文本编辑器
+    editorChange (html, text) {
+      this.form.desc = html
+    },
+    //  产品分类  change
+    changeProductType (val, opt) {
+      this.form.productTypeSn3 = val[2] ? val[2] : ''
+    },
+    filterOption (input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    },
+    // 获取城市列表
+    getCityList (val) {
+      const index = this.addrProvinceList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.provinceName = this.addrProvinceList[index].name
+      }
+      this.addrCityList = []
+      this.addrDistrictList = []
+      this.form.citySn = undefined
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('city', val)
+    },
+    // 获取区县列表
+    getAreaList (val) {
+      const index = this.addrCityList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.cityName = this.addrCityList[index].name
+      }
+      this.addrDistrictList = []
+      this.form.countySn = undefined
+      this.form.supplierAddress = ''
+      this.getArea('district', val)
+    },
+    // 区县变更
+    areaCharged (val) {
+      const index = this.addrDistrictList.findIndex(item => item.sn == val)
+      if (index >= 0) {
+        this.form.countyName = this.addrDistrictList[index].name
+      }
+      this.form.supplierAddress = ''
+    },
+    //  省/市/区
+    getArea (type, sn) {
+      let params
+      if (type == 'province') {
+        params = { level: '1' }
+      } else {
+        params = { psn: sn }
+      }
+      getArea(params).then(res => {
+        if (res.status == 200) {
+          if (type == 'province') {
+            this.addrProvinceList = res.data || []
+          } else if (type == 'city') {
+            this.addrCityList = res.data || []
+          } else if (type == 'district') {
+            this.addrDistrictList = res.data || []
+          }
+        } else {
+          if (type == 'province') {
+            this.addrProvinceList = []
+          } else if (type == 'city') {
+            this.addrCityList = []
+          } else if (type == 'district') {
+            this.addrDistrictList = []
+          }
+        }
+      })
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {
+      vm.getArea('province')
+      vm.$refs.ruleForm.resetFields()
+      if (vm.$route.params.id) { //  编辑页
+        // vm.getGoodsDetail()
+      }
+    })
+  }
+}
+</script>
+
+<style lang="less">
+  .supplierInfoEdit-wrap{
+    .supplierInfoEdit-cont{
+      margin-bottom: 15px;
+    }
+    .upload{
+      width: 100%!important;
+    }
+    //  文本编辑器  工具栏样式换行
+    .supplierInfoEdit-editor{
+      .w-e-toolbar{
+        flex-wrap: wrap;
+        z-index: 0;
+      }
+    }
+  }
+</style>

+ 145 - 0
src/views/supplierManagement/supplierInfo/list.vue

@@ -0,0 +1,145 @@
+<template>
+  <a-card size="small" :bordered="false" class="supplierInfoList-wrap">
+    <!-- 搜索条件 -->
+    <div class="table-page-search-wrapper">
+      <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+        <a-row :gutter="15">
+          <a-col :md="6" :sm="24">
+            <a-form-item label="供应商名称">
+              <a-input id="supplierInfoList-supplierName" v-model.trim="queryParam.supplierName" allowClear placeholder="请输入供应商名称"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-form-item label="关联品牌">
+              <a-select
+                placeholder="请选择"
+                id="productInfoList-productBrandSn"
+                allowClear
+                v-model="queryParam.productBrandSn"
+                :showSearch="true"
+                option-filter-prop="children"
+                :filter-option="filterOption">
+                <a-select-option v-for="item in productBrandList" :key="item.productBrandSn" :value="item.productBrandSn">{{ item.productBrandName }}</a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="6" :sm="24">
+            <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="supplierInfoList-refresh">查询</a-button>
+            <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="supplierInfoList-reset">重置</a-button>
+          </a-col>
+        </a-row>
+      </a-form>
+    </div>
+    <!-- 操作按钮 -->
+    <div class="table-operator">
+      <a-button id="supplierInfoList-add" type="primary" @click="handleEdit()">新增供应商</a-button>
+    </div>
+    <!-- 总计 -->
+    <a-alert type="info" showIcon style="margin-bottom:15px">
+      <div slot="message">合计:<strong>300</strong>条</div>
+    </a-alert>
+    <!-- 列表 -->
+    <s-table
+      class="sTable"
+      ref="table"
+      size="default"
+      :rowKey="(record) => record.id"
+      :columns="columns"
+      :data="loadData"
+      bordered>
+      <!-- 状态 -->
+      <template slot="enabledFlag" slot-scope="text, record">
+        <a-tag :color="record.enabledFlag==1?'green':'red'" >{{ record.enabledFlagDictValue }}</a-tag>
+      </template>
+      <!-- 操作 -->
+      <template slot="action" slot-scope="text, record">
+        <a-button size="small" type="link" @click="handleRelated(record)" id="supplierInfoList-related-btn">关联产品</a-button>
+        <a-divider type="vertical" style="margin: 0;" />
+        <a-button size="small" type="link" @click="handleEdit(record)" id="supplierInfoList-edit-btn">编辑</a-button>
+      </template>
+    </s-table>
+  </a-card>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+import { supplierList } from '@/api/supplier'
+export default {
+  components: { STable, VSelect },
+  data () {
+    return {
+      queryParam: { //  查询条件
+        supplierName: '', //  供应商名称
+        enabledFlag: undefined //  状态
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: 160, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '供应商名称', dataIndex: 'supplierName', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '联系人', dataIndex: 'contactPerson', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '产品款数', dataIndex: 'contactTel', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: 150, align: 'center', fixed: 'right' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        // return supplierList(Object.assign(parameter, this.queryParam)).then(res => {
+        //   const data = res.data
+        //   const no = (data.pageNo - 1) * data.pageSize
+        //   for (var i = 0; i < data.list.length; i++) {
+        //     data.list[i].no = no + i + 1
+        //     const provinceName = data.list[i].provinceName ? data.list[i].provinceName : ''
+        //     const cityName = data.list[i].cityName ? data.list[i].cityName : ''
+        //     const countyName = data.list[i].countyName ? data.list[i].countyName : ''
+        //     const supplierAddress = data.list[i].supplierAddress ? data.list[i].supplierAddress : ''
+        //     data.list[i].address = provinceName + cityName + countyName + supplierAddress
+        //   }
+        //   this.disabled = false
+        //   return data
+        // })
+        const _this = this
+        return new Promise(function (resolve, reject) {
+          const data = {
+            pageNo: 1,
+            pageSize: 10,
+            list: [
+              { id: '1', productNum: 'jgqp11111111111', productName: '产品1', productPic: ['https://gw.alipayobjects.com/zos/rmsportal/KDpgvguMpGfqaHPjicRK.svg', 'https://qn.antdv.com/vue.png'], productOldNum: 'jgqp111123545', productBrand: '箭冠品牌', productType: '产品分类1', inventoryNum: '5', inventoryMoney: '122' }
+            ]
+          }
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          _this.disabled = false
+          resolve(data)
+        })
+      },
+      productBrandList: []
+    }
+  },
+  methods: {
+    //  重置
+    resetSearchForm () {
+      this.queryParam.supplierName = ''
+      this.queryParam.enabledFlag = undefined
+      this.$refs.table.refresh(true)
+    },
+    //  新增/编辑
+    handleEdit (row) {
+      if (row) { //  编辑
+        this.$router.push({ path: `/supplierManagement/supplierInfo/edit/${row.id}` })
+      } else { //  新增
+        this.$router.push({ path: '/supplierManagement/supplierInfo/add' })
+      }
+    },
+    // 关联产品
+    handleRelated (row) {},
+    filterOption (input, option) {
+      return (
+        option.componentOptions.children[0].text.toLowerCase().indexOf(input.toLowerCase()) >= 0
+      )
+    }
+  }
+}
+</script>