shinnosuke
2026-08-06 c9002290ec5b15be8bf950d6243958a6abe0d0be
fix(admin): 校验政策发布必填项 (bug #24055)
3个文件已修改
16 ■■■■■ 已修改文件
talent-card-admin/src/views/TalentPolicyEditView.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-admin/src/views/TalentPolicyPublishView.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/admin/PolicyArticleRequest.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
talent-card-admin/src/views/TalentPolicyEditView.vue
@@ -9,7 +9,7 @@
function formatTime(value?: string) { return value ? value.replace('T', ' ').slice(0, 19) : '-' }
const createdAt = ref('-'); const updatedAt = ref('-')
async function load() { loading.value = true; try { const item = await getAdminPolicyDetail(String(route.params.id)); form.title = item.title; form.subtitle = item.subtitle || ''; form.author = item.author || ''; form.source = item.source || ''; form.content = item.content || ''; form.coverUrl = item.coverUrl || ''; form.isTop = Boolean(item.isTop); form.sortNo = Number(item.sortNo || 0); form.status = Number(item.status ?? 0); createdAt.value = formatTime(item.createdAt); updatedAt.value = formatTime(item.updatedAt) } finally { loading.value = false } }
async function save() { if (!form.title.trim()) { ElMessage.warning('请填写政策标题'); return }; await updateAdminPolicy(String(route.params.id), { ...form, title: form.title.trim(), subtitle: form.subtitle.trim(), author: form.author.trim(), source: form.source.trim(), coverUrl: form.coverUrl.trim() }); ElMessage.success('政策已保存'); router.push('/talent-policy-management') }
async function save() { if (!form.title.trim()) { ElMessage.warning('请填写政策标题'); return }; if (!form.subtitle.trim()) { ElMessage.warning('请填写政策标签'); return }; if (!form.content.trim()) { ElMessage.warning('请填写政策内容'); return }; if (!form.coverUrl.trim()) { ElMessage.warning('请填写封面图地址'); return }; if (!Number.isInteger(form.sortNo) || form.sortNo < 0) { ElMessage.warning('请填写有效的排序'); return }; await updateAdminPolicy(String(route.params.id), { ...form, title: form.title.trim(), subtitle: form.subtitle.trim(), author: form.author.trim(), source: form.source.trim(), coverUrl: form.coverUrl.trim() }); ElMessage.success('政策已保存'); router.push('/talent-policy-management') }
onMounted(() => void load())
</script>
<template>
talent-card-admin/src/views/TalentPolicyPublishView.vue
@@ -8,6 +8,10 @@
const form = reactive({ title: '', subtitle: '', author: '', source: '', content: '', coverUrl: '', isTop: false, sortNo: 0, status: 1 })
async function save() {
  if (!form.title.trim()) { ElMessage.warning('请填写政策标题'); return }
  if (!form.subtitle.trim()) { ElMessage.warning('请填写政策标签'); return }
  if (!form.content.trim()) { ElMessage.warning('请填写政策内容'); return }
  if (!form.coverUrl.trim()) { ElMessage.warning('请填写封面图地址'); return }
  if (!Number.isInteger(form.sortNo) || form.sortNo < 0) { ElMessage.warning('请填写有效的排序'); return }
  await createAdminPolicy({ ...form, title: form.title.trim(), subtitle: form.subtitle.trim(), author: form.author.trim(), source: form.source.trim(), coverUrl: form.coverUrl.trim() })
  ElMessage.success(form.status === 1 ? '政策已发布' : '草稿已保存')
  router.push('/talent-policy-management')
talent-card-server/src/main/java/com/talentcard/server/business/admin/PolicyArticleRequest.java
@@ -3,17 +3,19 @@
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
public record PolicyArticleRequest(
        @NotBlank @Size(max = 255) String title,
        @Size(max = 255) String subtitle,
        @Size(max = 500) String coverUrl,
        @NotBlank @Size(max = 255) String subtitle,
        @NotBlank @Size(max = 500) String coverUrl,
        @Size(max = 64) String author,
        @Size(max = 128) String source,
        String content,
        @NotBlank String content,
        Boolean isTop,
        Integer sortNo,
        @NotNull @Min(0) Integer sortNo,
        @Min(0) @Max(2) Integer status
) {
}