refactor: 四端完成 Options API → script setup + vuex → pinia 迁移

- buyer(95) / seller(169) / im(53) / manager(280) 共 597 个组件全部从 Options API 转换为 <script setup>
- 四端 vuex 全部移除,状态管理统一迁移至 pinia 4(stores/ 目录)
- util.js 等基础设施去除 vm 首参依赖;全局属性($Message/$filters 等)在 script 内改为具名导入
- 被外部 ref 访问的公共组件均已补齐 defineExpose(清单见各端 MIGRATION-VUE3.md)
- 各端 eslint 启用 vue/component-api-style 防止新代码回退 Options API
- 四端 yarn build 全部通过;迁移约定与注意事项已更新至各端 MIGRATION-VUE3.md
This commit is contained in:
lifenlong
2026-10-13 07:06:59 +08:00
parent 870bacdd8c
commit 88fc1b0b2a
674 changed files with 71220 additions and 69943 deletions

View File

@@ -2,7 +2,7 @@
<div class="search">
<el-card>
<el-form
ref="searchForm"
ref="searchFormRef"
:model="searchForm"
inline
label-width="70px"
@@ -168,7 +168,7 @@
<el-dialog v-model="addFlag" title="添加会员" width="500px" destroy-on-close class="add-member-dialog">
<el-form
ref="addMemberForm"
ref="addMemberFormRef"
:model="addMemberForm"
:rules="addRule"
label-width="100px"
@@ -210,7 +210,7 @@
</el-dialog>
<el-dialog v-model="descFlag" :title="descTitle" width="500px" destroy-on-close>
<el-form ref="form" :model="form" :rules="ruleValidate" label-width="80px">
<el-form ref="formRef" :model="form" :rules="ruleValidate" label-width="80px">
<el-input v-model="form.id" style="display: none" />
<el-form-item label="头像">
<img :src="form.face || defaultPic" class="face" />
@@ -251,7 +251,7 @@
</el-dialog>
<el-dialog v-model="walletIncreaseFlag" title="增加余额" width="420px" destroy-on-close>
<el-form ref="walletIncreaseForm" :model="walletIncreaseForm" :rules="walletIncreaseRule" label-width="90px">
<el-form ref="walletIncreaseFormRef" :model="walletIncreaseForm" :rules="walletIncreaseRule" label-width="90px">
<el-form-item label="充值金额" prop="rechargeMoney">
<el-input-number v-model="walletIncreaseForm.rechargeMoney" :min="0.01" :precision="2" style="width: 240px" />
</el-form-item>
@@ -263,7 +263,7 @@
</el-dialog>
<el-dialog v-model="memberPointFlag" title="修改积分" width="420px" destroy-on-close>
<el-form ref="memberPointForm" :model="memberPointForm" :rules="memberPointRule" label-width="90px">
<el-form ref="memberPointFormRef" :model="memberPointForm" :rules="memberPointRule" label-width="90px">
<el-form-item label="类型" prop="type">
<el-radio-group v-model="memberPointForm.type">
<el-radio-button value="INCREASE">增加</el-radio-button>
@@ -281,7 +281,7 @@
</el-dialog>
<el-dialog v-model="memberGroupFlag" title="设定会员分组" width="420px" destroy-on-close>
<el-form ref="memberGroupForm" :model="memberGroupForm" :rules="memberGroupRule" label-width="90px">
<el-form ref="memberGroupFormRef" :model="memberGroupForm" :rules="memberGroupRule" label-width="90px">
<el-form-item label="会员分组" prop="groupId">
<el-select v-model="memberGroupForm.groupId" clearable filterable style="width: 240px">
<el-option
@@ -300,13 +300,14 @@
</el-dialog>
<el-dialog v-model="picModelFlag" width="1200px">
<ossManage ref="ossManage" @callback="callbackSelected" :isComponent="true" :initialize="picModelFlag" />
<ossManage ref="ossManageRef" @callback="callbackSelected" :isComponent="true" :initialize="picModelFlag" />
</el-dialog>
<multipleMap ref="map" @callback="selectedRegion" />
</div>
</template>
<script>
<script setup>
import { ref, watch, nextTick, onMounted } from "vue";
import { ArrowDown } from "@element-plus/icons-vue";
import multipleMap from "@/components/map/multiple-map";
import * as API_Member from "@/api/member.js";
@@ -314,451 +315,456 @@ import ossManage from "@/views/sys/oss-manage/ossManage";
import * as RegExp from "@/libs/RegExp.js";
import { ElMessage, ElMessageBox } from "element-plus";
import { customRouterPush } from "@/utils/filters";
import { md5 } from "@/utils/md5.js";
import defaultPic from "@/assets/default.png";
export default {
name: "member",
components: {
multipleMap,
ossManage,
ArrowDown,
defineOptions({ name: "member" });
const props = defineProps({
selectedMember: {
type: Boolean,
default: false,
},
props: {
selectedMember: {
type: Boolean,
default: false,
},
selectedList: {
type: null,
default: () => [],
},
checkboxSelect: {
type: Boolean,
default: false,
},
selectedList: {
type: null,
default: () => [],
},
data() {
return {
defaultPic,
descTitle: "",
descFlag: false,
loading: true,
addFlag: false,
addMemberForm: {
mobile: "",
username: "",
password: "",
},
searchForm: {
pageNumber: 1,
pageSize: 20,
order: "desc",
id: "",
username: "",
mobile: "",
disabled: "OPEN",
groupId: "",
},
picModelFlag: false,
form: {},
walletIncreaseFlag: false,
walletIncreaseLoading: false,
walletIncreaseForm: {
memberId: "",
rechargeMoney: null,
},
walletIncreaseRule: {
rechargeMoney: [
{ required: true, type: "number", message: "请输入充值金额", trigger: "change" },
{
validator: (rule, value, callback) => {
if (typeof value !== "number" || value <= 0) {
callback(new Error("充值金额必须大于0"));
return;
}
callback();
},
trigger: "change",
},
],
},
memberPointFlag: false,
memberPointLoading: false,
memberPointForm: {
memberId: "",
point: null,
type: "INCREASE",
},
selectedRows: [],
memberGroupFlag: false,
memberGroupLoading: false,
memberGroupForm: {
groupId: "",
},
memberGroupRule: {
groupId: [{ required: true, message: "请选择会员分组", trigger: "change" }],
},
memberGroupList: [],
memberGradeList: [],
memberPointRule: {
type: [{ required: true, message: "请选择类型", trigger: "change" }],
point: [
{ required: true, type: "number", message: "请输入积分", trigger: "change" },
{
validator: (rule, value, callback) => {
if (typeof value !== "number" || value <= 0) {
callback(new Error("积分必须大于0"));
return;
}
callback();
},
trigger: "change",
},
],
},
addRule: {
mobile: [
{ required: true, message: "请输入手机号码" },
{ pattern: RegExp.mobile, message: "请输入正确的手机号" },
],
username: [{ required: true, message: "请输入客户名称" }],
password: [{ required: true, message: "请输入密码" }],
},
ruleValidate: {},
data: [],
total: 0,
selectMember: [],
};
checkboxSelect: {
type: Boolean,
default: false,
},
watch: {
selectedList: {
handler(val) {
this.selectMember = JSON.parse(JSON.stringify(val));
this.init(this.data);
});
const emit = defineEmits(["callback"]);
// 模板 el-form/el-table 的模板 ref(原 ref="searchForm"/"addMemberForm"/"form" 等与 data 同名会互相覆盖,
// 改名为 xxxRef;ossManage 与 import 同名,改名 ossManageRef)
const searchFormRef = ref(null);
const table = ref(null);
const addMemberFormRef = ref(null);
const formRef = ref(null);
const walletIncreaseFormRef = ref(null);
const memberPointFormRef = ref(null);
const memberGroupFormRef = ref(null);
const ossManageRef = ref(null);
const descTitle = ref("");
const descFlag = ref(false);
const loading = ref(true);
const addFlag = ref(false);
const addMemberForm = ref({
mobile: "",
username: "",
password: "",
});
const searchForm = ref({
pageNumber: 1,
pageSize: 20,
order: "desc",
id: "",
username: "",
mobile: "",
disabled: "OPEN",
groupId: "",
});
const picModelFlag = ref(false);
const form = ref({});
const walletIncreaseFlag = ref(false);
const walletIncreaseLoading = ref(false);
const walletIncreaseForm = ref({
memberId: "",
rechargeMoney: null,
});
const walletIncreaseRule = ref({
rechargeMoney: [
{ required: true, type: "number", message: "请输入充值金额", trigger: "change" },
{
validator: (rule, value, callback) => {
if (typeof value !== "number" || value <= 0) {
callback(new Error("充值金额必须大于0"));
return;
}
callback();
},
deep: true,
immediate: true,
trigger: "change",
},
],
});
const memberPointFlag = ref(false);
const memberPointLoading = ref(false);
const memberPointForm = ref({
memberId: "",
point: null,
type: "INCREASE",
});
const selectedRows = ref([]);
const memberGroupFlag = ref(false);
const memberGroupLoading = ref(false);
const memberGroupForm = ref({
groupId: "",
});
const memberGroupRule = ref({
groupId: [{ required: true, message: "请选择会员分组", trigger: "change" }],
});
const memberGroupList = ref([]);
const memberGradeList = ref([]);
const memberPointRule = ref({
type: [{ required: true, message: "请选择类型", trigger: "change" }],
point: [
{ required: true, type: "number", message: "请输入积分", trigger: "change" },
{
validator: (rule, value, callback) => {
if (typeof value !== "number" || value <= 0) {
callback(new Error("积分必须大于0"));
return;
}
callback();
},
trigger: "change",
},
],
});
const addRule = ref({
mobile: [
{ required: true, message: "请输入手机号码" },
{ pattern: RegExp.mobile, message: "请输入正确的手机号" },
],
username: [{ required: true, message: "请输入客户名称" }],
password: [{ required: true, message: "请输入密码" }],
});
const ruleValidate = ref({});
const data = ref([]);
const total = ref(0);
const selectMember = ref([]);
watch(
() => props.selectedList,
(val) => {
selectMember.value = JSON.parse(JSON.stringify(val));
init(data.value);
},
methods: {
handleMoreCommand(name, row) {
if (name === "edit") this.editPerm(row);
if (name === "disabled") this.disabled(row);
if (name === "increaseWallet") this.openWalletIncrease(row);
if (name === "updatePoint") this.openMemberPoint(row);
},
onSelectionChange(selection) {
if (this.selectedMember && this.checkboxSelect) {
this.selectMember = selection || [];
return;
{ deep: true, immediate: true }
);
function handleMoreCommand(name, row) {
if (name === "edit") editPerm(row);
if (name === "disabled") disabled(row);
if (name === "increaseWallet") openWalletIncrease(row);
if (name === "updatePoint") openMemberPoint(row);
}
function onSelectionChange(selection) {
if (props.selectedMember && props.checkboxSelect) {
selectMember.value = selection || [];
return;
}
selectedRows.value = selection || [];
}
function getSelection() {
return selectMember.value || [];
}
function syncTableSelection() {
if (!props.selectedMember || !props.checkboxSelect) {
return;
}
nextTick(() => {
clearSelection();
data.value.forEach((row) => {
if (selectMember.value.some((member) => member.id === row.id)) {
table.value?.toggleRowSelection(row, true);
}
this.selectedRows = selection || [];
},
getSelection() {
return this.selectMember || [];
},
syncTableSelection() {
if (!this.selectedMember || !this.checkboxSelect) {
return;
});
});
}
function openSetMemberGroup() {
memberGroupFlag.value = true;
memberGroupLoading.value = false;
memberGroupForm.value = { groupId: "" };
nextTick(() => {
if (memberGroupFormRef.value) memberGroupFormRef.value.resetFields();
});
loadMemberGroupList();
}
function loadMemberGroupList() {
API_Member.getMemberGroupByPage({ pageNumber: 1, pageSize: 1000 }).then((res) => {
if (res && res.success && res.result) {
memberGroupList.value = res.result.records || [];
}
});
}
function loadMemberGradeList() {
API_Member.getMemberGradeByPage({ pageNumber: 1, pageSize: 1000 }).then((res) => {
if (res && res.success && res.result) {
memberGradeList.value = res.result || [];
}
});
}
function clearSelection() {
table.value?.clearSelection();
}
function submitSetMemberGroup() {
if (selectedRows.value.length === 0) {
ElMessage.warning("请先选择会员");
return;
}
memberGroupFormRef.value.validate((valid) => {
if (!valid) return;
const memberIds = selectedRows.value.map((item) => item.id);
const groupId = memberGroupForm.value.groupId;
memberGroupLoading.value = true;
Promise.all(
memberIds.map((memberId) => API_Member.setMemberUserGroups(memberId, [groupId]))
)
.then((results) => {
memberGroupLoading.value = false;
const failed = results.find((res) => !res || !res.success);
if (failed) {
ElMessage.error(failed.message || "设置失败");
return;
}
ElMessage.success("设置成功");
memberGroupFlag.value = false;
selectedRows.value = [];
clearSelection();
getData();
})
.catch(() => {
memberGroupLoading.value = false;
ElMessage.error("设置失败,请稍后重试");
});
});
}
function callback(val) {
selectMember.value.forEach((item) => {
item.___selected = false;
});
val.___selected = !val.___selected;
let findUser = selectMember.value.find((item) => item.id == val.id);
if (!findUser) {
selectMember.value.push(val);
} else {
selectMember.value.map((item, index) => {
if (item.id == findUser.id) {
selectMember.value.splice(index, 1);
}
this.$nextTick(() => {
this.clearSelection();
this.data.forEach((row) => {
if (this.selectMember.some((member) => member.id === row.id)) {
this.$refs.table?.toggleRowSelection(row, true);
}
});
});
},
openSetMemberGroup() {
this.memberGroupFlag = true;
this.memberGroupLoading = false;
this.memberGroupForm = { groupId: "" };
this.$nextTick(() => {
if (this.$refs.memberGroupForm) this.$refs.memberGroupForm.resetFields();
});
this.loadMemberGroupList();
},
loadMemberGroupList() {
API_Member.getMemberGroupByPage({ pageNumber: 1, pageSize: 1000 }).then((res) => {
if (res && res.success && res.result) {
this.memberGroupList = res.result.records || [];
});
}
emit("callback", val);
}
function init(list) {
list.forEach((item) => {
if (selectMember.value.length != 0) {
selectMember.value.forEach((member) => {
if (member.id == item.id) {
item.___selected = true;
}
});
},
loadMemberGradeList() {
API_Member.getMemberGradeByPage({ pageNumber: 1, pageSize: 1000 }).then((res) => {
if (res && res.success && res.result) {
this.memberGradeList = res.result || [];
} else {
item.___selected = false;
}
});
data.value = list;
}
function changePage() {
getData();
}
function changePageSize() {
searchForm.value.pageNumber = 1;
getData();
}
function handleSearch() {
searchForm.value.pageNumber = 1;
searchForm.value.pageSize = 20;
getData();
}
function editPerm(val) {
descTitle.value = `查看用户 ${val.username}`;
descFlag.value = true;
getMemberInfo(val.id);
}
function addMember() {
addMemberForm.value = {
mobile: "",
username: "",
password: "",
};
addFlag.value = true;
nextTick(() => {
addMemberFormRef.value?.clearValidate();
});
}
function getMemberInfo(id) {
API_Member.getMemberInfoData(id).then((res) => {
if (res.result) {
form.value = res.result;
}
});
}
function getData() {
loading.value = true;
if (!props.selectedMember) {
selectedRows.value = [];
clearSelection();
}
API_Member.getMemberListData(searchForm.value).then((res) => {
if (res.result.records) {
loading.value = false;
init(res.result.records);
total.value = res.result.total;
syncTableSelection();
}
});
}
function openPicSelector() {
picModelFlag.value = true;
nextTick(() => {
if (ossManageRef.value) {
ossManageRef.value.selectImage = true;
}
});
}
function callbackSelected(val) {
picModelFlag.value = false;
form.value.face = val.url;
}
function addMemberSubmit() {
addMemberForm.value.password = md5(addMemberForm.value.password);
addMemberFormRef.value.validate((valid) => {
if (valid) {
API_Member.addMember(addMemberForm.value).then((res) => {
if (res.result) {
addMemberFormRef.value.resetFields();
getData();
ElMessage.success("添加成功!");
addFlag.value = false;
}
});
},
clearSelection() {
this.$refs.table?.clearSelection();
},
submitSetMemberGroup() {
if (this.selectedRows.length === 0) {
ElMessage.warning("请先选择会员");
return;
}
});
}
function selectedRegion(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
form.value.region = paths;
form.value.regionId = ids;
} else {
form.value.region = val.data.addr;
form.value.regionId = val.data.addrId;
}
}
function detail(row) {
customRouterPush({ name: "member-detail", query: { id: row.id } });
}
function disabled(v) {
let params = {
memberIds: [v.id],
disabled: false,
};
ElMessageBox.confirm("确认禁用此会员?", "提示", { type: "warning" }).then(() => {
API_Member.updateMemberStatus(params).then((res) => {
if (res.success) {
ElMessage.success("禁用成功");
getData();
}
this.$refs.memberGroupForm.validate((valid) => {
if (!valid) return;
const memberIds = this.selectedRows.map((item) => item.id);
const groupId = this.memberGroupForm.groupId;
this.memberGroupLoading = true;
Promise.all(
memberIds.map((memberId) => API_Member.setMemberUserGroups(memberId, [groupId]))
)
.then((results) => {
this.memberGroupLoading = false;
const failed = results.find((res) => !res || !res.success);
if (failed) {
ElMessage.error(failed.message || "设置失败");
return;
}
ElMessage.success("设置成功");
this.memberGroupFlag = false;
this.selectedRows = [];
this.clearSelection();
this.getData();
})
.catch(() => {
this.memberGroupLoading = false;
ElMessage.error("设置失败,请稍后重试");
});
});
},
callback(val) {
this.selectMember.forEach((item) => {
item.___selected = false;
});
val.___selected = !val.___selected;
let findUser = this.selectMember.find((item) => item.id == val.id);
if (!findUser) {
this.selectMember.push(val);
} else {
this.selectMember.map((item, index) => {
if (item.id == findUser.id) {
this.selectMember.splice(index, 1);
}
});
}
this.$emit("callback", val);
},
init(data) {
data.forEach((item) => {
if (this.selectMember.length != 0) {
this.selectMember.forEach((member) => {
if (member.id == item.id) {
item.___selected = true;
}
});
});
}).catch(() => {});
}
function openWalletIncrease(row) {
walletIncreaseLoading.value = false;
walletIncreaseForm.value = { memberId: row.id, rechargeMoney: null };
walletIncreaseFlag.value = true;
nextTick(() => {
walletIncreaseFormRef.value && walletIncreaseFormRef.value.resetFields();
});
}
function submitWalletIncrease() {
walletIncreaseFormRef.value.validate((valid) => {
if (!valid) return;
walletIncreaseLoading.value = true;
API_Member.increaseMemberWallet({
memberId: walletIncreaseForm.value.memberId,
rechargeMoney: walletIncreaseForm.value.rechargeMoney,
})
.then((res) => {
if (res && res.success) {
ElMessage.success("充值成功");
walletIncreaseFlag.value = false;
getData();
} else {
item.___selected = false;
ElMessage.error((res && res.message) || "充值失败");
}
})
.finally(() => {
walletIncreaseLoading.value = false;
});
this.data = data;
},
changePage() {
this.getData();
},
changePageSize() {
this.searchForm.pageNumber = 1;
this.getData();
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 20;
this.getData();
},
editPerm(val) {
this.descTitle = `查看用户 ${val.username}`;
this.descFlag = true;
this.getMemberInfo(val.id);
},
addMember() {
this.addMemberForm = {
mobile: "",
username: "",
password: "",
};
this.addFlag = true;
this.$nextTick(() => {
this.$refs.addMemberForm?.clearValidate();
});
},
getMemberInfo(id) {
API_Member.getMemberInfoData(id).then((res) => {
if (res.result) {
this.form = res.result;
});
}
function openMemberPoint(row) {
memberPointLoading.value = false;
memberPointForm.value = { memberId: row.id, point: null, type: "INCREASE" };
memberPointFlag.value = true;
nextTick(() => {
memberPointFormRef.value && memberPointFormRef.value.resetFields();
});
}
function submitMemberPoint() {
memberPointFormRef.value.validate((valid) => {
if (!valid) return;
memberPointLoading.value = true;
API_Member.updateMemberPoint({
memberId: memberPointForm.value.memberId,
point: memberPointForm.value.point,
type: memberPointForm.value.type,
})
.then((res) => {
if (res && res.success) {
ElMessage.success("修改成功");
memberPointFlag.value = false;
getData();
} else {
ElMessage.error((res && res.message) || "修改失败");
}
})
.finally(() => {
memberPointLoading.value = false;
});
},
getData() {
this.loading = true;
if (!this.selectedMember) {
this.selectedRows = [];
this.clearSelection();
}
API_Member.getMemberListData(this.searchForm).then((res) => {
if (res.result.records) {
this.loading = false;
this.init(res.result.records);
this.total = res.result.total;
this.syncTableSelection();
}
});
},
openPicSelector() {
this.picModelFlag = true;
this.$nextTick(() => {
if (this.$refs.ossManage) {
this.$refs.ossManage.selectImage = true;
}
});
},
callbackSelected(val) {
this.picModelFlag = false;
this.form.face = val.url;
},
addMemberSubmit() {
this.addMemberForm.password = this.md5(this.addMemberForm.password);
this.$refs.addMemberForm.validate((valid) => {
if (valid) {
API_Member.addMember(this.addMemberForm).then((res) => {
if (res.result) {
this.$refs.addMemberForm.resetFields();
this.getData();
ElMessage.success("添加成功!");
this.addFlag = false;
}
});
}
});
},
selectedRegion(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
this.form.region = paths;
this.form.regionId = ids;
} else {
this.form.region = val.data.addr;
this.form.regionId = val.data.addrId;
}
},
detail(row) {
customRouterPush({ name: "member-detail", query: { id: row.id } });
},
disabled(v) {
let params = {
memberIds: [v.id],
disabled: false,
};
ElMessageBox.confirm("确认禁用此会员?", "提示", { type: "warning" }).then(() => {
API_Member.updateMemberStatus(params).then((res) => {
if (res.success) {
ElMessage.success("禁用成功");
this.getData();
}
});
}).catch(() => {});
},
openWalletIncrease(row) {
this.walletIncreaseLoading = false;
this.walletIncreaseForm = { memberId: row.id, rechargeMoney: null };
this.walletIncreaseFlag = true;
this.$nextTick(() => {
this.$refs.walletIncreaseForm && this.$refs.walletIncreaseForm.resetFields();
});
},
submitWalletIncrease() {
this.$refs.walletIncreaseForm.validate((valid) => {
if (!valid) return;
this.walletIncreaseLoading = true;
API_Member.increaseMemberWallet({
memberId: this.walletIncreaseForm.memberId,
rechargeMoney: this.walletIncreaseForm.rechargeMoney,
})
.then((res) => {
if (res && res.success) {
ElMessage.success("充值成功");
this.walletIncreaseFlag = false;
this.getData();
} else {
ElMessage.error((res && res.message) || "充值失败");
}
})
.finally(() => {
this.walletIncreaseLoading = false;
});
});
},
openMemberPoint(row) {
this.memberPointLoading = false;
this.memberPointForm = { memberId: row.id, point: null, type: "INCREASE" };
this.memberPointFlag = true;
this.$nextTick(() => {
this.$refs.memberPointForm && this.$refs.memberPointForm.resetFields();
});
},
submitMemberPoint() {
this.$refs.memberPointForm.validate((valid) => {
if (!valid) return;
this.memberPointLoading = true;
API_Member.updateMemberPoint({
memberId: this.memberPointForm.memberId,
point: this.memberPointForm.point,
type: this.memberPointForm.type,
})
.then((res) => {
if (res && res.success) {
ElMessage.success("修改成功");
this.memberPointFlag = false;
this.getData();
} else {
ElMessage.error((res && res.message) || "修改失败");
}
})
.finally(() => {
this.memberPointLoading = false;
});
});
},
handleSubmitModal() {
const { nickName, sex, username, face, newPassword, id, regionId, region } = this.form;
let time = new Date(this.form.birthday);
let birthday =
this.form.birthday === undefined
? ""
: time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
let submit = {
regionId,
region,
nickName,
sex,
birthday,
face,
id,
};
if (newPassword) {
submit.password = this.md5(newPassword);
}
API_Member.updateMember(submit).then((res) => {
if (res.result) {
ElMessage.success("修改成功!");
this.descFlag = false;
this.getData();
}
});
},
},
mounted() {
this.getData();
this.loadMemberGroupList();
this.loadMemberGradeList();
},
};
});
}
function handleSubmitModal() {
const { nickName, sex, username, face, newPassword, id, regionId, region } = form.value;
let time = new Date(form.value.birthday);
let birthday =
form.value.birthday === undefined
? ""
: time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
let submit = {
regionId,
region,
nickName,
sex,
birthday,
face,
id,
};
if (newPassword) {
submit.password = md5(newPassword);
}
API_Member.updateMember(submit).then((res) => {
if (res.result) {
ElMessage.success("修改成功!");
descFlag.value = false;
getData();
}
});
}
onMounted(() => {
getData();
loadMemberGroupList();
loadMemberGradeList();
});
// 外部通过 ref 调用(promotions/coupon-activity/coupon-publish.vue 的 memberLayoutRef.getSelection())
defineExpose({ getSelection });
</script>
<style lang="scss" scoped>
.face {

View File

@@ -379,7 +379,7 @@
width="500px"
:close-on-click-modal="false"
>
<el-form ref="addressForm" :model="addressForm" label-width="100px" :rules="addressFormValidate">
<el-form ref="addressFormRef" :model="addressForm" label-width="100px" :rules="addressFormValidate">
<el-form-item label="收货人姓名" prop="name">
<el-input v-model="addressForm.name" maxlength="8" clearable style="width: 80%" />
</el-form-item>
@@ -388,7 +388,7 @@
</el-form-item>
<el-form-item label="收货人地址" prop="consigneeAddressPath">
<span>{{ addressForm.consigneeAddressPath || "暂无地址" }}</span>
<el-button style="margin-left: 10px" @click="$refs.map.open()">选择</el-button>
<el-button style="margin-left: 10px" @click="map.open()">选择</el-button>
</el-form-item>
<el-form-item label="详细地址" prop="detail">
<el-input v-model="addressForm.detail" maxlength="35" clearable style="width: 80%" />
@@ -412,7 +412,9 @@
</div>
</template>
<script>
<script setup>
import { ref, reactive, nextTick, onMounted } from "vue";
import { useRoute, useRouter } from "vue-router";
import * as API_Member from "@/api/member.js";
import ossManage from "@/views/sys/oss-manage/ossManage";
import multipleMap from "@/components/map/multiple-map";
@@ -420,374 +422,373 @@ import * as RegExp from "@/libs/RegExp.js";
import * as API_Order from "@/api/order.js";
import { ElMessage, ElMessageBox } from "element-plus";
export default {
name: "memberDetail",
components: {
ossManage,
multipleMap,
},
data() {
return {
id: "",
activeTab: "point",
loading: true,
addressLoading: false,
memberInfo: {},
memberWalletInfo: {},
addressModalTitle: "",
addressModalVisible: false,
addressForm: {
id: "",
isDefault: 0,
consigneeAddressPath: "",
consigneeAddressIdPath: "",
},
selectDate: null,
submitLoading: false,
addressFormValidate: {
name: [{ required: true, message: "收货人姓名不能为空" }],
mobile: [
{ required: true, message: "请输入收货人手机号码" },
{
pattern: RegExp.mobile,
message: "请输入正确的手机号",
},
],
consigneeAddressPath: [{ required: true, message: "收货人地址不能为空" }],
detail: [{ required: true, message: "收货人详细地址不能为空" }],
},
pointData: [],
pointTotal: 0,
pointSearchForm: {
pageNumber: 1,
pageSize: 20,
},
orderData: [],
orderTotal: 0,
orderSearchForm: {
pageNumber: 1,
pageSize: 20,
payStatus: "",
orderSn: "",
orderType: "",
},
addressData: [],
addressTotal: 0,
addressSearchForm: {
pageNumber: 1,
pageSize: 20,
},
walletSearchForm: {
pageNumber: 1,
pageSize: 20,
sort: "createTime",
order: "desc",
},
walletData: [],
walletTotal: 0,
receiptRecordSearchForm: {
pageNumber: 1,
pageSize: 20,
sort: "createTime",
order: "desc",
},
receiptRecordData: [],
receiptRecordTotal: 0,
};
},
methods: {
orderTypeText(v) {
const map = {
NORMAL: "普通订单",
VIRTUAL: "虚拟订单",
GIFT: "赠品订单",
PINTUAN: "拼团订单",
};
return map[v] || v || "";
},
clientTypeText(v) {
const map = {
H5: "移动端",
PC: "PC端",
WECHAT_MP: "小程序端",
APP: "移动应用端",
};
return map[v] || v || "";
},
orderStatusText(v) {
const map = {
UNPAID: "未付款",
PAID: "已付款",
UNDELIVERED: "待发货",
DELIVERED: "已发货",
COMPLETED: "已完成",
TAKE: "待核验",
CANCELLED: "已关闭",
};
return map[v] || v || "";
},
payStatusText(v) {
const map = {
UNPAID: "未付款",
PAID: "已付款",
};
return map[v] || v || "";
},
groupAfterSaleStatusText(v) {
const map = {
NEW: "未申请",
NOT_APPLIED: "未申请",
ALREADY_APPLIED: "已申请",
EXPIRED: "已失效",
};
return map[v] || v || "";
},
groupComplainStatusText(v) {
const map = {
NEW: "未申请",
NO_APPLY: "未申请",
APPLYING: "申请中",
COMPLETE: "已完成",
EXPIRED: "已失效",
CANCEL: "取消投诉",
};
return map[v] || v || "";
},
walletServiceTypeText(type) {
if (type === "WALLET_WITHDRAWAL") return "余额提现";
if (type === "WALLET_PAY") return "余额支付";
if (type === "WALLET_REFUND") return "余额退款";
if (type === "WALLET_RECHARGE") return "余额充值";
return "佣金提成";
},
init() {
this.getMemberInfo();
this.getPointData();
},
memberInfoChange(v) {
if (v == "point") {
this.getPointData();
}
if (v == "address") {
this.$nextTick(() => {
this.getAddressData();
});
}
if (v == "order") {
this.getOrderData();
}
if (v == "wallet") {
this.getMemberWalletData();
this.getDepositLogData();
}
if (v == "receipt") {
this.getReceiptRecordData();
}
},
getMemberInfo() {
API_Member.getMemberInfoData(this.id).then((res) => {
this.memberInfo = res.result;
});
},
memberStatusChange(v) {
let params = {
memberIds: [this.id],
disabled: v,
};
API_Member.updateMemberStatus(params).then((res) => {});
},
getMemberWalletData() {
this.loading = true;
let params = {
memberId: this.id,
};
API_Member.getMemberWallet(params).then((res) => {
this.loading = false;
if (res.success) {
this.memberWalletInfo = res.result;
}
});
this.loading = false;
},
getDepositLogData() {
this.loading = true;
this.walletSearchForm.memberId = this.id;
API_Member.getUserWallet(this.walletSearchForm).then((res) => {
this.loading = false;
if (res.success) {
this.walletData = res.result.records;
this.walletTotal = res.result.total;
}
});
this.loading = false;
},
getReceiptRecordData() {
this.loading = true;
this.receiptRecordSearchForm.pageNumber = 1;
this.receiptRecordSearchForm.pageSize = 20;
this.receiptRecordSearchForm.memberId = this.id;
API_Order.getReceiptPage(this.receiptRecordSearchForm).then((res) => {
this.loading = false;
if (res.success) {
this.receiptRecordData = res.result.records;
this.receiptRecordTotal = res.result.total;
}
});
this.loading = false;
},
getOrderData() {
this.loading = true;
this.orderSearchForm.pageNumber = 1;
this.orderSearchForm.pageSize = 20;
this.orderSearchForm.memberId = this.id;
API_Order.getOrderList(this.orderSearchForm).then((res) => {
this.loading = false;
if (res.success) {
this.orderData = res.result.records;
this.orderTotal = res.result.total;
}
});
this.loading = false;
},
orderDetail(v) {
this.$router.push({
name: "order-detail",
query: { sn: v },
});
},
getPointData() {
this.loading = true;
this.pointSearchForm.memberId = this.id;
API_Member.getHistoryPointData(this.pointSearchForm).then((res) => {
this.loading = false;
if (res.success) {
this.pointData = res.result.records;
this.pointTotal = res.result.total;
}
});
this.loading = false;
},
addressSubmit() {
this.addressForm.memberId = this.id;
this.$refs.addressForm.validate((valid) => {
if (valid) {
this.submitLoading = true;
let submit = JSON.parse(JSON.stringify(this.addressForm));
submit.isDefault ? (submit.isDefault = true) : (submit.isDefault = false);
if (submit.id != "") {
API_Member.editMemberAddress(submit).then((res) => {
this.submitLoading = false;
if (res && res.success) {
ElMessage.success("修改成功");
this.addressModalVisible = false;
this.getAddressData();
}
});
} else {
API_Member.addMemberAddress(submit).then((res) => {
this.submitLoading = false;
if (res && res.success) {
ElMessage.success("添加成功");
this.addressModalVisible = false;
this.getAddressData();
}
});
}
}
});
},
getAddress(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
defineOptions({ name: "memberDetail" });
this.addressForm.consigneeAddressPath = paths;
this.addressForm.consigneeAddressIdPath = ids;
const route = useRoute();
const router = useRouter();
const coord = val.data[val.data.length - 1].center.split(",");
this.addressForm.lat = coord[1];
this.addressForm.lon = coord[0];
} else {
this.addressForm.consigneeAddressPath = val.data.addr;
this.addressForm.consigneeAddressIdPath = val.data.addrId;
this.addressForm.lat = val.data.position.lat;
this.addressForm.lon = val.data.position.lng;
}
// 模板 el-form 的 ref(原 ref="addressForm",与 data 同名会互相覆盖,改名为 addressFormRef)
const addressFormRef = ref(null);
// 模板 multipleMap 的 ref(ref="map")
const map = ref(null);
const id = ref("");
const activeTab = ref("point");
const loading = ref(true);
const addressLoading = ref(false);
const memberInfo = ref({});
const memberWalletInfo = ref({});
const addressModalTitle = ref("");
const addressModalVisible = ref(false);
const addressForm = reactive({
id: "",
isDefault: 0,
consigneeAddressPath: "",
consigneeAddressIdPath: "",
});
const selectDate = ref(null);
const submitLoading = ref(false);
const addressFormValidate = reactive({
name: [{ required: true, message: "收货人姓名不能为空" }],
mobile: [
{ required: true, message: "请输入收货人手机号码" },
{
pattern: RegExp.mobile,
message: "请输入正确的手机号",
},
memberAddressRemove(v) {
ElMessageBox.confirm("确定要删除此收货地址?", "删除", { type: "warning" }).then(() => {
API_Member.removeMemberAddress(v.id).then((res) => {
if (res.success) {
ElMessage.success("删除成功");
this.getAddressData();
],
consigneeAddressPath: [{ required: true, message: "收货人地址不能为空" }],
detail: [{ required: true, message: "收货人详细地址不能为空" }],
});
const pointData = ref([]);
const pointTotal = ref(0);
const pointSearchForm = ref({
pageNumber: 1,
pageSize: 20,
});
const orderData = ref([]);
const orderTotal = ref(0);
const orderSearchForm = ref({
pageNumber: 1,
pageSize: 20,
payStatus: "",
orderSn: "",
orderType: "",
});
const addressData = ref([]);
const addressTotal = ref(0);
const addressSearchForm = ref({
pageNumber: 1,
pageSize: 20,
});
const walletSearchForm = ref({
pageNumber: 1,
pageSize: 20,
sort: "createTime",
order: "desc",
});
const walletData = ref([]);
const walletTotal = ref(0);
const receiptRecordSearchForm = ref({
pageNumber: 1,
pageSize: 20,
sort: "createTime",
order: "desc",
});
const receiptRecordData = ref([]);
const receiptRecordTotal = ref(0);
function orderTypeText(v) {
const map = {
NORMAL: "普通订单",
VIRTUAL: "虚拟订单",
GIFT: "赠品订单",
PINTUAN: "拼团订单",
};
return map[v] || v || "";
}
function clientTypeText(v) {
const map = {
H5: "移动端",
PC: "PC端",
WECHAT_MP: "小程序端",
APP: "移动应用端",
};
return map[v] || v || "";
}
function orderStatusText(v) {
const map = {
UNPAID: "未付款",
PAID: "已付款",
UNDELIVERED: "待发货",
DELIVERED: "已发货",
COMPLETED: "已完成",
TAKE: "待核验",
CANCELLED: "已关闭",
};
return map[v] || v || "";
}
function payStatusText(v) {
const map = {
UNPAID: "未付款",
PAID: "已付款",
};
return map[v] || v || "";
}
function groupAfterSaleStatusText(v) {
const map = {
NEW: "未申请",
NOT_APPLIED: "未申请",
ALREADY_APPLIED: "已申请",
EXPIRED: "已失效",
};
return map[v] || v || "";
}
function groupComplainStatusText(v) {
const map = {
NEW: "未申请",
NO_APPLY: "未申请",
APPLYING: "申请中",
COMPLETE: "已完成",
EXPIRED: "已失效",
CANCEL: "取消投诉",
};
return map[v] || v || "";
}
function walletServiceTypeText(type) {
if (type === "WALLET_WITHDRAWAL") return "余额提现";
if (type === "WALLET_PAY") return "余额支付";
if (type === "WALLET_REFUND") return "余额退款";
if (type === "WALLET_RECHARGE") return "余额充值";
return "佣金提成";
}
function init() {
getMemberInfo();
getPointData();
}
function memberInfoChange(v) {
if (v == "point") {
getPointData();
}
if (v == "address") {
nextTick(() => {
getAddressData();
});
}
if (v == "order") {
getOrderData();
}
if (v == "wallet") {
getMemberWalletData();
getDepositLogData();
}
if (v == "receipt") {
getReceiptRecordData();
}
}
function getMemberInfo() {
API_Member.getMemberInfoData(id.value).then((res) => {
memberInfo.value = res.result;
});
}
function memberStatusChange(v) {
let params = {
memberIds: [id.value],
disabled: v,
};
API_Member.updateMemberStatus(params).then((res) => {});
}
function getMemberWalletData() {
loading.value = true;
let params = {
memberId: id.value,
};
API_Member.getMemberWallet(params).then((res) => {
loading.value = false;
if (res.success) {
memberWalletInfo.value = res.result;
}
});
loading.value = false;
}
function getDepositLogData() {
loading.value = true;
walletSearchForm.value.memberId = id.value;
API_Member.getUserWallet(walletSearchForm.value).then((res) => {
loading.value = false;
if (res.success) {
walletData.value = res.result.records;
walletTotal.value = res.result.total;
}
});
loading.value = false;
}
function getReceiptRecordData() {
loading.value = true;
receiptRecordSearchForm.value.pageNumber = 1;
receiptRecordSearchForm.value.pageSize = 20;
receiptRecordSearchForm.value.memberId = id.value;
API_Order.getReceiptPage(receiptRecordSearchForm.value).then((res) => {
loading.value = false;
if (res.success) {
receiptRecordData.value = res.result.records;
receiptRecordTotal.value = res.result.total;
}
});
loading.value = false;
}
function getOrderData() {
loading.value = true;
orderSearchForm.value.pageNumber = 1;
orderSearchForm.value.pageSize = 20;
orderSearchForm.value.memberId = id.value;
API_Order.getOrderList(orderSearchForm.value).then((res) => {
loading.value = false;
if (res.success) {
orderData.value = res.result.records;
orderTotal.value = res.result.total;
}
});
loading.value = false;
}
function orderDetail(v) {
router.push({
name: "order-detail",
query: { sn: v },
});
}
function getPointData() {
loading.value = true;
pointSearchForm.value.memberId = id.value;
API_Member.getHistoryPointData(pointSearchForm.value).then((res) => {
loading.value = false;
if (res.success) {
pointData.value = res.result.records;
pointTotal.value = res.result.total;
}
});
loading.value = false;
}
function addressSubmit() {
addressForm.memberId = id.value;
addressFormRef.value.validate((valid) => {
if (valid) {
submitLoading.value = true;
let submit = JSON.parse(JSON.stringify(addressForm));
submit.isDefault ? (submit.isDefault = true) : (submit.isDefault = false);
if (submit.id != "") {
API_Member.editMemberAddress(submit).then((res) => {
submitLoading.value = false;
if (res && res.success) {
ElMessage.success("修改成功");
addressModalVisible.value = false;
getAddressData();
}
});
}).catch(() => {});
},
getAddressData() {
this.addressLoading = true;
API_Member.getMemberAddressData(this.id, this.addressSearchForm)
.then((res) => {
if (res.success) {
this.addressData = res.result.records;
this.addressTotal = res.result.total;
}
})
.finally(() => {
this.addressLoading = false;
});
},
pointChangePage(v) {
this.pointSearchForm.pageNumber = v;
this.getPointData();
},
pointChangePageSize(v) {
this.pointSearchForm.pageNumber = 1;
this.pointSearchForm.pageSize = v;
this.getPointData();
},
addressChangePage(v) {
this.addressSearchForm.pageNumber = v;
this.getAddressData();
},
addressChangePageSize(v) {
this.addressSearchForm.pageNumber = 1;
this.addressSearchForm.pageSize = v;
this.getAddressData();
},
walletChangePage(v) {
this.walletSearchForm.pageNumber = v;
this.getDepositLogData();
},
walletChangePageSize(v) {
this.walletSearchForm.pageNumber = 1;
this.walletSearchForm.pageSize = v;
this.getDepositLogData();
},
orderChangePage(v) {
this.orderSearchForm.pageNumber = v;
this.getOrderData();
},
orderChangePageSize(v) {
this.orderSearchForm.pageNumber = 1;
this.orderSearchForm.pageSize = v;
this.getOrderData();
},
selectDateRange(v) {
if (v && v.length === 2) {
this.orderSearchForm.startDate = v[0];
this.orderSearchForm.endDate = v[1];
} else {
delete this.orderSearchForm.startDate;
delete this.orderSearchForm.endDate;
API_Member.addMemberAddress(submit).then((res) => {
submitLoading.value = false;
if (res && res.success) {
ElMessage.success("添加成功");
addressModalVisible.value = false;
getAddressData();
}
});
}
},
},
mounted() {
this.id = this.$route.query.id;
this.init();
},
};
}
});
}
function getAddress(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
addressForm.consigneeAddressPath = paths;
addressForm.consigneeAddressIdPath = ids;
const coord = val.data[val.data.length - 1].center.split(",");
addressForm.lat = coord[1];
addressForm.lon = coord[0];
} else {
addressForm.consigneeAddressPath = val.data.addr;
addressForm.consigneeAddressIdPath = val.data.addrId;
addressForm.lat = val.data.position.lat;
addressForm.lon = val.data.position.lng;
}
}
function memberAddressRemove(v) {
ElMessageBox.confirm("确定要删除此收货地址?", "删除", { type: "warning" }).then(() => {
API_Member.removeMemberAddress(v.id).then((res) => {
if (res.success) {
ElMessage.success("删除成功");
getAddressData();
}
});
}).catch(() => {});
}
function getAddressData() {
addressLoading.value = true;
API_Member.getMemberAddressData(id.value, addressSearchForm.value)
.then((res) => {
if (res.success) {
addressData.value = res.result.records;
addressTotal.value = res.result.total;
}
})
.finally(() => {
addressLoading.value = false;
});
}
function pointChangePage(v) {
pointSearchForm.value.pageNumber = v;
getPointData();
}
function pointChangePageSize(v) {
pointSearchForm.value.pageNumber = 1;
pointSearchForm.value.pageSize = v;
getPointData();
}
function addressChangePage(v) {
addressSearchForm.value.pageNumber = v;
getAddressData();
}
function addressChangePageSize(v) {
addressSearchForm.value.pageNumber = 1;
addressSearchForm.value.pageSize = v;
getAddressData();
}
function walletChangePage(v) {
walletSearchForm.value.pageNumber = v;
getDepositLogData();
}
function walletChangePageSize(v) {
walletSearchForm.value.pageNumber = 1;
walletSearchForm.value.pageSize = v;
getDepositLogData();
}
function orderChangePage(v) {
orderSearchForm.value.pageNumber = v;
getOrderData();
}
function orderChangePageSize(v) {
orderSearchForm.value.pageNumber = 1;
orderSearchForm.value.pageSize = v;
getOrderData();
}
function selectDateRange(v) {
if (v && v.length === 2) {
orderSearchForm.value.startDate = v[0];
orderSearchForm.value.endDate = v[1];
} else {
delete orderSearchForm.value.startDate;
delete orderSearchForm.value.endDate;
}
}
onMounted(() => {
id.value = route.query.id;
init();
});
</script>
<style lang="scss" scoped>
@import "memberDetail.scss";

View File

@@ -2,7 +2,7 @@
<div class="search">
<el-card>
<el-form
ref="searchForm"
ref="searchFormRef"
:model="searchForm"
inline
label-width="70px"
@@ -96,7 +96,7 @@
</el-card>
<el-dialog v-model="descFlag" :title="descTitle" width="500px" destroy-on-close>
<el-form ref="formValidate" :model="formValidate" :rules="ruleValidate" label-width="80px">
<el-form ref="formValidateRef" :model="formValidate" :rules="ruleValidate" label-width="80px">
<el-form-item label="头像">
<img :src="formValidate.face" class="face" />
<el-button
@@ -143,7 +143,7 @@
<el-dialog v-model="picModelFlag" width="1200px">
<ossManage
ref="ossManage"
ref="ossManageRef"
@callback="callbackSelected"
:isComponent="true"
:initialize="picModelFlag"
@@ -153,152 +153,156 @@
</div>
</template>
<script>
<script setup>
import { ref, nextTick, onMounted } from "vue";
import * as API_Member from "@/api/member.js";
import ossManage from "@/views/sys/oss-manage/ossManage";
import multipleMap from "@/components/map/multiple-map";
import { ElMessage, ElMessageBox } from "element-plus";
import { customRouterPush } from "@/utils/filters";
import { md5 } from "@/utils/md5.js";
export default {
name: "memberRecycle",
components: {
ossManage,
multipleMap,
},
data() {
return {
selectedMember: false,
descTitle: "",
descFlag: false,
openSearch: true,
loading: true,
searchForm: {
pageNumber: 1,
pageSize: 20,
order: "desc",
id: "",
username: "",
mobile: "",
disabled: "CLOSE",
},
picModelFlag: false,
formValidate: {},
ruleValidate: {},
data: [],
total: 0,
};
},
methods: {
callback(val) {
this.$emit("callback", val);
},
init() {
this.getData();
},
changePage() {
this.getData();
},
changePageSize() {
this.searchForm.pageNumber = 1;
this.getData();
},
handleSearch() {
this.searchForm.pageNumber = 1;
this.searchForm.pageSize = 20;
this.getData();
},
editPerm(val) {
this.descTitle = `查看用户 ${val.username}`;
this.descFlag = true;
this.getMemberInfo(val.id);
},
getMemberInfo(id) {
API_Member.getMemberInfoData(id).then((res) => {
if (res.result) {
this.formValidate = res.result;
}
});
},
getData() {
this.loading = true;
API_Member.getMemberListData(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
this.data = res.result.records;
this.total = res.result.total;
}
});
},
openPicSelector() {
this.picModelFlag = true;
this.$nextTick(() => {
if (this.$refs.ossManage) {
this.$refs.ossManage.selectImage = true;
}
});
},
callbackSelected(val) {
this.picModelFlag = false;
this.formValidate.face = val.url;
},
selectedRegion(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
this.formValidate.region = paths;
this.formValidate.regionId = ids;
} else {
this.formValidate.region = val.data.addr;
this.formValidate.regionId = val.data.addrId;
defineOptions({ name: "memberRecycle" });
const emit = defineEmits(["callback"]);
// 模板 el-form 的 ref(原 ref="searchForm",与 data 同名会互相覆盖,改名为 searchFormRef)
const searchFormRef = ref(null);
const table = ref(null);
// 模板编辑弹窗 el-form 的 ref(原 ref="formValidate",与 data 同名会互相覆盖,改名为 formValidateRef)
const formValidateRef = ref(null);
// 模板 ossManage 组件的 ref(原 ref="ossManage",与组件 import 同名会冲突,改名为 ossManageRef)
const ossManageRef = ref(null);
const selectedMember = ref(false);
const descTitle = ref("");
const descFlag = ref(false);
const openSearch = ref(true);
const loading = ref(true);
const searchForm = ref({
pageNumber: 1,
pageSize: 20,
order: "desc",
id: "",
username: "",
mobile: "",
disabled: "CLOSE",
});
const picModelFlag = ref(false);
const formValidate = ref({});
const ruleValidate = ref({});
const data = ref([]);
const total = ref(0);
function callback(val) {
emit("callback", val);
}
function init() {
getData();
}
function changePage() {
getData();
}
function changePageSize() {
searchForm.value.pageNumber = 1;
getData();
}
function handleSearch() {
searchForm.value.pageNumber = 1;
searchForm.value.pageSize = 20;
getData();
}
function editPerm(val) {
descTitle.value = `查看用户 ${val.username}`;
descFlag.value = true;
getMemberInfo(val.id);
}
function getMemberInfo(id) {
API_Member.getMemberInfoData(id).then((res) => {
if (res.result) {
formValidate.value = res.result;
}
});
}
function getData() {
loading.value = true;
API_Member.getMemberListData(searchForm.value).then((res) => {
loading.value = false;
if (res.success) {
data.value = res.result.records;
total.value = res.result.total;
}
});
}
function openPicSelector() {
picModelFlag.value = true;
nextTick(() => {
if (ossManageRef.value) {
ossManageRef.value.selectImage = true;
}
});
}
function callbackSelected(val) {
picModelFlag.value = false;
formValidate.value.face = val.url;
}
function selectedRegion(val) {
if (val.type === "select") {
const paths = val.data.map((item) => item.name).join(",");
const ids = val.data.map((item) => item.id).join(",");
formValidate.value.region = paths;
formValidate.value.regionId = ids;
} else {
formValidate.value.region = val.data.addr;
formValidate.value.regionId = val.data.addrId;
}
}
function detail(row) {
customRouterPush({ name: "member-detail", query: { id: row.id } });
}
function enable(v) {
let params = {
memberIds: [v.id],
disabled: true,
};
ElMessageBox.confirm("确定启用此会员?", "提示", { type: "warning" }).then(() => {
API_Member.updateMemberStatus(params).then((res) => {
if (res.success) {
ElMessage.success("启用成功");
getData();
}
},
detail(row) {
customRouterPush({ name: "member-detail", query: { id: row.id } });
},
enable(v) {
let params = {
memberIds: [v.id],
disabled: true,
};
ElMessageBox.confirm("确定启用此会员?", "提示", { type: "warning" }).then(() => {
API_Member.updateMemberStatus(params).then((res) => {
if (res.success) {
ElMessage.success("启用成功");
this.getData();
}
});
}).catch(() => {});
},
handleSubmitModal() {
const { nickName, sex, username, face, newPassword, id, regionId, region } = this.formValidate;
let time = new Date(this.formValidate.birthday);
let birthday = time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
let submit = {
regionId: regionId,
region: region,
nickName,
sex,
birthday,
face: face || "",
id,
};
if (newPassword) {
submit.password = this.md5(newPassword);
}
API_Member.updateMember(submit).then((res) => {
if (res.result) {
ElMessage.success("修改成功!");
this.descFlag = false;
this.init();
}
});
},
},
mounted() {
this.init();
},
};
});
}).catch(() => {});
}
function handleSubmitModal() {
const { nickName, sex, username, face, newPassword, id, regionId, region } = formValidate.value;
let time = new Date(formValidate.value.birthday);
let birthday = time.getFullYear() + "-" + (time.getMonth() + 1) + "-" + time.getDate();
let submit = {
regionId: regionId,
region: region,
nickName,
sex,
birthday,
face: face || "",
id,
};
if (newPassword) {
// 原 this.md5 为 main.js 注册的全局属性,改为具名导入(同 login.vue / userManage.vue)
submit.password = md5(newPassword);
}
API_Member.updateMember(submit).then((res) => {
if (res.result) {
ElMessage.success("修改成功!");
descFlag.value = false;
init();
}
});
}
onMounted(() => {
init();
});
</script>
<style lang="scss" scoped>
.face {