浏览代码

Merge branch 'deploy_0804' of jianguan-web/jg-ocs-html into master

陈瑞 3 年之前
父节点
当前提交
c08df96252
共有 69 个文件被更改,包括 2292 次插入220 次删除
  1. 359 99
      package-lock.json
  2. 3 0
      package.json
  3. 28 0
      src/api/reportData.js
  4. 34 0
      src/api/salesDetail.js
  5. 34 0
      src/api/spareParts.js
  6. 73 34
      src/components/MultiTab/MultiTab.vue
  7. 3 3
      src/components/global.less
  8. 16 0
      src/components/index.less
  9. 26 1
      src/config/router.config.js
  10. 2 2
      src/layouts/BasicLayout.vue
  11. 2 1
      src/store/modules/app.js
  12. 8 3
      src/views/allocationManagement/transferOut/list.vue
  13. 6 1
      src/views/basicData/transferTypeManagement/list.vue
  14. 5 0
      src/views/basicData/warehouse/list.vue
  15. 8 3
      src/views/basicData/warehouse/storingLocation/list.vue
  16. 8 3
      src/views/dealerManagement/dealerAccountManagement/list.vue
  17. 5 0
      src/views/dealerManagement/dealerRelationshipBinding/list.vue
  18. 5 0
      src/views/dealerManagement/marketingDivisionSet/list.vue
  19. 5 0
      src/views/dealerManagement/merchantInfoManagement/list.vue
  20. 5 0
      src/views/dealerManagement/rebateSettings/list.vue
  21. 7 2
      src/views/financialManagement/financialCollection/list.vue
  22. 6 1
      src/views/financialManagement/returnConfirmation/list.vue
  23. 5 0
      src/views/financialManagement/warehousingConfirmation/list.vue
  24. 6 1
      src/views/inventoryManagement/intelligentReplenishment/list.vue
  25. 12 7
      src/views/inventoryManagement/inventoryQuery/list.vue
  26. 19 14
      src/views/inventoryManagement/inventoryWarning/list.vue
  27. 5 0
      src/views/power/role/roleList.vue
  28. 5 0
      src/views/power/user/userList.vue
  29. 53 8
      src/views/productManagement/newProduct/detail.vue
  30. 7 2
      src/views/productManagement/newProduct/list.vue
  31. 6 1
      src/views/productManagement/priceChangeRecord/list.vue
  32. 5 0
      src/views/productManagement/productBrand/list.vue
  33. 6 2
      src/views/productManagement/productCategory/list.vue
  34. 10 5
      src/views/productManagement/productInfo/list.vue
  35. 6 1
      src/views/productManagement/productLaunchAudit/list.vue
  36. 5 0
      src/views/productManagement/productLevel/list.vue
  37. 5 0
      src/views/productManagement/productOfflineAudit/list.vue
  38. 5 0
      src/views/productManagement/productPricing/list.vue
  39. 5 0
      src/views/productManagement/productUniversal/list.vue
  40. 5 0
      src/views/promotionRulesManagement/orderStatistics/list.vue
  41. 6 1
      src/views/promotionRulesManagement/productStatistics/list.vue
  42. 5 0
      src/views/promotionRulesManagement/promotionRules/list.vue
  43. 193 0
      src/views/purchasingManagement/bulkWarehousingOrder/chooseImportModal.vue
  44. 21 8
      src/views/purchasingManagement/bulkWarehousingOrder/edit.vue
  45. 199 0
      src/views/purchasingManagement/bulkWarehousingOrder/importGuideModal.vue
  46. 7 2
      src/views/purchasingManagement/bulkWarehousingOrder/list.vue
  47. 9 1
      src/views/reportData/actualSalesReport/list.vue
  48. 9 1
      src/views/reportData/billingReturnReport/list.vue
  49. 9 1
      src/views/reportData/returnSlipReport/list.vue
  50. 9 1
      src/views/reportData/salesAmountReport/list.vue
  51. 502 0
      src/views/reportData/salesPresentation/list.vue
  52. 9 1
      src/views/reportData/salesReturnReport/list.vue
  53. 9 1
      src/views/reportData/salesSlipReport/list.vue
  54. 5 0
      src/views/salesManagement/backorder/list.vue
  55. 5 0
      src/views/salesManagement/examineVerify/list.vue
  56. 5 0
      src/views/salesManagement/outboundOrder/list.vue
  57. 5 0
      src/views/salesManagement/priceInquiry/list.vue
  58. 5 0
      src/views/salesManagement/pushOrderManagement/list.vue
  59. 195 0
      src/views/salesManagement/salesQuery/chooseImportModal.vue
  60. 28 9
      src/views/salesManagement/salesQuery/edit.vue
  61. 199 0
      src/views/salesManagement/salesQuery/importGuideModal.vue
  62. 5 0
      src/views/salesManagement/salesQuery/list.vue
  63. 5 0
      src/views/salesManagement/salesReturn/list.vue
  64. 5 0
      src/views/salesManagement/shortageStatisticsC/list.vue
  65. 5 0
      src/views/salesManagement/shortageStatisticsP/list.vue
  66. 5 0
      src/views/setting/notice/list.vue
  67. 5 0
      src/views/setting/noticeManagement/list.vue
  68. 5 0
      src/views/supplierManagement/associatedProductDetails/list.vue
  69. 5 0
      src/views/supplierManagement/supplierInfo/list.vue

文件差异内容过多而无法显示
+ 359 - 99
package-lock.json


+ 3 - 0
package.json

@@ -34,9 +34,11 @@
     "vue-cookies": "^1.6.1",
     "vue-cropper": "0.4.9",
     "vue-ls": "^3.2.1",
+    "vue-piczoom": "^1.0.6",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "^3.1.2",
     "vue-svg-component-runtime": "^1.0.1",
+    "vue2.0-zoom": "^2.1.1",
     "vuex": "^3.1.1",
     "wangeditor": "^3.1.1"
   },
@@ -61,6 +63,7 @@
     "less-loader": "4.1.0",
     "opencollective": "^1.0.3",
     "opencollective-postinstall": "^2.0.2",
+    "postcss-url": "^10.1.3",
     "vue-svg-icon-loader": "^2.1.1",
     "vue-template-compiler": "^2.6.10",
     "webpack-theme-color-replacer": "^1.2.17"

+ 28 - 0
src/api/reportData.js

@@ -307,3 +307,31 @@ export const reportStockPutDetailExport = (params) => {
     responseType: 'blob'
   })
 }
+//  销售交单报表
+export const reportDispatchReportList = (params) => {
+  const url = `/report/dispatchReport/xsjd/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+//  销售交单报表  合计
+export const reportDispatchReportCount = (params) => {
+  return axios({
+    url: '/report/dispatchReport/xsjd/total',
+    data: params,
+    method: 'post'
+  })
+}
+// 销售交单报表 导出
+export const reportDispatchReportExport = (params) => {
+  return axios({
+    url: '/report/dispatchReport/xsjd/export',
+    data: params,
+    method: 'post',
+    responseType: 'blob'
+  })
+}

+ 34 - 0
src/api/salesDetail.js

@@ -159,3 +159,37 @@ export const salesDetailPromoProductList = (params) => {
     method: 'post'
   })
 }
+// 销售 下载模板
+export const salesDownload = params => {
+  return axios.request({
+    url: `/sales/detail/downloadExcel`,
+    method: 'post',
+    responseType: 'blob'
+  })
+}
+// 销售  解析导入的文件
+export const salesParseProducts = params => {
+  return axios({
+    url: '/sales/detail/parseProducts',
+    data: params,
+    method: 'post'
+  })
+}
+// 销售  批量插入
+export const salesBatchInsert = params => {
+  return axios({
+    url: '/sales/detail/batchInsert',
+    data: params,
+    method: 'post'
+  })
+}
+//  销售 导入产品 导出错误项
+export const salesFailExcel = (params) => {
+  const url = `/sales/detail/downloadFailExcel`
+  return axios.request({
+    url: url,
+    method: 'post',
+    data: params.list,
+    responseType: 'blob'
+  })
+}

+ 34 - 0
src/api/spareParts.js

@@ -85,3 +85,37 @@ export const sparePartsDetailD = (params) => {
     method: 'post'
   })
 }
+// 散件入库 下载模板
+export const sparePartsDetailDownload = params => {
+  return axios.request({
+    url: `/spareParts/detail/downloadExcel`,
+    method: 'post',
+    responseType: 'blob'
+  })
+}
+// 散件入库  解析导入的文件
+export const sparePartsDetailParseProducts = params => {
+  return axios({
+    url: '/spareParts/detail/parseProducts',
+    data: params,
+    method: 'post'
+  })
+}
+// 散件入库  批量插入
+export const sparePartsDetailBatchInsert = params => {
+  return axios({
+    url: '/spareParts/detail/batchInsert',
+    data: params,
+    method: 'post'
+  })
+}
+//  散件入库 导入产品 导出错误项
+export const sparePartsDetailFailExcel = (params) => {
+  const url = `/spareParts/detail/downloadFailExcel`
+  return axios.request({
+    url: url,
+    method: 'post',
+    data: params.list,
+    responseType: 'blob'
+  })
+}

+ 73 - 34
src/components/MultiTab/MultiTab.vue

@@ -5,10 +5,10 @@ export default {
   name: 'MultiTab',
   data () {
     return {
-      fullPathList: [],
-      tabsList: [],
-      pages: [],
-      activeKey: '',
+      pagesRecordList: [], // 记录打开过的页面
+      tabsList: [], // 已打开页签
+      pages: [], // 已打开页面
+      activeKey: '', // 当前页面
       newTabIndex: 0,
       maxTabNums: 10
     }
@@ -36,9 +36,11 @@ export default {
       } catch (e) {
       }
     })
+    console.log('rename')
     if (this.pages.length <= this.maxTabNums) {
       this.pages.push(this.$route)
       this.tabsList.push(this.$route.name)
+      this.pagesRecordList.push(this.$route.name)
       this.selectedLastPath()
     }
   },
@@ -68,6 +70,11 @@ export default {
     selectedLastPath () {
       this.activeKey = this.tabsList[this.tabsList.length - 1]
     },
+    replaceTab (newtab, oldtab) {
+      const index = this.pages.findIndex(item => item.name == oldtab.name)
+      this.pages.splice(index, 1, newtab)
+      this.tabsList.splice(index, 1, newtab.name)
+    },
     // content menu
     refashThat (e) {
       this.reloadView()
@@ -145,48 +152,80 @@ export default {
   },
   watch: {
     '$route': function (newVal, oldVal) {
-      // 父页面(列表)进入子页面(编辑、详情)再返回至父页面时关闭子页面页签   子页面点击“返回列表”
-      if (oldVal && oldVal.name && newVal.query.closeLastOldTab) {
-        if (oldVal.name.indexOf('List') == -1) { // 要关闭的页面不能是列表页
-          this.remove(oldVal.name) // 关闭子页面
-        }
-      }
-      const index = this.tabsList.indexOf(newVal.name)
+      if (newVal.name == oldVal.name) { return }
+      // console.log(newVal, oldVal, this.pages)
       // 解决页面地址相同参数不同时打开多个页签问题(例 详情页id或sn不同时)
+      const index = this.tabsList.indexOf(newVal.name)
+
+      // 是否时同一个父级菜单下的页面
+      const mnlen = newVal.matched.length < 3
+      const newMatched = newVal.matched[mnlen ? 1 : 2]
+
+      // 是否已存在同级菜单
+      const hasEqChild = this.pages.find(item => {
+        const alen = item.matched.length < 3
+        return item.matched[alen ? 1 : 2].name == newMatched.name
+      })
+      // console.log(hasEqChild, 'hasEqChild')
+      const oldMenu = hasEqChild || oldVal
+      const molen = oldMenu.matched.length < 3
+      const oldMatched = oldMenu.matched[molen ? 1 : 2]
+      const hasChildren = newMatched.name == oldMatched.name
+
       if (index < 0) { // 不存在
-        console.log(this.pages.length, '不存在')
-        if (this.pages.length < this.maxTabNums) {
-          this.tabsList.push(newVal.name)
-          this.pages.push(newVal)
-          this.$store.state.app.isNewTab = true
+        // console.log(1, hasChildren, '不存在')
+        // 判断是否是新增,编辑,详情页
+        const na = newVal.meta.title.indexOf('详情') >= 0
+        const nb = newVal.meta.title.indexOf('新增') >= 0
+        const nc = newVal.meta.title.indexOf('编辑') >= 0
+        const nxt = newVal.meta.title.indexOf('下推销售单') >= 0
+        const oa = oldMenu.meta.title.indexOf('详情') >= 0
+        const ob = oldMenu.meta.title.indexOf('新增') >= 0
+        const oc = oldMenu.meta.title.indexOf('编辑') >= 0
+        const oxt = oldMenu.meta.title.indexOf('下推销售单') >= 0
+        if ((na || nb || nc || nxt || oa || ob || oc || oxt) && hasChildren) {
+          // 替换当前页签
+          this.replaceTab(newVal, oldMenu)
+          // 从列表打开新增,编辑
+          this.$store.state.app.isNewTab = na || nb || nc
+          // 从编辑,新增返回列表,刷新列表
+          this.$store.state.app.updateList = ob || oc
           this.activeKey = newVal.name
         } else {
-          // this.$message.info('您当前打开窗口太多,请关闭一些,窗口不能超过' + this.maxTabNums + '个')
-          // this.$router.go(-1)
-          const _this = this
-          this.$warning({
-            title: '提示',
-            content: '您当前打开窗口太多,请关闭一些,窗口不能超过' + this.maxTabNums + '个',
-            onOk () {
-              _this.$router.go(-1)
-            }
-          })
+          // 新打开的页签
+          if (this.pages.length < this.maxTabNums) {
+            this.tabsList.push(newVal.name)
+            this.pages.push(newVal)
+            this.pagesRecordList.push(newVal.name)
+            this.$store.state.app.isNewTab = true
+            this.$store.state.app.updateList = false
+            this.activeKey = newVal.name
+          } else {
+            // this.$message.info('您当前打开窗口太多,请关闭一些,窗口不能超过' + this.maxTabNums + '个')
+            const _this = this
+            this.$warning({
+              title: '提示',
+              content: '您当前打开窗口太多,请关闭一些,窗口不能超过' + this.maxTabNums + '个',
+              onOk () {}
+            })
+            _this.$router.go(-1)
+          }
         }
       } else { // 已存在
-        console.log(this.pages.length, '已存在')
         this.pages.splice(index, 1, newVal)
+        this.tabsList.splice(index, 1, newVal.name)
         this.$store.state.app.isNewTab = false
+        if (hasEqChild) {
+          this.$store.state.app.updateList = hasEqChild.name == oldVal.name
+        }
+        // console.log(1, this.$store.state.app.updateList, '已存在')
         this.activeKey = newVal.name
       }
     },
     activeKey: function (newPathKey) {
-      const row = this.pages.find(item => item.name == newPathKey)
-      if (row.fullPath.indexOf('/list') == -1) {
-        this.$router.push({ path: row.fullPath })
-      } else {
-        // this.$router.push({ path: row.fullPath, query: { closeLastOldTab: true } })  //  需求:切换页签需关掉子页面
-        this.$router.push({ path: row.path }) //  需求:切换页签不需关掉子页面
-      }
+      console.log('-----' + newPathKey)
+      const pages = this.pages.find(item => item.name == newPathKey)
+      this.$router.push({ name: newPathKey, params: pages.params, query: pages.query })
     }
   },
   render () {

+ 3 - 3
src/components/global.less

@@ -105,7 +105,7 @@ body {
         .header-index-left {
           flex: 1 1 1000px;
           .logo{
-            margin:0 25px;
+            margin:0 5px;
           }
           .ant-menu.ant-menu-horizontal{
             max-width: calc(100vw - 160px - 238px - 25px);
@@ -317,8 +317,8 @@ body {
             color: #fff;
             display: inline-block;
             vertical-align: top;
-            font-size: 16px;
-            margin: 0 0 0 12px;
+            font-size: 12px;
+            margin: 0 0 0 3px;
             font-weight: 400;
           }
         }

+ 16 - 0
src/components/index.less

@@ -294,6 +294,22 @@
     }
   }
 }
+.top-nav-header-index{
+  .ant-menu{
+    .ant-menu-item, .ant-menu-submenu-title{
+      padding: 0 10px;
+    }
+  }
+}
+.ant-menu-submenu{
+  .ant-menu{
+    li{
+      height: 30px;
+      line-height: 30px;
+      margin: 5px 0 3px;
+    }
+  }
+}
 // 内容盒子样式
 .content {
   .table-operator {

+ 26 - 1
src/config/router.config.js

@@ -142,7 +142,7 @@ export const asyncRouterMap = [
                 name: 'waitDispatch',
                 component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/salesManagement/waitDispatch/edit.vue'),
                 meta: {
-                  title: '下推',
+                  title: '下推销售单',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesNew'
@@ -1175,6 +1175,31 @@ export const asyncRouterMap = [
               }
             ]
           },
+          {
+            path: '/reportData/salesPresentation',
+            redirect: '/reportData/salesPresentation/list',
+            name: 'salesPresentation',
+            component: BlankLayout,
+            meta: {
+              title: '销售交单报表',
+              icon: 'profile',
+              permission: 'M_salesPresentationList'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'salesPresentationList',
+                component: () => import(/* webpackChunkName: "reportData" */ '@/views/reportData/salesPresentation/list.vue'),
+                meta: {
+                  title: '销售交单报表列表',
+                  icon: 'profile',
+                  hidden: true,
+                  permission: 'M_salesPresentationList'
+                }
+              }
+            ]
+          },
           {
             path: '/reportData/provinceTypeSalesDetails',
             redirect: '/reportData/provinceTypeSalesDetails/list',

+ 2 - 2
src/layouts/BasicLayout.vue

@@ -39,7 +39,7 @@
         @toggle="toggle"
       />
       <!-- layout content -->
-      <a-layout-content :style="{ height: '100%', margin: '31px 20px 0', paddingTop: multiTab&&fixedHeader ? '61px' : (!multiTab&&fixedHeader?'45px':'0') }">
+      <a-layout-content :style="{ height: '100%', margin: '31px 20px 0', paddingTop: multiTab&&fixedHeader ? '61px' : (!multiTab&&fixedHeader?'33px':'0') }">
         <transition name="page-transition">
           <route-view v-if="isRouterAlive"/>
         </transition>
@@ -101,7 +101,7 @@ export default {
       fixedHeader: state => state.app.fixedHeader
     }),
     contentPaddingLeft () {
-      if (!this.fixSidebar || this.isMobile()) {
+      if (!this.fixSidebar || this.isMobile() || this.layoutMode == 'topmenu') {
         return '0'
       }
       if (this.sidebarOpened) {

+ 2 - 1
src/store/modules/app.js

@@ -26,7 +26,8 @@ const app = {
     weak: false,
     multiTab: true,
     isNewTab: false,
-    isNewSubTab: false
+    isNewSubTab: false,
+    updateList: false
   },
   mutations: {
     SET_SIDEBAR_TYPE: (state, type) => {

+ 8 - 3
src/views/allocationManagement/transferOut/list.vue

@@ -170,17 +170,17 @@ export default {
       const arr = [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '8.5%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '调拨单号', scopedSlots: { customRender: 'allocateNo' }, align: 'center',width: '15%', },
+        { title: '调拨单号', scopedSlots: { customRender: 'allocateNo' }, align: 'center', width: '15%' },
         { title: '调往对象', dataIndex: 'targetName', width: '10%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '客户类型', dataIndex: 'dealerLevelDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '总数量', dataIndex: 'totalQty', width: '5%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '总售价', dataIndex: 'totalPrice', width: '5%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '审核时间', dataIndex: 'auditTime', width: '8.5%',align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '审核时间', dataIndex: 'auditTime', width: '8.5%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '调拨类型', dataIndex: 'allocateTypeName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '业务状态', dataIndex: 'stateDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '打印状态', dataIndex: 'printStateDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '打印次数', dataIndex: 'printCount', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '操作', scopedSlots: { customRender: 'action' },width: '9%', align: 'center', }
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '9%', align: 'center' }
       ]
       if (this.$hasPermissions('B_isShowCost')) {
         arr.splice(6, 0, { title: '总成本', dataIndex: 'totalCost', width: '5%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
@@ -304,6 +304,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/basicData/transferTypeManagement/list.vue

@@ -61,7 +61,7 @@ export default {
         { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '调拨类别', dataIndex: 'allocateCategoryDictValue', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '调拨类型名称', dataIndex: 'name', align: 'center', width: '40%',customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '调拨类型名称', dataIndex: 'name', align: 'center', width: '40%', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -139,6 +139,11 @@ export default {
       this.$refs.table.refresh(true)
       this.pageInit()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+      this.pageInit()
+    }
   }
 }
 </script>

+ 5 - 0
src/views/basicData/warehouse/list.vue

@@ -175,6 +175,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+      this.pageInit()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 8 - 3
src/views/basicData/warehouse/storingLocation/list.vue

@@ -83,9 +83,9 @@ export default {
       },
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
-        { title: '序号', dataIndex: 'no', width:'10%', align: 'center' },
-        { title: '仓位名称', dataIndex: 'name', align: 'center', width:'45%',customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width:'45%', align: 'center' }
+        { title: '序号', dataIndex: 'no', width: '10%', align: 'center' },
+        { title: '仓位名称', dataIndex: 'name', align: 'center', width: '45%', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '45%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
@@ -185,6 +185,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 8 - 3
src/views/dealerManagement/dealerAccountManagement/list.vue

@@ -109,12 +109,12 @@ export default {
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
-        { title: '创建时间', dataIndex: 'createDate',width: '11%', align: 'center' },
-        { title: '经销商名称', dataIndex: 'org.name', width: '25%',align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '创建时间', dataIndex: 'createDate', width: '11%', align: 'center' },
+        { title: '经销商名称', dataIndex: 'org.name', width: '25%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '管理员姓名', dataIndex: 'name', width: '14%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '管理员账号', dataIndex: 'loginName', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '授权用户数', dataIndex: 'org.childUserMaxNum', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '状态', scopedSlots: { customRender: 'loginFlag' },width: '9%', align: 'center' },
+        { title: '状态', scopedSlots: { customRender: 'loginFlag' }, width: '9%', align: 'center' },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -232,6 +232,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+      this.pageInit()
+    }
   }
 }
 </script>

+ 5 - 0
src/views/dealerManagement/dealerRelationshipBinding/list.vue

@@ -250,6 +250,11 @@ export default {
       this.tableHeight = window.innerHeight - 290
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.tableHeight = window.innerHeight - 290
+      this.resetSearchForm(true)
+    }
   }
 }
 </script>

+ 5 - 0
src/views/dealerManagement/marketingDivisionSet/list.vue

@@ -152,6 +152,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/dealerManagement/merchantInfoManagement/list.vue

@@ -292,6 +292,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+      this.pageInit()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/dealerManagement/rebateSettings/list.vue

@@ -151,6 +151,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 7 - 2
src/views/financialManagement/financialCollection/list.vue

@@ -180,7 +180,7 @@ export default {
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '审核时间', dataIndex: 'auditDate', width: '11.5%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '销售单号', scopedSlots: { customRender: 'salesBillNo' }, width: '15%', align: 'center' },
-        { title: '经销商名称', dataIndex: 'buyerName', align: 'center', width: '12%',customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '经销商名称', dataIndex: 'buyerName', align: 'center', width: '12%', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '商户级别', dataIndex: 'dealerEntity.dealerLevelDictValue', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '销售数量', dataIndex: 'totalQty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '订单金额', dataIndex: 'totalAmount', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
@@ -188,7 +188,7 @@ export default {
         { title: '收款方式', dataIndex: 'settleStyleSnDictValue', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '备注', dataIndex: 'remarks', width: '8%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '业务状态', dataIndex: 'billStatusDictValue', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '财务状态', dataIndex: 'financialStatusDictValue', width: '5%',align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '财务状态', dataIndex: 'financialStatusDictValue', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '4%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -350,6 +350,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/financialManagement/returnConfirmation/list.vue

@@ -116,7 +116,7 @@ export default {
         { title: '创建时间', dataIndex: 'createDate', width: '11%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '单据来源', dataIndex: 'salesReturnBillSourceDictValue', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '总部销退单号', scopedSlots: { customRender: 'salesReturnBillNo' }, width: '16%', align: 'center' },
-        { title: '退货客户', dataIndex: 'buyerName', align: 'center',width: '15%', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '退货客户', dataIndex: 'buyerName', align: 'center', width: '15%', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '退货数量', dataIndex: 'totalQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '退货金额', dataIndex: 'totalAmount', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '是否抓单', dataIndex: 'grabFlagDictValue', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -239,6 +239,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/financialManagement/warehousingConfirmation/list.vue

@@ -264,6 +264,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/inventoryManagement/intelligentReplenishment/list.vue

@@ -76,7 +76,7 @@ export default {
         { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '创建人', dataIndex: 'creatorName', width: '45%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '状态', dataIndex: 'stateDictValue',  width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', dataIndex: 'stateDictValue', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '20%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -202,6 +202,11 @@ export default {
       this.pageInit()
       this.$refs.table.refresh(true)
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 12 - 7
src/views/inventoryManagement/inventoryQuery/list.vue

@@ -24,7 +24,7 @@
               <a-col :md="6" :sm="24">
                 <a-form-item label="产品品牌">
                   <ProductBrand id="inventoryQueryList-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
-                  </a-form-item>
+                </a-form-item>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -124,7 +124,7 @@ import { hdExportExcel } from '@/libs/exportExcel'
 import ProductBrand from '@/views/common/productBrand.js'
 import { stockList, stockCount, stockExport } from '@/api/stock'
 export default {
-  components: { STable, VSelect, inventoryQueryDetailModal, exportExcelModal,ProductBrand },
+  components: { STable, VSelect, inventoryQueryDetailModal, exportExcelModal, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -199,16 +199,16 @@ export default {
     columns () {
       const arr = [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
-        { title: '产品编码', dataIndex: 'productCode',width: '9%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'productName',width: '21%', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
-        { title: '最后入库时间', dataIndex: 'lastStockTime',width: '11%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'productCode', width: '9%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: '21%', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '最后入库时间', dataIndex: 'lastStockTime', width: '11%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '单位', dataIndex: 'productUnit', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '产品品牌', dataIndex: 'productBrandName', width: '14%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '可用库存数量', dataIndex: 'currentStockQty', width: '10%', align: 'center', sorter: true, customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: '16%',align: 'center' }
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '16%', align: 'center' }
       ]
       if (this.$hasPermissions('B_isShowCost')) {
-        arr.splice(7, 0, { title: '可用库存成本', dataIndex: 'currentStockCost',width: '10%', align: 'center', sorter: true, customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+        arr.splice(7, 0, { title: '可用库存成本', dataIndex: 'currentStockCost', width: '10%', align: 'center', sorter: true, customRender: function (text) { return ((text || text == 0) ? text : '--') } })
       }
       return arr
     }
@@ -325,6 +325,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 19 - 14
src/views/inventoryManagement/inventoryWarning/list.vue

@@ -162,7 +162,7 @@ import { productTypeQuery } from '@/api/productType'
 import { stockWarnList, stockWarnSaveBatch } from '@/api/stock'
 import ProductBrand from '@/views/common/productBrand.js'
 export default {
-  components: { STable, VSelect,ProductBrand },
+  components: { STable, VSelect, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -184,20 +184,20 @@ export default {
       productTypeList: [], //  产品类别下拉数据
       productType: [],
       columns: [
-        { title: '序号', dataIndex: 'no', width:'4%', align: 'center' },
-        { title: '产品编码', dataIndex: 'productCode', width:'7%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'productName', width:'12.5%', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
-        { title: '原厂编码', dataIndex: 'productOrigCode', width:'7%',  align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品品牌', dataIndex: 'productBrandName', width:'6%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品分类', scopedSlots: { customRender: 'productType' }, width:'10%', align: 'center' },
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: '12.5%', align: 'center', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '原厂编码', dataIndex: 'productOrigCode', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品品牌', dataIndex: 'productBrandName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品分类', scopedSlots: { customRender: 'productType' }, width: '10%', align: 'center' },
         // { title: '实时库存数(个)', scopedSlots: { customRender: 'stockQty' }, width: 110, align: 'center' },
-        { title: '在途数(个)', scopedSlots: { customRender: 'inTransit' }, width:'9.5%', align: 'center' },
-        { title: '总库存数(个)', dataIndex: 'currentStockQty', width:'7%',  align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '最大库存数(个)', scopedSlots: { customRender: 'upperLimit' }, width:'9.5%',  align: 'center' },
-        { title: '最小库存数(个)', scopedSlots: { customRender: 'lowerLimit' }, width:'9.5%',  align: 'center' },
-        { title: '差异数量', dataIndex: 'differenceNum', width:'6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '预警提示', scopedSlots: { customRender: 'stockState' },width:'6%',  align: 'center' },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width:'6%',  align: 'center' }
+        { title: '在途数(个)', scopedSlots: { customRender: 'inTransit' }, width: '9.5%', align: 'center' },
+        { title: '总库存数(个)', dataIndex: 'currentStockQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '最大库存数(个)', scopedSlots: { customRender: 'upperLimit' }, width: '9.5%', align: 'center' },
+        { title: '最小库存数(个)', scopedSlots: { customRender: 'lowerLimit' }, width: '9.5%', align: 'center' },
+        { title: '差异数量', dataIndex: 'differenceNum', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '预警提示', scopedSlots: { customRender: 'stockState' }, width: '6%', align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '6%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
@@ -408,6 +408,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/power/role/roleList.vue

@@ -241,6 +241,11 @@ export default {
       this.pageInit()
       this.reset()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 5 - 0
src/views/power/user/userList.vue

@@ -244,6 +244,11 @@ export default {
       this.pageInit()
       this.reset()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 53 - 8
src/views/productManagement/newProduct/detail.vue

@@ -30,11 +30,16 @@
             </div>
           </div>
         </div>
-        <div class="productImg" v-if="detailsData && detailsData.productMsg">
-          <a-carousel arrows>
-            <div slot="prevArrow" slot-scope="props" class="custom-slick-arrow" style="left: 10px;zIndex: 1"><a-icon type="left-circle" /></div>
-            <div slot="nextArrow" slot-scope="props" class="custom-slick-arrow" style="right: 10px"><a-icon type="right-circle" /></div>
-            <div><img :src="detailsData.productMsg" /></div>
+        <div class="productImg" v-if="detailsData && detailsData.productPicList && detailsData.productPicList.length>0">
+          <a-carousel arrows dots-class="slick-dots slick-thumb">
+            <a slot="customPaging" slot-scope="props">
+              <img :src="detailsData.productPicList[props.i].imageUrl" />
+            </a>
+            <div slot="prevArrow" slot-scope="props" class="custom-slick-arrow" style="left: 10px;zIndex: 1"><a-icon type="left-circle" style="color: #314659;" /></div>
+            <div slot="nextArrow" slot-scope="props" class="custom-slick-arrow" style="right: 10px"><a-icon type="right-circle" style="color: #314659;" /></div>
+            <div v-for="(item, index) in detailsData.productPicList" :key="index">
+              <img-zoom :src="item.imageUrl" width="100%" height="100%" :bigsrc="item.imageUrl" :configs="configs"></img-zoom>
+            </div>
           </a-carousel>
         </div>
       </div>
@@ -43,9 +48,11 @@
 </template>
 
 <script>
+import imgZoom from 'vue2.0-zoom'
 import { productSnDetail } from '@/api/product.js'
 export default {
   name: 'ProductInfoDetail',
+  components: { imgZoom },
   computed: {
     productTypeName () {
       const productTypeName1 = this.detailsData && this.detailsData.productTypeName1 ? this.detailsData.productTypeName1 : ''
@@ -58,7 +65,15 @@ export default {
     return {
       itemId: null,
       detailsData: null, //  详情数据
-      prevPageInfo: null
+      prevPageInfo: null,
+      configs: {
+        width: 600,
+        height: 350,
+        maskWidth: 80,
+        maskHeight: 80,
+        maskColor: 'red',
+        maskOpacity: 0.2
+      }
     }
   },
   methods: {
@@ -100,11 +115,13 @@ export default {
 </script>
 
 <style lang="less">
+#_magnifier_layer{
+  left: 500px!important;
+}
 /* For demo */
 .ant-carousel .slick-slide {
   text-align: center;
   overflow: hidden;
-  border: 1px solid #eee;
   display: flex;
   justify-content: center;
   align-items: center;
@@ -126,12 +143,40 @@ export default {
   width: 100%;
   max-height: 100%;
 }
+
+.ant-carousel{
+  border: 1px solid #e8e8e8;
+}
+.ant-carousel .slick-dots {
+  height: auto;
+}
+.ant-carousel .slick-slide img {
+  border: 5px solid #fff;
+  display: block;
+  margin: auto;
+  max-width: 90%;
+}
+.ant-carousel .slick-thumb {
+  bottom: -40px;
+}
+.ant-carousel .slick-thumb li {
+  width: 40px;
+  height: 35px;
+}
+.ant-carousel .slick-thumb li img {
+  width: 100%;
+  height: 100%;
+  filter: grayscale(100%);
+}
+.ant-carousel .slick-thumb li.slick-active img {
+  filter: grayscale(0%);
+}
 .newProductDetail-back {
   margin-bottom: 10px;
 }
 .newProductDetail-modal {
   background-color: #fff;
-  padding: 15px;
+  padding: 15px 15px 55px;
   h4 {
     font-size: 18px;
   }

+ 7 - 2
src/views/productManagement/newProduct/list.vue

@@ -23,7 +23,7 @@
             <template v-if="advanced">
               <a-col :md="6" :sm="24">
                 <a-form-item label="产品品牌">
-					<ProductBrand id="productInfoList-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
+                  <ProductBrand id="productInfoList-productBrandSn" v-model="queryParam.productBrandSn"></ProductBrand>
                 </a-form-item>
               </a-col>
               <a-col :md="6" :sm="24">
@@ -104,7 +104,7 @@ import { STable, VSelect } from '@/components'
 import ProductBrand from '@/views/common/productBrand.js'
 import rangeDate from '@/views/common/rangeDate.vue'
 export default {
-  components: { STable, VSelect, rangeDate,ProductBrand },
+  components: { STable, VSelect, rangeDate, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -242,6 +242,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/productManagement/priceChangeRecord/list.vue

@@ -117,7 +117,7 @@ import { productTypeQuery } from '@/api/productType'
 import ProductBrand from '@/views/common/productBrand.js'
 import { productPriceChangeList, productPriceChangeExport } from '@/api/product'
 export default {
-  components: { STable, VSelect, rangeDate,ProductBrand },
+  components: { STable, VSelect, rangeDate, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -351,6 +351,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/productManagement/productBrand/list.vue

@@ -224,6 +224,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 6 - 2
src/views/productManagement/productCategory/list.vue

@@ -68,8 +68,8 @@ export default {
         wrapperCol: { span: 16 }
       },
       columns: [
-        { title: '分类名称', dataIndex: 'productTypeName', align: 'left',width: '45%', },
-        { title: '创建时间', dataIndex: 'createDate', width:'25%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '分类名称', dataIndex: 'productTypeName', align: 'left', width: '45%' },
+        { title: '创建时间', dataIndex: 'createDate', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '30%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -169,6 +169,10 @@ export default {
     if (this.$store.state.app.isNewTab) {
       this.$refs.table.refresh(true)
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 10 - 5
src/views/productManagement/productInfo/list.vue

@@ -192,7 +192,7 @@ import { productTypeQueryAll } from '@/api/productType'
 import ProductBrand from '@/views/common/productBrand.js'
 import { productList, productAudit, productBatchAudit, productDel, productOnline, productBatchOnline, productExport } from '@/api/product'
 export default {
-  components: { STable, VSelect, productInfoDetailModal, productInfoOfflineModal,ProductBrand },
+  components: { STable, VSelect, productInfoDetailModal, productInfoOfflineModal, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -213,17 +213,17 @@ export default {
       exportLoading: false,
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
-        { title: '创建时间', dataIndex: 'createDate',width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'name', align: 'center',width: '17%', ellipsis: true, customRender: function (text) { return text || '--' } },
+        { title: '创建时间', dataIndex: 'createDate', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'name', align: 'center', width: '17%', ellipsis: true, customRender: function (text) { return text || '--' } },
         { title: '产品编码', dataIndex: 'code', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '原厂编码', dataIndex: 'origCode', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '品牌', dataIndex: 'productBrandName', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '产品分类', scopedSlots: { customRender: 'productType' }, width: '10%', align: 'center' },
         { slots: { title: 'arrowFalgTitle' }, scopedSlots: { customRender: 'arrowFalg' }, width: '6%', align: 'center' },
         { title: '最近修改时间', dataIndex: 'updateDate', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品状态', dataIndex: 'stateDictValue',width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品状态', dataIndex: 'stateDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '定价状态', dataIndex: 'pricingStateDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'center', }
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'center' }
       ],
       selectedRowKeys: [], // Check here to configure the default column
       selectedRows: [],
@@ -596,6 +596,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/productManagement/productLaunchAudit/list.vue

@@ -89,7 +89,7 @@ export default {
       tableHeight: 0,
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
-        { title: '产品名称', dataIndex: 'name', align: 'center',width: '20%',  customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '产品名称', dataIndex: 'name', align: 'center', width: '20%', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '产品编码', dataIndex: 'code', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '产品分类', scopedSlots: { customRender: 'productType' }, width: '15%', align: 'center' },
         { title: '提交时间', dataIndex: 'onlineSubmitTime', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -221,6 +221,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 5 - 0
src/views/productManagement/productLevel/list.vue

@@ -261,6 +261,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/productManagement/productOfflineAudit/list.vue

@@ -310,6 +310,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/productManagement/productPricing/list.vue

@@ -283,6 +283,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/productManagement/productUniversal/list.vue

@@ -247,6 +247,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/promotionRulesManagement/orderStatistics/list.vue

@@ -245,6 +245,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 6 - 1
src/views/promotionRulesManagement/productStatistics/list.vue

@@ -99,7 +99,7 @@ import { productTypeQuery } from '@/api/productType'
 import ProductBrand from '@/views/common/productBrand.js'
 import { salesDetailPromoList, salesDetailPromoCount } from '@/api/salesDetail'
 export default {
-  components: { STable, VSelect, productStatisticsDetailModal, rangeDate,ProductBrand },
+  components: { STable, VSelect, productStatisticsDetailModal, rangeDate, ProductBrand },
   data () {
     return {
       spinning: false,
@@ -256,6 +256,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/promotionRulesManagement/promotionRules/list.vue

@@ -228,6 +228,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 193 - 0
src/views/purchasingManagement/bulkWarehousingOrder/chooseImportModal.vue

@@ -0,0 +1,193 @@
+<template>
+  <a-modal
+    centered
+    class="chooseImport-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="导入"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="900">
+    <div class="chooseImport-con">
+      <!-- 可导入数据 -->
+      <p class="">可导入数据{{ loadData.length }}条</p>
+      <a-table
+        class="sTable"
+        ref="table"
+        size="small"
+        :rowKey="(record) => record.allocateSn"
+        :columns="nowColumns"
+        :dataSource="loadData"
+        :loading="loading"
+        :scroll="{ y: 200 }"
+        :pagination="false"
+        bordered>
+      </a-table>
+      <a-divider />
+      <!-- 不可导入数据 -->
+      <p class="red">不可导入数据{{ unLoadData.length }}条</p>
+      <a-table
+        class="unTable"
+        ref="unTable"
+        size="small"
+        :rowKey="(record) => record.errorDesc"
+        :columns="nowUnColumns"
+        :dataSource="unLoadData"
+        :loading="loading"
+        :scroll="{ y: 200 }"
+        :pagination="false"
+        bordered>
+      </a-table>
+      <!-- 按钮 -->
+      <div class="btn-con">
+        <a-button
+          type="primary"
+          id="chooseImport-submit"
+          size="large"
+          :class="loadData.length==0?'button-grey':'button-primary'"
+          @click="handleSubmit"
+          style="padding: 0 40px;">确认导入</a-button>
+        <a-button
+          id="chooseImport-cancel"
+          size="large"
+          class="button-cancel"
+          @click="isShow=false"
+          style="padding: 0 40px;margin-left: 15px;">取消</a-button>
+        <a-button
+          type="primary"
+          id="chooseImport-error"
+          size="large"
+          class="button-error"
+          @click="handleError"
+          style="padding: 0 40px;margin-left: 15px;">导出错误项</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { hdExportExcel } from '@/libs/exportExcel'
+import { sparePartsDetailParseProducts, sparePartsDetailFailExcel } from '@/api/spareParts'
+export default {
+  name: 'ChooseImportModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    paramsData: {
+      type: Object,
+      default: () => {
+        return {}
+      }
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      nowColumns: [
+        { title: '序号', dataIndex: 'no', width: '10%', align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: '30%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: '30%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '数量', dataIndex: 'qtyText', width: '15%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'unit', width: '15%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      loadData: [],
+      nowUnColumns: [
+        { title: '序号', dataIndex: 'no', width: '9%', align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: '23%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: '26%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '数量', dataIndex: 'qtyText', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'unit', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '备注', dataIndex: 'errorDesc', width: '22%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      unLoadData: [],
+      loading: false
+    }
+  },
+  methods: {
+    getData () {
+      const _this = this
+      this.loading = true
+      const params = {
+        sparePartsSn: this.paramsData.sparePartsSn,
+        path: this.paramsData.path
+      }
+      sparePartsDetailParseProducts(params).then(res => {
+        this.loading = false
+        if (res.status == 200) {
+          if (res.data.okList && res.data.okList.length > 0) {
+            res.data.okList.map((item, index) => {
+              item.no = index + 1
+            })
+          }
+          if (res.data.failList && res.data.failList.length > 0) {
+            res.data.failList.map((item, index) => {
+              item.no = index + 1
+            })
+          }
+          _this.loadData = res.data.okList || []
+          _this.unLoadData = res.data.failList || []
+        }
+      })
+    },
+    // 确认导入
+    handleSubmit () {
+      if (this.loadData.length == 0) {
+        this.$message.warning('无可导入产品!')
+      } else {
+        this.$emit('ok', this.loadData)
+        this.isShow = false
+      }
+    },
+    // 导出
+    handleError () {
+      const _this = this
+      if (_this.unLoadData.length < 1) {
+        _this.$message.info('暂无可导出错误项~')
+        return
+      }
+      _this.spinning = true
+      const params = {
+        list: _this.unLoadData
+      }
+      hdExportExcel(sparePartsDetailFailExcel, params, '产品导入错误项', function () {
+        _this.spinning = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.loadData = []
+        this.unLoadData = []
+      } else {
+        this.getData()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .chooseImport-modal{
+    .chooseImport-con{
+      .red{
+        color: #f30;
+      }
+      .btn-con{
+        text-align: center;
+        margin: 30px 0 20px;
+        .button-cancel,.button-error{
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>

+ 21 - 8
src/views/purchasingManagement/bulkWarehousingOrder/edit.vue

@@ -26,7 +26,8 @@
       <a-card size="small" :bordered="false" class="bulkWarehousingOrderEdit-cont">
         <!-- 操作按钮 -->
         <div class="table-operator">
-          <a-button id="bulkWarehousingOrderEdit-add" type="primary" class="button-error" @click="handleEdit()">新增产品</a-button>
+          <a-button id="bulkWarehousingOrderEdit-add" type="primary" class="button-primary" @click="handleEdit()">新增产品</a-button>
+          <a-button id="bulkWarehousingOrderEdit-import" type="primary" class="button-primary" @click="openGuideModal=true">导入产品</a-button>
         </div>
         <!-- 总计 -->
         <a-alert type="info" v-if="productTotal" style="margin-bottom:10px">
@@ -74,6 +75,8 @@
         style="padding: 0 60px;">保存并返回</a-button>
     </div>
     <spare-parts-product-modal :openModal="openModal" :itemSn="itemSn" :nowData="productTotal" @ok="$refs.table.refresh(true)" @close="closeModal" />
+    <!-- 导入产品 -->
+    <importGuideModal :openModal="openGuideModal" :params="{sparePartsSn: $route.params.sn}" @close="openGuideModal=false" @ok="hanldeOk" />
   </div>
 </template>
 
@@ -81,21 +84,22 @@
 import { STable, VSelect } from '@/components'
 import { getOperationalPrecision } from '@/libs/tools.js'
 import sparePartsProductModal from './productModal.vue'
-import { sparePartsDetailList, sparePartsPageCount, sparePartsDeleteDetail } from '@/api/spareParts'
+import ImportGuideModal from './importGuideModal.vue'
+import { sparePartsDetailList, sparePartsPageCount, sparePartsDeleteDetail, sparePartsDetailBatchInsert } from '@/api/spareParts'
 export default {
-  components: { STable, VSelect, sparePartsProductModal },
+  components: { STable, VSelect, sparePartsProductModal, ImportGuideModal },
   data () {
     return {
       spinning: false,
       // 表头
       columns: [
         { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
-        { title: '产品编码', dataIndex: 'productCode',width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'productName',width: '25%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '产品编码', dataIndex: 'productCode', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productName', width: '25%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '单位', dataIndex: 'unit', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '入库数量', dataIndex: 'productQty', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '入库单价', dataIndex: 'productCost',width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '小计', dataIndex: 'subtotal',width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '入库单价', dataIndex: 'productCost', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '小计', dataIndex: 'subtotal', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '操作', scopedSlots: { customRender: 'action' }, width: '10%', align: 'center' }
       ],
       // 加载数据方法 必须为 Promise 对象
@@ -115,7 +119,8 @@ export default {
       openModal: false, // 选择基本信息弹框是否显示
       basicInfoData: null, //  基本信息
       productTotal: null, //  合计
-      itemSn: ''
+      itemSn: '',
+      openGuideModal: false //  导入产品引导
     }
   },
   methods: {
@@ -150,6 +155,14 @@ export default {
         }
       })
     },
+    // 导入产品
+    hanldeOk (obj) {
+      sparePartsDetailBatchInsert(obj).then(res => {
+        if (res.status == 200) {
+          this.$refs.table.refresh(true)
+        }
+      })
+    },
     //  返回列表
     handleBack () {
       this.$router.push({ path: '/purchasingManagement/bulkWarehousingOrder/list', query: { closeLastOldTab: true } })

+ 199 - 0
src/views/purchasingManagement/bulkWarehousingOrder/importGuideModal.vue

@@ -0,0 +1,199 @@
+<template>
+  <a-modal
+    centered
+    class="importGuide-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="导入"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="750">
+    <div class="importGuide-con">
+      <div class="explain-con">
+        <div class="explain-item">
+          <div class="explain-tit">
+            <span>1</span>准备导入
+          </div>
+          <ul>
+            <li>1) 导入的Excel文件中必须包含名为“产品编码”、“数量”的列,且名称必须相同</li>
+            <li>2) 除了“产品编码”、“数量”两列,其他列可自定义,不影响数据导入</li>
+            <li>3) 如果导入的产品已经存在,则不会导入该行</li>
+          </ul>
+          <a-button type="link" icon="download" style="padding: 0 0 0 23px;" @click="handleExport">下载导入模板</a-button>
+        </div>
+        <div class="explain-item">
+          <div class="explain-tit">
+            <span>2</span>上传数据文件
+          </div>
+          <p>目前支持的文件类型*.xls,*.xlsx.</p>
+          <div style="overflow: hidden;padding-left: 23px;">
+            <Upload
+              id="importGuide-attachList"
+              ref="importUpload"
+              :maxNums="1"
+              fileType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
+              uploadType="import"
+              :action="attachAction"
+              :uploadParams="uploadParams"
+              upText="添加文件"
+              @change="changeImport"></Upload>
+          </div>
+        </div>
+      </div>
+      <!-- 按钮 -->
+      <div class="btn-con">
+        <a-button
+          type="primary"
+          id="importGuide-nextStep"
+          size="large"
+          class="button-primary"
+          @click="handlerNextStep"
+          style="padding: 0 60px;">下一步</a-button>
+        <a-button
+          id="importGuide-cancel"
+          size="large"
+          class="button-cancel"
+          @click="isShow=false"
+          style="padding: 0 60px;margin-left: 15px;">取消</a-button>
+      </div>
+    </div>
+    <!-- 导入 -->
+    <chooseImportModal :openModal="openImportModal" :paramsData="paramsData" @close="handleClose" @ok="hanldeOk" />
+  </a-modal>
+</template>
+
+<script>
+import ChooseImportModal from './chooseImportModal.vue'
+import { Upload } from '@/components'
+import { hdExportExcel } from '@/libs/exportExcel'
+import { sparePartsDetailDownload } from '@/api/spareParts'
+export default {
+  name: 'ImportGuideModal',
+  components: { ChooseImportModal, Upload },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    params: {
+      type: Object,
+      default: null
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      openImportModal: false, //  导入
+      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload',
+      paramsData: null,
+      uploadParams: {
+        savePathType: 'local'
+      }
+    }
+  },
+  methods: {
+    // 下一步
+    handlerNextStep () {
+      if (this.paramsData) {
+        this.openImportModal = true
+      } else {
+        this.$message.warning('添加文件后再进行下一步操作!')
+      }
+    },
+    // 上传文件  change
+    changeImport (file) {
+      if (file) {
+        this.paramsData = {
+          sparePartsSn: this.params.sparePartsSn || '',
+          path: file
+        }
+      }
+    },
+    // 导入
+    hanldeOk (obj) {
+      if (obj && obj.length > 0) {
+        this.$emit('ok', obj)
+        this.isShow = false
+      }
+    },
+    // 关闭
+    handleClose () {
+      this.openImportModal = false
+      this.isShow = false
+    },
+    //  导出
+    handleExport () {
+      const _this = this
+      const params = { grabFlag: this.params.grabFlag }
+      this.exportLoading = true
+      this.spinning = true
+      hdExportExcel(sparePartsDetailDownload, params, '散件入库导入模板', function () {
+        _this.exportLoading = false
+        _this.spinning = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.paramsData = null
+        this.$refs.importUpload.setFileList('')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .importGuide-modal{
+    .importGuide-con{
+      .explain-con{
+        .explain-item{
+          margin-bottom: 10px;
+          .explain-tit{
+            font-weight: bold;
+            span{
+              display: inline-block;
+              width: 18px;
+              height: 18px;
+              line-height: 16px;
+              text-align: center;
+              margin-right: 5px;
+              border-radius: 50%;
+              border: 1px solid rgba(0, 0, 0, 0.3);
+            }
+          }
+          p{
+            margin: 8px 0;
+            padding-left: 23px;
+          }
+          ul{
+            list-style: none;
+            padding: 0;
+            padding-left: 23px;
+            margin: 0;
+            li{
+              line-height: 26px;
+            }
+          }
+        }
+        #importGuide-attachList{
+          width: 100%;
+        }
+      }
+      .btn-con{
+        margin: 10px 0 20px;
+        text-align: center;
+        .button-cancel{
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>

+ 7 - 2
src/views/purchasingManagement/bulkWarehousingOrder/list.vue

@@ -124,9 +124,9 @@ export default {
       columns: [
         { title: '创建时间', dataIndex: 'createDate', width: '7%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '入库单号', scopedSlots: { customRender: 'sparePartsNo' }, width: '15%', align: 'center' },
-        { title: '商户名称', dataIndex: 'supplierName', align: 'center',width: '15%', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '商户名称', dataIndex: 'supplierName', align: 'center', width: '15%', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '入库数量', dataIndex: 'productTotalQty', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '入库成本', dataIndex: 'productTotalCost', width: '6%',align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '入库成本', dataIndex: 'productTotalCost', width: '6%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '入库类型', dataIndex: 'sparePartsTypeDictValue', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '关联单号', dataIndex: 'relationNo', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '金蝶单号', dataIndex: 'kingdeeNo', width: '12.5%', align: 'center', customRender: function (text) { return text || '--' } },
@@ -331,6 +331,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 9 - 1
src/views/reportData/actualSalesReport/list.vue

@@ -95,7 +95,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2170 }"
+        :scroll="{ x: 2250 }"
         :defaultLoadData="false"
         bordered>
         <template slot="footer">
@@ -115,6 +115,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -275,6 +276,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 9 - 1
src/views/reportData/billingReturnReport/list.vue

@@ -95,7 +95,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2170, y: tableHeight }"
+        :scroll="{ x: 2250, y: tableHeight }"
         :defaultLoadData="false"
         bordered>
         <template slot="footer">
@@ -115,6 +115,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -277,6 +278,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 9 - 1
src/views/reportData/returnSlipReport/list.vue

@@ -100,7 +100,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2330, y: tableHeight }"
+        :scroll="{ x: 2410, y: tableHeight }"
         :defaultLoadData="false"
         bordered>
         <template slot="footer">
@@ -120,6 +120,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -284,6 +285,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 9 - 1
src/views/reportData/salesAmountReport/list.vue

@@ -96,7 +96,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2170 }"
+        :scroll="{ x: 2250 }"
         bordered>
         <template slot="footer">
           <a-row>
@@ -115,6 +115,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -275,6 +276,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 502 - 0
src/views/reportData/salesPresentation/list.vue

@@ -0,0 +1,502 @@
+<template>
+  <a-card size="small" :bordered="false" class="salesPresentationList-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 搜索条件 -->
+      <div class="table-page-search-wrapper">
+        <a-form-model
+          id="salesPresentationList-form"
+          ref="ruleForm"
+          class="form-model-con"
+          layout="inline"
+          :model="queryParam"
+          :rules="rules"
+          @keyup.enter.native="handleSearch">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-model-item label="备货销售日期" prop="time">
+                <rangeDateTime ref="rangeDate" :value="queryParam.time" @change="dateChange" />
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-model-item label="客户名称">
+                <custList id="salesPresentationList-dealerSn" ref="custList" @change="custChange"></custList>
+              </a-form-model-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-model-item label="客户级别">
+                <v-select
+                  v-model="queryParam.dealer.dealerLevel"
+                  ref="dealerLevel"
+                  id="salesPresentationList-dealerLevel"
+                  code="DEALER_LEVEL"
+                  placeholder="请选择客户级别"
+                  allowClear></v-select>
+              </a-form-model-item>
+            </a-col>
+            <template v-if="advanced">
+              <a-col :md="6" :sm="24">
+                <a-form-model-item label="销售单号">
+                  <a-input id="salesPresentationList-salesBillNo" v-model.trim="queryParam.salesBillNo" allowClear placeholder="请输入销售单号"/>
+                </a-form-model-item>
+              </a-col>
+              <a-col :md="6" :sm="24">
+                <a-form-model-item label="所在区域">
+                  <subarea id="salesPresentationList-subareaSn" v-model="queryParam.dealer.subareaSn"></subarea>
+                </a-form-model-item>
+              </a-col>
+              <a-col :md="12" :sm="24">
+                <a-row>
+                  <a-form-model-item label="地区" style="margin-bottom: 0!important;">
+                    <a-col span="7">
+                      <a-form-model-item prop="dealerProvinceSn" style="margin: 0;">
+                        <a-select v-model="queryParam.dealer.provinceSn" allowClear @change="getCityList" placeholder="请选择省">
+                          <a-select-option v-for="item in addrProvinceList" :value="item.id" :key="item.id + 'a'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="7" offset="1">
+                      <a-form-model-item prop="dealerCitySn" style="margin: 0;">
+                        <a-select v-model="queryParam.dealer.citySn" allowClear @change="getAreaList" placeholder="请选择市">
+                          <a-select-option v-for="item in addrCityList" :value="item.id" :key="item.id + 'b'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                    <a-col span="7" offset="1">
+                      <a-form-model-item prop="dealerCountySn" style="margin: 0;">
+                        <a-select v-model="queryParam.dealer.districtSn" allowClear placeholder="请选择区/县">
+                          <a-select-option v-for="item in addrDistrictList" :value="item.id" :key="item.id + 'c'">{{ item.name }}</a-select-option>
+                        </a-select>
+                      </a-form-model-item>
+                    </a-col>
+                  </a-form-model-item>
+                </a-row>
+              </a-col>
+            </template>
+            <a-col :md="6" :sm="24">
+              <a-button type="primary" @click="handleSearch" :disabled="disabled" id="salesPresentationList-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm" :disabled="disabled" id="salesPresentationList-reset">重置</a-button>
+              <a-button
+                style="margin-left: 5px"
+                type="primary"
+                class="button-warning"
+                @click="handleExport"
+                :disabled="disabled"
+                :loading="exportLoading"
+                v-if="$hasPermissions('B_salesPresentationExport')"
+                id="salesPresentationList-export">导出</a-button>
+              <a @click="advanced=!advanced" style="margin-left: 5px">
+                {{ advanced ? '收起' : '展开' }}
+                <a-icon :type="advanced ? 'up' : 'down'"/>
+              </a>
+            </a-col>
+          </a-row>
+        </a-form-model>
+      </div>
+      <!-- 列表 -->
+      <s-table
+        class="sTable"
+        ref="table"
+        size="small"
+        :defaultLoadData="false"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ x: 2370 }"
+        bordered>
+        <template slot="footer">
+          <a-row>
+            <a-col span="2">合计:</a-col>
+            <a-col span="22">
+              <a-row>
+                <a-col span="4">箭牌滤清器:{{ (totalData && (totalData.jpLqqAmount || totalData.jpLqqAmount==0)) ? totalData.jpLqqAmount : '--' }}</a-col>
+                <a-col span="4">箭牌雨刮片:{{ (totalData && (totalData.jpYgpAmount || totalData.jpYgpAmount==0)) ? totalData.jpYgpAmount : '--' }}</a-col>
+                <a-col span="4">箭牌喇叭:{{ (totalData && (totalData.jpLbAmount || totalData.jpLbAmount==0)) ? totalData.jpLbAmount : '--' }}</a-col>
+                <a-col span="4">箭牌刹车片:{{ (totalData && (totalData.jpScpAmount || totalData.jpScpAmount==0)) ? totalData.jpScpAmount : '--' }}</a-col>
+                <a-col span="4">箭牌感应线:{{ (totalData && (totalData.jpGyxAmount || totalData.jpGyxAmount==0)) ? totalData.jpGyxAmount : '--' }}</a-col>
+                <a-col span="4">冠牌滤清器:{{ (totalData && (totalData.gpLqqAmount || totalData.gpLqqAmount==0)) ? totalData.gpLqqAmount : '--' }}</a-col>
+                <a-col span="4">冠牌雨刮片:{{ (totalData && (totalData.gpYgpAmount || totalData.gpYgpAmount==0)) ? totalData.gpYgpAmount : '--' }}</a-col>
+                <a-col span="4">冠牌刹车片:{{ (totalData && (totalData.gpScpAmount || totalData.gpScpAmount==0)) ? totalData.gpScpAmount : '--' }}</a-col>
+                <a-col span="4">汇箭:{{ (totalData && (totalData.hjAmount || totalData.hjAmount==0)) ? totalData.hjAmount : '--' }}</a-col>
+                <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
+                <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
+                <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
+                <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
+                <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
+                <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
+                <a-col span="4">车仆:{{ (totalData && (totalData.cpAmount || totalData.cpAmount==0)) ? totalData.cpAmount : '--' }}</a-col>
+                <a-col span="4">瓦尔塔:{{ (totalData && (totalData.wetAmount || totalData.wetAmount==0)) ? totalData.wetAmount : '--' }}</a-col>
+                <a-col span="4">雷贝斯托:{{ (totalData && (totalData.lbstAmount || totalData.lbstAmount==0)) ? totalData.lbstAmount : '--' }}</a-col>
+                <a-col span="4">德尔福:{{ (totalData && (totalData.defAmount || totalData.defAmount==0)) ? totalData.defAmount : '--' }}</a-col>
+                <a-col span="4">巴诺德:{{ (totalData && (totalData.bndAmount || totalData.bndAmount==0)) ? totalData.bndAmount : '--' }}</a-col>
+                <a-col span="6">开单销售单合计金额:{{ (totalData && (totalData.totalAmount || totalData.totalAmount==0)) ? totalData.totalAmount : '--' }}</a-col>
+              </a-row>
+            </a-col>
+          </a-row>
+        </template>
+      </s-table>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { STable, VSelect } from '@/components'
+import rangeDateTime from '@/views/common/rangeDateTime.vue'
+import custList from '@/views/common/custList.vue'
+import subarea from '@/views/common/subarea.js'
+import { getArea } from '@/api/data'
+import { hdExportExcel } from '@/libs/exportExcel'
+import { reportDispatchReportList, reportDispatchReportCount, reportDispatchReportExport } from '@/api/reportData'
+export default {
+  components: { STable, VSelect, rangeDateTime, subarea, custList },
+  data () {
+    return {
+      spinning: false,
+      advanced: true, // 高级搜索 展开/关闭
+      queryParam: { //  查询条件
+        time: [],
+        beginDate: '',
+        endDate: '',
+        salesBillNo: '',
+        dealer: {
+          'dealerSn': undefined,
+          'provinceSn': undefined,
+          'citySn': undefined,
+          'districtSn': undefined,
+          'subareaSn': undefined,
+          'dealerLevel': undefined
+        }
+      },
+      rules: {
+        'time': [{ required: true, message: '请选择备货销售日期', trigger: 'change' }]
+      },
+      disabled: false, //  查询、重置按钮是否可操作
+      exportLoading: false,
+      columns: [
+        { title: '区域', dataIndex: 'dealer.subareaNameSet', width: 120, align: 'center', customRender: function (text) { return (text && text.length > 0) ? text.join('/') : '--' } },
+        { title: '销售单号', dataIndex: 'salesBillNo', width: 120, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '省份', dataIndex: 'dealer.provinceName', width: 90, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '客户名称', dataIndex: 'dealer.dealerName', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '客户级别', dataIndex: 'dealer.dealerLevelDictValue', width: 120, align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '品牌',
+          align: 'center',
+          children: [
+            {
+              title: '箭牌',
+              align: 'center',
+              children: [
+                {
+                  title: '滤清器',
+                  dataIndex: 'jpLqqAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '雨刮片',
+                  dataIndex: 'jpYgpAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '喇叭',
+                  dataIndex: 'jpLbAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '刹车片',
+                  dataIndex: 'jpScpAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '感应线',
+                  dataIndex: 'jpGyxAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                }
+              ]
+            },
+            {
+              title: '冠牌',
+              align: 'center',
+              children: [
+                {
+                  title: '滤清器',
+                  dataIndex: 'gpLqqAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '雨刮片',
+                  dataIndex: 'gpYgpAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                },
+                {
+                  title: '刹车片',
+                  dataIndex: 'gpScpAmount',
+                  align: 'center',
+                  width: 80,
+                  customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+                }
+              ]
+            },
+            {
+              title: '汇箭',
+              dataIndex: 'hjAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '德路斯',
+              dataIndex: 'dlsAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '稳升',
+              dataIndex: 'wsAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: 'TBU',
+              dataIndex: 'tbuAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '布瑞斯',
+              dataIndex: 'brsAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            }
+          ] },
+        { title: '代理品牌',
+          align: 'center',
+          children: [
+            {
+              title: 'NGK',
+              dataIndex: 'ngkAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '飞利浦',
+              dataIndex: 'flpAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '车仆',
+              dataIndex: 'cpAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '瓦尔塔',
+              dataIndex: 'wetAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '雷贝斯托',
+              dataIndex: 'lbstAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '德尔福',
+              dataIndex: 'defAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
+            {
+              title: '巴诺德',
+              dataIndex: 'bndAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            }
+          ] },
+        { title: '开单销售单合计金额', width: 90, dataIndex: 'totalAmount', align: 'center', customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        const paramsPage = Object.assign(this.queryParam, { pageNo: parameter.pageNo, pageSize: parameter.pageSize }) //  有分页
+        return reportDispatchReportList(paramsPage).then(res => {
+          this.getCount(paramsPage)
+          const data = res.data
+          const no = (data.pageNo - 1) * data.pageSize
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = no + i + 1
+          }
+          this.disabled = false
+          this.spinning = false
+          return data
+        })
+      },
+      totalData: null,
+      addrProvinceList: [], //  省下拉
+      addrCityList: [], //  市下拉
+      addrDistrictList: [] //  区下拉
+    }
+  },
+  methods: {
+    //  导出
+    handleExport () {
+      const _this = this
+      const params = this.queryParam
+      delete params.time
+      this.exportLoading = true
+      this.spinning = true
+      hdExportExcel(reportDispatchReportExport, params, '销售交单报表', function () {
+        _this.exportLoading = false
+        _this.spinning = false
+      })
+    },
+    // 总计
+    getCount (params) {
+      reportDispatchReportCount(params).then(res => {
+        if (res.status == 200 && res.data) {
+          this.totalData = res.data
+        } else {
+          this.totalData = null
+        }
+      })
+    },
+    handleSearch () {
+      const _this = this
+      this.$refs.ruleForm.validate(valid => {
+        if (valid) {
+          _this.$refs.table.refresh(true)
+        } else {
+          return false
+        }
+      })
+    },
+    //  创建时间  change
+    dateChange (date) {
+      this.queryParam.time = date
+      this.queryParam.beginDate = date[0] || ''
+      this.queryParam.endDate = date[1] || ''
+    },
+    custChange (val) {
+      this.queryParam.dealer.dealerSn = val.key
+    },
+    //  重置
+    resetSearchForm () {
+      this.queryParam.time = []
+      this.$refs.rangeDate.resetDate(this.queryParam.time)
+      this.queryParam.beginDate = ''
+      this.queryParam.endDate = ''
+      this.queryParam.salesBillNo = ''
+      this.queryParam.dealer = {
+        'dealerSn': undefined,
+        'provinceSn': undefined,
+        'citySn': undefined,
+        'districtSn': undefined,
+        'subareaSn': undefined,
+        'dealerLevel': undefined
+      }
+      this.totalData = null
+      this.$refs.custList.resetForm()
+      this.$refs.ruleForm.resetFields()
+      this.$refs.table.clearTable()
+    },
+    // 获取城市列表
+    getCityList (val) {
+      this.addrCityList = []
+      this.addrDistrictList = []
+      this.queryParam.dealer.citySn = undefined
+      this.queryParam.dealer.districtSn = undefined
+      if (val) {
+        this.getArea('city', val)
+      }
+    },
+    // 获取区县列表
+    getAreaList (val) {
+      this.addrDistrictList = []
+      this.queryParam.dealer.districtSn = undefined
+      if (val) {
+        this.getArea('district', val)
+      }
+    },
+    //  省/市/区
+    getArea (leve, sn) {
+      let params
+      if (leve == 'province') {
+        params = { type: '2' }
+      } else {
+        params = { parentId: sn, type: leve == 'city' ? '3' : '4' }
+      }
+      getArea(params).then(res => {
+        if (res.status == 200) {
+          if (leve == 'province') {
+            this.addrProvinceList = res.data || []
+          } else if (leve == 'city') {
+            this.addrCityList = res.data || []
+          } else if (leve == 'district') {
+            this.addrDistrictList = res.data || []
+          }
+        } else {
+          if (leve == 'province') {
+            this.addrProvinceList = []
+          } else if (leve == 'city') {
+            this.addrCityList = []
+          } else if (leve == 'district') {
+            this.addrDistrictList = []
+          }
+        }
+      })
+    },
+    pageInit () {
+      this.getArea('province')
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+      this.resetSearchForm()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+      this.resetSearchForm()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>

+ 9 - 1
src/views/reportData/salesReturnReport/list.vue

@@ -95,7 +95,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2170, y: tableHeight }"
+        :scroll="{ x: 2250, y: tableHeight }"
         :defaultLoadData="false"
         bordered>
         <template slot="footer">
@@ -115,6 +115,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -278,6 +279,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 9 - 1
src/views/reportData/salesSlipReport/list.vue

@@ -101,7 +101,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
-        :scroll="{ x: 2330 }"
+        :scroll="{ x: 2410 }"
         bordered>
         <template slot="footer">
           <a-row>
@@ -120,6 +120,7 @@
                 <a-col span="4">德路斯:{{ (totalData && (totalData.dlsAmount || totalData.dlsAmount==0)) ? totalData.dlsAmount : '--' }}</a-col>
                 <a-col span="4">稳升:{{ (totalData && (totalData.wsAmount || totalData.wsAmount==0)) ? totalData.wsAmount : '--' }}</a-col>
                 <a-col span="4">TBU:{{ (totalData && (totalData.tbuAmount || totalData.tbuAmount==0)) ? totalData.tbuAmount : '--' }}</a-col>
+                <a-col span="4">TBU-P:{{ (totalData && (totalData.tbupAmount || totalData.tbupAmount==0)) ? totalData.tbupAmount : '--' }}</a-col>
                 <a-col span="4">布瑞斯:{{ (totalData && (totalData.brsAmount || totalData.brsAmount==0)) ? totalData.brsAmount : '--' }}</a-col>
                 <a-col span="4">NGK:{{ (totalData && (totalData.ngkAmount || totalData.ngkAmount==0)) ? totalData.ngkAmount : '--' }}</a-col>
                 <a-col span="4">飞利浦:{{ (totalData && (totalData.flpAmount || totalData.flpAmount==0)) ? totalData.flpAmount : '--' }}</a-col>
@@ -282,6 +283,13 @@ export default {
               width: 80,
               customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
             },
+            {
+              title: 'TBU-P',
+              dataIndex: 'tbupAmount',
+              align: 'center',
+              width: 80,
+              customRender: function (text) { return (text || text == 0) ? ('¥' + text) : '--' }
+            },
             {
               title: '布瑞斯',
               dataIndex: 'brsAmount',

+ 5 - 0
src/views/salesManagement/backorder/list.vue

@@ -144,6 +144,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/examineVerify/list.vue

@@ -315,6 +315,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/outboundOrder/list.vue

@@ -414,6 +414,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/priceInquiry/list.vue

@@ -216,6 +216,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/pushOrderManagement/list.vue

@@ -260,6 +260,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 195 - 0
src/views/salesManagement/salesQuery/chooseImportModal.vue

@@ -0,0 +1,195 @@
+<template>
+  <a-modal
+    centered
+    class="chooseImport-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="导入"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="900">
+    <div class="chooseImport-con">
+      <!-- 可导入数据 -->
+      <p class="">可导入数据{{ loadData.length }}条</p>
+      <a-table
+        class="sTable"
+        ref="table"
+        size="small"
+        :rowKey="(record) => record.allocateSn"
+        :columns="nowColumns"
+        :dataSource="loadData"
+        :loading="loading"
+        :scroll="{ y: 200 }"
+        :pagination="false"
+        bordered>
+      </a-table>
+      <a-divider />
+      <!-- 不可导入数据 -->
+      <p class="red">不可导入数据{{ unLoadData.length }}条</p>
+      <a-table
+        class="unTable"
+        ref="unTable"
+        size="small"
+        :rowKey="(record) => record.errorDesc"
+        :columns="nowUnColumns"
+        :dataSource="unLoadData"
+        :loading="loading"
+        :scroll="{ y: 200 }"
+        :pagination="false"
+        bordered>
+      </a-table>
+      <!-- 按钮 -->
+      <div class="btn-con">
+        <a-button
+          type="primary"
+          id="chooseImport-submit"
+          size="large"
+          :class="loadData.length==0?'button-grey':'button-primary'"
+          @click="handleSubmit"
+          style="padding: 0 40px;">确认导入</a-button>
+        <a-button
+          id="chooseImport-cancel"
+          size="large"
+          class="button-cancel"
+          @click="isShow=false"
+          style="padding: 0 40px;margin-left: 15px;">取消</a-button>
+        <a-button
+          type="primary"
+          id="chooseImport-error"
+          size="large"
+          class="button-error"
+          @click="handleError"
+          style="padding: 0 40px;margin-left: 15px;">导出错误项</a-button>
+      </div>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { hdExportExcel } from '@/libs/exportExcel'
+import { salesParseProducts, salesFailExcel } from '@/api/salesDetail'
+export default {
+  name: 'ChooseImportModal',
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    paramsData: {
+      type: Object,
+      default: () => {
+        return {}
+      }
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      nowColumns: [
+        { title: '序号', dataIndex: 'no', width: '8%', align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productEntity.name', width: '25%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '数量', dataIndex: 'qtyText', width: '14%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存', dataIndex: 'stockQty', width: '14%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'productEntity.unit', width: '14%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      loadData: [],
+      nowUnColumns: [
+        { title: '序号', dataIndex: 'no', width: '9%', align: 'center' },
+        { title: '产品编码', dataIndex: 'productCode', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'productEntity.name', width: '21%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '数量', dataIndex: 'qtyText', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '库存', dataIndex: 'stockQty', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'productEntity.unit', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '备注', dataIndex: 'errorDesc', width: '20%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      unLoadData: [],
+      loading: false
+    }
+  },
+  methods: {
+    getData () {
+      const _this = this
+      this.loading = true
+      const params = {
+        salesBillSn: this.paramsData.salesBillSn,
+        path: this.paramsData.path
+      }
+      salesParseProducts(params).then(res => {
+        this.loading = false
+        if (res.status == 200) {
+          if (res.data.okList && res.data.okList.length > 0) {
+            res.data.okList.map((item, index) => {
+              item.no = index + 1
+            })
+          }
+          if (res.data.failList && res.data.failList.length > 0) {
+            res.data.failList.map((item, index) => {
+              item.no = index + 1
+            })
+          }
+          _this.loadData = res.data.okList || []
+          _this.unLoadData = res.data.failList || []
+        }
+      })
+    },
+    // 确认导入
+    handleSubmit () {
+      if (this.loadData.length == 0) {
+        this.$message.warning('无可导入产品!')
+      } else {
+        this.$emit('ok', this.loadData)
+        this.isShow = false
+      }
+    },
+    // 导出
+    handleError () {
+      const _this = this
+      if (_this.unLoadData.length < 1) {
+        _this.$message.info('暂无可导出错误项~')
+        return
+      }
+      _this.spinning = true
+      const params = {
+        list: _this.unLoadData
+      }
+      hdExportExcel(salesFailExcel, params, '产品导入错误项', function () {
+        _this.spinning = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.loadData = []
+        this.unLoadData = []
+      } else {
+        this.getData()
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .chooseImport-modal{
+    .chooseImport-con{
+      .red{
+        color: #f30;
+      }
+      .btn-con{
+        text-align: center;
+        margin: 30px 0 20px;
+        .button-cancel,.button-error{
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>

+ 28 - 9
src/views/salesManagement/salesQuery/edit.vue

@@ -35,12 +35,15 @@
         <!-- 总计 -->
         <a-alert type="info" style="margin-bottom: 10px;">
           <div slot="message" class="total-bar">
-            <div>
-              总售价:<strong>{{ detailData&&(detailData.totalCommonAmount || detailData.totalCommonAmount==0) ? '¥'+detailData.totalCommonAmount : '--' }}</strong>;
-              总款数:<strong>{{ detailData&&(detailData.totalCommonCategory || detailData.totalCommonCategory==0) ? detailData.totalCommonCategory : '--' }}</strong>;
-              总数量:<strong>{{ detailData&&(detailData.totalCommonQty || detailData.totalCommonQty==0) ? detailData.totalCommonQty : '--' }}</strong>;
-            </div>
-            <div>
+            <div style="position: relative;width: 100%;">
+              <div>
+                总售价:<strong>{{ detailData&&(detailData.totalCommonAmount || detailData.totalCommonAmount==0) ? '¥'+detailData.totalCommonAmount : '--' }}</strong>;
+                总款数:<strong>{{ detailData&&(detailData.totalCommonCategory || detailData.totalCommonCategory==0) ? detailData.totalCommonCategory : '--' }}</strong>;
+                总数量:<strong>{{ detailData&&(detailData.totalCommonQty || detailData.totalCommonQty==0) ? detailData.totalCommonQty : '--' }}</strong>;
+              </div>
+              <div style="position: absolute;right: 0;top: -3px;">
+                <a-button size="small" type="primary" class="button-info" id="salesEdit-import-btn" @click="openGuideModal=true">导入产品</a-button>
+              </div>
             </div>
           </div>
         </a-alert>
@@ -154,6 +157,8 @@
       @ok="addNewActive"
       :newLoading="isInster"
       @close="closeActive"></ChooseActive>
+    <!-- 导入产品 -->
+    <importGuideModal :openModal="openGuideModal" :params="{salesBillSn: $route.params.sn}" @close="closeGuideModel" @ok="hanldeOk" />
   </div>
 </template>
 
@@ -162,11 +167,12 @@ import { STable, VSelect } from '@/components'
 import queryPart from './queryPart.vue'
 import queryPromotable from './queryPromotable.vue'
 import ChooseActive from './chooseActive.vue'
+import ImportGuideModal from './importGuideModal.vue'
 import { salesDetailBySn, salesWriteSubmit, getPromoacActiveList } from '@/api/sales'
-import { salesDetailStockList, salesDetailInsert, salesDetailUpdateQty, salesDetailDel, salesDetailDelAll, addPromoGoods } from '@/api/salesDetail'
+import { salesDetailStockList, salesDetailInsert, salesDetailUpdateQty, salesDetailDel, salesDetailDelAll, addPromoGoods, salesBatchInsert } from '@/api/salesDetail'
 export default {
   name: 'SalesDetail',
-  components: { STable, VSelect, queryPart, queryPromotable, ChooseActive },
+  components: { STable, VSelect, queryPart, queryPromotable, ChooseActive, ImportGuideModal },
   data () {
     return {
       spinning: false,
@@ -211,7 +217,8 @@ export default {
           this.$refs.promotable.getData(this.salesBillSn)
           return data
         })
-      }
+      },
+      openGuideModal: false //  导入产品引导
     }
   },
   methods: {
@@ -405,6 +412,18 @@ export default {
       this.nowData = null
       this.newActive = false
     },
+    closeGuideModel () {
+      this.openGuideModal = false
+    },
+    // 导入产品
+    hanldeOk (obj) {
+      salesBatchInsert(obj).then(res => {
+        if (res.status == 200) {
+          this.$refs.table.refresh(true)
+          this.getOrderDetail(false)
+        }
+      })
+    },
     pageInit () {
       this.getOrderDetail(true)
       this.$refs.table.refresh(true)

+ 199 - 0
src/views/salesManagement/salesQuery/importGuideModal.vue

@@ -0,0 +1,199 @@
+<template>
+  <a-modal
+    centered
+    class="importGuide-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="导入"
+    v-model="isShow"
+    @cancle="isShow=false"
+    :width="750">
+    <div class="importGuide-con">
+      <div class="explain-con">
+        <div class="explain-item">
+          <div class="explain-tit">
+            <span>1</span>准备导入
+          </div>
+          <ul>
+            <li>1) 导入的Excel文件中必须包含名为“产品编码”、“数量”的列,且名称必须相同</li>
+            <li>2) 除了“产品编码”、“数量”两列,其他列可自定义,不影响数据导入</li>
+            <li>3) 如果导入的产品已经存在,则不会导入该行</li>
+          </ul>
+          <a-button type="link" icon="download" style="padding: 0 0 0 23px;" @click="handleExport">下载导入模板</a-button>
+        </div>
+        <div class="explain-item">
+          <div class="explain-tit">
+            <span>2</span>上传数据文件
+          </div>
+          <p>目前支持的文件类型*.xls,*.xlsx.</p>
+          <div style="overflow: hidden;padding-left: 23px;">
+            <Upload
+              id="importGuide-attachList"
+              ref="importUpload"
+              :maxNums="1"
+              fileType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel"
+              uploadType="import"
+              :action="attachAction"
+              :uploadParams="uploadParams"
+              upText="添加文件"
+              @change="changeImport"></Upload>
+          </div>
+        </div>
+      </div>
+      <!-- 按钮 -->
+      <div class="btn-con">
+        <a-button
+          type="primary"
+          id="importGuide-nextStep"
+          size="large"
+          class="button-primary"
+          @click="handlerNextStep"
+          style="padding: 0 60px;">下一步</a-button>
+        <a-button
+          id="importGuide-cancel"
+          size="large"
+          class="button-cancel"
+          @click="isShow=false"
+          style="padding: 0 60px;margin-left: 15px;">取消</a-button>
+      </div>
+    </div>
+    <!-- 导入 -->
+    <chooseImportModal :openModal="openImportModal" :paramsData="paramsData" @close="handleClose" @ok="hanldeOk" />
+  </a-modal>
+</template>
+
+<script>
+import ChooseImportModal from './chooseImportModal.vue'
+import { Upload } from '@/components'
+import { hdExportExcel } from '@/libs/exportExcel'
+import { salesDownload } from '@/api/salesDetail'
+export default {
+  name: 'ImportGuideModal',
+  components: { ChooseImportModal, Upload },
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    params: {
+      type: Object,
+      default: null
+    }
+  },
+  data () {
+    return {
+      isShow: this.openModal, //  是否打开弹框
+      openImportModal: false, //  导入
+      attachAction: process.env.VUE_APP_API_BASE_URL + '/upload',
+      paramsData: null,
+      uploadParams: {
+        savePathType: 'local'
+      }
+    }
+  },
+  methods: {
+    // 下一步
+    handlerNextStep () {
+      if (this.paramsData) {
+        this.openImportModal = true
+      } else {
+        this.$message.warning('添加文件后再进行下一步操作!')
+      }
+    },
+    // 上传文件  change
+    changeImport (file) {
+      if (file) {
+        this.paramsData = {
+          salesBillSn: this.params.salesBillSn || '',
+          path: file
+        }
+      }
+    },
+    // 导入
+    hanldeOk (obj) {
+      if (obj && obj.length > 0) {
+        this.$emit('ok', obj)
+        this.isShow = false
+      }
+    },
+    // 关闭
+    handleClose () {
+      this.openImportModal = false
+      this.isShow = false
+    },
+    //  导出
+    handleExport () {
+      const _this = this
+      const params = { grabFlag: this.params.grabFlag }
+      this.exportLoading = true
+      this.spinning = true
+      hdExportExcel(salesDownload, params, '销售导入模板', function () {
+        _this.exportLoading = false
+        _this.spinning = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.paramsData = null
+        this.$refs.importUpload.setFileList('')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+  .importGuide-modal{
+    .importGuide-con{
+      .explain-con{
+        .explain-item{
+          margin-bottom: 10px;
+          .explain-tit{
+            font-weight: bold;
+            span{
+              display: inline-block;
+              width: 18px;
+              height: 18px;
+              line-height: 16px;
+              text-align: center;
+              margin-right: 5px;
+              border-radius: 50%;
+              border: 1px solid rgba(0, 0, 0, 0.3);
+            }
+          }
+          p{
+            margin: 8px 0;
+            padding-left: 23px;
+          }
+          ul{
+            list-style: none;
+            padding: 0;
+            padding-left: 23px;
+            margin: 0;
+            li{
+              line-height: 26px;
+            }
+          }
+        }
+        #importGuide-attachList{
+          width: 100%;
+        }
+      }
+      .btn-con{
+        margin: 10px 0 20px;
+        text-align: center;
+        .button-cancel{
+          font-size: 12px;
+        }
+      }
+    }
+  }
+</style>

+ 5 - 0
src/views/salesManagement/salesQuery/list.vue

@@ -453,6 +453,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/salesReturn/list.vue

@@ -409,6 +409,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/shortageStatisticsC/list.vue

@@ -412,6 +412,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/salesManagement/shortageStatisticsP/list.vue

@@ -193,6 +193,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/setting/notice/list.vue

@@ -220,6 +220,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.handelSearch(1)
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

+ 5 - 0
src/views/setting/noticeManagement/list.vue

@@ -209,6 +209,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   }
 }
 </script>

+ 5 - 0
src/views/supplierManagement/associatedProductDetails/list.vue

@@ -167,6 +167,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

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

@@ -162,6 +162,11 @@ export default {
       this.pageInit()
       this.resetSearchForm()
     }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
   },
   beforeRouteEnter (to, from, next) {
     next(vm => {})

部分文件因为文件数量过多而无法显示