fix: optimize form labels and hints across all pages
All checks were successful
Build and Deploy Backend / build-and-deploy (push) Successful in 3m2s
Build and Deploy Web / build-and-deploy (push) Successful in 1m5s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
seaislee1209 2026-02-12 15:35:18 +08:00
parent 268c89e15c
commit f7b9db6f42
5 changed files with 85 additions and 60 deletions

Binary file not shown.

View File

@ -49,18 +49,20 @@
<!-- AI 工具新增弹窗 -->
<el-dialog v-model="showAIForm" title="新增 AI 工具成本" width="480px" destroy-on-close>
<el-form :model="aiForm" label-width="100px">
<el-form-item label="工具名称"><el-input v-model="aiForm.tool_name" /></el-form-item>
<el-form-item label="工具名称"><el-input v-model="aiForm.tool_name" placeholder="如Midjourney、Runway 等" /></el-form-item>
<el-form-item label="订阅周期">
<el-select v-model="aiForm.subscription_period" style="width:100%">
<el-option label="月" value="月" /><el-option label="年" value="年" />
<el-select v-model="aiForm.subscription_period" placeholder="按月或按年付费" style="width:100%">
<el-option label="月" value="月" /><el-option label="年" value="年" />
</el-select>
</el-form-item>
<el-form-item label="费用金额"><el-input-number v-model="aiForm.amount" :min="0" :controls="false" style="width:100%" /></el-form-item>
<el-form-item label="费用金额">
<el-input-number v-model="aiForm.amount" :min="0" :controls="false" placeholder="单次付费金额(元)" style="width:100%" />
</el-form-item>
<el-form-item label="归属方式">
<el-select v-model="aiForm.allocation_type" style="width:100%">
<el-option label="指定项目" value="指定项目" />
<el-option label="内容组整体" value="内容组整体" />
<el-option label="手动分摊" value="手动分摊" />
<el-option label="指定项目 — 费用计入单个项目" value="指定项目" />
<el-option label="内容组整体 — 按所有项目均摊" value="内容组整体" />
<el-option label="手动分摊 — 后续手动指定比例" value="手动分摊" />
</el-select>
</el-form-item>
<el-form-item v-if="aiForm.allocation_type === '指定项目'" label="指定项目">
@ -80,20 +82,29 @@
<el-dialog v-model="showOutForm" title="新增外包成本" width="480px" destroy-on-close>
<el-form :model="outForm" label-width="100px">
<el-form-item label="所属项目">
<el-select v-model="outForm.project_id" style="width:100%">
<el-select v-model="outForm.project_id" placeholder="选择外包所属的项目" style="width:100%">
<el-option v-for="p in projects" :key="p.id" :label="p.name" :value="p.id" />
</el-select>
</el-form-item>
<el-form-item label="外包类型">
<el-select v-model="outForm.outsource_type" style="width:100%">
<el-option label="动画" value="动画" /><el-option label="剪辑" value="剪辑" /><el-option label="整集" value="整集" />
<el-select v-model="outForm.outsource_type" placeholder="外包的工作内容" style="width:100%">
<el-option label="动画 — 外包动画制作" value="动画" />
<el-option label="剪辑 — 外包剪辑/后期" value="剪辑" />
<el-option label="整集 — 整集外包" value="整集" />
</el-select>
</el-form-item>
<el-row :gutter="16">
<el-col :span="12"><el-form-item label="起始集"><el-input-number v-model="outForm.episode_start" :min="1" style="width:100%" /></el-form-item></el-col>
<el-col :span="12"><el-form-item label="结束集"><el-input-number v-model="outForm.episode_end" :min="1" style="width:100%" /></el-form-item></el-col>
</el-row>
<el-form-item label="金额"><el-input-number v-model="outForm.amount" :min="0" :controls="false" style="width:100%" /></el-form-item>
<el-form-item label="集数范围">
<div style="display:flex;align-items:center;gap:8px">
<span style="font-size:13px;color:var(--text-secondary)"></span>
<el-input-number v-model="outForm.episode_start" :min="1" style="width:100px" />
<span style="font-size:13px;color:var(--text-secondary)"> </span>
<el-input-number v-model="outForm.episode_end" :min="1" style="width:100px" />
<span style="font-size:13px;color:var(--text-secondary)"></span>
</div>
</el-form-item>
<el-form-item label="外包金额">
<el-input-number v-model="outForm.amount" :min="0" :controls="false" placeholder="外包总费用(元)" style="width:100%" />
</el-form-item>
<el-form-item label="录入日期"><el-date-picker v-model="outForm.record_date" value-format="YYYY-MM-DD" style="width:100%" /></el-form-item>
</el-form>
<template #footer>

View File

@ -75,23 +75,24 @@
<el-option v-for="u in users" :key="u.id" :label="u.name" :value="u.id" />
</el-select>
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="单集时长(分)" required>
<el-input-number v-model="form.episode_duration_minutes" :min="0.1" :step="0.5" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="集数" required>
<el-input-number v-model="form.episode_count" :min="1" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="单集时长" required>
<div class="inline-field">
<el-input-number v-model="form.episode_duration_minutes" :min="0.1" :step="0.5" style="width:140px" />
<span class="field-unit">分钟/</span>
</div>
</el-form-item>
<el-form-item label="集数" required>
<div class="inline-field">
<el-input-number v-model="form.episode_count" :min="1" style="width:140px" />
<span class="field-unit"></span>
<span class="field-hint">目标总时长 = {{ form.episode_duration_minutes }} × {{ form.episode_count }} = {{ (form.episode_duration_minutes * form.episode_count).toFixed(1) }} 分钟</span>
</div>
</el-form-item>
<el-form-item label="预估完成日期">
<el-date-picker v-model="form.estimated_completion_date" value-format="YYYY-MM-DD" style="width:100%" />
<el-date-picker v-model="form.estimated_completion_date" value-format="YYYY-MM-DD" placeholder="选择预计交付日期" style="width:100%" />
</el-form-item>
<el-form-item v-if="form.project_type === '客户正式项目'" label="合同金额">
<el-input-number v-model="form.contract_amount" :min="0" :step="10000" :controls="false" style="width:100%" />
<el-input-number v-model="form.contract_amount" :min="0" :step="10000" :controls="false" placeholder="甲方合同总金额(元)" style="width:100%" />
</el-form-item>
</el-form>
<template #footer>
@ -164,4 +165,7 @@ onMounted(async () => {
background: var(--bg-hover); padding: 2px 8px; border-radius: 4px; display: inline-block;
}
.rate-badge.danger { background: #FFE8E7; color: #FF3B30; }
.inline-field { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.field-unit { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }
.field-hint { font-size: 12px; color: var(--text-placeholder, #C0C4CC); margin-left: 4px; }
</style>

View File

@ -65,35 +65,36 @@
</el-form-item>
</el-col>
</el-row>
<el-form-item label="内容制作类型" required>
<el-select v-model="form.content_type" style="width:100%">
<el-option label="内容制作" value="内容制作" />
<el-option label="设定策划" value="设定策划" />
<el-option label="剪辑后期" value="剪辑后期" />
<el-form-item label="内容类型" required>
<el-select v-model="form.content_type" placeholder="本次提交的产出类型" style="width:100%">
<el-option label="内容制作 — 动画/视频制作" value="内容制作" />
<el-option label="设定策划 — 剧本/方案/设定图" value="设定策划" />
<el-option label="剪辑后期 — 剪辑/调色/合成" value="剪辑后期" />
<el-option label="其他" value="其他" />
</el-select>
</el-form-item>
<el-row :gutter="16">
<el-col :span="12">
<el-form-item label="产出(分钟)">
<el-input-number v-model="form.duration_minutes" :min="0" :step="1" style="width:100%" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="产出(秒)">
<el-input-number v-model="form.duration_seconds" :min="0" :step="5" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="投入时长(时)">
<el-input-number v-model="form.hours_spent" :min="0" :step="0.5" :precision="1" style="width:100%" placeholder="可选" />
<el-form-item label="产出时长">
<div class="inline-field">
<el-input-number v-model="form.duration_minutes" :min="0" :step="1" style="width:120px" />
<span class="field-unit"></span>
<el-input-number v-model="form.duration_seconds" :min="0" :max="59" :step="5" style="width:120px" />
<span class="field-unit"></span>
<span class="field-hint">无产出秒数的工作可填 0</span>
</div>
</el-form-item>
<el-form-item label="投入时长">
<div class="inline-field">
<el-input-number v-model="form.hours_spent" :min="0" :step="0.5" :precision="1" style="width:140px" />
<span class="field-unit">小时</span>
<span class="field-hint">选填实际花费的工作时间</span>
</div>
</el-form-item>
<el-form-item label="提交对象" required>
<el-select v-model="form.submit_to" style="width:100%">
<el-option label="组长" value="组长" />
<el-option label="制片" value="制片" />
<el-option label="内部" value="内部" />
<el-option label="外部" value="外部" />
<el-select v-model="form.submit_to" placeholder="本次内容提交给谁审阅" style="width:100%">
<el-option label="组长 — 日常提交给组长" value="组长" />
<el-option label="制片 — 直接提交给制片人" value="制片" />
<el-option label="内部 — 内部评审/测试" value="内部" />
<el-option label="外部 — 提交给甲方/客户" value="外部" />
</el-select>
</el-form-item>
<el-form-item label="制作描述">
@ -177,4 +178,7 @@ onMounted(async () => {
.page-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }
.page-header h2 { font-size: 18px; font-weight: 600; }
.filter-card { margin-bottom: 16px; background: var(--bg-card); border: 1px solid var(--border-color); border-radius: var(--radius-md); padding: 16px; }
.inline-field { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.field-unit { font-size: 13px; color: var(--text-secondary); white-space: nowrap; }
.field-hint { font-size: 12px; color: var(--text-placeholder, #C0C4CC); }
</style>

View File

@ -36,18 +36,24 @@
<el-form-item label="姓名"><el-input v-model="form.name" /></el-form-item>
<el-form-item v-if="!editingId" label="用户名"><el-input v-model="form.username" /></el-form-item>
<el-form-item v-if="!editingId" label="密码"><el-input v-model="form.password" type="password" /></el-form-item>
<el-form-item label="阶段组">
<el-select v-model="form.phase_group" style="width:100%">
<el-option label="前期" value="前期" /><el-option label="制作" value="制作" /><el-option label="后期" value="后期" />
<el-form-item label="所属阶段">
<el-select v-model="form.phase_group" placeholder="该成员主要参与的制作阶段" style="width:100%">
<el-option label="前期 — 剧本/策划/设定" value="前期" />
<el-option label="制作 — 动画/图片制作" value="制作" />
<el-option label="后期 — 剪辑/合成/调色" value="后期" />
</el-select>
</el-form-item>
<el-form-item label="角色">
<el-select v-model="form.role" style="width:100%">
<el-option label="成员" value="成员" /><el-option label="组长" value="组长" />
<el-option label="主管" value="主管" /><el-option label="Owner" value="Owner" />
<el-select v-model="form.role" placeholder="系统权限角色" style="width:100%">
<el-option label="成员 — 仅提交内容" value="成员" />
<el-option label="组长 — 管理本组提交" value="组长" />
<el-option label="主管 — 管理项目和人员" value="主管" />
<el-option label="Owner — 全部权限" value="Owner" />
</el-select>
</el-form-item>
<el-form-item label="月薪"><el-input-number v-model="form.monthly_salary" :min="0" :step="1000" :controls="false" style="width:100%" /></el-form-item>
<el-form-item label="月薪">
<el-input-number v-model="form.monthly_salary" :min="0" :step="1000" :controls="false" placeholder="月薪(元),日成本=月薪÷22" style="width:100%" />
</el-form-item>
<el-form-item v-if="editingId" label="状态">
<el-switch v-model="form.is_active" :active-value="1" :inactive-value="0" active-text="启用" inactive-text="停用" />
</el-form-item>