From 02cda4ea1e4c20a51c0b5e875a44f77883327d0a Mon Sep 17 00:00:00 2001 From: RISE Date: Fri, 30 Jan 2026 18:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=BE=A9=E6=89=93=E5=8C=85=E5=95=8F?= =?UTF-8?q?=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/fix-encoding-corruption.py | 258 ++++++++++++++++++ scripts/fix-stuunionleague.py | 96 +++++++ src/api/recruit/recruitschoolcode.ts | 60 ++++ .../components/widgets/audio-player.vue | 2 +- .../recruit/recruitschoolcode/detaiform.vue | 2 +- src/views/stuwork/dormreform/index.vue | 2 +- src/views/stuwork/entrancerule/index.vue | 2 +- src/views/stuwork/pendingwork/index.vue | 2 +- src/views/stuwork/rewarddorm/index.vue | 134 ++++----- src/views/stuwork/rewardrule/index.vue | 68 ++--- src/views/stuwork/rewardstudent/index.vue | 119 ++++---- src/views/stuwork/stipendtermbatch/index.vue | 20 +- src/views/stuwork/stuassociation/index.vue | 26 +- src/views/stuwork/stucare/index.vue | 138 +++++----- src/views/stuwork/stuconduct/index.vue | 160 +++++------ .../stuwork/stuinnerleaveapplygroup/index.vue | 18 +- src/views/stuwork/stupunlish/index.vue | 193 +++++++------ src/views/stuwork/stutemleaveapply/index.vue | 22 +- src/views/stuwork/stuturnover/index.vue | 44 +-- src/views/stuwork/stuunionleague/index.vue | 125 +++++---- .../stuwork/stuworkstudyalternate/index.vue | 36 +-- src/views/stuwork/teachbuilding/index.vue | 14 +- src/views/stuwork/teachclassroom/index.vue | 12 +- src/views/stuwork/tuitionfreestu/index.vue | 172 ++++++------ src/views/stuwork/waterdetail/index.vue | 174 ++++++------ src/views/stuwork/waterorder/index.vue | 136 ++++----- .../stuwork/workstudyattendance/index.vue | 127 +++++---- 27 files changed, 1287 insertions(+), 875 deletions(-) create mode 100644 scripts/fix-encoding-corruption.py create mode 100644 scripts/fix-stuunionleague.py create mode 100644 src/api/recruit/recruitschoolcode.ts diff --git a/scripts/fix-encoding-corruption.py b/scripts/fix-encoding-corruption.py new file mode 100644 index 0000000..10b5e82 --- /dev/null +++ b/scripts/fix-encoding-corruption.py @@ -0,0 +1,258 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +修复项目中因编码损坏产生的 U+FFFD 替换字符及未闭合字符串。 +遍历 src 下所有 .vue .ts .js 文件,应用预定义的替换规则。 +""" +import os +import sys + +# U+FFFD 替换字符 +R = '\ufffd' + +# 替换规则:(错误片段, 正确文本) 错误片段中含 R 表示 U+FFFD +# 顺序:长的、具体的放前面,避免短规则误替换 +REPLACEMENTS = [ + # content="列设? placement= 未闭合 + ('content="列设' + R + '? placement="top"', 'content="列设置" placement="top"'), + # 筛选条件 + ('筛选条' + R + '?', '筛选条件'), + # 列表/条件 + ('助学金批次列' + R + '?', '助学金批次列表'), + ('学生处分列' + R + '?', '学生处分列表'), + ('勤工助学考勤列' + R + '?', '勤工助学考勤列表'), + ('评优评先奖项列' + R + '?', '评优评先奖项列表'), + # 列设置 + ('列设' + R + '?', '列设置'), + # 表格列配置 + ('表格列配' + R + '?', '表格列配置'), + # 日期 placeholder + ('start-placeholder="开始日' + R + '?', 'start-placeholder="开始日期'), + ('end-placeholder="结束日' + R + '?', 'end-placeholder="结束日期'), + ('开始日' + R + '?', '开始日期'), + ('到期日' + R + '?', '到期日'), + ('结束日' + R + '?', '结束日期'), + # range-separator + ('range-separator="' + R + '?', 'range-separator="至'), + ('range-separator="' + R + R, 'range-separator="至'), + # 格式化学期/季度/类别 + ('格式化学' + R + '?', '格式化学期'), + ('格式化季' + R + '?', '格式化季度'), + ('格式化类' + R + '?', '格式化类别'), + # 负责人/所属类别 + ('负责' + R + '?', '负责人'), + ('所属类' + R + '?', '所属类别'), + # placeholder 未闭合 (缺结尾引号) + ('请选择所属类' + R + '? ', '请选择所属类别" '), + ('请输入姓' + R + '? ', '请输入姓名" '), + ('请输入学' + R + '? ', '请输入学号" '), + ('请输入班' + R + '? ', '请输入班号" '), + # 班主任 + ('班主任姓' + R + '?', '班主任姓名'), + ('班主任电' + R + '?', '班主任电话'), + # 注释:用于图标 + ('用于图标' + R + '?)', '用于图标显示)'), + ('用于图标' + R + '?', '用于图标显示'), + # 初始化/数据 + ('初始' + R + '?', '初始化'), + ('自动获取数' + R + '?', '自动获取数据'), + # 删除批次 + ('删除批' + R + '?"', '删除批次"'), + ('删除批' + R + '?', '删除批次'), + # 特殊模板 注释 + ('学期列特殊模' + R + '?-->', '学期列特殊模板 -->'), + ('人数列特殊模' + R + '?-->', '人数列特殊模板 -->'), + ('成立时间列特殊模' + R + '?-->', '成立时间列特殊模板 -->'), + ('需关爱类型列特殊模' + R + '?-->', '需关爱类型列特殊模板 -->'), + ('记录时间列特殊模' + R + '?-->', '记录时间列特殊模板 -->'), + ('干预结果列特殊模' + R + '?-->', '干预结果列特殊模板 -->'), + ('考勤类型列特殊模' + R + '?-->', '考勤类型列特殊模板 -->'), + ('落实情况列特殊模' + R + '?-->', '落实情况列特殊模板 -->'), + # tableColumns label 未闭合 + ("label: '班主任姓" + R + "? },", "label: '班主任姓名' }, "), + ("label: '班主任电" + R + "? },", "label: '班主任电话' }, "), + ("label: '开始日" + R + "?, icon:", "label: '开始日期', icon:"), + # 宿舍/班级/状态等 + ('宿舍' + R + '?', '宿舍号'), + ('班级简' + R + '?', '班级简称'), + ('操行平均' + R + '?', '操行平均分'), + ('总评成绩平均' + R + '?', '总评成绩平均分'), + ('处分状' + R + '?', '处分状态'), + ('待审' + R + '?', '待审核'), + ('审' + R + '状态', '审核状态'), + # 更多常见 + ('请输入团员编' + R + '? ', '请输入团员编号" '), + ('教学楼管理列' + R + '?', '教学楼管理列表'), + ('原班' + R + '?', '原班级'), + ("label: '请假开始时" + R + "?', icon:", "label: '请假开始时间', icon:"), + ('类型列特殊模' + R + '?-->', '类型列特殊模板 -->'), + ('入团时间列特殊模' + R + '?-->', '入团时间列特殊模板 -->'), + ('考核时间列特殊模' + R + '?-->', '考核时间列特殊模板 -->'), + # 确定要删除...吗? + ('教学楼吗' + R + '?)', '教学楼吗?)'), + # label 请假开始时间(逗号结尾变体) + ("label: '请假开始时" + R + "?,", "label: '请假开始时间',"), + # range-separator 双替换符 + ('range-separator="' + R + R + '"', 'range-separator="至"'), + ('range-separator="' + R + R + '\n', 'range-separator="至"\n'), + # range/start/end placeholder 缺结尾引号 + ('range-separator="至\n start-placeholder="开始日期\n', 'range-separator="至"\n start-placeholder="开始日期"\n'), + ('start-placeholder="开始日期\n end-placeholder="结束日期"', 'start-placeholder="开始日期"\n end-placeholder="结束日期"'), + # 工学交替/带班教师 列特殊模板 + ('工学交替结束时间列特殊模' + R + '?-->', '工学交替结束时间列特殊模板 -->'), + ('带班教师列特殊模' + R + '?-->', '带班教师列特殊模板 -->'), + # 班级简称 缺引号 + ("label: '班级简称 ", "label: '班级简称', "), + ("label: '工学交替开始时" + R + "?, width:", "label: '工学交替开始时间', width:"), + # 确定要删除这条记录吗? + ('这条记录吗' + R + ')', '这条记录吗?)'), + # 音/频 等(多字符损坏) + ('播放' + R + R + R + '频', '播放音频'), + # 团内职务/异动时间/附件列特殊模板 + ('团内职务列特殊模' + R + '?-->', '团内职务列特殊模板 -->'), + ('异动时间列特殊模' + R + '?-->', '异动时间列特殊模板 -->'), + ('附件列特殊模' + R + '?-->', '附件列特殊模板 -->'), + # 现班号/格式化日期/异动类型/转制类型 + ("label: '现班" + R + "? },", "label: '现班号' },"), + ('现班' + R + '?', '现班号'), + ('格式化日' + R + '?', '格式化日期'), + ('格式化异动类' + R + '?', '格式化异动类型'), + ('格式化转制类' + R + '?', '格式化转制类型'), + # 按钮文字:导出/新增 + ('导' + R + '出', '导出'), + ('新' + R + '增', '新增'), + # 班主任(label 等) + ("label: '班主" + R + "?,", "label: '班主任',"), + ("label: '班主" + R + "? ", "label: '班主任' "), + # 将文件拖到此处,(R?em 或 Rem) + ('将文件拖到此处,' + R + '?em>', '将文件拖到此处,'), + ('将文件拖到此处,' + R + 'em>', '将文件拖到此处,'), + # 取消/确定 按钮(>??) + ('= false">' + R + R + '', '= false">取消'), + ('importLoading">' + R + R + '', 'importLoading">确定'), + (':loading="importLoading">' + R + R + '', ':loading="importLoading">确定'), + ('取' + R + '消', '取消'), + ('确' + R + '定', '确定'), + # confirm 记录吗?)(R? 或 R) + ('记录吗' + R + '?)', "记录吗?')"), + ('记录吗' + R + ')', '记录吗?)'), + # 注释与文案 + ('不实' + R + '?', '不实现'), + ('只能上传一个文' + R + '?', '只能上传一个文件'), + ('文件不存' + R + '?', '文件不存在'), + # 时间 + ('日期时' + R + '?', '日期时间'), + ('和时' + R + '?', '和时间'), + ("label: '开始时" + R + "?,", "label: '开始时间',"), + ('开始时' + R + '?', '开始时间'), +] + +# 字面问号乱码(非 U+FFFD)的通用替换,仅用于明确无歧义的 +LITERAL_QUESTION_REPLACEMENTS = [ + ('content="???" placement="top"', 'content="列设置" placement="top"'), + ("col.prop !== '??'", "col.prop !== '操作'"), + ('??\n ', '操作\n '), + ('@click="handleEdit(scope.row)">\n ??\n ', '@click="handleEdit(scope.row)">\n 编辑\n '), + ('@click="handleDelete(scope.row)">\n ??\n ', '@click="handleDelete(scope.row)">\n 删除\n '), + ('\n \n \n
', '\n
'), + ('??', '取消'), + ('@click="confirmInit" :loading="initLoading">??', '@click="confirmInit" :loading="initLoading">确定'), + (':disabled="!importFile || importLoading">??', ':disabled="!importFile || importLoading">确定'), + # label + prop 上下文 + ('label="??" prop="schoolYear"', 'label="学年" prop="schoolYear"'), + ('label="??" prop="schoolTerm"', 'label="学期" prop="schoolTerm"'), + ('label="??" prop="deptCode"', 'label="学院" prop="deptCode"'), + ('label="??" prop="classCode"', 'label="班级" prop="classCode"'), + ('label="??" prop="realName"', 'label="姓名" prop="realName"'), + ('label="??" prop="gradeCurr"', 'label="年级" prop="gradeCurr"'), + ('label="??" prop="year"', 'label="学年" prop="year"'), + ('label="??" prop="period"', 'label="学期" prop="period"'), + ('label="??" prop="buildNo"', 'label="楼号" prop="buildNo"'), + ('label="??" prop="conductType"', 'label="类型" prop="conductType"'), + ('label="??" prop="stuNo"', 'label="学号" prop="stuNo"'), + ('label="??" prop="source"', 'label="来源" prop="source"'), + ('label="??" prop="termId"', 'label="学期" prop="termId"'), + ('label="???" prop="roomNo"', 'label="宿舍号" prop="roomNo"'), + ('label="????" prop="grade"', 'label="入学年份" prop="grade"'), + ('label="????" prop="checkStatus"', 'label="审核状态" prop="checkStatus"'), + ('label="????" prop="effectiveMoney"', 'label="可用余额" prop="effectiveMoney"'), + ('label="????" prop="isLiveNum"', 'label="在住人数" prop="isLiveNum"'), + ('label="????" prop="costMoney"', 'label="补贴金额" prop="costMoney"'), + ('label="????" prop="punlishMonth"', 'label="处分月份" prop="punlishMonth"'), + ('label="????" prop="punlishLevel"', 'label="处分级别" prop="punlishLevel"'), + ('label="????" prop="ruleName"', 'label="奖项名称" prop="ruleName"'), + # placeholder 按上下文(需避免误替换,用较长片段) + ('placeholder="?????" \n clearable\n filterable', 'placeholder="请选择学年" \n clearable\n filterable'), + ('placeholder="?????" \n clearable\n style="width: 200px">', 'placeholder="请选择学期" \n clearable\n style="width: 200px">'), + ('placeholder="?????" \n clearable\n filterable\n style="width: 200px">', 'placeholder="请选择学院" \n clearable\n filterable\n style="width: 200px">'), + ('placeholder="?????" \n clearable\n style="width: 200px" />', 'placeholder="请输入姓名" \n clearable\n style="width: 200px" />'), + ('placeholder="??????" \n clearable', 'placeholder="请输入宿舍号" \n clearable'), + ('placeholder="???????" \n clearable', 'placeholder="请输入奖项名称" \n clearable'), + ('placeholder="??????" \n clearable', 'placeholder="请输入年级" \n clearable'), + ('placeholder="???????" \n clearable', 'placeholder="请选择审核状态" \n clearable'), + ('placeholder="??????" \n :min="0"', 'placeholder="请输入可用余额" \n :min="0"'), + ('placeholder="???" \n clearable', 'placeholder="请输入人数" \n clearable'), + ('placeholder="?????" \n clearable\n filterable\n style="width: 200px"\n @change', 'placeholder="请选择学院" \n clearable\n filterable\n style="width: 200px"\n @change'), + ('placeholder="??????" \n style="width: 100%"', 'placeholder="请输入补贴金额" \n style="width: 100%"'), + ('placeholder="??????" \n clearable\n style="width: 200px">', 'placeholder="请选择处分月份" \n clearable\n style="width: 200px">'), + ('placeholder="???????" \n clearable\n style="width: 200px">', 'placeholder="请选择处分级别" \n clearable\n style="width: 200px">'), + # 按钮文字 + ('@click="handleSearch">??', '@click="handleSearch">查询'), + ('@click="handleReset">??', '@click="handleReset">重置'), + # 选项 + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('', ''), + ('??????', '学生团员列表'), + ('????', '筛选条件'), + ('将文件拖到此处,点击上传', '将文件拖到此处,点击上传'), # 已正确则不动 + ('????????????', '将文件拖到此处,点击上传'), + ('???? xlsx/xls ??', '只能上传 xlsx/xls 文件'), + # 表单项 label / placeholder + ('label="??" prop="classCode"', 'label="班级" prop="classCode"'), + ('placeholder="?????" \n clearable\n filterable', 'placeholder="请选择班级" \n clearable\n filterable'), + ('label="??" prop="classNo"', 'label="班号" prop="classNo"'), + ('placeholder="?????" \n clearable\n style="width: 200px" />', 'placeholder="请输入班号" \n clearable\n style="width: 200px" />'), + ('label="??" prop="realName"', 'label="姓名" prop="realName"'), + ('placeholder="?????" \n clearable\n style="width: 200px" />\n \n \n \n \n \n \n \n ', 'placeholder="请选择入学年份" \n clearable\n style="width: 200px">'), + # 按钮 + ('@click="getDataList">??', '@click="getDataList">查询'), + ('@click="handleReset">??', '@click="handleReset">重置'), + ('@click="formDialogRef.openDialog()">\n ??\n ', '@click="formDialogRef.openDialog()">\n 新增\n '), + ('@click="handleImport">\n ??\n ', '@click="handleImport">\n 导入\n '), + ('@click="handleExport">\n ??\n ', '@click="handleExport">\n 导出\n '), + ('content="???" placement="top"', 'content="列设置" placement="top"'), + ('label="??" width="70"', 'label="序号" width="70"'), + ("col.prop !== '??'", "col.prop !== '操作'"), + ('\n