yxk-20260731
改善提案 新增提案时,提案部门默认选中当前登录部门,用户可改选本人所属的有效业务部门。候选范围严格限定为用户关联部门中 org_type='2' 且 org_category='2' 的记录,排除岗位、科室及其他组织节点。
This commit is contained in:
@@ -12,6 +12,7 @@ enum Api {
|
||||
importExcel = '/improvementproposal/improvementProposal/importExcel',
|
||||
exportXls = '/improvementproposal/improvementProposal/exportXls',
|
||||
queryDataById = '/improvementproposal/improvementProposal/queryById',
|
||||
myProposalDepartments = '/improvementproposal/improvementProposal/myProposalDepartments',
|
||||
improvementDeptScoreList = '/improvementproposal/improvementProposal/queryImprovementDeptScoreByMainId',
|
||||
improvementInstituteVoteList = '/improvementproposal/improvementProposal/queryImprovementInstituteVoteByMainId',
|
||||
getLatestProposalSequence = '/improvementproposal/improvementProposal/getLatestProposalSequence',
|
||||
@@ -97,6 +98,9 @@ export const saveOrUpdate = (params, isUpdate) => {
|
||||
*/
|
||||
export const queryDataById = (id) => defHttp.get({url: Api.queryDataById, params:{ id }});
|
||||
|
||||
/** 查询当前登录用户可作为改善提案归属的业务部门。 */
|
||||
export const queryMyProposalDepartments = () => defHttp.get({ url: Api.myProposalDepartments }, { successMessageMode: 'none' });
|
||||
|
||||
/**
|
||||
* 查询当前年份最新提案序号
|
||||
* @param year 年份
|
||||
|
||||
@@ -25,8 +25,19 @@
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="提案部门" :required="false" id="ImprovementProposalForm-proposalDeptId" name="proposalDeptId">
|
||||
<a-input v-model:value="formData.proposalDeptName" :disabled="true" allow-clear></a-input>
|
||||
<a-form-item label="提案部门" v-bind="validateInfos.proposalDeptId" id="ImprovementProposalForm-proposalDeptId" name="proposalDeptId">
|
||||
<a-select
|
||||
v-if="isCreateMode"
|
||||
v-model:value="formData.proposalDeptId"
|
||||
:disabled="disabled || proposalDeptOptions.length === 0"
|
||||
placeholder="请选择提案部门"
|
||||
@change="handleProposalDeptChange"
|
||||
>
|
||||
<a-select-option v-for="department in proposalDeptOptions" :key="department.id" :value="department.id">
|
||||
{{ department.departName }}
|
||||
</a-select-option>
|
||||
</a-select>
|
||||
<a-input v-else v-model:value="formData.proposalDeptName" :disabled="true" allow-clear></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
@@ -126,7 +137,7 @@
|
||||
import { defineComponent, ref, reactive, computed, toRaw, onMounted, nextTick } from 'vue';
|
||||
import { defHttp } from '/@/utils/http/axios';
|
||||
import { useValidateAntFormAndTable } from '/@/hooks/system/useJvxeMethods';
|
||||
import { queryImprovementDeptScoreListByMainId, queryImprovementInstituteVoteListByMainId, queryDataById, saveOrUpdate } from '../ImprovementProposal.api';
|
||||
import { queryImprovementDeptScoreListByMainId, queryImprovementInstituteVoteListByMainId, queryDataById, queryMyProposalDepartments, saveOrUpdate } from '../ImprovementProposal.api';
|
||||
import { JVxeTable } from '/@/components/jeecg/JVxeTable';
|
||||
import {improvementDeptScoreColumns, improvementInstituteVoteColumns} from '../ImprovementProposal.data';
|
||||
import JFormContainer from '/@/components/Form/src/container/JFormContainer.vue';
|
||||
@@ -174,6 +185,7 @@
|
||||
});
|
||||
const activeKey = ref('improvementDeptScore');
|
||||
const userStore = useUserStore();
|
||||
const proposalDeptOptions = ref<Record<string, any>[]>([]);
|
||||
|
||||
const formData = reactive<Record<string, any>>({
|
||||
id: '',
|
||||
@@ -198,6 +210,7 @@
|
||||
//表单验证
|
||||
const validatorRules = reactive({
|
||||
proposalName: [{ required: true, message: '请输入提案名称!'},],
|
||||
proposalDeptId: [{ required: true, message: '请选择提案部门!'},],
|
||||
applicantName: [{ required: true, message: '请输入申请人姓名!'},],
|
||||
proposalCategory: [{ required: true, message: '请选择提案类别!'},],
|
||||
problemDesc: [{ required: true, message: '请输入问题描述!'},],
|
||||
@@ -239,6 +252,7 @@
|
||||
|
||||
// 子表由流程节点维护,普通新增、编辑和详情弹窗均不展示,避免误改评分或投票数据。
|
||||
const showSubTables = computed(() => props.formBpm === true && Boolean(formData.id || props.formData?.dataId));
|
||||
const isCreateMode = computed(() => !formData.id && !props.formBpm);
|
||||
|
||||
function getCurrentDate() {
|
||||
const now = new Date();
|
||||
@@ -248,64 +262,36 @@
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
|
||||
function getCurrentLoginDepart() {
|
||||
const userInfo = (userStore.getUserInfo || {}) as Record<string, any>;
|
||||
const loginInfo = (userStore.getLoginInfo || {}) as Record<string, any>;
|
||||
let departs: any[] = [];
|
||||
if (Array.isArray(loginInfo.departs)) {
|
||||
departs = loginInfo.departs;
|
||||
} else if (Array.isArray(userInfo.departs)) {
|
||||
departs = userInfo.departs;
|
||||
} else if (loginInfo.userInfo && Array.isArray(loginInfo.userInfo.departs)) {
|
||||
departs = loginInfo.userInfo.departs;
|
||||
}
|
||||
if (userInfo.orgCode) {
|
||||
const found = departs.find((item) => item && item.orgCode === userInfo.orgCode);
|
||||
if (found) return found;
|
||||
}
|
||||
if (departs.length === 1) {
|
||||
return departs[0];
|
||||
}
|
||||
if (departs.length > 0) {
|
||||
return departs[0];
|
||||
}
|
||||
return undefined;
|
||||
|
||||
function handleProposalDeptChange(departmentId: string) {
|
||||
const department = proposalDeptOptions.value.find((item) => item.id === departmentId);
|
||||
formData.proposalDeptName = department?.departName || '';
|
||||
formData.proposalDeptCode = department?.orgCode || '';
|
||||
}
|
||||
|
||||
async function getCurrentDepartInfo() {
|
||||
const userInfo = (userStore.getUserInfo || {}) as Record<string, any>;
|
||||
const loginDepart = getCurrentLoginDepart();
|
||||
if (loginDepart) {
|
||||
return {
|
||||
id: loginDepart.id || '',
|
||||
departName: loginDepart.departName || loginDepart.name || '',
|
||||
orgCode: loginDepart.orgCode || '',
|
||||
};
|
||||
async function loadProposalDepartments() {
|
||||
proposalDeptOptions.value = [];
|
||||
try {
|
||||
const departments = await queryMyProposalDepartments();
|
||||
proposalDeptOptions.value = Array.isArray(departments) ? departments : [];
|
||||
} catch (error) {
|
||||
formData.proposalDeptId = '';
|
||||
formData.proposalDeptName = '';
|
||||
formData.proposalDeptCode = '';
|
||||
createMessage.error('可选提案部门加载失败,请刷新后重试');
|
||||
return;
|
||||
}
|
||||
if (userInfo.orgCode) {
|
||||
try {
|
||||
const depart = await defHttp.get({ url: '/sys/sysDepart/getDepartName', params: { orgCode: userInfo.orgCode } }, { successMessageMode: 'none' });
|
||||
if (depart && (depart.id || depart.departName)) {
|
||||
return {
|
||||
id: depart.id || '',
|
||||
departName: depart.departName || depart.depart_name || '',
|
||||
orgCode: userInfo.orgCode,
|
||||
};
|
||||
}
|
||||
} catch (e) {
|
||||
// ignore
|
||||
}
|
||||
const currentOrgCode = String(userStore.getUserInfo?.orgCode || '');
|
||||
const defaultDepartment = proposalDeptOptions.value.find((item) => item.orgCode === currentOrgCode) || proposalDeptOptions.value[0];
|
||||
if (!defaultDepartment) {
|
||||
formData.proposalDeptId = '';
|
||||
formData.proposalDeptName = '';
|
||||
formData.proposalDeptCode = '';
|
||||
createMessage.warning('当前用户未配置可用提案部门');
|
||||
return;
|
||||
}
|
||||
const deptId = userInfo.departIds || userInfo.deptId || userInfo.deptid || '';
|
||||
const deptName = userInfo.departIds_dictText || userInfo.orgCodeTxt || userInfo.deptName || '';
|
||||
return { id: deptId, departName: deptName, orgCode: userInfo.orgCode || '' };
|
||||
}
|
||||
|
||||
async function applyCurrentUserDeptInfo() {
|
||||
const departInfo = await getCurrentDepartInfo();
|
||||
formData.proposalDeptId = departInfo.id;
|
||||
formData.proposalDeptName = departInfo.departName;
|
||||
formData.proposalDeptCode = departInfo.orgCode;
|
||||
formData.proposalDeptId = defaultDepartment.id;
|
||||
handleProposalDeptChange(defaultDepartment.id);
|
||||
}
|
||||
|
||||
onMounted(()=>{
|
||||
@@ -340,7 +326,7 @@
|
||||
improvementDeptScoreTable.dataSource = [];
|
||||
improvementInstituteVoteTable.dataSource = [];
|
||||
formData.proposalDate = getCurrentDate();
|
||||
await applyCurrentUserDeptInfo();
|
||||
await loadProposalDepartments();
|
||||
}
|
||||
|
||||
async function edit(row) {
|
||||
@@ -450,6 +436,9 @@
|
||||
halfWrapperCol,
|
||||
disabled,
|
||||
showSubTables,
|
||||
isCreateMode,
|
||||
proposalDeptOptions,
|
||||
handleProposalDeptChange,
|
||||
showFlowSubmitButton,
|
||||
getFormData,
|
||||
submitForm,
|
||||
|
||||
Reference in New Issue
Block a user