feat: 任务标题改为SPU+品牌+平台,SPU输入限制大写字母和数字

This commit is contained in:
Your Name 2026-01-06 22:50:18 +08:00
parent f801ffefb8
commit a6d620d114
3 changed files with 36 additions and 45 deletions

View File

@ -657,11 +657,11 @@ public class TaskApprovalService {
if (allowedDeptIds != null && !allowedDeptIds.isEmpty()) {
String[] deptIds = allowedDeptIds.split(",");
if (deptIds.length > 0) {
Long deptId = Long.parseLong(deptIds[0].trim());
Department dept = departmentMapper.selectById(deptId);
if (dept != null && dept.getLeaderId() != null) {
return dept.getLeaderId();
if (deptIds.length > 0) {
Long deptId = Long.parseLong(deptIds[0].trim());
Department dept = departmentMapper.selectById(deptId);
if (dept != null && dept.getLeaderId() != null) {
return dept.getLeaderId();
}
}
}

View File

@ -157,17 +157,17 @@ public class TaskItemService {
}
if (allowedDeptIds != null && !allowedDeptIds.isEmpty()) {
// 检查用户部门是否在允许列表中
// 检查用户部门是否在允许列表中
String[] allowedIds = allowedDeptIds.split(",");
boolean isAllowed = false;
for (String allowedId : allowedIds) {
if (allowedId.trim().equals(String.valueOf(user.getDeptId()))) {
isAllowed = true;
break;
}
boolean isAllowed = false;
for (String allowedId : allowedIds) {
if (allowedId.trim().equals(String.valueOf(user.getDeptId()))) {
isAllowed = true;
break;
}
if (!isAllowed) {
throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务");
}
if (!isAllowed) {
throw new BusinessException(ResultCode.FORBIDDEN, "您的部门无权接收此类型的任务");
}
}
}

View File

@ -52,7 +52,7 @@
/>
<div class="title-auto-tip">
<Icon name="info" size="xs" style="margin-right: 4px;" />
<span>标题将根据SPU信息、平台、品牌、任务子类型、需求类型自动生成</span>
<span>标题将根据SPU、品牌、平台自动生成</span>
</div>
</a-form-item>
@ -352,11 +352,11 @@
<!-- SPU信息 -->
<a-form-item label="SPU信息" name="spuInfo">
<a-textarea
<a-input
v-model:value="formData.spuInfo"
placeholder="请输入SPU信息"
:rows="2"
placeholder="请输入SPU编号(仅支持大写字母和数字)"
size="large"
@input="handleSpuInput"
/>
</a-form-item>
@ -890,7 +890,15 @@ const removeTaskType = (index: number) => {
}
}
// 自动生成任务标题
// 处理SPU输入(只允许大写字母和数字)
const handleSpuInput = (e: Event) => {
const input = e.target as HTMLInputElement
// 移除非大写字母和数字的字符,同时将小写字母转为大写
const filtered = input.value.toUpperCase().replace(/[^A-Z0-9]/g, '')
formData.spuInfo = filtered
}
// 自动生成任务标题(SPU + 品牌名 + 平台名)
const generateTitle = () => {
const parts: string[] = []
@ -899,15 +907,7 @@ const generateTitle = () => {
parts.push(formData.spuInfo.trim())
}
// 2. 平台名称
if (formData.platformId) {
const platform = platforms.value.find((p: any) => p.id === formData.platformId)
if (platform) {
parts.push(platform.name)
}
}
// 3. 品牌名称
// 2. 品牌名称
if (formData.brandId) {
const brand = brands.value.find((b: any) => b.id === formData.brandId)
if (brand) {
@ -915,16 +915,11 @@ const generateTitle = () => {
}
}
// 4. 任务子类型
if (formData.taskSubType) {
parts.push(formData.taskSubType)
}
// 5. 需求类型(第一个任务类型名称)
if (formData.taskTypes.length > 0 && formData.taskTypes[0].taskTypeId) {
const taskType = getTaskTypeInfo(formData.taskTypes[0].taskTypeId)
if (taskType) {
parts.push(taskType.name)
// 3. 平台名称
if (formData.platformId) {
const platform = platforms.value.find((p: any) => p.id === formData.platformId)
if (platform) {
parts.push(platform.name)
}
}
@ -934,20 +929,16 @@ const generateTitle = () => {
}
}
// 监听相关字段变化,自动生成标题
// 监听相关字段变化,自动生成标题(SPU + 品牌 + 平台)
watch(
() => [
formData.spuInfo,
formData.platformId,
formData.brandId,
formData.taskSubType,
formData.taskTypes[0]?.taskTypeId
formData.platformId
],
() => {
// 只有当标题为空或是之前自动生成的标题时才自动更新
generateTitle()
},
{ deep: true }
}
)
// 计算预估积分(累加所有任务类型)