@@ -25,7 +25,7 @@
|
||||
<el-form-item label="项目负责人">
|
||||
<el-select v-model="form.leadUserId" placeholder="请选择合规管理员" filterable clearable :filter-method="searchManagers" style="width:100%">
|
||||
<el-option v-for="u in managerOptions" :key="u.userId"
|
||||
:label="`${u.userName}${u.nickName ? ' (' + u.nickName + ')' : ''}`" :value="u.userId" />
|
||||
:label="`${u.nickName || u.userName}${u.nickName && u.userName ? ' (' + u.userName + ')' : ''}`" :value="u.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -51,19 +51,19 @@
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="总场次/总期数" prop="totalSessions">
|
||||
<el-input-number v-model="form.totalSessions" :min="1" style="width:100%" />
|
||||
<div class="num-input"><el-input-number v-model="form.totalSessions" :min="1" /></div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="12">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="总金额(元)" prop="totalAmount">
|
||||
<el-input-number v-model="form.totalAmount" :min="0" :precision="2" style="width:100%" />
|
||||
<div class="num-input"><el-input-number v-model="form.totalAmount" :min="0" :precision="2" /></div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="管理费(元)">
|
||||
<el-input-number v-model="form.manageFee" :min="0" :precision="2" style="width:100%" />
|
||||
<div class="num-input"><el-input-number v-model="form.manageFee" :min="0" :precision="2" /></div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -83,14 +83,16 @@
|
||||
<!-- ========== 第二区块:角色劳务设置 ========== -->
|
||||
<div class="new-card-title">角色劳务设置</div>
|
||||
<div v-for="(r, idx) in form.roleRows" :key="idx" class="role-row">
|
||||
<el-select v-model="r.role" placeholder="请选择" style="width:160px" @change="onRoleSelectChange(r)">
|
||||
<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>
|
||||
<div class="role-select">
|
||||
<el-select v-model="r.role" placeholder="请选择" @change="onRoleSelectChange(r)">
|
||||
<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>
|
||||
</div>
|
||||
<el-input v-if="r.role === '其他'" v-model="r.customName" placeholder="角色名" class="role-custom" />
|
||||
<el-input-number v-model="r.amount" :min="0" :precision="2" placeholder="劳务金额" class="role-amount" />
|
||||
<div class="row-actions">
|
||||
@@ -104,15 +106,16 @@
|
||||
<div class="notice-list">
|
||||
<div v-for="(n, idx) in form.notices" :key="idx" class="notice-row">
|
||||
<span class="notice-label">{{ n.label }}</span>
|
||||
<oss-file-uploader
|
||||
class="notice-uploader"
|
||||
v-model="n.url"
|
||||
:dir="`ry8080/project/${n.key}/`"
|
||||
accept=".pdf,.png,.jpg,.jpeg,.gif,.webp"
|
||||
:placeholder="`点击上传${n.label}`"
|
||||
hint="支持 PDF / 图片"
|
||||
block
|
||||
/>
|
||||
<div class="notice-uploader">
|
||||
<oss-file-uploader
|
||||
v-model="n.url"
|
||||
:dir="`ry8080/project/${n.key}/`"
|
||||
accept=".pdf,.png,.jpg,.jpeg,.gif,.webp"
|
||||
:placeholder="`点击上传${n.label}`"
|
||||
hint="支持 PDF / 图片"
|
||||
block
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -397,9 +400,14 @@ async function submit(mode = 'save') {
|
||||
.hint-text p { margin-bottom: 4px; }
|
||||
.hint-text p:last-child { margin-bottom: 0; }
|
||||
.role-row { display: flex; align-items: center; gap: 12px; padding: 6px 0; }
|
||||
.role-select { width: 160px; flex-shrink: 0; display: flex; align-items: center; }
|
||||
.role-custom { flex: 1; max-width: 180px; }
|
||||
.role-amount { width: 180px; }
|
||||
.row-actions { display: flex; gap: 8px; }
|
||||
/* 项目信息数字输入框: 桌面限制宽度, 不撑满双列 */
|
||||
.num-input { width: 200px; max-width: 100%; }
|
||||
/* 公告文件上传: 限制最大宽度, 上传按钮不要太长 */
|
||||
.notice-uploader { flex: 1; min-width: 0; max-width: 480px; }
|
||||
.notice-list { display: flex; flex-direction: column; gap: 10px; }
|
||||
.notice-row { display: flex; align-items: stretch; gap: 12px; margin-bottom: 12px; }
|
||||
.notice-label {
|
||||
@@ -437,82 +445,79 @@ async function submit(mode = 'save') {
|
||||
/* ========================================
|
||||
移动端适配 (≤768px)
|
||||
- 卡片 padding 收窄
|
||||
- 工具栏横向滚动
|
||||
- filter-form: label 与输入框横向
|
||||
- 表格字号收紧
|
||||
- el-row 双列 → 单列, form-item 横向 (label-width=120px 桌面默认沿用, 让 Element Plus 自然对齐)
|
||||
- 角色劳务行 / 公告文件行 / 底部按钮: 紧凑布局
|
||||
======================================== */
|
||||
@media (max-width: 768px) {
|
||||
/* 卡片 padding */
|
||||
.page-card { padding: 12px !important; border-radius: 4px !important; }
|
||||
.manager-projects-new { padding: 12px !important; border-radius: 4px !important; }
|
||||
.breadcrumb { font-size: 12px !important; margin-bottom: 8px !important; }
|
||||
|
||||
/* 工具栏: 横向滚动 */
|
||||
.toolbar {
|
||||
flex-wrap: nowrap !important;
|
||||
overflow-x: auto;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
padding-bottom: 6px;
|
||||
margin-bottom: 8px !important;
|
||||
scrollbar-width: thin;
|
||||
}
|
||||
.toolbar::-webkit-scrollbar { height: 4px; }
|
||||
.toolbar::-webkit-scrollbar-thumb { background: var(--brand-slate-200); border-radius: 2px; }
|
||||
.toolbar :deep(.action-btn),
|
||||
.toolbar :deep(.el-button) {
|
||||
flex-shrink: 0;
|
||||
font-size: 12px !important;
|
||||
padding: 0 10px !important;
|
||||
height: 30px !important;
|
||||
/* 章节标题间距收紧 */
|
||||
.new-card-title { font-size: 13px !important; margin: 12px 0 8px !important; }
|
||||
|
||||
/* 双列 → 单列: el-row 强制 block, el-col 100% 宽 */
|
||||
.project-form :deep(.el-row) { display: block !important; }
|
||||
.project-form :deep(.el-col) {
|
||||
width: 100% !important;
|
||||
max-width: 100% !important;
|
||||
flex: 0 0 100% !important;
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
/* filter-form: 横向 (label 左 + input 右) */
|
||||
.filter-form {
|
||||
/* form-item: 横向 label + content, flex-start 让 error message 占独立行
|
||||
不动 __label 的 float/width/height/line-height — Element Plus 自带 label-width=120px
|
||||
自然右对齐 + 跟随 content 行高, 不会参差不齐 */
|
||||
.project-form :deep(.el-form-item) {
|
||||
display: flex !important;
|
||||
flex-direction: column !important;
|
||||
align-items: stretch !important;
|
||||
gap: 10px !important;
|
||||
}
|
||||
.filter-form :deep(.el-form-item) {
|
||||
display: flex !important;
|
||||
align-items: center !important;
|
||||
align-items: flex-start !important;
|
||||
margin-right: 0 !important;
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
.filter-form :deep(.el-form-item__label) {
|
||||
float: none !important;
|
||||
width: auto !important;
|
||||
min-width: 80px !important;
|
||||
text-align: right !important;
|
||||
padding: 0 8px 0 0 !important;
|
||||
font-size: 13px !important;
|
||||
color: var(--el-text-color-regular) !important;
|
||||
line-height: 32px !important;
|
||||
height: 32px !important;
|
||||
}
|
||||
.filter-form :deep(.el-form-item__content) {
|
||||
margin-left: 0 !important;
|
||||
line-height: 32px !important;
|
||||
.project-form :deep(.el-form-item__content) {
|
||||
flex: 1 !important;
|
||||
min-width: 0 !important;
|
||||
}
|
||||
|
||||
/* 强制所有控件全宽 */
|
||||
.filter-form :deep(.el-select),
|
||||
.filter-form :deep(.el-input),
|
||||
.filter-form :deep(.el-date-editor),
|
||||
.filter-form :deep(.el-button),
|
||||
.filter-form :deep(.el-cascader) {
|
||||
/* 表单控件全宽, 强制拉伸 (项目信息 section 的输入控件全宽)
|
||||
注意: .role-row 内的控件有 .role-select/.role-amount 容器保护, 不会吃这条规则 */
|
||||
.project-form :deep(.el-form-item .el-select),
|
||||
.project-form :deep(.el-form-item .el-input),
|
||||
.project-form :deep(.el-form-item .el-textarea),
|
||||
.project-form :deep(.el-form-item .el-date-editor),
|
||||
.project-form :deep(.el-form-item .el-input-number),
|
||||
.project-form :deep(.el-form-item .el-cascader) {
|
||||
width: 100% !important;
|
||||
min-width: 0 !important;
|
||||
margin-left: 0 !important;
|
||||
margin-right: 0 !important;
|
||||
display: block !important;
|
||||
}
|
||||
.filter-form :deep(.el-button + .el-button) {
|
||||
margin-top: 8px !important;
|
||||
}
|
||||
|
||||
/* 表格字号收紧 */
|
||||
:deep(.el-table) { font-size: 12px !important; }
|
||||
/* 数字输入框: 移动端占满 (有 .num-input 容器保护, 不会挤压其它数字输入) */
|
||||
.project-form .num-input { width: 100% !important; }
|
||||
|
||||
/* 角色劳务行: 保持桌面原有横向布局 (角色/金额/删除) 一行, 不被表单规则拉宽 */
|
||||
.role-row { flex-wrap: wrap !important; gap: 6px !important; }
|
||||
.role-row .role-select { width: 110px !important; flex-shrink: 0; display: flex !important; align-items: center !important; }
|
||||
.role-row .role-amount { width: 130px !important; flex-shrink: 0; }
|
||||
.role-row .row-actions { margin-left: auto; }
|
||||
|
||||
/* 公告文件行: 横向 (label + uploader), label 顶部对齐 */
|
||||
.notice-row { gap: 8px !important; margin-bottom: 10px !important; }
|
||||
.notice-label {
|
||||
width: 70px !important;
|
||||
font-size: 12px !important;
|
||||
}
|
||||
/* 移动端: uploader 限制固定宽度 280px (不撑满不溢出) */
|
||||
.notice-uploader { width: 280px !important; max-width: 100% !important; min-width: 0 !important; flex: none !important; }
|
||||
|
||||
/* 底部按钮: 等宽并排 */
|
||||
.form-actions :deep(.el-form-item__content) {
|
||||
display: flex !important;
|
||||
flex-wrap: wrap !important;
|
||||
gap: 8px !important;
|
||||
}
|
||||
.form-actions :deep(.el-button) {
|
||||
flex: 1 1 0 !important;
|
||||
width: 0 !important;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user