Quellcode durchsuchen

Merge branch 'develop_szhj' of jianguan-web/qpls-md-html into develop

李磊 vor 3 Jahren
Ursprung
Commit
afa937d129

Datei-Diff unterdrückt, da er zu groß ist
+ 352 - 687
package-lock.json


+ 1 - 1
package.json

@@ -26,7 +26,6 @@
     "mockjs2": "1.0.7",
     "moment": "^2.24.0",
     "nprogress": "^0.2.0",
-    "qrcodejs2": "0.0.2",
     "screenfull": "^5.1.0",
     "v-runtime-template": "^1.10.0",
     "v-viewer": "^1.6.4",
@@ -36,6 +35,7 @@
     "vue-cookies": "^1.6.1",
     "vue-cropper": "0.4.9",
     "vue-ls": "^3.2.1",
+    "vue-qr": "^3.2.2",
     "vue-quill-editor": "^3.0.6",
     "vue-router": "^3.1.2",
     "vue-svg-component-runtime": "^1.0.1",

+ 1 - 0
src/components/Select/index.js

@@ -43,6 +43,7 @@ export default {
       if (res.status == 200) {
         _this.dataList = res.data.list
       }
+      _this.$emit("loadDataFinish",_this.dataList)
     })
   },
   methods: {

+ 77 - 52
src/config/router.config.js

@@ -123,12 +123,12 @@ export const asyncRouterMap = [
             ]
           },
           {
-            path: '/numsGoodsShelves/settlementManagement',
-            redirect: '/numsGoodsShelves/settlementManagement/list',
-            name: 'settlementManagement',
+            path: '/numsGoodsShelves/shelfMonitoring',
+            redirect: '/numsGoodsShelves/shelfMonitoring/list',
+            name: 'shelfMonitoring',
             component: BlankLayout,
             meta: {
-              title: '结算管理',
+              title: '货架监控',
               icon: 'monitor'
               // permission: 'M_salesQueryList'
             },
@@ -136,48 +136,61 @@ export const asyncRouterMap = [
             children: [
               {
                 path: 'list',
-                name: 'settlementManagementList',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/settlementManagement/list.vue'),
+                name: 'shelfMonitoringList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfMonitoring/list.vue'),
                 meta: {
-                  title: '结算管理列表',
+                  title: '货架监控列表',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesQueryList'
                 }
               },
               {
-                path: 'unDetail/:id',
-                name: 'unSettlementDetail',
-                component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/numsGoodsShelves/settlementManagement/unSettlementDetail.vue'),
+                path: 'warehouseDetail/:shelfPlaceSn/:productSn',
+                name: 'shelfMonitoringWarehouseDetail',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfMonitoring/warehouseDetail.vue'),
                 meta: {
-                  title: '待结算明细',
+                  title: '货架监控出入库明细',
                   icon: 'monitor',
                   hidden: true,
-                  replaceTab: true,
+                  replaceTab: true
                   // permission: 'M_salesQueryList'
                 }
-              },
+              }
+            ]
+          },
+          {
+            path: '/numsGoodsShelves/replenishmentManagement',
+            redirect: '/numsGoodsShelves/replenishmentManagement/list',
+            name: 'replenishmentManagement',
+            component: BlankLayout,
+            meta: {
+              title: '补货管理',
+              icon: 'monitor'
+              // permission: 'M_salesQueryList'
+            },
+            hideChildrenInMenu: true,
+            children: [
               {
-                path: 'detail/:id',
-                name: 'settlementDetail',
-                component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/numsGoodsShelves/settlementManagement/settlementDetail.vue'),
+                path: 'list',
+                name: 'replenishmentManagementList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/replenishmentManagement/list.vue'),
                 meta: {
-                  title: '结算历史',
+                  title: '补货管理列表',
                   icon: 'monitor',
-                  hidden: true,
-                  replaceTab: true,
+                  hidden: true
                   // permission: 'M_salesQueryList'
                 }
               }
             ]
           },
           {
-            path: '/numsGoodsShelves/accountManagement',
-            redirect: '/numsGoodsShelves/accountManagement/list',
-            name: 'accountManagement',
+            path: '/numsGoodsShelves/recallManagement',
+            redirect: '/numsGoodsShelves/recallManagement/list',
+            name: 'recallManagement',
             component: BlankLayout,
             meta: {
-              title: '账户管理',
+              title: '调回管理',
               icon: 'monitor'
               // permission: 'M_salesQueryList'
             },
@@ -185,10 +198,10 @@ export const asyncRouterMap = [
             children: [
               {
                 path: 'list',
-                name: 'accountManagementList',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/accountManagement/list.vue'),
+                name: 'recallManagementList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/recallManagement/list.vue'),
                 meta: {
-                  title: '账户管理列表',
+                  title: '调回管理列表',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesQueryList'
@@ -197,12 +210,12 @@ export const asyncRouterMap = [
             ]
           },
           {
-            path: '/numsGoodsShelves/shelfMonitoring',
-            redirect: '/numsGoodsShelves/shelfMonitoring/list',
-            name: 'shelfMonitoring',
+            path: '/numsGoodsShelves/settlementManagement',
+            redirect: '/numsGoodsShelves/settlementManagement/list',
+            name: 'settlementManagement',
             component: BlankLayout,
             meta: {
-              title: '货架监控',
+              title: '结算管理',
               icon: 'monitor'
               // permission: 'M_salesQueryList'
             },
@@ -210,21 +223,33 @@ export const asyncRouterMap = [
             children: [
               {
                 path: 'list',
-                name: 'shelfMonitoringList',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfMonitoring/list.vue'),
+                name: 'settlementManagementList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/settlementManagement/list.vue'),
                 meta: {
-                  title: '货架监控列表',
+                  title: '结算管理列表',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesQueryList'
                 }
               },
               {
-                path: 'warehouseDetail/:shelfPlaceSn/:productSn',
-                name: 'shelfMonitoringWarehouseDetail',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/shelfMonitoring/warehouseDetail.vue'),
+                path: 'unDetail/:id',
+                name: 'unSettlementDetail',
+                component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/numsGoodsShelves/settlementManagement/unSettlementDetail.vue'),
                 meta: {
-                  title: '货架监控出入库明细',
+                  title: '待结算明细',
+                  icon: 'monitor',
+                  hidden: true,
+                  replaceTab: true
+                  // permission: 'M_salesQueryList'
+                }
+              },
+              {
+                path: 'detail/:id',
+                name: 'settlementDetail',
+                component: () => import(/* webpackChunkName: "salesManagement" */ '@/views/numsGoodsShelves/settlementManagement/settlementDetail.vue'),
+                meta: {
+                  title: '结算历史',
                   icon: 'monitor',
                   hidden: true,
                   replaceTab: true
@@ -234,12 +259,12 @@ export const asyncRouterMap = [
             ]
           },
           {
-            path: '/numsGoodsShelves/replenishmentManagement',
-            redirect: '/numsGoodsShelves/replenishmentManagement/list',
-            name: 'replenishmentManagement',
+            path: '/numsGoodsShelves/withdrawalManagement',
+            redirect: '/numsGoodsShelves/withdrawalManagement/list',
+            name: 'withdrawalManagement',
             component: BlankLayout,
             meta: {
-              title: '补货管理',
+              title: '提现管理',
               icon: 'monitor'
               // permission: 'M_salesQueryList'
             },
@@ -247,10 +272,10 @@ export const asyncRouterMap = [
             children: [
               {
                 path: 'list',
-                name: 'replenishmentManagementList',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/replenishmentManagement/list.vue'),
+                name: 'withdrawalManagementList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/withdrawalManagement/list.vue'),
                 meta: {
-                  title: '补货管理列表',
+                  title: '提现管理列表',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesQueryList'
@@ -259,12 +284,12 @@ export const asyncRouterMap = [
             ]
           },
           {
-            path: '/numsGoodsShelves/recallManagement',
-            redirect: '/numsGoodsShelves/recallManagement/list',
-            name: 'recallManagement',
+            path: '/numsGoodsShelves/accountManagement',
+            redirect: '/numsGoodsShelves/accountManagement/list',
+            name: 'accountManagement',
             component: BlankLayout,
             meta: {
-              title: '调回管理',
+              title: '账户明细',
               icon: 'monitor'
               // permission: 'M_salesQueryList'
             },
@@ -272,17 +297,17 @@ export const asyncRouterMap = [
             children: [
               {
                 path: 'list',
-                name: 'recallManagementList',
-                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/recallManagement/list.vue'),
+                name: 'accountManagementList',
+                component: () => import(/* webpackChunkName: "numsGoodsShelves" */ '@/views/numsGoodsShelves/accountManagement/list.vue'),
                 meta: {
-                  title: '调回管理列表',
+                  title: '账户明细列表',
                   icon: 'monitor',
                   hidden: true
                   // permission: 'M_salesQueryList'
                 }
               }
             ]
-          }
+          },
         ]
       },
       // 销售管理

+ 23 - 0
src/libs/JGPrint.js

@@ -2,6 +2,29 @@ import confirm from 'ant-design-vue/es/modal/confirm'
 import notification from 'ant-design-vue/es/notification'
 import { getLodop } from '@/libs/LodopFuncs'
 import moment from 'moment'
+// 打印页签,支持批量打印
+export const JGPrintTag = function (html, width, height, nums) {
+  const LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'))
+  if (!LODOP) {
+    confirm({
+      title: '提示?',
+      content: h => <div>打印控件未安装,请先下载并安装。安装完成后,刷新页面即可打印。</div>,
+      okText: '立即下载',
+      okType: 'danger',
+      cancelText: '暂不打印',
+      onOk () {
+        window.open('http://www.lodop.net/demolist/CLodop_Setup_for_Win32NT.zip')
+      }
+    })
+    return
+  }
+  LODOP.SET_SHOW_MODE('HIDE_PAPER_BOARD', 1) //  隐藏底图上有模拟走纸板的条纹线
+  LODOP.SET_PRINT_MODE('POS_BASEON_PAPER', true) // 可使输出以纸张边缘为基点
+  LODOP.ADD_PRINT_HTM(0, 0, '100%', '100%', html)
+  LODOP.SET_PRINT_COPIES(nums)// 指定份数
+  LODOP.SET_PRINT_PAGESIZE(1, width, height)
+  LODOP.PRINT()
+}
 // 打印控件
 export const JGPrint = function (data, type, printerType) {
   if (!data) {

+ 1 - 1
src/utils/request.js

@@ -8,7 +8,7 @@ import { VueAxios } from './axios'
 // 创建 axios 实例
 const service = axios.create({
   baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url
-  timeout: 10000 // 请求超时时间
+  timeout: 1000000 // 请求超时时间
 })
 
 const err = (error) => {

+ 9 - 16
src/views/numsGoodsShelves/accountManagement/list.vue

@@ -20,11 +20,7 @@
       <div style="margin:10px 0">
         <div style="display: flex;align-items: center;padding: 2px 0;">
           <div>
-            账户余额:<strong>¥986.00 </strong>元;
-            可提现金额:<strong>¥500.00</strong>;
-          </div>
-          <div>
-            <a-button size="small" type="primary" class="button-primary" @click="handleTX">申请提现</a-button>
+            账户余额:<strong>¥986.00 </strong>元
           </div>
         </div>
       </div>
@@ -41,8 +37,6 @@
         bordered>
       </s-table>
     </a-spin>
-    <!-- 申请提现 -->
-    <applyWithdrawal :isOpenModal="showModal" :currentData="currentData" @close="showModal=false" @refresh="$refs.table.refresh(true)"></applyWithdrawal>
   </a-card>
 </template>
 
@@ -50,9 +44,8 @@
 import { commonMixin } from '@/utils/mixin'
 import moment from 'moment'
 import { STable } from '@/components'
-import applyWithdrawal from './applyWithdrawal.vue'
 export default {
-  components: { STable, applyWithdrawal, commonMixin },
+  components: { STable, commonMixin },
   data () {
     return {
       spinning: false,
@@ -63,13 +56,13 @@ export default {
       time: [],
       columns: [
         { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
-        { title: '交易时间', dataIndex: 'createDate', width: '15%', align: 'center' },
-        { title: '交易说明', dataIndex: 'name', width: '30%', align: 'center' },
-        { title: '交易类型', dataIndex: 'remarks', width: '10%', align: 'center' },
-        { title: '交易金额', dataIndex: 'remarks', width: '10%', align: 'center' },
-        { title: '手续费', dataIndex: 'remarks', width: '10%', align: 'center' },
-        { title: '账户变动', dataIndex: 'remarks', width: '10%', align: 'center' },
-        { title: '变动后余额', dataIndex: 'remarks', width: '10%', align: 'center' }
+        { title: '交易时间', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '交易说明', dataIndex: 'name', width: '30%', align: 'left', customRender: function (text) { return text || '--' } },
+        { title: '交易类型', dataIndex: '', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '交易金额', dataIndex: '', width: '10%', align: 'right', customRender: function (text) { return text || '--' } },
+        { title: '手续费', dataIndex: '', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '账户变动', dataIndex: '', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '变动后余额', dataIndex: '', width: '10%', align: 'right', customRender: function (text) { return text || '--' } }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {

+ 6 - 3
src/views/numsGoodsShelves/replenishmentManagement/confirmModal.vue

@@ -102,8 +102,8 @@ export default {
   },
   computed: {
     modalTit () {
-      const hjName = this.nowData && this.nowData.shelfName ? this.nowData.shelfName : ''
-      return '补货单确认——' + hjName
+      const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
+      return '补货单确认 —— ' + hjName
     }
   },
   methods: {
@@ -121,7 +121,8 @@ export default {
             if (item.confirmQty || item.confirmQty == 0) {
               arr.push({
                 productSn: item.productSn,
-                confirmQty: item.confirmQty
+                confirmQty: item.confirmQty,
+                replenishBillDetailSn: item.replenishBillDetailSn
               })
             } else {
               arrInd.push(index + 1)
@@ -133,6 +134,8 @@ export default {
           }
           const params = {
             replenishBillSn: _this.nowData && _this.nowData.replenishBillSn,
+            replenishBillNo: _this.nowData && _this.nowData.replenishBillNo,
+            shelfSn: _this.nowData && _this.nowData.shelfSn,
             detailList: arr
           }
           _this.$emit('ok', 'confirm', params)

+ 34 - 59
src/views/numsGoodsShelves/replenishmentManagement/list.vue

@@ -30,7 +30,6 @@
             </template>
             <a-col :md="6" :sm="24">
               <span class="table-page-search-submitButtons">
-                <a-button type="info" @click="printTest">打印</a-button>
                 <a-button type="primary" style="margin-left: 5px" @click="$refs.table.refresh(true)" :disabled="disabled" id="replenishmentManagementList-refresh">查询</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">
@@ -56,6 +55,7 @@
         :rowKey="(record) => record.id"
         :columns="columns"
         :data="loadData"
+        :expandedRowKeys="expandedRowKeys"
         @expand="expandFun"
         :expandRowByClick="true"
         :scroll="{ y: tableHeight }"
@@ -63,6 +63,7 @@
         :defaultLoadData="false"
         bordered>
         <a-table
+          v-if="listData&&listData[index]"
           slot="expandedRowRender"
           slot-scope="record, index"
           size="small"
@@ -99,32 +100,10 @@
       <!-- 签收 -->
       <put-warehousing-modal :openModal="openPutWarehousingModal" :nowData="nowData" @ok="handlePutWarehousingOk" @close="handleCancel" />
     </a-spin>
-
-    <div id="print">
-      <div class="print-pages" style="font-size: 9px;padding:3pt 0 3pt 6pt;">
-        <div class="storeName" style="text-align: center;font-weight: bold;margin: 2pt 0;">箭冠汽配西安大兴店</div>
-        <div style="overflow: hidden;display: flex;justify-content: space-between;">
-          <div style="padding-right: 3pt;">
-            <div class="shelfName" style="margin-bottom: 2pt;">
-              西安车领主常青二路数字货架
-            </div>
-            <div class="productCode" style="font-weight: bold;">JA-11070N</div>
-            <div class="productName">箭牌空气滤清器 07款丰田新皇冠2.5 / 3.0</div>
-            <div class="userName" style="margin-top: 2pt;font-size: 8px;"><span style="margin: 0 5pt 0 0;">2021-10-01  15:30</span> <span>王明</span></div>
-          </div>
-          <div>
-            <div class="productSno" style="font-size: 16pt;text-align: center;">A08</div>
-            <div class="qrcode" ref="qrCodeUrl" style="width: 40px;height: 40px;overflow: hidden;"></div>
-          </div>
-        </div>
-      </div>
-    </div>
   </a-card>
 </template>
 
 <script>
-import QRCode from 'qrcodejs2'
-import { getLodop } from '@/libs/LodopFuncs'
 import { commonMixin } from '@/utils/mixin'
 import { STable, VSelect } from '@/components'
 import getDate from '@/libs/getDate.js'
@@ -160,22 +139,29 @@ export default {
         productCode: '',
         productName: ''
       },
+      expandedRowKeys: [],
       columns: [
         { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '创建时间', dataIndex: 'createDate', width: '11%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '补货单号', dataIndex: 'replenishBillNo', width: '16%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '货架名称', dataIndex: 'shelfName', width: '21%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '补货单号', dataIndex: 'replenishBillNo', width: '12%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '货架名称', dataIndex: 'shelfInfo.shelfName', width: '25%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '状态', dataIndex: 'billStateDictValue', width: '8%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '补货应发总量', dataIndex: 'totalQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '实发总量', dataIndex: 'totalConfirmQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '签收总量', dataIndex: 'totalPutQty', width: '7%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: '18%', align: 'left' }
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '12%', align: 'left' }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return shelfReplenishList(Object.assign(parameter, this.queryParam)).then(res => {
+        this.expandedRowKeys = []
+        parameter.billState = this.queryParam.bizType == 'ALL' ? '' : this.queryParam.bizType
+        const params = Object.assign(parameter, this.queryParam)
+        delete params.index
+        delete params.tableId
+        delete params.bizType
+        return shelfReplenishList(params).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -192,9 +178,9 @@ export default {
         })
       },
       subColumns: [
-        { title: '序号', dataIndex: 'no', width: '8%', align: 'center' },
+        { title: '序号', dataIndex: 'no', width: '4%', align: 'center' },
         { title: '产品编码', dataIndex: 'product.code', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '产品名称', dataIndex: 'product.name', width: '28%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '产品名称', dataIndex: 'product.name', width: '32%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '补货应发总量', dataIndex: 'qty', width: '12%', 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: '签收总量', dataIndex: 'putQty', width: '12%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
@@ -214,24 +200,6 @@ export default {
     }
   },
   methods: {
-    printTest () {
-      var qrcode = new QRCode(this.$refs.qrCodeUrl, {
-        text: 'dealerSn=1033242&shelfSn=342326735950757888&productCode=RPF2340&shelfPlaceCode=A01&shelfPlaceSn=123213', // 需要转换为二维码的内容
-        width: 40,
-        height: 40,
-        colorDark: '#000000',
-        colorLight: '#ffffff',
-        correctLevel: QRCode.CorrectLevel.H
-      })
-      const LODOP = getLodop(document.getElementById('LODOP_OB'), document.getElementById('LODOP_EM'))
-      console.log(LODOP, 'LODOP')
-      // LODOP.ADD_PRINT_RECT(0, 0, '40mm', '30mm', 0, 1)
-      LODOP.SET_SHOW_MODE('HIDE_PAPER_BOARD', 1) //  隐藏底图上有模拟走纸板的条纹线
-      LODOP.SET_PRINT_MODE('POS_BASEON_PAPER', true) // 可使输出以纸张边缘为基点
-      LODOP.ADD_PRINT_HTM(0, 0, '100%', '100%', document.getElementById('print').innerHTML)
-      LODOP.SET_PRINT_PAGESIZE(1, '40mm', '30mm')
-      LODOP.PREVIEW()
-    },
     // 确认
     handleConfirm (row) {
       this.nowData = row
@@ -268,9 +236,7 @@ export default {
     },
     // 打印贴签 ok
     handlePrintStickerOk () {
-      this.nowData = null
-      this.openPrintStickerModal = false
-      this.$refs.table.refresh(true)
+
     },
     // 出库
     handleOutWarehousing (row) {
@@ -281,7 +247,7 @@ export default {
     handleOutWarehousingOk () {
       this.nowData = null
       this.openOutWarehousingModal = false
-      this.$refs.table.refresh(true)
+      this.queryByTypeSum()
     },
     handleValidate (type, params) {
       // 校验产品库存是否足够
@@ -319,7 +285,7 @@ export default {
     handlePutWarehousingOk () {
       this.nowData = null
       this.openPutWarehousingModal = false
-      this.$refs.table.refresh(true)
+      this.queryByTypeSum()
     },
     // 取消补货单
     handleCancelOrder (row) {
@@ -348,7 +314,11 @@ export default {
     },
     expandFun (expanded, record) {
       if (expanded) {
+        this.expandedRowKeys.push(record.id)
         this.getSubItem(record) // 获取表格内部数据
+      } else {
+        const i = this.expandedRowKeys.findIndex(item => item == record.id)
+        this.expandedRowKeys.splice(i, 1)
       }
     },
     // 获取子节点数据
@@ -393,9 +363,12 @@ export default {
     },
     // 选择类型
     handleTabChange (key) {
-      this.queryParam.bizType = key
-      this.$refs.table.refresh(true)
-      this.curBizType = key
+      this.expandedRowKeys = []
+      setTimeout(() => {
+        this.queryParam.bizType = key
+        this.$refs.table.refresh(true)
+        this.curBizType = key
+      }, 100)
     },
     // 客户 change
     custChange (obj) {
@@ -406,18 +379,20 @@ export default {
       shelfReplenishStateCount({}).then(res => {
         if (res.data && res.status == 200) {
           this.tabPaneData = [
-            { bizName: '全部', bizType: 'ALL', countNum: null },
+            { bizName: '全部', bizType: 'ALL', countNum: 0 },
             { bizName: '待确认', bizType: 'WAIT_CONFIRM', countNum: 0 },
             { bizName: '待出库', bizType: 'WAIT_OUT_STOCK', countNum: 0 },
             { bizName: '待签收', bizType: 'WAIT_CHECK', countNum: 0 },
-            { bizName: '已完成', bizType: 'FINISH', countNum: null },
-            { bizName: '已取消', bizType: 'CANCEL', countNum: null }
+            { bizName: '已完成', bizType: 'FINISH', countNum: 0 },
+            { bizName: '已取消', bizType: 'CANCEL', countNum: 0 }
           ]
           this.queryParam.bizType = 'ALL'
           this.tabPaneData[1].countNum = res.data.WAIT_CONFIRM || 0
           this.tabPaneData[2].countNum = res.data.WAIT_OUT_STOCK || 0
           this.tabPaneData[3].countNum = res.data.WAIT_CHECK || 0
-          this.$refs.table.refresh(true)
+          this.tabPaneData[4].countNum = res.data.FINISH || 0
+          this.tabPaneData[5].countNum = res.data.CANCEL || 0
+          this.$refs.table.refresh()
         }
       })
     },

+ 4 - 3
src/views/numsGoodsShelves/replenishmentManagement/outWarehousingModal.vue

@@ -95,7 +95,7 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return shelfReplenishDetailList(Object.assign(parameter, this.queryParam)).then(res => {
+        return shelfReplenishDetailList({ replenishBillSn: this.nowData && this.nowData.replenishBillSn }).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -126,7 +126,7 @@ export default {
   },
   computed: {
     modalTit () {
-      const hjName = this.nowData && this.nowData.shelfName ? this.nowData.shelfName : ''
+      const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
       return '补货单出库——' + hjName
     }
   },
@@ -145,7 +145,8 @@ export default {
               _this.listData.map((item, index) => {
                 arr.push({
                   productSn: item.productSn,
-                  confirmQty: item.confirmQty
+                  confirmQty: item.confirmQty,
+                  replenishBillDetailSn: item.replenishBillDetailSn
                 })
               })
               const params = {

+ 13 - 12
src/views/numsGoodsShelves/replenishmentManagement/printStickerModal.vue

@@ -48,16 +48,20 @@
         <a-button id="replenishmentManagement-printSticker-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
       </div>
     </a-spin>
+
+    <!-- 打印预览弹框 -->
+    <printView ref="printView" :openModal="showView" @close="showView=false"></printView>
   </a-modal>
 </template>
 
 <script>
 import { commonMixin } from '@/utils/mixin'
+import printView from './printView.vue'
 import { STable, VSelect } from '@/components'
 import { shelfReplenishDetailList, shelfReplenishDetail, shelfReplenishPrintSign } from '@/api/shelfReplenish'
 export default {
   name: 'PrintStickerModal',
-  components: { STable, VSelect },
+  components: { STable, VSelect, printView },
   mixins: [commonMixin],
   props: {
     openModal: { //  弹框显示状态
@@ -75,6 +79,7 @@ export default {
     return {
       spinning: false,
       isShow: this.openModal, //  是否打开弹框
+      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 },
@@ -87,7 +92,7 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return shelfReplenishDetailList(Object.assign(parameter, this.queryParam)).then(res => {
+        return shelfReplenishDetailList({ replenishBillSn: this.nowData && this.nowData.replenishBillSn }).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -109,7 +114,7 @@ export default {
   },
   computed: {
     modalTit () {
-      const hjName = this.nowData && this.nowData.shelfName ? this.nowData.shelfName : ''
+      const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
       return '补货单打印贴签——' + hjName
     }
   },
@@ -122,16 +127,12 @@ export default {
     handleSave () {
       if (!this.rowSelectionInfo || (this.rowSelectionInfo && this.rowSelectionInfo.selectedRows.length < 1)) {
         this.$message.warning('请至少选择一个产品')
-        return
+      } else {
+        const nowData = this.nowData
+        const list = this.rowSelectionInfo.selectedRows
+        this.showView = true
+        this.$refs.printView.setData(nowData, list)
       }
-      this.spinning = true
-      shelfReplenishPrintSign({ replenishBillSn: this.nowData && this.nowData.replenishBillSn }).then(res => {
-        if (res.status == 200) {
-          this.$emit('ok')
-          this.isShow = false
-        }
-        this.spinning = false
-      })
     },
     // 基本信息
     getDetail () {

+ 119 - 0
src/views/numsGoodsShelves/replenishmentManagement/printView.vue

@@ -0,0 +1,119 @@
+<template>
+  <a-modal
+    centered
+    class="replenishmentManagement-printSticker-modal"
+    :footer="null"
+    :maskClosable="false"
+    title="打印预览"
+    v-model="isShow"
+    @cancle="isShow = false"
+    :width="400">
+    <!-- 列表 -->
+    <div id="print">
+      <div
+        v-for="(item,index) in list"
+        :key="index"
+        class="print-pages"
+        style="font-size: 9px;padding:3pt 0 3pt 6pt;">
+        <div class="storeName" style="text-align: center;font-weight: bold;margin: 2pt 0;">
+          {{ nowData.dealerName }}
+        </div>
+        <div style="overflow: hidden;">
+          <div style="padding-right: 3pt;float: left;">
+            <div class="shelfName" style="margin-bottom: 2pt;">
+              {{ nowData.shelfInfo.shelfName }}
+            </div>
+            <div class="productCode" style="font-weight: bold;">{{ item.productCode }}</div>
+            <div class="productName">{{ item.product.name }}</div>
+            <div class="userName" style="margin-top: 2pt;font-size: 8px;">
+              <span style="margin: 0 5pt 0 0;">{{ moment().format('YYYY-MM-DD HH:mm') }}</span>
+            </div>
+            <div class="userName" style="margin-top: 2pt;font-size: 8px;">
+              <span>{{ nowData.parintUser }}</span>
+            </div>
+          </div>
+          <div style="float: right;">
+            <div class="productSno" style="font-size: 15pt;text-align: center;">{{ item.shelfPlaceCode }}</div>
+            <div class="qrcode" ref="qrCodeUrl">
+              <vue-qr :text="`dealerSn=${nowData.dealerSn}&shelfSn=${item.shelfSn}&productCode=${item.productCode}&shelfPlaceCode=${item.shelfPlaceCode}&shelfPlaceSn=${item.shelfPlaceSn}`" :margin="0" :size="60"></vue-qr>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+    <div class="btn-cont">
+      <a-button type="primary" id="replenishmentManagement-printSticker-modal-save" @click="handleSave">确定打印</a-button>
+      <a-button id="replenishmentManagement-printSticker-modal-back" @click="isShow = false" style="margin-left: 15px;">取消</a-button>
+    </div>
+  </a-modal>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import moment from 'moment'
+import vueQr from 'vue-qr'
+import { JGPrintTag } from '@/libs/JGPrint'
+import { STable, VSelect } from '@/components'
+export default {
+  name: 'PrintStickerModal',
+  components: { STable, VSelect, vueQr },
+  mixins: [commonMixin],
+  props: {
+    openModal: { //  弹框显示状态
+      type: Boolean,
+      default: false
+    }
+  },
+  data () {
+    return {
+      isShow: false,
+      nowData: null,
+      list: []
+    }
+  },
+  methods: {
+    moment: moment,
+    //  开始打印
+    handleSave () {
+      const printBox = document.querySelectorAll('.print-pages')
+      console.log(printBox)
+      for (let i = 0; i < printBox.length; i++) {
+        JGPrintTag(printBox[i].outerHTML, '40mm', '30mm', this.list[i].printQty)
+      }
+    },
+    setData (nowData, list) {
+      const dearInfo = this.$store.state.user.info
+      this.nowData = nowData
+      this.list = list
+      this.nowData.dealerName = dearInfo.orgName
+      this.nowData.dealerSn = dearInfo.orgSn
+      this.nowData.parintUser = dearInfo.userNameCN
+      console.log(this.$store.state.user.info)
+    }
+  },
+  watch: {
+    //  父页面传过来的弹框状态
+    openModal (newValue, oldValue) {
+      this.isShow = newValue
+    },
+    //  重定义的弹框状态
+    isShow (newValue, oldValue) {
+      if (!newValue) {
+        this.$emit('close')
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less">
+.replenishmentManagement-printSticker-modal {
+	.btn-cont {
+		text-align: center;
+		margin: 35px 0 10px;
+	}
+  .print-pages{
+    border-bottom: 1px solid #eee;
+  }
+}
+</style>

+ 10 - 4
src/views/numsGoodsShelves/replenishmentManagement/putWarehousingModal.vue

@@ -40,7 +40,7 @@
         <!-- 签收数量 -->
         <template slot="putQty" slot-scope="text, record">
           <a-input-number
-            v-if="record.confirmQty!=0"
+            v-if="record.confirmQty&&record.confirmQty!=0"
             size="small"
             id="replenishmentManagement-outWarehousing-putQty"
             v-model="record.putQty"
@@ -97,7 +97,7 @@ export default {
       loadData: parameter => {
         this.disabled = true
         this.spinning = true
-        return shelfReplenishDetailList({ sn: this.nowData && this.nowData.replenishBillSn }).then(res => {
+        return shelfReplenishDetailList({ replenishBillSn: this.nowData && this.nowData.replenishBillSn }).then(res => {
           let data
           if (res.status == 200) {
             data = res.data
@@ -118,7 +118,7 @@ export default {
   },
   computed: {
     modalTit () {
-      const hjName = this.nowData && this.nowData.shelfName ? this.nowData.shelfName : ''
+      const hjName = this.nowData && this.nowData.shelfInfo.shelfName ? this.nowData.shelfInfo.shelfName : ''
       return '补货单签收——' + hjName
     }
   },
@@ -135,7 +135,13 @@ export default {
           const arrInd = []
           _this.listData.map((item, index) => {
             if (item.putQty || item.putQty == 0) {
-              arr.push({ productSn: item.productSn, putQty: item.putQty })
+              arr.push({
+                productSn: item.productSn,
+                putQty: item.putQty,
+                replenishBillDetailSn: item.replenishBillDetailSn,
+                shelfPlaceSn: item.shelfPlaceSn,
+                shelfPlaceCode: item.shelfPlaceCode
+              })
             } else {
               arrInd.push(index + 1)
             }

+ 137 - 0
src/views/numsGoodsShelves/replenishmentManagement/replenishmentDetail.vue

@@ -0,0 +1,137 @@
+<template>
+  <div v-if="showPage" class="replenishmentDetail-wrap">
+    <a-spin :spinning="spinning" tip="Loading...">
+      <!-- 基础信息 -->
+      <a-collapse :activeKey="['1']" v-if="detailData">
+        <a-collapse-panel key="1" header="基础信息">
+          <a-descriptions size="small" :column="3">
+            <a-descriptions-item label="关联客户">
+              {{ detailData&&detailData.shelfInfo.storeName || '--' }}
+            </a-descriptions-item>
+            <a-descriptions-item label="货架名称" :span="2">
+              {{ detailData&&detailData.shelfInfo.shelfName || '--' }}
+            </a-descriptions-item>
+            <a-descriptions-item label="补货单号">{{ detailData && detailData.replenishBillNo || '--' }}</a-descriptions-item>
+            <a-descriptions-item label="创建时间">{{ detailData && detailData.createDate || '--' }}</a-descriptions-item>
+            <a-descriptions-item label="补货单状态">{{ detailData&&detailData.billStateDictValue || '--' }}</a-descriptions-item>
+          </a-descriptions>
+        </a-collapse-panel>
+      </a-collapse>
+      <div class="pages-wrap">
+        <!-- alert -->
+        <a-alert type="info" style="margin: 10px 0;">
+          <div slot="message">
+            总款数:<strong>{{ detailData&&(detailData.totalCategory || detailData.totalCategory==0) ? detailData.totalCategory : '--' }}</strong>;
+            总数量:<strong>{{ detailData&&(detailData.totalQty || detailData.totalQty==0) ? detailData.totalQty : '--' }}</strong>;
+            总成本:<strong>{{ detailData&&(detailData.totalCost || detailData.totalCost==0) ? detailData.totalCost : '--' }}</strong>;
+          </div>
+        </a-alert>
+        <!-- 列表 -->
+        <s-table
+          class="sTable"
+          ref="table"
+          size="small"
+          :rowKey="(record) => record.id"
+          :columns="columns"
+          :data="loadData"
+          :scroll="{ y: 400 }"
+          :showPagination="false"
+          bordered>
+        </s-table>
+      </div>
+    </a-spin>
+  </div>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import { getOperationalPrecision } from '@/libs/tools.js'
+import { STable, VSelect } from '@/components'
+import { shelfReplenishDetailList, shelfReplenishDetail } from '@/api/shelfReplenish'
+export default {
+  name: 'SalesDetail',
+  components: { STable, VSelect },
+  mixins: [commonMixin],
+  props: {
+    outBizSn: { //  有值则为弹框,无值则为页面
+      type: [Number, String],
+      default: ''
+    }
+  },
+  data () {
+    return {
+      showPage: false,
+      spinning: false,
+      disabled: false,
+      // 表头
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '产品编码', dataIndex: 'product.code', width: '22%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '产品名称', dataIndex: 'product.name', width: '28%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '补货实发数量', dataIndex: 'confirmQty', width: '12%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
+        { title: '单位', dataIndex: 'product.unit', width: '6%', align: 'center', customRender: function (text) { return text || '--' } },
+        // { title: '成本价', dataIndex: 'product.unit', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        // { title: '成本小计', dataIndex: 'product.unit', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '是否急件', dataIndex: 'oosFlag', width: '15%', align: 'center', customRender: function (text) { return text == 1 ? '是' : '否' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        this.disabled = true
+        this.spinning = true
+        return shelfReplenishDetailList({ replenishBillSn: this.nowData && this.nowData.replenishBillSn }).then(res => {
+          let data
+          if (res.status == 200) {
+            data = res.data
+            for (var i = 0; i < data.length; i++) {
+              data[i].no = i + 1
+              data[i].putQty = data[i].confirmQty
+            }
+            this.disabled = false
+            this.listData = data || []
+          }
+          this.spinning = false
+          return data
+        })
+      },
+      localDataSource: [],
+      detailData: null //  详情数据
+    }
+  },
+  methods: {
+    // 基本信息
+    getDetail () {
+      shelfReplenishDetail({ sn: this.outBizSn || this.$route.params.sn }).then(res => {
+        if (res.status == 200) {
+          this.detailData = res.data
+        } else {
+          this.detailData = null
+        }
+      })
+    },
+    pageInit () {
+      const vm = this
+      vm.$nextTick(() => {
+        vm.spinning = false
+        vm.disabled = false
+        vm.getDetail()
+      })
+    }
+  },
+  mounted () {
+    this.showPage = true
+    if (!this.$store.state.app.isNewTab || this.outBizSn) { // 页签刷新 或 为弹框时调用
+      this.pageInit()
+    }
+  },
+  activated () {
+    this.showPage = true
+    // 如果是新页签打开或者进入新的子页(例:存在列表第2条数据编辑页页签时再打开第4条数据的编辑页),则重置当前页面
+    if (this.$store.state.app.isNewTab || !this.$store.state.app.isNewSubTab) {
+      this.pageInit()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>

+ 12 - 11
src/views/numsGoodsShelves/shelfMonitoring/list.vue

@@ -94,11 +94,11 @@
       </div>
       <div v-show="isSearch">
         <div style="margin-bottom: 10px">
-          <div style="display: inline-block;margin-right: 15px;vertical-align: middle;">
-            <a-divider type="vertical" style="background: #FF7D0C;width: 3px;heigh: 16px;" />
+          <div style="display: inline-block;margin-right: 15px;vertical-align: middle;font-weight: bold;font-size: 14px;">
+            <a-divider type="vertical" style="background: #FF7D0C;width: 3px;height: 16px;" />
             <span>{{ shelfName || '--' }}</span>
           </div>
-          <a-button type="primary" class="button-error" id="shelfMonitoringList-export" @click="handleAddBack">新增调回单</a-button>
+          <!-- <a-button type="primary" class="button-error" id="shelfMonitoringList-export" @click="handleAddBack">新增调回单</a-button> -->
           <span style="margin-left: 5px">
             <template v-if="rowSelectionInfo&&rowSelectionInfo.selectedRowKeys.length > 0">
               {{ `已选 ${rowSelectionInfo.selectedRowKeys.length} 项` }}
@@ -123,13 +123,15 @@
           bordered>
           <!-- 绑定产品状态 -->
           <template slot="state" slot-scope="text, record">
-            <a-tooltip placement="top">
+            <a-tooltip placement="left" v-if="record.recallBillData&&record.replenishBillData">
               <template slot="title">
-                <span>{{ record.productTypeName }}</span>
+                <div v-if="record.recallBillData">{{ record.recallBillData.join(',') }}</div>
+                <div v-if="record.replenishBillData">{{ record.replenishBillData.join(',') }}</div>
               </template>
               {{ record.stateDictValue }}
               <a-icon type="exclamation-circle" theme="filled" style="color: #39f;font-size: 16px;margin-left: 5px;vertical-align: middle;cursor: pointer;" />
             </a-tooltip>
+            <span v-else>{{ record.stateDictValue }}</span>
           </template>
           <!-- 操作 -->
           <template slot="action" slot-scope="text, record">
@@ -180,12 +182,12 @@ export default {
       columns: [
         { title: '货位号', dataIndex: 'shelfPlaceCode', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '绑定产品编码', dataIndex: 'productCode', width: '13%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '绑定产品名称', dataIndex: 'productName', width: '18%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
+        { title: '绑定产品名称', dataIndex: 'productName', width: '23%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '货位产品状态', scopedSlots: { customRender: 'state' }, width: '15%', align: 'center' },
         { title: '当前库存', dataIndex: 'qty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '最大库容', dataIndex: 'maxQty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
         { title: '滞销天数', dataIndex: 'unsalableDays', width: '10%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '操作', scopedSlots: { customRender: 'action' }, width: '15%', align: 'left' }
+        { title: '操作', scopedSlots: { customRender: 'action' }, width: '10%', align: 'left' }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {
@@ -278,16 +280,15 @@ export default {
     //  重置
     resetSearchForm () {
       this.isSearch = false
-      this.queryParam.shelfSn = undefined
-      this.$refs.shelfList.resetForm()
+      // this.queryParam.shelfSn = undefined
+      // this.$refs.shelfList.resetForm()
       this.queryParam.shelfPlaceCode = ''
       this.queryParam.productCode = ''
       this.queryParam.productName = ''
       this.queryParam.state = undefined
       this.queryParam.beginDate = undefined
       this.queryParam.endDate = undefined
-      this.$refs.ruleForm.resetFields()
-      this.$refs.table.clearTable()
+      this.handleSearch()
     },
     // 新增调回单
     handleAddBack () {

+ 4 - 4
src/views/numsGoodsShelves/shelfMonitoring/warehouseDetail.vue

@@ -5,7 +5,7 @@
         <!-- 自定义的二级文字标题 -->
         <template slot="subTitle">
           <a id="shelfMonitoringWarehousing-back-btn" href="javascript:;" @click="handleBack"><a-icon type="left" /> 返回列表</a>
-          <span class="store-info" v-if="basicInfoData && (basicInfoData.shelfName || basicInfoData.shelfPlaceName)">{{ basicInfoData && basicInfoData.shelfName || '' }} —— {{ basicInfoData && basicInfoData.shelfPlaceName || '' }}</span>
+          <span class="store-info" v-if="basicInfoData">{{ basicInfoData.shelfName || '' }} —— 货位号{{ basicInfoData.shelfPlaceCode || '' }}</span>
         </template>
       </a-page-header>
       <!-- 内容 -->
@@ -25,7 +25,7 @@
                     v-model="queryParam.bizType"
                     ref="bizType"
                     id="shelfMonitoringWarehousing-bizType"
-                    code="FINANCIAL_PAY_STATUS"
+                    code="STOCK_BIZ_TYPE"
                     placeholder="请选择关联单据类型"
                     allowClear></v-select>
                 </a-form-item>
@@ -90,8 +90,8 @@ export default {
         { title: '产品名称', dataIndex: 'productName', width: '24%', align: 'left', customRender: function (text) { return text || '--' }, ellipsis: true },
         { title: '关联单据类型', dataIndex: 'bizTypeDictValue', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
         { title: '关联单据号', dataIndex: 'bizNo', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
-        { title: '数量', dataIndex: 'qty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } },
-        { title: '状态', dataIndex: 'stateDictValue', width: '10%', align: 'center', customRender: function (text) { return text || '--' } }
+        { title: '数量', dataIndex: 'qty', width: '8%', align: 'center', customRender: function (text) { return ((text || text == 0) ? text : '--') } }
+        // { title: '状态', dataIndex: 'stateDictValue', width: '10%', align: 'center', customRender: function (text) { return text || '--' } }
       ],
       // 加载数据方法 必须为 Promise 对象
       loadData: parameter => {

+ 88 - 0
src/views/numsGoodsShelves/withdrawalManagement/applyWithdrawal.vue

@@ -0,0 +1,88 @@
+<template>
+  <a-modal
+    v-model="opened"
+    :title="title"
+    centered
+    :maskClosable="false"
+    :confirmLoading="confirmLoading"
+    :width="560"
+    :footer="null"
+    @cancel="cancel"
+  >
+    <a-spin :spinning="spinning" tip="Loading...">
+      <a-form-model
+        id="applyWithdrawal-form"
+        ref="ruleForm"
+        :model="form"
+        :rules="rules"
+        :label-col="formItemLayout.labelCol"
+        :wrapper-col="formItemLayout.wrapperCol"
+      >
+        <a-form-model-item label="申请提现金额" prop="consigneeName">
+          <a-input
+            id="applyWithdrawal"
+            placeholder="请输入正数(最多两位小数)"
+            allowClear />
+        </a-form-model-item>
+        <a-form-model-item label="实际扣除金额">
+          <span>{{}}元 </span><span style="color: #999;">(申请提现金额-提现手续费)</span>
+        </a-form-model-item>
+        <a-form-model-item label="提现账户">
+          <span>{{}}</span>
+        </a-form-model-item>
+        <a-form-model-item :wrapper-col="{ span: 12, offset: 6 }" style="text-align: center;">
+          <a-button type="primary" :loading="confirmLoading" @click="handleSubmit" id="applyWithdrawal-btn-submit">确定</a-button>
+          <a-button @click="cancel" style="margin-left: 15px" id="applyWithdrawal-btn-back">取消</a-button>
+        </a-form-model-item>
+      </a-form-model>
+    </a-spin>
+  </a-modal>
+</template>
+
+<script>
+export default {
+  props: {
+    isOpenModal: {
+      type: Boolean,
+      default: false
+    },
+    currentData: {
+      type: Object,
+      default: function () {
+        return {}
+      }
+    }
+  },
+  data () {
+    return {
+      formItemLayout: {
+        labelCol: { span: 6 },
+        wrapperCol: { span: 15 }
+      },
+      opened: this.isOpenModal,
+      title: '申请提现',
+      confirmLoading: false,
+      spinning: false,
+      rules: []
+    }
+  },
+  methods: {
+    // 保存
+    handleSubmit () {
+      this.$emit('close')
+    },
+    // 取消
+    cancel () {
+      this.$emit('close')
+    }
+  },
+  watch: {
+    isOpenModal (nVal, oVal) {
+      this.opened = nVal
+    }
+  }
+}
+</script>
+
+<style>
+</style>

+ 175 - 0
src/views/numsGoodsShelves/withdrawalManagement/list.vue

@@ -0,0 +1,175 @@
+<template>
+  <a-card size="small" :bordered="false" class="accountManagementList-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 :xl="6" :lg="6" :md="12" :sm="24">
+              <a-form-item label="交易时间">
+                <a-range-picker v-model="time" allowClear :disabledDate="disabledDate" format="YYYY-MM-DD"/>
+              </a-form-item>
+            </a-col>
+            <a-col :xl="6" :lg="6" :md="6" :sm="6">
+              <a-button type="primary" @click="$refs.table.refresh(true)" :disabled="disabled" id="outboundOrderList-refresh" >查询</a-button>
+              <a-button style="margin-left: 8px" @click="resetSearchForm" :disabled="disabled" id="outboundOrderList-reset">重置</a-button>
+            </a-col>
+          </a-row>
+        </a-form>
+      </div>
+      <div style="margin:10px 0">
+        <div style="display: flex;align-items: center;padding: 2px 0;">
+          <div style="display: flex;align-items: center;">
+            可提现金额:<a-statistic :precision="2" :value="112893" />
+            <a-button size="small" type="primary" class="button-primary" @click="handleTX">申请提现</a-button>
+            <span>(提示:① 提现手续费为0.5元/笔;② 资金到账周期为工作日+1天)</span>
+          </div>
+        </div>
+      </div>
+      <s-table
+        class="sTable fixPagination"
+        ref="table"
+        :style="{ height: tableHeight+77+'px' }"
+        size="small"
+        :rowKey="(record) => record.id"
+        :columns="columns"
+        :data="loadData"
+        :scroll="{ y:tableHeight }"
+        :defaultLoadData="true"
+        bordered>
+      </s-table>
+    </a-spin>
+    <!-- 申请提现 -->
+    <applyWithdrawal :isOpenModal="showModal" :currentData="currentData" @close="showModal=false" @refresh="$refs.table.refresh(true)"></applyWithdrawal>
+  </a-card>
+</template>
+
+<script>
+import { commonMixin } from '@/utils/mixin'
+import moment from 'moment'
+import { STable } from '@/components'
+import applyWithdrawal from './applyWithdrawal.vue'
+export default {
+  components: { STable, applyWithdrawal, commonMixin },
+  data () {
+    return {
+      spinning: false,
+      disabled: false,
+      tableHeight: 0,
+      showModal: false,
+      currentData: null,
+      time: [],
+      columns: [
+        { title: '序号', dataIndex: 'no', width: '5%', align: 'center' },
+        { title: '提现单号', dataIndex: 'createDate', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '提现时间', dataIndex: 'name', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '申请提现金额', dataIndex: '', width: '10%', align: 'right', customRender: function (text) { return text || '--' } },
+        { title: '开户名', dataIndex: '', width: '15%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '银行卡号', dataIndex: '', width: '20%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '提现人', dataIndex: '', width: '10%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '状态', dataIndex: '', width: '5%', align: 'center', customRender: function (text) { return text || '--' } },
+        { title: '备注', dataIndex: '', width: '10%', align: 'center', customRender: function (text) { return text || '--' } }
+      ],
+      // 加载数据方法 必须为 Promise 对象
+      loadData: parameter => {
+        const _this = this
+        _this.disabled = true
+        _this.spinning = true
+        return new Promise(function (resolve, reject) {
+          const data = {
+            list: [{ id: 1, createDate: '2020-08-09' }]
+          }
+          for (var i = 0; i < data.list.length; i++) {
+            data.list[i].no = i + 1
+          }
+          _this.spinning = false
+          _this.disabled = false
+          resolve(data)
+        })
+
+        // const paramsPage = Object.assign(this.queryParam) //  有分页
+        // return reportSalesReturnThjdReportList(paramsPage).then(res => {
+        //   let data
+        //   if (res.status == 200) {
+        //     data = res.data
+        //     // this.getCount(paramsPage)
+        //     const no = (data.pageNo - 1) * data.pageSize
+        //     for (var i = 0; i < data.list.length; i++) {
+        //       data.list[i].no = no + i + 1
+        //     }
+        //     this.disabled = false
+        //   }
+        //   this.spinning = false
+        //   return data
+        // })
+      }
+    }
+  },
+  methods: {
+    // 时间改变
+    dateChange (date) {
+
+    },
+    // 禁止选择今天之后的日期
+    disabledDate (current) {
+      return current && current > moment().endOf('day')
+    },
+    // 重置
+    resetSearchForm () {
+      this.time = []
+    },
+    // 申请提现
+    handleTX () {
+      this.showModal = true
+    },
+    setTableH () {
+      const tableSearchH = this.$refs.tableSearch.offsetHeight
+      this.tableHeight = window.innerHeight - tableSearchH - 265
+    },
+    pageInit () {
+      const _this = this
+      this.$nextTick(() => { // 页面渲染完成后的回调
+        _this.setTableH()
+      })
+    }
+  },
+  mounted () {
+    if (!this.$store.state.app.isNewTab) { // 页签刷新时调用
+      this.pageInit()
+      this.resetSearchForm()
+    }
+  },
+  watch: {
+    advanced (newValue, oldValue) {
+      const _this = this
+      setTimeout(() => {
+        _this.setTableH()
+      }, 400)
+    },
+    '$store.state.app.winHeight' (newValue, oldValue) { //  窗口变更时,需同时更改表格高度
+      this.setTableH()
+    }
+  },
+  activated () {
+    // 如果是新页签打开,则重置当前页面
+    if (this.$store.state.app.isNewTab) {
+      this.pageInit()
+      this.resetSearchForm()
+    }
+    // 仅刷新列表,不重置页面
+    if (this.$store.state.app.updateList) {
+      this.pageInit()
+      this.$refs.table.refresh()
+    }
+  },
+  beforeRouteEnter (to, from, next) {
+    next(vm => {})
+  }
+}
+</script>
+
+<style lang="less">
+  .accountManagementList-wrap{
+
+  }
+</style>

+ 8 - 2
src/views/outboundOrderManagement/outboundOrder/list.vue

@@ -100,13 +100,15 @@
       v-if="openModal"
       @cancle="cancleModal"
       width="80%">
-      <div style="max-height: 700px;overflow-y: scroll;">
+      <div style="max-height: 700px;overflow-y: auto;">
         <pushOrderDetailModal v-if="outBizType=='PURCHASE_RETURN'" :outBizSn="orderSn" />
         <salesDetailModal v-if="outBizType=='SALES'" :outBizSn="orderSn" />
         <urgentDetailModal v-if="outBizType=='DISPATCH_DEDUCT'" :outBizSn="orderSn" />
         <storeTransferOutDetailModal v-if="outBizType=='SHOP_CALL_OUT'" :outBizSn="orderSn" />
         <chainTransferOutDetailModal v-if="outBizType=='LINKAGE_CALL_OUT'" :outBizSn="orderSn" />
         <warehouseAllocationDetailModal v-if="outBizType=='WAREHOUSE_CALL_OUT'" :outBizSn="orderSn" />
+        <warehouseAllocationDetailModal v-if="outBizType=='WAREHOUSE_CALL_OUT'" :outBizSn="orderSn" />
+        <replenishmentDetailModal v-if="outBizType=='SHELF_REPLENISH'" :outBizSn="orderSn"></replenishmentDetailModal>
       </div>
     </a-modal>
   </a-card>
@@ -123,11 +125,12 @@ import urgentDetailModal from '@/views/salesManagement/urgentItemsOffset/detail.
 import storeTransferOutDetailModal from '@/views/allocationManagement/storeTransferOut/detail.vue'
 import chainTransferOutDetailModal from '@/views/allocationManagement/chainTransferOut/detail.vue'
 import warehouseAllocationDetailModal from '@/views/allocationManagement/warehouseAllocation/detail.vue'
+import replenishmentDetailModal from '@/views/numsGoodsShelves/replenishmentManagement/replenishmentDetail.vue'
 import { stockOutList, stockOutOut, stockOutBatchOut } from '@/api/stockOut'
 import getDate from '@/libs/getDate.js'
 export default {
   name: 'OutboundOrderList',
-  components: { STable, VSelect, rangeDate, pushOrderDetailModal, salesDetailModal, urgentDetailModal, storeTransferOutDetailModal, chainTransferOutDetailModal, warehouseAllocationDetailModal },
+  components: { STable, VSelect, rangeDate, pushOrderDetailModal, salesDetailModal, urgentDetailModal, storeTransferOutDetailModal, chainTransferOutDetailModal, warehouseAllocationDetailModal, replenishmentDetailModal },
   mixins: [commonMixin],
   data () {
     return {
@@ -261,6 +264,9 @@ export default {
       } else if (row.outBizType == 'WAREHOUSE_CALL_OUT') { // 仓库调出
         this.orderSn = row.outBizSn
         this.openModal = true
+      } else if (row.outBizType == 'SHELF_REPLENISH') { // 数字货架
+        this.orderSn = row.outBizSn
+        this.openModal = true
       } else {
         this.$message.warning('出库类型未知')
       }

+ 2 - 5
vue.config.js

@@ -108,11 +108,8 @@ const vueConfig = {
     // If you want to turn on the proxy, please remove the mockjs /src/main.jsL11
     proxy: {
       '/api': {
-        target: 'http://192.168.16.188:8503/qpls-md',
-        // target: 'http://192.168.16.107:7300/mock/61aad8ea5688cb3878d81e39/qpls-md',
-        // target: 'https://t.qpls.360arrow.com/qpls-md', //  Á·Ï°
-        // target: 'http://p.iscm.360arrow.com/qpls-md', //  Ô¤·¢²¼
-        // target: 'http://qpls-md.360arrow.com/qpls-md', //  Éú²ú
+        // target: 'http://192.168.16.188:8503/qpls-md',
+        target: 'http://frps.chelingzhu.com:7800/qpls-md',
         // ws: false,
         ws: true,
         changeOrigin: true,

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.