|
|
@@ -3,7 +3,7 @@
|
|
|
<custom-header :name="route.query.add ? '选择团队成员' : '团队管理'"></custom-header>
|
|
|
<div class="team-content">
|
|
|
<div class="team-title" v-show="!route.query.add">当前团队总人数({{ teamList.length || 0 }}人)</div>
|
|
|
- <div class="team-list">
|
|
|
+ <div class="team-list" v-if="teamList && teamList.length">
|
|
|
<div class="list-item" v-for="ele in teamList" :key="ele.id">
|
|
|
<Checkbox v-if="route.query.add" @change="changeCheck" v-model="ele.checked"></Checkbox>
|
|
|
<farm-info-card
|
|
|
@@ -15,6 +15,7 @@
|
|
|
roleName: ele.role == 1 ? '超级管理员' : ele.role == 2 ? '项目管理员' : '普通成员',
|
|
|
className: ele.role == 1 ? 'tag-role' : ele.role == 2 ? '' : 'tag-gray',
|
|
|
maxWidth: 'auto',
|
|
|
+ address: ele.role == 1 ? ele.store?.address || '--' : null,
|
|
|
}"
|
|
|
>
|
|
|
<template #right v-if="ele.role === 2 && !route.query.add">
|
|
|
@@ -23,6 +24,9 @@
|
|
|
</farm-info-card>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div v-else class="empty-wrap">
|
|
|
+ <div class="empty-text">暂无数据</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="custom-bottom-fixed-btns">
|
|
|
<div class="bottom-btn secondary-btn" @click="handleSetAdmin">
|
|
|
@@ -43,7 +47,7 @@
|
|
|
@closed="handlePopupClosed"
|
|
|
>
|
|
|
<div class="popup-content">
|
|
|
- <div class="popup-title">新增团队成员</div>
|
|
|
+ <div class="popup-title">{{ detailType === "add" ? "新增团队成员" : "成员信息" }}</div>
|
|
|
<el-form
|
|
|
ref="formRef"
|
|
|
:model="formData"
|
|
|
@@ -53,10 +57,21 @@
|
|
|
size="large"
|
|
|
>
|
|
|
<el-form-item label="姓名" prop="name">
|
|
|
- <el-input v-model="formData.name" placeholder="请输入姓名" clearable />
|
|
|
+ <el-input
|
|
|
+ v-model="formData.name"
|
|
|
+ placeholder="请输入姓名"
|
|
|
+ clearable
|
|
|
+ :readonly="detailType === 'detail'"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="手机号" prop="phone">
|
|
|
- <el-input v-model="formData.phone" placeholder="请输入手机号" clearable maxlength="11" />
|
|
|
+ <el-input
|
|
|
+ v-model="formData.phone"
|
|
|
+ placeholder="请输入手机号"
|
|
|
+ clearable
|
|
|
+ maxlength="11"
|
|
|
+ :readonly="detailType === 'detail'"
|
|
|
+ />
|
|
|
</el-form-item>
|
|
|
<el-form-item label="角色类型" prop="duties">
|
|
|
<div class="role-type-grid">
|
|
|
@@ -64,7 +79,10 @@
|
|
|
v-for="role in dutyList"
|
|
|
:key="role.code"
|
|
|
class="role-btn"
|
|
|
- :class="{ active: formData.duties.includes(role.code) }"
|
|
|
+ :class="{
|
|
|
+ active: formData.duties.includes(role.code),
|
|
|
+ readonly: detailType === 'detail',
|
|
|
+ }"
|
|
|
@click="toggleRole(role.code)"
|
|
|
>
|
|
|
{{ role.name }}
|
|
|
@@ -72,10 +90,13 @@
|
|
|
</div>
|
|
|
</el-form-item>
|
|
|
</el-form>
|
|
|
- <div class="popup-footer">
|
|
|
+ <div class="popup-footer" v-show="detailType === 'add'">
|
|
|
<div class="footer-btn share-btn" @click="handleShare">分享微信好友</div>
|
|
|
<div class="footer-btn confirm-btn" @click="handleConfirm">确认添加</div>
|
|
|
</div>
|
|
|
+ <div class="popup-footer" v-show="detailType === 'detail'">
|
|
|
+ <div class="footer-btn cancel-admin-btn" @click="handleDelete">删除成员</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</Popup>
|
|
|
|
|
|
@@ -102,7 +123,9 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="popup-footer">
|
|
|
- <div class="footer-btn cancel-admin-btn" @click="handleCancelAdmin">取消管理权限</div>
|
|
|
+ <div class="footer-btn cancel-admin-btn" @click="handleCancelAdmin">
|
|
|
+ {{ route.query.add ? "取消" : "取消管理权限" }}
|
|
|
+ </div>
|
|
|
<div class="footer-btn confirm-btn" @click="handleConfirmPermission">确认设置</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -115,7 +138,8 @@ import customHeader from "@/components/customHeader.vue";
|
|
|
import { ref, reactive, onMounted } from "vue";
|
|
|
import { useRouter, useRoute } from "vue-router";
|
|
|
import { Popup, Checkbox } from "vant";
|
|
|
-import { ElMessage,ElMessageBox } from "element-plus";
|
|
|
+import wx from "weixin-js-sdk";
|
|
|
+import { ElMessage, ElMessageBox } from "element-plus";
|
|
|
import FarmInfoCard from "@/components/pageComponents/FarmInfoCard.vue";
|
|
|
|
|
|
const router = useRouter();
|
|
|
@@ -291,22 +315,28 @@ const rules = reactive({
|
|
|
|
|
|
// 取消管理员
|
|
|
const handleCancelAdmin = async () => {
|
|
|
- ElMessageBox.confirm('确定取消管理员权限吗?', '提示', {
|
|
|
- confirmButtonText: '确定',
|
|
|
- cancelButtonText: '取消',
|
|
|
+ if (route.query.add) {
|
|
|
+ showPermissionPopup.value = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ ElMessageBox.confirm("确定取消管理员权限吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
zIndex: 3000,
|
|
|
- type: 'warning',
|
|
|
- }).then(async () => {
|
|
|
- const { code, msg } = await VE_API.mine.saveManager({ id: currentPermissionItem.value.id, role: 3 });
|
|
|
- if (code === 0) {
|
|
|
- ElMessage.success("取消管理员权限成功");
|
|
|
- teamList.value = []
|
|
|
- getManagerList();
|
|
|
- showPermissionPopup.value = false;
|
|
|
- } else {
|
|
|
- ElMessage.error(msg);
|
|
|
- }
|
|
|
- }).catch(() => {});
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(async () => {
|
|
|
+ const { code, msg } = await VE_API.mine.saveManager({ id: currentPermissionItem.value.id, role: 3 });
|
|
|
+ if (code === 0) {
|
|
|
+ ElMessage.success("取消管理员权限成功");
|
|
|
+ teamList.value = [];
|
|
|
+ getManagerList();
|
|
|
+ showPermissionPopup.value = false;
|
|
|
+ } else {
|
|
|
+ ElMessage.error(msg);
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
};
|
|
|
|
|
|
// 弹窗关闭处理
|
|
|
@@ -325,8 +355,20 @@ const handlePopupClosed = () => {
|
|
|
|
|
|
// 分享微信好友
|
|
|
const handleShare = () => {
|
|
|
- ElMessage.info("分享功能待实现");
|
|
|
- // TODO: 实现分享到微信好友的功能
|
|
|
+ const query = {
|
|
|
+ askInfo: { title: "分享团队", content: "是否邀请好友加入团队" },
|
|
|
+ shareText: "邀请您加入我的团队,快来查看吧~",
|
|
|
+ // farmId: 766,
|
|
|
+ targetUrl: `user_info`,
|
|
|
+ // goBack: true,
|
|
|
+ paramsPage: JSON.stringify({
|
|
|
+ storeId: teamList.value[0]?.storeId || '',
|
|
|
+ }),
|
|
|
+ imageUrl: "https://birdseye-img.sysuimars.com/birdseye-look-mini/invite_bg.png",
|
|
|
+ };
|
|
|
+ wx.miniProgram.navigateTo({
|
|
|
+ url: `/pages/subPages/share_page/index?pageParams=${JSON.stringify(query)}&type=sharePage`,
|
|
|
+ });
|
|
|
};
|
|
|
|
|
|
// 确认添加
|
|
|
@@ -359,7 +401,11 @@ const handleAddTeamMember = async () => {
|
|
|
return;
|
|
|
}
|
|
|
} else {
|
|
|
+ detailType.value = "add";
|
|
|
showAddMemberPopup.value = true;
|
|
|
+ formData.name = "";
|
|
|
+ formData.phone = "";
|
|
|
+ formData.duties = [];
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -374,11 +420,53 @@ const handleSetAdmin = () => {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+const detailType = ref("add");
|
|
|
const handleItem = (item) => {
|
|
|
if (route.query.add) {
|
|
|
item.checked = !item.checked;
|
|
|
+ } else {
|
|
|
+ if (item.role == 1) {
|
|
|
+ ElMessage.warning("超级管理员无法删除");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ detailType.value = "detail";
|
|
|
+ showAddMemberPopup.value = true;
|
|
|
+ // 记录当前选中的成员,后续删除时使用
|
|
|
+ currentPermissionItem.value = item;
|
|
|
+ // 回填已知字段
|
|
|
+ formData.name = item.name || "";
|
|
|
+ formData.phone = item.phone || "";
|
|
|
+ if (Array.isArray(item.dutyEnumList)) {
|
|
|
+ formData.duties = [...item.dutyEnumList];
|
|
|
+ }
|
|
|
}
|
|
|
};
|
|
|
+
|
|
|
+const handleDelete = () => {
|
|
|
+ ElMessageBox.confirm("确定删除该成员吗?", "提示", {
|
|
|
+ confirmButtonText: "确定",
|
|
|
+ cancelButtonText: "取消",
|
|
|
+ zIndex: 3000,
|
|
|
+ type: "warning",
|
|
|
+ })
|
|
|
+ .then(async () => {
|
|
|
+ try {
|
|
|
+ const { code, msg } = await VE_API.mine.deleteManager({
|
|
|
+ id: currentPermissionItem.value.id,
|
|
|
+ });
|
|
|
+ if (code === 0) {
|
|
|
+ ElMessage.success("删除成功");
|
|
|
+ showAddMemberPopup.value = false;
|
|
|
+ await getManagerList();
|
|
|
+ } else {
|
|
|
+ ElMessage.error(msg || "删除失败");
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ ElMessage.error("删除失败,请稍后重试");
|
|
|
+ }
|
|
|
+ })
|
|
|
+ .catch(() => {});
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
@@ -407,6 +495,14 @@ const handleItem = (item) => {
|
|
|
margin-top: 10px;
|
|
|
}
|
|
|
}
|
|
|
+ .empty-wrap {
|
|
|
+ padding-top: 40px;
|
|
|
+ text-align: center;
|
|
|
+ .empty-text {
|
|
|
+ font-size: 14px;
|
|
|
+ color: #86909c;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -465,6 +561,9 @@ const handleItem = (item) => {
|
|
|
color: #ffffff;
|
|
|
border-color: #2199f8;
|
|
|
}
|
|
|
+ &.readonly {
|
|
|
+ pointer-events: none;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
&.permission-list {
|