Browse Source

Merge branch 'develop_szhj04' of http://git.chelingzhu.com/jianguan-web/qpls-md-html into pre-release

# Conflicts:
#	public/version.json
lilei 2 years ago
parent
commit
6e6754813e

+ 1 - 1
.env.development

@@ -1,7 +1,7 @@
 NODE_ENV=development
 NODE_ENV=development
 VUE_APP_PREVIEW=true
 VUE_APP_PREVIEW=true
 VUE_APP_API_BASE_URL=/api
 VUE_APP_API_BASE_URL=/api
-VUE_APP_WX_BASE_URL=//192.168.16.103:8503/qpls-md/websocket/
+VUE_APP_WX_BASE_URL=//p.iscm.360arrow.com/qpls-md/websocket/
 VUE_APP_VERSION=V1.0.1
 VUE_APP_VERSION=V1.0.1
 VUE_APP_ENVTIPS=开发环境(仅供测试)
 VUE_APP_ENVTIPS=开发环境(仅供测试)
 VUE_APP_PRO_NAME=iSCM智慧供应链系统
 VUE_APP_PRO_NAME=iSCM智慧供应链系统

+ 1 - 1
public/version.json

@@ -1,5 +1,5 @@
 {
 {
   "message": "发现有新版本发布,确定更新系统?",
   "message": "发现有新版本发布,确定更新系统?",
   "vendorJsVersion": "",
   "vendorJsVersion": "",
-  "version": 1663725111927
+  "version": 1664351490578
 }
 }

+ 24 - 0
src/api/noticeUser.js

@@ -34,3 +34,27 @@ export const hasRead = id => {
     method: 'get'
     method: 'get'
   })
   })
 }
 }
+// 设置全部已读
+export const setReadAllNotice = params => {
+  return axios({
+    url: `noticeUser/setReadAllNotice`,
+    method: 'get'
+  })
+}
+ // 消息公共权限设置列表
+export const noticeUserBizQuery = (params) => {
+  const url = `/noticeUserBiz/query`
+  return axios({
+    url: url,
+    method: 'get'
+  })
+}
+// 消息公共权限保存
+export const noticeUserBizSave = (params) => {
+  const url = `/noticeUserBiz/save`
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}

+ 20 - 3
src/api/reportData.js

@@ -172,8 +172,6 @@ export const reportSalesReturnDetailExport = params => {
     responseType: 'blob'
     responseType: 'blob'
   })
   })
 }
 }
-
-
 // 店内调出-分页列表
 // 店内调出-分页列表
 export const reportStoreCallOutPageList = (params) => {
 export const reportStoreCallOutPageList = (params) => {
   const url = `report/reportStoreCallOut/reportPage/${params.pageNo}/${params.pageSize}`
   const url = `report/reportStoreCallOut/reportPage/${params.pageNo}/${params.pageSize}`
@@ -202,7 +200,6 @@ export const reportStoreCallOutExport = params => {
     responseType: 'blob'
     responseType: 'blob'
   })
   })
 }
 }
-
 // 店内调出明细-分页列表
 // 店内调出明细-分页列表
 export const reportStoreCallOutDetailList = (params) => {
 export const reportStoreCallOutDetailList = (params) => {
   const url = `report/reportStoreCallOut/reportDetailPage/${params.pageNo}/${params.pageSize}`
   const url = `report/reportStoreCallOut/reportDetailPage/${params.pageNo}/${params.pageSize}`
@@ -214,6 +211,7 @@ export const reportStoreCallOutDetailList = (params) => {
     method: 'post'
     method: 'post'
   })
   })
 }
 }
+
 // 店内调出明细-列表合计
 // 店内调出明细-列表合计
 export const reportStoreCallOutDetailTotal = (params) => {
 export const reportStoreCallOutDetailTotal = (params) => {
   return axios({
   return axios({
@@ -614,6 +612,25 @@ export const reportSalesBillDetailTotalExport = params => {
     responseType: 'blob'
     responseType: 'blob'
   })
   })
 }
 }
+// 连锁销售退货合计报表  列表 不分页
+export const reportSalesReturnBillDetailTotalList = (params) => {
+  const url = `/report/reportSalesReturnBillDetailTotal/reportList`
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+// 连锁销售退货合计报表  导出
+export const reportSalesReturnBillDetailTotalExport = params => {
+  return axios.request({
+    url: `/report/reportSalesReturnBillDetailTotal/export`,
+    data: params,
+    method: 'post',
+    responseType: 'blob'
+  })
+}
+
 // 门店收发存汇总报表  列表 不分页
 // 门店收发存汇总报表  列表 不分页
 export const reportStockPutOutMonthList = (params) => {
 export const reportStockPutOutMonthList = (params) => {
   const url = `/report/reportStockPutOutMonth/report`
   const url = `/report/reportStockPutOutMonth/report`

+ 46 - 0
src/api/shelf.js

@@ -51,6 +51,22 @@ export const shelfProductSave = (params) => {
     method: 'post'
     method: 'post'
   })
   })
 }
 }
+// 获取价格显示
+export const getShelfPriceShow = (params) => {
+  return axios({
+    url: `/bizparam/getShelfPriceShow`,
+    data: params,
+    method: 'post'
+  })
+}
+// 更新价格显示
+export const updateShelfPriceShow = (params) => {
+  return axios({
+    url: `/bizparam/updateShelfPriceShow`,
+    data: params,
+    method: 'post'
+  })
+}
 // 货架  货位产品 下载模板
 // 货架  货位产品 下载模板
 export const shelfProductDownload = params => {
 export const shelfProductDownload = params => {
   return axios.request({
   return axios.request({
@@ -155,4 +171,34 @@ export const delShelfPlaceSn = (params) => {
     data: params,
     data: params,
     method: 'post'
     method: 'post'
   })
   })
+}
+
+// 货架订单-分页列表
+export const orderBillQueryPage = (params) => {
+  const url = `/orderBill/queryPage/${params.pageNo}/${params.pageSize}`
+  delete params.pageNo
+  delete params.pageSize
+  return axios({
+    url: url,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 货架订单明细-合计
+export const orderBillDetailCount = (params) => {
+  return axios({
+    url: `/orderBill/queryDetailCount`,
+    data: params,
+    method: 'post'
+  })
+}
+
+// 货架订单-合计
+export const orderBillQueryCount = (params) => {
+  return axios({
+    url: `/orderBill/queryCount`,
+    data: params,
+    method: 'post'
+  })
 }
 }

+ 16 - 1
src/api/shelfReplenish.js

@@ -1,5 +1,20 @@
 import { axios } from '@/utils/request'
 import { axios } from '@/utils/request'
 
 
+// 货架列表
+export const queryListForSettle = (params) => {
+  return axios({
+    url: '/shelf/queryListForSettle',
+    method: 'get'
+  })
+}
+// 生成补货单
+export const shelfTaskInsertBill = (params) => {
+  return axios({
+    url: '/shelfReplenish/taskInsertBill',
+    data: params,
+    method: 'post'
+  })
+}
 //  补货单列表  有分页
 //  补货单列表  有分页
 export const shelfReplenishList = (params) => {
 export const shelfReplenishList = (params) => {
   const url = `/shelfReplenish/queryPage/${params.pageNo}/${params.pageSize}`
   const url = `/shelfReplenish/queryPage/${params.pageNo}/${params.pageSize}`
@@ -101,7 +116,7 @@ export const shelfReplenishPrintSign = (params) => {
   })
   })
 }
 }
 
 
-// 定时任务
+// 定时任务,废弃
 export const shelfReplenishTaskInsertBill = (params) => {
 export const shelfReplenishTaskInsertBill = (params) => {
   return axios({
   return axios({
     url: '/shelfReplenish/taskInsertBill',
     url: '/shelfReplenish/taskInsertBill',

BIN
src/assets/notes.mp3


+ 3 - 3
src/components/NoticeIcon/NoticeIcon.vue

@@ -12,7 +12,7 @@
     <template slot="content">
     <template slot="content">
       <a-spin :spinning="loading">
       <a-spin :spinning="loading">
         <a-tabs>
         <a-tabs>
-          <a-tab-pane tab="公告" key="1">
+          <a-tab-pane tab="消息" key="1">
             <a-list>
             <a-list>
               <a-list-item>
               <a-list-item>
                 <a-list-item-meta title="你收到了 14 份新周报" description="一年前">
                 <a-list-item-meta title="你收到了 14 份新周报" description="一年前">
@@ -49,7 +49,7 @@
   <span @click="fetchNotice" class="header-notice" ref="noticeRef">
   <span @click="fetchNotice" class="header-notice" ref="noticeRef">
     <a-badge :count="unreadCount">
     <a-badge :count="unreadCount">
       <a-icon style="font-size: 16px; padding: 0 5px 0 0" type="bell" />
       <a-icon style="font-size: 16px; padding: 0 5px 0 0" type="bell" />
-      <span>公告</span>
+      <span>消息</span>
     </a-badge>
     </a-badge>
   </span>
   </span>
 </template>
 </template>
@@ -108,7 +108,7 @@ export default {
       if (a !== b && a) {
       if (a !== b && a) {
         console.log(a)
         console.log(a)
         // 新未读消息
         // 新未读消息
-        if (a.type == 'no_read_count') {
+        if (a.type == 'no_read_count' || a.type == 'new_remind') {
           this.updateUnreadcount(a.data.no_read_count)
           this.updateUnreadcount(a.data.no_read_count)
         }
         }
       }
       }

+ 64 - 3
src/config/router.config.js

@@ -58,13 +58,13 @@ export const asyncRouterMap = [
                 },
                 },
                 hidden: true
                 hidden: true
               },
               },
-              // 公告
+              // 消息
               {
               {
                 path: '/notice',
                 path: '/notice',
                 name: 'notice',
                 name: 'notice',
                 component: () => import(/* webpackChunkName: "home" */ '@/views/notice/list'),
                 component: () => import(/* webpackChunkName: "home" */ '@/views/notice/list'),
                 meta: {
                 meta: {
-                  title: '公告',
+                  title: '消息',
                   icon: 'bell',
                   icon: 'bell',
                   hidden: true
                   hidden: true
                 }
                 }
@@ -434,6 +434,42 @@ export const asyncRouterMap = [
               }
               }
             ]
             ]
           },
           },
+          {
+            path: '/numsGoodsShelves/shelfOrder',
+            redirect: '/numsGoodsShelves/shelfOrder/list',
+            name: 'shelfOrder',
+            component: BlankLayout,
+            meta: {
+              title: '货架订单',
+              icon: 'monitor',
+              permission: 'M_shelfOrder'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'shelfOrderList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfOrder/list.vue'),
+                meta: {
+                  title: '货架订单列表',
+                  icon: 'monitor',
+                  hidden: true
+                  // permission: 'M_shelfOrderList'
+                }
+              },
+              {
+                path: 'shelfOrderDetail/:sn',
+                name: 'shelfOrderDetail',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfOrder/detail.vue'),
+                meta: {
+                  title: '货架订单详情',
+                  icon: 'monitor',
+                  hidden: true,
+                  // permission: 'M_shelfOrderDetail'
+                }
+              }
+            ]
+          },
           {
           {
             path: '/numsGoodsShelves/replenishmentManagement',
             path: '/numsGoodsShelves/replenishmentManagement',
             redirect: '/numsGoodsShelves/replenishmentManagement/list',
             redirect: '/numsGoodsShelves/replenishmentManagement/list',
@@ -2250,7 +2286,7 @@ export const asyncRouterMap = [
         meta: {
         meta: {
           title: '连锁报表',
           title: '连锁报表',
           icon: 'fund',
           icon: 'fund',
-          permission: 'M_reportData'
+          permission: 'M_chainReportData'
         },
         },
         children: [
         children: [
           {
           {
@@ -3020,6 +3056,31 @@ export const asyncRouterMap = [
                 }
                 }
               }
               }
             ]
             ]
+          },
+          {
+            path: '/basicData/notificationManage',
+            redirect: '/basicData/notificationManage/list',
+            name: 'notificationManage',
+            component: BlankLayout,
+            meta: {
+              title: '消息提醒管理',
+              icon: 'sound',
+              permission: 'M_notificationManageList'
+            },
+            hideChildrenInMenu: true,
+            children: [
+              {
+                path: 'list',
+                name: 'notificationManageList',
+                component: () => import(/* webpackChunkName: "basicData" */ '@/views/basicData/notificationManage/list.vue'),
+                meta: {
+                  title: '消息提醒管理',
+                  icon: 'sound',
+                  hidden: true,
+                  permission: 'M_notificationManageList'
+                }
+              }
+            ]
           }
           }
         ]
         ]
       },
       },

+ 192 - 25
src/layouts/BasicLayout.vue

@@ -46,6 +46,36 @@
         </transition>
         </transition>
       </a-layout-content>
       </a-layout-content>
 
 
+      <!-- 消息通知 -->
+      <div class="notes-box" v-if="notesList.length && nowRoute.indexOf('notice')<0">
+        <div v-for="item in notesList" :key="item.id">
+          <a-alert v-if="item.notice.bizType=='TEMP_ORDER'" type="warning" showIcon closable @close="setRead(item)">
+            <div slot="description">
+              【急送提醒】{{ item.notice.plainContent }} <a-button @click="toAction(item)" size="small" type="link" class="button-info">点击查看</a-button>
+            </div>
+          </a-alert>
+          <a-alert v-if="item.notice.bizType=='SHELF_REPLENISH'" type="info" showIcon closable @close="setRead(item)">
+            <div slot="description">
+              【补货提醒】{{ item.notice.plainContent }} <a-button @click="toAction(item)" size="small" type="link" class="button-info">立即处理</a-button>
+            </div>
+          </a-alert>
+          <a-alert v-if="item.notice.bizType=='SHELF_ORDER'" type="info" showIcon closable @close="setRead(item)">
+            <div slot="description">
+              【订单提醒】{{ item.notice.plainContent }} <a-button @click="toAction(item)" size="small" type="link" class="button-info">点击查看</a-button>
+            </div>
+          </a-alert>
+          <a-alert v-if="item.notice.bizType=='SHELF_WARN'" type="warning" showIcon closable @close="setRead(item)">
+            <div slot="description">
+              【货架异常提醒】{{ item.notice.plainContent }} <a-button @click="toAction(item)" size="small" type="link" class="button-info">点击查看</a-button>
+            </div>
+          </a-alert>
+        </div>
+        <div class="notes-footer">
+          <div class="notes-more" @click="noDoNotes">暂不处理</div>
+          <div class="notes-more" @click="toNotes">更多消息>></div>
+        </div>
+      </div>
+      <audio controls="controls" hidden :src="mp3" ref="audio"></audio>
       <!-- 视频播放弹窗 -->
       <!-- 视频播放弹窗 -->
       <div v-if="isShowVideoVal">
       <div v-if="isShowVideoVal">
         <a-modal
         <a-modal
@@ -95,14 +125,15 @@ import GlobalHeader from '@/components/GlobalHeader'
 import GlobalFooter from '@/components/GlobalFooter'
 import GlobalFooter from '@/components/GlobalFooter'
 import SettingDrawer from '@/components/SettingDrawer'
 import SettingDrawer from '@/components/SettingDrawer'
 import { asyncRouterMap } from '@/config/router.config'
 import { asyncRouterMap } from '@/config/router.config'
+import mp3 from '@/assets/notes.mp3'
 import store from '@/store'
 import store from '@/store'
 export default {
 export default {
   name: 'BasicLayout',
   name: 'BasicLayout',
   mixins: [mixin, mixinDevice, commonMixin],
   mixins: [mixin, mixinDevice, commonMixin],
   provide () {
   provide () {
     return {
     return {
-      reloadView: this.reloadView,
-      setIsHomeNav: this.setIsHomeNav
+      setIsHomeNav: this.setIsHomeNav,
+      reloadView: this.reloadView
     }
     }
   },
   },
   components: {
   components: {
@@ -121,7 +152,9 @@ export default {
       menus: [],
       menus: [],
       isRouterAlive: true,
       isRouterAlive: true,
       showPdfView: false,
       showPdfView: false,
-      showSelectPrint: false
+      showSelectPrint: false,
+      notesList: [],
+      mp3: mp3
     }
     }
   },
   },
   computed: {
   computed: {
@@ -132,13 +165,12 @@ export default {
       fixedHeader: state => state.app.fixedHeader
       fixedHeader: state => state.app.fixedHeader
     }),
     }),
     ...mapGetters(['nowRoute', 'isShowVideo']),
     ...mapGetters(['nowRoute', 'isShowVideo']),
-    isShowVideoVal: {
-      get () {
-        return this.$store.state.app.isShowVideo
-      },
-      set (newValue) {
-        this.$store.state.app.isShowVideo = newValue
-      }
+    isShowVideoVal () {
+      return this.$store.state.app.isShowVideo
+    },
+    // 接受到ws消息
+    wsMessage () {
+      return this.$store.getters.wsMessageData()
     },
     },
     contentPaddingLeft () {
     contentPaddingLeft () {
       if (!this.fixSidebar || this.isMobile()) {
       if (!this.fixSidebar || this.isMobile()) {
@@ -173,20 +205,20 @@ export default {
           fullscreenToggle: true // 全屏按钮
           fullscreenToggle: true // 全屏按钮
         }
         }
       }
       }
-      const isSaleOrder = this.nowRoute.indexOf('salesQuery') > -1 // 当前展示是否为销售单模块
-      const isSalesReturn = this.nowRoute.indexOf('salesReturn') > -1 // 当前展示是否为销售退货模块
-      const isPurchaseOrder = this.nowRoute.indexOf('purchaseOrder') > -1 // 当前展示是否为采购单管理模块
-      const isPurchaseReturn = this.nowRoute.indexOf('purchaseReturn') > -1 // 当前展示是否为采购退货模块
-      if (isSaleOrder) {
+      // 当前展示是否为销售单模块
+      if (this.nowRoute.indexOf('salesQuery') > -1) {
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/1xiaoshou.mp4'
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/1xiaoshou.mp4'
       }
       }
-      if (isSalesReturn) {
+      // 当前展示是否为销售退货模块
+      if (this.nowRoute.indexOf('salesReturn') > -1) {
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/2xiaoshoutuihuo.mp4'
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/2xiaoshoutuihuo.mp4'
       }
       }
-      if (isPurchaseOrder) {
+      // 当前展示是否为采购单管理模块
+      if (this.nowRoute.indexOf('purchaseOrder') > -1) {
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/3caigou.mp4'
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/3caigou.mp4'
       }
       }
-      if (isPurchaseReturn) {
+      // 当前展示是否为采购退货模块
+      if (this.nowRoute.indexOf('purchaseReturn') > -1) {
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/4caigoutuihuo.mp4'
         playerOptions.sources[0].src = 'https://jianguan-images.oss-cn-beijing.aliyuncs.com/helpvideo/4caigoutuihuo.mp4'
       }
       }
 	    return playerOptions
 	    return playerOptions
@@ -196,8 +228,21 @@ export default {
     sidebarOpened (val) {
     sidebarOpened (val) {
       this.collapsed = !val
       this.collapsed = !val
     },
     },
+    // 监听ws消息通知
+    wsMessage (a, b) {
+      if (a !== b && a) {
+        // 新未读消息
+        if (a.type == 'new_remind') {
+          if (this.nowRoute.indexOf('notice') < 0) {
+            this.getNotes()
+          }
+          // 播放音效
+          this.playAudio()
+        }
+      }
+    },
+    // 打印预览
     '$store.state.app.showPdfPrintView' (newValue, oldValue) {
     '$store.state.app.showPdfPrintView' (newValue, oldValue) {
-      console.log(newValue)
       if (newValue) {
       if (newValue) {
         this.showPdfView = newValue
         this.showPdfView = newValue
         this.$nextTick(() => {
         this.$nextTick(() => {
@@ -205,8 +250,8 @@ export default {
         })
         })
       }
       }
     },
     },
+    // 选择打印机
     '$store.state.app.showSelectPrint' (newValue, oldValue) {
     '$store.state.app.showSelectPrint' (newValue, oldValue) {
-      console.log(newValue)
       if (newValue) {
       if (newValue) {
         this.showSelectPrint = newValue
         this.showSelectPrint = newValue
       }
       }
@@ -220,12 +265,14 @@ export default {
       const noqx = asyncRouterMap.find((item) => item.path === '/').children
       const noqx = asyncRouterMap.find((item) => item.path === '/').children
       this.menus = [noqx.find(item => item.path === '/home')]
       this.menus = [noqx.find(item => item.path === '/home')]
     }
     }
+
     // 重置主题,字体,布局
     // 重置主题,字体,布局
     this.collapsed = !this.sidebarOpened
     this.collapsed = !this.sidebarOpened
     this.$store.dispatch('ToggleMultiTab', true)
     this.$store.dispatch('ToggleMultiTab', true)
     this.$store.dispatch('ToggleColor', '#2A86F4')
     this.$store.dispatch('ToggleColor', '#2A86F4')
     this.$store.dispatch('ToggleTheme', localStorage.getItem('DEFAULT_THEME') || 'dark')
     this.$store.dispatch('ToggleTheme', localStorage.getItem('DEFAULT_THEME') || 'dark')
     this.$store.dispatch('ToggleFontSize', localStorage.getItem('DEFAULT_FONT_SIZE') || 'small')
     this.$store.dispatch('ToggleFontSize', localStorage.getItem('DEFAULT_FONT_SIZE') || 'small')
+
     // 判断是否是当月25日后
     // 判断是否是当月25日后
     this.$store.state.app.isLastDayForMonth = moment().date() >= 25
     this.$store.state.app.isLastDayForMonth = moment().date() >= 25
     if (this.$store.state.app.isLastDayForMonth && this.$hasPermissions('M_mothEndTips')) {
     if (this.$store.state.app.isLastDayForMonth && this.$hasPermissions('M_mothEndTips')) {
@@ -242,6 +289,9 @@ export default {
     this.$store.commit('SET_printLoading', false)
     this.$store.commit('SET_printLoading', false)
     this.$store.commit('SET_printDefNeedle', localStorage.getItem('DEFAULT_PRINT_NEEDLE') || undefined)
     this.$store.commit('SET_printDefNeedle', localStorage.getItem('DEFAULT_PRINT_NEEDLE') || undefined)
     this.$store.commit('SET_printDefInk', localStorage.getItem('DEFAULT_PRINT_INK') || undefined)
     this.$store.commit('SET_printDefInk', localStorage.getItem('DEFAULT_PRINT_INK') || undefined)
+
+    // 消息通知
+    this.getNotes()
   },
   },
   mounted () {
   mounted () {
     const userAgent = navigator.userAgent
     const userAgent = navigator.userAgent
@@ -255,7 +305,12 @@ export default {
     }
     }
   },
   },
   methods: {
   methods: {
-    ...mapActions(['setSidebar']),
+    ...mapActions([
+      'setSidebar',
+      'getMessageList', // 查询列表
+      'hasRead' // 设置已读
+    ]),
+    reloadView () {},
     // 关闭视频弹窗
     // 关闭视频弹窗
     closeVido () {
     closeVido () {
       store.commit('IS_ShOW_VIDEO', false)
       store.commit('IS_ShOW_VIDEO', false)
@@ -279,11 +334,83 @@ export default {
     drawerClose () {
     drawerClose () {
       this.collapsed = false
       this.collapsed = false
     },
     },
-    reloadView () {
-      this.isRouterAlive = false
-      this.$nextTick(() => {
-        this.isRouterAlive = true
+    playAudio () {
+      this.$refs.audio.currentTime = 0// 从头开始播放
+      this.$refs.audio.play() // 播放
+    },
+    // 获取最新消息
+    getNotes () {
+      this.getMessageList({
+        pageNo: 1,
+        pageSize: 5,
+        notice: {
+          type: 'tx'
+        },
+        readFlag: 0
+      }).then((res) => {
+        if (res.status == 200) {
+          const data = res.data
+          for (var i = 0; i < data.list.length; i++) {
+            if (data.list[i].notice.extInfo) {
+              data.list[i].notice.extInfo = JSON.parse(data.list[i].notice.extInfo)
+            }
+          }
+          this.notesList = res.data.list
+        } else {
+          this.notesList = []
+        }
       })
       })
+    },
+    toAction (data) {
+      console.log(this.nowRoute)
+      // 急送订单
+      if (data.notice.extInfo.bizType == 'TEMP_ORDER') {
+        if (this.nowRoute.indexOf('salesManagement/salesQuery/detail') >= 0) {
+          this.$router.go(-1)
+        }
+        setTimeout(() => {
+          this.$router.push({ name: 'salesDetail', params: { sn: data.notice.extInfo.bizSn } })
+        }, 500)
+      }
+      // 补货订单
+      if (data.notice.extInfo.bizType == 'SHELF_REPLENISH') {
+        this.$router.push({ name: 'replenishmentManagement', query: { bizType: 'WAIT_CONFIRM' } })
+      }
+      // 货架订单
+      if (data.notice.extInfo.bizType == 'SHELF_ORDER') {
+        if (this.nowRoute.indexOf('numsGoodsShelves/shelfOrder/shelfOrderDetail') >= 0) {
+          this.$router.go(-1)
+        }
+        setTimeout(() => {
+          this.$router.push({ name: 'shelfOrderDetail', params: { sn: data.notice.extInfo.bizSn } })
+        }, 500)
+      }
+      // 货架异常
+      if (data.notice.extInfo.bizType == 'SHELF_WARN') {
+        if (this.nowRoute.indexOf('numsGoodsShelves/shelfOrder/list') >= 0) {
+          this.$router.go(-1)
+        }
+        setTimeout(() => {
+          this.$router.push({ name: 'shelfOrderList', query: { bizType: 'SHELF_WARN', shelfSn: data.notice.extInfo.bizSn } })
+        }, 500)
+      }
+      // 设置已读
+      this.setRead(data)
+    },
+    // 设置已读
+    setRead (row) {
+      this.hasRead({ msg_id: row.id }).then(res => {
+        // 刷新列表
+        if (res.status == 200) {
+          this.getNotes()
+        }
+      })
+    },
+    toNotes () {
+      this.$router.push({ path: '/notice' })
+    },
+    noDoNotes () {
+      this.notesList = []
     }
     }
   }
   }
 }
 }
@@ -291,4 +418,44 @@ export default {
 
 
 <style lang="less">
 <style lang="less">
 @import url('../components/global.less');
 @import url('../components/global.less');
+.notes-box{
+  position:fixed;
+  right:0;
+  bottom:0;
+  min-width:400px;
+  z-index: 10000;
+  .ant-alert-with-description .ant-alert-close-icon{
+    top: 13px;
+  }
+  .ant-alert, .ant-alert-info{
+    padding: 10px 30px!important;
+  }
+  .ant-alert .ant-alert-icon, .ant-alert-info .ant-alert-icon{
+    top: 16px !important;
+    left: 10px !important;
+    font-size: 18px;
+  }
+  .ant-alert-with-description .ant-alert-description{
+    font-size: 14px;
+  }
+  .notes-footer{
+    display:flex;
+    background: #fff;
+    border: 1px solid #eee;
+    border-radius: 5px 5px 0 0;
+    > div{
+      width: 50%;
+      &:first-child{
+        border-right:1px solid #eee;
+      }
+    }
+    .notes-more{
+      padding: 10px;
+      text-align:center;
+      color:#00aaff;
+      font-size: 14px;
+      cursor:pointer;
+    }
+  }
+}
 </style>
 </style>

+ 18 - 9
src/libs/JGPrint.js

@@ -29,25 +29,34 @@ export const JGPrintTag = function (width, height, data) {
   LODOP.PRINT_INITA("0mm","0mm",width,height,"标签");
   LODOP.PRINT_INITA("0mm","0mm",width,height,"标签");
   LODOP.SET_SHOW_MODE('HIDE_PAPER_BOARD', 1) //  隐藏底图上有模拟走纸板的条纹线
   LODOP.SET_SHOW_MODE('HIDE_PAPER_BOARD', 1) //  隐藏底图上有模拟走纸板的条纹线
   LODOP.SET_PRINT_MODE('POS_BASEON_PAPER', true) // 可使输出以纸张边缘为基点
   LODOP.SET_PRINT_MODE('POS_BASEON_PAPER', true) // 可使输出以纸张边缘为基点
-  const top = data.dealerName.length > 12 ? '5mm' : '7mm';
-  const top1 = data.dealerName.length > 12 ? '17mm' : '15mm';
-  const top2 = data.dealerName.length > 12 ? '29mm' : '27mm';
+  const top = 3;
+  const tline = (data.dealerName.length > 14 ? 2 : 1);
+  const tline1 = (data.shelfName.length > 17 ? 2 : 1);
+  const top0 = top + tline * 5;
+  const top1 = top0 + 5;
+  const top2 = top1 + 12;
   // 经销商名称
   // 经销商名称
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
-  LODOP.SET_PRINT_STYLE("FontSize",11);
-  LODOP.ADD_PRINT_TEXT(top,"5mm","50mm","10mm",data.dealerName);
+  LODOP.SET_PRINT_STYLE("FontSize",10);
+  LODOP.ADD_PRINT_TEXT(top+'mm',"3mm","54mm","10mm",data.dealerName);
+  LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
+  LODOP.SET_PRINT_STYLEA(0,"Horient",2);
+  // 货架名称
+  LODOP.SET_PRINT_STYLE("TextNeatRow",true);
+  LODOP.SET_PRINT_STYLE("FontSize",9);
+  LODOP.ADD_PRINT_TEXT(top0+'mm',"3mm","54mm","10mm",tline1>1?data.shelfName.substring(0,14)+'...':data.shelfName);
   LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
   LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
   LODOP.SET_PRINT_STYLEA(0,"Horient",2);
   LODOP.SET_PRINT_STYLEA(0,"Horient",2);
   // 货位号
   // 货位号
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
   LODOP.SET_PRINT_STYLE("FontSize",32);
   LODOP.SET_PRINT_STYLE("FontSize",32);
-  LODOP.ADD_PRINT_TEXT(top1,"50%","28mm","15mm",data.shelfPlaceCode);
+  LODOP.ADD_PRINT_TEXT(top1+'mm',"50%","28mm","15mm",data.shelfPlaceCode);
   // 产品编码
   // 产品编码
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
   LODOP.SET_PRINT_STYLE("TextNeatRow",true);
-  LODOP.SET_PRINT_STYLE("FontSize",11);
-  LODOP.ADD_PRINT_TEXT(top2,"50%","30mm","15mm",data.productCode);
+  LODOP.SET_PRINT_STYLE("FontSize",12);
+  LODOP.ADD_PRINT_TEXT(top2+'mm',"50%","30mm","15mm",data.productCode);
   // 二维码
   // 二维码
-  LODOP.ADD_PRINT_BARCODE(top1,'7mm',90,90,"QRCode",data.qrCodeContent)
+  LODOP.ADD_PRINT_BARCODE(top1+'mm','7mm',80,80,"QRCode",data.qrCodeContent)
   LODOP.SET_PRINT_STYLE("QRCodeVersion",5)
   LODOP.SET_PRINT_STYLE("QRCodeVersion",5)
   // LODOP.SET_PRINT_STYLE("QRCodeErrorLevel",'H')
   // LODOP.SET_PRINT_STYLE("QRCodeErrorLevel",'H')
   LODOP.SET_PRINT_COPIES(data.printQty)// 指定份数
   LODOP.SET_PRINT_COPIES(data.printQty)// 指定份数

+ 11 - 1
src/store/modules/websocketStore.js

@@ -1,5 +1,5 @@
 // import Vue from 'vue'
 // import Vue from 'vue'
-import { noticeUserList, hasRead, getUnreadCount } from '@/api/noticeUser'
+import { noticeUserList, hasRead, getUnreadCount, setReadAllNotice } from '@/api/noticeUser'
 export default {
 export default {
   state: {
   state: {
     websock: null,
     websock: null,
@@ -115,6 +115,16 @@ export default {
         })
         })
       })
       })
     },
     },
+    // 全部已读 
+    setAllNoticeRead({ state, commit }) {
+      return new Promise((resolve, reject) => {
+        setReadAllNotice().then((res) => {
+          resolve(res)
+        }).catch(error => {
+          reject(error)
+        })
+      })
+    },
     // 更新未读数
     // 更新未读数
     updateUnreadcount ({ state, commit }, count) {
     updateUnreadcount ({ state, commit }, count) {
       commit('setMessageCount', count)
       commit('setMessageCount', count)

+ 157 - 0
src/views/basicData/notificationManage/list.vue

@@ -0,0 +1,157 @@
+<template>
+  <a-card size="small" :bordered="false" class="customerTypeList-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 搜索条件 -->
+      <div ref="tableSearch" class="table-page-search-wrapper"></div>
+      <!-- 列表 -->
+      <a-table
+        class="sTable fixPagination"
+        ref="table"
+        :style="{ height: tableHeight+84.5+'px' }"
+        size="small"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data-source="loadData"
+        :scroll="{ y: tableHeight }"
+        bordered>
+        <!-- 操作 -->
+        <template slot="action1" slot-scope="text, record, index">
+          <a-checkbox :checked="text==1" @change="onChange(0,record)"></a-checkbox>
+        </template>
+        <template slot="action2" slot-scope="text, record, index">
+          <a-checkbox :checked="text==1" @change="onChange(1,record)"></a-checkbox>
+        </template>
+        <template slot="action3" slot-scope="text, record, index">
+          <a-checkbox :checked="text==1" @change="onChange(2,record)"></a-checkbox>
+        </template>
+        <template slot="action4" slot-scope="text, record, index">
+          <a-checkbox :checked="text==1" @change="onChange(3,record)"></a-checkbox>
+        </template>
+        <template slot="action5" slot-scope="text, record, index">
+          <a-checkbox :checked="text==1" @change="onChange(4,record)"></a-checkbox>
+        </template>
+      </a-table>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { noticeUserBizQuery, noticeUserBizSave } from '@/api/noticeUser'
+import { STable, VSelect } from '@/components'
+export default {
+  name: 'NotificationManageList',
+  components: { STable, VSelect },
+  mixins: [commonMixin],
+  data () {
+    return {
+      spinning: false,
+      tableHeight: 0,
+      disabled: false, //  查询、重置按钮是否可操作
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '用户名称', dataIndex: 'userName', width: '45%', align: 'center', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '急送提醒', dataIndex: 'tempOrderFlag', scopedSlots: { customRender: 'action1' }, width: '10%', align: 'center' },
+        { title: '补货提醒', dataIndex: 'shelfReplenishFlag', scopedSlots: { customRender: 'action2' }, width: '10%', align: 'center' },
+        { title: '订单提醒', dataIndex: 'shelfOrderFlag', scopedSlots: { customRender: 'action3' }, width: '10%', align: 'center' },
+        { title: '货架异常提醒', dataIndex: 'shelfWarnFlag', scopedSlots: { customRender: 'action4' }, width: '10%', align: 'center' },
+        { title: '全选', dataIndex: 'allFlag', scopedSlots: { customRender: 'action5' }, width: '10%', align: 'center' }
+      ],
+      loadData: [],
+      openModal: false, //  新增编辑客户类型  弹框
+      itemId: '', //  当前id
+      nowData: null //  当前记录数据
+    }
+  },
+  methods: {
+    onChange (index, record) {
+      console.log(index, record)
+      const key = ['tempOrderFlag', 'shelfReplenishFlag', 'shelfOrderFlag', 'shelfWarnFlag', 'allFlag']
+      record[key[index]] = record[key[index]] ? 0 : 1
+      // 全选
+      if (index == 4) {
+        const flag = record[key[index]]
+        key.map(item => {
+          record[item] = flag ? 1 : 0
+        })
+      } else {
+        const ret = []
+        key.map(item => {
+          if (item != 'allFlag') {
+            ret.push(record[item])
+          }
+        })
+        record['allFlag'] = ret.filter(item => item == 1).length == 4 ? 1 : 0
+      }
+      // 保存数据
+      const noticeTypeList = []
+      const keys = ['temp_order', 'shelf_replenish', 'shelf_order', 'shelf_warn']
+      key.map((item, i) => {
+        if (item != 'allFlag' && record[item] == 1) {
+          noticeTypeList.push(keys[i])
+        }
+      })
+      this.spinning = true
+      noticeUserBizSave({
+        userSn: record.userSn,
+        noticeTypeList: noticeTypeList
+      }).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+        }
+        this.spinning = false
+        this.getData()
+      })
+    },
+    getData () {
+      this.spinning = true
+      noticeUserBizQuery().then(res => {
+        const data = res.data
+        if (res.status == 200) {
+          const no = 0
+          for (var i = 0; i < data.length; i++) {
+            data[i].no = no + i + 1
+            const key = ['tempOrderFlag', 'shelfReplenishFlag', 'shelfOrderFlag', 'shelfWarnFlag', 'allFlag']
+            const ret = []
+            key.map(item => {
+              if (data[i][item] == 1) {
+                ret.push(1)
+              }
+            })
+            data[i].allFlag = ret.length == 4 ? 1 : 0
+          }
+        }
+        this.loadData = data
+        this.spinning = false
+      })
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+      this.getData()
+    },
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 200
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+    }
+  }
+}
+</script>

+ 8 - 1
src/views/common/shelfList.js

@@ -3,6 +3,9 @@ const shelfSList = {
   template: `
   template: `
       <a-select
       <a-select
         placeholder="请选择货架"
         placeholder="请选择货架"
+        :maxTagCount="3"
+        :maxTagTextLength="mode=='default'?20:8"
+        :mode="mode"
         :id="id"
         :id="id"
         allowClear
         allowClear
         :value="defaultVal"
         :value="defaultVal"
@@ -16,12 +19,16 @@ const shelfSList = {
     `,
     `,
   props: {
   props: {
     value: {
     value: {
-      type: String,
+      type: [String,Array],
       defatut: ''
       defatut: ''
     },
     },
     id: {
     id: {
       type: String,
       type: String,
       default: ''
       default: ''
+    },
+    mode: {
+      type: String,
+      defatut: 'default'
     }
     }
   },
   },
   data () {
   data () {

+ 34 - 5
src/views/notice/detailModal.vue

@@ -15,10 +15,15 @@
         <a-descriptions-item label="公告标题">{{ detailsData&&detailsData.title||'--' }}</a-descriptions-item>
         <a-descriptions-item label="公告标题">{{ detailsData&&detailsData.title||'--' }}</a-descriptions-item>
         <a-descriptions-item label="发布时间">{{ detailsData&&detailsData.releaseDate||'--' }}</a-descriptions-item>
         <a-descriptions-item label="发布时间">{{ detailsData&&detailsData.releaseDate||'--' }}</a-descriptions-item>
         <a-descriptions-item label="公告内容" :span="2">
         <a-descriptions-item label="公告内容" :span="2">
-          <div v-if="detailsData&&detailsData.content" v-html="detailsData.content" class="editor-box"></div>
-          <span v-else>--</span>
+          <div style="display:flex;">
+            <div v-if="detailsData&&detailsData.content" v-html="detailsData.content" class="editor-box"></div>
+            <span v-else>--</span>
+            <a-button v-if="detailsData&&detailsData.type=='tx'" @click="toAction(detailsData)" size="small" type="link" class="button-info">
+              {{ detailsData.extInfo.bizType == 'SHELF_REPLENISH' ? '立即处理':'点击查看' }}
+            </a-button>
+          </div>
         </a-descriptions-item>
         </a-descriptions-item>
-        <a-descriptions-item label="图片" :span="2">
+        <a-descriptions-item label="图片" :span="2" v-if="detailsData.type !== 'tx'">
           <div style="display: flex;">
           <div style="display: flex;">
             <p class="pic-box" v-for="(item,index) in imgPathsArr" :key="index">
             <p class="pic-box" v-for="(item,index) in imgPathsArr" :key="index">
               <img :src="item" title="点击查看大图" class="productPic" @click="getPreview(item)" />
               <img :src="item" title="点击查看大图" class="productPic" @click="getPreview(item)" />
@@ -26,7 +31,7 @@
           </div>
           </div>
           <span v-if="imgPathsArr.length == 0">--</span>
           <span v-if="imgPathsArr.length == 0">--</span>
         </a-descriptions-item>
         </a-descriptions-item>
-        <a-descriptions-item label="附件" :span="2">
+        <a-descriptions-item label="附件" :span="2" v-if="detailsData.type !== 'tx'">
           <p style="margin: 0 0 5px;" v-for="(item,index) in attachPathsArr" :key="index">
           <p style="margin: 0 0 5px;" v-for="(item,index) in attachPathsArr" :key="index">
             <a :href="item.filePath" :download="item.fileName" class="attachLink">{{ item.fileName }}</a>
             <a :href="item.filePath" :download="item.fileName" class="attachLink">{{ item.fileName }}</a>
           </p>
           </p>
@@ -70,6 +75,8 @@ export default {
         str = '企业新闻'
         str = '企业新闻'
       } else if (this.detailsData && this.detailsData.type == 'news_trade') {
       } else if (this.detailsData && this.detailsData.type == 'news_trade') {
         str = '行业咨询'
         str = '行业咨询'
+      } else if (this.detailsData && this.detailsData.type == 'tx') {
+        str = '提醒'
       } else {
       } else {
         str = '--'
         str = '--'
       }
       }
@@ -79,7 +86,7 @@ export default {
       let str = ''
       let str = ''
       if (this.detailsData && this.detailsData.toAppName == '1,2') {
       if (this.detailsData && this.detailsData.toAppName == '1,2') {
         str = '所有'
         str = '所有'
-      } else if (this.detailsData && this.detailsData.toAppName == '2') {
+      } else if (this.detailsData && this.detailsData.toAppName == '2' || this.detailsData.type == 'tx') {
         str = '经销商'
         str = '经销商'
       } else if (this.detailsData && this.detailsData.toAppName == '1') {
       } else if (this.detailsData && this.detailsData.toAppName == '1') {
         str = '总部'
         str = '总部'
@@ -117,11 +124,33 @@ export default {
       noticeUserDetail({ id: this.itemId }).then(res => {
       noticeUserDetail({ id: this.itemId }).then(res => {
         if (res.status == 200) {
         if (res.status == 200) {
           this.detailsData = res.data
           this.detailsData = res.data
+          if (this.detailsData.extInfo) {
+            this.detailsData.extInfo = JSON.parse(this.detailsData.extInfo)
+          }
         } else {
         } else {
           this.detailsData = null
           this.detailsData = null
         }
         }
       })
       })
     },
     },
+    toAction (data) {
+      // 急送订单
+      if (this.detailsData.extInfo.bizType == 'TEMP_ORDER') {
+        this.$router.push({ name: 'salesDetail', params: { sn: this.detailsData.extInfo.bizSn } })
+      }
+      // 补货订单
+      if (this.detailsData.extInfo.bizType == 'SHELF_REPLENISH') {
+        this.$router.push({ name: 'replenishmentManagement', query: { bizType: 'WAIT_CONFIRM' } })
+      }
+      // 货架订单
+      if (this.detailsData.extInfo.bizType == 'SHELF_ORDER') {
+        this.$router.push({ name: 'shelfOrderDetail', params: { sn: this.detailsData.extInfo.bizSn } })
+      }
+      // 货架异常
+      if (this.detailsData.extInfo.bizType == 'SHELF_WARN') {
+        this.$router.push({ name: 'shelfOrderList', query: { bizType: 'SHELF_WARN', shelfSn: this.detailsData.extInfo.bizSn } })
+      }
+      this.isShow = false
+    },
     // 查看大图
     // 查看大图
     getPreview (url) {
     getPreview (url) {
       this.previewImage = url
       this.previewImage = url

+ 124 - 15
src/views/notice/list.vue

@@ -9,9 +9,30 @@
               <rangeDate ref="rangeDate" @change="dateChange" />
               <rangeDate ref="rangeDate" @change="dateChange" />
             </a-form-item>
             </a-form-item>
           </a-col>
           </a-col>
-          <a-col :md="6" :sm="24">
-            <a-form-item label="公告名称">
-              <a-input id="noticeList-title" v-model.trim="queryParam.notice.title" allowClear placeholder="请输入公告名称"/>
+          <a-col :md="4" :sm="24">
+            <a-form-item label="标题">
+              <a-input v-model.trim="queryParam.notice.title" allowClear placeholder="请输入标题"/>
+            </a-form-item>
+          </a-col>
+          <a-col :md="4" :sm="24">
+            <a-form-item label="类别">
+              <a-select v-model.trim="queryParam.notice.type" allowClear placeholder="请选择类别">
+                <a-select-option v-for="item in typeList" :key="item.val" :value="item.val">
+                  {{ item.text }}
+                </a-select-option>
+              </a-select>
+            </a-form-item>
+          </a-col>
+          <a-col :md="4" :sm="24">
+            <a-form-item label="状态">
+              <a-select v-model.trim="queryParam.readFlag" allowClear placeholder="请选择状态">
+                <a-select-option value="0">
+                  未读
+                </a-select-option>
+                <a-select-option value="1">
+                  已读
+                </a-select-option>
+              </a-select>
             </a-form-item>
             </a-form-item>
           </a-col>
           </a-col>
           <a-col :md="6" :sm="24">
           <a-col :md="6" :sm="24">
@@ -20,12 +41,17 @@
           </a-col>
           </a-col>
         </a-row>
         </a-row>
       </a-form>
       </a-form>
+      <!-- 操作按钮 -->
+      <div class="table-operator">
+        <a-button type="primary" class="button-error" @click="handleSetRead">设置全部已读</a-button>
+      </div>
     </div>
     </div>
     <!-- 列表 -->
     <!-- 列表 -->
     <a-table
     <a-table
       class="sTable fixPagination"
       class="sTable fixPagination"
       ref="table"
       ref="table"
       :style="{ height: tableHeight+84.5+'px' }"
       :style="{ height: tableHeight+84.5+'px' }"
+      :scroll="{ y:tableHeight+40 }"
       size="small"
       size="small"
       :rowKey="(record) => record.id"
       :rowKey="(record) => record.id"
       :columns="columns"
       :columns="columns"
@@ -36,9 +62,20 @@
       <!-- 操作 -->
       <!-- 操作 -->
       <template slot="action" slot-scope="text, record">
       <template slot="action" slot-scope="text, record">
         <a-badge :count="record.readFlag=='0'? 1 : 0" dot>
         <a-badge :count="record.readFlag=='0'? 1 : 0" dot>
-          <a-button size="small" type="primary" class="button-success" @click="handleDetail(record)" id="noticeList-detail-btn">详情</a-button>
+          <a-button size="small" type="link" class="button-success" @click="handleDetail(record)">详情</a-button>
         </a-badge>
         </a-badge>
       </template>
       </template>
+      <!-- type-->
+      <template slot="type" slot-scope="text, record">
+        {{ text?typeList.find(item => item.val == text).text:'--' }}
+      </template>
+      <!-- 内容 content-->
+      <template slot="content" slot-scope="text, record">
+        {{ text?text.slice(0,30)+(text.length>30?'...':''):'--' }}
+        <a-button v-if="record.notice&&record.notice.type=='tx'" @click="toAction(record)" size="small" type="link" class="button-info">
+          {{ record.notice.extInfo.bizType == 'SHELF_REPLENISH' ? '立即处理':'点击查看' }}
+        </a-button>
+      </template>
     </a-table>
     </a-table>
     <!-- 分页 -->
     <!-- 分页 -->
     <tablePagination
     <tablePagination
@@ -69,17 +106,21 @@ export default {
       queryParam: { //  查询条件
       queryParam: { //  查询条件
         beginDate: '',
         beginDate: '',
         endDate: '',
         endDate: '',
+        readFlag: undefined,
         notice: {
         notice: {
-          title: ''
+          title: '',
+          type: undefined
         }
         }
       },
       },
       tableHeight: 0,
       tableHeight: 0,
       disabled: false, //  查询、重置按钮是否可操作
       disabled: false, //  查询、重置按钮是否可操作
       columns: [
       columns: [
-        { title: '序号', dataIndex: 'no', width: 80, align: 'center' },
-        { title: '发布时间', dataIndex: 'createDate', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '公告名称', dataIndex: 'notice.title', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: 200, align: 'center' }
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '发布时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '类别', dataIndex: 'notice.type', scopedSlots: { customRender: 'type' }, width: '15%', align: 'center' },
+        { title: '标题', dataIndex: 'notice.title', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '内容', dataIndex: 'notice.plainContent', scopedSlots: { customRender: 'content' }, width: '35%', align: 'center' },
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'center' }
       ],
       ],
       loadData: [],
       loadData: [],
       paginationProps: {
       paginationProps: {
@@ -89,7 +130,25 @@ export default {
       },
       },
       listLoading: false,
       listLoading: false,
       openModal: false, //  查看客户详情  弹框
       openModal: false, //  查看客户详情  弹框
-      itemId: '' //  当前id
+      itemId: '', //  当前id
+      typeList: [
+        {
+          text: '公告',
+          val: 'notity'
+        },
+        {
+          text: '企业新闻',
+          val: 'news_company'
+        },
+        {
+          text: '行业咨询',
+          val: 'news_trade'
+        },
+        {
+          text: '提醒',
+          val: 'tx'
+        }
+      ]
     }
     }
   },
   },
   computed: {
   computed: {
@@ -101,12 +160,54 @@ export default {
   methods: {
   methods: {
     ...mapActions([
     ...mapActions([
       'getMessageList', // 查询列表
       'getMessageList', // 查询列表
+      'setAllNoticeRead',
       'hasRead' // 设置已读
       'hasRead' // 设置已读
     ]),
     ]),
     //  时间  change
     //  时间  change
     dateChange (date) {
     dateChange (date) {
-      this.queryParam.beginDate = date[0] ? date[0]: ''
-      this.queryParam.endDate = date[1] ? date[1]: ''
+      this.queryParam.beginDate = date[0] ? date[0] : ''
+      this.queryParam.endDate = date[1] ? date[1] : ''
+    },
+    handleSetRead () {
+      const _this = this
+      this.$confirm({
+        title: '提示',
+        content: '确认将所有未读消息标记为已读?',
+        centered: true,
+        closable: true,
+        onOk () {
+          _this.setAllNoticeRead().then(res => {
+           	if (res.status == 200) {
+              _this.$message.info(res.message)
+              _this.resetSearchForm()
+           	}
+          })
+        }
+      })
+    },
+    toAction (data) {
+      // 急送订单
+      if (data.notice.extInfo.bizType == 'TEMP_ORDER') {
+        this.$router.push({ name: 'salesDetail', params: { sn: data.notice.extInfo.bizSn } })
+      }
+      // 补货订单
+      if (data.notice.extInfo.bizType == 'SHELF_REPLENISH') {
+        this.$router.push({ name: 'replenishmentManagement', query: { bizType: 'WAIT_CONFIRM' } })
+      }
+      // 货架订单
+      if (data.notice.extInfo.bizType == 'SHELF_ORDER') {
+        this.$router.push({ name: 'shelfOrderDetail', params: { sn: data.notice.extInfo.bizSn } })
+      }
+      // 货架异常
+      if (data.notice.extInfo.bizType == 'SHELF_WARN') {
+        this.$router.push({ name: 'shelfOrderList', query: { bizType: 'SHELF_WARN', shelfSn: data.notice.extInfo.bizSn } })
+      }
+      this.hasRead({ msg_id: data.id }).then(res => {
+        // 刷新列表
+        if (res.status == 200) {
+          this.handelSearch()
+        }
+      })
     },
     },
     // 查询列表
     // 查询列表
     handelSearch (pageNo) {
     handelSearch (pageNo) {
@@ -115,8 +216,10 @@ export default {
       const params = {
       const params = {
         pageNo: this.paginationProps.current,
         pageNo: this.paginationProps.current,
         pageSize: this.paginationProps.pageSize,
         pageSize: this.paginationProps.pageSize,
+        readFlag: this.queryParam.readFlag,
         notice: {
         notice: {
-          title: this.queryParam.notice.title
+          title: this.queryParam.notice.title,
+          type: this.queryParam.notice.type
         },
         },
         beginDate: this.queryParam.beginDate,
         beginDate: this.queryParam.beginDate,
         endDate: this.queryParam.endDate
         endDate: this.queryParam.endDate
@@ -132,8 +235,12 @@ export default {
           const no = (data.pageNo - 1) * data.pageSize
           const no = (data.pageNo - 1) * data.pageSize
           for (var i = 0; i < data.list.length; i++) {
           for (var i = 0; i < data.list.length; i++) {
             data.list[i].no = no + i + 1
             data.list[i].no = no + i + 1
+            if (data.list[i].notice && data.list[i].notice.extInfo) {
+              data.list[i].notice.extInfo = JSON.parse(data.list[i].notice.extInfo)
+            }
           }
           }
           this.loadData = data.list
           this.loadData = data.list
+          console.log(this.loadData)
           this.disabled = false
           this.disabled = false
         } else {
         } else {
           this.paginationProps.total = 0
           this.paginationProps.total = 0
@@ -163,14 +270,16 @@ export default {
       this.$refs.rangeDate.resetDate()
       this.$refs.rangeDate.resetDate()
       this.queryParam.beginDate = ''
       this.queryParam.beginDate = ''
       this.queryParam.endDate = ''
       this.queryParam.endDate = ''
+      this.queryParam.readFlag = undefined
       this.queryParam.notice.title = undefined
       this.queryParam.notice.title = undefined
+      this.queryParam.notice.type = undefined
       this.paginationProps.total = 0
       this.paginationProps.total = 0
       this.paginationProps.current = 1
       this.paginationProps.current = 1
       this.paginationProps.pageSize = 20
       this.paginationProps.pageSize = 20
     },
     },
     //  详情
     //  详情
     handleDetail (row) {
     handleDetail (row) {
-      this.itemId = row.notice.id
+      this.itemId = row.noticeId
       this.openModal = true
       this.openModal = true
       // 设置已读
       // 设置已读
       if (row.readFlag == '0') {
       if (row.readFlag == '0') {
@@ -196,7 +305,7 @@ export default {
     },
     },
     setTableH () {
     setTableH () {
       const tableSearchH = this.$refs.tableSearch.offsetHeight
       const tableSearchH = this.$refs.tableSearch.offsetHeight
-      this.tableHeight = window.innerHeight - tableSearchH - 210
+      this.tableHeight = window.innerHeight - tableSearchH - 240
     }
     }
   },
   },
   watch: {
   watch: {

+ 132 - 0
src/views/numsGoodsShelves/replenishmentManagement/creatReplenishmentOrder.vue

@@ -0,0 +1,132 @@
+<template>
+  <a-modal
+    centered
+    class="creatReplenish-confirm-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="生成补货单"
+    v-model="isShow"
+    @cancel="isShow = false"
+    :width="800">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <div style="padding:0 0 20px;text-align: center;">
+        <h3>请选择需要生成补货单的数字货架</h3>
+        <div style="color:#999;font-size:12px;">(请从左侧选择货架并移动到右侧区域)</div>
+      </div>
+      <!-- 列表 -->
+      <div v-if="isShow">
+        <a-transfer
+          :titles="['货架列表', '已选货架']"
+          :listStyle="{width:'45%',height:'400px'}"
+          :data-source="shelfList"
+          show-search
+          :filter-option="filterOption"
+          :target-keys="targetKeys"
+          :render="item => item.title"
+          @change="handleChange"
+        />
+      </div>
+      <div class="btn-cont">
+        <a-button type="primary" id="creatReplenish-confirm-modal-save" @click="handleSave">确定</a-button>
+        <a-button id="creatReplenish-confirm-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+      </div>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { queryListForSettle, shelfTaskInsertBill } from '@/api/shelfReplenish'
+export default {
+  name: 'ConfirmModal',
+  mixins: [commonMixin],
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    },
+    nowData: {
+      type: Object,
+      default: () => {
+        return {}
+      }
+    }
+  },
+  data () {
+    return {
+      spinning: false,
+      isShow: this.openModal, //  是否打开弹框
+      shelfList: [],
+      targetKeys: []
+    }
+  },
+  methods: {
+    getShelf () {
+      this.spinning = true
+      queryListForSettle().then(res => {
+        if (res.status == 200) {
+          this.shelfList = res.data || []
+          this.shelfList.map(item => {
+            item.title = item.shelfName
+            item.key = item.shelfSn
+          })
+        } else {
+          this.shelfList = []
+        }
+        this.spinning = false
+      })
+    },
+    filterOption (inputValue, option) {
+      return option.title.indexOf(inputValue) > -1
+    },
+    handleChange (targetKeys, direction, moveKeys) {
+      console.log(targetKeys, direction, moveKeys)
+      this.targetKeys = targetKeys
+    },
+    //  确认补货
+    handleSave () {
+      if (this.targetKeys.length == 0) {
+        this.$message.info('请选择货架!')
+        return false
+      }
+
+      this.spinning = true
+      shelfTaskInsertBill(this.targetKeys).then(res => {
+        if (res.status == 200) {
+          this.$message.success(res.message)
+          this.$emit('ok')
+        }
+        this.spinning = false
+      })
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+        this.targetKeys = []
+        this.shelfList = []
+      } else {
+        const _this = this
+        this.$nextTick(() => { // 页面渲染完成后的回调
+          _this.getShelf()
+        })
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+.creatReplenish-confirm-modal {
+	.btn-cont {
+		text-align: center;
+		margin: 35px 0 10px;
+	}
+}
+</style>

+ 9 - 10
src/views/numsGoodsShelves/replenishmentManagement/list.vue

@@ -36,7 +36,7 @@
             </template>
             </template>
             <a-col :md="6" :sm="24">
             <a-col :md="6" :sm="24">
               <span class="table-page-search-submitButtons">
               <span class="table-page-search-submitButtons">
-                <a-button type="info" style="margin-left: 5px" @click="taskIn" :disabled="disabled" >生成补货单</a-button>
+                <a-button type="info" style="margin-left: 5px" @click="openCreatRoModal=true" >生成补货单</a-button>
                 <a-button type="primary" style="margin-left: 5px" @click="queryByTypeSum" :disabled="disabled" id="replenishmentManagementList-refresh">查询</a-button>
                 <a-button type="primary" style="margin-left: 5px" @click="queryByTypeSum" :disabled="disabled" id="replenishmentManagementList-refresh">查询</a-button>
                 <a-button style="margin-left: 5px" @click="resetSearchForm()" :disabled="disabled" id="replenishmentManagementList-reset">重置</a-button>
                 <a-button style="margin-left: 5px" @click="resetSearchForm()" :disabled="disabled" id="replenishmentManagementList-reset">重置</a-button>
                 <a @click="advanced = !advanced" style="margin-left: 5px">
                 <a @click="advanced = !advanced" style="margin-left: 5px">
@@ -100,6 +100,8 @@
       <out-warehousing-modal :openModal="openOutWarehousingModal" :nowData="nowData" @ok="handleOutWarehousingOk" @close="handleCancel" />
       <out-warehousing-modal :openModal="openOutWarehousingModal" :nowData="nowData" @ok="handleOutWarehousingOk" @close="handleCancel" />
       <!-- 签收 -->
       <!-- 签收 -->
       <put-warehousing-modal :openModal="openPutWarehousingModal" :nowData="nowData" @ok="handlePutWarehousingOk" @close="handleCancel" />
       <put-warehousing-modal :openModal="openPutWarehousingModal" :nowData="nowData" @ok="handlePutWarehousingOk" @close="handleCancel" />
+      <!-- 生成补货单 -->
+      <creatReplenishmentOrder :openModal="openCreatRoModal" :nowData="nowData" @ok="resetSearchForm" @close="openCreatRoModal=false" />
     </a-spin>
     </a-spin>
   </a-card>
   </a-card>
 </template>
 </template>
@@ -111,13 +113,14 @@ import getDate from '@/libs/getDate.js'
 import rangeDate from '@/views/common/rangeDate.vue'
 import rangeDate from '@/views/common/rangeDate.vue'
 import shelfSList from '@/views/common/shelfList'
 import shelfSList from '@/views/common/shelfList'
 import confirmModal from './confirmModal.vue'
 import confirmModal from './confirmModal.vue'
+import creatReplenishmentOrder from './creatReplenishmentOrder.vue'
 import stockModal from './stockModal.vue'
 import stockModal from './stockModal.vue'
 import printStickerModal from './printStickerModal.vue'
 import printStickerModal from './printStickerModal.vue'
 import outWarehousingModal from './outWarehousingModal.vue'
 import outWarehousingModal from './outWarehousingModal.vue'
 import putWarehousingModal from './putWarehousingModal.vue'
 import putWarehousingModal from './putWarehousingModal.vue'
-import { shelfReplenishList, shelfReplenishDetailList, shelfReplenishCancel, shelfReplenishStateCount, shelfReplenishDetailStock, shelfReplenishConfirm, shelfReplenishTaskInsertBill, shelfReplenishDelete } from '@/api/shelfReplenish'
+import { shelfReplenishList, shelfReplenishDetailList, shelfReplenishCancel, shelfReplenishStateCount, shelfReplenishDetailStock, shelfReplenishConfirm, shelfReplenishDelete } from '@/api/shelfReplenish'
 export default {
 export default {
-  components: { STable, VSelect, rangeDate, shelfSList, confirmModal, stockModal, printStickerModal, outWarehousingModal, putWarehousingModal },
+  components: { STable, VSelect, rangeDate, shelfSList, confirmModal, creatReplenishmentOrder, stockModal, printStickerModal, outWarehousingModal, putWarehousingModal },
   mixins: [commonMixin],
   mixins: [commonMixin],
   data () {
   data () {
     return {
     return {
@@ -203,19 +206,13 @@ export default {
       openPrintStickerModal: false,
       openPrintStickerModal: false,
       openOutWarehousingModal: false,
       openOutWarehousingModal: false,
       openPutWarehousingModal: false,
       openPutWarehousingModal: false,
+      openCreatRoModal: false,
       validateType: 'confirm',
       validateType: 'confirm',
       stockList: [],
       stockList: [],
       paramsData: null
       paramsData: null
     }
     }
   },
   },
   methods: {
   methods: {
-    // 定时任务
-    taskIn () {
-      shelfReplenishTaskInsertBill().then(res => {
-        this.$message.success(res.message)
-        this.resetSearchForm()
-      })
-    },
     // 确认
     // 确认
     handleConfirm (row) {
     handleConfirm (row) {
       this.nowData = row
       this.nowData = row
@@ -381,6 +378,7 @@ export default {
     },
     },
     // 重置数据
     // 重置数据
     resetData () {
     resetData () {
+      this.openCreatRoModal = false
       this.$refs.rangeDate.resetDate(this.time)
       this.$refs.rangeDate.resetDate(this.time)
       this.queryParam.beginDate = getDate.getCurrMonthDays().starttime
       this.queryParam.beginDate = getDate.getCurrMonthDays().starttime
       this.queryParam.endDate = getDate.getCurrMonthDays().endtime
       this.queryParam.endDate = getDate.getCurrMonthDays().endtime
@@ -434,6 +432,7 @@ export default {
       this.$nextTick(() => { // 页面渲染完成后的回调
       this.$nextTick(() => { // 页面渲染完成后的回调
         _this.setTableH()
         _this.setTableH()
       })
       })
+      this.curBizType = this.$route.query && this.$route.query.bizType || this.curBizType
       this.queryByTypeSum()
       this.queryByTypeSum()
     }
     }
   },
   },

+ 18 - 11
src/views/numsGoodsShelves/replenishmentManagement/printStickerModal.vue

@@ -31,13 +31,13 @@
         <!-- 打印数量 -->
         <!-- 打印数量 -->
         <template slot="printQty" slot-scope="text, record">
         <template slot="printQty" slot-scope="text, record">
           <a-input-number
           <a-input-number
-            v-if="record.confirmQty&&record.confirmQty!=0"
+            v-if="record.maxQty&&record.maxQty!=0"
             size="small"
             size="small"
             id="replenishmentManagement-printSticker-printQty"
             id="replenishmentManagement-printSticker-printQty"
             v-model="record.printQty"
             v-model="record.printQty"
             :precision="0"
             :precision="0"
             :min="1"
             :min="1"
-            :max="record.confirmQty"
+            :max="record.maxQty"
             placeholder="请输入"
             placeholder="请输入"
             style="width: 100%" />
             style="width: 100%" />
           <span v-else>--</span>
           <span v-else>--</span>
@@ -80,14 +80,6 @@ export default {
       spinning: false,
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
       isShow: this.openModal, //  是否打开弹框
       showView: false,
       showView: false,
-      columns: [
-        { title: '产品编码', dataIndex: 'product.code', width: '22%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'product.name', width: '30%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
-        { title: '补货应发数量', dataIndex: 'qty', width: '13%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '实发数量', dataIndex: 'confirmQty', width: '12%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '打印数量', scopedSlots: { customRender: 'printQty' }, width: '15%', align: 'center' },
-        { title: '单位', dataIndex: 'product.unit', width: '8%', align: 'center', customRender: function (text) { return text || '--' } }
-      ],
       // 加载数据方法 必须为 Promise 对象
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
       loadData: parameter => {
         this.disabled = true
         this.disabled = true
@@ -98,7 +90,8 @@ export default {
             data = res.data
             data = res.data
             for (var i = 0; i < data.length; i++) {
             for (var i = 0; i < data.length; i++) {
               data[i].no = i + 1
               data[i].no = i + 1
-              data[i].printQty = data[i].confirmQty
+              data[i].maxQty = data[i].billState == 'FINISH' ? data[i].putQty : data[i].confirmQty
+              data[i].printQty = data[i].billState == 'FINISH' ? data[i].putQty : data[i].confirmQty
             }
             }
             this.disabled = false
             this.disabled = false
             this.listData = data || []
             this.listData = data || []
@@ -116,6 +109,20 @@ export default {
     modalTit () {
     modalTit () {
       const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
       const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
       return '补货单打印贴签——' + hjName
       return '补货单打印贴签——' + hjName
+    },
+    columns () {
+      const ret = [
+        { title: '产品编码', dataIndex: 'product.code', width: '22%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'product.name', width: '30%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '补货应发数量', dataIndex: 'qty', width: '13%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '实发数量', dataIndex: 'confirmQty', width: '12%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '打印数量', scopedSlots: { customRender: 'printQty' }, width: '15%', align: 'center' },
+        { title: '单位', dataIndex: 'product.unit', width: '8%', align: 'center', customRender: function (text) { return text || '--' } }
+      ]
+      if (this.basicInfoData && this.basicInfoData.billState == 'FINISH') {
+        ret.splice(4, 0, { title: '签收数量', dataIndex: 'putQty', width: '12%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } })
+      }
+      return ret
     }
     }
   },
   },
   methods: {
   methods: {

+ 6 - 2
src/views/numsGoodsShelves/replenishmentManagement/printView.vue

@@ -15,16 +15,19 @@
         :key="index"
         :key="index"
         class="print-pages"
         class="print-pages"
         style="font-size: 12px;padding:10pt 15pt;width:300px;margin:0 auto;">
         style="font-size: 12px;padding:10pt 15pt;width:300px;margin:0 auto;">
-        <div class="storeName" style="text-align: center;margin: 5pt 0 10pt;">
+        <div class="storeName" style="text-align: center;margin: 5pt 0 0;">
           {{ nowData.dealerName }}
           {{ nowData.dealerName }}
         </div>
         </div>
+        <div class="storeName" style="text-align: center;margin: 0pt 0 10pt;">
+          {{ nowData.shelfInfo.shelfName }}
+        </div>
         <div style="overflow: hidden;">
         <div style="overflow: hidden;">
           <div style="float: left;">
           <div style="float: left;">
             <div class="qrcode" ref="qrCodeUrl" style="text-align: center;">
             <div class="qrcode" ref="qrCodeUrl" style="text-align: center;">
               <vue-qr :text="`${item.shelfSn}&${item.productCode}&${item.productSn}&${item.shelfPlaceSn}`" :margin="0" :size="70"></vue-qr>
               <vue-qr :text="`${item.shelfSn}&${item.productCode}&${item.productSn}&${item.shelfPlaceSn}`" :margin="0" :size="70"></vue-qr>
             </div>
             </div>
           </div>
           </div>
-          <div style="float: left;padding-left:10pt;">
+          <div style="float: left;padding-left:10pt;width: 60%;">
             <div class="productSno" style="font-size: 30pt;height:30pt;line-height:30pt;">{{ item.shelfPlaceCode }}</div>
             <div class="productSno" style="font-size: 30pt;height:30pt;line-height:30pt;">{{ item.shelfPlaceCode }}</div>
             <div class="productCode" style="margin-top: 2pt;font-size:12pt;">{{ item.productCode }}</div>
             <div class="productCode" style="margin-top: 2pt;font-size:12pt;">{{ item.productCode }}</div>
           </div>
           </div>
@@ -69,6 +72,7 @@ export default {
         const item = this.list[i]
         const item = this.list[i]
         item.dealerName = this.nowData.dealerName
         item.dealerName = this.nowData.dealerName
         item.qrCodeContent = `${item.shelfSn}&${item.productCode}&${item.productSn}&${item.shelfPlaceSn}`
         item.qrCodeContent = `${item.shelfSn}&${item.productCode}&${item.productSn}&${item.shelfPlaceSn}`
+        item.shelfName = this.nowData.shelfInfo.shelfName
         JGPrintTag('60mm', '40mm', item)
         JGPrintTag('60mm', '40mm', item)
       }
       }
     },
     },

+ 1 - 0
src/views/numsGoodsShelves/shelfMonitoring/list.vue

@@ -265,6 +265,7 @@ export default {
     // 货架  change
     // 货架  change
     shelfChange (val, obj) {
     shelfChange (val, obj) {
       this.shelfName = obj && obj.shelfName || ''
       this.shelfName = obj && obj.shelfName || ''
+      this.queryParam.shelfSn = val
     },
     },
     //  查询
     //  查询
     handleSearch () {
     handleSearch () {

+ 135 - 0
src/views/numsGoodsShelves/shelfOrder/detail.vue

@@ -0,0 +1,135 @@
+<template>
+  <div v-if="showPage" class="shelfOrderDetail-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <a-page-header :ghost="false" :backIcon="false" class="shelfOrderDetail-cont" :style="{ padding: !outBizSn ? '16px 24px' : '0px 24px' }">
+        <template slot="subTitle" v-if="!outBizSn">
+          <a href="javascript:;" @click="handleBack"><a-icon type="left"></a-icon> 返回列表</a>
+        </template>
+      </a-page-header>
+      <!-- 基础信息 -->
+      <a-card size="small" :bordered="false" class="shelfOrderDetail-cont">
+        <a-collapse :activeKey="['1']">
+          <a-collapse-panel key="1" header="基础信息">
+            <a-descriptions size="small" :column="3">
+              <a-descriptions-item label="订单编号">{{ detailData&&detailData.orderBillNo || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="货架名称">{{ detailData&&detailData.shelfName || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="下单时间">{{ detailData&&detailData.orderDate || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="下单人员">{{ detailData&&detailData.orderPersonName || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="订单状态"> {{ detailData&&detailData.billStateDictValue || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="VIN" v-if="detailData&&detailData.vin">{{ detailData&&detailData.vin || '--' }}</a-descriptions-item>
+              <a-descriptions-item label="车型" v-if="detailData&&detailData.vehicleModel">{{ detailData&&detailData.vehicleModel || '--' }}</a-descriptions-item>
+            </a-descriptions>
+          </a-collapse-panel>
+        </a-collapse>
+      </a-card>
+      <a-card size="small" :bordered="false" class="pages-wrap">
+        <!-- alert -->
+        <a-alert type="info" style="margin-bottom: 10px;">
+          <div style="display: flex;align-items: center;justify-content: space-between;" slot="message">
+            <div>
+              总款数:<strong>{{ countDetail&&(countDetail.productCategory || countDetail.productCategory==0) ? countDetail.productCategory : '--' }}</strong>;
+              总数量:<strong>{{ countDetail&&(countDetail.totalQty || countDetail.totalQty==0) ? countDetail.totalQty : '--' }}</strong>;
+              总结算金额:<strong>{{ countDetail&&(countDetail.settleAmount || countDetail.settleAmount==0) ? countDetail.settleAmount : '--' }}</strong>;
+            </div>
+          </div>
+        </a-alert>
+        <!-- 列表 -->
+        <a-table
+          class="sTable"
+          ref="table"
+          size="small"
+          :rowKey="(record) => record.id"
+          :columns="columns"
+          :data-source="detailList"
+          :pagination="false"
+          bordered>
+        </a-table>
+      </a-card>
+    </a-spin>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import { orderBillQueryPage, orderBillDetailCount } from '@/api/shelf'
+export default {
+  name: 'SalesDetail',
+  components: { STable, VSelect },
+  mixins: [commonMixin],
+  props: {
+    outBizSn: { //  有值则为弹框,无值则为页面
+      type: [Number, String],
+      default: ''
+    }
+  },
+  data () {
+    return {
+      showPage: false,
+      spinning: false,
+      disabled: false,
+      detailList: [],
+      detailData: null, //  详情数据
+      countDetail: null
+    }
+  },
+  computed: {
+    columns () {
+      const arr = [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '货位号', dataIndex: 'shelfPlaceCode', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品编码', dataIndex: 'productCode', width: '15%', scopedSlots: { customRender: 'productCode' }, align: 'center' },
+        { title: '产品名称', dataIndex: 'productName', width: '40%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '结算价', dataIndex: 'settlePrice', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '下单数量', dataIndex: 'totalQty', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '结算金额小计', dataIndex: 'settleAmount', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+      ]
+      return arr
+    }
+  },
+  methods: {
+    //  返回
+    handleBack () {
+      this.$router.push({ name: 'shelfOrderList' })
+    },
+    getDetail () {
+      this.spinning = true
+      orderBillQueryPage({ pageNo: 1, pageSize: 1, orderBillSn: this.outBizSn || this.$route.params.sn }).then(res => {
+        this.spinning = false
+        this.detailData = res.data.list && res.data.list[0]
+        this.detailList = this.detailData.orderBillDetailApiEntityList
+        this.detailList.map((item, index) => {
+          item.no = index + 1
+        })
+      })
+
+      orderBillDetailCount({ orderBillSn: this.outBizSn || this.$route.params.sn }).then(res => {
+        this.countDetail = res.data || null
+      })
+    },
+    pageInit () {
+      const vm = this
+      vm.$nextTick(() => {
+        vm.spinning = false
+        vm.disabled = false
+        vm.getDetail()
+      })
+    }
+  },
+  activated () {
+    this.showPage = true
+    this.pageInit()
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>
+
+<style lang="less">
+  .shelfOrderDetail-wrap{
+    .shelfOrderDetail-cont{
+      margin-bottom: 10px;
+    }
+  }
+</style>

+ 189 - 0
src/views/numsGoodsShelves/shelfOrder/list.vue

@@ -0,0 +1,189 @@
+<template>
+  <a-card size="small" :bordered="false" class="shelfOrder-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 搜索条件 -->
+      <div ref="tableSearch" class="table-page-search-wrapper">
+        <a-form layout="inline" @keyup.enter.native="$refs.table.refresh(true)">
+          <a-row :gutter="15">
+            <a-col :md="6" :sm="24">
+              <a-form-item label="订单编号">
+                <a-input id="shelfOrder-orderBillNo" v-model.trim="queryParam.orderBillNo" allowClear placeholder="请输入订单编号" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="货架名称">
+                <shelfSList ref="shelfSList" mode="multiple" v-model="queryParam.shelfSnList"></shelfSList>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="下单时间">
+                <rangeDate ref="rangeDate" :value="time" @change="dateChange" />
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24">
+              <a-form-item label="订单状态">
+                <v-select
+                  v-model="queryParam.billState"
+                  ref="billState"
+                  id="shelfOrder-billState"
+                  code="ORDER_BILL_STATE"
+                  placeholder="请选择订单状态"
+                  allowClear></v-select>
+              </a-form-item>
+            </a-col>
+            <a-col :md="6" :sm="24" style="margin-bottom: 10px">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="shelfOrder-refresh">查询</a-button>
+              <a-button style="margin-left: 5px" @click="resetSearchForm(0)" :disabled="disabled" id="shelfOrder-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <!-- 提示 -->
+      <a-alert type="info" style="margin-bottom: 10px" v-if="countData">
+        <div slot="message">总款数:{{ countData.productCategory }};总数量:{{ countData.totalQty }};总结算金额:{{ countData.settleAmount }};</div>
+      </a-alert>
+      <!-- 列表 -->
+      <s-table
+        class="sTable fixPagination"
+        ref="table"
+        :style="{ height: tableHeight+84.5+'px' }"
+        size="small"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ y: tableHeight }"
+        :defaultLoadData="false"
+        bordered>
+        <template slot="orderBillNo" slot-scope="text, record">
+          <span class="table-td-link" @click="handleDetail(record)">{{ record.orderBillNo }}</span>
+        </template>
+        <!-- 操作 -->
+        <template slot="action" slot-scope="text, record">
+          <a-button size="small" type="link" class="button-primary" @click="handleSet(record)">设置</a-button>
+        </template>
+      </s-table>
+    </a-spin>
+  </a-card>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { STable, VSelect } from '@/components'
+import shelfSList from '@/views/common/shelfList'
+import rangeDate from '@/views/common/rangeDate.vue'
+import { orderBillQueryPage, orderBillQueryCount } from '@/api/shelf'
+export default {
+  components: { STable, VSelect, shelfSList, rangeDate },
+  mixins: [commonMixin],
+  data () {
+    return {
+      spinning: false,
+      tableHeight: 0,
+      disabled: false, //  查询、重置按钮是否可操作
+      time: [],
+      queryParam: {
+        orderStartDate: '',
+        orderEndDate: '',
+        shelfSnList: undefined,
+        orderBillNo: '',
+        billState: undefined
+      },
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '订单编号', scopedSlots: { customRender: 'orderBillNo' }, width: '15%', align: 'center' },
+        { title: '货架名称', dataIndex: 'shelfName', width: '34%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '总款数', dataIndex: 'productCategory', align: 'center', width: '8%', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总数量', dataIndex: 'totalQty', align: 'center', width: '8%', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '总结算金额', dataIndex: 'settleAmount', align: 'center', width: '8%', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '下单时间', dataIndex: 'createDate', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '订单状态', dataIndex: 'billStateDictValue', width: '10%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        this.orderBillQueryCount(Object.assign(parameter, this.queryParam))
+        return orderBillQueryPage(Object.assign(parameter, this.queryParam)).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            const no = (data.pageNo - 1) * data.pageSize
+            for (var i = 0; i < data.list.length; i++) {
+              data.list[i].no = no + i + 1
+            }
+            this.disabled = false
+          }
+          this.spinning = false
+          return data
+        })
+      },
+      openModal: false,
+      countData: null
+    }
+  },
+  methods: {
+    //  时间  change
+    dateChange (date) {
+      this.queryParam.orderStartDate = date[0] || null
+      this.queryParam.orderEndDate = date[1] || null
+    },
+    handleDetail (data) {
+      this.$router.push({ name: 'shelfOrderDetail', params: { sn: data.orderBillSn } })
+    },
+    orderBillQueryCount (params) {
+      orderBillQueryCount(params).then(res => {
+        this.countData = res.data || null
+      })
+    },
+    // 重置
+    resetSearchForm (flag) {
+      this.time = []
+      this.$refs.rangeDate.resetDate(this.time)
+      this.queryParam.orderStartDate = ''
+      this.queryParam.orderEndDate = ''
+      this.queryParam.orderBillNo = ''
+      this.queryParam.billState = undefined
+      console.log(flag)
+      if (this.$route.query && this.$route.query.bizType == 'SHELF_WARN' && flag == 1) {
+        this.queryParam.shelfSnList = [this.$route.query.shelfSn]
+      } else {
+        this.queryParam.shelfSnList = undefined
+      }
+      this.$refs.table.refresh(true)
+    },
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 235
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+      this.resetSearchForm(1)
+    }
+  },
+  watch: {
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab || this.$route.query && this.$route.query.bizType == 'SHELF_WARN') {
+      this.pageInit()
+      this.resetSearchForm(1)
+    }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
+  }
+}
+</script>

+ 42 - 9
src/views/numsGoodsShelves/shelfSet/basicInfoModal.vue

@@ -31,6 +31,26 @@
           </template>
           </template>
           <custList ref="custList" :isEnabled="true" @change="custChange"></custList>
           <custList ref="custList" :isEnabled="true" @change="custChange"></custList>
         </a-form-model-item>
         </a-form-model-item>
+        <a-form-model-item prop="showPrice">
+          <template slot="label">
+            <a-tooltip placement="top">
+              <template slot="title">
+                1、非铺货产品,是指不是货架上的产品<br>
+                2、终端会员价,对于汽修厂来说,即进货价<br>
+                3、如果该产品在销售单里有销售记录,则使用最近一次销售价,如果没有销售记录,则使用箭冠总公司的终端会员价
+              </template>
+              价格显示<a-icon type="question-circle" style="color: rgba(0,0,0,.65);font-size: 16px;margin-left: 2px;vertical-align: sub;cursor: pointer;" />
+            </a-tooltip>
+          </template>
+          <a-select v-model="form.showPrice" placeholder="请选择价格显示">
+            <a-select-option value="1">
+              非铺货产品——显示价格
+            </a-select-option>
+            <a-select-option value="0">
+              非铺货产品——不显示价格
+            </a-select-option>
+          </a-select>
+        </a-form-model-item>
       </a-form-model>
       </a-form-model>
       <div class="btn-cont">
       <div class="btn-cont">
         <a-button type="primary" id="shelfSet-basicInfo-modal-save" @click="handleSave">保存</a-button>
         <a-button type="primary" id="shelfSet-basicInfo-modal-save" @click="handleSave">保存</a-button>
@@ -44,7 +64,7 @@
 import { commonMixin } from '@/utils/mixin'
 import { commonMixin } from '@/utils/mixin'
 import { VSelect } from '@/components'
 import { VSelect } from '@/components'
 import custList from '@/views/common/custList.vue'
 import custList from '@/views/common/custList.vue'
-import { shelfSave } from '@/api/shelf'
+import { shelfSave, updateShelfPriceShow } from '@/api/shelf'
 export default {
 export default {
   name: 'ShelfSetBasicInfoModal',
   name: 'ShelfSetBasicInfoModal',
   components: { VSelect, custList },
   components: { VSelect, custList },
@@ -76,11 +96,13 @@ export default {
       },
       },
       form: {
       form: {
         customerSn: undefined,
         customerSn: undefined,
-        shelfName: ''
+        shelfName: '',
+        showPrice: undefined
       },
       },
       rules: {
       rules: {
         shelfName: [{ required: true, message: '请输入货架名称', trigger: 'change' }],
         shelfName: [{ required: true, message: '请输入货架名称', trigger: 'change' }],
-        customerSn: [{ required: true, message: '请选择关联客户', trigger: 'change' }]
+        customerSn: [{ required: true, message: '请选择关联客户', trigger: 'change' }],
+        showPrice: [{ required: true, message: '请选择价格显示', trigger: 'change' }]
       }
       }
     }
     }
   },
   },
@@ -99,12 +121,22 @@ export default {
           _this.spinning = true
           _this.spinning = true
           shelfSave(form).then(res => {
           shelfSave(form).then(res => {
             if (res.status == 200) {
             if (res.status == 200) {
-              _this.$message.success(res.message)
-              setTimeout(() => {
-                _this.isShow = false
-                _this.$emit('ok', res.data)
-                _this.spinning = false
-              }, 100)
+              // 更新价格显示
+              updateShelfPriceShow({
+                shelfSn: form.shelfSn,
+                paramValue: form.showPrice
+              }).then(ret => {
+                if (ret.status == 200) {
+                  _this.$message.success(ret.message)
+                  setTimeout(() => {
+                    _this.isShow = false
+                    _this.$emit('ok', res.data)
+                    _this.spinning = false
+                  }, 100)
+                } else {
+                  _this.spinning = false
+                }
+              })
             } else {
             } else {
               _this.spinning = false
               _this.spinning = false
             }
             }
@@ -131,6 +163,7 @@ export default {
         const _this = this
         const _this = this
         this.$nextTick(() => {
         this.$nextTick(() => {
           _this.form.shelfName = _this.nowData.shelfName
           _this.form.shelfName = _this.nowData.shelfName
+          _this.form.showPrice = _this.nowData.showPrice
           const custome = _this.nowData.customerEntity
           const custome = _this.nowData.customerEntity
           if (custome) {
           if (custome) {
             _this.form.customerSn = custome.customerSn || ''
             _this.form.customerSn = custome.customerSn || ''

+ 39 - 5
src/views/numsGoodsShelves/shelfSet/set.vue

@@ -5,7 +5,6 @@
         <!-- 自定义的二级文字标题 -->
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
         <template slot="subTitle">
           <a id="shelfSet-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
           <a id="shelfSet-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
-          <span class="store-info">货架名称:{{ basicInfoData&&basicInfoData.shelfName || '--' }}</span>
         </template>
         </template>
       </a-page-header>
       </a-page-header>
       <!-- 内容 -->
       <!-- 内容 -->
@@ -16,8 +15,32 @@
               <span>基础信息</span>
               <span>基础信息</span>
               <a-button icon="edit" size="small" type="link" style="margin-left: 20px;color: #39f;" @click.stop="openInfoModal = true">编辑</a-button>
               <a-button icon="edit" size="small" type="link" style="margin-left: 20px;color: #39f;" @click.stop="openInfoModal = true">编辑</a-button>
             </template>
             </template>
-            <a-descriptions :column="1">
-              <a-descriptions-item label="关联客户">{{ (basicInfoData&&basicInfoData.customerEntity&&basicInfoData.customerEntity.customerName) || '--' }}</a-descriptions-item>
+            <a-descriptions :column="3">
+              <a-descriptions-item label="货架名称">{{ basicInfoData&&basicInfoData.shelfName || '--' }}</a-descriptions-item>
+              <a-descriptions-item>
+                <template slot="label">
+                  <a-tooltip placement="top">
+                    <template slot="title">
+                      <span>此数字货架,归属于您的哪一位客户。如果没有搜索到客户,请在客户管理功能中新建客户。</span>
+                    </template>
+                    关联客户<a-icon type="question-circle" style="color: rgba(0,0,0,.65);font-size: 16px;margin-left: 2px;vertical-align: sub;cursor: pointer;" />
+                  </a-tooltip>
+                </template>
+                {{ (basicInfoData&&basicInfoData.customerEntity&&basicInfoData.customerEntity.customerName) || '--' }}
+              </a-descriptions-item>
+              <a-descriptions-item>
+                <template slot="label">
+                  <a-tooltip placement="top">
+                    <template slot="title">
+                      1、非铺货产品,是指不是货架上的产品<br>
+                      2、终端会员价,对于汽修厂来说,即进货价<br>
+                      3、如果该产品在销售单里有销售记录,则使用最近一次销售价,如果没有销售记录,则使用箭冠总公司的终端会员价
+                    </template>
+                    价格显示<a-icon type="question-circle" style="color: rgba(0,0,0,.65);font-size: 16px;margin-left: 2px;vertical-align: sub;cursor: pointer;" />
+                  </a-tooltip>
+                </template>
+                非铺货产品——{{ showPrice == '1' ? '显示': '不显示' }}价格
+              </a-descriptions-item>
             </a-descriptions>
             </a-descriptions>
           </a-collapse-panel>
           </a-collapse-panel>
         </a-collapse>
         </a-collapse>
@@ -132,7 +155,7 @@ import bindProductModal from './bindProductModal.vue'
 import ImportGuideModal from './importGuideModal.vue'
 import ImportGuideModal from './importGuideModal.vue'
 import basicInfoModal from './basicInfoModal.vue'
 import basicInfoModal from './basicInfoModal.vue'
 import importHuoweiModal from './importHuoweiModal.vue'
 import importHuoweiModal from './importHuoweiModal.vue'
-import { shelfDetail, shelfProductList, shelfProductBatchInsert, delShelfPlaceSn } from '@/api/shelf'
+import { shelfDetail, shelfProductList, shelfProductBatchInsert, delShelfPlaceSn, getShelfPriceShow } from '@/api/shelf'
 export default {
 export default {
   name: 'ShelfMonitoringWarehousing',
   name: 'ShelfMonitoringWarehousing',
   components: { STable, VSelect, commonModal, bindProductModal, addHwModal, ImportGuideModal, basicInfoModal, importHuoweiModal },
   components: { STable, VSelect, commonModal, bindProductModal, addHwModal, ImportGuideModal, basicInfoModal, importHuoweiModal },
@@ -183,10 +206,20 @@ export default {
       modalType: null,
       modalType: null,
       openInfoModal: false,
       openInfoModal: false,
       openHwModal: false,
       openHwModal: false,
-      openImportModal: false
+      openImportModal: false,
+      showPrice: ''
     }
     }
   },
   },
   methods: {
   methods: {
+    // 获取价格显示设置
+    getShelfPriceShow () {
+      getShelfPriceShow({ shelfSn: this.$route.params.sn }).then(res => {
+        if (res.status == 200) {
+          this.basicInfoData.showPrice = res.data.paramValue
+          this.showPrice = res.data.paramValue
+        }
+      })
+    },
     // 导入或新增货位
     // 导入或新增货位
     addHW (type) {
     addHW (type) {
       // 导入货位
       // 导入货位
@@ -216,6 +249,7 @@ export default {
       shelfDetail({ sn: this.$route.params.sn }).then(res => {
       shelfDetail({ sn: this.$route.params.sn }).then(res => {
         if (res.status == 200) {
         if (res.status == 200) {
           this.basicInfoData = res.data
           this.basicInfoData = res.data
+          this.getShelfPriceShow()
         } else {
         } else {
           this.basicInfoData = null
           this.basicInfoData = null
         }
         }

+ 1 - 0
src/views/outboundOrderManagement/outboundOrder/list.vue

@@ -254,6 +254,7 @@ export default {
     handleDetail (row) {
     handleDetail (row) {
       this.outBizType = row.outBizType
       this.outBizType = row.outBizType
       this.detailTitle = row.outBizTypeDictValue + '详情'
       this.detailTitle = row.outBizTypeDictValue + '详情'
+      console.log(row.outBizType)
       //  根据出库类型跳转对应页面
       //  根据出库类型跳转对应页面
       if (row.outBizType == 'PURCHASE_RETURN') { // 采购退货
       if (row.outBizType == 'PURCHASE_RETURN') { // 采购退货
         this.orderSn = row.outBizSn
         this.orderSn = row.outBizSn

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

@@ -114,6 +114,7 @@
                       :disabled="priceTypeDisabled"
                       :disabled="priceTypeDisabled"
                       id="chooseCustom-priceType"
                       id="chooseCustom-priceType"
                       v-model="form.priceType"
                       v-model="form.priceType"
+                      @change="changePriceType"
                       allowClear
                       allowClear
                       placeholder="请选择价格类型" ></v-select>
                       placeholder="请选择价格类型" ></v-select>
                   </a-col>
                   </a-col>
@@ -283,6 +284,10 @@ export default {
     }
     }
   },
   },
   methods: {
   methods: {
+    changePriceType (v) {
+      this.form.priceType = v
+      this.$refs.ruleForm.clearValidate('priceType')
+    },
     openNewCust () {
     openNewCust () {
       this.isNewCust = true
       this.isNewCust = true
       setTimeout(() => {
       setTimeout(() => {

+ 5 - 7
src/views/salesManagement/salesQuery/detail.vue

@@ -287,20 +287,18 @@ export default {
     }
     }
   },
   },
   mounted () {
   mounted () {
-    this.showPage = true
-    if (!this.$store.state.app.isNewTab || this.outBizSn) { // 页签刷新 或 为弹框时调用
+    if (!this.$store.state.app.isNewTab || this.outBizSn) { // 页签刷新时调用
+      this.showPage = true
       this.pageInit()
       this.pageInit()
     }
     }
   },
   },
   activated () {
   activated () {
     this.showPage = true
     this.showPage = true
-    // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
-    if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
-      this.pageInit()
-    }
+    this.pageInit()
   },
   },
   beforeRouteEnter (to, from, next) {
   beforeRouteEnter (to, from, next) {
-    next(vm => {})
+    next(vm => {
+    })
   }
   }
 }
 }
 </script>
 </script>

+ 1 - 1
vue.config.js

@@ -211,7 +211,7 @@ const vueConfig = {
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     proxy: {
     proxy: {
       '/api': {
       '/api': {
-        // target: 'http://192.168.0.215:8503/qpls-md',
+        // target: 'http://192.168.0.103:8503/qpls-md',
         target: 'http://p.iscm.360arrow.com/qpls-md',
         target: 'http://p.iscm.360arrow.com/qpls-md',
         // ws: false,
         // ws: false,
         ws: true,
         ws: true,