feat(im): 修管理端 3 处:群消息 atUserNicknames 类型允许 null、移除前端无效的「消息内容」查询入口、表情包宽高加表单校验

im
YunaiV 2026-05-21 15:10:34 +08:00
parent 7a236b4378
commit 73aa578c9b
4 changed files with 40 additions and 31 deletions

View File

@ -11,7 +11,8 @@ export interface ImManagerGroupMessageVO {
content: string
status: number
atUserIds?: number[]
atUserNicknames?: string[]
// 与 atUserIds 同长度;后端对找不到 / 已删除的成员返回 nullUI 用 `?.[idx] || userId` 回退到 userId 渲染
atUserNicknames?: (string | null)[]
receiptStatus?: number
sendTime: Date
createTime: Date

View File

@ -19,7 +19,8 @@
class="w-1/1"
/>
</el-form-item>
<el-form-item label="尺寸">
<!-- 尺寸拆两个 form-item prop / rules 各自绑定避免单 form-item rules 不生效 -->
<el-form-item label="宽度" prop="width">
<el-input-number
v-model="formData.width"
:min="1"
@ -27,18 +28,19 @@
controls-position="right"
class="!w-1/3"
/>
<span class="mx-2 text-[var(--el-text-color-secondary)]">×</span>
<el-input-number
v-model="formData.height"
:min="1"
:max="2048"
controls-position="right"
class="!w-1/3"
/>
<span class="ml-2 text-12px text-[var(--el-text-color-placeholder)]">
上传后自动探测可手动调整1 ~ 2048 像素
</span>
</el-form-item>
<el-form-item label="高度" prop="height">
<el-input-number
v-model="formData.height"
:min="1"
:max="2048"
controls-position="right"
class="!w-1/3"
/>
</el-form-item>
<el-form-item label="排序" prop="sort">
<el-input-number
v-model="formData.sort"
@ -99,7 +101,31 @@ const formData = ref({
})
const formRules = reactive({
url: [{ required: true, message: '表情图不能为空', trigger: 'change' }],
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }]
status: [{ required: true, message: '状态不能为空', trigger: 'blur' }],
// 1-2048 submit
// rule transform null/undefined async-validator required
width: [
{ required: true, message: '宽度不能为空', trigger: 'change' },
{
type: 'integer',
min: 1,
max: 2048,
message: '宽度需在 1 - 2048 像素之间',
trigger: 'change',
transform: (value) => (value == null ? value : Number(value))
}
],
height: [
{ required: true, message: '高度不能为空', trigger: 'change' },
{
type: 'integer',
min: 1,
max: 2048,
message: '高度需在 1 - 2048 像素之间',
trigger: 'change',
transform: (value) => (value == null ? value : Number(value))
}
]
})
const formRef = ref() // Ref

View File

@ -33,15 +33,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="消息内容" prop="content">
<el-input
v-model="queryParams.content"
placeholder="请输入消息内容"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<!-- 消息内容搜索入口暂时移除后端 page 接口没有 content 字段留着会误导管理员后端补上后再恢复 -->
<el-form-item label="发送时间" prop="sendTime">
<el-date-picker
v-model="queryParams.sendTime"
@ -184,7 +176,6 @@ const queryParams = reactive({
groupId: undefined as number | undefined,
senderId: undefined as number | undefined,
type: undefined as number | undefined,
content: undefined as string | undefined,
sendTime: [] as string[]
})
const queryFormRef = ref() //

View File

@ -37,15 +37,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="消息内容" prop="content">
<el-input
v-model="queryParams.content"
placeholder="请输入消息内容"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<!-- 消息内容搜索入口暂时移除后端 page 接口没有 content 字段留着会误导管理员后端补上后再恢复 -->
<el-form-item label="发送时间" prop="sendTime">
<el-date-picker
v-model="queryParams.sendTime"
@ -159,7 +151,6 @@ const queryParams = reactive({
senderId: undefined as number | undefined,
receiverId: undefined as number | undefined,
type: undefined as number | undefined,
content: undefined as string | undefined,
sendTime: [] as string[]
})
const queryFormRef = ref() //