chuangte_bike_newxcx/page_fenbao/yunwei/addyunwei.vue
2025-04-17 17:12:42 +08:00

428 lines
8.8 KiB
Vue

<template>
<view class="page">
<u-navbar :title="tit" :border-bottom="false" :background="bgc" title-color='#000' back-icon-color="#000"
title-size='36' height='50'></u-navbar>
<view class="box">
<view class="title">
基本信息
</view>
<view class="list">
<view class="list_val" style="position: relative;">
<view class="" style="padding-top:12rpx;width: 176rpx;">身份类型</view> <input type="text" disabled="false" v-model="sheng" :placeholder="sheng" />
<!-- <u-select v-model="show" :list="arr" @confirm="confirm"></u-select> -->
</view>
<view class="list_val">
<view class="" style="padding-top:12rpx">手机号码</view> <input type="text" v-model="tel"
placeholder="请输入手机号码" />
</view>
<!-- <view class="list_val">
<view class="" style="padding-top:12rpx">分成比例</view> <input type="text" v-model="bili"
placeholder="请输入分成比例%" />
</view> -->
<view class="list_val">
<view class="" style="padding-top:12rpx">备注</view> <input type="text" v-model="beizhu"
placeholder="请输入备注" />
</view>
</view>
<view class="title">
权限
</view>
<view class="swlist">
<view class="swlist_val" v-for="(item,index) in list" :key="index">
<view class="lt">
<view class="one">
{{item.name}}
</view>
<view class="two">
{{item.tit}}
</view>
</view>
<view class="rt">
<u-switch v-model="item.checked" active-color="#4C97E7" size="36"
inactive-color="#eee"></u-switch>
</view>
</view>
</view>
<view class="baocun" @click="btncj">
{{tit}}
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
show: false,
bgc: {
backgroundColor: "#fff"
},
level: '',
tel: '',
sheng: '运维',
arr: [{
label: '加盟商',
value: 1
},
{
label: '合伙人',
value: 2
}
],
tit: '创建运维人员',
userId: '',
bili: '',
beizhu: '',
jiamtype: '',
areaId: '',
jiamid: '',
// 权限映射配置
permissionConfig: {
'查看运营区': 'area:view',
'操作运营区': 'area:edit',
'查看故障': 'fault:view',
'故障审核': 'fault:edit',
'查看订单': 'order:view',
'操作订单': 'order:edit',
'查看车辆': 'device:view',
'操作车辆': 'device:edit',
'查看订单金额': 'order:view:amount',
'查看客服': 'customerService:view',
'操作客服': 'customerService:edit'
},
list: [{
name: '查看运营区',
tit: '是否允许',
checked: false,
txt: 1
},
{
name: '操作运营区',
tit: '是否允许',
checked: false,
txt: 2
},
{
name: '查看故障',
tit: '是否允许',
checked: false,
txt: 3
},
{
name: '故障审核',
tit: '是否允许',
checked: false,
txt: 4
},
{
name: '查看订单',
tit: '是否允许',
checked: false,
txt: 5
},
{
name: '操作订单',
tit: '是否允许',
checked: false,
txt: 6
},
{
name: '查看车辆',
tit: '是否允许',
checked: false,
txt: 7
},
{
name: '操作车辆',
tit: '是否允许',
checked: false,
txt: 8
},
{
name: '查看客服',
tit: '是否允许',
checked: false,
txt: 10
},
{
name: '操作客服',
tit: '是否允许',
checked: false,
txt: 11
},
],
}
},
onLoad(option) {
this.areaId = uni.getStorageSync('adminAreaid')
if (option.item) {
this.tit = '编辑运维人员'
const obj = JSON.parse(option.item)
this.initFormData(obj)
}
},
methods: {
// 初始化表单数据
initFormData(obj) {
this.tel = obj.userPhone
this.areaId = obj.areaId
this.bili = obj.point
this.jiamid = obj.id
this.beizhu = obj.remark
this.jiamtype = obj.type
// 设置权限选中状态
this.setPermissionStatus(obj.permissions)
// 设置身份类型显示
},
// 设置权限选中状态
setPermissionStatus(permissions) {
const permissionMap = {
'area:view': 0,
'area:edit': 1,
'fault:view': 2,
'fault:edit': 3,
'order:view': 4,
'order:edit': 5,
'device:view': 6,
'device:edit': 7,
'customerService:view': 8,
'customerService:edit': 9
}
permissions.forEach(permission => {
const index = permissionMap[permission]
if (index !== undefined) {
this.list[index].checked = true
}
})
},
// 身份选择确认
confirm(e) {
this.sheng = e[0].label
this.jiamtype = e[0].value
},
// 收集选中的权限
collectPermissions() {
return this.list
.filter(item => item.checked)
.map(item => this.permissionConfig[item.name])
.filter(Boolean) // 过滤掉undefined
},
// 构建请求数据
buildRequestData() {
return {
id: this.jiamid,
userPhone: this.tel,
areaId: this.areaId,
point: this.bili,
type: 3,
remark: this.beizhu,
permissions: this.collectPermissions()
}
},
// 处理API响应
handleApiResponse(res, successMessage) {
if (res.code === 200) {
uni.showToast({
title: successMessage,
icon: 'success',
duration: 2000
})
setTimeout(() => {
uni.navigateBack()
}, 2000)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
})
}
},
// 点击创建/编辑
async btncj() {
const data = this.buildRequestData()
const isEdit = this.tit === '编辑运维人员'
const apiMethod = isEdit ? 'put' : 'post'
const apiUrl = '/bst/areaJoin'
const successMessage = isEdit ? '编辑成功' : '创建成功'
try {
const res = await this.$u[apiMethod](apiUrl, data)
this.handleApiResponse(res, successMessage)
} catch (error) {
uni.showToast({
title: '请求失败,请重试',
icon: 'none',
duration: 2000
})
}
}
}
}
</script>
<style lang="scss">
/deep/ .u-title,
/deep/ .uicon-nav-back {
padding-bottom: 22rpx;
}
.swlist {
margin-top: 34rpx;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.swlist_val {
display: flex;
justify-content: space-between;
width: 324rpx;
height: 144rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding-top: 28rpx;
padding-left: 38rpx;
box-sizing: border-box;
margin-top: 18rpx;
}
.lt {
.one {
font-size: 28rpx;
color: #3D3D3D;
}
.two {
font-size: 24rpx;
color: #808080;
margin-top: 12rpx;
}
}
.rt {
margin-top: 24rpx;
padding-right: 12rpx;
}
}
.title {
font-size: 32rpx;
color: #3D3D3D;
}
.page {
width: 750rpx;
.box {
width: 750rpx;
height: 100%;
overflow-y: scroll;
background: #F4F5F7;
border-radius: 0rpx 0rpx 0rpx 0rpx;
padding: 32rpx 36rpx;
box-sizing: border-box;
padding-bottom: 100rpx;
.baocun {
width: 584rpx;
height: 90rpx;
margin: auto;
background: linear-gradient(270deg, #4C97E7 0%, #4C97E7 100%);
border-radius: 54rpx 54rpx 54rpx 54rpx;
margin-top: 110rpx;
margin-bottom: 78rpx;
font-weight: 500;
font-size: 40rpx;
color: #FFFFFF;
text-align: center;
line-height: 90rpx;
}
.swlist {
margin-top: 34rpx;
display: flex;
justify-content: space-between;
flex-wrap: wrap;
.swlist_val {
display: flex;
justify-content: space-between;
width: 324rpx;
height: 144rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding-top: 28rpx;
padding-left: 38rpx;
box-sizing: border-box;
margin-top: 18rpx;
}
.lt {
.one {
font-size: 28rpx;
color: #3D3D3D;
}
.two {
font-size: 24rpx;
color: #808080;
margin-top: 12rpx;
}
}
.rt {
margin-top: 24rpx;
padding-right: 12rpx;
}
}
.title {
font-size: 32rpx;
color: #3D3D3D;
}
.list {
width: 680rpx;
max-height: 578rpx;
background: #FFFFFF;
border-radius: 24rpx 24rpx 24rpx 24rpx;
padding: 46rpx 36rpx;
box-sizing: border-box;
margin-top: 34rpx;
margin-bottom: 47rpx;
.list_val {
display: flex;
font-size: 32rpx;
color: #3D3D3D;
justify-content: space-between;
margin-bottom: 32rpx;
input {
width: 430rpx;
height: 70rpx;
background: #F0F0F0;
border-radius: 12rpx 12rpx 12rpx 12rpx;
padding-left: 32rpx;
box-sizing: border-box;
font-size: 28rpx;
color: #808080;
}
}
}
}
}
</style>