gy-app-shop/pages/project/projectUser.vue

365 lines
9.3 KiB
Vue

<template>
<view class="projectUser-box">
<u-search class="search-box" placeholder="输入昵称或手机号搜索" :show-action="true" v-model="searchValue" @custom="onSearchFn" @change="onSearchFn" @search="onSearchFn"></u-search>
<mescroll-body top="100" ref="mescrollRef" bottom="100" @init="mescrollInit" @down="downCallback" @up="upCallback">
<view class="user-list">
<view class="user-item" v-for="item in userList" :key="item.userId">
<view class="user-left">
<view class="user-icon">
<u-icon name="account-fill" size="70"></u-icon>
</view>
<view class="user-main">
<view class="user-name">昵称:{{item.nickName}}</view>
<view class="user-phone">手机:{{item.phoneNumber}}</view>
<view class="user-role">角色:{{item.roleName}}</view>
<view class="user-role" >状态:
<text v-if="getUserStatus(item)" style="color: #ffaa00">未注册</text>
<text v-else style="color: #00AB40">正常</text>
</view>
</view>
</view>
<view class="user-btn" v-if="item.roleKey!='root'">
<u-icon name="edit-pen" v-if="!getUserStatus(item)" size="50" color="#0066cc" @click="openEditMenu(item)" style="padding: 20rpx;"></u-icon>
<u-icon name="trash" size="50" color="#dc2727" @click="delUser(item)" style="padding: 20rpx;"></u-icon>
</view>
</view>
</view>
</mescroll-body>
<view class="btn-list" @click="openAddUserModel">
<view class="btn-box">
添加项目用户
</view>
</view>
<u-modal v-model="addUserModalShow" title="添加用户" :show-cancel-button="true"
@confirm="$throttle(addUser, 500)">
<view class="slot-content">
<u-input v-model="userPhone" :focus="true" border type="text" placeholder="请输入用户手机号" ></u-input>
<!-- <view class="user-item">
<text>角色:</text>
<text @click="select">{{getRoleName(role)}}</text>
</view> -->
</view>
</u-modal>
<u-toast ref="uToast" />
<u-select v-model="roleModelShow" :list="roleList" @confirm="confirmRole"></u-select>
<u-action-sheet :list="editMenuList" @click="selectMenu" v-model="editMenuShow"></u-action-sheet>
</view>
</template>
<script>
import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
export default {
mixins:[MescrollMixin],
data() {
return {
editMenuList:[
// {
// text: '项目移交',
// },
{
text: '修改成员角色',
}
],
editMenuShow:false,
roleModelShow: false,
roleList: [
{
value: 'personal',
label: '普通成员'
},
{
value: 'operator',
label: '设备运维员'
}
],
userList:[],
addUserModalShow:false,
userPhone:'',
role:'personal',
searchValue:'',
projectId:'',
activeUser:{}
}
},
onLoad(option) {
console.log("option",option)
this.projectId = option.projectId;
},
methods:{
getUserStatus(item){
return item.status==1&&item.userId==null;
},
confirmRole(e) {
console.log(e);
uni.showModal({
title: '提示',
content:'确认要修改用户角色为(' + e[0].label + ')吗?',
confirmText:'确认',
cancelText:'取消',
success: (res) => {
if (res.confirm) {
this.$put("/app/project/" + this.projectId+'/'+this.activeUser.userId+'/'+e[0].value,{}).then((res)=>{
if(res.code == 200){
this.$refs.uToast.show({
title: '修改成功',
type: 'success',
})
this.mescroll.resetUpScroll();
}else{
this.$refs.uToast.show({
title: res.msg,
type: 'error',
})
}
}).catch((err)=>{
this.$refs.uToast.show({
title: err.msg,
type: 'error',
})
})
}else if (res.cancel) {
}
}
});
},
openEditMenu(val){
this.activeUser = val;
this.editMenuShow = true;
},
selectMenu(e){
console.log("点击菜单",this.editMenuList[e].text)
if(this.editMenuList[e].text == '项目移交'){
uni.showModal({
title: '提示',
content:'确认要将项目移交给用户(' + this.activeUser.nickName + ')吗?',
confirmText:'确认',
cancelText:'取消',
success: (res) => {
if (res.confirm) {
this.$post("/app/project/transfer",{
projectId:this.projectId,
userId:this.activeUser.userId
}).then((res)=>{
console.log("res",res)
if(res.code == 200){
this.$refs.uToast.show({
title: '项目移交成功',
type: 'success',
})
this.addUserModalShow = false;
this.mescroll.resetUpScroll();
}else{
}
}).catch((err)=>{
})
}else if (res.cancel) {
}
}
});
}else if(this.editMenuList[e].text == '修改成员角色'){
this.roleModelShow = true;
}
},
getRoleName(val){
let name = '点击选择角色'
this.roleList.forEach(item=>{
if(item.value == val){
name = item.label;
}
})
return name;
},
openAddUserModel(){
this.userPhone = '';
this.addUserModalShow = true;
},
addUser(){
this.$post("/app/project/useradd",{
projectId:this.projectId,
phone:this.userPhone
}).then((res)=>{
console.log("res",res)
if(res.code == 200){
this.$refs.uToast.show({
title: '添加成功',
type: 'success',
})
this.addUserModalShow = false;
this.mescroll.resetUpScroll();
}else{
}
}).catch((err)=>{
})
},
delUser(user){
console.log("user",user)
uni.showModal({
title: '提示',
content:'确认要删除用户(' + user.nickName + ')吗?',
confirmText:'确认',
cancelText:'取消',
success: (res) => {
if (res.confirm) {
let flag = this.getUserStatus(user);
if(flag){
console.log("删除项目临时成员")
this.$DELETE("/app/project/temp/" + this.projectId+'/'+user.phoneNumber,{}).then((res)=>{
console.log("res",res)
if(res.code == 200){
this.$refs.uToast.show({
title: '删除成功',
type: 'success',
})
this.mescroll.resetUpScroll();
}else{
this.$refs.uToast.show({
title: res.msg,
type: 'error',
})
}
}).catch((err)=>{
this.$refs.uToast.show({
title: err.msg,
type: 'error',
})
})
}else{
this.$DELETE("/app/project/" + this.projectId+'/'+user.userId,{}).then((res)=>{
console.log("res",res)
if(res.code == 200){
this.$refs.uToast.show({
title: '删除成功',
type: 'success',
})
this.mescroll.resetUpScroll();
}else{
this.$refs.uToast.show({
title: res.msg,
type: 'error',
})
}
}).catch((err)=>{
this.$refs.uToast.show({
title: err.msg,
type: 'error',
})
})
}
}else if (res.cancel) {
}
}
});
},
onSearchFn(e){
this.mescroll.resetUpScroll();
},
/*上拉加载的回调*/
upCallback(page) {
let obj = {
phoneNumber:this.searchValue,
projectId: this.projectId,
}
this.$get("/app/project/userlist",obj).then((res)=>{
if (res.rows && res.rows.length>0) {
// 接口返回的当前页数据列表 (数组)
let curPageData = res.rows;
// 接口返回的当前页数据长度 (如列表有26个数据,当前页返回8个,则curPageLen=8)
let curPageLen = curPageData.length;
//设置列表数据
this.userList = curPageData; //追加新数据
this.mescroll.endBySize(curPageLen, res.total); // 推荐
// this.mescroll.endByPage(curPageLen, res.data.total)
// this.mescroll.endSuccess(curPageData.length);
} else{
this.userList = [];
this.mescroll.endErr();
this.mescroll.showEmpty();
// this.mescroll.endUpScroll(true);
}
}).catch(()=>{
//联网失败, 结束加载
this.mescroll.endErr();
}).finally(()=>{
// this.dropdownIsOpen = false;
})
},
}
}
</script>
<style lang="scss" scoped>
.search-box{
position: fixed;
left: 0;
right: 0;
top: 0;
height: 100rpx;
display: flex;
align-items: center;
padding: 0 20rpx;
background-color: #fff;
z-index: 10;
}
.user-list{
padding: 20rpx;
.user-item{
background: #fff;
border-radius: 20rpx;
border: 1px solid #ddd;
padding: 20rpx;
margin-bottom: 10rpx;
display: flex;
align-items: center;
justify-content: space-between;
.user-left{
display: flex;
align-items: center;
.user-icon{
padding: 10rpx;
margin-right: 10rpx;
}
.user-main{
font-size:28rpx;
color: #666;
}
}
.user-btn{
padding: 10rpx;
}
}
}
.slot-content{
padding: 20rpx 30rpx;
}
.btn-list{
position: fixed;
left: 0;
right: 0;
bottom: 0;
height: 140rpx;
padding: 20rpx 20rpx;
background: #fff;
.btn-box{
background: #0066cc;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 36rpx;
height: 100rpx;
border-radius: 50rpx;
}
}
</style>