Sfoglia il codice sorgente

轮胎补贴配置

chenrui 3 mesi fa
parent
commit
87442ff6d9

+ 58 - 0
src/api/provinceServiceCenter.js

@@ -0,0 +1,58 @@
+import { axios } from '@/utils/request'
+
+//  轮胎省仓管理列表  有分页
+export const tireStorageList = (params) => {
+  const url = `/provinceServiceCenter/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 选择经销商  列表
+export const chooseDealerList = (params) => {
+  const url = `/provinceServiceCenter/queryDealerPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 批量添加 经销商
+export const saveBatchDealerList = (params) => {
+  return axios({
+    url: '/provinceServiceCenter/saveBatch',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 轮胎省仓管理   启用禁用
+export const tireStorageEnable = (params) => {
+  return axios({
+    url: '/provinceServiceCenter/updateDisableOrEnable',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 变更记录
+export const changeRecordList = (params) => {
+  return axios({
+    url: '/provinceServiceCenter/changeRecord',
+    data: params,
+    method: 'post'
+  })
+}

+ 61 - 0
src/api/subsidyRule.js

@@ -0,0 +1,61 @@
+import { axios } from '@/utils/request'
+
+// 轮胎补贴配置列表  有分页
+export const tireSubsidyRuleList = (params) => {
+  const url = `/subsidyRule/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post',
+    headers: {
+      'module': encodeURIComponent('列表查询')
+    }
+  })
+}
+
+// 新增  根据客户名称获取运费金额/补贴金额
+export const getSubsidyRuleList = (params) => {
+  return axios({
+    url: '/subsidyRule/getSubsidyRuleList',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 保存
+export const subsidyRuleSave = (params) => {
+  return axios({
+    url: '/subsidyRule/save',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 新增保存  错误提示
+export const createSubsidyRule = (params) => {
+  return axios({
+    url: '/subsidyRule/createSubsidyRule',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 删除
+export const delSubsidyRule = (params) => {
+  return axios({
+    url: '/subsidyRule/delSubsidyRule',
+    data: params,
+    method: 'post'
+  })
+}
+
+// 结束
+export const endSubsidyRule = (params) => {
+  return axios({
+    url: '/subsidyRule/endSubsidyRule',
+    data: params,
+    method: 'post'
+  })
+}

+ 296 - 271
src/config/dealerManagement.js

@@ -6,276 +6,301 @@ import {
   PageView
 } from '@/layouts'
 export default {
-        path: '/dealerManagement',
-        redirect: '/dealerManagement/marketingDivisionSet',
-        component: PageView,
-        meta: {
-          title: '经销商管理',
-          icon: 'idcard',
-          permission: 'M_dealerManagement'
+  path: '/dealerManagement',
+  redirect: '/dealerManagement/marketingDivisionSet',
+  component: PageView,
+  meta: {
+    title: '经销商管理',
+    icon: 'idcard',
+    permission: 'M_dealerManagement'
+  },
+  children: [
+    {
+      path: '/dealerManagement/merchantInfoManagement',
+      redirect: '/dealerManagement/merchantInfoManagement/list',
+      name: 'merchantInfoManagement',
+      component: BlankLayout,
+      meta: {
+        title: '经销商资料管理',
+        icon: 'file-text',
+        permission: 'M_merchantInfoManagementList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'merchantInfoManagementList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/list.vue'),
+          meta: {
+            title: '经销商资料列表',
+            icon: 'file-text',
+            hidden: true,
+            permission: 'M_merchantInfoManagementList'
+          }
+        },
+        {
+          path: 'add',
+          name: 'merchantInfoManagementAdd',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/edit.vue'),
+          meta: {
+            title: '新增经销商',
+            icon: 'file-text',
+            hidden: true
+          }
+        },
+        {
+          path: 'edit/:id',
+          name: 'merchantInfoManagementEdit',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/edit.vue'),
+          meta: {
+            title: '编辑经销商',
+            icon: 'file-text',
+            hidden: true
+          }
+        },
+        {
+          path: 'permissionSetting/:sn/:name/:dealerLevel',
+          name: 'merchantInfoManagementSet',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/permissionSettingNew.vue'),
+          meta: {
+            title: '经销权设置',
+            icon: 'file-text',
+            replaceTab: true,
+            hidden: true
+          }
+        },
+        {
+          path: 'rebateBinding/:sn',
+          name: 'rebateBinding',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/rebateBinding/list.vue'),
+          meta: {
+            title: '差价设置',
+            icon: 'file-text',
+            replaceTab: true,
+            hidden: true
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/dealerAccountManagement',
+      redirect: '/dealerManagement/dealerAccountManagement/list',
+      name: 'dealerAccountManagement',
+      component: BlankLayout,
+      meta: {
+        title: '经销商账号管理',
+        icon: 'team',
+        permission: 'M_dealerAccountManagementList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'dealerAccountManagementList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/dealerAccountManagement/list.vue'),
+          meta: {
+            title: '经销商账号列表',
+            icon: 'team',
+            hidden: true,
+            permission: 'M_dealerAccountManagementList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/promotionRulesManagement/dealerPromotions',
+      redirect: '/promotionRulesManagement/dealerPromotions/list',
+      name: 'dealerPromotionManagement',
+      component: BlankLayout,
+      meta: {
+        title: '经销商促销',
+        icon: 'setting',
+        permission: 'M_dealerPromotionManagementList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'dealerPromotionManagementList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/list.vue'),
+          meta: {
+            title: '经销商促销',
+            icon: 'setting',
+            hidden: true,
+            permission: 'M_dealerPromotionManagementList'
+          }
         },
-        children: [
-          {
-            path: '/dealerManagement/merchantInfoManagement',
-            redirect: '/dealerManagement/merchantInfoManagement/list',
-            name: 'merchantInfoManagement',
-            component: BlankLayout,
-            meta: {
-              title: '经销商资料管理',
-              icon: 'file-text',
-              permission: 'M_merchantInfoManagementList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'merchantInfoManagementList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/list.vue'),
-                meta: {
-                  title: '经销商资料列表',
-                  icon: 'file-text',
-                  hidden: true,
-                  permission: 'M_merchantInfoManagementList'
-                }
-              },
-              {
-                path: 'add',
-                name: 'merchantInfoManagementAdd',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/edit.vue'),
-                meta: {
-                  title: '新增经销商',
-                  icon: 'file-text',
-                  hidden: true
-                }
-              },
-              {
-                path: 'edit/:id',
-                name: 'merchantInfoManagementEdit',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/edit.vue'),
-                meta: {
-                  title: '编辑经销商',
-                  icon: 'file-text',
-                  hidden: true
-                }
-              },
-              {
-                path: 'permissionSetting/:sn/:name/:dealerLevel',
-                name: 'merchantInfoManagementSet',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/merchantInfoManagement/permissionSettingNew.vue'),
-                meta: {
-                  title: '经销权设置',
-                  icon: 'file-text',
-                  replaceTab: true,
-                  hidden: true
-                }
-              },
-              {
-                path: 'rebateBinding/:sn',
-                name: 'rebateBinding',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/rebateBinding/list.vue'),
-                meta: {
-                  title: '差价设置',
-                  icon: 'file-text',
-                  replaceTab: true,
-                  hidden: true
-                }
-              }
-            ]
-          },
-          {
-            path: '/dealerManagement/dealerAccountManagement',
-            redirect: '/dealerManagement/dealerAccountManagement/list',
-            name: 'dealerAccountManagement',
-            component: BlankLayout,
-            meta: {
-              title: '经销商账号管理',
-              icon: 'team',
-              permission: 'M_dealerAccountManagementList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'dealerAccountManagementList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/dealerAccountManagement/list.vue'),
-                meta: {
-                  title: '经销商账号列表',
-                  icon: 'team',
-                  hidden: true,
-                  permission: 'M_dealerAccountManagementList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/promotionRulesManagement/dealerPromotions',
-            redirect: '/promotionRulesManagement/dealerPromotions/list',
-            name: 'dealerPromotionManagement',
-            component: BlankLayout,
-            meta: {
-              title: '经销商促销',
-              icon: 'setting',
-              permission: 'M_dealerPromotionManagementList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'dealerPromotionManagementList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/list.vue'),
-                meta: {
-                  title: '经销商促销',
-                  icon: 'setting',
-                  hidden: true,
-                  permission: 'M_dealerPromotionManagementList'
-                }
-              },
-              {
-                path: 'detail',
-                name: 'dealerPromotionManagementDetail',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/detail.vue'),
-                meta: {
-                  title: '促销活动详情',
-                  icon: 'thunderbolt',
-                  hidden: true
-                }
-              },
-              {
-                path: 'ruleSet',
-                name: 'dealerPromotionManagementRule',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/detail.vue'),
-                meta: {
-                  title: '促销规则设置',
-                  icon: 'thunderbolt',
-                  replaceTab: true,
-                  hidden: true
-                }
-              }
-            ]
-          },
-          {
-            path: '/dealerManagement/provincialWarehouseManagement',
-            redirect: '/dealerManagement/provincialWarehouseManagement/list',
-            name: 'provincialWarehouse',
-            component: BlankLayout,
-            meta: {
-              title: '省仓管理',
-              icon: 'share-alt',
-              permission: 'M_provincialWarehouse'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'provincialWarehouseList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/list.vue'),
-                meta: {
-                  title: '省仓管理列表',
-                  icon: 'share-alt',
-                  hidden: true,
-                  permission: 'M_provincialWarehouseList'
-                }
-              },
-              {
-                path: 'relatedDealers/:sn/:name',
-                name: 'relatedDealersList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue'),
-                meta: {
-                  title: '省仓关联经销商',
-                  icon: 'share-alt',
-                  hidden: true,
-                  replaceTab: true,
-                  permission: 'M_relatedDealersList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/dealerManagement/marketingDivisionSetNew',
-            redirect: '/dealerManagement/marketingDivisionSetNew/list',
-            name: 'marketingDivisionSetNew',
-            component: BlankLayout,
-            meta: {
-              title: '营销分区设置',
-              icon: 'setting',
-              permission: 'M_marketingDivisionSetList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'marketingDivisionSetNewList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/marketingDivisionSetNew/list.vue'),
-                meta: {
-                  title: '营销分区列表',
-                  icon: 'setting',
-                  hidden: true,
-                  permission: 'M_marketingDivisionSetList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/dealerManagement/businessOwnerSettings',
-            redirect: '/dealerManagement/businessOwnerSettings/list',
-            name: 'businessOwnerSettings',
-            component: BlankLayout,
-            meta: {
-              title: '数据权限配置',
-              icon: 'stock',
-              permission: 'M_businessOwnerSettings'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'businessOwnerSettingsList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/businessOwnerSettings/list.vue'),
-                meta: {
-                  title: '数据权限配置列表',
-                  icon: 'stock',
-                  hidden: true,
-                  permission: 'M_businessOwnerSettingsList'
-                }
-              },
-              {
-                path: 'settingsIndex',
-                name: 'categorySet',
-                component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/dealerManagement/businessOwnerSettings/settingsIndex.vue'),
-                meta: {
-                  title: '管辖品类权限设置',
-                  icon: 'user',
-                  hidden: true,
-                  replaceTab: true,
-                  permission: 'M_settingsIndex'
-                }
-              }
-            ]
-          },
-          {
-            path: '/dealerManagement/dealerZoneSearch',
-            redirect: '/dealerManagement/dealerZoneSearch/list',
-            name: 'dealerZoneSearch',
-            component: BlankLayout,
-            meta: {
-              title: '经销商所属分区查询',
-              icon: 'setting',
-              permission: 'M_dealerZoneSearch'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'dealerZoneSearchList',
-                component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/dealerZoneSearch/list.vue'),
-                meta: {
-                  title: '经销商所属分区查询',
-                  icon: 'setting',
-                  hidden: true,
-                  permission: 'M_dealerZoneSearchList'
-                }
-              }
-            ]
+        {
+          path: 'detail',
+          name: 'dealerPromotionManagementDetail',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/detail.vue'),
+          meta: {
+            title: '促销活动详情',
+            icon: 'thunderbolt',
+            hidden: true
+          }
+        },
+        {
+          path: 'ruleSet',
+          name: 'dealerPromotionManagementRule',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/promotionRulesManagement/dealerPromotions/detail.vue'),
+          meta: {
+            title: '促销规则设置',
+            icon: 'thunderbolt',
+            replaceTab: true,
+            hidden: true
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/provincialWarehouseManagement',
+      redirect: '/dealerManagement/provincialWarehouseManagement/list',
+      name: 'provincialWarehouse',
+      component: BlankLayout,
+      meta: {
+        title: '省仓管理',
+        icon: 'share-alt',
+        permission: 'M_provincialWarehouse'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'provincialWarehouseList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/list.vue'),
+          meta: {
+            title: '省仓管理列表',
+            icon: 'share-alt',
+            hidden: true,
+            permission: 'M_provincialWarehouseList'
+          }
+        },
+        {
+          path: 'relatedDealers/:sn/:name',
+          name: 'relatedDealersList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/provincialWarehouseManagement/relatedDealersList.vue'),
+          meta: {
+            title: '省仓关联经销商',
+            icon: 'share-alt',
+            hidden: true,
+            replaceTab: true,
+            permission: 'M_relatedDealersList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/tireStorageManagement',
+      redirect: '/dealerManagement/tireStorageManagement/list',
+      name: 'tireSavingWarehouse',
+      component: BlankLayout,
+      meta: {
+        title: '轮胎省仓管理',
+        icon: 'share-alt'
+        // permission: 'M_tireSavingWarehouse'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'tireSavingWarehouseList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/tireStorageManagement/list.vue'),
+          meta: {
+            title: '轮胎省仓管理列表',
+            icon: 'share-alt',
+            hidden: true
+            // permission: 'M_tireSavingWarehouseList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/marketingDivisionSetNew',
+      redirect: '/dealerManagement/marketingDivisionSetNew/list',
+      name: 'marketingDivisionSetNew',
+      component: BlankLayout,
+      meta: {
+        title: '营销分区设置',
+        icon: 'setting',
+        permission: 'M_marketingDivisionSetList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'marketingDivisionSetNewList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/marketingDivisionSetNew/list.vue'),
+          meta: {
+            title: '营销分区列表',
+            icon: 'setting',
+            hidden: true,
+            permission: 'M_marketingDivisionSetList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/businessOwnerSettings',
+      redirect: '/dealerManagement/businessOwnerSettings/list',
+      name: 'businessOwnerSettings',
+      component: BlankLayout,
+      meta: {
+        title: '数据权限配置',
+        icon: 'stock',
+        permission: 'M_businessOwnerSettings'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'businessOwnerSettingsList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/businessOwnerSettings/list.vue'),
+          meta: {
+            title: '数据权限配置列表',
+            icon: 'stock',
+            hidden: true,
+            permission: 'M_businessOwnerSettingsList'
+          }
+        },
+        {
+          path: 'settingsIndex',
+          name: 'categorySet',
+          component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/dealerManagement/businessOwnerSettings/settingsIndex.vue'),
+          meta: {
+            title: '管辖品类权限设置',
+            icon: 'user',
+            hidden: true,
+            replaceTab: true,
+            permission: 'M_settingsIndex'
+          }
+        }
+      ]
+    },
+    {
+      path: '/dealerManagement/dealerZoneSearch',
+      redirect: '/dealerManagement/dealerZoneSearch/list',
+      name: 'dealerZoneSearch',
+      component: BlankLayout,
+      meta: {
+        title: '经销商所属分区查询',
+        icon: 'setting',
+        permission: 'M_dealerZoneSearch'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'dealerZoneSearchList',
+          component: () => import(/* webpackChunkName: "dealerManagement" */ '@/views/dealerManagement/dealerZoneSearch/list.vue'),
+          meta: {
+            title: '经销商所属分区查询',
+            icon: 'setting',
+            hidden: true,
+            permission: 'M_dealerZoneSearchList'
           }
-        ]
-      }
+        }
+      ]
+    }
+  ]
+}

+ 342 - 317
src/config/sysSetting.js

@@ -7,322 +7,347 @@ import {
 } from '@/layouts'
 
 export default {
-        path: '/setting',
-        redirect: '/basicData/warehouse',
-        component: PageView,
-        meta: {
-          title: '系统设置',
-          icon: 'setting',
-          permission: 'M_systemSet'
+  path: '/setting',
+  redirect: '/basicData/warehouse',
+  component: PageView,
+  meta: {
+    title: '系统设置',
+    icon: 'setting',
+    permission: 'M_systemSet'
+  },
+  children: [
+    {
+      path: '/basicData/warehouse',
+      redirect: '/basicData/warehouse/list',
+      name: 'warehouse',
+      component: BlankLayout,
+      meta: {
+        title: '仓库管理',
+        icon: 'deployment-unit',
+        permission: 'M_warehouseList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: '/basicData/warehouse/list',
+          name: 'warehouseList',
+          component: () => import(/* webpackChunkName: "basicData" */ '@/views/basicData/warehouse/list.vue'),
+          meta: {
+            title: '仓库列表',
+            icon: 'deployment-unit',
+            hidden: true,
+            permission: 'M_warehouseList'
+          }
         },
-        children: [
-          {
-            path: '/basicData/warehouse',
-            redirect: '/basicData/warehouse/list',
-            name: 'warehouse',
-            component: BlankLayout,
-            meta: {
-              title: '仓库管理',
-              icon: 'deployment-unit',
-              permission: 'M_warehouseList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: '/basicData/warehouse/list',
-                name: 'warehouseList',
-                component: () => import(/* webpackChunkName: "basicData" */ '@/views/basicData/warehouse/list.vue'),
-                meta: {
-                  title: '仓库列表',
-                  icon: 'deployment-unit',
-                  hidden: true,
-                  permission: 'M_warehouseList'
-                }
-              },
-              {
-                path: '/basicData/storingLocation/:sn',
-                name: 'storingLocationList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/basicData/warehouse/storingLocation/list.vue'),
-                meta: {
-                  title: '仓位列表',
-                  icon: 'deployment-unit',
-                  replaceTab: true,
-                  hidden: true
-                }
-              }
-            ]
-          },
-          {
-            path: '/auth/user',
-            redirect: '/auth/user/list',
-            name: 'powerUser',
-            component: BlankLayout,
-            meta: {
-              title: '用户管理',
-              icon: 'user',
-              permission: 'M_userList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'powerUserList',
-                component: () => import(/* webpackChunkName: "auth" */ '@/views/power/user/userList.vue'),
-                meta: {
-                  title: '用户管理',
-                  icon: 'user',
-                  hidden: true,
-                  permission: 'M_userList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/auth/role',
-            redirect: '/auth/role/list',
-            name: 'powerRole',
-            component: BlankLayout,
-            meta: {
-              title: '角色管理',
-              icon: 'solution',
-              permission: 'M_roleList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'powerRoleList',
-                component: () => import(/* webpackChunkName: "auth" */ '@/views/power/role/roleList.vue'),
-                meta: {
-                  title: '角色管理',
-                  icon: 'solution',
-                  hidden: true,
-                  permission: 'M_roleList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/auth/adminMenus',
-            redirect: '/auth/adminMenus/list',
-            name: 'adminMenus',
-            component: BlankLayout,
-            meta: {
-              title: '菜单管理',
-              icon: 'appstore',
-              permission: 'M_menuList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'adminMenusList',
-                component: () => import(/* webpackChunkName: "auth" */ '@/views/bnSetting/menu/adminMenus.vue'),
-                meta: {
-                  title: '菜单管理',
-                  icon: 'appstore',
-                  hidden: true,
-                  permission: 'M_menuList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/dataDictionary',
-            redirect: '/setting/dataDictionary/list',
-            name: 'dataDictionary',
-            component: BlankLayout,
-            meta: {
-              title: '数据字典管理',
-              icon: 'database',
-              permission: 'M_dataD_lookup'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'powerDD',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/power/dataDictionary/dataDictionary.vue'),
-                meta: {
-                  title: '数据字典管理',
-                  icon: 'database',
-                  hidden: true,
-                  permission: 'M_dataD_lookup'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/OperateJournal',
-            redirect: '/setting/OperateJournal/list',
-            name: 'OperateJournal',
-            component: BlankLayout,
-            meta: {
-              title: '操作日志',
-              icon: 'read',
-              permission: 'M_OperateJournalList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'powerOperateJournal',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/power/OperateJournal/OperateJournal.vue'),
-                meta: {
-                  title: '操作日志',
-                  icon: 'read',
-                  permission: 'M_OperateJournalList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/noticeManagement',
-            redirect: '/setting/noticeManagement/list',
-            name: 'noticeManagement',
-            component: BlankLayout,
-            meta: {
-              title: '公告管理',
-              icon: 'sketch',
-              permission: 'M_noticeManagementList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'noticeManagementList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/noticeManagement/list.vue'),
-                meta: {
-                  title: '公告列表',
-                  icon: 'sketch',
-                  hidden: true,
-                  permission: 'M_noticeManagementList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/bigScreenSet',
-            redirect: '/setting/bigScreenSet/index',
-            name: 'bigScreenSet',
-            component: BlankLayout,
-            meta: {
-              title: '大屏参数设置',
-              icon: 'sketch',
-              permission: 'M_bigScreenSetIndex'
-            },
-            hideChildrenInMenu: true,
-            children: [{
-              path: 'index',
-              name: 'bigScreenSetIndex',
-              component: () => import(/* webpackChunkName: "setting" */'@/views/setting/bigScreenSet/index.vue'),
-              meta: {
-                title: '大屏参数设置',
-                icon: 'sketch',
-                hidden: true,
-                permission: 'M_bigScreenSetIndex'
-              }
-            }]
-          },
-          {
-            path: '/setting/erpMessageManagement',
-            redirect: '/setting/erpMessageManagement/list',
-            name: 'erpMessageManagement',
-            component: BlankLayout,
-            meta: {
-              title: 'ERP数据同步记录',
-              icon: 'sketch',
-              permission: 'M_erpMessageList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'erpMessageManagementList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/erpMessageManagement/list.vue'),
-                meta: {
-                  title: 'ERP数据同步列表',
-                  icon: 'sketch',
-                  hidden: true,
-                  permission: 'M_erpMessageList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/erpAllotSettings',
-            redirect: '/setting/erpAllotSettings/list',
-            name: 'erpAllotSettings',
-            component: BlankLayout,
-            meta: {
-              title: '调拨类型管理',
-              icon: 'sketch',
-              permission: 'M_transferTypeManagementList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'erpAllotSettingsList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/erpAllotSettings/list.vue'),
-                meta: {
-                  title: '调拨类型管理',
-                  icon: 'sketch',
-                  hidden: true,
-                  permission: 'M_transferTypeManagementList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/dataValidManagement',
-            redirect: '/setting/dataValidManagement/list',
-            name: 'dataValidManagement',
-            component: BlankLayout,
-            meta: {
-              title: '数据校验管理',
-              icon: 'sketch',
-              permission: 'M_dataVailidManageList'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'dataValidManagementList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/dataValidManagement/list.vue'),
-                meta: {
-                  title: '数据校验管理',
-                  icon: 'sketch',
-                  hidden: true,
-                  permission: 'M_dataVailidManageList'
-                }
-              }
-            ]
-          },
-          {
-            path: '/setting/checkDingTask',
-            redirect: '/setting/checkDingTask/list',
-            name: 'checkDingTask',
-            component: BlankLayout,
-            meta: {
-              title: '钉钉审批',
-              icon: 'sketch',
-              permission: 'M_dingAuditUpdate'
-            },
-            hideChildrenInMenu: true,
-            children: [
-              {
-                path: 'list',
-                name: 'checkDingTaskList',
-                component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/checkDingTask/list.vue'),
-                meta: {
-                  title: '钉钉审批',
-                  icon: 'sketch',
-                  hidden: true,
-                  permission: 'M_dingAuditUpdate'
-                }
-              }
-            ]
+        {
+          path: '/basicData/storingLocation/:sn',
+          name: 'storingLocationList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/basicData/warehouse/storingLocation/list.vue'),
+          meta: {
+            title: '仓位列表',
+            icon: 'deployment-unit',
+            replaceTab: true,
+            hidden: true
+          }
+        }
+      ]
+    },
+    {
+      path: '/auth/user',
+      redirect: '/auth/user/list',
+      name: 'powerUser',
+      component: BlankLayout,
+      meta: {
+        title: '用户管理',
+        icon: 'user',
+        permission: 'M_userList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'powerUserList',
+          component: () => import(/* webpackChunkName: "auth" */ '@/views/power/user/userList.vue'),
+          meta: {
+            title: '用户管理',
+            icon: 'user',
+            hidden: true,
+            permission: 'M_userList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/auth/role',
+      redirect: '/auth/role/list',
+      name: 'powerRole',
+      component: BlankLayout,
+      meta: {
+        title: '角色管理',
+        icon: 'solution',
+        permission: 'M_roleList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'powerRoleList',
+          component: () => import(/* webpackChunkName: "auth" */ '@/views/power/role/roleList.vue'),
+          meta: {
+            title: '角色管理',
+            icon: 'solution',
+            hidden: true,
+            permission: 'M_roleList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/auth/adminMenus',
+      redirect: '/auth/adminMenus/list',
+      name: 'adminMenus',
+      component: BlankLayout,
+      meta: {
+        title: '菜单管理',
+        icon: 'appstore',
+        permission: 'M_menuList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'adminMenusList',
+          component: () => import(/* webpackChunkName: "auth" */ '@/views/bnSetting/menu/adminMenus.vue'),
+          meta: {
+            title: '菜单管理',
+            icon: 'appstore',
+            hidden: true,
+            permission: 'M_menuList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/dataDictionary',
+      redirect: '/setting/dataDictionary/list',
+      name: 'dataDictionary',
+      component: BlankLayout,
+      meta: {
+        title: '数据字典管理',
+        icon: 'database',
+        permission: 'M_dataD_lookup'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'powerDD',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/power/dataDictionary/dataDictionary.vue'),
+          meta: {
+            title: '数据字典管理',
+            icon: 'database',
+            hidden: true,
+            permission: 'M_dataD_lookup'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/OperateJournal',
+      redirect: '/setting/OperateJournal/list',
+      name: 'OperateJournal',
+      component: BlankLayout,
+      meta: {
+        title: '操作日志',
+        icon: 'read',
+        permission: 'M_OperateJournalList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'powerOperateJournal',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/power/OperateJournal/OperateJournal.vue'),
+          meta: {
+            title: '操作日志',
+            icon: 'read',
+            permission: 'M_OperateJournalList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/noticeManagement',
+      redirect: '/setting/noticeManagement/list',
+      name: 'noticeManagement',
+      component: BlankLayout,
+      meta: {
+        title: '公告管理',
+        icon: 'sketch',
+        permission: 'M_noticeManagementList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'noticeManagementList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/noticeManagement/list.vue'),
+          meta: {
+            title: '公告列表',
+            icon: 'sketch',
+            hidden: true,
+            permission: 'M_noticeManagementList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/bigScreenSet',
+      redirect: '/setting/bigScreenSet/index',
+      name: 'bigScreenSet',
+      component: BlankLayout,
+      meta: {
+        title: '大屏参数设置',
+        icon: 'sketch',
+        permission: 'M_bigScreenSetIndex'
+      },
+      hideChildrenInMenu: true,
+      children: [{
+        path: 'index',
+        name: 'bigScreenSetIndex',
+        component: () => import(/* webpackChunkName: "setting" */'@/views/setting/bigScreenSet/index.vue'),
+        meta: {
+          title: '大屏参数设置',
+          icon: 'sketch',
+          hidden: true,
+          permission: 'M_bigScreenSetIndex'
+        }
+      }]
+    },
+    {
+      path: '/setting/erpMessageManagement',
+      redirect: '/setting/erpMessageManagement/list',
+      name: 'erpMessageManagement',
+      component: BlankLayout,
+      meta: {
+        title: 'ERP数据同步记录',
+        icon: 'sketch',
+        permission: 'M_erpMessageList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'erpMessageManagementList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/erpMessageManagement/list.vue'),
+          meta: {
+            title: 'ERP数据同步列表',
+            icon: 'sketch',
+            hidden: true,
+            permission: 'M_erpMessageList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/erpAllotSettings',
+      redirect: '/setting/erpAllotSettings/list',
+      name: 'erpAllotSettings',
+      component: BlankLayout,
+      meta: {
+        title: '调拨类型管理',
+        icon: 'sketch',
+        permission: 'M_transferTypeManagementList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'erpAllotSettingsList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/erpAllotSettings/list.vue'),
+          meta: {
+            title: '调拨类型管理',
+            icon: 'sketch',
+            hidden: true,
+            permission: 'M_transferTypeManagementList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/dataValidManagement',
+      redirect: '/setting/dataValidManagement/list',
+      name: 'dataValidManagement',
+      component: BlankLayout,
+      meta: {
+        title: '数据校验管理',
+        icon: 'sketch',
+        permission: 'M_dataVailidManageList'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'dataValidManagementList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/dataValidManagement/list.vue'),
+          meta: {
+            title: '数据校验管理',
+            icon: 'sketch',
+            hidden: true,
+            permission: 'M_dataVailidManageList'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/tireSubsidySetting',
+      redirect: '/setting/tireSubsidySetting/index',
+      name: 'tireSubsidySetting',
+      component: BlankLayout,
+      meta: {
+        title: '轮胎补贴配置',
+        icon: 'sketch'
+        // permission: 'M_tireSubsidySetting'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'index',
+          name: 'tireSubsidySettingIndex',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/tireSubsidySetting/index.vue'),
+          meta: {
+            title: '轮胎补贴配置',
+            icon: 'sketch',
+            hidden: true
+            // permission: 'M_tireSubsidySettingIndex'
+          }
+        }
+      ]
+    },
+    {
+      path: '/setting/checkDingTask',
+      redirect: '/setting/checkDingTask/list',
+      name: 'checkDingTask',
+      component: BlankLayout,
+      meta: {
+        title: '钉钉审批',
+        icon: 'sketch',
+        permission: 'M_dingAuditUpdate'
+      },
+      hideChildrenInMenu: true,
+      children: [
+        {
+          path: 'list',
+          name: 'checkDingTaskList',
+          component: () => import(/* webpackChunkName: "setting" */ '@/views/setting/checkDingTask/list.vue'),
+          meta: {
+            title: '钉钉审批',
+            icon: 'sketch',
+            hidden: true,
+            permission: 'M_dingAuditUpdate'
           }
-        ]
-      }
+        }
+      ]
+    }
+  ]
+}

+ 17 - 11
src/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue

@@ -73,6 +73,7 @@ import subarea from '@/views/common/subarea.js'
 import dealerType from '@/views/common/dealerType.js'
 // 组件
 import { dealerQueryList } from '@/api/dealer'
+import { chooseDealerList } from '@/api/provinceServiceCenter'
 export default {
   name: 'ChooseDealer',
   mixins: [commonMixin],
@@ -110,21 +111,24 @@ export default {
       },
       rowSelectionInfo: null, // 已选列表数据
       columns: [
-        { title: '经销商名称', dataIndex: 'dealerName', width: '30%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '商户别名', dataIndex: 'dealerAlias', align: 'left', width: '30%', customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '商户类型', dataIndex: 'dealerTypeName', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '商户级别', dataIndex: 'dealerLevelDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '地区', scopedSlots: { customRender: 'addressInfo' }, width: '30%', align: 'center', ellipsis: true },
-        { title: '所在区域', dataIndex: 'subareaArea.subareaName', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '所在分区', dataIndex: 'subareaArea.subareaAreaName', width: '20%', align: 'center', customRender: function (text) { return text || '--' } }
+        { title: '经销商名称', dataIndex: 'dealerName', width: '26%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '商户别名', dataIndex: 'dealerAlias', align: 'left', width: '26%', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '商户类型', dataIndex: 'dealerTypeName', width: '18%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '商户级别', dataIndex: 'dealerLevelDictValue', width: '18%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '地区', scopedSlots: { customRender: 'addressInfo' }, width: '28%', align: 'center', ellipsis: true },
+        { title: '所在区域', dataIndex: 'subareaArea.subareaName', width: '18%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '所在分区', dataIndex: 'subareaArea.subareaAreaName', width: '18%', align: 'center', customRender: function (text) { return text || '--' } }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        this.queryParam.notDealerSn = this.itemSn
-        this.queryParam.pageType = this.pageType
-        return dealerQueryList(Object.assign(parameter, this.queryParam)).then(res => {
+        if (this.pageType === 'dealerPromotion') {
+          this.queryParam.notDealerSn = this.itemSn
+          this.queryParam.pageType = this.pageType
+        }
+        const ajaxName = this.pageType === 'dealerPromotion' ? dealerQueryList : chooseDealerList
+        return ajaxName(Object.assign(parameter, this.queryParam)).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -210,8 +214,10 @@ export default {
     },
     // 初始化
     pageInit (data) {
-      this.setTableH()
       this.resetSearchForm()
+      this.$nextTick(() => {
+        this.setTableH()
+      })
     },
     // 计算表格高度
     setTableH () {

+ 77 - 0
src/views/dealerManagement/tireStorageManagement/addDealerModal.vue

@@ -0,0 +1,77 @@
+<template>
+  <!-- 关联经销商 -->
+  <a-drawer
+    title="选择经销商"
+    placement="right"
+    closable
+    :visible="isShow"
+    class="lookUpCustomers-modal"
+    @close="isShow=false"
+    width="72%">
+    <div class="dealerModalCon">
+      <chooseDealer ref="dealerChoose" pageType="tireStorage" @plAdd="handleAddDealer"></chooseDealer>
+    </div>
+  </a-drawer>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import chooseDealer from '@/views/dealerManagement/provincialWarehouseManagement/chooseDealer.vue'
+import { saveBatchDealerList } from '@/api/provinceServiceCenter'
+
+export default {
+  name: 'AddDealerModal',
+  mixins: [commonMixin],
+  components: { chooseDealer },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal //  是否打开弹框
+    }
+  },
+  methods: {
+    handleAddDealer (list) {
+      const newList = list.map(item => {
+        return {
+          dealerSn: item.dealerSn,
+          dealerName: item.dealerName,
+          dealerLevel: item.dealerLevel
+        }
+      })
+      this.spinning = true
+      saveBatchDealerList(newList).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+        }
+        this.spinning = false
+        this.$emit('ok')
+        this.isShow = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$refs.dealerChoose.resetSearchForm()
+        this.$refs.dealerChoose.clearSelect()
+        this.$emit('close')
+      } else {
+        this.$nextTick(() => {
+          this.$refs.dealerChoose.pageInit()
+        })
+      }
+    }
+  }
+}
+</script>

+ 142 - 0
src/views/dealerManagement/tireStorageManagement/changeRecordList.vue

@@ -0,0 +1,142 @@
+<template>
+  <a-modal
+    centered
+    class="addProvincialWarehouse-modal"
+    :footer="null"
+    :maskClosable="false"
+    :title="modalTit"
+    v-model="isShow"
+    @cancel="isShow=false"
+    :width="700">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <s-table
+        class="sTable fixPagination"
+        ref="table"
+        :style="{ maxHeight: 300+'px' }"
+        size="small"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :showPagination="false"
+        :scroll="{ y: 270 }"
+        :defaultLoadData="false"
+        bordered>
+      </s-table>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+// 组件
+import { STable } from '@/components'
+// 接口
+import { changeRecordList } from '@/api/provinceServiceCenter'
+export default {
+  name: 'AddProvincialWarehouseModal',
+  components: { STable },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      modalTit: '变更记录', // 标题
+      dealerSn: null, // 经销商sn
+      // 表格列表
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '6%', align: 'center' },
+        { title: '启用时间', dataIndex: 'useDate', width: '47%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '禁用时间', dataIndex: 'disableDate', width: '47%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return changeRecordList(Object.assign(parameter, { dealerSn: this.dealerSn })).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            // 计算表格序号
+            for (var i = 0; i < data.length; i++) {
+              data[i].no = i + 1
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      }
+    }
+  },
+  methods: {
+    // 初始化
+    pageInit (itemObj) {
+      const _this = this
+      _this.dealerSn = itemObj.dealerSn
+      _this.modalTit = '变更记录(' + itemObj.dealerName + ')'
+      _this.$nextTick(() => {
+        _this.$refs.table.refresh(true)
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .addProvincialWarehouse-modal{
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 10px;
+    }
+    .tree-node{
+      height: 300px;
+      overflow: auto;
+      .tree-box{
+        .tree-parent{
+          display: flex;
+          align-items: center;
+          border-bottom: 1px solid #eee;
+          padding: 0 10px;
+          > span{
+            margin:0 5px;
+            &:first-child{
+              flex-grow: 1;
+            }
+            &:last-child{
+              cursor: pointer;
+            }
+          }
+        }
+        .tree-child{
+          padding: 10px 10px 10px 35px;
+          display: flex;
+          align-items: center;
+          flex-wrap:wrap ;
+          > div{
+            margin:0 5px;
+          }
+        }
+      }
+
+    }
+  }
+</style>

+ 226 - 0
src/views/dealerManagement/tireStorageManagement/list.vue

@@ -0,0 +1,226 @@
+<template>
+  <div>
+    <a-card size="small" :bordered="false" class="tireStorageManagement-wrap searchBoxNormal">
+      <!-- 搜索条件 -->
+      <div ref="tableSearch" 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="轮胎省仓名称">
+                <dealerSubareaScopeList ref="provinceDealerList" placeholder="请输入轮胎省仓名称" id="tireStorageManagement-provinceDealerName" @change="custProvinceChange" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="轮胎省仓状态">
+                <v-select code="ENABLE_FLAG" id="tireStorageManagement-status" v-model="queryParam.status" 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="tireStorageManagement-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="tireStorageManagement-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+    </a-card>
+    <a-card size="small" :bordered="false">
+      <a-spin :spinning="spinning" tip="Loading...">
+        <!-- 操作按钮 -->
+        <div class="table-operator" v-if="$hasPermissions('B_serviceCenter_add')">
+          <a-button id="tireStorageManagement-add" type="primary" @click="openAddModal = true">新增</a-button>
+        </div>
+        <!-- 列表 -->
+        <s-table
+          class="sTable fixPagination"
+          ref="table"
+          :style="{ height: tableHeight+70+'px' }"
+          size="small"
+          :rowKey="(record) => record.id"
+          :columns="columns"
+          :data="loadData"
+          :pageSize="30"
+          :scroll="{ y: tableHeight }"
+          :defaultLoadData="false"
+          bordered>
+          <!-- 省仓状态 -->
+          <template slot="tireStatus" slot-scope="text, record">
+            <a-switch
+              id="tireStorageManagement-enableFlag"
+              v-if="$hasPermissions('B_serviceCenter_enable')"
+              checkedChildren="启用"
+              unCheckedChildren="禁用"
+              @change="openStatusModal(record)"
+              :checked="record.status == 1 ? true : false" />
+            <span v-else :style="{color:(record.status==1?'#00aa00':'#999')}"> {{ record.status==1? '已启用': '已禁用' }} </span>
+          </template>
+          <!-- 操作 -->
+          <template slot="action" slot-scope="text, record">
+            <a-button
+              size="small"
+              type="link"
+              v-if="$hasPermissions('B_serviceCenter_dealer')"
+              class="button-info"
+              @click="handleChangeRecord(record)"
+              id="provincialWarehouse-edit-btn">变更记录</a-button>
+            <span v-else>--</span>
+          </template>
+        </s-table>
+      </a-spin>
+    </a-card>
+    <!-- 新增/编辑 -->
+    <add-dealer-modal v-drag :openModal="openAddModal" @ok="$refs.table.refresh(true)" @close="openAddModal = false" />
+    <!-- 变更记录 -->
+    <change-record-list ref="changeRecord" v-drag :openModal="openRecordModal" @close="openRecordModal=false"></change-record-list>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import { STable, VSelect } from '@/components'
+import addDealerModal from './addDealerModal.vue'
+import changeRecordList from './changeRecordList.vue'
+import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
+// 接口
+import { tireStorageList, tireStorageEnable } from '@/api/provinceServiceCenter'
+export default {
+  name: 'TireStorageManagement',
+  mixins: [commonMixin],
+  components: { STable, VSelect, addDealerModal, changeRecordList, dealerSubareaScopeList },
+  data () {
+    return {
+      spinning: false,
+      tableHeight: 0, // 列表高度
+      disabled: false, //  查询、重置按钮是否可操作
+      openAddModal: false, //  新增 弹框
+      openRecordModal: false, // 变更记录 弹窗
+      //  查询条件
+      queryParam: {
+        dealerEntity: {
+          dealerName: undefined// 轮胎省仓名称
+        },
+        dealerSn: undefined, // 轮胎省仓sn
+        status: undefined// 轮胎省仓状态
+      },
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '区域', dataIndex: 'subareaArea.subareaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分区', dataIndex: 'subareaArea.subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '轮胎省仓名称', dataIndex: 'dealerEntity.dealerName', width: '18%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '轮胎省仓状态', scopedSlots: { customRender: 'tireStatus' }, width: '9%', align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '11%', align: 'center' }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return tireStorageList(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            // 计算表格序号
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      }
+    }
+  },
+  methods: {
+    // 变更记录
+    handleChangeRecord (row) {
+      this.$refs.changeRecord.pageInit({ dealerSn: row.dealerSn, dealerName: row.dealerEntity.dealerName })
+      this.openRecordModal = true
+    },
+    // 轮胎省仓客户名称 change
+    custProvinceChange (val) {
+      this.queryParam.dealerEntity.dealerName = val.name
+      this.queryParam.dealerSn = val.key
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.dealerEntity.dealerName = undefined
+      this.queryParam.dealerSn = undefined
+      this.queryParam.status = undefined
+      this.$refs.provinceDealerList.resetForm()
+      this.$refs.table.refresh(true)
+    },
+    // 打开启用 禁用 弹窗
+    openStatusModal (record) {
+      const _this = this
+      if (record.status == 1) {
+        this.$confirm({
+          title: '提示',
+          content: '禁用后该经销商不是轮胎省仓,确定禁用轮胎省仓吗?',
+          centered: true,
+          onOk () {
+            const ajaxData = {
+              serviceCenterSn: record.serviceCenterSn,
+              status: '0'
+            }
+            _this.changeStatus(ajaxData)
+          }
+        })
+      } else {
+        const params = {
+          serviceCenterSn: record.serviceCenterSn,
+          status: '1'
+        }
+        _this.changeStatus(params)
+      }
+    },
+    // 启用 禁用
+    changeStatus (params) {
+      this.spinning = true
+      tireStorageEnable(params).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+        }
+        this.spinning = false
+        this.$refs.table.refresh()
+      })
+    },
+    // 初始化
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    },
+    // 计算表格高度
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 240
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+      this.resetSearchForm()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+      this.resetSearchForm()
+    }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+      this.pageInit()
+    }
+  }
+}
+</script>

+ 254 - 0
src/views/setting/tireSubsidySetting/addSubsidyList.vue

@@ -0,0 +1,254 @@
+<template>
+  <div>
+    <a-card size="small" :bordered="false" class="addSubsidyList-wrap searchBoxNormal">
+      <!-- 搜索条件 -->
+      <div class="table-page-search-wrapper" ref="tableSearch">
+        <a-form-model
+          id="addSubsidyList-form"
+          ref="ruleForm"
+          class="form-model-con"
+          layout="inline"
+          :model="queryParam">
+          <a-row :gutter="15">
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="客户名称">
+                <dealerSubareaScopeList ref="dealerSubareaScopeList" id="addSubsidyList-dealerName" @change="custChange" />
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-item label="区域">
+                <subarea id="addSubsidyList-subarea" ref="subarea" @change="subareaChange"></subarea>
+              </a-form-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="地区">
+                <AreaList id="addSubsidyList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="状态">
+                <v-select
+                  v-model="queryParam.status"
+                  id="addSubsidyList-status"
+                  code="DEALER_LEVEL"
+                  placeholder="请选择状态"
+                  allowClear></v-select>
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="4" :sm="24">
+              <a-button
+                type="primary"
+                @click="$refs.table.refresh(true)"
+                :disabled="disabled"
+                id="addSubsidyList-refresh">查询</a-button>
+              <a-button
+                style="margin-left: 8px"
+                @click="resetSearchForm"
+                :disabled="disabled"
+                id="addSubsidyList-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form-model>
+      </div>
+    </a-card>
+    <a-card size="small" :bordered="false">
+      <a-spin :spinning="spinning" tip="Loading...">
+        <!-- 操作按钮 -->
+        <div class="table-operator">
+          <a-button id="addSubsidyList-add" type="primary" @click="handleAdd">新增</a-button>
+        </div>
+        <!-- 列表 -->
+        <s-table
+          class="sTable fixPagination"
+          ref="table"
+          size="small"
+          :rowKey="(record) => record.id"
+          :style="{ height: tableHeight+70+'px' }"
+          :columns="columns"
+          :data="loadData"
+          :scroll="{ y: tableHeight-120}"
+          :defaultLoadData="false"
+          bordered>
+          <!-- 客户名称 -->
+          <template slot="customName" slot-scope="text, record">
+            {{ record.dealerEntity&&record.dealerEntity.dealerName?record.dealerEntity.dealerName:record.defaultFlag==1?'默认':'--' }}
+          </template>
+          <!-- 操作 -->
+          <template slot="action" slot-scope="text, record">
+            <a-button
+              size="small"
+              type="link"
+              class="button-info"
+              @click="handleEdit(record)"
+              v-if="record.status=='IN_USE'"
+              :id="'addSubsidyList-edit-btn'+record.id"
+            >
+              编辑
+            </a-button>
+            <a-button
+              size="small"
+              type="link"
+              class="button-error"
+              @click="handleDel(record)"
+              v-if="record.status=='IN_USE'&&record.defaultFlag==0"
+              :id="'addSubsidyList-del-btn'+record.id"
+            >
+              删除
+            </a-button>
+            <span v-if="record.status=='END'">--</span>
+          </template>
+        </s-table>
+      </a-spin>
+    </a-card>
+    <!-- 新增/编辑 -->
+    <add-subsidy-modal v-drag :openModal="openAddSubsidyModal" :pageType="pageType" @ok="$refs.table.refresh(true)" @close="openAddSubsidyModal = false" />
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import { STable, VSelect } from '@/components'
+import subarea from '@/views/common/subarea.js'
+import AreaList from '@/views/common/areaList.js'
+import addSubsidyModal from './addSubsidyModal.vue'
+import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
+// 接口
+import { tireSubsidyRuleList } from '@/api/subsidyRule'
+export default {
+  name: 'AddSubsidyList',
+  mixins: [commonMixin],
+  components: { STable, VSelect, subarea, AreaList, dealerSubareaScopeList, addSubsidyModal },
+  props: {
+    pageType: { //  弹框显示状态
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      spinning: false,
+      disabled: false, //  查询、重置按钮是否可操作
+      tableHeight: 0, // 表格高度
+      //  查询条件
+      queryParam: {
+        subareaArea: {
+          subareaSn: '', // 区域
+          subareaAreaSn: '' // 分区
+        },
+        customSn: undefined, // 客户sn
+        dealerEntity: {
+          dealerName: undefined, // 客户名称
+          provinceSn: undefined, // 省
+          citySn: undefined, // 市
+          districtSn: undefined // 区
+        },
+        ruleType: undefined
+      },
+      openAddSubsidyModal: false, // 新增弹窗
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        this.queryParam.ruleType = this.pageType
+        const params = Object.assign(parameter, this.queryParam)
+        // 获取列表数据  有分页
+        return tireSubsidyRuleList(params).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            // 计算表格序号
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+          }
+          this.disabled = false
+          this.spinning = false
+          return data
+        })
+      }
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  computed: {
+    columns () {
+      const _this = this
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '区域', dataIndex: 'subareaArea.subareaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分区', dataIndex: 'subareaArea.subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '客户名称', dataIndex: 'dealerEntity.dealerName', width: '14%', align: 'center', scopedSlots: { customRender: 'customName' }, ellipsis: true },
+        { title: '开始月份', dataIndex: 'ruleStartDate', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '结束月份', dataIndex: 'ruleEndDate', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '增量补贴(' + (_this.pageType === 'SUBSIDY_QUARTER_FEE' ? '季度)' : '年度)'),
+          children: [
+            { title: '1阶目标(条)', dataIndex: 'ruleTarget1', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
+            { title: '1阶补贴(元)', dataIndex: 'ruleValue1', width: '13%', align: 'right', customRender: text => { return (text || text == 0) ? _this.toThousands(text) : '--' } },
+            { title: '2阶目标(条)', dataIndex: 'ruleTarget2', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
+            { title: '2阶补贴(元)', dataIndex: 'ruleValue2', width: '13%', align: 'right', customRender: text => { return (text || text == 0) ? _this.toThousands(text) : '--' } },
+            { title: '3阶目标(条)', dataIndex: 'ruleTarget3', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
+            { title: '3阶补贴(元)', dataIndex: 'ruleValue3', width: '13%', align: 'right', customRender: text => { return (text || text == 0) ? _this.toThousands(text) : '--' } }
+          ] },
+        { title: '状态', dataIndex: 'statusDictValue', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '11%', align: 'center' }
+      ]
+      return arr
+    }
+  },
+  methods: {
+    // 新增
+    handleAdd () {
+      this.openAddSubsidyModal = true
+    },
+    // 客户名称 change
+    custChange (val) {
+      this.queryParam.dealerEntity.dealerName = val.name
+      this.queryParam.customSn = val.key
+    },
+    // 地区
+    areaChange (val) {
+      this.queryParam.dealerEntity.provinceSn = val[0] ? val[0] : undefined
+      this.queryParam.dealerEntity.citySn = val[1] ? val[1] : undefined
+      this.queryParam.dealerEntity.districtSn = val[2] ? val[2] : undefined
+    },
+    // 区域分区  change
+    subareaChange (val) {
+      this.queryParam.subareaArea.subareaSn = val[0] ? val[0] : ''
+      this.queryParam.subareaArea.subareaAreaSn = val[1] ? val[1] : ''
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.dealerEntity.provinceSn = undefined
+      this.queryParam.dealerEntity.citySn = undefined
+      this.queryParam.dealerEntity.districtSn = undefined
+      this.queryParam.dealerEntity.dealerName = undefined
+      this.queryParam.customSn = undefined
+      this.queryParam.ruleType = undefined
+      this.queryParam.subareaArea.subareaSn = ''
+      this.queryParam.subareaArea.subareaAreaSn = ''
+      this.$refs.subarea.clearData()
+      this.$refs.dealerSubareaScopeList.resetForm()
+      this.$refs.areaList.clearData()
+      this.$refs.table.refresh(true)
+    },
+    // 初始化
+    pageInit () {
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        this.setTableH()
+      })
+      this.resetSearchForm()
+    },
+    // 计算表格高度
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 300
+    }
+  }
+}
+</script>

+ 266 - 0
src/views/setting/tireSubsidySetting/addSubsidyModal.vue

@@ -0,0 +1,266 @@
+<template>
+  <a-modal
+    centered
+    class="addSubsidy-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="新增"
+    v-model="isShow"
+    @cancel="isShow=false"
+    :width="700">
+    <div>
+      <a-spin :spinning="spinning" tip="Loading...">
+        <a-form-model
+          id="addSubsidyModal-form"
+          ref="ruleForm"
+          :model="form"
+          :rules="rules"
+          :label-col="formItemLayout.labelCol"
+          :wrapper-col="formItemLayout.wrapperCol"
+        >
+          <div class="formList" style="margin-bottom:15px;">
+            <a-radio-group id="addSubsidyModal-defaultFlag" v-model="form.defaultFlag">
+              <a-radio :value="0" id="addSubsidyModal-defaultFlag0">
+                指定客户
+              </a-radio>
+              <a-radio :value="1" id="addSubsidyModal-defaultFlag1">
+                默认
+              </a-radio>
+            </a-radio-group>
+          </div>
+          <a-form-model-item label="客户名称" prop="dealerSn" v-if="form.defaultFlag==0">
+            <dealerSubareaScopeList style="width:90%;" ref="dealerSubareaScopeList" id="addSubsidyModal-dealerName" @change="custChange" />
+          </a-form-model-item>
+          <a-form-model-item label="增量补贴(季度)" prop="ruleTarget1">
+            <div>
+              大于等于<a-input-number
+                v-model="form.ruleTarget1"
+                :min="1"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                id="addSubsidyModal-ruleTarget1"
+                :precision="0"
+                placeholder="请输入"/>条,每条补贴
+              <a-input-number
+                v-model="form.ruleValue1"
+                :min="0.01"
+                id="addSubsidyModal-ruleValue1"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                :precision="2"
+                placeholder="请输入"/>元
+            </div>
+            <div>
+              大于等于<a-input-number
+                v-model="form.ruleTarget2"
+                :min="form.ruleTarget1*1+1"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                id="addSubsidyModal-ruleTarget2"
+                :precision="0"
+                placeholder="请输入"/>条,每条补贴
+              <a-input-number
+                v-model="form.ruleValue2"
+                :min="form.ruleValue1*1+0.01"
+                id="addSubsidyModal-ruleValue2"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                :precision="2"
+                placeholder="请输入"/>元
+            </div>
+            <div>
+              大于等于<a-input-number
+                v-model="form.ruleTarget3"
+                :min="form.ruleTarget2*1+1"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                id="addSubsidyModal-ruleTarget3"
+                :precision="0"
+                placeholder="请输入"/>条,每条补贴
+              <a-input-number
+                v-model="form.ruleValue3"
+                :min="form.ruleValue2*1+0.01"
+                id="addSubsidyModal-ruleValue3"
+                style="width:80px;margin:0 6px;"
+                :max="99999999"
+                :precision="2"
+                placeholder="请输入"/>元
+            </div>
+          </a-form-model-item>
+        </a-form-model>
+        <div class="btn-cont">
+          <a-button id="addSubsidyModal-cancel" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
+          <a-button type="primary" id="addSubsidyModal-save" @click="handleSave">保存</a-button>
+        </div>
+      </a-spin>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+// 组件
+import { VSelect } from '@/components'
+import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
+// 接口
+import { subsidyRuleSave, createSubsidyRule } from '@/api/subsidyRule'
+export default {
+  name: 'AddSubsidyModal',
+  components: { VSelect, dealerSubareaScopeList },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    pageType: { //  页面类型
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      spinning: false,
+      formItemLayout: {
+        labelCol: { span: 5 },
+        wrapperCol: { span: 17 }
+      },
+      // 提交数据
+      form: {
+        defaultFlag: 0, // 0指定客户  1默认
+        dealerSn: undefined, // 客户名称
+        ruleTarget1: undefined, // 增量补贴
+        ruleValue1: undefined,
+        ruleTarget2: undefined,
+        ruleValue2: undefined,
+        ruleTarget3: undefined,
+        ruleValue3: undefined
+      },
+      // 必填项判断
+      rules: {
+        dealerSn: [{ required: true, message: '请选择客户名称', trigger: 'change' }],
+        ruleTarget1: [{ required: true, message: '增量补贴不能为空', trigger: 'blur' }]
+      }
+    }
+  },
+  methods: {
+    // 客户名称 change
+    custChange (val) {
+      if (val && val.key) {
+        this.form.dealerSn = val.key
+      } else {
+        this.form.dealerSn = undefined
+      }
+    },
+    // 保存
+    handleSave () {
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          // 为空判断
+          const newForm = JSON.parse(JSON.stringify(_this.form))
+          delete newForm.defaultFlag
+          delete newForm.dealerSn
+          const flagArr = []
+          for (const i in newForm) { flagArr.push(newForm[i]) }
+          if (flagArr && flagArr.length < 6) {
+            _this.$message.error('增量补贴不能为空!')
+            return
+          }
+          _this.form.ruleType = _this.pageType
+          _this.spinning = true
+          subsidyRuleSave(this.form).then(res => {
+            if (res.status == 200) {
+              if (!res.data) {
+                this.isShow = false
+                this.$message.success(res.message)
+                this.$emit('ok')
+              } else {
+                _this.openTip(res.data)
+              }
+            }
+            _this.spinning = false
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+    openTip (code) {
+      const _this = this
+      if (code === 'IN_USE') {
+        this.$confirm({
+          title: '提示',
+          content: '将重新生成新的运费补贴,并结束当前运费补贴。',
+          centered: true,
+          onOk () {
+            createSubsidyRule(_this.form).then(res => {
+              if (res.status == 200) {
+                _this.isShow = false
+                _this.$message.success(res.message)
+                _this.$emit('ok')
+              }
+            })
+          }
+        })
+      } else {
+        this.$confirm({
+          title: '提示',
+          content: '已存在【未开始】的运费补贴',
+          centered: true,
+          okText: '知道了',
+          cancelButtonProps: {
+            style: {
+              display: 'none' // 通过设置样式隐藏取消按钮
+            }
+          },
+          onOk () {
+            console.log('知道了')
+          }
+        })
+      }
+    },
+    // 重置
+    resetFormData () {
+      this.form.defaultFlag = 0
+      this.form.dealerSn = undefined
+      this.form.ruleTarget1 = undefined
+      this.form.ruleValue1 = undefined
+      this.form.ruleTarget2 = undefined
+      this.form.ruleValue2 = undefined
+      this.form.ruleTarget3 = undefined
+      this.form.ruleValue3 = undefined
+      this.$refs.dealerSubareaScopeList.resetForm()
+      this.$refs.ruleForm.resetFields()
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.resetFormData()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .addSubsidy-modal{
+    .formList{
+      margin-left:60px;
+    }
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 30px;
+    }
+  }
+</style>

+ 233 - 0
src/views/setting/tireSubsidySetting/costAddModal.vue

@@ -0,0 +1,233 @@
+<template>
+  <a-modal
+    centered
+    class="costAdd-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="新增"
+    v-model="isShow"
+    @cancel="isShow=false"
+    :width="700">
+    <div>
+      <a-spin :spinning="spinning" tip="Loading...">
+        <a-form-model
+          id="costAddModal-form"
+          ref="ruleForm"
+          :model="form"
+          :rules="rules"
+          :label-col="formItemLayout.labelCol"
+          :wrapper-col="formItemLayout.wrapperCol"
+        >
+          <div class="formList" style="margin-bottom:15px;">
+            <a-radio-group id="costAddModal-defaultFlag" v-model="form.defaultFlag">
+              <a-radio :value="0" id="costAddModal-defaultFlag0">
+                指定客户
+              </a-radio>
+              <a-radio :value="1" id="costAddModal-defaultFlag1">
+                默认
+              </a-radio>
+            </a-radio-group>
+          </div>
+          <a-form-model-item label="客户名称" prop="dealerSn" v-if="form.defaultFlag==0">
+            <dealerSubareaScopeList style="width:90%;" ref="dealerSubareaScopeList" id="costAddModal-dealerName" @change="custChange" />
+          </a-form-model-item>
+          <a-form-model-item :label="pageType==='SERVICE_FEE'?'服务费比例':'运费补贴'" prop="ruleValue1">
+            <a-input-number
+              id="costAddModal-ruleValue1"
+              v-model="form.ruleValue1"
+              :min="1"
+              style="width:90%;"
+              :max="99999999"
+              :precision="2"
+              :placeholder="'请输入'+(pageType==='SERVICE_FEE'?'服务费比例':'运费补贴')"/>
+            <span style="margin-left:10px;">{{ pageType==='SERVICE_FEE'?'%':'元' }}</span>
+          </a-form-model-item>
+          <a-form-model-item label="生效方式" prop="effectType">
+            <a-radio-group v-model="form.effectType" id="costAddModal-effectType">
+              <a-radio :value="0" id="costAddModal-effectType0">
+                立即生效
+              </a-radio>
+              <a-radio :value="1" id="costAddModal-effectType1">
+                次月生效
+              </a-radio>
+            </a-radio-group>
+          </a-form-model-item>
+          <div class="formList" v-if="(pageType==='SERVICE_FEE' || pageType==='SHIPPING_FEE')&&feeDataList&&feeDataList.length>0">
+            <div v-for="item in feeDataList" :key="item.id">{{ item.effectType==1?'当前':'次月' }}{{ pageType==='SERVICE_FEE'?'服务费比例':'运费补贴' }}:{{ item.ruleValue1 }}%</div>
+          </div>
+        </a-form-model>
+        <div class="btn-cont">
+          <a-button id="costAddModal-cancel" @click="isShow = false" style="margin-right: 15px;">取消</a-button>
+          <a-button type="primary" id="costAddModal-save" @click="handleSave">保存</a-button>
+        </div>
+      </a-spin>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+// 组件
+import { VSelect } from '@/components'
+import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
+// 接口
+import { getSubsidyRuleList, subsidyRuleSave, createSubsidyRule } from '@/api/subsidyRule'
+export default {
+  name: 'CostAddModal',
+  components: { VSelect, dealerSubareaScopeList },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    pageType: { //  页面类型
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      spinning: false, // 页面加载状态
+      formItemLayout: {// form表单中label设置
+        labelCol: { span: 4 },
+        wrapperCol: { span: 17 }
+      },
+      // 提交数据
+      form: {
+        defaultFlag: 0, // 0指定客户  1默认
+        dealerSn: undefined, // 客户名称
+        ruleValue1: undefined, // 服务费比例
+        ruleType: undefined, // 弹窗类型
+        effectType: undefined// 生效方式
+      },
+      // 必填项判断
+      rules: {
+        dealerSn: [{ required: true, message: '请选择客户名称', trigger: 'change' }],
+        ruleValue1: [{ required: true, message: '请输入服务费比例', trigger: 'blur' }],
+        effectType: [{ required: true, message: '请选择生效方式', trigger: 'change' }]
+      },
+      feeDataList: null // 当月/次月费用数据
+    }
+  },
+  methods: {
+    // 客户名称 change
+    custChange (val) {
+      if (val && val.key) {
+        this.form.dealerSn = val.key
+        this.spinning = true
+        getSubsidyRuleList({ dealerSn: val.key, subsidyQueryStatus: 'NOT_FINISH', ruleType: this.pageType }).then(res => {
+          if (res.status == 200) {
+            this.feeDataList = res.data
+          } else {
+            this.feeDataList = null
+          }
+          this.spinning = false
+        })
+      } else {
+        this.feeDataList = null
+      }
+    },
+    // 保存
+    handleSave () {
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          _this.form.ruleType = _this.pageType
+          _this.spinning = true
+          subsidyRuleSave(this.form).then(res => {
+            if (res.status == 200) {
+              if (!res.data) {
+                this.isShow = false
+                this.$message.success(res.message)
+                this.$emit('ok')
+              } else {
+                _this.openTip(res.data)
+              }
+            }
+            this.spinning = false
+          })
+        } else {
+          console.log('error submit!!')
+          return false
+        }
+      })
+    },
+    openTip (code) {
+      const _this = this
+      if (code === 'IN_USE') {
+        this.$confirm({
+          title: '提示',
+          content: '将重新生成新的运费补贴,并结束当前运费补贴。',
+          centered: true,
+          onOk () {
+            createSubsidyRule(_this.form).then(res => {
+              if (res.status == 200) {
+                _this.isShow = false
+                _this.$message.success(res.message)
+                _this.$emit('ok')
+              }
+            })
+          }
+        })
+      } else {
+        this.$confirm({
+          title: '提示',
+          content: '已存在【未开始】的运费补贴',
+          centered: true,
+          okText: '知道了',
+          cancelButtonProps: {
+            style: {
+              display: 'none' // 通过设置样式隐藏取消按钮
+            }
+          },
+          onOk () {
+            console.log('知道了')
+          }
+        })
+      }
+    },
+    // 重置
+    resetFormData () {
+      this.form.defaultFlag = 0
+      this.form.dealerSn = undefined
+      this.form.ruleValue1 = undefined
+      this.form.ruleType = undefined
+      this.form.effectType = undefined
+      this.$refs.dealerSubareaScopeList.resetForm()
+      this.feeDataList = null
+      this.$refs.ruleForm.resetFields()
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.resetFormData()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+  .costAdd-modal{
+    .formList{
+      margin-left:42px;
+      // div:last-child{
+      //   margin-bottom:20px;
+      // }
+    }
+    .ant-modal-body {
+      padding: 40px 40px 24px;
+    }
+    .btn-cont {
+      text-align: center;
+      margin: 35px 0 30px;
+    }
+  }
+</style>

+ 298 - 0
src/views/setting/tireSubsidySetting/costCollectionList.vue

@@ -0,0 +1,298 @@
+<template>
+  <div>
+    <a-card size="small" :bordered="false" class="costCollectionList-wrap searchBoxNormal">
+      <!-- 搜索条件 -->
+      <div class="table-page-search-wrapper" ref="tableSearch">
+        <a-form-model
+          id="costCollectionList-form"
+          ref="ruleForm"
+          class="form-model-con"
+          layout="inline"
+          :model="queryParam">
+          <a-row :gutter="15">
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="客户名称">
+                <dealerSubareaScopeList ref="dealerSubareaScopeList" id="costCollectionList-dealerName" @change="custChange" />
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-item label="区域">
+                <subarea id="costCollectionList-subarea" ref="subarea" @change="subareaChange"></subarea>
+              </a-form-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="地区">
+                <AreaList id="costCollectionList-areaList" changeOnSelect ref="areaList" @change="areaChange" defValKey="id"></AreaList>
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="5" :sm="24">
+              <a-form-model-item label="状态">
+                <v-select
+                  v-model="queryParam.subsidyQueryStatus"
+                  id="costCollectionList-subsidyQueryStatus"
+                  code="SUBSIDY_QUERY_STATUS"
+                  placeholder="请选择状态"
+                  allowClear></v-select>
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="4" :sm="24">
+              <a-button
+                type="primary"
+                @click="$refs.table.refresh(true)"
+                :disabled="disabled"
+                id="costCollectionList-refresh">查询</a-button>
+              <a-button
+                style="margin-left: 8px"
+                @click="resetSearchForm"
+                :disabled="disabled"
+                id="costCollectionList-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form-model>
+      </div>
+    </a-card>
+    <a-card size="small" :bordered="false">
+      <a-spin :spinning="spinning" tip="Loading...">
+        <!-- 操作按钮 -->
+        <div class="table-operator">
+          <a-button id="costCollectionList-add-btn" type="primary" @click="handleAdd">新增</a-button>
+        </div>
+        <!-- 列表 -->
+        <s-table
+          class="sTable fixPagination"
+          ref="table"
+          size="small"
+          :rowKey="(record) => record.id"
+          :style="{ height: tableHeight+70+'px' }"
+          :columns="columns"
+          :data="loadData"
+          :scroll="{ y: tableHeight-120}"
+          :defaultLoadData="false"
+          bordered>
+          <!-- 客户名称 -->
+          <template slot="customName" slot-scope="text, record">
+            {{ record.dealerEntity&&record.dealerEntity.dealerName?record.dealerEntity.dealerName:record.defaultFlag==1?'默认':'--' }}
+          </template>
+          <!-- 操作 -->
+          <template slot="action" slot-scope="text, record">
+            <a-button
+              size="small"
+              type="link"
+              class="button-info"
+              @click="handleEdit(record)"
+              v-if="record.status=='WAIT'"
+              :id="'costCollectionList-edit-btn'+record.id"
+            >
+              编辑
+            </a-button>
+            <a-button
+              size="small"
+              type="link"
+              class="button-error"
+              :id="'costCollectionList-end-btn'+record.id"
+              v-if="record.status=='IN_USE'&&record.defaultFlag==0"
+              @click="handleEndOrDel(record,'end')"
+            >
+              结束
+            </a-button>
+            <a-button
+              size="small"
+              type="link"
+              class="button-error"
+              @click="handleEndOrDel(record,'del')"
+              v-if="record.status=='WAIT'"
+              :id="'costCollectionList-del-btn'+record.id"
+            >
+              删除
+            </a-button>
+            <span v-if="record.status=='IN_USE'&&record.defaultFlag==1">--</span>
+          </template>
+        </s-table>
+      </a-spin>
+    </a-card>
+    <!-- 新增 -->
+    <cost-add-modal v-drag :openModal="openCostAddModal" :pageType="pageType" @ok="$refs.table.refresh(true)" @close="openCostAddModal = false" />
+    <!-- 编辑 -->
+    <edit-modal></edit-modal>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import { STable, VSelect } from '@/components'
+import subarea from '@/views/common/subarea.js'
+import AreaList from '@/views/common/areaList.js'
+import costAddModal from './costAddModal.vue'
+import dealerSubareaScopeList from '@/views/common/dealerSubareaScopeList.vue'
+// 接口
+import { tireSubsidyRuleList, delSubsidyRule, endSubsidyRule } from '@/api/subsidyRule'
+export default {
+  name: 'CostCollectionList',
+  mixins: [commonMixin],
+  components: { STable, VSelect, subarea, AreaList, dealerSubareaScopeList, costAddModal },
+  props: {
+    pageType: { //  弹框显示状态
+      type: String,
+      default: ''
+    }
+  },
+  data () {
+    return {
+      spinning: false,
+      disabled: false, //  查询、重置按钮是否可操作
+      advanced: true, // 高级搜索 展开/关闭
+      tableHeight: 0, // 表格高度
+      openCostAddModal: false, // 新增弹窗
+      exportLoading: false, // 导出按钮加载状态
+      showExport: false, // 导出弹窗
+      timeInfo: [], // 日期
+      //  查询条件
+      queryParam: {
+        subareaArea: {
+          subareaSn: '', // 区域
+          subareaAreaSn: '' // 分区
+        },
+        customSn: undefined, // 客户sn
+        dealerEntity: {
+          dealerName: undefined, // 客户名称
+          provinceSn: undefined, // 省
+          citySn: undefined, // 市
+          districtSn: undefined // 区
+        },
+        ruleType: undefined,
+        subsidyQueryStatus: 'NOT_FINISH'
+      },
+      totalData: null, // 合计
+      rules: {
+        'queryDate': [{ required: true, message: '请选择查询季度', trigger: 'change' }]
+      },
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        // 获取列表数据  有分页
+        this.queryParam.ruleType = this.pageType
+        const params = Object.assign(parameter, this.queryParam)
+        return tireSubsidyRuleList(params).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            // 计算表格序号
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+          }
+          this.disabled = false
+          this.spinning = false
+          return data
+        })
+      }
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  computed: {
+    columns () {
+      const _this = this
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '创建时间', dataIndex: 'createDate', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '区域', dataIndex: 'subareaArea.subareaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分区', dataIndex: 'subareaArea.subareaAreaName', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '客户名称', dataIndex: 'dealerEntity.dealerName', width: '14%', align: 'center', scopedSlots: { customRender: 'customName' }, ellipsis: true },
+        { title: '开始时间', dataIndex: 'ruleStartDate', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '结束时间', dataIndex: 'ruleEndDate', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', dataIndex: 'statusDictValue', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '11%', align: 'center' }
+      ]
+      if (this.pageType === 'SERVICE_FEE') {
+        arr.splice(7, 0, { title: '服务费比例(%)', dataIndex: 'ruleValue1', width: '14%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+      } else {
+        arr.splice(7, 0, { title: '运费补贴(元)', dataIndex: 'ruleValue1', width: '14%', align: 'right', customRender: function (text) { return ((text || text == 0) ? _this.toThousands(text) : '--') } })
+      }
+      return arr
+    }
+  },
+  methods: {
+    // 新增
+    handleAdd () {
+      this.openCostAddModal = true
+    },
+    // 客户名称 change
+    custChange (val) {
+      this.queryParam.dealerEntity.dealerName = val.name
+      this.queryParam.customSn = val.key
+    },
+    // 地区
+    areaChange (val) {
+      this.queryParam.dealerEntity.provinceSn = val[0] ? val[0] : undefined
+      this.queryParam.dealerEntity.citySn = val[1] ? val[1] : undefined
+      this.queryParam.dealerEntity.districtSn = val[2] ? val[2] : undefined
+    },
+    // 区域分区  change
+    subareaChange (val) {
+      this.queryParam.subareaArea.subareaSn = val[0] ? val[0] : ''
+      this.queryParam.subareaArea.subareaAreaSn = val[1] ? val[1] : ''
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.dealerEntity.provinceSn = undefined
+      this.queryParam.dealerEntity.citySn = undefined
+      this.queryParam.dealerEntity.districtSn = undefined
+      this.queryParam.dealerEntity.dealerName = undefined
+      this.queryParam.customSn = undefined
+      this.queryParam.ruleType = undefined
+      this.queryParam.subareaArea.subareaSn = ''
+      this.queryParam.subareaArea.subareaAreaSn = ''
+      this.queryParam.subsidyQueryStatus = 'NOT_FINISH'
+      this.$refs.subarea.clearData()
+      this.$refs.dealerSubareaScopeList.resetForm()
+      this.$refs.areaList.clearData()
+      this.$refs.table.refresh(true)
+    },
+    // 编辑
+    handleEdit (row) {
+    },
+    // 结束  删除
+    handleEndOrDel (row, type) {
+      const ajaxName = type === 'end' ? endSubsidyRule : delSubsidyRule
+      let tipWord = null
+      if (this.pageType === 'SERVICE_FEE') {
+        tipWord = type === 'end' ? '确定结束服务费比例吗?结束后以默认服务费比例计算' : '确定删除服务费比例吗?'
+      } else {
+        tipWord = type === 'end' ? '确定结束运费补贴吗?结束后以默认运费补贴计算' : '确定删除运费补贴吗?删除后次月以默认运费补贴计算'
+      }
+      this.$confirm({
+        title: '提示',
+        content: tipWord,
+        centered: true,
+        onOk () {
+          ajaxName({ ruleSn: row.ruleSn, ruleType: this.pageType }).then(res => {
+            if (res.status == 200) {
+              this.$message.success(res.message)
+              this.$refs.table.refresh(true)
+            }
+          })
+        }
+      })
+    },
+    // 初始化
+    pageInit () {
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        this.setTableH()
+      })
+      this.resetSearchForm()
+    },
+    // 计算表格高度
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 300
+    }
+  }
+}
+</script>

+ 74 - 0
src/views/setting/tireSubsidySetting/index.vue

@@ -0,0 +1,74 @@
+<template>
+  <div class="tireSubsidySetting-mainBox">
+    <a-tabs default-active-key="SERVICE_FEE" id="tireSubsidySetting-index" @change="handleChange" class="tireSubsidySetting-tabs">
+      <a-tab-pane key="SERVICE_FEE" tab="服务费">
+      </a-tab-pane>
+      <a-tab-pane key="SHIPPING_FEE" tab="运费补贴" force-render>
+      </a-tab-pane>
+      <a-tab-pane key="SUBSIDY_QUARTER_FEE" tab="增量补贴(季度)" force-render>
+      </a-tab-pane>
+      <a-tab-pane key="SUBSIDY_YEAR_FEE" tab="增量补贴(年度)" force-render>
+      </a-tab-pane>
+    </a-tabs>
+    <div v-if="tabVal=='SERVICE_FEE' || tabVal=='SHIPPING_FEE'">
+      <costCollectionList ref="costCollection" :pageType="tabVal"></costCollectionList>
+    </div>
+    <div v-else>
+      <addSubsidyList ref="addSubsidy" :pageType="tabVal"></addSubsidyList>
+    </div>
+  </div>
+</template>
+<script>
+import { commonMixin } from '@/utils/mixin'
+// 组件
+import costCollectionList from './costCollectionList.vue'
+import addSubsidyList from './addSubsidyList.vue'
+
+export default {
+  name: 'TireFeeReportIndex',
+  mixins: [commonMixin],
+  components: { costCollectionList, addSubsidyList },
+  data () {
+    return {
+      tabVal: 'SERVICE_FEE' // tab值  1轮胎月度费用报表 2轮胎季度费用报表 3轮胎年度费用报表 4轮胎费用明细报表
+    }
+  },
+  methods: {
+    // 切换tab值  change
+    handleChange (val) {
+      this.tabVal = val
+      this.$nextTick(() => {
+        if (val == 'SERVICE_FEE' || val == 'SHIPPING_FEE') {
+          this.$refs.costCollection.pageInit()
+        } else {
+          this.$refs.addSubsidy.pageInit()
+        }
+      })
+    },
+    // 初始化
+    pageInit () {
+      if (this.tabVal == 'SERVICE_FEE') {
+        this.$refs.costCollection.pageInit()
+      }
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+    }
+  }
+}
+</script>
+<style lang="less" scoped>
+  .tireSubsidySetting-mainBox{
+    .tireSubsidySetting-tabs{
+      background:#ffffff;
+    }
+  }
+</style>