明树Git Lab

Commit 0dcbdc2c authored by zhanghan's avatar zhanghan

需求处理完毕

parent bf1aa83c
Pipeline #111393 passed with stage
in 23 seconds
......@@ -127,6 +127,12 @@ const simpleLevelMap = {
3: 3,
4: 3,
5: 4,
7: 2,
8: 3,
9: 4,
13: 4,
14: 4,
15: 4,
};
const activeNodes = computed(() => {
......@@ -150,7 +156,6 @@ const highlightLevel = computed(() => {
});
const flowTitle = computed(() => {
if (props.flowType === "simple") return "立项审批流程";
return props.currentState >= 7 ? "决策审批流程" : "立项审批流程";
});
......
......@@ -53,36 +53,56 @@
<div class="process-project-name" v-if="processInfo.projectName">
项目名称:<span class="name">{{ processInfo.projectName }}</span>
</div>
<el-table
:data="processData"
border
style="width: 100%"
class="process-table"
:header-cell-style="{
background: '#f5f7fa',
color: '#333',
textAlign: 'center',
fontWeight: 600,
}"
:cell-style="{ textAlign: 'center' }"
>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="actionName" label="操作" min-width="120" />
<el-table-column label="操作人" min-width="100">
<template #default="{ row }">{{ row.creator?.name }}</template>
</el-table-column>
<el-table-column
prop="actionName"
label="项目步骤"
min-width="120"
/>
<el-table-column
prop="approvalMessage"
label="审核意见"
min-width="120"
/>
<el-table-column prop="createdAt" label="时间" min-width="160" />
</el-table>
<div class="process-section" v-if="lxProcessData.length">
<div class="process-section-title">立项审批</div>
<el-table
:data="lxProcessData"
border
style="width: 100%"
class="process-table"
:header-cell-style="{
background: '#f5f7fa',
color: '#333',
textAlign: 'center',
fontWeight: 600,
}"
:cell-style="{ textAlign: 'center' }"
>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="actionName" label="操作" min-width="120" />
<el-table-column label="操作人" min-width="100">
<template #default="{ row }">{{ row.creator?.name }}</template>
</el-table-column>
<el-table-column prop="actionName" label="项目步骤" min-width="120" />
<el-table-column prop="approvalMessage" label="审核意见" min-width="120" />
<el-table-column prop="createdAt" label="时间" min-width="160" />
</el-table>
</div>
<div class="process-section" v-if="jcProcessData.length">
<div class="process-section-title">决策审批</div>
<el-table
:data="jcProcessData"
border
style="width: 100%"
class="process-table"
:header-cell-style="{
background: '#f5f7fa',
color: '#333',
textAlign: 'center',
fontWeight: 600,
}"
:cell-style="{ textAlign: 'center' }"
>
<el-table-column type="index" label="序号" width="60" />
<el-table-column prop="actionName" label="操作" min-width="120" />
<el-table-column label="操作人" min-width="100">
<template #default="{ row }">{{ row.creator?.name }}</template>
</el-table-column>
<el-table-column prop="actionName" label="项目步骤" min-width="120" />
<el-table-column prop="approvalMessage" label="审核意见" min-width="120" />
<el-table-column prop="createdAt" label="时间" min-width="160" />
</el-table>
</div>
</div>
<div class="process-right">
<ProcessFlowChart
......@@ -135,7 +155,11 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
processData: {
lxProcessData: {
type: Array,
default: () => [],
},
jcProcessData: {
type: Array,
default: () => [],
},
......@@ -154,7 +178,7 @@ const emit = defineEmits(["save", "back", "export", "process"]);
const route = useRoute();
const router = useRouter();
const effectiveFlowType = computed(() => {
const firstRecord = props.processData[0];
const firstRecord = props.lxProcessData[0];
console.log('[FlowType] 发起人记录:', firstRecord ? JSON.stringify({
actionName: firstRecord.actionName,
creator: firstRecord.creator?.name,
......@@ -250,4 +274,17 @@ const handleProcess = () => {
font-weight: 700;
}
}
.process-section {
margin-bottom: 20px;
}
.process-section-title {
font-size: 15px;
font-weight: 600;
color: #333;
margin-bottom: 10px;
padding-left: 8px;
border-left: 3px solid #409eff;
}
</style>
......@@ -2,16 +2,12 @@
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<routerBack
:show-save="
!loading &&
!isPreview &&
(!formData.projectLzType ||
['1', '5', '7'].includes(formData.projectLzType.toString()))
"
:show-save="!loading && showSave"
:loading="loading"
:show-process="!!projectId"
:process-info="processInfo"
:process-data="processTableData"
:lx-process-data="lxProcessData"
:jc-process-data="jcProcessData"
:flow-type="flowType"
:current-state="currentFlowState"
@save="() => saveClick('save')"
......@@ -35,9 +31,7 @@
<el-tab-pane
label="决策信息填报"
name="决策信息填报"
v-if="
formData.projectLzType == '5' || formData.projectLzType == '7'
"
v-if="Number(lxType) >= 5"
:lazy="true"
>
<el-tabs v-model="jcTabActiveName">
......@@ -63,52 +57,41 @@
<template v-if="!loading && !isPreview">
<el-button
type="primary"
v-if="
formData.projectLzType == '1' &&
formData.projectCreator == userInfo?.id
"
v-if="showSubmitLixiang"
@click="saveClick('submit')"
>发起立项填报</el-button
>
<el-button
type="primary"
v-if="jcFormData.projectLzType == '7'"
v-if="showSubmitJuece"
@click="saveClick('submit')"
>发起决策信息填报</el-button
>
</template>
<el-button type="primary" @click="saveClick('save')"
<el-button type="primary" v-if="showSave" @click="saveClick('save')"
>保存</el-button
>
<el-button
v-if="formData.projectLzType == '3'"
type="primary"
v-if="showFirstAudit"
@click="auditDialogVisible = true"
>初审</el-button
>
<el-button
v-if="
formData?.daibanUsers?.includes(userInfo?.id) &&
hasApproveRole &&
formData.projectLzType == '4'
"
type="primary"
v-if="showAuditLixiang"
@click="auditDialogVisible = true"
>审核</el-button
>
<el-button
v-if="isPreview && jcFormData.projectLzType == '8'"
type="primary"
v-if="showAuditJuece"
@click="auditDialogVisible = true"
>审核</el-button
>
<el-button
v-if="
formData?.daibanUsers?.includes(userInfo?.id) &&
hasApproveRole &&
formData?.projectLzType == '2'
"
type="primary"
v-if="showApprove"
@click="approveDialogVisible = true"
>核准</el-button
>
......@@ -302,6 +285,49 @@ let loading = ref(false);
let isPreview = !!(route.query.isPreview || route.query.isProjectView);
let projectId = route.query.projectId;
const lxType = computed(() => formData.projectLzType?.toString());
const jcType = computed(() => jcFormData.projectLzType?.toString());
const isDaibanUser = computed(() =>
formData?.daibanUsers?.includes(userInfo?.id),
);
// 表单禁用状态:基于流程节点 + 待办人判断
const lxFormDisabled = computed(() => {
if (isPreview) return true;
if (!lxType.value) return false;
if (lxType.value === "1") return formData.projectCreator !== userInfo?.id;
if (["2", "3", "4", "5"].includes(lxType.value)) return !isDaibanUser.value;
return true;
});
const jcFormDisabled = computed(() => {
if (isPreview) return true;
if (["5", "7", "8"].includes(jcType.value)) return !isDaibanUser.value;
return true;
});
const showSave = computed(
() => !isPreview && (!formData.id || formData.projectCreator === userInfo?.id),
);
const showSubmitLixiang = computed(
() => lxType.value === "1" && formData.projectCreator === userInfo?.id,
);
const showSubmitJuece = computed(
() =>
jcType.value === "7" && formData.projectCreator === userInfo?.id,
);
const showFirstAudit = computed(
() => isDaibanUser.value && lxType.value === "3",
);
const showAuditLixiang = computed(
() => isDaibanUser.value && hasApproveRole && lxType.value === "4",
);
const showAuditJuece = computed(
() => isDaibanUser.value && jcType.value === "8",
);
const showApprove = computed(
() => isDaibanUser.value && hasApproveRole && lxType.value === "2",
);
// 下载文件
const downloadFile = (data) => {
let a = document.createElement("a");
......@@ -367,6 +393,7 @@ const getObjSums = (obj, objkey) => {
provide("lxShared", {
formData,
isPreview,
formDisabled: lxFormDisabled,
activeCollapse,
...lixiang,
downloadFile,
......@@ -381,6 +408,7 @@ provide("jcShared", {
jcFormData,
formData,
isPreview,
formDisabled: jcFormDisabled,
activeCollapse,
...juece,
...finance,
......@@ -448,7 +476,7 @@ const getProjectInfo = () => {
}
// 决策
let jcData = res.juece || res.lixiang || {};
let jcData = res.juece || {};
Object.assign(jcFormData, jcData);
if (res.juece) {
Object.assign(juece.jcSwlzbData, jcData.projectJsgms);
......@@ -518,7 +546,7 @@ const backClick = () => {
// 保存数据
const saveClick = (type) => {
if (!formData.projectLzType || formData.projectLzType.toString() === "1") {
if (!formData.projectLzType || Number(formData.projectLzType) <= 4) {
let url = formData.id
? type === "submit"
? "startLixiang"
......@@ -606,6 +634,12 @@ const processInfo = computed(() => ({
projectName: formData.projectName,
}));
const processTableData = ref([]);
const lxProcessData = computed(() =>
processTableData.value.filter((r) => !r.actionName?.includes("决策"))
);
const jcProcessData = computed(() =>
processTableData.value.filter((r) => r.actionName?.includes("决策"))
);
const getProcessData = () => {
proxy.$post({
url: "/api/project/getProFlowRecord",
......
......@@ -4,11 +4,7 @@
<el-form
:model="formData"
:label-width="150"
:disabled="
isPreview ||
(Number(formData.projectLzType) <= 5 &&
Number(formData.projectLzType) != 1)
"
:disabled="isPreview || Number(formData.projectLzType) >= 5"
>
<el-collapse v-model="activeCollapse">
<el-collapse-item
......@@ -262,6 +258,7 @@ import FileUploader from "@/components/FileUploader/index.vue";
const {
formData,
isPreview,
formDisabled,
activeCollapse,
tzzeqkjData,
cwpjzbData,
......
......@@ -4,11 +4,7 @@
<el-form
:model="formData"
label-width="200px"
:disabled="
isPreview ||
(Number(formData.projectLzType) <= 5 &&
Number(formData.projectLzType) != 1)
"
:disabled="isPreview || Number(formData.projectLzType) >= 5"
>
<el-collapse v-model="activeCollapse">
<el-collapse-item title="项目基本信息" name="项目基本信息">
......@@ -637,6 +633,7 @@ import FileUploader from "@/components/FileUploader/index.vue";
const {
formData,
isPreview,
formDisabled,
activeCollapse,
swlzbData,
gdxxData,
......
......@@ -24,6 +24,13 @@
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button
link
type="primary"
size="small"
@click="fillDecision(row)"
>编辑</el-button
>
<!-- 已立项 -->
<el-button
link
......@@ -33,6 +40,7 @@
@click="fillDecision(row)"
>决策填报</el-button
>
<!-- 立项审批中 -->
<el-button
link
......@@ -43,13 +51,6 @@
@click="viewDecision(row)"
>{{ canAudit ? "审批" : "查看" }}</el-button
>
<el-button
link
type="primary"
size="small"
@click="editProject(row)"
>编辑</el-button
>
</template>
</common-table>
</div>
......@@ -64,14 +65,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
import CommonTable from "@/components/common/commonTable.vue";
import SearchForm from "@/components/common/SearchForm.vue";
const editProject = (item) => {
router.push({
name: "addProject",
query: {
projectId: item.id,
},
});
};
const handleSearch = (formData) => {
currentPage.value = 1;
getProjectData(formData);
......@@ -123,7 +117,7 @@ let tableColumns = ref([
{
prop: "operations",
label: "操作",
width: 120,
width: 160,
slot: "operations",
fixed: "right",
align: "center",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment