feat: 项目发布时间改为纯日期 (发布日期)

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
2026-10-08 14:07:27 +00:00
co-authored by Claude Code
parent 80ec8f707a
commit 4652ac83d1
+29 -26
View File
@@ -75,24 +75,17 @@
<el-row :gutter="12"> <el-row :gutter="12">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开始时间" prop="startTime"> <el-form-item label="开始时间" prop="startTime">
<el-date-picker v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" /> <el-date-picker v-model="form.startTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择开始时间" style="width:100%" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="结束时间" prop="endTime"> <el-form-item label="结束时间" prop="endTime">
<el-date-picker v-model="form.endTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" style="width:100%" /> <el-date-picker v-model="form.endTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择结束时间" style="width:100%" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="发布时间" prop="publishTime">
<el-date-picker v-model="form.publishTime" type="datetime" value-format="YYYY-MM-DD HH:mm:ss"
:disabled-date="disableFutureDate" placeholder="请选择发布时间" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<!-- ========== 第二区块:角色劳务设置 ========== --> <!-- ========== 第二区块:角色劳务设置 ========== -->
<div class="new-card-title">角色劳务设置</div> <div class="new-card-title">角色劳务设置</div>
<div v-for="(r, idx) in form.roleRows" :key="idx" class="role-row"> <div v-for="(r, idx) in form.roleRows" :key="idx" class="role-row">
@@ -132,6 +125,15 @@
</div> </div>
</div> </div>
<el-row :gutter="12">
<el-col :span="12">
<el-form-item label="发布日期" prop="publishTime">
<el-date-picker v-model="form.publishTime" type="date" value-format="YYYY-MM-DD"
:disabled-date="disableFutureDate" placeholder="请选择发布日期" style="width:100%" />
</el-form-item>
</el-col>
</el-row>
<!-- 底部按钮 (skill: 用 el-form-item 包裹, 不另起 div.form-actions) --> <!-- 底部按钮 (skill: 用 el-form-item 包裹, 不另起 div.form-actions) -->
<el-form-item class="form-actions"> <el-form-item class="form-actions">
<el-button @click="confirmCancel">取消</el-button> <el-button @click="confirmCancel">取消</el-button>
@@ -161,27 +163,27 @@ const fileInputRef = ref(null)
function defaultRoleRow() { return { role: '', customName: '', amount: 0 } } function defaultRoleRow() { return { role: '', customName: '', amount: 0 } }
function defaultNotice(key, label) { return { key, label, url: '', name: '' } } function defaultNotice(key, label) { return { key, label, url: '', name: '' } }
// 当前本地时间 "yyyy-MM-dd HH:mm:ss" (发布时间默认值/校验用, 与 el-date-picker 的本地时间口径一致; 不能用 toISOString 的 UTC) // 今天 "yyyy-MM-dd" (发布日期默认值/校验用, 取本地日期; 不能用 toISOString 的 UTC)
function nowLocalDatetime() { function todayLocalDate() {
const d = new Date() const d = new Date()
const p = n => String(n).padStart(2, '0') const p = n => String(n).padStart(2, '0')
return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}` return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`
} }
// 发布时间: 禁用今天之后的日历日期 (未来日期不可选) // 发布日期: 禁用今天之后的日历日期 (未来日期不可选)
function disableFutureDate(date) { function disableFutureDate(date) {
const today = new Date() const today = new Date()
today.setHours(0, 0, 0, 0) today.setHours(0, 0, 0, 0)
return date.getTime() > today.getTime() return date.getTime() > today.getTime()
} }
// 发布时间校验: 必填 + 不能晚于当前时间 // 发布日期校验: 必填 + 不能晚于今天
// value 是 "YYYY-MM-DD HH:mm:ss" 定长补零字符串, 字典序 = 时间序, 直接字符串比较 (无需 Date 解析/时区) // value 是 "YYYY-MM-DD" 定长补零字符串, 字典序 = 日期序, 直接字符串比较 (无需 Date 解析/时区)
function validatePublishTime(rule, value, callback) { function validatePublishTime(rule, value, callback) {
if (!value) { if (!value) {
callback(new Error('请选择发布时间')) callback(new Error('请选择发布日期'))
return return
} }
if (value > nowLocalDatetime()) { if (value > todayLocalDate()) {
callback(new Error('发布时间不能晚于当前时间')) callback(new Error('发布日期不能晚于今天'))
return return
} }
callback() callback()
@@ -199,8 +201,8 @@ const form = reactive({
isBidProject: 'N', isBidProject: 'N',
totalSessions: 0, totalAmount: 0, manageFee: 0, totalSessions: 0, totalAmount: 0, manageFee: 0,
startTime: '', endTime: '', startTime: '', endTime: '',
// 发布时间: 默认打开页面时的本地时间, 用户可修改 (不可设未来时间) // 发布日期: 默认今天, 用户可修改 (不可设未来日期)
publishTime: nowLocalDatetime(), publishTime: todayLocalDate(),
roleRows: [ roleRows: [
{ role: '主席', customName: '', amount: 0 }, { role: '主席', customName: '', amount: 0 },
{ role: '主持', customName: '', amount: 0 }, { role: '主持', customName: '', amount: 0 },
@@ -319,8 +321,8 @@ async function loadProject() {
form.manageFee = p.manageFee || 0 form.manageFee = p.manageFee || 0
form.startTime = p.startTime || '' form.startTime = p.startTime || ''
form.endTime = p.endTime || '' form.endTime = p.endTime || ''
// 发布时间: 已有值反显, 否则沿用页面打开时的默认时间 // 发布日期: 已有值反显 (后端 "yyyy-MM-dd HH:mm:ss", 取前 10 位日期), 否则默认今天
form.publishTime = p.publishTime || nowLocalDatetime() form.publishTime = (p.publishTime || '').slice(0, 10) || todayLocalDate()
form.leadUserId = p.leadUserId || null form.leadUserId = p.leadUserId || null
form.isBidProject = p.isBidProject || 'N' form.isBidProject = p.isBidProject || 'N'
// 角色劳务反显: biz_project.role_labor JSON 数组 [{role, customName, amount}] // 角色劳务反显: biz_project.role_labor JSON 数组 [{role, customName, amount}]
@@ -435,10 +437,11 @@ async function submit(mode = 'save') {
else if (n.key === 'notice') payload.publishUrl = n.url else if (n.key === 'notice') payload.publishUrl = n.url
else if (n.key === 'schedule') payload.scheduleUrl = n.url else if (n.key === 'schedule') payload.scheduleUrl = n.url
} }
// 发布时设置 is_published='Y' + publish_time (用表单里用户可编辑的发布时间) // 发布时设置 is_published='Y' + publish_time (用表单里用户可编辑的发布日期)
// 表单是纯日期 "yyyy-MM-dd", 后端 publishTime 是 Date(@JsonFormat "yyyy-MM-dd HH:mm:ss"), 补 00:00:00 提交
if (mode === 'publish') { if (mode === 'publish') {
payload.isPublished = 'Y' payload.isPublished = 'Y'
payload.publishTime = form.publishTime payload.publishTime = form.publishTime ? `${form.publishTime} 00:00:00` : ''
} }
// 多执行方分配已移至"项目分配"页面单独管理 // 多执行方分配已移至"项目分配"页面单独管理
try { try {