250 lines
8.3 KiB
Vue
250 lines
8.3 KiB
Vue
<template>
|
||
|
||
<JeepayBackground :bgColorStyle="{}">
|
||
|
||
<JeepayCustomNavbar textColor="#fff" bgDefaultColor="linear-gradient(270deg, rgba(72, 192, 255, 1) 0%, rgba(51, 157, 255, 1) 100%)" title="详情" backCtrl="back" />
|
||
|
||
<view class="sta-info">
|
||
<image class="sta-photo" :src="vdata.record.avatarUrl" mode="scaleToFill" />
|
||
<view class="info-main">
|
||
<view class="info-name">
|
||
{{ vdata.record.realname }}
|
||
<image src="/pageDevice/static/devIconImg/icon-more-white.svg" mode="scaleToFill" @tap="single.open('delete')" />
|
||
</view>
|
||
<view class="info-phone">{{ vdata.record.telphone }}</view>
|
||
</view>
|
||
</view>
|
||
|
||
<JeepayCard viewStyle="margin-top: 50rpx" editText="编辑信息" @editTap="go.to('PAGES_USER_EDIT', {sysUserId: vdata.record.sysUserId})">
|
||
<JeepayDescview>
|
||
<JeepayDescviewItem title="用户ID" :desc="vdata.record.sysUserId" />
|
||
<JeepayDescviewItem title="完整手机号" :desc="vdata.record.telphone" />
|
||
<JeepayDescviewItem title="用户登录名" :desc="vdata.record.loginUsername" />
|
||
<JeepayDescviewItem title="用户性别" >
|
||
<template #desc>
|
||
<view class="sex-info-text">
|
||
<template v-if="vdata.record.sex == 1">
|
||
<image src="/pageDevice/static/devIconImg/icon-man.svg" mode="scaleToFill" />男
|
||
</template>
|
||
<template v-else-if="vdata.record.sex == 2">
|
||
<image src="/pageDevice/static/devIconImg/icon-woman.svg" mode="scaleToFill" />女
|
||
</template>
|
||
<template v-else>
|
||
未知
|
||
</template>
|
||
</view>
|
||
</template>
|
||
</JeepayDescviewItem>
|
||
<JeepayDescviewItem title="用户编号" :desc="vdata.record.userNo" />
|
||
<JeepayDescviewItem title="用户类型" >
|
||
<template #desc>
|
||
<JeepayTag :type="datamap.userType(vdata.record.userType).type">{{ datamap.userType(vdata.record.userType).text }}</JeepayTag>
|
||
</template>
|
||
</JeepayDescviewItem>
|
||
<JeepayDescviewItem title="创建时间" :desc="vdata.record.createdAt" />
|
||
</JeepayDescview>
|
||
</JeepayCard>
|
||
|
||
|
||
<!-- 仅非超管显示 -->
|
||
<JeepayCard v-if="vdata.record.userType != 1" title="已绑定门店" viewStyle="margin-top: 40rpx">
|
||
<JeepayDescview>
|
||
<template v-for="(r) in vdata.selectedStoreList">
|
||
<JeepayDescviewItem :title="r.storeName" :desc="r.storeId" />
|
||
</template>
|
||
</JeepayDescview>
|
||
</JeepayCard>
|
||
|
||
<JeepayCard title="权限管理" viewStyle="margin-top: 40rpx">
|
||
<JeepayTableListItem v-if="ent.has('ENT_UR_USER_EDIT')" title="用户状态" subtitle="状态禁用后,用户将无法登录APP和后台管理系统">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.record.state" :showSwitchType="true" :updateStateFunc="updateStateFunc"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
|
||
<JeepayTableListItem v-if="vdata.record.userType == 11" title="门店编辑权限" subtitle="权限禁用后,该用户将不支持编辑门店信息功能">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.userRules['STORE']" :showSwitchType="true" :updateStateFunc="(state) => updateRuleFunc('STORE', state)"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
<JeepayTableListItem v-if="vdata.record.userType == 12" title="收银权限" subtitle="权限禁用后,该用户将不支持快捷收银功能">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.userRules['QUICK_PAY']" :showSwitchType="true" :updateStateFunc="(state) => updateRuleFunc('QUICK_PAY', state)"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
<JeepayTableListItem v-if="vdata.record.userType == 12" title="订单退款权限" subtitle="权限禁用后,该用户将不支持订单退款操作">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.userRules['REFUND']" :showSwitchType="true" :updateStateFunc="(state) => updateRuleFunc('REFUND', state)"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
<JeepayTableListItem v-if="vdata.record.userType == 12" title="设备管理权限" subtitle="权限禁用后,该用户将不支持门店设备管理功能">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.userRules['DEVICE']" :showSwitchType="true" :updateStateFunc="(state) => updateRuleFunc('DEVICE', state)"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
<JeepayTableListItem v-if="vdata.record.userType == 12" title="统计报表权限" subtitle="权限禁用后,该用户将不支持查看门店统计报表数据">
|
||
<template #titleRight>
|
||
<JeepayStateSwitch v-model:state="vdata.userRules['STATS']" :showSwitchType="true" :updateStateFunc="(state) => updateRuleFunc('STATS', state)"/>
|
||
</template>
|
||
</JeepayTableListItem>
|
||
|
||
</JeepayCard>
|
||
|
||
<JSinglePopup ref="single" :list="list" activeColor="#FF5B4C" />
|
||
<JeepayPopupConfirm ref="jeepayPopupConfirmRef" />
|
||
</JeepayBackground>
|
||
</template>
|
||
|
||
<script setup>
|
||
import { reactive, ref } from 'vue'
|
||
import { onLoad, onUnload } from '@dcloudio/uni-app'
|
||
import { reqLoad, API_URL_SYS_USER_LIST, API_URL_USER_BIND_STORE_LIST, $getUserEntRoles, $updateUserEntRoles } from '@/http/apiManager.js'
|
||
import datamap from '@/commons/utils/datamap.js'
|
||
import infoBox from '@/commons/utils/infoBox.js';
|
||
import go from '@/commons/utils/go.js'
|
||
import formUtil from '@/commons/utils/formUtil.js'
|
||
import emit from '@/commons/utils/emit.js'
|
||
import ent from '@/commons/utils/ent.js'
|
||
|
||
const single = ref()
|
||
const jeepayPopupConfirmRef = ref()
|
||
|
||
const list = reactive([
|
||
{ label: '删除用户', value: 'delete', fun: confirmFunc},
|
||
])
|
||
|
||
onLoad((options) => {
|
||
refData(options.sysUserId)
|
||
})
|
||
|
||
const vdata = reactive({
|
||
record : { },
|
||
selectedStoreList: [],
|
||
|
||
// 用户权限集合
|
||
userRules: {
|
||
"STORE": 0, "QUICK_PAY": 0, "REFUND": 0, "DEVICE": 0, "STATS": 0,
|
||
},
|
||
})
|
||
|
||
// 监听 更新事件
|
||
onUnload(() => uni.$off(emit.ENAME_REF_SYS_USER_DETAIL))
|
||
uni.$on(emit.ENAME_REF_SYS_USER_DETAIL, function(data){
|
||
refData(vdata.record.sysUserId)
|
||
})
|
||
|
||
function refData(sysUserId){
|
||
reqLoad.getById(API_URL_SYS_USER_LIST, sysUserId).then(({bizData}) => {
|
||
vdata.record = bizData
|
||
|
||
vdata.selectedStoreList = []
|
||
|
||
// 店长 or 店员。 查询权限
|
||
if(bizData.userType == 11 || bizData.userType == 12){
|
||
|
||
// 查询已绑定门店
|
||
reqLoad.list(API_URL_USER_BIND_STORE_LIST, {sysUserId: sysUserId, pageSize: -1}).then((storeRes) => {
|
||
vdata.selectedStoreList = storeRes.bizData.records
|
||
})
|
||
|
||
|
||
$getUserEntRoles(sysUserId).then(roleRes => {
|
||
let roleBizData = roleRes.bizData;
|
||
if(roleBizData && roleBizData.rules){
|
||
let ruleList = JSON.parse(roleBizData.rules)
|
||
Object.keys(vdata.userRules).forEach(k => {
|
||
vdata.userRules[k] = ruleList.indexOf(k) >= 0 ? 1: 0
|
||
})
|
||
}
|
||
})
|
||
}
|
||
})
|
||
}
|
||
|
||
function updateStateFunc(state){
|
||
return reqLoad.updateById(API_URL_SYS_USER_LIST, vdata.record.sysUserId, { state: state }).then(() => {
|
||
emit.pageEmit(emit.ENAME_REF_SYS_USER_LIST)
|
||
infoBox.showSuccessToast("修改成功");
|
||
})
|
||
}
|
||
|
||
// 修改用户权限。
|
||
function updateRuleFunc(ruleName, state){
|
||
return $updateUserEntRoles(vdata.record.sysUserId, ruleName, state).then(() => {
|
||
infoBox.showSuccessToast("修改成功",{mask:false});
|
||
})
|
||
}
|
||
|
||
function confirmFunc() {
|
||
jeepayPopupConfirmRef.value.open('确定删除用户?').then(() => {
|
||
deleteFunc()
|
||
}).catch(() => {
|
||
single.value.open('delete')
|
||
})
|
||
}
|
||
|
||
function deleteFunc(){
|
||
return reqLoad.delById(API_URL_SYS_USER_LIST, vdata.record.sysUserId).then(() => {
|
||
infoBox.showSuccessToast("删除成功");
|
||
go.back(1, emit.ENAME_REF_SYS_USER_LIST) // 返回页面 && 更新
|
||
})
|
||
}
|
||
|
||
</script>
|
||
|
||
|
||
<style lang="scss" scoped>
|
||
|
||
.sex-info-text {
|
||
image {
|
||
width: 30rpx;
|
||
height: 30rpx;
|
||
margin-right: 10rpx;
|
||
}
|
||
}
|
||
|
||
.sta-info {
|
||
display: flex;
|
||
margin-top: 50rpx;
|
||
padding: 0 50rpx;
|
||
.sta-photo {
|
||
width: 120rpx;
|
||
height: 120rpx;
|
||
border-radius: 50%;
|
||
image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
}
|
||
.info-main {
|
||
flex: 1;
|
||
margin-left: 30rpx;
|
||
color: #fff;
|
||
.info-name {
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
font-size: 33rpx;
|
||
font-weight: 400;
|
||
image {
|
||
width: 70rpx;
|
||
height: 70rpx;
|
||
}
|
||
}
|
||
.info-phone {
|
||
margin-top: 16rpx;
|
||
color: rgba(251, 252, 253, 0.7);
|
||
font-size: 25rpx;
|
||
font-weight: 400;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
</style>
|