完善功能

This commit is contained in:
wangxiaowei
2026-03-28 19:05:07 +08:00
parent 7948cbc6aa
commit 9569903e0a
2 changed files with 103 additions and 23 deletions

View File

@ -24,3 +24,13 @@ export function apiTeamasterUserDelete(params: any) {
export function apiTeamasterUserDetail(params: any) {
return request.get({ url: '/teamaster_user/detail', params })
}
// 专属圈子
export function apiLabel(params: any) {
return request.get({ url: '/teamasterReal/label', params })
}
// 经纪人列表
export function apiBrokerList() {
return request.post({ url: '/brokerAdmin/brokerList' })
}

View File

@ -6,17 +6,38 @@
<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="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="broker_user_id">
<el-select v-model="formData.broker_user_id" placeholder="请选择" style="width: 240px">
<el-option v-for="item in brokerOptions" :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="请输入体重" />
@ -24,15 +45,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>
@ -69,9 +87,12 @@
: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="请选择">
<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="请输入地址" />
</el-form-item>
@ -79,7 +100,14 @@
<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="请输入纬度" />
<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="请选择">
@ -100,11 +128,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, apiBrokerList } 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({
@ -118,6 +147,29 @@ 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 }))
} catch (e) {
options.value = []
}
}
getLabel()
// 获取经纪人列表
const brokerOptions = ref<{ label: string; value: string }[]>([])
const getBrokerList = async () => {
try {
const res = await apiBrokerList()
brokerOptions.value = res.map((item: any) => ({ label: item.name, value: item.id }))
} catch (e) {
brokerOptions.value = []
}
}
getBrokerList()
// 弹窗标题
const popupTitle = computed(() => {
@ -128,9 +180,9 @@ const popupTitle = computed(() => {
const formData = reactive({
id: '',
avatar: '',
image: '',
nickname: '',
name: '',
image: '',
both: '',
weight: '',
height: '',
@ -146,11 +198,18 @@ const formData = reactive({
sold: '',
server_type: '',
address_id: 0,
city_id: '',
address: '',
longitude: '',
latitude: '',
disable: '',
state: ''
state: '',
user_money: '',
license_img: '',
information: '',
health_certificate: '',
label_id: '',
broker_user_id: '',
})
// 城市列表
@ -166,11 +225,8 @@ onMounted(async () => {
})
// 表单验证
const formRules = reactive<any>({
})
const formRules = reactive<any>({})
// 获取详情
@ -184,6 +240,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>) => {
@ -200,7 +264,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)