编辑ai人设,新消息提醒

This commit is contained in:
2025-09-11 16:46:12 +08:00
parent b2bccb622a
commit 515cbab7c3
9 changed files with 504 additions and 35 deletions

View File

@@ -0,0 +1,122 @@
<template>
<el-dialog :model-value="modelValue" :title="title" :width="width" :close-on-click-modal="false" append-to-body
@open="onOpen" @close="onClose">
<el-form ref="formRef" :model="form" :rules="rules" label-width="90px">
<el-form-item label="经纪人" prop="agentName">
<el-input v-model="form.agentName" placeholder="请输入经纪人名字" maxlength="50" show-word-limit clearable />
</el-form-item>
<el-form-item label="公会" prop="guildName">
<el-input v-model="form.guildName" placeholder="请输入公会名字" maxlength="50" show-word-limit clearable />
</el-form-item>
<!-- 自由输入的联系工具可不填 -->
<el-form-item label="联系工具" prop="contactTool">
<el-input v-model="form.contactTool" placeholder="例如:微信 / Telegram / 邮箱 / WhatsApp / 其它(可不填)"
maxlength="30" show-word-limit clearable />
</el-form-item>
<!-- 联系方式仅当联系工具已填写时才必填 -->
<el-form-item label="联系方式" prop="contact">
<el-input v-model="form.contact" placeholder="请输入联系方式(当填写了联系工具时必填)" maxlength="100" show-word-limit
clearable />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="onCancel"> </el-button>
<el-button type="primary" :loading="submitting" @click="onConfirm"> </el-button>
</template>
</el-dialog>
</template>
<script setup>
import { reactive, ref, watch } from 'vue'
const props = defineProps({
modelValue: { type: Boolean, default: false },
title: { type: String, default: '设置经纪信息' },
width: { type: [String, Number], default: '480px' },
// 初始值:新增 contactTool 字段(可为空)
model: {
type: Object,
default: () => ({
agentName: '',
guildName: '',
contactTool: '',
contact: ''
})
}
})
const emits = defineEmits(['update:modelValue', 'save', 'open'])
const formRef = ref()
const submitting = ref(false)
const form = reactive({
agentName: '',
guildName: '',
contactTool: '',
contact: ''
})
function syncFromProps() {
form.agentName = props.model?.agentName ?? ''
form.guildName = props.model?.guildName ?? ''
form.contactTool = props.model?.contactTool ?? ''
form.contact = props.model?.contact ?? ''
}
watch(() => props.modelValue, v => { if (v) syncFromProps() })
function onOpen() {
syncFromProps()
emits('open')
}
function onClose() { emits('update:modelValue', false) }
function onCancel() { onClose() }
const rules = {
agentName: [{ required: true, message: '请输入经纪人名字', trigger: 'blur' }],
guildName: [{ required: true, message: '请输入公会名字', trigger: 'blur' }],
// contactTool 不必填,不加 required
contact: [
{
validator: (rule, value, cb) => {
const tool = (form.contactTool || '').trim()
const contact = (value || '').trim()
if (tool && !contact) {
return cb(new Error('已填写联系工具时,联系方式为必填'))
}
cb()
},
trigger: ['blur', 'change']
}
]
}
async function onConfirm() {
try {
submitting.value = true
await formRef.value?.validate()
// 提交前做一次 trim
const payload = {
agentName: form.agentName.trim(),
guildName: form.guildName.trim(),
contactTool: form.contactTool.trim(),
contact: form.contact.trim()
}
emits('save', payload)
onClose()
} finally {
submitting.value = false
}
}
</script>
<style scoped>
:deep(.el-dialog__body) {
padding-top: 12px;
}
</style>