添加:员工添加 - 支持通过二维码邀请员工入驻

This commit is contained in:
wuhui_zzw 2024-01-23 11:40:02 +08:00
parent 46b666b45f
commit b7e853a34d
4 changed files with 234 additions and 73 deletions

View File

@ -4,6 +4,10 @@ import request from "@/utils/request.js";
export function getStaffList(data) {
return request.get('staff/staff_list',data);
}
// 员工管理 - 获取员工列表
export function staffInviteQrCode(data) {
return request.get('staff/staff_invite_qr_code',data);
}
// 员工管理 - 员工编辑
export function editStaff(data) {
return request.get('staff/staff_edit',data);

View File

@ -6,13 +6,13 @@ let VUE_APP_WS_URL = `ws://${location.hostname}?type=user`
let openPlantGrass = '-openPlantGrass-'
// 网络接口修改此字符 小程序域名要求https
// let httpApi = 'https://bt.test.cdlfjy.com/' // 开发
let httpApi = 'https://mp.scwmbh.cn/' // 生产
let httpApi = 'https://bt.test.cdlfjy.com/' // 开发
// let httpApi = 'https://mp.scwmbh.cn/' // 生产
// 聊天接口修改此字符 小程序聊天要求wss 例如:
// let wsApi = 'wss://bt.test.cdlfjy.com'
let wsApi = 'wss://mp.scwmbh.cn'
let wsApi = 'wss://bt.test.cdlfjy.com'
// let wsApi = 'wss://mp.scwmbh.cn'
module.exports = {

View File

@ -1,18 +1,18 @@
<template>
<view class="custom-content">
<!--标题-->
<view class="title">添加员工</view>
<view class="title">{{ Number(service_id) > 0 ? '编辑' : '添加' }}员工</view>
<!--表单-->
<view class="form-content">
<view class="line">
<view class="line-content">
<view class="title">用户</view>
<view class="right">
<view class="right-btn" @click="showConsumePopup">选择用户</view>
<view class="right-btn" v-if="!is_regular" @click="showConsumePopup">选择用户</view>
</view>
</view>
<view class="user-content" v-if="consume_info.uid > 0">
<image class="image-img-image" :src="info.avatar" mode="widthFix"></image>
<image class="image-img-image" :src="consume_info.avatar" mode="widthFix"></image>
<view class="user-info">
<view class="nickname">{{ consume_info.nickname}}</view>
<view class="uid">UID{{ consume_info.uid}}</view>
@ -61,67 +61,69 @@
<input type="password" v-model="info.confirm_pwd" maxlength="20" placeholder="请确认密码" />
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">账号状态</view>
<switch :checked="info.is_open == 1" @change="changeSwitch($event,'is_open')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
<template v-if="info.is_open == 1">
<template v-if="!is_regular">
<view class="line">
<view class="line-content">
<view class="title">客服功能</view>
<switch :checked="info.status == 1" @change="changeSwitch($event,'status')" color="#437ffd" style="transform:scale(0.8)" />
<view class="title">账号状态</view>
<switch :checked="info.is_open == 1" @change="changeSwitch($event,'is_open')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">订单管理</view>
<switch :checked="info.customer == 1" @change="changeSwitch($event,'customer')" color="#437ffd" style="transform:scale(0.8)" />
<template v-if="info.is_open == 1">
<view class="line">
<view class="line-content">
<view class="title">客服功能</view>
<switch :checked="info.status == 1" @change="changeSwitch($event,'status')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">商品管理</view>
<switch :checked="info.is_goods == 1" @change="changeSwitch($event,'is_goods')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line">
<view class="line-content">
<view class="title">订单管理</view>
<switch :checked="info.customer == 1" @change="changeSwitch($event,'customer')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">开启核销</view>
<switch :checked="info.is_verify == 1" @change="changeSwitch($event,'is_verify')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line">
<view class="line-content">
<view class="title">商品管理</view>
<switch :checked="info.is_goods == 1" @change="changeSwitch($event,'is_goods')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">客户管理</view>
<switch :checked="info.is_user == 1" @change="changeSwitch($event,'is_user')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line">
<view class="line-content">
<view class="title">开启核销</view>
<switch :checked="info.is_verify == 1" @change="changeSwitch($event,'is_verify')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">员工管理</view>
<switch :checked="info.staff_manage == 1" @change="changeSwitch($event,'staff_manage')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line">
<view class="line-content">
<view class="title">客户管理</view>
<switch :checked="info.is_user == 1" @change="changeSwitch($event,'is_user')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">订单通知</view>
<switch :checked="info.notify == 1" @change="changeSwitch($event,'notify')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line">
<view class="line-content">
<view class="title">员工管理</view>
<switch :checked="info.staff_manage == 1" @change="changeSwitch($event,'staff_manage')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line" v-if="info.notify == 1">
<view class="line-content">
<view class="title">通知电话</view>
<input type="text" v-model="info.phone" placeholder="请输入通知电话" />
<view class="line">
<view class="line-content">
<view class="title">订单通知</view>
<switch :checked="info.notify == 1" @change="changeSwitch($event,'notify')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">推广二维码</view>
<switch :checked="info.qr_code_show == 1" @change="changeSwitch($event,'qr_code_show')" color="#437ffd" style="transform:scale(0.8)" />
<view class="line" v-if="info.notify == 1">
<view class="line-content">
<view class="title">通知电话</view>
<input type="text" v-model="info.phone" placeholder="请输入通知电话" />
</view>
</view>
</view>
<view class="line">
<view class="line-content">
<view class="title">推广二维码</view>
<switch :checked="info.qr_code_show == 1" @change="changeSwitch($event,'qr_code_show')" color="#437ffd" style="transform:scale(0.8)" />
</view>
</view>
</template>
</template>
<!--提交按钮-->
<view class="group-btn">
@ -156,6 +158,8 @@
</uni-popup>
<!-- 图片上传 -->
<avatar @upload="doUpload" quality="1" ref="avatar" selWidth="250upx" selHeight="250upx"></avatar>
<!--授权登录-->
<authorize @onLoadFun="onLoadFun" :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse"></authorize>
</view>
</template>
@ -164,10 +168,14 @@ import avatar from "@/components/yq-avatar/yq-avatar.vue";
import { HTTP_REQUEST_URL } from '@/config/app';
import {editStaff,getStaffInfo} from "@/api/service";
import { getCustomList } from "@/api/user.js";
import {mapGetters} from "vuex";
import authorize from '@/components/Authorize';
export default {
name: 'custom',
components: {
avatar
avatar,
authorize
},
data() {
return {
@ -182,7 +190,7 @@ export default {
account: '',
confirm_pwd: '',
pwd: '',
is_open: 0,
is_open: 1,
status: 0,
customer: 0,
is_goods: 0,
@ -201,20 +209,49 @@ export default {
nickname: '',
default_consume_id: 0,
},
is_regular: false,
//
isAuto: false, //
isShowAuth: false,//
}
},
computed: { },
computed: {
...mapGetters(['isLogin', 'uid', 'userInfo', 'viewColor'])
},
onLoad: function(options) {
//
if (!this.isLogin) {
this.isAuto = true;
this.isShowAuth = true
}
//
this.service_id = options.service_id || 0;
this.mer_id = options.mer_id || 0;
//
if(options.scene){
// console.log(" - ",options.scene)
var scene = this.$util.getUrlParams(decodeURIComponent(options.scene));
this.mer_id = scene.mer_id || this.mer_id;
// mer_id0
if(Number(scene.mer_id) > 0){
this.is_regular = true;
this.consume_search.default_consume_id = this.uid;
this.showConsumePopup();
}
}
//
uni.setNavigationBarTitle({
title: Number(this.service_id) > 0 ? '编辑员工' : '添加员工'
})
// mer_id
if(this.mer_id <= 0){
uni.showModal({
title: '提示',
content: '非法访问,参数不明确!',
success: function success(res) {
uni.navigateBack();
uni.switchTab({
url: '/pages/user/index',
});
}
});
}
@ -222,6 +259,16 @@ export default {
if(this.service_id > 0) this.getStaffInfo();
},
methods: {
//
onLoadFun() {
if(this.isLogin){
this.isShowAuth = false;
}
},
//
authColse(e) {
this.isShowAuth = e
},
// -
uploadImage() {
let avatar = this.$refs.avatar;
@ -237,7 +284,7 @@ export default {
name: 'field',
formData: {
'filename': rsp.path,
'name': _this.imgName
'name': ""
},
header: {
// #ifdef MP
@ -247,7 +294,7 @@ export default {
},
success: (uploadFileRes) => {
let imgData = JSON.parse(uploadFileRes.data)
console.log('图片上传回调',imgData);
// console.log('',imgData);
if(imgData.data) _this.info.avatar = imgData.data.path || '';
}
});
@ -266,6 +313,19 @@ export default {
let _this = this;
getCustomList(_this.mer_id, _this.consume_search).then(res => {
_this.consume_list = res.data.list || {};
//
if(_this.is_regular && Number(this.consume_search.default_consume_id) > 0 && Object.values(_this.consume_list).length <= 0){
uni.showModal({
title: '提示',
content: '非该商户用户,请先关注商户或者在该商户进行消费!',
success: function success(res) {
uni.switchTab({
url: '/pages/user/index',
});
}
});
return false;
}
// -
if(Object.values(_this.consume_list).length == 1){
_this.selectedConsume(_this.consume_list[0]);
@ -293,12 +353,24 @@ export default {
}
//
editStaff(info).then(res => {
this.$util.Tips({
title: res.message
},{
tab: 5,
url: '/pages/admin/business/staff?mer_id=' + _this.mer_id,
});
//
console.log('_this.is_regular',_this.is_regular)
if(_this.is_regular){
this.$util.Tips({
title: res.message
},{
tab: 5,
url: '/pages/admin/business/index?is_sys=0',
});
}
else{
this.$util.Tips({
title: res.message
},{
tab: 5,
url: '/pages/admin/business/staff?mer_id=' + _this.mer_id,
});
}
}).catch(err => {
this.$util.Tips({
title: err
@ -337,7 +409,7 @@ export default {
.custom-content{
width: 100vw;
min-height: 100vh;
background: orange;
background: #f6f6f6;
padding: 0 30rpx 100rpx 30rpx;
.title{

View File

@ -25,14 +25,28 @@
</view>
<!--添加按钮-->
<view class="group-btn">
<view class="add-btn" @click="goToEditPage()">添加员工</view>
<view class="add-btn" @click="addStaff()">添加员工</view>
</view>
<!-- 添加方式弹框 -->
<uni-popup ref="addTypeList" type="bottom">
<view class="add-type-content">
<view class="add-type-box" @click="goToEditPage">手动添加</view>
<view class="add-type-box" @click="createQrCode">二维码邀请</view>
</view>
</uni-popup>
<!--二维码-->
<uni-popup ref="qrCodePopup" type="center">
<view class="qr-code-content">
<image class="image" :src="qrCode"></image>
<view class="close-qr-code" @click="closeQrCode()">关闭</view>
</view>
</uni-popup>
</view>
</template>
<script>
import {mapGetters} from "vuex";
import {getStaffList,delStaff} from "@/api/service";
import {getStaffList,delStaff,staffInviteQrCode} from "@/api/service";
export default {
name: 'custom',
components: {},
@ -48,7 +62,9 @@ export default {
page: 1,
limit: 20,
keyword: '',
}
},
//
qrCode: '',
}
},
onLoad: function(options) {
@ -115,6 +131,29 @@ export default {
}
});
},
//
addStaff(){
this.$refs.addTypeList.open('bottom');
},
// -
createQrCode(){
let _this = this;
staffInviteQrCode({ mer_id: _this.mer_id }).then(res => {
if (res.status == 200) {
_this.qrCode = res.data.qr_code || '';
_this.$refs.addTypeList.close();
_this.$refs.qrCodePopup.open('center');
}
}).catch(err => {
this.$util.Tips({
title: err
});
});
},
//
closeQrCode(){
this.$refs.qrCodePopup.close();
},
//
goToEditPage(service_id){
let path = '/pages/admin/business/edit_staff?mer_id=' + this.mer_id;
@ -276,5 +315,51 @@ export default {
border-radius: 15rpx;
}
}
//
.add-type-content{
width: 100%;
background: #FFFFFF;
padding: 20rpx;
display: inline-flex;
flex-direction: column;
flex-wrap: nowrap;
align-items: center;
justify-content: center;
.add-type-box{
height: 70rpx;
line-height: 70rpx;
color: #fff;
background-color: #409eff;
border-color: #409eff;
width: 80%;
border-radius: 100rpx;
font-size: 30rpx;
text-align: center;
}
.add-type-box:first-child{
margin-bottom: 20rpx;
background-color: #e6a23c!important;
border-color: #e6a23c!important;
}
}
//
.qr-code-content{
width: 80vw;
.image{
width: 80vw;
height: 80vw;
}
.close-qr-code{
position: fixed;
top: 35rpx;
right: 70rpx;
color: #FFFFFF;
border: 2rpx solid #FFFFFF;
height: 40rpx;
line-height: 36rpx;
padding: 0 20rpx;
border-radius: 50rpx;
}
}
}
</style>