Browse Source

全工厂授权

dev
常熟吴彦祖 2 days ago
parent
commit
4360d056a5
  1. 3
      src/store/modules/user.js
  2. 125
      src/views/main.vue

3
src/store/modules/user.js

@ -3,7 +3,8 @@ export default {
state: { state: {
id: 0, id: 0,
name: '', name: '',
site: 0,
// 当前登录工厂编码,默认空字符串避免数值0影响菜单授权判定 - rqrq
site: '',
languageDefault: '', languageDefault: '',
userDisplay: '', userDisplay: '',
userDev: false, userDev: false,

125
src/views/main.vue

@ -33,32 +33,33 @@
<!-- 功能区域 --> <!-- 功能区域 -->
<div class="content-area"> <div class="content-area">
<!-- section层级也支持site授权默认*全工厂可见按需改为具体site编码 - rqrq -->
<!-- 收货入库 --> <!-- 收货入库 -->
<div class="section">
<div class="section" v-site-auth="'*'">
<div class="section-header"> <div class="section-header">
<span class="bullet"></span> <span class="bullet"></span>
<span class="section-title">收货入库</span> <span class="section-title">收货入库</span>
</div> </div>
<div class="button-grid"> <div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('porecv')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('porecv')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">采购入库</div> <div class="menu-text">采购入库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionInboundProduction')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('productionInboundProduction')">
<div class="menu-icon production-inbound"> <div class="menu-icon production-inbound">
<van-icon name="cart" size="24" /> <van-icon name="cart" size="24" />
</div> </div>
<div class="menu-text">生产入库</div> <div class="menu-text">生产入库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionreturn')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('productionreturn')">
<div class="menu-icon production-return"> <div class="menu-icon production-return">
<van-icon name="revoke" size="24" /> <van-icon name="revoke" size="24" />
</div> </div>
<div class="menu-text">生产退料</div> <div class="menu-text">生产退料</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('salereturn')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('salereturn')">
<div class="menu-icon sales-return"> <div class="menu-icon sales-return">
<van-icon name="revoke" size="24" /> <van-icon name="revoke" size="24" />
</div> </div>
@ -68,43 +69,43 @@
</div> </div>
<!-- 拣货出库 --> <!-- 拣货出库 -->
<div class="section">
<div class="section" v-site-auth="'*'">
<div class="section-header"> <div class="section-header">
<span class="bullet"></span> <span class="bullet"></span>
<span class="section-title">拣货出库</span> <span class="section-title">拣货出库</span>
</div> </div>
<div class="button-grid"> <div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('inventory-move')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('inventory-move')">
<div class="menu-icon inventory-move"> <div class="menu-icon inventory-move">
<van-icon name="exchange" size="24" /> <van-icon name="exchange" size="24" />
</div> </div>
<div class="menu-text">移库</div> <div class="menu-text">移库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('otherinout')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('otherinout')">
<div class="menu-icon other"> <div class="menu-icon other">
<van-icon name="exchange" size="24" /> <van-icon name="exchange" size="24" />
</div> </div>
<div class="menu-text">其他出入库</div> <div class="menu-text">其他出入库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('productionissue')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('productionissue')">
<div class="menu-icon production-issue"> <div class="menu-icon production-issue">
<van-icon name="send-gift-o" size="24" /> <van-icon name="send-gift-o" size="24" />
</div> </div>
<div class="menu-text">生产领料</div> <div class="menu-text">生产领料</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('mrissue')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('mrissue')">
<div class="menu-icon mr"> <div class="menu-icon mr">
<van-icon name="orders-o" size="24" /> <van-icon name="orders-o" size="24" />
</div> </div>
<div class="menu-text">MR发料</div> <div class="menu-text">MR发料</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('outsource')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('outsource')">
<div class="menu-icon outsourcing"> <div class="menu-icon outsourcing">
<van-icon name="logistics" size="24" /> <van-icon name="logistics" size="24" />
</div> </div>
<div class="menu-text">委外发料</div> <div class="menu-text">委外发料</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('customerissue')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('customerissue')">
<!-- <div class="menu-item disabled" @click="handleDisabledFeature('customerissue')"> --> <!-- <div class="menu-item disabled" @click="handleDisabledFeature('customerissue')"> -->
<div class="menu-icon sales-delivery"> <div class="menu-icon sales-delivery">
<van-icon name="logistics" size="24" /> <van-icon name="logistics" size="24" />
@ -119,55 +120,55 @@
</div> --> </div> -->
</div> </div>
</div> </div>
<div class="section">
<div class="section" v-site-auth="'55'">
<div class="section-header"> <div class="section-header">
<span class="bullet"></span> <span class="bullet"></span>
<span class="section-title">立库常规操作</span> <span class="section-title">立库常规操作</span>
</div> </div>
<div class="button-grid"> <div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('callOutToStation')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('callOutToStation')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">立库取货</div> <div class="menu-text">立库取货</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletPacking')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletPacking')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">组盘入库</div> <div class="menu-text">组盘入库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletSorting')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletSorting')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">分拣组盘</div> <div class="menu-text">分拣组盘</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletSearch')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletSearch')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">查看托盘</div> <div class="menu-text">查看托盘</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletChangeStation')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletChangeStation')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">托盘运输</div> <div class="menu-text">托盘运输</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('emptyPalletAssembly')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('emptyPalletAssembly')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">空托盘入库</div> <div class="menu-text">空托盘入库</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('cancelWcsPallet')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('cancelWcsPallet')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">取消组盘</div> <div class="menu-text">取消组盘</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletMerge')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletMerge')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
@ -175,49 +176,49 @@
</div> </div>
</div> </div>
</div> </div>
<div class="section">
<div class="section" v-site-auth="'55'">
<div class="section-header"> <div class="section-header">
<span class="bullet"></span> <span class="bullet"></span>
<span class="section-title">立库特殊操作</span> <span class="section-title">立库特殊操作</span>
</div> </div>
<div class="button-grid"> <div class="button-grid">
<div class="menu-item" @click="navigateWithWarehouseCheck('callOut')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('callOut')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">Call料</div> <div class="menu-text">Call料</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletAssembly')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletAssembly')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">直接组盘</div> <div class="menu-text">直接组盘</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletManualMove')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletManualMove')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">栈板人工移动</div> <div class="menu-text">栈板人工移动</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('wmsCancelReserve')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('wmsCancelReserve')">
<div class="menu-icon inventory"> <div class="menu-icon inventory">
<van-icon name="orders-o" size="24" /> <van-icon name="orders-o" size="24" />
</div> </div>
<div class="menu-text">取消预留</div> <div class="menu-text">取消预留</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('palletSortingNoAgv')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('palletSortingNoAgv')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">无AGV分拣</div> <div class="menu-text">无AGV分拣</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('callOutForHetuo')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('callOutForHetuo')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
<div class="menu-text">合托Call板</div> <div class="menu-text">合托Call板</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('manualCount')">
<div class="menu-item" v-site-auth="'55'" @click="navigateWithWarehouseCheck('manualCount')">
<div class="menu-icon purchase"> <div class="menu-icon purchase">
<van-icon name="shopping-cart-o" size="24" /> <van-icon name="shopping-cart-o" size="24" />
</div> </div>
@ -226,7 +227,7 @@
</div> </div>
</div> </div>
<!-- 库内管理 --> <!-- 库内管理 -->
<div class="section">
<div class="section" v-site-auth="'*'">
<div class="section-header"> <div class="section-header">
<span class="bullet"></span> <span class="bullet"></span>
<span class="section-title">库内管理</span> <span class="section-title">库内管理</span>
@ -238,14 +239,14 @@
</div> </div>
<div class="menu-text">属性变动</div> <div class="menu-text">属性变动</div>
</div>--> </div>-->
<div class="menu-item" @click="navigateWithWarehouseCheck('labelQuery')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('labelQuery')">
<div class="menu-icon inventory"> <div class="menu-icon inventory">
<van-icon name="orders-o" size="24" /> <van-icon name="orders-o" size="24" />
</div> </div>
<div class="menu-text">标签查询</div> <div class="menu-text">标签查询</div>
</div> </div>
<div class="menu-item" @click="navigateWithWarehouseCheck('labelCalibration')">
<div class="menu-item" v-site-auth="'*'" @click="navigateWithWarehouseCheck('labelCalibration')">
<div class="menu-icon inventory"> <div class="menu-icon inventory">
<van-icon name="orders-o" size="24" /> <van-icon name="orders-o" size="24" />
</div> </div>
@ -280,6 +281,21 @@ export default {
showWarehouseDropdown: false showWarehouseDropdown: false
} }
}, },
directives: {
// * site - rqrq
siteAuth: {
inserted(el, binding, vnode) {
if (vnode.context && vnode.context.applySiteAuthForElement) {
vnode.context.applySiteAuthForElement(el, binding)
}
},
componentUpdated(el, binding, vnode) {
if (vnode.context && vnode.context.applySiteAuthForElement) {
vnode.context.applySiteAuthForElement(el, binding)
}
}
}
},
computed: { computed: {
documentClientHeight: { documentClientHeight: {
get() { get() {
@ -312,7 +328,12 @@ export default {
}, },
site: { site: {
get() { get() {
return localStorage.getItem('site')
const storeSite = this.$store.state.user.site
const normalizedStoreSite = storeSite === null || storeSite === undefined ? '' : String(storeSite).trim()
if (normalizedStoreSite && normalizedStoreSite !== '0') {
return normalizedStoreSite
}
return (localStorage.getItem('site') || '').trim()
}, },
set(val) { set(val) {
this.$store.commit('user/updateSite', val) this.$store.commit('user/updateSite', val)
@ -343,10 +364,44 @@ export default {
document.removeEventListener('click', this.handleDocumentClick) document.removeEventListener('click', this.handleDocumentClick)
}, },
created() { created() {
this.syncStoreSiteFromCache()
this.getUserInfo() this.getUserInfo()
this.getWarehouseList(); this.getWarehouseList();
}, },
methods: { methods: {
// sitestore - rqrq
syncStoreSiteFromCache() {
const cacheSite = (localStorage.getItem('site') || '').trim()
if (cacheSite) {
this.$store.commit('user/updateSite', cacheSite)
}
},
// site*site - rqrq
normalizeMenuSiteAuthValue(siteAuthValue) {
const rawValue = siteAuthValue === null || siteAuthValue === undefined ? '*' : String(siteAuthValue).trim()
return rawValue === '' ? '*' : rawValue
},
// **site - rqrq
isMenuVisibleForCurrentSite(siteAuthValue) {
const normalizedAuthValue = this.normalizeMenuSiteAuthValue(siteAuthValue)
if (normalizedAuthValue === '*') {
return true
}
const currentSite = this.site
if (!currentSite) {
return false
}
const authSiteList = normalizedAuthValue
.split(',')
.map(item => item.trim())
.filter(item => item !== '')
return authSiteList.includes('*') || authSiteList.includes(String(currentSite).trim())
},
// site - rqrq
applySiteAuthForElement(el, binding) {
const isVisible = this.isMenuVisibleForCurrentSite(binding.value)
el.style.display = isVisible ? '' : 'none'
},
// //
handleDisabledFeature(featureName) { handleDisabledFeature(featureName) {
this.$message({ this.$message({
@ -365,7 +420,7 @@ export default {
}, },
// //
getWarehouseList() { getWarehouseList() {
const currentSite = localStorage.getItem('site');
const currentSite = this.site;
if (!currentSite) { if (!currentSite) {
this.$message.error('请先选择工厂'); this.$message.error('请先选择工厂');
this.$router.push({ name: 'login' }); this.$router.push({ name: 'login' });
@ -461,6 +516,8 @@ export default {
this.loading = false this.loading = false
this.userId = data.user.userId this.userId = data.user.userId
this.userName = data.user.username this.userName = data.user.username
// userstoresite - rqrq
this.$store.commit('user/updateSite', this.site)
this.languageDefault = data.user.languageDefault this.languageDefault = data.user.languageDefault
this.userDisplay = data.user.userDisplay this.userDisplay = data.user.userDisplay
let userSubSiteCodeList = [] let userSubSiteCodeList = []

Loading…
Cancel
Save