优化后,再次提交

This commit is contained in:
王利强
2026-05-03 09:08:56 +08:00
parent 721ef0ad54
commit 805747d1d9
1243 changed files with 46213 additions and 221 deletions

View File

@@ -0,0 +1,230 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const request_api = require("../../request/api.js");
if (!Array) {
const _easycom_up_input2 = common_vendor.resolveComponent("up-input");
const _easycom_up_picker2 = common_vendor.resolveComponent("up-picker");
const _easycom_u_popup2 = common_vendor.resolveComponent("u-popup");
const _component_TabBar = common_vendor.resolveComponent("TabBar");
(_easycom_up_input2 + _easycom_up_picker2 + _easycom_u_popup2 + _component_TabBar)();
}
const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js";
const _easycom_up_picker = () => "../../uni_modules/uview-plus/components/u-picker/u-picker.js";
const _easycom_u_popup = () => "../../uni_modules/uview-plus/components/u-popup/u-popup.js";
if (!Math) {
(_easycom_up_input + _easycom_up_picker + _easycom_u_popup)();
}
const _sfc_main = {
__name: "membermanagemen",
setup(__props) {
const userInfo = common_vendor.ref({
deptId: "",
deptName: "",
nickName: "",
role: "",
userId: "",
username: ""
});
const roleText = common_vendor.computed(() => {
const role = userInfo.value.role;
if (role === "manage" || role === "admin") {
return "管理人员";
} else if (role === "common") {
return "执行人员";
}
return "成员";
});
const getUserInfo = () => {
try {
const userInfoStr = common_vendor.index.getStorageSync("userInfo");
if (userInfoStr) {
userInfo.value = JSON.parse(userInfoStr);
common_vendor.index.__f__("log", "at pages/membermanagemen/membermanagemen.vue:142", "用户信息:", userInfo.value);
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/membermanagemen/membermanagemen.vue:145", "获取用户信息失败:", error);
}
};
const list = common_vendor.ref([]);
const fetchMemberList = async () => {
try {
const res = await request_api.getMemberList();
if (res.code === 0 && res.data) {
list.value = res.data;
common_vendor.index.__f__("log", "at pages/membermanagemen/membermanagemen.vue:158", "成员列表:", res.data);
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/membermanagemen/membermanagemen.vue:161", "获取成员列表失败:", error);
}
};
const showPopup = common_vendor.ref(false);
const showRolePicker = common_vendor.ref(false);
const selectedRoleName = common_vendor.ref("");
const formData = common_vendor.reactive({
username: "",
nickname: "",
phone: "",
password: "",
roleType: ""
});
const roleColumns = common_vendor.reactive([
["管理员", "普通成员"]
]);
const roleMap = {
"管理员": "manage",
"普通成员": "common"
};
const onRoleConfirm = (e) => {
if (e.value && e.value.length > 0) {
selectedRoleName.value = e.value[0];
formData.roleType = roleMap[e.value[0]];
}
showRolePicker.value = false;
};
const resetForm = () => {
formData.username = "";
formData.nickname = "";
formData.phone = "";
formData.password = "";
formData.roleType = "";
selectedRoleName.value = "";
};
const handleSubmit = async () => {
if (!formData.username) {
common_vendor.index.showToast({ title: "请输入用户名", icon: "none" });
return;
}
if (!formData.password || formData.password.length < 6 || formData.password.length > 16) {
common_vendor.index.showToast({ title: "请输入6-16位密码", icon: "none" });
return;
}
if (!formData.roleType) {
common_vendor.index.showToast({ title: "请选择角色类型", icon: "none" });
return;
}
const params = {
userName: formData.username,
nickName: formData.nickname || "",
phonenumber: formData.phone || "",
password: formData.password,
roleType: formData.roleType
};
try {
const res = await request_api.addMember(params);
if (res.code === 0) {
common_vendor.index.showToast({ title: "添加成功", icon: "success" });
showPopup.value = false;
resetForm();
fetchMemberList();
} else {
common_vendor.index.showToast({ title: res.msg || "添加失败", icon: "none" });
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/membermanagemen/membermanagemen.vue:244", "添加成员失败:", error);
common_vendor.index.showToast({ title: "请求失败", icon: "none" });
}
};
const Lock = (item) => {
const isLocked = item.status === "1";
const actionText = isLocked ? "解锁" : "锁定";
const newStatus = isLocked ? "0" : "1";
common_vendor.index.showModal({
title: "提示",
content: `确定要${actionText}该成员吗?`,
confirmColor: "#2667E9",
success: async (res) => {
if (res.confirm) {
try {
const result = await request_api.lockOrUnlockMember({
userId: item.userId,
lockStatus: Number(newStatus)
});
if (result.code === 0) {
common_vendor.index.showToast({ title: `${actionText}成功`, icon: "success" });
item.status = newStatus;
item.statusName = newStatus === "1" ? "已锁定" : "正常";
} else {
common_vendor.index.showToast({ title: result.msg || `${actionText}失败`, icon: "none" });
}
} catch (error) {
common_vendor.index.__f__("error", "at pages/membermanagemen/membermanagemen.vue:275", `${actionText}成员失败:`, error);
common_vendor.index.showToast({ title: "请求失败", icon: "none" });
}
}
}
});
};
common_vendor.onMounted(() => {
getUserInfo();
fetchMemberList();
});
return (_ctx, _cache) => {
return {
a: common_vendor.t(userInfo.value.deptName || "未知部门"),
b: common_vendor.t(roleText.value),
c: common_vendor.f(list.value, (item, index, i0) => {
return {
a: common_vendor.t(item.nickName),
b: common_vendor.t(item.statusName),
c: common_vendor.n(item.statusName === "正常" ? "status-normal" : "status-locked"),
d: common_vendor.t(item.phonenumber || "未设置"),
e: common_vendor.t(item.status === "1" ? "解锁" : "锁定"),
f: common_vendor.o(($event) => Lock(item), item.userId),
g: item.userId,
h: index < list.value.length - 1 ? 1 : ""
};
}),
d: common_vendor.o(($event) => showPopup.value = true),
e: common_vendor.o(($event) => showPopup.value = false),
f: common_vendor.o(($event) => formData.username = $event),
g: common_vendor.p({
placeholder: "请输入用户名",
border: "surround",
modelValue: formData.username
}),
h: common_vendor.o(($event) => formData.nickname = $event),
i: common_vendor.p({
placeholder: "请输入昵称",
border: "surround",
modelValue: formData.nickname
}),
j: common_vendor.o(($event) => formData.phone = $event),
k: common_vendor.p({
placeholder: "请输入手机号",
type: "number",
border: "surround",
modelValue: formData.phone
}),
l: common_vendor.o(($event) => formData.password = $event),
m: common_vendor.p({
placeholder: "请输入密码6-16位",
password: true,
border: "surround",
modelValue: formData.password
}),
n: common_vendor.t(selectedRoleName.value || "请选择角色类型"),
o: common_vendor.n(selectedRoleName.value ? "" : "text-gray"),
p: common_vendor.o(($event) => showRolePicker.value = true),
q: common_vendor.o(onRoleConfirm),
r: common_vendor.o(($event) => showRolePicker.value = false),
s: common_vendor.o(($event) => showRolePicker.value = false),
t: common_vendor.p({
show: showRolePicker.value,
columns: roleColumns
}),
v: common_vendor.o(($event) => showPopup.value = false),
w: common_vendor.o(handleSubmit),
x: common_vendor.o(($event) => showPopup.value = false),
y: common_vendor.p({
show: showPopup.value,
mode: "center",
round: "20"
}),
z: common_vendor.gei(_ctx, "")
};
};
}
};
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-06d9f81b"]]);
wx.createPage(MiniProgramPage);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/pages/membermanagemen/membermanagemen.js.map

View File

@@ -0,0 +1,8 @@
{
"navigationBarTitleText": "成员管理",
"usingComponents": {
"up-input": "../../uni_modules/uview-plus/components/u-input/u-input",
"up-picker": "../../uni_modules/uview-plus/components/u-picker/u-picker",
"u-popup": "../../uni_modules/uview-plus/components/u-popup/u-popup"
}
}

View File

@@ -0,0 +1 @@
<view class="{{['page', 'padding', 'data-v-06d9f81b', virtualHostClass]}}" style="{{virtualHostStyle}}" hidden="{{virtualHostHidden || false}}" id="{{z}}"><view class="member-card bg-white radius data-v-06d9f81b"><view class="card-header data-v-06d9f81b"><view class="flex align-center data-v-06d9f81b"><view class="border-line data-v-06d9f81b"></view><view class="text-bold margin-left-sm data-v-06d9f81b">{{a}}</view></view><view class="role-tag data-v-06d9f81b">{{b}}</view></view><view class="member-list data-v-06d9f81b"><view wx:for="{{c}}" wx:for-item="item" wx:key="g" class="{{['member-item', 'data-v-06d9f81b', item.h && 'border-bottom']}}"><view class="cu-avatar radius lg bg-gray data-v-06d9f81b" style="background-image:url(https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png)"></view><view class="member-info data-v-06d9f81b"><view class="flex align-center data-v-06d9f81b"><text class="member-name data-v-06d9f81b">{{item.a}}</text><view class="{{['status-tag', 'data-v-06d9f81b', item.c]}}">{{item.b}}</view></view><view class="member-phone text-gray data-v-06d9f81b"><text class="data-v-06d9f81b">手机:{{item.d}}</text></view></view><button class="btn-lock bg-blue data-v-06d9f81b" bindtap="{{item.f}}">{{item.e}}</button></view></view><view class="add-btn-wrapper data-v-06d9f81b"><button class="add-btn data-v-06d9f81b" bindtap="{{d}}"><text class="cuIcon-add data-v-06d9f81b"></text><text class="data-v-06d9f81b">添加成员</text></button></view></view><u-popup wx:if="{{y}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-s="{{['d']}}" bindclose="{{x}}" u-i="06d9f81b-0" bind:__l="__l" u-p="{{y}}"><view class="popup-content data-v-06d9f81b"><view class="popup-header data-v-06d9f81b"><view class="popup-title text-bold data-v-06d9f81b">添加成员</view><view class="popup-close data-v-06d9f81b" bindtap="{{e}}">×</view></view><scroll-view class="popup-body data-v-06d9f81b" scroll-y><view class="form-item data-v-06d9f81b"><view class="form-label data-v-06d9f81b">用户名<text class="text-red data-v-06d9f81b">*</text></view><up-input wx:if="{{g}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-i="06d9f81b-1,06d9f81b-0" bind:__l="__l" bindupdateModelValue="{{f}}" u-p="{{g}}"></up-input></view><view class="form-item data-v-06d9f81b"><view class="form-label data-v-06d9f81b">昵称</view><up-input wx:if="{{i}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-i="06d9f81b-2,06d9f81b-0" bind:__l="__l" bindupdateModelValue="{{h}}" u-p="{{i}}"></up-input></view><view class="form-item data-v-06d9f81b"><view class="form-label data-v-06d9f81b">手机号</view><up-input wx:if="{{k}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-i="06d9f81b-3,06d9f81b-0" bind:__l="__l" bindupdateModelValue="{{j}}" u-p="{{k}}"></up-input></view><view class="form-item data-v-06d9f81b"><view class="form-label data-v-06d9f81b">密码<text class="text-red data-v-06d9f81b">*</text></view><up-input wx:if="{{m}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-i="06d9f81b-4,06d9f81b-0" bind:__l="__l" bindupdateModelValue="{{l}}" u-p="{{m}}"></up-input></view><view class="form-item data-v-06d9f81b"><view class="form-label data-v-06d9f81b">角色类型<text class="text-red data-v-06d9f81b">*</text></view><view class="form-select data-v-06d9f81b" bindtap="{{p}}"><text class="{{['data-v-06d9f81b', o]}}">{{n}}</text><text class="cuIcon-unfold data-v-06d9f81b"></text></view><up-picker wx:if="{{t}}" class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" bindconfirm="{{q}}" bindcancel="{{r}}" bindclose="{{s}}" u-i="06d9f81b-5,06d9f81b-0" bind:__l="__l" u-p="{{t}}"></up-picker></view></scroll-view><view class="popup-footer data-v-06d9f81b"><button class="btn-cancel data-v-06d9f81b" bindtap="{{v}}">取消</button><button class="btn-confirm bg-blue data-v-06d9f81b" bindtap="{{w}}">确定</button></view></view></u-popup><tab-bar class="data-v-06d9f81b" virtualHostClass="data-v-06d9f81b" u-i="06d9f81b-6" bind:__l="__l"/></view>

View File

@@ -0,0 +1,197 @@
/**
* 这里是uni-app内置的常用样式变量
*
* uni-app 官方扩展插件及插件市场https://ext.dcloud.net.cn上很多三方插件均使用了这些样式变量
* 如果你是插件开发者建议你使用scss预处理并在插件代码中直接使用这些变量无需 import 这个文件方便用户通过搭积木的方式开发整体风格一致的App
*
*/
/**
* 如果你是App开发者插件使用者你可以通过修改这些变量来定制自己的插件主题实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
/* uni.scss */
/* 颜色变量 */
/* 行为相关颜色 */
/* 文字基本颜色 */
/* 背景颜色 */
/* 边框颜色 */
/* 尺寸变量 */
/* 文字尺寸 */
/* 图片尺寸 */
/* Border Radius */
/* 水平间距 */
/* 垂直间距 */
/* 透明度 */
/* 文章场景相关 */
.page.data-v-06d9f81b {
min-height: 100vh;
background: #EBF2FC;
}
.member-card.data-v-06d9f81b {
padding: 0;
overflow: hidden;
}
.card-header.data-v-06d9f81b {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0;
}
.card-header .border-line.data-v-06d9f81b {
width: 8rpx;
height: 32rpx;
background: #2667E9;
border-radius: 8rpx;
}
.role-tag.data-v-06d9f81b {
padding: 8rpx 24rpx;
background: #EEF3FF;
color: #2667E9;
font-size: 24rpx;
border-radius: 24rpx 0 0 24rpx;
margin-right: -30rpx;
}
.member-list.data-v-06d9f81b {
padding: 0 30rpx;
}
.member-item.data-v-06d9f81b {
display: flex;
align-items: center;
padding: 24rpx 0;
}
.member-item.border-bottom.data-v-06d9f81b {
border-bottom: 1rpx solid #f5f5f5;
}
.member-item .cu-avatar.data-v-06d9f81b {
flex-shrink: 0;
}
.member-info.data-v-06d9f81b {
flex: 1;
margin-left: 20rpx;
overflow: hidden;
}
.member-info .member-name.data-v-06d9f81b {
font-size: 30rpx;
color: #333;
font-weight: 500;
}
.member-info .member-phone.data-v-06d9f81b {
font-size: 24rpx;
margin-top: 8rpx;
}
.status-tag.data-v-06d9f81b {
margin-left: 12rpx;
padding: 4rpx 12rpx;
font-size: 22rpx;
border-radius: 6rpx;
}
.status-tag.status-normal.data-v-06d9f81b {
background: #E8F5E9;
color: #4CAF50;
}
.status-tag.status-locked.data-v-06d9f81b {
background: #FFEBEE;
color: #F44336;
}
.btn-lock.data-v-06d9f81b {
width: 120rpx;
height: 56rpx;
line-height: 56rpx;
padding: 0;
font-size: 26rpx;
border-radius: 28rpx;
flex-shrink: 0;
}
.add-btn-wrapper.data-v-06d9f81b {
padding: 30rpx;
border-top: 1rpx solid #f0f0f0;
}
.add-btn.data-v-06d9f81b {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
height: 88rpx;
background: #fff;
border: 2rpx dashed #2667E9;
border-radius: 12rpx;
color: #2667E9;
font-size: 30rpx;
}
.add-btn .cuIcon-add.data-v-06d9f81b {
margin-right: 10rpx;
font-size: 32rpx;
}
.add-btn.data-v-06d9f81b::after {
border: none;
}
.popup-content.data-v-06d9f81b {
width: 600rpx;
background: #fff;
border-radius: 20rpx;
overflow: hidden;
}
.popup-header.data-v-06d9f81b {
display: flex;
justify-content: space-between;
align-items: center;
padding: 30rpx;
border-bottom: 1rpx solid #eee;
}
.popup-title.data-v-06d9f81b {
font-size: 34rpx;
color: #333;
}
.popup-close.data-v-06d9f81b {
font-size: 48rpx;
color: #999;
line-height: 1;
}
.popup-body.data-v-06d9f81b {
padding: 30rpx;
max-height: 700rpx;
overflow-y: auto;
}
.form-item.data-v-06d9f81b {
margin-bottom: 24rpx;
}
.form-label.data-v-06d9f81b {
font-size: 28rpx;
color: #333;
margin-bottom: 12rpx;
display: flex;
align-items: center;
}
.form-select.data-v-06d9f81b {
display: flex;
align-items: center;
justify-content: space-between;
height: 80rpx;
border: 2rpx solid #dadbde;
border-radius: 8rpx;
padding: 0 24rpx;
font-size: 28rpx;
}
.popup-footer.data-v-06d9f81b {
display: flex;
border-top: 1rpx solid #eee;
}
.popup-footer button.data-v-06d9f81b {
flex: 1;
height: 90rpx;
line-height: 90rpx;
border-radius: 0;
font-size: 30rpx;
}
.popup-footer button.data-v-06d9f81b::after {
border: none;
}
.btn-cancel.data-v-06d9f81b {
background: #fff;
color: #666;
}
.btn-confirm.data-v-06d9f81b {
color: #fff;
}