From e978a7cdb13b93e818ff9622ec7d5309e4c848e1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 2 Jan 2026 18:28:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8F=91=E5=B8=83=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=A4=B1=E8=B4=A5=E9=97=AE=E9=A2=98=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=BC=96=E7=A0=81=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=201.=20=E4=BF=AE=E5=A4=8Dtask=E8=A1=A8approv?= =?UTF-8?q?al=5Fstatus=E5=AD=97=E6=AE=B5=E9=95=BF=E5=BA=A6=E9=97=AE?= =?UTF-8?q?=E9=A2=98(VARCHAR(20)->VARCHAR(50))=202.=20=E4=B8=BA=E5=93=81?= =?UTF-8?q?=E7=89=8C=E3=80=81=E5=B9=B3=E5=8F=B0=E3=80=81=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E3=80=81=E4=BB=BB=E5=8A=A1=E5=AD=90=E7=B1=BB=E5=9E=8B=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=203.=20=E4=BC=98=E5=8C=96=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E4=BD=93=E9=AA=8C=EF=BC=8C=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E7=94=9F=E6=88=90=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/fix_task_approval_status_length.sql | 36 +++++++ frontend/src/types/components.d.ts | 1 + frontend/src/views/Settings.vue | 108 ++++++++++++++++++- 3 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 database/fix_task_approval_status_length.sql diff --git a/database/fix_task_approval_status_length.sql b/database/fix_task_approval_status_length.sql new file mode 100644 index 0000000..1ed20f2 --- /dev/null +++ b/database/fix_task_approval_status_length.sql @@ -0,0 +1,36 @@ +-- 修复 task 表的 approval_status 字段长度问题 +-- 问题:approval_status 字段长度为 VARCHAR(20),但实际值 'pending_demand_approval' 有 23 个字符 +-- 错误:Data truncation: Data too long for column 'approval_status' +-- 解决:将字段长度扩大到 VARCHAR(50) +-- 日期:2026-01-02 + +USE designhub; + +-- 修改 approval_status 字段长度 +ALTER TABLE `task` +MODIFY COLUMN `approval_status` VARCHAR(50) DEFAULT 'draft' +COMMENT '审批状态:draft-草稿,pending_demand_approval-待需求部门审批,pending_receiving_approval-待接单部门审批,approved-已通过,rejected-已拒绝'; + +-- 验证修改结果 +SELECT + COLUMN_NAME, + COLUMN_TYPE, + COLUMN_DEFAULT, + COLUMN_COMMENT +FROM + INFORMATION_SCHEMA.COLUMNS +WHERE + TABLE_SCHEMA = 'designhub' + AND TABLE_NAME = 'task' + AND COLUMN_NAME = 'approval_status'; + +-- 说明: +-- 审批状态值说明: +-- 1. draft - 草稿(默认值) +-- 2. pending_demand_approval - 待需求部门负责人审批(23字符) +-- 3. pending_receiving_approval - 待接单部门主管审批(28字符) +-- 4. approved - 已通过 +-- 5. rejected - 已拒绝 +-- +-- VARCHAR(50) 足以容纳所有可能的状态值 + diff --git a/frontend/src/types/components.d.ts b/frontend/src/types/components.d.ts index ffbc4c3..1398c65 100644 --- a/frontend/src/types/components.d.ts +++ b/frontend/src/types/components.d.ts @@ -11,6 +11,7 @@ declare module 'vue' { ABadge: typeof import('ant-design-vue/es')['Badge'] AButton: typeof import('ant-design-vue/es')['Button'] ACalendar: typeof import('ant-design-vue/es')['Calendar'] + ACard: typeof import('ant-design-vue/es')['Card'] ACheckbox: typeof import('ant-design-vue/es')['Checkbox'] ACheckboxGroup: typeof import('ant-design-vue/es')['CheckboxGroup'] ACol: typeof import('ant-design-vue/es')['Col'] diff --git a/frontend/src/views/Settings.vue b/frontend/src/views/Settings.vue index eb675ea..836d66b 100644 --- a/frontend/src/views/Settings.vue +++ b/frontend/src/views/Settings.vue @@ -958,7 +958,13 @@ - + + + @@ -987,7 +993,13 @@ - + + + @@ -1015,7 +1027,13 @@ - + + + @@ -1043,7 +1061,13 @@ - + + + @@ -1881,6 +1905,82 @@ const handleScoreAdjust = async () => { } } +// 自动生成编码的辅助函数 +const generateCode = (name: string, prefix: string = ''): string => { + if (!name) return '' + + // 移除特殊字符,只保留字母、数字和汉字 + const cleanName = name.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '') + + let code = '' + + // 尝试提取英文字母 + const englishChars = cleanName.match(/[a-zA-Z]+/g) + if (englishChars && englishChars.length > 0) { + code = englishChars.join('').toUpperCase().substring(0, 8) + } + + // 如果没有英文字母,使用时间戳后6位 + if (!code) { + code = 'CODE' + Date.now().toString().slice(-6) + } + + // 添加前缀 + if (prefix) { + code = prefix.toUpperCase() + '_' + code + } + + return code +} + +// 自动生成品牌编码 +const autoGenerateBrandCode = () => { + if (!formData.brand.name) { + message.warning('请先输入品牌名称') + return + } + formData.brand.brandCode = generateCode(formData.brand.name, 'BR') +} + +// 自动生成平台编码 +const autoGeneratePlatformCode = () => { + if (!formData.platform.name) { + message.warning('请先输入平台名称') + return + } + formData.platform.platformCode = generateCode(formData.platform.name, 'PF') +} + +// 自动生成类目编码 +const autoGenerateCategoryCode = () => { + if (!formData.category.name) { + message.warning('请先输入类目名称') + return + } + formData.category.categoryCode = generateCode(formData.category.name, 'CAT') +} + +// 自动生成任务子类型编码 +const autoGenerateTaskSubTypeCode = () => { + if (!formData.taskSubType.name) { + message.warning('请先输入子类型名称') + return + } + // 任务子类型编码使用小写加下划线格式 + let code = formData.taskSubType.name + .toLowerCase() + .replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '_') + .replace(/_{2,}/g, '_') + .replace(/^_|_$/g, '') + + // 如果是中文,简化处理 + if (/[\u4e00-\u9fa5]/.test(code)) { + code = 'subtype_' + Date.now().toString().slice(-6) + } + + formData.taskSubType.code = code +} + // 显示弹窗 const showDemandTypeModal = async (item?: DemandType) => { editingItem.value = item