feat(xispeak): 优化流程审批表单权限控制和样式
- 新增 showBaseInfo/baseInfoReadonly 基础信息区域权限控制 - 新增 jiJianFieldsReadonly 纪检字段只读权限 - 隐藏落实方案、完成风险、拖期风险、父级节点、落实情况等字段 - 截止日期精度从时分秒改为日期 - 优化禁用态输入框/单选/数字输入样式 - 优化反馈附件列表样式 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -70,17 +70,17 @@
|
||||
<!-- </a-col>-->
|
||||
<a-col v-if="showJiJianFields" :span="12">
|
||||
<a-form-item label="检查情况(纪检)" name="checkStatus">
|
||||
<a-input v-model:value="formData.checkStatus" placeholder="填写监督检查情况,成果是否完整,符合,时间是否按时等" allow-clear />
|
||||
<a-input v-model:value="formData.checkStatus" placeholder="填写监督检查情况,成果是否完整,符合,时间是否按时等" :disabled="jiJianFieldsReadonly" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-if="showJiJianFields" :span="24">
|
||||
<a-form-item label="监督意见(纪检)" name="inspectionAdvice" :labelCol="wideLabelCol" :wrapperCol="wideWrapperCol">
|
||||
<a-textarea v-model:value="formData.inspectionAdvice" placeholder="是否通过审核" :rows="3" allow-clear />
|
||||
<a-textarea v-model:value="formData.inspectionAdvice" placeholder="是否通过审核" :rows="3" :disabled="jiJianFieldsReadonly" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col v-if="showJiJianFields" :span="12">
|
||||
<a-form-item label="措施数量(纪检)" name="measureNum">
|
||||
<a-input-number v-model:value="formData.measureNum" placeholder="填写本条举措设计的措施数量" style="width: 100%" allow-clear />
|
||||
<a-input-number v-model:value="formData.measureNum" placeholder="填写本条举措设计的措施数量" style="width: 100%" :disabled="jiJianFieldsReadonly" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="24">
|
||||
@@ -114,6 +114,7 @@
|
||||
const emit = defineEmits(['success']);
|
||||
const props = defineProps({
|
||||
showJiJianFields: { type: Boolean, default: false },
|
||||
jiJianFieldsReadonly: { type: Boolean, default: false },
|
||||
});
|
||||
const { createMessage } = useMessage();
|
||||
const userStore = useUserStore();
|
||||
|
||||
@@ -70,11 +70,11 @@
|
||||
<j-select-dept v-model:value="mainForm.implDept" :disabled="mainDisabled" :multiple="true" checkStrictly allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="落实方案" name="implPlan">
|
||||
<a-input v-model:value="mainForm.implPlan" :disabled="mainDisabled" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :span="12">-->
|
||||
<!-- <a-form-item label="落实方案" name="implPlan">-->
|
||||
<!-- <a-input v-model:value="mainForm.implPlan" :disabled="mainDisabled" allow-clear />-->
|
||||
<!-- </a-form-item>-->
|
||||
<!-- </a-col>-->
|
||||
<a-col :span="12">
|
||||
<a-form-item label="贯彻落实措施" name="implMeasures">
|
||||
<a-input v-model:value="mainForm.implMeasures" :disabled="mainDisabled" allow-clear />
|
||||
@@ -102,6 +102,7 @@
|
||||
dictCode="db_status"
|
||||
placeholder="请选择完成状态"
|
||||
type="radio"
|
||||
:stringToNumber="true"
|
||||
:disabled="mainDisabled"
|
||||
/>
|
||||
</a-form-item>
|
||||
@@ -110,8 +111,7 @@
|
||||
<a-form-item label="截止日期" name="deadline">
|
||||
<a-date-picker
|
||||
v-model:value="mainForm.deadline"
|
||||
value-format="YYYY-MM-DD HH:mm:ss"
|
||||
:show-time="true"
|
||||
value-format="YYYY-MM-DD"
|
||||
:disabled="mainDisabled"
|
||||
style="width: 100%"
|
||||
allow-clear
|
||||
@@ -123,14 +123,14 @@
|
||||
<a-input v-model:value="mainForm.reportFeedbackStatus" :disabled="mainDisabled" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="是否存在完成风险" name="isCompletionRisk">
|
||||
<a-radio-group v-model:value="mainForm.isCompletionRisk" :disabled="mainDisabled">
|
||||
<a-radio :value="0">不存在</a-radio>
|
||||
<a-radio :value="1">存在</a-radio>
|
||||
</a-radio-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :span="12">-->
|
||||
<!-- <a-form-item label="是否存在完成风险" name="isCompletionRisk">-->
|
||||
<!-- <a-radio-group v-model:value="mainForm.isCompletionRisk" :disabled="mainDisabled">-->
|
||||
<!-- <a-radio :value="0">不存在</a-radio>-->
|
||||
<!-- <a-radio :value="1">存在</a-radio>-->
|
||||
<!-- </a-radio-group>-->
|
||||
<!-- </a-form-item>-->
|
||||
<!-- </a-col>-->
|
||||
<a-col :span="12">
|
||||
<a-form-item label="是否需要督办领导" name="needSdwApproval">
|
||||
<a-radio-group v-model:value="mainForm.needSdwApproval" :disabled="mainDisabled">
|
||||
@@ -144,34 +144,34 @@
|
||||
<j-select-user v-model:value="mainForm.sdwLeaderList" :disabled="mainDisabled" :multiple="true" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="拖期风险应对措施" name="delayRiskMitigation">
|
||||
<a-input v-model:value="mainForm.delayRiskMitigation" :disabled="mainDisabled" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :span="12">-->
|
||||
<!-- <a-form-item label="拖期风险应对措施" name="delayRiskMitigation">-->
|
||||
<!-- <a-input v-model:value="mainForm.delayRiskMitigation" :disabled="mainDisabled" allow-clear />-->
|
||||
<!-- </a-form-item>-->
|
||||
<!-- </a-col>-->
|
||||
<a-col :span="12">
|
||||
<a-form-item label="督办次数" name="supervisionCount">
|
||||
<a-input-number v-model:value="mainForm.supervisionCount" :disabled="mainDisabled" style="width: 100%" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="父级节点" name="pid">
|
||||
<j-tree-select
|
||||
v-model:value="mainForm.pid"
|
||||
dict="bg_xi_speak,impl_status,id"
|
||||
pidField="pid"
|
||||
pidValue="0"
|
||||
hasChildField="has_child"
|
||||
:disabled="mainDisabled"
|
||||
allow-clear
|
||||
/>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item label="落实情况" name="implStatus">
|
||||
<a-textarea v-model:value="mainForm.implStatus" :auto-size="{ minRows: 1, maxRows: 7 }" :disabled="mainDisabled" allow-clear />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :span="12">-->
|
||||
<!-- <a-form-item label="父级节点" name="pid">-->
|
||||
<!-- <j-tree-select-->
|
||||
<!-- v-model:value="mainForm.pid"-->
|
||||
<!-- dict="bg_xi_speak,impl_status,id"-->
|
||||
<!-- pidField="pid"-->
|
||||
<!-- pidValue="0"-->
|
||||
<!-- hasChildField="has_child"-->
|
||||
<!-- :disabled="mainDisabled"-->
|
||||
<!-- allow-clear-->
|
||||
<!-- />-->
|
||||
<!-- </a-form-item>-->
|
||||
<!-- </a-col>-->
|
||||
<!-- <a-col :span="12">-->
|
||||
<!-- <a-form-item label="落实情况" name="implStatus">-->
|
||||
<!-- <a-textarea v-model:value="mainForm.implStatus" :auto-size="{ minRows: 1, maxRows: 7 }" :disabled="mainDisabled" allow-clear />-->
|
||||
<!-- </a-form-item>-->
|
||||
<!-- </a-col>-->
|
||||
</template>
|
||||
</a-row>
|
||||
</a-form>
|
||||
@@ -204,7 +204,7 @@
|
||||
:columns="feedbackColumns"
|
||||
:data-source="feedbackList"
|
||||
:pagination="false"
|
||||
:scroll="{ x: 2080 }"
|
||||
:scroll="{ x: 1980 }"
|
||||
>
|
||||
<template #bodyCell="{ column, record }">
|
||||
<template v-if="column.key === 'attachments'">
|
||||
@@ -220,9 +220,15 @@
|
||||
</template>
|
||||
</a-table>
|
||||
|
||||
<BgXiSpeakBPMFeedbackModal ref="feedbackModalRef" :showJiJianFields="showJiJianFields" @success="loadFeedbackList" />
|
||||
<BgXiSpeakBPMFeedbackModal
|
||||
ref="feedbackModalRef"
|
||||
:showJiJianFields="showJiJianFields"
|
||||
:jiJianFieldsReadonly="jiJianFieldsReadonly"
|
||||
@success="loadFeedbackList"
|
||||
/>
|
||||
|
||||
<template v-if="showProcessHandle">
|
||||
|
||||
<a-divider />
|
||||
<div class="process-header section-toolbar">
|
||||
<div class="section-title">流程办理</div>
|
||||
@@ -351,7 +357,7 @@
|
||||
{ title: '是否有报送上级报告', dataIndex: 'isReportedToHigher_dictText', align: 'center', width: 140 },
|
||||
{ title: '进展情况', dataIndex: 'progress', align: 'left', width: 200 },
|
||||
{ title: '落实情况', dataIndex: 'implStatus', align: 'left', width: 200 },
|
||||
{ title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 340 },
|
||||
{ title: '附件', dataIndex: 'id', key: 'attachments', align: 'left', width: 280 },
|
||||
];
|
||||
if (showJiJianFields.value) {
|
||||
cols.push(
|
||||
@@ -387,9 +393,11 @@
|
||||
if (explicit === '0') return false;
|
||||
if (explicit === '1') return true;
|
||||
// 未显式设置时,任一子属性开启则自动显示反馈区域
|
||||
return String(p?.showAddFeedback ?? p?.addfeedback ?? '') === '1'
|
||||
|| String(p?.showEditFeedback ?? p?.editfeedback ?? '') === '1'
|
||||
|| String(p?.showDeptFeedback ?? p?.deptfeedback ?? '') === '1';
|
||||
return (
|
||||
String(p?.showAddFeedback ?? p?.addfeedback ?? '') === '1' ||
|
||||
String(p?.showEditFeedback ?? p?.editfeedback ?? '') === '1' ||
|
||||
String(p?.showDeptFeedback ?? p?.deptfeedback ?? '') === '1'
|
||||
);
|
||||
});
|
||||
const showEditFeedback = computed(
|
||||
() => String(props.formData?.extendUrlParams?.showEditFeedback ?? props.formData?.extendUrlParams?.editfeedback ?? '') === '1'
|
||||
@@ -398,6 +406,7 @@
|
||||
() => String(props.formData?.extendUrlParams?.showDeptFeedback ?? props.formData?.extendUrlParams?.deptfeedback ?? '') === '1'
|
||||
);
|
||||
const showJiJianFields = computed(() => String(props.formData?.extendUrlParams?.showJiJianFields ?? '') === '1');
|
||||
const jiJianFieldsReadonly = computed(() => String(props.formData?.extendUrlParams?.jiJianFieldsReadonly ?? '') === '1');
|
||||
const showDeptFields = computed(() => String(props.formData?.extendUrlParams?.deptfields ?? '') === '1');
|
||||
const showSubApproveUser = computed(
|
||||
() => String(props.formData?.extendUrlParams?.showSubApproveUser ?? props.formData?.extendUrlParams?.selectuser ?? '') === '1'
|
||||
@@ -438,7 +447,7 @@
|
||||
if (!dataId) {
|
||||
return;
|
||||
}
|
||||
showBaseInfoDetail.value = false;
|
||||
showBaseInfoDetail.value = true;
|
||||
loading.value = true;
|
||||
try {
|
||||
const data = await defHttp.get({ url: queryByIdUrl, params: { id: dataId } });
|
||||
@@ -713,6 +722,7 @@
|
||||
}
|
||||
|
||||
:deep(.ant-input),
|
||||
:deep(.ant-input-number),
|
||||
:deep(.ant-picker),
|
||||
:deep(.ant-select-selector) {
|
||||
min-height: 30px;
|
||||
@@ -730,6 +740,9 @@
|
||||
:deep(.ant-input-outlined[disabled]),
|
||||
:deep(.ant-input-outlined.ant-input-disabled),
|
||||
:deep(textarea.ant-input[disabled]),
|
||||
:deep(.ant-input-number-disabled),
|
||||
:deep(.ant-input-number-disabled:hover),
|
||||
:deep(.ant-input-number-disabled:focus),
|
||||
:deep(.ant-picker-disabled),
|
||||
:deep(.ant-select-disabled .ant-select-selector) {
|
||||
background: transparent !important;
|
||||
@@ -743,6 +756,7 @@
|
||||
:deep(.ant-input[disabled]),
|
||||
:deep(.ant-input-disabled),
|
||||
:deep(.ant-input-affix-wrapper-disabled),
|
||||
:deep(.ant-input-number-disabled),
|
||||
:deep(textarea.ant-input[disabled]) {
|
||||
padding-left: 0 !important;
|
||||
padding-right: 0 !important;
|
||||
@@ -754,6 +768,13 @@
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
:deep(.ant-input-number-disabled .ant-input-number-input) {
|
||||
background: transparent !important;
|
||||
color: #1f2937 !important;
|
||||
-webkit-text-fill-color: #1f2937 !important;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
:deep(.ant-input[disabled]::placeholder),
|
||||
:deep(.ant-input-disabled::placeholder),
|
||||
:deep(.ant-input-affix-wrapper-disabled .ant-input::placeholder) {
|
||||
@@ -788,9 +809,23 @@
|
||||
:deep(.ant-picker-disabled .ant-picker-suffix),
|
||||
:deep(.ant-input-disabled .ant-input-clear-icon),
|
||||
:deep(.ant-input-affix-wrapper-disabled .ant-input-clear-icon),
|
||||
:deep(.ant-input-number-disabled .ant-input-number-handler-wrap),
|
||||
:deep(.ant-select-disabled .ant-select-clear) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.ant-radio-wrapper-disabled) {
|
||||
color: #1f2937 !important;
|
||||
cursor: default !important;
|
||||
}
|
||||
|
||||
:deep(.ant-radio-wrapper-disabled:not(.ant-radio-wrapper-checked)) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.ant-radio-disabled .ant-radio-inner) {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.feedback-header {
|
||||
@@ -820,11 +855,12 @@
|
||||
}
|
||||
|
||||
.feedback-attachment-list {
|
||||
min-width: 300px;
|
||||
min-width: 240px;
|
||||
|
||||
:deep(.file-list-wrapper) {
|
||||
min-height: auto;
|
||||
padding: 8px;
|
||||
min-height: 20px;
|
||||
max-height: 50px;
|
||||
padding: 4px 8px;
|
||||
}
|
||||
|
||||
:deep(.file-list-header) {
|
||||
@@ -839,6 +875,18 @@
|
||||
|
||||
:deep(.ant-empty) {
|
||||
margin: 0;
|
||||
padding: 4px 0;
|
||||
|
||||
.ant-empty-image {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.ant-empty-description {
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
Reference in New Issue
Block a user