feat(manager/plans + biz-project): 审核 dialog 项目编号改远程 el-select
后端 (BizProjectController):
- 新增 GET /business/project/projectNoOptions
- 返回 [{projectNo, projectName}], 仅 project_no 非空, 按 projectNo 倒序
- 不加 @PreAuthorize (manager 是业务角色, 与 specialPlan/options 一致)
前端 (manager/Plans.vue):
- 模板: 项目编号 el-input → el-select (filterable, 显示 projectNo / projectName)
- script: 加 projectNoOptions ref + loadProjectNoOptions() 函数
- onAudit: 每次打开 dialog 调 loadProjectNoOptions 拿最新 options
This commit is contained in:
+22
@@ -84,6 +84,28 @@ public class BizProjectController extends BaseController
|
|||||||
return getDataTable(list);
|
return getDataTable(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 项目编号下拉选项 (供 manager/Plans 审核 dialog "通过时" 选项目编号用)
|
||||||
|
* 返回 [{projectNo, projectName}], 仅 project_no 非空的项目, 按 project_no DESC
|
||||||
|
* 注: 不加 @PreAuthorize, 与 BizSpecialPlanController.options 一致 — manager 是业务角色
|
||||||
|
*/
|
||||||
|
@GetMapping("/projectNoOptions")
|
||||||
|
public AjaxResult projectNoOptions()
|
||||||
|
{
|
||||||
|
List<BizProject> all = bizProjectService.selectList(new BizProject());
|
||||||
|
java.util.List<java.util.Map<String, Object>> opts = new java.util.ArrayList<>();
|
||||||
|
for (BizProject p : all) {
|
||||||
|
if (p.getProjectNo() == null || p.getProjectNo().isEmpty()) continue;
|
||||||
|
java.util.Map<String, Object> m = new java.util.LinkedHashMap<>();
|
||||||
|
m.put("projectNo", p.getProjectNo());
|
||||||
|
m.put("projectName", p.getProjectName());
|
||||||
|
opts.add(m);
|
||||||
|
}
|
||||||
|
// 按 projectNo 倒序 (新 → 旧)
|
||||||
|
opts.sort((a, b) -> String.valueOf(b.get("projectNo")).compareTo(String.valueOf(a.get("projectNo"))));
|
||||||
|
return success(opts);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sponsor 专属项目列表 (按当前登录 sponsor 的 user_id 过滤)
|
* sponsor 专属项目列表 (按当前登录 sponsor 的 user_id 过滤)
|
||||||
* GET /business/project/sponsorList
|
* GET /business/project/sponsorList
|
||||||
|
|||||||
@@ -92,7 +92,9 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item v-if="auditForm.result === '2'" label="项目编号" prop="projectNo">
|
<el-form-item v-if="auditForm.result === '2'" label="项目编号" prop="projectNo">
|
||||||
<el-input v-model="auditForm.projectNo" placeholder="请填写项目编号" />
|
<el-select v-model="auditForm.projectNo" placeholder="请选择项目编号" filterable style="width:100%">
|
||||||
|
<el-option v-for="opt in projectNoOptions" :key="opt.projectNo" :label="opt.projectNo + (opt.projectName ? ' / ' + opt.projectName : '')" :value="opt.projectNo" />
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="审核意见">
|
<el-form-item label="审核意见">
|
||||||
<el-input v-model="auditForm.opinion" type="textarea" rows="3" placeholder="请填写审核意见 (可选)" />
|
<el-input v-model="auditForm.opinion" type="textarea" rows="3" placeholder="请填写审核意见 (可选)" />
|
||||||
@@ -164,6 +166,15 @@ async function loadPlanDirectionOptions() {
|
|||||||
} catch { planDirectionOptions.value = [] }
|
} catch { planDirectionOptions.value = [] }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 项目编号下拉选项: [{projectNo, projectName}], 审核通过时选择用
|
||||||
|
const projectNoOptions = ref([])
|
||||||
|
async function loadProjectNoOptions() {
|
||||||
|
try {
|
||||||
|
const { data } = await request.get('/business/project/projectNoOptions')
|
||||||
|
projectNoOptions.value = (data && data.data) || data || []
|
||||||
|
} catch { projectNoOptions.value = [] }
|
||||||
|
}
|
||||||
|
|
||||||
const q = ref({ planName: '', projectNo: '', planDirectionId: '', planCategory: '', status: '', isSettled: '', remark: '' })
|
const q = ref({ planName: '', projectNo: '', planDirectionId: '', planCategory: '', status: '', isSettled: '', remark: '' })
|
||||||
const rows = ref([]); const selection = ref([])
|
const rows = ref([]); const selection = ref([])
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
@@ -224,6 +235,7 @@ function onAudit(row) {
|
|||||||
auditForm.result = '2'
|
auditForm.result = '2'
|
||||||
auditForm.projectNo = ''
|
auditForm.projectNo = ''
|
||||||
auditForm.opinion = ''
|
auditForm.opinion = ''
|
||||||
|
loadProjectNoOptions()
|
||||||
auditOpen.value = true
|
auditOpen.value = true
|
||||||
}
|
}
|
||||||
async function submitAudit() {
|
async function submitAudit() {
|
||||||
|
|||||||
Reference in New Issue
Block a user