|
@@ -8,9 +8,9 @@
|
|
v-loading="formLoading"
|
|
v-loading="formLoading"
|
|
>
|
|
>
|
|
<el-form-item label="手机号" prop="mobile">
|
|
<el-form-item label="手机号" prop="mobile">
|
|
- <el-input v-model="formData.mobile" placeholder="请输入手机号" />
|
|
|
|
|
|
+ <el-input v-model="formData.mobile" placeholder="请输入手机号"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="状态" prop="status">
|
|
|
|
|
|
+ <!-- <el-form-item label="状态" prop="status">
|
|
<el-radio-group v-model="formData.status">
|
|
<el-radio-group v-model="formData.status">
|
|
<el-radio
|
|
<el-radio
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
|
v-for="dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
|
|
@@ -20,15 +20,15 @@
|
|
{{ dict.label }}
|
|
{{ dict.label }}
|
|
</el-radio>
|
|
</el-radio>
|
|
</el-radio-group>
|
|
</el-radio-group>
|
|
- </el-form-item>
|
|
|
|
|
|
+ </el-form-item> -->
|
|
<el-form-item label="用户昵称" prop="nickname">
|
|
<el-form-item label="用户昵称" prop="nickname">
|
|
- <el-input v-model="formData.nickname" placeholder="请输入用户昵称" />
|
|
|
|
|
|
+ <el-input v-model="formData.nickname" placeholder="请输入用户昵称"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="头像" prop="avatar">
|
|
|
|
|
|
+ <!-- <el-form-item label="头像" prop="avatar">
|
|
<UploadImg v-model="formData.avatar" :limit="1" :is-show-tip="false" />
|
|
<UploadImg v-model="formData.avatar" :limit="1" :is-show-tip="false" />
|
|
- </el-form-item>
|
|
|
|
|
|
+ </el-form-item> -->
|
|
<el-form-item label="真实名字" prop="name">
|
|
<el-form-item label="真实名字" prop="name">
|
|
- <el-input v-model="formData.name" placeholder="请输入真实名字" />
|
|
|
|
|
|
+ <el-input v-model="formData.name" placeholder="请输入真实名字"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="用户性别" prop="sex">
|
|
<el-form-item label="用户性别" prop="sex">
|
|
<el-radio-group v-model="formData.sex">
|
|
<el-radio-group v-model="formData.sex">
|
|
@@ -44,6 +44,7 @@
|
|
<el-form-item label="出生日期" prop="birthday">
|
|
<el-form-item label="出生日期" prop="birthday">
|
|
<el-date-picker
|
|
<el-date-picker
|
|
v-model="formData.birthday"
|
|
v-model="formData.birthday"
|
|
|
|
+ style="width:100%;"
|
|
type="date"
|
|
type="date"
|
|
value-format="x"
|
|
value-format="x"
|
|
placeholder="选择出生日期"
|
|
placeholder="选择出生日期"
|
|
@@ -58,13 +59,28 @@
|
|
/>
|
|
/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
<el-form-item label="用户标签" prop="tagIds">
|
|
<el-form-item label="用户标签" prop="tagIds">
|
|
- <MemberTagSelect v-model="formData.tagIds" show-add />
|
|
|
|
|
|
+ <MemberTagSelect style="width:100%;" v-model="formData.tagIds"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="用户分组" prop="groupId">
|
|
|
|
- <MemberGroupSelect v-model="formData.groupId" />
|
|
|
|
|
|
+ <el-form-item label="用户套餐" prop="comboId">
|
|
|
|
+ <el-select
|
|
|
|
+ v-model="formData.comboId"
|
|
|
|
+ placeholder="Select"
|
|
|
|
+ size="large"
|
|
|
|
+ style="width: 240px"
|
|
|
|
+ >
|
|
|
|
+ <el-option
|
|
|
|
+ v-for="item in comboData"
|
|
|
|
+ :key="item.id"
|
|
|
|
+ :label="item.name"
|
|
|
|
+ :value="item.id"
|
|
|
|
+ />
|
|
|
|
+ </el-select>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
+ <!-- <el-form-item label="用户分组" prop="groupId">
|
|
|
|
+ <MemberGroupSelect v-model="formData.groupId" />
|
|
|
|
+ </el-form-item> -->
|
|
<el-form-item label="会员备注" prop="mark">
|
|
<el-form-item label="会员备注" prop="mark">
|
|
- <el-input type="textarea" v-model="formData.mark" placeholder="请输入会员备注" />
|
|
|
|
|
|
+ <el-input type="textarea" v-model="formData.mark" placeholder="请输入会员备注"/>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
<template #footer>
|
|
<template #footer>
|
|
@@ -74,14 +90,14 @@
|
|
</Dialog>
|
|
</Dialog>
|
|
</template>
|
|
</template>
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
|
|
|
|
|
|
+import {DICT_TYPE, getIntDictOptions} from '@/utils/dict'
|
|
import * as UserApi from '@/api/member/user'
|
|
import * as UserApi from '@/api/member/user'
|
|
import * as AreaApi from '@/api/system/area'
|
|
import * as AreaApi from '@/api/system/area'
|
|
-import { defaultProps } from '@/utils/tree'
|
|
|
|
|
|
+import {defaultProps} from '@/utils/tree'
|
|
import MemberTagSelect from '@/views/member/tag/components/MemberTagSelect.vue'
|
|
import MemberTagSelect from '@/views/member/tag/components/MemberTagSelect.vue'
|
|
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
|
import MemberGroupSelect from '@/views/member/group/components/MemberGroupSelect.vue'
|
|
|
|
|
|
-const { t } = useI18n() // 国际化
|
|
|
|
|
|
+const {t} = useI18n() // 国际化
|
|
const message = useMessage() // 消息弹窗
|
|
const message = useMessage() // 消息弹窗
|
|
|
|
|
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
|
const dialogVisible = ref(false) // 弹窗的是否展示
|
|
@@ -92,30 +108,81 @@ const formData = ref({
|
|
id: undefined,
|
|
id: undefined,
|
|
mobile: undefined,
|
|
mobile: undefined,
|
|
password: undefined,
|
|
password: undefined,
|
|
- status: undefined,
|
|
|
|
|
|
+ status: 0,
|
|
nickname: undefined,
|
|
nickname: undefined,
|
|
- avatar: undefined,
|
|
|
|
name: undefined,
|
|
name: undefined,
|
|
sex: undefined,
|
|
sex: undefined,
|
|
areaId: undefined,
|
|
areaId: undefined,
|
|
birthday: undefined,
|
|
birthday: undefined,
|
|
mark: undefined,
|
|
mark: undefined,
|
|
- tagIds: [],
|
|
|
|
- groupId: undefined
|
|
|
|
|
|
+ comboId: undefined,
|
|
|
|
+ tagIds: []
|
|
})
|
|
})
|
|
const formRules = reactive({
|
|
const formRules = reactive({
|
|
- mobile: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
|
|
|
|
- status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
|
|
|
|
|
|
+ mobile: [{required: true, message: '手机号不能为空', trigger: 'blur'}],
|
|
|
|
+ name: [{required: true, message: '真实姓名不能为空', trigger: 'blur'}],
|
|
|
|
+ nickname: [{required: true, message: '昵称不能为空', trigger: 'blur'}],
|
|
|
|
+ sex: [{required: true, message: '性别不能为空', trigger: 'blur'}],
|
|
|
|
+ tagIds: [{required: true, message: '用户标签', trigger: 'blur'}],
|
|
|
|
+ comboId: [{required: true, message: '用户套餐', trigger: 'blur'}]
|
|
})
|
|
})
|
|
const formRef = ref() // 表单 Ref
|
|
const formRef = ref() // 表单 Ref
|
|
const areaList = ref([]) // 地区列表
|
|
const areaList = ref([]) // 地区列表
|
|
|
|
+const comboData = ref([])
|
|
|
|
+
|
|
|
|
+// 随机生成昵称
|
|
|
|
+function generateRandomNickname() {
|
|
|
|
+ const words = ['星空', '梦想', '飞翔', '晨曦', '夜影', '流星', '彩虹', '星辰', '海洋', '火焰'];
|
|
|
|
+ const adjectives = ['快乐', '自由', '勇敢', '智慧', '温柔', '神秘', '阳光', '梦幻', '浪漫', '宁静'];
|
|
|
|
+ const randomWord = words[Math.floor(Math.random() * words.length)];
|
|
|
|
+ const randomAdjective = adjectives[Math.floor(Math.random() * adjectives.length)];
|
|
|
|
+ return `${randomAdjective}${randomWord}`;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 随机生成姓名
|
|
|
|
+function generateRandomName() {
|
|
|
|
+ const firstNames = ['张', '王', '李', '赵', '陈', '杨', '黄', '刘', '朱', '林'];
|
|
|
|
+ const lastNames = ['伟', '芳', '丽', '强', '华', '明', '涛', '杰', '敏', '娜'];
|
|
|
|
+ const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];
|
|
|
|
+ const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
|
|
|
|
+ return `${firstName}${lastName}`;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 随机生成手机号
|
|
|
|
+function generateRandomPhoneNumber() {
|
|
|
|
+ let result = '1';
|
|
|
|
+ for (let i = 0; i < 10; i++) {
|
|
|
|
+ result += Math.floor(Math.random() * 10);
|
|
|
|
+ }
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 随机生成性别
|
|
|
|
+function generateRandomGender() {
|
|
|
|
+ const genders = [1, 2];
|
|
|
|
+ return genders[Math.floor(Math.random() * genders.length)];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 随机生成标签
|
|
|
|
+function generateRandomTag() {
|
|
|
|
+ const tags = [1,2];
|
|
|
|
+ return tags[Math.floor(Math.random() * tags.length)];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// 随机生成套餐
|
|
|
|
+function generateRandomCombo() {
|
|
|
|
+ const combos = [3, 4, 5];
|
|
|
|
+ return combos[Math.floor(Math.random() * combos.length)];
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
/** 打开弹窗 */
|
|
/** 打开弹窗 */
|
|
const open = async (type: string, id?: number) => {
|
|
const open = async (type: string, id?: number) => {
|
|
dialogVisible.value = true
|
|
dialogVisible.value = true
|
|
- dialogTitle.value = t('action.' + type)
|
|
|
|
|
|
+ dialogTitle.value = id ? '编辑' : '新增'
|
|
formType.value = type
|
|
formType.value = type
|
|
resetForm()
|
|
resetForm()
|
|
|
|
+ comboData.value = await UserApi.getComboList()
|
|
// 修改时,设置数据
|
|
// 修改时,设置数据
|
|
if (id) {
|
|
if (id) {
|
|
formLoading.value = true
|
|
formLoading.value = true
|
|
@@ -127,8 +194,24 @@ const open = async (type: string, id?: number) => {
|
|
}
|
|
}
|
|
// 获得地区列表
|
|
// 获得地区列表
|
|
areaList.value = await AreaApi.getAreaTree()
|
|
areaList.value = await AreaApi.getAreaTree()
|
|
|
|
+
|
|
|
|
+ formData.value = {
|
|
|
|
+ id: undefined,
|
|
|
|
+ mobile: generateRandomPhoneNumber(),
|
|
|
|
+ password: undefined,
|
|
|
|
+ status: 0,
|
|
|
|
+ nickname: generateRandomNickname(),
|
|
|
|
+ name: generateRandomName(),
|
|
|
|
+ sex: generateRandomGender(),
|
|
|
|
+ areaId: undefined,
|
|
|
|
+ birthday: undefined,
|
|
|
|
+ mark: 0,
|
|
|
|
+ comboId: generateRandomCombo(),
|
|
|
|
+ tagIds: [generateRandomTag()]
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
|
|
|
|
|
|
+defineExpose({open}) // 提供 open 方法,用于打开弹窗
|
|
|
|
|
|
/** 提交表单 */
|
|
/** 提交表单 */
|
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
|
@@ -143,7 +226,7 @@ const submitForm = async () => {
|
|
const data = formData.value as unknown as UserApi.UserVO
|
|
const data = formData.value as unknown as UserApi.UserVO
|
|
if (formType.value === 'create') {
|
|
if (formType.value === 'create') {
|
|
// 说明:目前暂时没有新增操作。如果自己业务需要,可以进行扩展
|
|
// 说明:目前暂时没有新增操作。如果自己业务需要,可以进行扩展
|
|
- // await UserApi.createUser(data)
|
|
|
|
|
|
+ await UserApi.createUser(data)
|
|
message.success(t('common.createSuccess'))
|
|
message.success(t('common.createSuccess'))
|
|
} else {
|
|
} else {
|
|
await UserApi.updateUser(data)
|
|
await UserApi.updateUser(data)
|
|
@@ -157,22 +240,22 @@ const submitForm = async () => {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+
|
|
/** 重置表单 */
|
|
/** 重置表单 */
|
|
const resetForm = () => {
|
|
const resetForm = () => {
|
|
formData.value = {
|
|
formData.value = {
|
|
id: undefined,
|
|
id: undefined,
|
|
mobile: undefined,
|
|
mobile: undefined,
|
|
password: undefined,
|
|
password: undefined,
|
|
- status: undefined,
|
|
|
|
|
|
+ status: 0,
|
|
nickname: undefined,
|
|
nickname: undefined,
|
|
- avatar: undefined,
|
|
|
|
name: undefined,
|
|
name: undefined,
|
|
sex: undefined,
|
|
sex: undefined,
|
|
areaId: undefined,
|
|
areaId: undefined,
|
|
birthday: undefined,
|
|
birthday: undefined,
|
|
mark: undefined,
|
|
mark: undefined,
|
|
- tagIds: [],
|
|
|
|
- groupId: undefined
|
|
|
|
|
|
+ comboId: undefined,
|
|
|
|
+ tagIds: []
|
|
}
|
|
}
|
|
formRef.value?.resetFields()
|
|
formRef.value?.resetFields()
|
|
}
|
|
}
|