feat:用户配置

This commit is contained in:
dzc committed 2025-11-28 10:41:25 +08:00
1 parent 711391fc4f
commit ef873cd140
4 files changed
+112 -13

No files matched your search

+1 -1
View File
@@ -62,7 +62,7 @@
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[typescriptreact]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
+5
View File
@@ -0,0 +1,5 @@
import request from '@/config/axios'
export async function getRecentPage(data: any) {
return await request.post({ url: `/member/recent-cfg/create-or-update`, data })
}
@@ -41,7 +41,11 @@ const open = async (id?: number) => {
if (id) {
formLoading.value = true
try {
formData.value = await UserApi.getUser(id)
const data = await UserApi.getUser(id)
if (data && data.memberTagList.length) {
data.memberRecentTagList = data.memberTagList.map(item => item.tagBizType)
}
formData.value = data
} finally {
formLoading.value = false
}
+101 -11
View File
@@ -60,26 +60,68 @@
</el-table-column>
<el-table-column align="center" label="手机号" prop="mobile" width="120px" />
<el-table-column align="center" label="昵称" prop="nickname" width="120px" />
<el-table-column align="center" label="等级" prop="levelName" width="100px" />
<el-table-column align="center" label="分组" prop="groupName" width="100px" />
<el-table-column :show-overflow-tooltip="false" align="center" label="用户标签">
<el-table-column align="center" label="会员" prop="nickname" />
<el-table-column align="center" width="160px" label="用户标签">
<template #default="{ row }">
<div class="flex gap-2">
<div class="grid grid-cols-2 gap-1">
<dict-tag v-for="v in row.memberTagList" :key="v.tagBizType" :type="DICT_TYPE.MEMBER_RECENT_TAG"
:value="v.tagBizType">
{{ v }}
</dict-tag>
:value="v.tagBizType" />
</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" align="center" width="250px" label="用户配置">
<template #default="{ row }">
<div class="grid grid-cols-2 gap-1">
<div class="switch-cell">
<span>是否推送:</span>
<span>
<el-switch v-model="row.recentCfg.isPush" size="small" :active-value="true" :inactive-value="false"
@change="memberCfgChange(row)" />
</span>
</div>
<div class="switch-cell">
<span>首页隐身:</span>
<span>
<el-switch v-model="row.recentCfg.homeHide" size="small" :active-value="true" :inactive-value="false"
@change="memberCfgChange(row)" />
</span>
</div>
<div class="switch-cell">
<span>隐私保护</span>
<span>
<el-switch v-model="row.recentCfg.privacySecure" size="small" :active-value="true"
:inactive-value="false" @change="memberCfgChange(row)" />
</span>
</div>
<div class="switch-cell">
<span>短信通知</span>
<span>
<el-switch v-model="row.recentCfg.shortNote" size="small" :active-value="true" :inactive-value="false"
@change="memberCfgChange(row)" />
</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column align="center" label="积分" prop="point" width="100px" />
<el-table-column align="center" label="状态" prop="status" width="100px">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" />
</template>
</el-table-column>
<el-table-column :formatter="dateFormatter" align="center" label="登录时间" prop="loginDate" width="180px" />
<el-table-column :formatter="dateFormatter" align="center" label="注册时间" prop="createTime" width="180px" />
<el-table-column align="center" label="时间" width="250px">
<template #default="{ row }">
<div>
<div>
<span>登录时间:</span>
<span>{{ formatDate(row.loginDate) }}</span>
</div>
<div>
<span>注册时间:</span>
<span>{{ formatDate(row.createTime) }}</span>
</div>
</div>
</template>
</el-table-column>
<el-table-column :show-overflow-tooltip="false" align="center" fixed="right" label="操作" width="100px">
<template #default="{ row }">
<div class="flex items-center justify-center">
@@ -135,9 +177,11 @@
<CouponSendForm ref="couponSendFormRef" />
<!-- 修改用户标签弹窗 -->
<UserMemberTagForm ref="updateMemberTagFormRef" @success="getList" />
<!-- 修改用户设置 -->
<UserSettingForm ref="userSettingFormRef" @success="getList" />
</template>
<script lang="ts" setup>
import { dateFormatter } from '@/utils/formatTime'
import { formatDate } from '@/utils/formatTime'
import * as UserApi from '@/api/member/user'
import { DICT_TYPE } from '@/utils/dict'
import UserForm from './UserForm.vue'
@@ -151,6 +195,8 @@ import UserMemberTagForm from "./components/UserMemberTagForm.vue"
import { CouponSendForm } from '@/views/mall/promotion/coupon/components'
import { checkPermi } from '@/utils/permission'
import * as RecentCfgApi from '@/api/member/recent-cfg'
defineOptions({ name: 'MemberUser' })
const message = useMessage() // 消息弹窗
@@ -174,8 +220,27 @@ const updateLevelFormRef = ref() // 修改会员等级表单
const updatePointFormRef = ref() // 修改会员积分表单
const UpdateBalanceFormRef = ref() // 修改用户余额表单
const updateMemberTagFormRef = ref() // 修改用户标签表单
const userSettingFormRef = ref() // 修改用户设置表单
const selectedIds = ref<number[]>([]) // 表格的选中 ID 数组
// 修改朋友圈配置
const memberCfgChange = async (row: any) => {
loading.value = true
try {
const _params = {
...row.recentCfg,
memberId: row.id
}
await RecentCfgApi.getRecentPage(_params)
message.success("操作成功")
getList()
} catch (error) {
console.log("|修改朋友圈配置|,意外的错误", error);
} finally {
loading.value = false
}
}
/** 查询列表 */
const getList = async () => {
loading.value = true
@@ -245,6 +310,9 @@ const handleCommand = (command: string, row: UserApi.UserVO) => {
case 'handleUpdateMemberTag':
updateMemberTagFormRef.value.open(row.id)
break
case 'handleUpdateMemberCfg':
userSettingFormRef.value.open(row.id)
break
default:
break
}
@@ -255,3 +323,25 @@ onMounted(() => {
getList()
})
</script>
<style lang="scss" scoped>
.switch-cell {
display: flex;
justify-content: flex-start;
align-items: center;
span {
display: inline-block;
text-align: left;
font-size: 12px;
}
span:first-child {
width: 70px;
}
span:last-child {
flex: 1;
}
}
</style>