完善功能

This commit is contained in:
wangxiaowei
2026-03-28 16:41:42 +08:00
parent 899112ccdb
commit de09c881cc
17 changed files with 1045 additions and 95 deletions

View File

@ -6,20 +6,34 @@
<el-form-item label="头像" prop="avatar">
<material-picker v-model="formData.avatar" :limit="1" />
</el-form-item>
<el-form-item label="用户名称" prop="nickname">
<el-input v-model="formData.nickname" clearable placeholder="请输入用户名称" />
</el-form-item>
<el-form-item label="用户昵称" prop="name">
<el-input v-model="formData.name" clearable placeholder="请输入用户昵称" />
</el-form-item>
<el-form-item label="账户余额" prop="user_money">
<el-input v-model="formData.user_money" disabled clearable />
</el-form-item>
<el-form-item label="本人照片" prop="image">
<material-picker v-model="formData.image" :limit="1" />
</el-form-item>
<el-form-item label="茶艺师资格证书" prop="license_img">
<material-picker v-model="formData.license_img" :limit="1" />
</el-form-item>
<el-form-item label="个人展示" prop="information">
<material-picker v-model="formData.information" :limit="9" />
</el-form-item>
<el-form-item label="健康证" prop="health_certificate">
<material-picker v-model="formData.health_certificate" :limit="1" />
</el-form-item>
<el-form-item label="专属圈子" prop="label_id">
<el-select v-model="formData.label_id" multiple placeholder="请选择" style="width: 240px">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="名称" prop="nickname">
<el-input v-model="formData.nickname" clearable placeholder="请输入名称" />
</el-form-item>
<el-form-item label="昵称" prop="name">
<el-input v-model="formData.name" clearable placeholder="请输入昵称" />
</el-form-item>
<el-form-item label="出生日期" prop="both">
<el-date-picker v-model="formData.both" type="date" placeholder="请选择" />
<el-date-picker v-model="formData.both" type="date" placeholder="请选择" format="YYYY-MM-DD"
value-format="YYYY-MM-DD" />
</el-form-item>
<el-form-item label="体重" prop="weight">
<el-input v-model="formData.weight" clearable placeholder="请输入体重" />
@ -27,15 +41,12 @@
<el-form-item label="身高" prop="height">
<el-input v-model="formData.height" clearable placeholder="请输入身高" />
</el-form-item>
<el-form-item label="性别" prop="height">
<el-form-item label="性别" prop="sex">
<el-select v-model="formData.sex" clearable placeholder="请选择">
<el-option label="女" :value="2"></el-option>
<el-option label="男" :value="1"></el-option>
</el-select>
</el-form-item>
<el-form-item label="兴趣爱好" prop="hobby_introduce">
<editor class="flex-1" v-model="formData.hobby_introduce" :height="300" />
</el-form-item>
<el-form-item label="用户账号" prop="account">
<el-input v-model="formData.account" clearable placeholder="请输入用户账号" />
</el-form-item>
@ -72,24 +83,28 @@
:value="parseInt(item.value)" />
</el-select>
</el-form-item>
<!-- <el-form-item label="服务区域" prop="address_id">
<el-input v-model="formData.address_id" clearable placeholder="请输入服务区域" />
</el-form-item> -->
<el-form-item label="所属城市" prop="city_id">
<el-select v-model="formData.city_id" clearable placeholder="请选择" disabled>
<el-select v-model="formData.city_id" clearable placeholder="请选择">
<el-option :label="item.name" :value="item.id" v-for="item in cityList"
:key="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="地址" prop="longitude">
<el-input v-model="formData.address" clearable placeholder="请输入地址" disabled />
<el-input v-model="formData.address" clearable placeholder="请输入地址" />
</el-form-item>
<!-- <el-form-item label="经度" prop="longitude">
<el-form-item label="经度" prop="longitude">
<el-input v-model="formData.longitude" clearable placeholder="请输入经度" />
</el-form-item>
<el-form-item label="纬度" prop="latitude">
<el-input v-model="formData.latitude" clearable placeholder="请输入纬度" />
</el-form-item> -->
<div class="flex items-center w-full">
<el-input v-model="formData.latitude" clearable placeholder="请输入纬度" class="flex-1 min-w-0" />
<a href="http://jingweidu.757dy.com/" target="open" class="ml-2 flex items-center">
<el-icon>
<Location />
</el-icon>
</a>
</div>
</el-form-item>
<el-form-item label="状态" prop="state">
<el-select class="flex-1" v-model="formData.state" clearable placeholder="请选择">
<el-option label="可约" :value="0"></el-option>
@ -109,11 +124,12 @@
<script lang="ts" setup name="teamasterUserEdit">
import Popup from '@/components/popup/index.vue'
import { apiTeamasterUserAdd, apiTeamasterUserEdit, apiTeamasterUserDetail } from '@/api/teamaster_user'
import { apiTeamasterUserAdd, apiTeamasterUserEdit, apiTeamasterUserDetail, apiLabel } from '@/api/teamaster_user'
import { timeFormat, removeImageUrlPrefix, normalizeImageUrl } from '@/utils/util'
import type { PropType } from 'vue'
import { apiTeaStoreCityLists } from '@/api/tea_store'
import type { FormInstance } from 'element-plus'
import { isArray } from 'lodash'
defineProps({
@ -127,6 +143,19 @@ const formRef = shallowRef<FormInstance>()
const popupRef = shallowRef<InstanceType<typeof Popup>>()
const mode = ref('add')
// 获取专属圈子
const options = ref<{ label: string; value: string }[]>([])
const getLabel = async () => {
try {
const res = await apiLabel({})
options.value = res.map((item: any) => ({ label: item.label_name, value: item.id }))
console.log("🚀 ~ getLabel ~ options.value:", options.value)
} catch (e) {
options.value = []
}
}
getLabel()
// 弹窗标题
const popupTitle = computed(() => {
@ -137,9 +166,9 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
avatar: '',
image: '',
nickname: '',
name: '',
image: '',
both: '',
weight: '',
height: '',
@ -161,7 +190,11 @@ const formData = reactive({
latitude: '',
disable: '',
state: '',
user_money: ''
user_money: '',
license_img: '',
information: '',
health_certificate: '',
label_id: '',
})
// 城市列表
@ -195,6 +228,14 @@ const setFormData = async (data: Record<any, any>) => {
//@ts-ignore
// formData.avatar = normalizeImageUrl(formData.avatar)
formData.label_id = formData.label_id ? formData.label_id.split(',') : []
if (isArray(formData.label_id)) {
//@ts-ignore
formData.label_id = formData.label_id.map((item: string) => Number(item))
}
console.log("🚀 ~ setFormData ~ formData.label_id:", formData.label_id)
//@ts-ignore
formData.information = formData.information ? formData.information.split(',') : ''
}
const getDetail = async (row: Record<string, any>) => {
@ -211,7 +252,13 @@ const handleSubmit = async () => {
let data = { ...formData, }
data.avatar = removeImageUrlPrefix(data.avatar)
data.image = removeImageUrlPrefix(data.image)
data.license_img = removeImageUrlPrefix(data.license_img)
data.information = removeImageUrlPrefix(data.information)
data.information = Array.isArray(data.information) ? data.information.join(',') : ''
data.health_certificate = removeImageUrlPrefix(data.health_certificate)
data.label_id = Array.isArray(data.label_id) ? data.label_id.join(',') : ''
// console.log("🚀 ~ handleSubmit ~ data:", data)
// return
mode.value == 'edit'
? await apiTeamasterUserEdit(data)
: await apiTeamasterUserAdd(data)