refactor: simplify product copy
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
parent
248078113c
commit
b9fbd4c6af
+122
-122
@@ -29,7 +29,7 @@ const professionData = {
|
||||
priority: "高优先级",
|
||||
title: "强化“云原生与容器化”实训模块",
|
||||
description:
|
||||
"建议在综合实训中增加 Docker、Kubernetes 和 CI/CD 流水线,采用企业真实部署任务组织教学。",
|
||||
"建议在综合实训中增加 Docker、Kubernetes 和 CI/CD 流水线,并把企业部署任务用于课堂练习。",
|
||||
evidence: "2,864条岗位样本中,相关技能出现率由42%升至78%,当前课程覆盖仅32%",
|
||||
},
|
||||
{
|
||||
@@ -76,15 +76,15 @@ const professionData = {
|
||||
priority: "高优先级",
|
||||
title: "新增工业视觉综合实训项目",
|
||||
description:
|
||||
"联合装备企业建设缺陷检测场景,覆盖相机标定、图像处理、产线集成和质量评价。",
|
||||
"与装备企业共同设计缺陷检测任务,练习相机标定、图像处理、产线集成和质量评价。",
|
||||
evidence: "机器视觉岗位近90天增长38%,课程覆盖度仅38%,技能缺口44个百分点",
|
||||
},
|
||||
{
|
||||
priority: "中优先级",
|
||||
title: "引入设备数字孪生教学案例",
|
||||
description:
|
||||
"将现有PLC和生产线实训映射到数字孪生模型,形成设备数据采集与仿真任务。",
|
||||
evidence: "73%的龙头制造企业将数字孪生列为智能工厂建设能力",
|
||||
"把现有 PLC 和生产线实训对应到数字孪生模型,并安排设备数据采集与仿真任务。",
|
||||
evidence: "73%的龙头制造企业已把数字孪生列入智能工厂相关岗位要求",
|
||||
},
|
||||
],
|
||||
companies: [
|
||||
@@ -123,7 +123,7 @@ const professionData = {
|
||||
priority: "高优先级",
|
||||
title: "重构跨境电商平台运营课程",
|
||||
description:
|
||||
"增加真实店铺、选品定价、海外投放和合规履约任务,引入企业运营数据进行过程评价。",
|
||||
"增加企业店铺运营、选品定价、海外投放和合规履约任务,并用企业运营数据评价学习过程。",
|
||||
evidence: "跨境运营岗位增长34%,当前课程技能覆盖43%,企业反馈实操能力不足",
|
||||
},
|
||||
{
|
||||
@@ -182,7 +182,7 @@ const trendSets = {
|
||||
const projects = [
|
||||
{ type: "course", tone: "green", title: "云原生应用开发课程共建", meta: "信息工程学院 × 数梦工场", progress: 72, partners: ["李", "王", "企"] },
|
||||
{ type: "lab", tone: "amber", title: "工业视觉缺陷检测实训", meta: "智能制造学院 × 大华股份", progress: 48, partners: ["陈", "赵", "企"] },
|
||||
{ type: "practice", tone: "blue", title: "跨境电商真实店铺运营", meta: "商贸旅游学院 × 连连数字", progress: 86, partners: ["徐", "周", "企"] },
|
||||
{ type: "practice", tone: "blue", title: "跨境电商店铺运营", meta: "商贸旅游学院 × 连连数字", progress: 86, partners: ["徐", "周", "企"] },
|
||||
{ type: "course", tone: "green", title: "数字文旅内容生产工作坊", meta: "艺术设计学院 × 宋城集团", progress: 35, partners: ["许", "孙", "企"] },
|
||||
];
|
||||
|
||||
@@ -200,7 +200,7 @@ const enterpriseDemands = [
|
||||
company: "遥望科技",
|
||||
industry: "数字商贸",
|
||||
title: "直播电商运营实战项目",
|
||||
description: "提供真实品牌运营任务,需要课程团队共同设计过程评价标准。",
|
||||
description: "提供品牌运营任务,需要课程团队共同设计过程评价标准。",
|
||||
due: "本周五截止",
|
||||
},
|
||||
{
|
||||
@@ -215,7 +215,7 @@ const enterpriseDemands = [
|
||||
|
||||
const partners = [
|
||||
{ logo: "吉利", name: "吉利汽车", industry: "汽车制造 · 龙头企业", reason: "近一年发布高匹配岗位186个,与机电专业技能重合度高。", tags: ["智能产线", "企业导师"], match: 95 },
|
||||
{ logo: "数梦", name: "数梦工场", industry: "数据智能 · 专精特新", reason: "已确认参与云原生课程共建,并提供真实项目案例。", tags: ["云平台", "课程共建"], match: 94 },
|
||||
{ logo: "数梦", name: "数梦工场", industry: "数据智能 · 专精特新", reason: "已确认参与云原生课程共建,并提供项目案例。", tags: ["云平台", "课程共建"], match: 94 },
|
||||
{ logo: "遥望", name: "遥望科技", industry: "直播电商 · 上市企业", reason: "内容运营和直播投放需求稳定,愿意提供实训项目。", tags: ["直播电商", "项目实训"], match: 93 },
|
||||
{ logo: "大华", name: "大华股份", industry: "智能物联 · 龙头企业", reason: "工业视觉岗位增长显著,与学校智能制造方向互补。", tags: ["机器视觉", "实训基地"], match: 92 },
|
||||
];
|
||||
@@ -399,7 +399,7 @@ const sources = [
|
||||
categoryLabel: "企业数据",
|
||||
commercial: "合作授权",
|
||||
provider: "126家合作企业",
|
||||
rights: "限定合作场景使用",
|
||||
rights: "只限约定合作用途",
|
||||
coverage: "岗位与技能需求",
|
||||
frequency: "按需更新",
|
||||
status: "授权有效",
|
||||
@@ -953,7 +953,7 @@ const closedLoopActionCatalog = {
|
||||
description: "项目自动绑定 demandId、recommendationId 与 taskId。",
|
||||
roles: ["专业负责人"],
|
||||
fields: [
|
||||
["title", "项目名称", "text", "边缘计算测试真实项目进课堂"],
|
||||
["title", "项目名称", "text", "边缘计算测试项目进课堂"],
|
||||
["profession", "牵头专业", "text", "软件技术"],
|
||||
["owner", "项目负责人", "text", "李雯"],
|
||||
],
|
||||
@@ -981,7 +981,7 @@ const closedLoopActionCatalog = {
|
||||
roles: ["企业导师"],
|
||||
fields: [
|
||||
["result", "评价结论", "select", "通过|需整改"],
|
||||
["comment", "评价意见", "textarea", "任务覆盖真实设备测试流程,验收量规清晰,同意进入校级验收。"],
|
||||
["comment", "评价意见", "textarea", "任务覆盖企业设备测试流程,验收量规清晰,同意进入校级验收。"],
|
||||
],
|
||||
},
|
||||
acceptance: {
|
||||
@@ -999,7 +999,7 @@ const closedLoopActionCatalog = {
|
||||
title: "生成业务报告草稿",
|
||||
queueLabel: "生成业务报告草稿",
|
||||
nodeKey: "report",
|
||||
description: "报告关联需求、快照、任务和全部证据,生成后进入真实审批流。",
|
||||
description: "报告关联需求、快照、任务和全部证据,生成后进入校内审批流程。",
|
||||
roles: ["专业负责人", "学院负责人", "校级管理者"],
|
||||
fields: [["title", "报告名称", "text", "边缘计算测试人才共育成效报告"]],
|
||||
},
|
||||
@@ -1065,14 +1065,14 @@ function closedLoopActionState(action) {
|
||||
const checks = {
|
||||
demand: [
|
||||
e.snapshot.status === "待接收" && !e.task && !e.report,
|
||||
e.snapshot.status !== "待接收" ? "技术接收后需求版本已锁定;后续变更必须创建新版本并重新接收。" : "已有下游任务或报告,当前需求版本不可原地修改。",
|
||||
e.snapshot.status !== "待接收" ? "技术接收完成后不能修改当前需求;如需变更,请创建新版本并重新接收。" : "已有下游任务或报告,当前需求版本不能直接修改。",
|
||||
],
|
||||
receive: [e.demand.status === "已提交" && e.snapshot.status !== "已验收", e.snapshot.status === "已验收" ? "技术接收与快照验收已完成。" : "需先由企业提交完整需求。"],
|
||||
decision: [e.snapshot.status === "已验收" && e.recommendation.status !== "已采纳", e.recommendation.status === "已采纳" ? "建议已采纳并创建关联任务。" : "需先完成数据接收并生成已验收快照。"],
|
||||
project: [Boolean(e.task && !e.project), e.project ? "关联项目已创建。" : "需先采纳建议并自动创建任务。"],
|
||||
evidence: [
|
||||
Boolean(e.task && e.project && ["进行中", "需整改", "已退回"].includes(e.task.status) && !e.report),
|
||||
e.report ? "报告版本已生成,当前任务证据已冻结;新增证据必须进入下一周期或重开新版本。" : e.task?.status === "已完成" ? "任务已完成校级验收,不能继续追加当前版本证据。" : "需先创建处于执行或整改状态的关联任务和项目。",
|
||||
e.report ? "报告已生成,当前任务不能再追加证据;新增证据请放到下一周期或新版本。" : e.task?.status === "已完成" ? "任务已完成校级验收,不能继续追加当前版本证据。" : "需先创建处于执行或整改状态的关联任务和项目。",
|
||||
],
|
||||
evaluation: [
|
||||
e.evidences.length > 0 &&
|
||||
@@ -1102,7 +1102,7 @@ function closedLoopActionState(action) {
|
||||
feedback: [e.report?.status === "已发布" && !e.review, e.review ? "本周期已完成成效复核,不能继续追加使用反馈。" : "需先正式发布报告。"],
|
||||
review: [
|
||||
e.usageFeedback.at(-1)?.usable === "可用" && !e.review,
|
||||
e.review ? "本周期成效复核已完成。" : e.usageFeedback.length ? "最新业务使用反馈仍为需补充,确认可用后才能复核。" : "需先形成就业侧数据使用反馈。",
|
||||
e.review ? "本周期成效复核已完成。" : e.usageFeedback.length ? "最新业务使用反馈仍为需补充,确认可用后才能复核。" : "需先由就业老师登记使用反馈。",
|
||||
],
|
||||
};
|
||||
const [enabled, reason] = checks[action] || [false, "动作不可用。"];
|
||||
@@ -1229,9 +1229,9 @@ function closedLoopNodeDefinitions() {
|
||||
id: e.demand.id,
|
||||
status: e.demand.status,
|
||||
owner: "企业导师",
|
||||
description: "企业提交真实岗位、技能、人数与授权信息,形成后续分析和共育项目的业务起点。",
|
||||
description: "企业提交岗位、技能、人数与授权信息,学校据此开展分析并安排共育项目。",
|
||||
input: "岗位、技能、计划人数、授权编号",
|
||||
output: "可追踪的企业需求版本",
|
||||
output: "带编号的企业需求版本",
|
||||
complete: e.demand.status === "已提交",
|
||||
risk: false,
|
||||
relations: [e.demand.enterpriseId, e.demand.previousVersionId, e.recommendation.demandId],
|
||||
@@ -1269,7 +1269,7 @@ function closedLoopNodeDefinitions() {
|
||||
id: e.recommendation.id,
|
||||
status: e.recommendation.status,
|
||||
owner: "专业负责人",
|
||||
description: "专业负责人基于快照和企业需求采纳、暂缓或驳回建议,采纳后自动创建任务。",
|
||||
description: "专业负责人查看数据快照和企业需求后采纳、暂缓或驳回建议,采纳后自动创建任务。",
|
||||
input: "分析结论、企业需求、课程差距",
|
||||
output: "带理由的专业决策",
|
||||
complete: e.recommendation.status === "已采纳",
|
||||
@@ -1291,7 +1291,7 @@ function closedLoopNodeDefinitions() {
|
||||
owner: e.task?.owner || "专业负责人",
|
||||
description: "采纳专业建议后自动生成改进任务,保存负责人、期限、进度和验收历史。",
|
||||
input: "已采纳建议与任务负责人",
|
||||
output: "可执行、可验收的改进任务",
|
||||
output: "有负责人、期限和验收要求的任务",
|
||||
reached: e.recommendation.status === "已采纳",
|
||||
complete: Boolean(e.task),
|
||||
risk: ["需整改", "已退回"].includes(e.task?.status),
|
||||
@@ -1400,7 +1400,7 @@ function closedLoopNodeDefinitions() {
|
||||
status: e.report?.status || "未生成",
|
||||
owner: "编制人 / 独立审批人",
|
||||
description: "报告关联需求、快照、任务和证据,依次经过草稿、提交、独立审批和正式发布。",
|
||||
input: "验收通过的任务与冻结证据",
|
||||
input: "验收通过的任务与报告生成时登记的证据(不可追加)",
|
||||
output: "可归档的正式报告版本",
|
||||
complete: e.report?.status === "已发布",
|
||||
risk: e.report?.status === "已退回",
|
||||
@@ -1645,7 +1645,7 @@ function renderClosedLoopNodeDetail(node) {
|
||||
</div>`
|
||||
: `
|
||||
<div class="loop-node-action readonly">
|
||||
<span><strong>当前角色只读</strong><small>该节点由${safeText(node.owner)}负责,切换对应角色后可办理已解锁动作。</small></span>
|
||||
<span><strong>当前角色只读</strong><small>该节点由${safeText(node.owner)}负责;切换到对应角色后,可办理满足前置条件的动作。</small></span>
|
||||
</div>`;
|
||||
document.getElementById("loopNodeDetail").innerHTML = `
|
||||
<div class="loop-node-hero ${detailState}">
|
||||
@@ -1691,7 +1691,7 @@ function renderClosedLoopAction(action, nodes) {
|
||||
<button data-loop-action="${action}" data-loop-action-node="${node.key}" ${availability.enabled ? "" : "disabled"}>
|
||||
<i>${String(node.index + 1).padStart(2, "0")}</i>
|
||||
<span><small>${node.title}</small><strong>${closedLoopActionCatalog[action].queueLabel}</strong><em>${availability.reason}</em></span>
|
||||
<b>${availability.enabled ? "办理" : "未解锁"}</b>
|
||||
<b>${availability.enabled ? "办理" : "条件未满足"}</b>
|
||||
</button>`;
|
||||
}
|
||||
|
||||
@@ -2164,9 +2164,9 @@ const reports = [
|
||||
{ label: "现代服务类", value: 69 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: "推动11个专业完成高优技能缺口响应", detail: "由教务处牵头,4月底前形成课程调整或实训项目方案。" },
|
||||
{ priority: "P0", title: "推动11个专业处理高优技能缺口", detail: "由教务处牵头,4月底前提交课程调整或实训项目方案。" },
|
||||
{ priority: "P1", title: "建设工业视觉与云原生两类校企共享实训", detail: "优先对接大华、数梦工场等已表达合作意向的企业。" },
|
||||
{ priority: "P1", title: "建立企业需求季度确认机制", detail: "区分互联网招聘信号与合作企业正式确认需求,提升决策可信度。" },
|
||||
{ priority: "P1", title: "每季度请企业确认一次需求", detail: "把互联网招聘信息与合作企业确认的需求分开,避免混用。" },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -2195,7 +2195,7 @@ const reports = [
|
||||
],
|
||||
findings: [
|
||||
{ title: "Java/Spring能力供需匹配良好", detail: "市场需求强度92%,课程覆盖86%,可继续保持项目化教学。", value: "差值6" },
|
||||
{ title: "Docker/K8s形成明显技能缺口", detail: "市场需求81%,课程覆盖仅32%,缺口达到49个百分点。", value: "-49" },
|
||||
{ title: "Docker/K8s技能缺口明显", detail: "市场需求81%,课程覆盖仅32%,相差49个百分点。", value: "-49" },
|
||||
{ title: "AI辅助开发进入企业基础要求", detail: "69%的重点岗位提出相关要求,当前课程覆盖仅28%。", value: "-41" },
|
||||
],
|
||||
bars: [
|
||||
@@ -2208,7 +2208,7 @@ const reports = [
|
||||
actions: [
|
||||
{ priority: "P0", title: "强化云原生与容器化实训模块", detail: "在综合实训中覆盖Docker、Kubernetes、CI/CD和可观测性。" },
|
||||
{ priority: "P1", title: "将AI辅助开发纳入软件工程实践", detail: "增加代码生成、测试辅助、安全审查和人工复核规范。" },
|
||||
{ priority: "P1", title: "联合企业建设真实交付项目", detail: "引入数梦工场、海康威视的工程任务和企业导师评价。" },
|
||||
{ priority: "P1", title: "联合企业建设交付项目", detail: "引入数梦工场、海康威视的工程任务和企业导师评价。" },
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -2227,7 +2227,7 @@ const reports = [
|
||||
author: "信息工程学院",
|
||||
roles: ["校级管理者", "学院负责人"],
|
||||
summary:
|
||||
"学院6个专业平均匹配度80.4分,软件技术、物联网应用技术表现较好。当前需要跨专业统筹云平台、数据工程和AI应用三类共享能力建设。",
|
||||
"学院6个专业平均匹配度80.4分,软件技术、物联网应用技术表现较好。云平台、数据工程和 AI 应用课程可由多个专业共用。",
|
||||
metrics: [
|
||||
{ label: "学院匹配度", value: "80.4", note: "较上期 +5.1" },
|
||||
{ label: "覆盖专业", value: "6", note: "2个高匹配专业" },
|
||||
@@ -2235,8 +2235,8 @@ const reports = [
|
||||
{ label: "合作企业", value: "38", note: "本学期新增6家" },
|
||||
],
|
||||
findings: [
|
||||
{ title: "共享技术底座课程重复建设", detail: "数据库、Linux和软件工程内容在多个专业重复,可建设学院共享模块。", value: "6专业" },
|
||||
{ title: "云平台能力成为共同短板", detail: "云部署、容器和运维能力在5个专业中均出现覆盖不足。", value: "5专业" },
|
||||
{ title: "基础技术课程重复开设", detail: "数据库、Linux 和软件工程内容在多个专业重复,可由学院统一开设共用模块。", value: "6专业" },
|
||||
{ title: "5个专业都缺云平台课程内容", detail: "云部署、容器和运维内容在5个专业中均覆盖不足。", value: "5专业" },
|
||||
{ title: "企业项目集中度偏高", detail: "前5家企业承担了61%的项目,需要扩展中型技术企业伙伴。", value: "61%" },
|
||||
],
|
||||
bars: [
|
||||
@@ -2247,8 +2247,8 @@ const reports = [
|
||||
{ label: "计算机网络", value: 75 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: "建立学院共享工程实践课程群", detail: "统一云平台、数据库、DevOps基础能力,按专业配置差异化项目。" },
|
||||
{ priority: "P1", title: "扩展8家中型技术企业合作", detail: "降低项目来源集中度,为不同专业提供多样化真实任务。" },
|
||||
{ priority: "P0", title: "开设学院共用工程实践课程", detail: "云平台、数据库和 DevOps 基础内容由学院共用,各专业再安排不同项目。" },
|
||||
{ priority: "P1", title: "扩展8家中型技术企业合作", detail: "减少项目对少数企业的依赖,为不同专业提供更多企业任务。" },
|
||||
{ priority: "P1", title: "建立跨专业学生项目团队", detail: "围绕智能物联场景组织软件、数据和网络方向联合实训。" },
|
||||
],
|
||||
},
|
||||
@@ -2268,7 +2268,7 @@ const reports = [
|
||||
author: "产教融合中心",
|
||||
roles: ["校级管理者"],
|
||||
summary:
|
||||
"杭州区域人才需求持续向智能制造、云计算、跨境电商和数字内容方向集中。全校识别23项重点技能缺口,其中8项需要在本学期形成明确响应。",
|
||||
"杭州区域人才需求持续向智能制造、云计算、跨境电商和数字内容方向集中。全校有23项重点技能缺口,其中8项需要在本学期安排课程或项目调整。",
|
||||
metrics: [
|
||||
{ label: "重点缺口", value: "23", note: "8项高优" },
|
||||
{ label: "关联专业", value: "11", note: "覆盖5个学院" },
|
||||
@@ -2330,7 +2330,7 @@ const reports = [
|
||||
{ label: "现代服务类", value: 88 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P1", title: "将真实项目成果纳入就业推荐材料", detail: "强化学生技能证据,提升企业对岗位胜任力的判断效率。" },
|
||||
{ priority: "P1", title: "将企业项目成果纳入就业推荐材料", detail: "用学生作品和企业评价说明其岗位能力。" },
|
||||
{ priority: "P1", title: "建立分专业薪资预期指导", detail: "使用分位数而非平均数,为学生提供地域和岗位差异说明。" },
|
||||
{ priority: "P2", title: "持续核验企业薪资数据完整性", detail: "对缺失和区间过宽的薪资记录降低统计权重。" },
|
||||
],
|
||||
@@ -2372,7 +2372,7 @@ const reports = [
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: "补齐就业薪资缺失记录", detail: "由就业处在本期正式材料发布前完成字段确认。" },
|
||||
{ priority: "P1", title: "审核218个新增岗位名称", detail: "优先处理需求量前50的岗位,并沉淀别名规则。" },
|
||||
{ priority: "P1", title: "审核218个新增岗位名称", detail: "先处理需求量前50的岗位,并把确认后的别名加入规则表。" },
|
||||
{ priority: "P2", title: "增加数据包服务期自动提醒", detail: "基础数据包到期前30天通知厂商和学校管理员。" },
|
||||
],
|
||||
},
|
||||
@@ -2450,7 +2450,7 @@ const reports = [
|
||||
{ label: "AI内容生产", value: 75 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: "重构跨境电商平台运营课程", detail: "增加真实店铺、海外投放和合规履约任务。" },
|
||||
{ priority: "P0", title: "重构跨境电商平台运营课程", detail: "增加企业店铺运营、海外投放和合规履约任务。" },
|
||||
{ priority: "P1", title: "增加AI营销内容生产工作流", detail: "纳入AI文案、图片、视频辅助生产与人工审核。" },
|
||||
],
|
||||
},
|
||||
@@ -2487,7 +2487,7 @@ const reports = [
|
||||
{ label: "文化创意类", value: 68 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: "建立周期性分析机制", detail: "从年度人工报告转向季度数据快照和任务跟踪。" },
|
||||
{ priority: "P0", title: "每季度更新一次分析", detail: "用季度数据快照和任务进展替代一年一次的人工报告。" },
|
||||
{ priority: "P1", title: "完善岗位分类与技能词典", detail: "提高跨数据源岗位匹配和趋势比较的稳定性。" },
|
||||
],
|
||||
},
|
||||
@@ -2505,7 +2505,7 @@ const professionReportCatalog = [
|
||||
["新能源汽车技术", "智能制造学院", 83.1, "三电检测与智能诊断"],
|
||||
["汽车检测与维修技术", "智能制造学院", 74.9, "新能源汽车售后与诊断"],
|
||||
["跨境电子商务", "商贸旅游学院", 81.2, "海外投放与合规履约"],
|
||||
["国际商务", "商贸旅游学院", 73.6, "数字贸易与供应链协同"],
|
||||
["国际商务", "商贸旅游学院", 73.6, "数字贸易与供应链协作"],
|
||||
["市场营销", "商贸旅游学院", 72.8, "数据营销与用户增长"],
|
||||
["现代物流管理", "商贸旅游学院", 78.1, "智慧物流与仓配优化"],
|
||||
["酒店管理与数字化运营", "商贸旅游学院", 71.5, "收益管理与数字化服务"],
|
||||
@@ -2545,7 +2545,7 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
updated: `2026-03-${String(18 - (index % 8)).padStart(2, "0")}`,
|
||||
author: college,
|
||||
roles: ["校级管理者"],
|
||||
summary: `${name}专业供需匹配度${score}分。当前培养基础总体稳定,${focus}是下一阶段专业建设和校企协同的重点方向。`,
|
||||
summary: `${name}专业供需匹配度${score}分。当前课程基础总体稳定,下一阶段应优先补充${focus}相关课程和企业项目。`,
|
||||
metrics: [
|
||||
{ label: "专业匹配度", value: String(score), note: score >= 80 ? "高匹配" : score >= 74 ? "保持关注" : "需要改进" },
|
||||
{ label: "对口岗位", value: demand.toLocaleString("zh-CN"), note: "近90天有效样本" },
|
||||
@@ -2554,8 +2554,8 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
],
|
||||
findings: [
|
||||
{ title: `${focus}需求持续增长`, detail: `重点企业正在将相关能力纳入岗位要求,近90天需求信号保持上升。`, value: `+${16 + (index % 23)}%` },
|
||||
{ title: "课程实践与企业任务仍有差距", detail: "现有课程具备基础知识覆盖,但真实场景、工具链和交付评价需要加强。", value: `-${gap}` },
|
||||
{ title: "校企合作具备扩展条件", detail: `已识别${companyCount}家高匹配企业,可围绕项目实训和企业导师形成合作。`, value: `${companyCount}家` },
|
||||
{ title: "课程实践与企业任务仍有差距", detail: "现有课程已覆盖基础知识,但企业场景、工具链和交付评价练习仍然不足。", value: `-${gap}` },
|
||||
{ title: "可以联系更多合作企业", detail: `已有${companyCount}家企业与该专业较匹配,可讨论项目实训和企业导师安排。`, value: `${companyCount}家` },
|
||||
],
|
||||
bars: [
|
||||
{ label: "专业基础能力", value: Math.min(95, coverage + 8) },
|
||||
@@ -2565,9 +2565,9 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
{ label: "企业项目交付", value: Math.max(50, coverage - 12) },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: `强化${focus}教学模块`, detail: "引入企业真实任务,明确工具链、过程产物和验收标准。" },
|
||||
{ priority: "P0", title: `强化${focus}教学模块`, detail: "引入企业任务,明确使用的工具、过程产物和验收标准。" },
|
||||
{ priority: "P1", title: "邀请企业导师参与课程评审", detail: `优先对接已识别的${companyCount}家潜力企业,核验岗位技能与课程映射。` },
|
||||
{ priority: "P1", title: "建立学生能力证据档案", detail: "将项目作品、企业评价和技能达成情况纳入就业推荐材料。" },
|
||||
{ priority: "P1", title: "整理学生项目材料", detail: "把项目作品、企业评价和技能考核结果放入就业推荐材料。" },
|
||||
],
|
||||
});
|
||||
});
|
||||
@@ -2593,7 +2593,7 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
updated: `2026-03-${18 - index}`,
|
||||
author: name,
|
||||
roles: ["校级管理者"],
|
||||
summary: `${name}整体供需表现保持稳定,${focus}是跨专业共享能力建设的主要方向。`,
|
||||
summary: `${name}整体供需表现稳定。多个专业都需要${focus}相关课程,可由学院统一开设部分内容。`,
|
||||
metrics: [
|
||||
{ label: "学院匹配度", value: String(76.8 + index * 1.3), note: "较上期持续提升" },
|
||||
{ label: "覆盖专业", value: scope.replace("个专业", ""), note: "全部纳入分析" },
|
||||
@@ -2601,9 +2601,9 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
{ label: "合作企业", value: String(26 + index * 7), note: "持续扩展" },
|
||||
],
|
||||
findings: [
|
||||
{ title: `${focus}形成共同需求`, detail: "多个专业出现相近技能缺口,适合建设学院共享课程或实训平台。", value: "高关联" },
|
||||
{ title: `多个专业都需要${focus}`, detail: "多个专业的技能缺口相近,适合共用学院课程或实训环境。", value: "高关联" },
|
||||
{ title: "企业项目分布仍需优化", detail: "建议降低头部企业集中度,引入更多中型和专精特新企业。", value: "待改善" },
|
||||
{ title: "建议执行进入跟踪阶段", detail: "重点事项已明确负责人和周期,可纳入学院改进任务闭环。", value: "可执行" },
|
||||
{ title: "建议可以开始执行", detail: "重点事项已有负责人和期限,可加入学院任务清单继续跟进。", value: "可执行" },
|
||||
],
|
||||
bars: [
|
||||
{ label: "专业匹配", value: 80 + index },
|
||||
@@ -2612,9 +2612,9 @@ professionReportCatalog.forEach(([name, college, score, focus], index) => {
|
||||
{ label: "项目实践", value: 70 + index * 2 },
|
||||
],
|
||||
actions: [
|
||||
{ priority: "P0", title: `建设${focus}共享模块`, detail: "明确学院统一底座和各专业差异化应用场景。" },
|
||||
{ priority: "P1", title: "形成企业合作伙伴分层清单", detail: "区分课程共建、项目实训、实习就业和企业导师资源。" },
|
||||
{ priority: "P1", title: "按月跟踪专业改进任务", detail: "对逾期、未响应和缺少证据的任务进行校院协同督办。" },
|
||||
{ priority: "P0", title: `建设${focus}共享模块`, detail: "列出学院共用内容,以及各专业需要单独设置的练习。" },
|
||||
{ priority: "P1", title: "按合作类型整理企业名单", detail: "分别列出可参与课程共建、项目实训、实习就业和企业导师工作的企业。" },
|
||||
{ priority: "P1", title: "按月检查专业改进任务", detail: "校级和学院共同跟进逾期、未响应或缺少材料的任务。" },
|
||||
],
|
||||
});
|
||||
});
|
||||
@@ -2634,7 +2634,7 @@ const reportDataProfiles = {
|
||||
},
|
||||
college: {
|
||||
label: "学院专业建设分析",
|
||||
topics: ["专业结构对比", "共享能力分析", "培养成效验证", "企业协同机会"],
|
||||
topics: ["专业结构对比", "共用课程分析", "培养结果检查", "企业合作机会"],
|
||||
dependencies: [
|
||||
{ sourceId: "regional-jobs", requirement: "required", purpose: "学院相关岗位与技能趋势" },
|
||||
{ sourceId: "salary-company", requirement: "optional", purpose: "专业群薪资和企业结构参考" },
|
||||
@@ -2646,14 +2646,14 @@ const reportDataProfiles = {
|
||||
},
|
||||
profession: {
|
||||
label: "专业人才需求分析",
|
||||
topics: ["岗位技能需求", "课程能力映射", "学生达成验证", "企业需求复核"],
|
||||
topics: ["岗位技能需求", "课程技能对应", "学生学习结果", "企业需求复核"],
|
||||
dependencies: [
|
||||
{ sourceId: "regional-jobs", requirement: "required", purpose: "对口岗位、技能频次与需求变化" },
|
||||
{ sourceId: "salary-company", requirement: "optional", purpose: "区域同岗位薪资竞争力" },
|
||||
{ sourceId: "internship", requirement: "optional", purpose: "学生实践岗位与企业评价" },
|
||||
{ sourceId: "employment", requirement: "optional", purpose: "毕业去向和岗位匹配验证" },
|
||||
{ sourceId: "curriculum", requirement: "required", purpose: "课程标准、学时与技能覆盖" },
|
||||
{ sourceId: "enterprise-demand", requirement: "required", purpose: "真实企业需求与合作意向确认" },
|
||||
{ sourceId: "enterprise-demand", requirement: "required", purpose: "企业确认的人才需求与合作意向" },
|
||||
],
|
||||
},
|
||||
industry: {
|
||||
@@ -2716,7 +2716,7 @@ const dataGapCatalog = [
|
||||
levelLabel: "需补数",
|
||||
title: "就业薪资与缺失原因未完整提供",
|
||||
drawerTitle: "就业系统薪资字段缺失",
|
||||
drawerLevel: "阻断发布",
|
||||
drawerLevel: "当前不能发布",
|
||||
amount: "86 条记录 · 当前字段完整率 91.2%",
|
||||
affected: "86 条记录 · 电子商务专业 41 条、现代服务类专业 45 条",
|
||||
fields: ["employment_salary", "salary_period", "missing_reason"],
|
||||
@@ -2856,7 +2856,7 @@ function applyRole(role, options = {}) {
|
||||
document.getElementById("dataPageTitle").textContent = isDataAdministrator ? "学校数据运维中心" : "数据资产与质量";
|
||||
document.getElementById("dataPageDescription").textContent = isDataAdministrator
|
||||
? "管理学校数据源、初次导入、增量更新、字段契约、质量问题、版本与审计。"
|
||||
: "区分厂商基础数据包、学校自有数据与企业授权数据,所有分析结论均可追溯。";
|
||||
: "区分厂商基础数据包、学校自有数据与企业授权数据,每项分析结论都注明数据来源。";
|
||||
document.getElementById("syncAllButtonText").textContent = isDataAdministrator ? "新建更新任务" : "同步全部数据";
|
||||
|
||||
document.getElementById("schoolNav").hidden = isPlatformRole;
|
||||
@@ -2888,8 +2888,8 @@ function applyRole(role, options = {}) {
|
||||
};
|
||||
|
||||
if (role === "企业导师") {
|
||||
collaborationHeading.textContent = "企业协同工作台";
|
||||
collaborationDescription.textContent = "提交真实岗位与技能需求,参与课程共建并评价学生项目成果。";
|
||||
collaborationHeading.textContent = "企业合作工作台";
|
||||
collaborationDescription.textContent = "提交岗位与技能需求,参与课程共建并评价学生项目成果。";
|
||||
demandButton.innerHTML = `${svgIcon("file")}提交企业需求`;
|
||||
projectButton.innerHTML = `${svgIcon("course")}发起共建项目`;
|
||||
renderCollaborationStats([
|
||||
@@ -2899,24 +2899,24 @@ function applyRole(role, options = {}) {
|
||||
{ label: "参与学生", value: "86", unit: "人", note: "企业评价 4.7 / 5" },
|
||||
]);
|
||||
} else if (role === "学院负责人" || role === "专业负责人") {
|
||||
collaborationHeading.textContent = "学院校企协同";
|
||||
collaborationHeading.textContent = "学院校企合作";
|
||||
collaborationDescription.textContent = "围绕本院专业对接企业需求,推进课程共建、实训与企业导师协作。";
|
||||
demandButton.innerHTML = `${svgIcon("file")}邀请企业调研`;
|
||||
projectButton.innerHTML = `${svgIcon("course")}新建协同项目`;
|
||||
projectButton.innerHTML = `${svgIcon("course")}新建合作项目`;
|
||||
renderCollaborationStats([
|
||||
{ label: "本院合作企业", value: "38", unit: "家", note: "本学期新增 6 家" },
|
||||
{ label: "本院协同项目", value: "8", unit: "个", note: "3 个进行中" },
|
||||
{ label: "本院合作项目", value: "8", unit: "个", note: "3 个进行中" },
|
||||
{ label: "企业导师", value: "21", unit: "人", note: "覆盖 6 个专业" },
|
||||
{ label: "学生参与", value: "386", unit: "人次", note: "满意度 94%" },
|
||||
]);
|
||||
} else {
|
||||
collaborationHeading.textContent = "校企协同中心";
|
||||
collaborationDescription.textContent = "把产业需求转化为可执行的课程、项目与人才共育计划。";
|
||||
collaborationHeading.textContent = "校企合作";
|
||||
collaborationDescription.textContent = "根据企业需求安排课程共建、合作项目和人才培养计划。";
|
||||
demandButton.innerHTML = `${svgIcon("file")}发起需求调研`;
|
||||
projectButton.innerHTML = `${svgIcon("course")}新建协同项目`;
|
||||
projectButton.innerHTML = `${svgIcon("course")}新建合作项目`;
|
||||
renderCollaborationStats([
|
||||
{ label: "在库合作企业", value: "126", unit: "家", note: "本学期新增 18 家" },
|
||||
{ label: "本学期协同项目", value: "24", unit: "个", note: "8 个进行中" },
|
||||
{ label: "本学期合作项目", value: "24", unit: "个", note: "8 个进行中" },
|
||||
{ label: "企业导师", value: "68", unit: "人", note: "覆盖 17 个专业" },
|
||||
{ label: "学生参与", value: "1,284", unit: "人次", note: "满意度 92%" },
|
||||
]);
|
||||
@@ -3238,7 +3238,7 @@ function renderProfessionJobsView(data) {
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
${professionEvidenceNote("证据 PRO-JOB-301", `岗位流向基于区域招聘基础包去重岗位、学校近三届就业去向及合作企业确认记录。互联网岗位反映需求信号,不等于实际录用人数。`)}
|
||||
${professionEvidenceNote("证据 PRO-JOB-301", `岗位流向使用区域招聘基础包中的去重岗位、学校近三届就业去向及合作企业确认记录计算。互联网岗位反映需求信号,不等于实际录用人数。`)}
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -3280,7 +3280,7 @@ function renderProfessionSalaryView(data) {
|
||||
<article class="panel profession-detail-panel">
|
||||
<div class="panel-header"><div><span class="panel-kicker">影响因素</span><h2>技能证据与起薪</h2></div></div>
|
||||
<div class="salary-factor-list">
|
||||
<span><b>+14%</b><strong>企业真实项目经历</strong></span>
|
||||
<span><b>+14%</b><strong>企业项目经历</strong></span>
|
||||
<span><b>+9%</b><strong>高质量作品集</strong></span>
|
||||
<span><b>+7%</b><strong>企业导师评价</strong></span>
|
||||
</div>
|
||||
@@ -3567,7 +3567,7 @@ function renderLineageTopicNode(topic, index) {
|
||||
<div class="lineage-topic-node">
|
||||
<span>${String(index + 1).padStart(2, "0")}</span>
|
||||
<strong>${topic}</strong>
|
||||
<small>统一口径计算 · 保留证据定位</small>
|
||||
<small>按同一统计口径计算 · 可查看数据来源</small>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -3641,7 +3641,7 @@ function renderReportLineageCanvas(report) {
|
||||
return `
|
||||
<div class="lineage-stage-grid report-direction">
|
||||
${renderLineageStage("数据资产", `${visibleDependencies.length} / ${profile.dependencies.length} 项`, "sources", sourceNodes)}
|
||||
${lineageConnector("形成指标")}
|
||||
${lineageConnector("计算指标")}
|
||||
${renderLineageStage("指标 / 分析主题", `${profile.topics.length} 类`, "topics", topicNodes)}
|
||||
${lineageConnector("生成报告")}
|
||||
${renderLineageStage("目标报告", "1 份", "reports", renderLineageReportNode(report, readableIds))}
|
||||
@@ -3667,10 +3667,10 @@ function renderSourceLineageCanvas(source) {
|
||||
return `
|
||||
<div class="lineage-stage-grid source-direction">
|
||||
${renderLineageStage("选中数据", "1 项", "sources", renderLineageSourceNode(source, null, true))}
|
||||
${lineageConnector("支撑分析")}
|
||||
${renderLineageStage("可形成的分析", `${topics.length} 类`, "topics", topics.map(renderLineageTopicNode).join(""))}
|
||||
${lineageConnector("支撑报告")}
|
||||
${renderLineageStage("可形成的报告", `${visibleReports.length} 份`, "reports", reportNodes)}
|
||||
${lineageConnector("用于分析")}
|
||||
${renderLineageStage("可做的分析", `${topics.length} 类`, "topics", topics.map(renderLineageTopicNode).join(""))}
|
||||
${lineageConnector("用于报告")}
|
||||
${renderLineageStage("使用该数据的报告", `${visibleReports.length} 份`, "reports", reportNodes)}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -3698,7 +3698,7 @@ function renderLineageSummary(report, source) {
|
||||
const gaps = gapsForSource(source.id);
|
||||
summary.innerHTML = [
|
||||
lineageSummaryCard("当前数据", source.categoryLabel, source.version),
|
||||
lineageSummaryCard("支撑报告", `${sourceReports.length} 份`, `${reportsGroupedByType(sourceReports).size} 类报告`),
|
||||
lineageSummaryCard("使用该数据的报告", `${sourceReports.length} 份`, `${reportsGroupedByType(sourceReports).size} 类报告`),
|
||||
lineageSummaryCard("当前质量", source.quality, `${source.records} 条有效记录`),
|
||||
lineageSummaryCard("数据缺口", `${gaps.length} 项`, gaps.length ? "已定位责任人与时限" : "当前无数据缺口", gaps.length ? "warning" : "ready"),
|
||||
].join("");
|
||||
@@ -3761,7 +3761,7 @@ function renderDataReportLineage() {
|
||||
button.setAttribute("aria-pressed", String(selected));
|
||||
});
|
||||
document.getElementById("dataLineageSelectorLabel").textContent = mode === "report" ? "选择报告" : "选择数据";
|
||||
selector.setAttribute("aria-label", mode === "report" ? "选择要追溯的报告" : "选择要反查的数据");
|
||||
selector.setAttribute("aria-label", mode === "report" ? "选择报告查看所需数据" : "选择数据查看使用它的报告");
|
||||
selector.innerHTML =
|
||||
mode === "report"
|
||||
? reports
|
||||
@@ -3841,7 +3841,7 @@ function renderDataOpsOverview(source) {
|
||||
<article class="data-ops-highlight">
|
||||
<span>本次更新内容</span>
|
||||
<strong>${source.changeSummary}</strong>
|
||||
<p>更新采用暂存校验机制,未通过质量门槛的数据进入隔离区,不会覆盖当前已发布版本。</p>
|
||||
<p>更新数据先放入暂存区检查;不满足最低质量要求的数据进入隔离区,不会覆盖当前已发布版本。</p>
|
||||
</article>
|
||||
<div class="data-ops-two-column">
|
||||
<article class="data-ops-card">
|
||||
@@ -3880,7 +3880,7 @@ function renderDataOpsRequirements(source) {
|
||||
<div class="data-requirement-steps">
|
||||
<span><b>01</b><strong>准备文件或连接</strong><small>支持标准模板导入,也可按更新频率配置 API、数据库视图或 SFTP。</small></span>
|
||||
<span><b>02</b><strong>字段映射与样本预检</strong><small>确认主键、必填字段、代码字典和敏感字段处理规则。</small></span>
|
||||
<span><b>03</b><strong>暂存与质量校验</strong><small>先写入暂存区,阻断性错误不覆盖生产版本。</small></span>
|
||||
<span><b>03</b><strong>暂存与质量校验</strong><small>先写入暂存区,发现严重错误时不更新生产版本。</small></span>
|
||||
<span><b>04</b><strong>审批发布与留痕</strong><small>数据管理员确认质量和授权后,生成不可变版本并进入分析。</small></span>
|
||||
</div>
|
||||
</article>
|
||||
@@ -3893,7 +3893,7 @@ function renderDataOpsRequirements(source) {
|
||||
<table class="data-ops-table">
|
||||
<thead><tr><th>校验项</th><th>门槛</th><th>失败处理</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>主键唯一性</td><td>100%</td><td>整批阻断,下载冲突明细</td></tr>
|
||||
<tr><td>主键唯一性</td><td>100%</td><td>整批不发布,可下载冲突明细</td></tr>
|
||||
<tr><td>必填完整性</td><td>≥ 95%</td><td>进入隔离区,修复后重试</td></tr>
|
||||
<tr><td>代码与日期合法性</td><td>≥ 98%</td><td>错误记录不进入分析</td></tr>
|
||||
<tr><td>综合质量</td><td>${source.threshold}</td><td>低于阈值不得发布</td></tr>
|
||||
@@ -3925,7 +3925,7 @@ function renderDataOpsHistory(source) {
|
||||
</div>
|
||||
<article class="data-ops-card">
|
||||
<h3>失败处理策略</h3>
|
||||
<p>网络失败从检查点自动重试 3 次;数据错误进入隔离区;主键冲突、授权缺失和 Schema 不兼容将整批阻断。历史已发布版本不原地覆盖。</p>
|
||||
<p>网络失败从检查点自动重试 3 次;数据错误进入隔离区;出现主键冲突、授权缺失或 Schema 不兼容时,整批数据不发布。历史已发布版本不直接覆盖。</p>
|
||||
</article>
|
||||
`;
|
||||
}
|
||||
@@ -3966,7 +3966,7 @@ function renderDataOpsUsage() {
|
||||
<div><span>SHA校验<strong>${safeText(e.receipt.receivedSha256 || e.receipt.expectedSha256)}</strong></span><span>交付包记录数<strong>${e.receipt.receivedRecords.toLocaleString("zh-CN")} / ${e.receipt.expectedRecords.toLocaleString("zh-CN")}</strong></span><span>分析快照<strong>${e.snapshot.id} · ${e.snapshot.checkedRecords.toLocaleString("zh-CN")}条</strong></span></div>
|
||||
</div>
|
||||
<article class="data-ops-card">
|
||||
<h3>业务支撑关系</h3>
|
||||
<h3>业务使用情况</h3>
|
||||
<div class="data-impact-grid">
|
||||
<span>报告<strong>${e.report?.id || "待生成"}</strong></span>
|
||||
<span>项目<strong>${e.project?.id || "待创建"}</strong></span>
|
||||
@@ -4069,7 +4069,7 @@ function updateDataOpsDrawer() {
|
||||
if (dataOpsState.context === "batch") {
|
||||
document.getElementById("dataOpsKicker").textContent = "DATA UPDATE CENTER";
|
||||
document.getElementById("dataOpsTitle").textContent = "数据更新任务中心";
|
||||
document.getElementById("dataOpsDescription").textContent = "先确认业务截止日期、变更内容和质量门槛,再创建可追踪的更新任务。";
|
||||
document.getElementById("dataOpsDescription").textContent = "先确认业务截止日期、变更内容和最低质量要求,再创建带编号的更新任务。";
|
||||
content.innerHTML = `
|
||||
<div class="batch-update-summary">${dataOpsStat("待更新", "2 个来源", "1个自动调度 · 1个人工导入")}${dataOpsStat("运行正常", "4 个来源", "最近24小时无失败")}${dataOpsStat("隔离记录", "86 条", "未进入生产版本")}</div>
|
||||
<article class="data-ops-card">
|
||||
@@ -4106,7 +4106,7 @@ function updateDataOpsDrawer() {
|
||||
if (dataOpsState.context === "authorization") {
|
||||
document.getElementById("dataOpsKicker").textContent = "DATA AUTHORIZATION";
|
||||
document.getElementById("dataOpsTitle").textContent = "数据权属与授权中心";
|
||||
document.getElementById("dataOpsDescription").textContent = "统一管理用途、可见范围、服务期限、撤权和审计要求。";
|
||||
document.getElementById("dataOpsDescription").textContent = "设置数据用途、可见范围、服务期限、撤权方式和操作记录要求。";
|
||||
content.innerHTML = renderAuthorizationOverview();
|
||||
footer.innerHTML = `<button class="button secondary" data-data-ops-close>关闭</button><button class="button primary" data-data-ops-result="授权台账已导出并写入审计日志">导出授权台账</button>`;
|
||||
return;
|
||||
@@ -4195,7 +4195,7 @@ function openWorkspaceDetail(kind, value = "") {
|
||||
description: `${task.profession} · 来源:${task.source}`,
|
||||
content: `
|
||||
<div class="workspace-metric-grid">${workspaceMetric("负责人", task.owner, "主责")}${workspaceMetric("截止日期", task.due, task.statusText)}${workspaceMetric("当前进度", `${task.progress}%`, "自动汇总")}</div>
|
||||
<article class="workspace-detail-card"><h3>任务目标</h3><p>将分析建议转化为课程、项目或校企协同调整,并以正式方案、企业确认和学生达成证据作为验收依据。</p></article>
|
||||
<article class="workspace-detail-card"><h3>任务目标</h3><p>根据分析建议调整课程、项目或企业合作安排,并用正式方案、企业确认和学生考核结果验收。</p></article>
|
||||
<article class="workspace-detail-card"><h3>进展记录</h3><div class="workspace-log-list">${loopTask ? loopTask.progressLogs.map((item) => `<span><strong>${safeText(item.detail)}</strong><small>${safeText(item.operator)} · ${safeText(item.at)} · 进度 ${item.progress}%</small></span>`).join("") : `<span><strong>完成现状与差距复核</strong><small>李雯 · 2026-03-18 16:20</small></span><span><strong>企业导师已确认技能清单</strong><small>陈凯 · 2026-03-20 10:42</small></span><span><strong>课程调整方案进入教研室评审</strong><small>系统 · 今天 08:30</small></span>`}</div></article>
|
||||
<article class="workspace-detail-card"><h3>验收要求</h3><div class="workspace-evidence-list"><span>课程或项目方案<strong>${loopTask && closedLoopState.entities.evidences.length ? "已提交" : "必需"}</strong></span><span>企业确认回执<strong>${closedLoopState.entities.evaluation ? closedLoopState.entities.evaluation.result : "必需"}</strong></span><span>校级验收<strong>${loopTask?.status || "待执行"}</strong></span></div>${loopTask ? `<button class="button primary loop-inline-action" data-loop-action="evidence">提交阶段进展与证据</button>` : ""}</article>`,
|
||||
primary: loopTask ? "关闭详情" : "提交阶段进展",
|
||||
@@ -4223,7 +4223,7 @@ function openWorkspaceDetail(kind, value = "") {
|
||||
description: `${partner.industry} · 综合匹配度 ${partner.match}%`,
|
||||
content: `
|
||||
<article class="workspace-detail-card"><h3>推荐依据</h3><p>${partner.reason}</p><div class="workspace-tag-row">${partner.tags.map((tag) => `<span>${tag}</span>`).join("")}</div></article>
|
||||
<article class="workspace-detail-card"><h3>对接安排</h3><div class="workspace-form-grid"><label><span>校内负责人</span><input value="产教融合中心 · 王健"></label><label><span>建议时间</span><input type="date" value="2026-04-15"></label><label class="full"><span>沟通议题</span><textarea rows="4">岗位技能确认、课程共建、真实项目进课堂、企业导师与学生实习安排。</textarea></label></div></article>`,
|
||||
<article class="workspace-detail-card"><h3>对接安排</h3><div class="workspace-form-grid"><label><span>校内负责人</span><input value="产教融合中心 · 王健"></label><label><span>建议时间</span><input type="date" value="2026-04-15"></label><label class="full"><span>沟通议题</span><textarea rows="4">岗位技能确认、课程共建、企业项目进课堂、企业导师与学生实习安排。</textarea></label></div></article>`,
|
||||
primary: "创建对接事项",
|
||||
};
|
||||
},
|
||||
@@ -4238,14 +4238,14 @@ function openWorkspaceDetail(kind, value = "") {
|
||||
kicker: "ORGANIZATION SCOPE",
|
||||
title: "组织与数据范围",
|
||||
description: "根据账号角色切换组织,数据权限同步变化。",
|
||||
content: `<div class="organization-list"><button class="active"><span class="tenant-logo">杭</span><span><strong>杭州科技职业技术学院</strong><small>校级管理者 · 全校32个专业</small></span><em>当前</em></button><button><span class="tenant-logo blue">信</span><span><strong>信息工程学院</strong><small>学院负责人 · 6个专业</small></span><em>可进入</em></button><button><span class="tenant-logo amber">企</span><span><strong>海康威视协同空间</strong><small>企业导师 · 3个共建项目</small></span><em>可进入</em></button></div><article class="workspace-detail-card"><h3>权限说明</h3><p>组织切换只改变业务范围,不改变底层租户隔离。平台运营人员无法默认查看学校明文业务数据。</p></article>`,
|
||||
content: `<div class="organization-list"><button class="active"><span class="tenant-logo">杭</span><span><strong>杭州科技职业技术学院</strong><small>校级管理者 · 全校32个专业</small></span><em>当前</em></button><button><span class="tenant-logo blue">信</span><span><strong>信息工程学院</strong><small>学院负责人 · 6个专业</small></span><em>可进入</em></button><button><span class="tenant-logo amber">企</span><span><strong>海康威视合作空间</strong><small>企业导师 · 3个共建项目</small></span><em>可进入</em></button></div><article class="workspace-detail-card"><h3>权限说明</h3><p>切换组织只改变可查看的业务范围,不改变租户隔离。平台运营人员默认不能查看学校明细数据。</p></article>`,
|
||||
primary: "确认当前范围",
|
||||
}),
|
||||
templates: () => ({
|
||||
kicker: "REPORT TEMPLATE LIBRARY",
|
||||
title: "报告模板库",
|
||||
description: "按不同决策场景统一报告结构、证据和审批流程。",
|
||||
content: `<div class="template-library"><article><span>校级报告</span><strong>全校产教供需分析总报告</strong><small>学校事实、区域基准、专业结构、行动清单</small><em>42页 · 已启用</em></article><article><span>学院报告</span><strong>学院专业建设分析报告</strong><small>专业对比、共享能力、企业合作与任务跟踪</small><em>36页 · 已启用</em></article><article><span>专业报告</span><strong>专业人才需求分析报告</strong><small>岗位、技能、薪资、课程映射和企业推荐</small><em>24—30页 · 已启用</em></article><article><span>数据质量</span><strong>数据资产质量与口径报告</strong><small>来源、权属、版本、质量规则、限制和审计</small><em>19页 · 已启用</em></article></div>`,
|
||||
description: "按报告用途设置章节、数据说明和审批步骤。",
|
||||
content: `<div class="template-library"><article><span>校级报告</span><strong>全校产教供需分析总报告</strong><small>学校数据、区域基准、专业结构、任务清单</small><em>42页 · 已启用</em></article><article><span>学院报告</span><strong>学院专业建设分析报告</strong><small>专业对比、共用课程、企业合作与任务跟踪</small><em>36页 · 已启用</em></article><article><span>专业报告</span><strong>专业人才需求分析报告</strong><small>岗位、技能、薪资、课程对应和企业推荐</small><em>24—30页 · 已启用</em></article><article><span>数据质量</span><strong>数据资产质量与口径报告</strong><small>来源、权属、版本、质量规则、限制和审计</small><em>19页 · 已启用</em></article></div>`,
|
||||
primary: "新建模板版本",
|
||||
}),
|
||||
compare: () => ({
|
||||
@@ -4323,7 +4323,7 @@ function renderSources(filter = "all") {
|
||||
<span>数据提供方<strong>${source.provider}</strong></span>
|
||||
<span>权属与授权<strong>${source.rights}</strong></span>
|
||||
<span>覆盖范围<strong>${source.coverage}</strong></span>
|
||||
<span>更新机制<strong>${source.frequency}</strong></span>
|
||||
<span>更新频率<strong>${source.frequency}</strong></span>
|
||||
</div>
|
||||
<div class="source-card-meta">
|
||||
<span>有效记录<strong>${source.records}</strong></span>
|
||||
@@ -4473,14 +4473,14 @@ function renderReportCenter() {
|
||||
const roleReports = reportsForCurrentRole();
|
||||
const role = document.getElementById("roleSelect")?.value || "校级管理者";
|
||||
const descriptions = {
|
||||
校级管理者: "统一管理校级、学院、专业、产业与数据质量报告,支持在线阅读和版本追溯。",
|
||||
学院负责人: "查看本院、所属专业及相关数据质量报告,将分析结论转化为专业建设行动。",
|
||||
校级管理者: "查看和管理校级、学院、专业、产业与数据质量报告,并保留各版本。",
|
||||
学院负责人: "查看本院、所属专业及相关数据质量报告,并根据分析结论安排专业建设任务。",
|
||||
专业负责人: "查看本专业报告、提交业务流程报告审核并追踪审批历史;校级批准与发布由校级管理者执行。",
|
||||
就业老师: "查看校级与数据质量报告,登记就业侧使用反馈;不能审批校级业务报告。",
|
||||
校级技术管理员: "查看数据质量、版本、口径和授权报告,确保进入分析的每个数据版本均可追溯。",
|
||||
校级技术管理员: "查看数据质量、版本、口径和授权报告,并检查每个分析版本的数据来源和处理记录。",
|
||||
};
|
||||
document.getElementById("reportCenterDescription").textContent =
|
||||
descriptions[role] || "统一管理分析报告,支持在线阅读和版本追溯。";
|
||||
descriptions[role] || "查看和管理分析报告,并保留各版本。";
|
||||
document.getElementById("reportTotalCount").textContent = roleReports.length;
|
||||
document.getElementById("reportNewCount").textContent = roleReports.filter((item) => item.periodKey === "current").length;
|
||||
document.getElementById("reportReviewCount").textContent = roleReports.filter((item) => item.status === "待审核").length;
|
||||
@@ -4516,8 +4516,8 @@ function renderReportDocument(report, options = {}) {
|
||||
<div class="report-cover-main">
|
||||
<span>${report.typeLabel} · ${report.period}</span>
|
||||
<h1>${report.title}</h1>
|
||||
<p>${report.scope}。报告基于统一数据快照生成,结论均保留来源、样本量与统计口径。</p>
|
||||
<mark class="report-standard-stamp">STANDARD REPORT · 数据、口径与结论全链路可追溯</mark>
|
||||
<p>${report.scope}。报告使用同一数据快照生成,每项结论都注明来源、样本量和统计口径。</p>
|
||||
<mark class="report-standard-stamp">STANDARD REPORT · 可查看数据来源、统计口径和结论依据</mark>
|
||||
</div>
|
||||
<div class="report-cover-foot">
|
||||
<span>编制单位<strong>${report.author}</strong></span>
|
||||
@@ -4546,16 +4546,16 @@ function renderReportDocument(report, options = {}) {
|
||||
${window.ReportVisuals.renderExecutiveCharts(report, { interactive })}
|
||||
<div class="report-interpretation">
|
||||
<span>综合解读</span>
|
||||
<p>本期${evidence.scoreLabel}为<strong>${evidence.score.toFixed(1)}分</strong>,高于区域可比均值<strong>${(evidence.score - evidence.benchmark.regional).toFixed(1)}分</strong>,高于同类院校均值<strong>${(evidence.score - evidence.benchmark.peer).toFixed(1)}分</strong>。该判断建立在${evidence.benchmark.sampleText}及统一数据快照之上;所有低样本指标已降权,不将互联网招聘数量直接解释为人才缺口人数。</p>
|
||||
<p>本期${evidence.scoreLabel}为<strong>${evidence.score.toFixed(1)}分</strong>,高于区域可比均值<strong>${(evidence.score - evidence.benchmark.regional).toFixed(1)}分</strong>,高于同类院校均值<strong>${(evidence.score - evidence.benchmark.peer).toFixed(1)}分</strong>。计算使用${evidence.benchmark.sampleText}和同一数据快照;低样本指标已降低权重,互联网招聘数量不直接当作人才缺口人数。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="report-section" id="report-section-profile">
|
||||
${reportSectionHeading(2, "INSTITUTION PROFILE", report.type === "profession" ? "专业与学校事实画像" : report.type === "college" ? "学院与学校事实画像" : "学校现状与事实画像")}
|
||||
${reportSectionHeading(2, "INSTITUTION PROFILE", report.type === "profession" ? "专业与学校现状" : report.type === "college" ? "学院与学校现状" : "学校现状")}
|
||||
${window.ReportVisuals.renderProfileEvidence(report, { interactive })}
|
||||
<div class="report-interpretation">
|
||||
<span>学校现状判断</span>
|
||||
<p>学校现状以学籍、教务、人事、实习就业和校企合作台账为事实底座。当前全校专业、课程和企业合作规模能够支撑常规人才培养,但真实项目实训、企业导师评价与课程技能映射仍需进一步覆盖。每项现状指标均可展开查看来源系统、更新时间、责任部门和计算口径。</p>
|
||||
<p>学校现状数据来自学籍、教务、人事、实习就业和校企合作台账。当前全校专业、课程和企业合作规模能够满足常规人才培养需要,但企业项目实训、企业导师评价和课程技能对应关系仍不完整。每项指标都可查看来源系统、更新时间、责任部门和计算口径。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -4580,7 +4580,7 @@ function renderReportDocument(report, options = {}) {
|
||||
</div>
|
||||
<div class="report-finding-validation">
|
||||
<strong>结论交叉验证规则</strong>
|
||||
<span>外部需求趋势</span><i>+</i><span>校内培养事实</span><i>+</i><span>企业确认信号</span><i>→</i><span>业务负责人复核</span>
|
||||
<span>外部岗位变化</span><i>+</i><span>校内培养数据</span><i>+</i><span>企业确认需求</span><i>→</i><span>业务负责人复核</span>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -4616,12 +4616,12 @@ function renderReportDocument(report, options = {}) {
|
||||
</div>
|
||||
<div class="report-interpretation">
|
||||
<span>结构性结论</span>
|
||||
<p>高需求但课程覆盖不足的能力位于象限图左上区域,应优先进入专业建设清单;高需求且覆盖充分的能力应转向学生达成和企业评价验证。趋势图显示培养响应仍滞后于外部需求,建议以真实项目和企业验收缩短响应周期,而不是简单增加课程名称。</p>
|
||||
<p>高需求但课程覆盖不足的能力位于象限图左上区域,应优先加入专业建设清单;高需求且覆盖充分的能力需要检查学生掌握情况和企业评价。趋势图显示课程调整仍慢于岗位需求变化,建议增加企业项目和企业验收,不要只增加课程名称。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="report-section" id="report-section-evidence">
|
||||
${reportSectionHeading(5, "DATA EVIDENCE", "证据链、样本与数据来源")}
|
||||
${reportSectionHeading(5, "DATA EVIDENCE", "样本与数据来源")}
|
||||
${window.ReportVisuals.renderEvidenceLedger(report)}
|
||||
</section>
|
||||
|
||||
@@ -4630,8 +4630,8 @@ function renderReportDocument(report, options = {}) {
|
||||
<div class="report-method-steps">
|
||||
<article><span>01</span><strong>数据采集</strong><p>采集近90天岗位、校内主数据、课程标准、实习就业回执和合作企业确认记录,保留权属与授权标签。</p></article>
|
||||
<article><span>02</span><strong>清洗归一</strong><p>按岗位ID、企业、发布时间去重;专业依据教育部专业代码归一;技能使用版本化词典映射。</p></article>
|
||||
<article><span>03</span><strong>基准构建</strong><p>仅纳入同层次、同区域且有效样本达到100条的院校;同类院校按专业结构、规模和产业方向匹配。</p></article>
|
||||
<article><span>04</span><strong>交叉验证</strong><p>外部需求、校内事实与企业确认至少两类证据方向一致才形成中高置信结论,AI文本须人工审核。</p></article>
|
||||
<article><span>03</span><strong>选择对比样本</strong><p>只纳入同层次、同区域且有效样本达到100条的院校;同类院校按专业结构、规模和产业方向选择。</p></article>
|
||||
<article><span>04</span><strong>相互核对</strong><p>外部岗位、校内数据和企业确认中至少两类结果一致,才列为较可靠结论;AI草拟文字必须人工审核。</p></article>
|
||||
</div>
|
||||
<div class="report-table-wrap">
|
||||
<table class="report-table">
|
||||
@@ -4647,7 +4647,7 @@ function renderReportDocument(report, options = {}) {
|
||||
</table>
|
||||
</div>
|
||||
<div class="report-method-note">
|
||||
本报告用于专业建设和校企协同决策参考。AI负责结构化归纳和文本草拟,不修改原始数据,不隐藏相反证据。业务负责人需结合政策、办学定位和资源约束审核,不直接替代招生、专业撤并或课程调整的正式决策程序。
|
||||
本报告用于讨论专业建设和校企合作。AI只整理数据和草拟文字,不修改原始数据,也不删除相反结果。业务负责人仍需结合政策、办学定位和资源情况审核;报告不能替代招生、专业撤并或课程调整的正式决策程序。
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -4673,7 +4673,7 @@ function renderReportDocument(report, options = {}) {
|
||||
<div class="report-action-cycle">
|
||||
<span><strong>责任确认</strong><small>5个工作日内</small></span>
|
||||
<i></i>
|
||||
<span><strong>方案与资源</strong><small>形成可验收产物</small></span>
|
||||
<span><strong>方案与资源</strong><small>提交可按验收要求检查的成果</small></span>
|
||||
<i></i>
|
||||
<span><strong>阶段复核</strong><small>按月更新证据</small></span>
|
||||
<i></i>
|
||||
@@ -4720,7 +4720,7 @@ function openReportReader(reportId) {
|
||||
["profile", "学校现状"],
|
||||
["findings", "关键发现"],
|
||||
["analysis", "供需结构"],
|
||||
["evidence", "证据链"],
|
||||
["evidence", "数据来源"],
|
||||
["method", "指标口径"],
|
||||
["actions", "行动建议"],
|
||||
];
|
||||
@@ -4975,10 +4975,10 @@ function setupWorkspaceDetails() {
|
||||
}
|
||||
|
||||
const productTourSteps = [
|
||||
{ view: "dashboard", selector: ".quality-strip", title: "可信数据底座", description: "先确认数据来源、更新状态和质量门槛,所有分析只引用已验收版本。" },
|
||||
{ view: "dashboard", selector: ".ai-panel", title: "发现关键变化", description: "AI将岗位、技能和专业变化归纳为可解释的决策简报,并保留证据定位。" },
|
||||
{ view: "dashboard", selector: ".quality-strip", title: "先核对数据", description: "先看数据来自哪里、何时更新、是否通过检查;分析只使用已验收版本。" },
|
||||
{ view: "dashboard", selector: ".ai-panel", title: "查看关键变化", description: "系统整理岗位、技能和专业变化,每条结论都可打开查看数据来源。" },
|
||||
{ view: "profession", selector: ".profile-banner", title: "定位专业差距", description: "从岗位、技能、薪资和课程映射判断专业优势与结构性缺口。" },
|
||||
{ view: "collaboration", selector: ".collab-stats", title: "连接企业协同", description: "把企业需求转化为课程共建、真实项目、企业导师和实习就业合作。" },
|
||||
{ view: "collaboration", selector: ".collab-stats", title: "安排企业合作", description: "把企业需求写入课程共建、企业项目、企业导师和实习就业计划。" },
|
||||
{ view: "actions", selector: ".action-overview", title: "跟踪改进成效", description: "每项建议都有负责人、截止日期、进展证据和下一周期效果复核。" },
|
||||
{ view: "data", selector: ".source-summary-grid", title: "管理数据资产", description: "厂商、学校和企业三类数据分权维护,支持初次导入、增量更新、版本和审计。" },
|
||||
{ view: "reports", selector: ".featured-report-grid", title: "完成正式交付", description: "在线报告、材料包和展示大屏使用同一数据快照,适用于决策、汇报与报送。" },
|
||||
@@ -5268,7 +5268,7 @@ function setupReportCenterInteractions() {
|
||||
const task = {
|
||||
id: `TSK-REPORT-${Date.now()}`,
|
||||
title,
|
||||
source: `报告建议 · ${report?.version || "当前版本"} · 证据链已关联`,
|
||||
source: `报告建议 · ${report?.version || "当前版本"} · 已关联数据来源`,
|
||||
profession: report?.type === "profession" ? report.scope.split("·").pop().trim() : "全校专业",
|
||||
owner: "待确认",
|
||||
due: "2026-04-30",
|
||||
@@ -5357,7 +5357,7 @@ const platformActionTemplates = {
|
||||
<label><span>预计记录数</span><input value="92.6 万条" readonly></label>
|
||||
<label><span>数据版本</span><input value="V2026.04"></label>
|
||||
<label><span>Schema 版本</span><input value="JOB-PACK 3.3"></label>
|
||||
<label class="full"><span>本次更新内容</span><textarea rows="3">新增约 8.4 万条岗位,更新 1.2 万条岗位状态;补充具身智能、AI应用工程和工业软件分类,失效记录保留版本追溯。</textarea></label>
|
||||
<label class="full"><span>本次更新内容</span><textarea rows="3">新增约 8.4 万条岗位,更新 1.2 万条岗位状态;补充具身智能、AI应用工程和工业软件分类,并保留失效记录的旧版本。</textarea></label>
|
||||
<fieldset>
|
||||
<legend>导入要求与发布门槛</legend>
|
||||
<div class="platform-contract-summary">
|
||||
@@ -5458,7 +5458,7 @@ const platformActionTemplates = {
|
||||
permission: {
|
||||
kicker: "ROLE PERMISSION",
|
||||
title: "角色与权限模板",
|
||||
description: "统一配置学校、学院、企业和平台运营角色权限。",
|
||||
description: "分别设置学校、学院、企业和平台运营人员的权限。",
|
||||
confirm: "进入配置",
|
||||
content: `<div class="platform-detail-card"><strong>7 套权限模板</strong><small>采用租户隔离、角色权限和数据范围三层控制,最近修改已通过审计复核。</small></div>`,
|
||||
},
|
||||
@@ -5472,7 +5472,7 @@ const platformActionTemplates = {
|
||||
audit: {
|
||||
kicker: "AUDIT LOG",
|
||||
title: "平台审计日志",
|
||||
description: "追溯数据导入、权限变更、租户操作和系统任务。",
|
||||
description: "查看数据导入、权限变更、租户操作和系统任务记录。",
|
||||
confirm: "查看完整日志",
|
||||
content: `<div class="platform-detail-card"><strong>今日记录 286 条关键操作</strong><small>数据操作68条,权限操作12条,系统任务201条,安全事件5条,全部保留操作者和时间戳。</small></div>`,
|
||||
},
|
||||
@@ -5553,7 +5553,7 @@ function setupAnalysis() {
|
||||
"读取本期分析快照…",
|
||||
"归一并匹配产业岗位…",
|
||||
"计算专业技能覆盖差距…",
|
||||
"生成可解释决策洞察…",
|
||||
"整理分析结果和建议…",
|
||||
];
|
||||
openModal(modal);
|
||||
progress.style.width = "0";
|
||||
@@ -5635,7 +5635,7 @@ function configureFormModal(type) {
|
||||
task: {
|
||||
kicker: "ACTION FORM",
|
||||
title: "创建改进任务",
|
||||
description: "将分析洞察转化为可追踪、可验证的行动。",
|
||||
description: "把分析结果写成有负责人、截止日期和验收要求的任务。",
|
||||
label: "任务名称",
|
||||
value: "强化云原生与容器化实训内容",
|
||||
scopeLabel: "关联专业",
|
||||
@@ -5651,16 +5651,16 @@ function configureFormModal(type) {
|
||||
},
|
||||
project: {
|
||||
kicker: "COLLABORATION PROJECT",
|
||||
title: "新建协同项目",
|
||||
title: "新建合作项目",
|
||||
description: "连接专业团队与企业伙伴,共同推进人才培养项目。",
|
||||
label: "项目名称",
|
||||
value: "企业真实项目进课堂",
|
||||
value: "企业项目进课堂",
|
||||
scopeLabel: "牵头专业",
|
||||
scopeOptions: ["软件技术", "机电一体化技术", "电子商务"],
|
||||
priorityLabel: "项目类型",
|
||||
priorityOptions: ["企业项目进课堂", "课程共建", "实训基地", "企业导师"],
|
||||
goalLabel: "共建目标与验收方式",
|
||||
goal: "围绕企业真实任务共同设计教学项目、过程评价和成果验收,保留企业任务书与导师评价证据。",
|
||||
goal: "围绕企业任务共同设计教学项目、过程评价和成果验收,并保存企业任务书与导师评价。",
|
||||
ownerLabel: "校内负责人",
|
||||
owner: "王健 · 产教融合中心",
|
||||
dueLabel: "计划启动时间",
|
||||
@@ -5688,15 +5688,15 @@ function configureFormModal(type) {
|
||||
configs.demand = {
|
||||
kicker: "ENTERPRISE DEMAND",
|
||||
title: "提交企业人才需求",
|
||||
description: "提交真实岗位、技能与共育需求,供学校专业团队确认响应。",
|
||||
description: "提交岗位、技能与共育需求,供学校专业团队确认是否承接。",
|
||||
label: "需求名称",
|
||||
value: "边缘计算软件测试人才共育需求",
|
||||
scopeLabel: "关联专业",
|
||||
scopeOptions: ["软件技术", "物联网应用技术", "计算机网络技术"],
|
||||
priorityLabel: "合作方式",
|
||||
priorityOptions: ["人才共育", "真实项目", "课程共建", "实习就业"],
|
||||
priorityOptions: ["人才共育", "企业项目", "课程共建", "实习就业"],
|
||||
goalLabel: "企业需求说明",
|
||||
goal: "提交真实岗位、技能、计划人数和合作方式,并由企业联系人确认数据授权用途与有效期。",
|
||||
goal: "填写岗位、技能、计划人数和合作方式,并由企业联系人确认数据用途与有效期。",
|
||||
ownerLabel: "企业联系人",
|
||||
owner: "陈凯 · 企业人才发展部",
|
||||
dueLabel: "期望响应时间",
|
||||
@@ -5707,15 +5707,15 @@ function configureFormModal(type) {
|
||||
configs.project = {
|
||||
kicker: "CO-CREATION PROJECT",
|
||||
title: "发起校企共建项目",
|
||||
description: "邀请学校共同设计企业真实项目、课程内容和评价标准。",
|
||||
description: "邀请学校共同设计企业项目、课程内容和评价标准。",
|
||||
label: "项目名称",
|
||||
value: "智能物联边缘计算综合实训",
|
||||
scopeLabel: "面向专业",
|
||||
scopeOptions: ["物联网应用技术", "软件技术", "计算机网络技术"],
|
||||
priorityLabel: "项目类型",
|
||||
priorityOptions: ["企业真实项目", "课程共建", "企业导师", "实训基地"],
|
||||
priorityOptions: ["企业项目", "课程共建", "企业导师", "实训基地"],
|
||||
goalLabel: "企业任务与验收要求",
|
||||
goal: "基于边缘计算测试场景设计实训任务,由企业导师参与中期评审,并依据测试报告、代码质量和协作过程验收。",
|
||||
goal: "按边缘计算测试场景设计实训任务,由企业导师参加中期评审,并检查测试报告、代码质量和协作过程。",
|
||||
ownerLabel: "企业负责人",
|
||||
owner: "陈凯 · 企业人才发展部",
|
||||
dueLabel: "建议启动时间",
|
||||
@@ -5816,7 +5816,7 @@ function setupForms() {
|
||||
closeModal(document.getElementById("formModal"));
|
||||
const messages = {
|
||||
task: "改进任务已创建,并通知专业负责人",
|
||||
project: "协同项目草案已创建,可继续邀请企业伙伴",
|
||||
project: "合作项目草案已创建,可继续邀请企业伙伴",
|
||||
demand: "企业需求调研已创建,共有126家在库企业可发送",
|
||||
};
|
||||
showToast(messages[type] || "内容已保存");
|
||||
@@ -6007,7 +6007,7 @@ function init() {
|
||||
addClosedLoopAudit(
|
||||
"LEGACY_NEXT_CYCLE_MIGRATED",
|
||||
closedLoopState.entities.demand.id,
|
||||
`旧版复核 ${legacyReview.id || "RVW-旧记录"} 已转换为真实的新周期实体。`,
|
||||
`旧版复核 ${legacyReview.id || "RVW-旧记录"} 已转换为可继续办理的新周期记录。`,
|
||||
"流程状态迁移器",
|
||||
"系统",
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user