feat(project-apply): 调整项目管理表单及搜索功能

- 项目编号放开编辑,新增时可输入,编辑时禁用
- 取消项目简称的必填校验,仅限制最大长度20
- 业务部门、项目由来说明表单项占满一行,优化布局
- 业务部门下拉增加过滤,重大项目补录模式不显示外部组织
- 新增变更编号及变更日期字段,关联变更类型显示
- 搜索栏将项目负责人由下拉切换为手动输入模糊查询
- 新增项目编号、客户名称、下游承运商三个搜索字段
- 清理无用的搜索工具函数和配置,优化代码结构
This commit is contained in:
2026-08-27 20:05:51 +08:00
parent 36cc9c751c
commit 704c3093d7
3 changed files with 45 additions and 105 deletions
+33 -7
View File
@@ -120,7 +120,12 @@
/>
</el-select>
</el-form-item>
<div v-if="isChangeDialog"></div>
<el-form-item v-if="isChangeDialog" label="变更编号" prop="changeNo">
<el-input v-model="form.changeNo" disabled placeholder="系统自动生成" />
</el-form-item>
<el-form-item v-if="isChangeDialog" label="变更日期" prop="changeDate">
<el-input v-model="form.changeDate" disabled placeholder="系统自动生成" />
</el-form-item>
<el-form-item label="项目类型" prop="projectType">
<el-select
v-model="form.projectType"
@@ -138,7 +143,11 @@
</el-select>
</el-form-item>
<el-form-item label="项目编号" prop="projectCode">
<el-input v-model="form.projectCode" disabled placeholder="系统自动生成" />
<el-input
v-model="form.projectCode"
placeholder="请输入项目编号,不填自动生成"
:disabled="dialogType === 'edit'"
/>
</el-form-item>
<el-form-item label="项目名称" prop="projectName">
<el-input
@@ -156,7 +165,7 @@
:disabled="isBasicInfoReadonly"
/>
</el-form-item>
<el-form-item label="业务部门" prop="businessDeptId">
<el-form-item label="业务部门" prop="businessDeptId" class="project-apply-form__item--full">
<el-tree-select
v-model="form.businessDeptId"
:data="businessDeptTreeOptions"
@@ -201,7 +210,7 @@
/>
</el-select>
</el-form-item>
<el-form-item label="项目由来说明" prop="sourceRemark">
<el-form-item label="项目由来说明" prop="sourceRemark" class="project-apply-form__item--full">
<el-input v-model="form.sourceRemark" maxlength="300" :disabled="isBasicInfoReadonly" />
</el-form-item>
</div>
@@ -790,6 +799,8 @@ const emptyForm = () => ({
projectSource: '商务洽谈',
sourceRemark: '',
changeType: '',
changeNo: '',
changeDate: '',
customerNames: '',
carrierNames: '',
fundLimit: '',
@@ -947,7 +958,6 @@ export default {
{ max: 50, message: '项目名称不能超过50个字符', trigger: 'blur' },
],
projectShortName: [
{ required: true, message: '请输入项目简称', trigger: 'blur' },
{ max: 20, message: '项目简称不能超过20个字符', trigger: 'blur' },
],
businessDeptId: [{ required: true, message: '请选择业务部门', trigger: 'change' }],
@@ -1193,9 +1203,12 @@ export default {
}
this.api.getDetail(id).then(res => {
const detail = res.data.data || {};
const isChange = type === 'change';
this.applyProjectDetail({
...detail,
changeType: type === 'change' ? this.resolveChangeType(detail) : detail.changeType,
changeType: isChange ? this.resolveChangeType(detail) : detail.changeType,
changeNo: isChange ? this.generateChangeNo(detail) : '',
changeDate: isChange ? this.$dayjs().format('YYYY-MM-DD') : '',
});
});
},
@@ -1786,6 +1799,10 @@ export default {
},
];
},
generateChangeNo(detail) {
const base = detail && detail.projectCode ? detail.projectCode : 'XM';
return `${base}-BG${this.$dayjs().format('YYYYMMDD')}`;
},
handleBusinessDeptChange(value) {
const dept = this.deptOptions.find(item => item.value === value);
this.form.businessDeptName = dept ? dept.rawLabel : '';
@@ -1803,7 +1820,7 @@ export default {
loadDeptOptions() {
getDeptTree().then(res => {
const deptTree = res.data.data || [];
const businessDeptTree = ['add', 'edit'].includes(this.dialogType)
const businessDeptTree = ['add', 'edit', 'majorSupplement'].includes(this.dialogType)
? this.excludeExternalOrganization(deptTree)
: deptTree;
const undertakeDeptTree =
@@ -2172,6 +2189,15 @@ export default {
min-width: 0 !important;
white-space: normal;
}
// 占满整行的表单项(业务部门 / 项目由来说明)
:deep(.project-apply-form__item--full) {
grid-column: 1 / -1;
.el-form-item__content {
width: 100%;
}
}
}
&__picker-icon {