<template> <view class="content"> <u-navbar back-text="货架设置"> <view slot='right' style="padding: 0 30upx;color: #00aaff;" @click="toPlRacking"> <u-icon name="piliangshangjia" custom-prefix="iscm-icon"></u-icon> <text style="margin-left: 6rpx;">批量上架</text> <u-badge v-if="showDot" :is-dot="true" size="mini" type="error"></u-badge> </view> </u-navbar> <view class="card-box" v-if="detailData"> <view class="card-row flex align_center justify_between"> <view class="label">货架名称</view> <view class="text flex align_center" @click="editShelf"> <text style="width: 80%;flex: 1;">{{detailData.shelfName}}</text> <u-icon name="arrow-right" color="#969da3" size="28"></u-icon> </view> </view> <view class="card-row flex align_center justify_between"> <view class="label">关联客户</view> <view class="text flex align_center" @click="customeSet"> <text style="width: 80%;flex: 1;">{{ (detailData&&detailData.customerEntity&&detailData.customerEntity.customerName) || '--' }}</text> <u-icon name="arrow-right" color="#969da3" size="28"></u-icon> </view> </view> <view class="card-row align_center flex justify_between"> <view class="label" style="width: 50%;" @click="showTip(1)">是否设置完成 <u-icon color="#ffaa00" name="question-circle"></u-icon></view> <view class="text" style="width: 50%;text-align: right;"><u-switch v-model="switchVal" @change="switchChange"></u-switch></view> </view> <view class="card-row align_center flex justify_between"> <view class="label" style="width: 40%;" @click="showTip(0)">价格显示 <u-icon color="#ffaa00" name="question-circle"></u-icon></view> <view class="text flex align_center" style="width: 60%;text-align: right;" @click="updateShowPrice = true"> <text style="width: 80%;flex: 1;">非铺货产品——{{ showPrice == '1' ? '显示': '不显示' }}价格</text> <u-icon name="arrow-right" color="#969da3" size="28"></u-icon> </view> </view> <u-action-sheet :list="actionList" @click="clickAction" v-model="updateShowPrice"></u-action-sheet> </view> <!-- 货位信息 --> <view class="shelfPlace" v-if="shelfPlaceList"> <view class="flex align_center shelfPlaceHead"> <view class="lt"><text>□</text>表示没有绑定产品</view> <view class="search-btn flex align_center" @click="toSearchHw"> <view><u-icon name="search"></u-icon><text>按产品搜索</text></view> <u-icon name="scan"></u-icon> </view> </view> <view class="flex shelfTabs"> <view class="leftTabs"> <view v-for="item in placeTab" :key="item" :class="curTab==item?'active':''" @click="tabChange(item)">{{item}}层</view> </view> <view class="rightCons flex flex_column"> <view class="hwList flex_1"> <text @click="editHw(item)" v-for="item in shelfPlaceList[curTab]" :key="item.shelfPlaceCode" :class="item.shelfProductApiEntity && item.shelfProductApiEntity.productSn?'':'red'"> {{item.shelfPlaceCode}} </text> <text class="add" @click="addHw('add',1)"><u-icon name="plus"></u-icon></text> </view> <view class="hwAction flex justify_between"> <u-button shape="circle" @click="tapPopup(1)" size="medium">打印贴签</u-button> <u-button class="newbtn" @click="tapPopup(2)" type='primary' shape="circle" size="medium">快速补货</u-button> </view> </view> </view> </view> <view v-else> <view class="nodata">暂无货位信息,请点击 <text @click="toPlRacking">批量上架</text></view> </view> </view> </template> <script> import { shelfDetail, shelfSave, modifFinishFlag, getProductPlace, getShelfPriceShow, updateShelfPriceShow } from '@/api/shelf' import { shelfCartNotEmpty } from '@/api/shelfCart' import { createShelfReplenishBill } from '@/api/shelfReplenish' export default { components:{ }, data() { return { shelfSn: null, detailData: null, switchVal: false, showMenus:false, popData:[{title:'快速补货',val:'0'},{title:'打印贴签',val:'1'}], pleft:0, ptop:0, shelfPlaceList: null, placeTab: [], curTab: '', isLoad: false, webView: null, showDot: false, showPrice: '', updateShowPrice: false, actionList:[ { text: '非铺货产品——显示价格', fontSize: 32 }, { text: '非铺货产品——不显示价格', fontSize: 32 } ] } }, onLoad(option) { this.shelfSn = option.shelfSn // 获取货架详情 this.getShelfDetal() this.getShelfPriceShow() // 获取货物 this.getShelfPlace() this.isLoad = true this.webView = this.$mp.page.$getAppWebview(); uni.$on("editCustome",(data)=>{ this.saveShelf(data,0) }) uni.$on("editShelfName",(data)=>{ this.saveShelf(data,1) }) const win = uni.getWindowInfo() this.pleft = Math.floor(win.windowWidth * 0.3) this.ptop = Math.floor(win.windowHeight - 70) console.log(this.shelfSn) }, onUnload() { uni.$off("editCustome") uni.$off("editShelfName") }, onShow() { if(!this.isLoad){ this.updateHw() } }, methods: { // 刷新货位 updateHw(){ this.placeTab = [] this.getShelfPlace(true) }, // 批量上架 toPlRacking(){ const url = this.showDot ? '/pages/batchShelves/cartList' : '/pages/batchShelves/index' uni.navigateTo({ url: url+"?shelfSn="+this.shelfSn+'&shelfName='+this.detailData.shelfName+'&customerSn='+this.detailData.customerSn }) }, // 更多操作 tapPopup(e){ // 打印贴签 if(e == 1){ if(this.hasNoBindPro()){ uni.navigateTo({ url: "/pages/latePlay/chooseProduct?shelfSn="+this.shelfSn+'&shelfName='+this.detailData.shelfName }) }else{ uni.showModal({ showCancel:false, confirmText:"好的", title: "提示", content: "所有货位都没有绑定产品,无法打印贴签!" }) } } // 快速补货 if(e == 2){ createShelfReplenishBill({shelfSn: this.shelfSn}).then(res => { console.log(res.data) if(res.data&&res.data.length){ const params = Object.assign(this.detailData,{list:res.data}) this.$store.state.vuex_tempData = params uni.navigateTo({ url: "/pages/shelfSetting/quickReplenish" }) }else{ uni.showModal({ showCancel:false, confirmText:"好的", title: "提示", content: "没有需要补货的产品" }) } }) } }, showTip(type){ uni.showModal({ showCancel:false, confirmText:"好的", title: "提示", content: type ? "只有当数字货架的“是否设置完成”为“是”,系统才会自动对该货架生成补货单,修理厂才能正常下单。":"1、非铺货产品,是指不是货架上的产品\n2、终端会员价,对于汽修厂来说,即进货价\n3、如果该产品在销售单里有销售记录,则使用最近一次销售价,如果没有销售记录,则使用箭冠总公司的终端会员价" }) }, // 设置完成是否 switchChange(v){ const params = { shelfSn: this.shelfSn, finishFlag: v ? '1' : '0' } modifFinishFlag(params).then(res => { if (res.status == 200) { uni.showToast({ icon: 'none', title: res.message }) } }) }, // 关联客户 customeSet(){ uni.navigateTo({ url: "/pages/sales/chooseCustomer?backPage=shelfEdit&shelfName="+this.detailData.shelfName }) }, // 修改货架名称 editShelf(){ uni.navigateTo({ url: "/pages/shelfSetting/editShelf?shelfName="+this.detailData.shelfName }) }, // 是否没有绑定任何产品 hasNoBindPro(){ let noBindPro = null; for(let i=0;i<this.placeTab.length;i++){ noBindPro = this.shelfPlaceList[this.placeTab[i]].find(item => item.shelfProductApiEntity && item.shelfProductApiEntity.productSn); if(!!noBindPro){ break } } return !!noBindPro }, // 按照产品搜索货位 toSearchHw(){ if(this.hasNoBindPro()){ uni.navigateTo({ url: "/pages/shelfSetting/searchShelfHw?shelfName="+this.detailData.shelfName+"&shelfSn="+this.shelfSn }) }else{ uni.showModal({ showCancel:false, confirmText:"好的", title: "提示", content: "所有货位都没有绑定产品,无法搜索!" }) } }, // 编辑货位 editHw(item){ const hasProduct = item.shelfProductApiEntity && item.shelfProductApiEntity.productSn const type = hasProduct ? 'edit':'bind' const params = Object.assign(this.detailData,item) this.$store.state.vuex_tempData = params uni.navigateTo({ url: "/pages/shelfSetting/editShelfHw?type=" + type }) }, // 新增货位 addHw(type,flag){ let shelfPlaceCode = '' if(type=='edit'){ shelfPlaceCode = flag } if(type=='add'&&flag==1){ const row = this.shelfPlaceList[this.curTab] const num = row[row.length-1].shelfPlaceCode.replace(this.curTab,'') const nextNum = Number(num) + 1 shelfPlaceCode = this.curTab + (nextNum<10?'0':'') + nextNum } const params={ customerSn: this.detailData.customerSn, shelfSn: this.detailData.shelfSn, id: this.detailData.id } uni.navigateTo({ url: "/pages/shelfSetting/addShelfHw?detailData="+encodeURIComponent(JSON.stringify(params))+"&type="+type+"&shelfPlaceCode="+shelfPlaceCode }) }, // 保存数字货架基本信息 saveShelf(data,type){ const params = { shelfSn: this.shelfSn } if(type == 1){ params.customerSn = this.detailData.customerSn params.shelfName = data.shelfName }else{ params.customerSn = data.customerSn } shelfSave(params).then(res => { if (res.status == 200) { uni.showToast({ icon: 'none', title: res.message }) this.getShelfDetal() } }) }, // 获取价格显示设置 getShelfPriceShow () { getShelfPriceShow({ shelfSn: this.shelfSn }).then(res => { if (res.status == 200) { this.showPrice = res.data.paramValue } }) }, clickAction(index){ uni.showLoading({ mask: true, title: '正在保存价格显示...' }) updateShelfPriceShow({ shelfSn: this.shelfSn, paramValue: index == 0 ? 1 : 0 }).then(res => { if(res.status == 200){ this.getShelfPriceShow() uni.showToast({ icon: 'none', title: res.message }) } uni.hideLoading() }) }, getShelfDetal(){ shelfDetail({ sn: this.shelfSn }).then(res => { if (res.status == 200) { this.detailData = res.data this.switchVal = res.data.finishFlag == 1 } else { this.detailData = null } }) }, getShelfPlace(flag){ uni.showLoading({ mask: true, title: '正在查询...' }) getProductPlace({ shelfSn: this.shelfSn }).then(res => { uni.hideLoading() if (res.status == 200 && res.data) { this.shelfPlaceList = res.data // 获取层 for(let a in res.data){ this.placeTab.push(a) } // 排序 this.placeTab.sort(function(a,b){ return (a+'').localeCompare(b+'');}); console.log(this.placeTab) if(!flag || !this.curTab){ this.curTab = this.placeTab[0] } if(this.placeTab.length == 0){ this.shelfPlaceList = null } } else { this.shelfPlaceList = null this.placeTab = [] } // 是否有已录入的产品 this.getHasCartNotEmpty() this.isLoad = false }) }, tabChange(item){ this.curTab = item }, getHasCartNotEmpty(){ shelfCartNotEmpty({ shelfSn: this.shelfSn }).then(res => { this.showDot = res.data == 1 }) } } } </script> <style lang="less"> .content{ width:100%; .nodata{ padding: 100rpx 50rpx; text-align: center; > text{ color: #00aaff; margin-left: 10rpx; } } } .card-box{ background-color: #fff; border-radius: 0.5rem; box-shadow: 0.1rem 0.2rem 0.3rem #eee; padding: 0 1rem; margin: 0.5rem; .card-row{ border-bottom: 1rpx solid #eee; padding: 20rpx 0; min-height: 90rpx; &:last-child{ border-bottom: 0; } .label{ flex: 1; width: 20%; } .text{ width: 80%; color: #666; } } } .shelfPlace{ .shelfPlaceHead{ padding: 0.2rem 0.5rem 0.5rem; justify-content: space-between; .lt{ font-size: 0.9rem; color: #999; text{ color: #ff5500; font-size: 1rem; } } .search-btn{ border:1rpx solid #eee; border-radius: 50rpx; width: 50%; justify-content: space-between; padding:0.3rem 0.5rem; color: #999; background-color: #fff; font-size: 0.9rem; &:active{ opacity: 0.6; } } } .shelfTabs{ height: calc(100vh - 150rpx); .leftTabs{ width: 20%; overflow: auto; > view{ padding: 0.8rem 0.5rem; border-left: 0.2rem solid #f8f8f8; text-align: center; } .active{ border-color: rgb(47, 126, 209); background-color: #fff; } } .rightCons{ width: 80%; background-color: #fff; position: relative; .hwList{ overflow: auto; padding: 0.5rem; padding-bottom: 105rpx; > text{ border: 1rpx solid #eee; padding: 0.2rem 0.8rem; border-radius: 0.3rem; margin: 0.5rem 2%; float: left; width: 20%; text-align: center; } .red{ border-color: #ff5500; } .add{ border-style: dashed; border-color: #999; color: #999; } } .hwAction{ padding: 0.5rem; position: fixed; bottom: 0; right: 0; width: 80%; background-color: #fff; button{ width: 240rpx; } .newbtn{ background-color: rgb(51, 95, 182); color: #fff; } } } } } </style>