明树Git Lab

Commit de3122d4 authored by zhanghan's avatar zhanghan

重大事项审批完成

parent 485bc38d
Pipeline #106427 passed with stage
in 16 seconds
<template>
<div class="file-uploader-container" :class="isInline ? 'inline' : ''">
<!-- 上传按钮区域 -->
<el-upload
:action="uploadUrl"
:headers="headers"
:show-file-list="false"
multiple
:disabled="disabled"
:on-success="handleUploadSuccess"
:before-upload="beforeUpload"
>
<el-button type="default" :disabled="disabled">上传</el-button>
</el-upload>
<el-button
<div class="uploadFlex">
<el-upload
:action="uploadUrl"
:headers="headers"
:show-file-list="false"
multiple
:disabled="disabled"
:on-success="handleUploadSuccess"
:before-upload="beforeUpload"
>
<el-button type="default" :disabled="disabled">上传</el-button>
</el-upload>
<el-button
v-if="!isInline"
type="default"
@click="handleMultiDelete"
:disabled="!selectedIds.length || disabled"
class="multi-delete-btn"
>
删除选中文件
</el-button>
</div>
<!-- 文件列表表格 -->
<el-table
v-if="!isInline"
type="default"
@click="handleMultiDelete"
:disabled="!selectedIds.length || disabled"
class="multi-delete-btn"
:data="fileList"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="handleSelectionChange"
class="file-table"
>
删除选中文件
</el-button>
<!-- 文件列表表格 -->
<el-form-item :label="label" v-if="!isInline">
<el-table
:data="fileList"
style="width: 100%"
empty-text="暂无数据"
border
@selection-change="handleSelectionChange"
class="file-table"
>
<el-table-column type="selection" width="55" :disabled="disabled" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间">
<template #default="{ row }">
<span>{{ formatDate(row.updatedAt) }}</span>
</template>
</el-table-column>
<el-table-column prop="size" label="大小" />
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="download-btn" @click="handleDownload(row)">下载</span>
<el-button
link
type="danger"
size="small"
@click="handleDelete($index)"
:disabled="disabled"
class="delete-btn"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-table-column type="selection" width="55" :disabled="disabled" />
<el-table-column prop="originalname" label="文件名" />
<el-table-column prop="updatedAt" label="上传时间">
<template #default="{ row }">
<span>{{ formatDate(row.updatedAt) }}</span>
</template>
</el-table-column>
<el-table-column prop="size" label="大小" />
<el-table-column fixed="right" label="操作" width="100">
<template #default="{ row, $index }">
<span class="download-btn" @click="handleDownload(row)">下载</span>
<el-button
link
type="danger"
size="small"
@click="handleDelete($index)"
:disabled="disabled"
class="delete-btn"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
<div v-else class="inline-file-wrapper">
<el-popover
v-model:visible="popoverVisible"
......@@ -294,19 +294,30 @@ watch(
);
</script>
<style scoped>
<style scoped lang="less">
.file-uploader-container {
width: 100%;
}
// ::v-deep .el-form-item__label {
// font-weight: 600;
// color: #509eff !important;
// }
.multi-delete-btn {
margin-left: 10px;
}
.uploadFlex {
display: flex;
margin-bottom: 16px;
}
.inline {
display: flex;
align-items: center;
gap: 10px;
.uploadFlex {
display: flex;
margin-bottom: 0;
}
}
.inline-file-wrapper {
......
......@@ -128,6 +128,18 @@ const routes = [
component: () =>
import("@/views/investingManage/constructionAdd.vue"),
},
{
path: "/bigIssues",
name: "bigIssues",
title: "重大事项审批",
component: () => import("@/views/investingManage/bigIssues.vue"),
},
{
path: "/bigIssuesAdd",
name: "bigIssuesAdd",
title: "重大事项审批",
component: () => import("@/views/investingManage/bigIssuesAdd.vue"),
},
],
},
{
......
......@@ -122,8 +122,6 @@ const getStatementData = () => {
pagesize: pageSize.value,
},
callback: (data) => {
console.log(data, "data");
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
......
......@@ -499,8 +499,6 @@ const subtotalNum = computed(() => {
const num = Number(item.ywlr) || 0; // 兼容空值/非数字
return sum + num;
}, 0);
console.log(totalYwlr, "totalYwlr");
console.log(totalHtje, "totalHtje");
return (totalHtje + totalYwlr).toFixed(2);
});
......@@ -675,9 +673,6 @@ const getProjectData = () => {
callback: (data) => {
projectList.value = data.rows || [];
},
errorCallback: () => {
ElMessage.error("获取项目列表失败");
},
});
};
......@@ -710,10 +705,6 @@ const getRcCgqyglDetail = () => {
Object.assign(tzfhs.value, data.tzfhs);
}
},
errorCallback: () => {
loading.value = false;
ElMessage.error("网络异常,获取数据失败");
},
});
};
......
<template>
<div class="manage-container">
<div class="manage-wrap">
<div class="manage-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="bigIssuesAdd">新增</el-button>
</div>
</div>
<div class="manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button
link
type="primary"
size="small"
@click="previewStatement(row)"
>查看</el-button
>
<el-button
link
type="primary"
size="small"
@click="editStatement(row)"
>编辑</el-button
>
<el-button
link
type="danger"
size="small"
@click="deleteStatement(row)"
>删除</el-button
>
</template>
</common-table>
</div>
</div>
</div>
</template>
<script setup>
import { ref, onMounted, getCurrentInstance } from "vue";
import { useRouter } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
const router = useRouter();
const { proxy } = getCurrentInstance();
let tableData = ref([]);
let tableColumns = ref([
{
prop: "projectName",
label: "项目信息",
showOverflowTooltip: true,
width: 400,
},
{
prop: "htNum",
label: "合同类文件数",
showOverflowTooltip: true,
},
{
prop: "zjNum",
label: "造价文件数",
showOverflowTooltip: true,
},
{
prop: "spNum",
label: "变更索赔文件数",
showOverflowTooltip: true,
},
{
prop: "gsNum",
label: "工商出资文件数",
showOverflowTooltip: true,
},
{
prop: "qtNum",
label: "其他文件数",
showOverflowTooltip: true,
},
{
prop: "operations",
label: "操作",
width: 170,
slot: "operations",
fixed: "right",
align: "center",
},
]);
let loading = ref(false);
let total = ref(0);
let currentPage = ref(1);
let pageSize = ref(10);
// 获取列表数据
const getStatementData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/getZdsxspList",
data: {
page: currentPage.value,
pagesize: pageSize.value,
},
callback: (data) => {
tableData.value = data.rows.map((it) => {
return {
...it,
htNum: it.qylht?.length + it.jjlht?.length,
zjNum: it.zjwj?.length + it.ybfspwj?.length,
spNum: it.bgsp?.length,
gsNum: it.gqjg?.length + it.cwjr?.length,
qtNum: it.qt?.length,
};
});
total.value = data.count;
loading.value = false;
},
});
};
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getStatementData();
};
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getStatementData();
};
const bigIssuesAdd = () => {
router.push("/bigIssuesAdd");
};
const editStatement = (item) => {
router.push({
name: "bigIssuesAdd",
query: {
id: item.id,
},
});
};
const previewStatement = (item) => {
router.push({
name: "bigIssuesAdd",
query: {
isPreview: true,
id: item.id,
},
});
};
const deleteStatement = (item) => {
ElMessageBox.confirm("确认删除该项?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
proxy.$post({
url: "/api/project/deleteZdsxsp",
data: {
id: item.id,
},
callback: (data) => {
ElMessage.success("删除成功");
getStatementData();
},
});
})
.catch(() => {});
};
onMounted(() => {
getStatementData();
});
</script>
<style scoped lang="less">
@import "@/styles/manage.less";
</style>
<template>
<div class="add-project-container">
<div class="add-project-content" v-loading="loading">
<div class="add-project-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="default" @click="backClick">返回</el-button>
<template v-if="!loading && !isPreview">
<el-button type="primary" @click="saveClick">保存</el-button>
</template>
</div>
</div>
<div class="tabs-content">
<div class="project-tab-content">
<div class="tab-content">
<el-form :model="formData" :label-width="200" :disabled="isPreview">
<!-- 项目信息选择 -->
<el-row :gutter="20" style="margin-bottom: 20px">
<el-col :span="12">
<el-form-item label="项目信息" required>
<el-select
v-model="formData.projectId"
placeholder="请选择项目信息"
no-data-text="暂无数据"
@change="changeProject"
>
<el-option
v-for="item in projectList"
:key="item.key"
:label="item.projectName"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- 分类标签页 -->
<el-tabs v-model="pageActiveName" type="border-card">
<!-- 合同类 -->
<el-tab-pane label="合同类" name="合同类">
<el-row :gutter="20">
<!-- 权益类合同 -->
<el-col :span="24">
<el-form-item label="权益类合同">
<FileUploader v-model="formData.qylht" />
</el-form-item>
</el-col>
<!-- 经济类合同 -->
<el-col :span="24">
<el-form-item label="经济类合同">
<FileUploader v-model="formData.jjlht" />
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<!-- 造价类 -->
<el-tab-pane label="造价类" name="造价类">
<el-row :gutter="20">
<!-- 造价文件 -->
<el-col :span="24">
<el-form-item label="造价文件">
<FileUploader v-model="formData.zjwj" />
</el-form-item>
</el-col>
<!-- 动用预备费审批文件 -->
<el-col :span="24">
<el-form-item label="动用预备费审批文件">
<FileUploader v-model="formData.ybfspwj" />
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<!-- 变更索赔类 -->
<el-tab-pane label="变更索赔类" name="变更索赔类">
<el-row :gutter="20">
<!-- 变更索赔文件 -->
<el-col :span="24">
<el-form-item label="变更索赔文件">
<FileUploader v-model="formData.bgsp" />
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<!-- 工商出资类 -->
<el-tab-pane label="工商出资类" name="工商出资类">
<el-row :gutter="20">
<!-- 股权结构 -->
<el-col :span="24">
<el-form-item label="股权结构">
<FileUploader v-model="formData.gqjg" />
</el-form-item>
</el-col>
<!-- 资金来源及构成 -->
<el-col :span="24">
<el-form-item label="资金来源及构成">
<FileUploader v-model="formData.cwjr" />
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
<!-- 其他类 -->
<el-tab-pane label="其他类" name="其他类">
<el-row :gutter="20">
<!-- 其他文件 -->
<el-col :span="24">
<el-form-item label="其他文件">
<FileUploader v-model="formData.qt" />
</el-form-item>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, getCurrentInstance } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage } from "element-plus";
import FileUploader from "../../components/FileUploader/index.vue";
// 初始化全局变量
const router = useRouter();
const route = useRoute();
const { proxy } = getCurrentInstance();
// 标签页默认激活项
const pageActiveName = ref("合同类");
// 表单数据 - 补充所有用到的字段
const formData = reactive({
projectName: "",
projectId: "",
del: 0, // 删除标记,0为正常
// 合同类
qylht: "", // 权益类合同
jjlht: "", // 经济类合同
// 造价类
zjwj: "", // 造价文件
ybfspwj: "", // 动用预备费审批文件
// 变更索赔类
bgsp: "", // 变更索赔文件
// 工商出资类
gqjg: "", // 股权结构
cwjr: "", // 资金来源及构成
// 其他类
qt: "", // 其他文件
});
// 加载状态
const loading = ref(false);
// 是否预览模式
const isPreview = ref(!!route.query.isPreview);
// 项目列表数据
const projectList = ref([]);
// 当前编辑的记录ID
const rcCgqyglId = ref(route.query.id || "");
// ========== 通用方法 ==========
// 获取项目列表
const getProjectData = () => {
proxy.$post({
url: "/api/project/listProject",
data: {
page: 1,
pagesize: 1000,
attributes: [],
menuType: "xmjc",
},
callback: (data) => {
projectList.value = data.rows || [];
},
errorCallback: () => {
ElMessage.error("获取项目列表失败");
},
});
};
// 选择项目后同步项目名称
const changeProject = (val) => {
const selectItem = projectList.value.find((item) => item.id === val);
if (selectItem) {
formData.projectName = selectItem.projectName;
}
};
// 获取单条记录详情(编辑/预览)
const getJsqtzjcDetail = () => {
if (!rcCgqyglId.value) return;
loading.value = true;
proxy.$post({
url: "/api/project/getZdsxspInfo",
data: { id: rcCgqyglId.value },
callback: (data) => {
loading.value = false;
// 赋值表单数据
Object.assign(formData, data);
},
errorCallback: () => {
loading.value = false;
ElMessage.error("网络异常,获取数据失败");
},
});
};
// 返回上一页
const backClick = () => {
router.back(-1);
};
// 保存/提交表单
const saveClick = () => {
// 基础校验
if (!formData.projectId) {
ElMessage.warning("请选择项目信息");
return;
}
loading.value = true;
// 区分新增/编辑
const url = rcCgqyglId.value
? "/api/project/updateZdsxsp"
: "/api/project/createZdsxsp";
// 组装提交数据
const submitData = {
...formData,
projectId: formData.projectId + "", // 确保为字符串类型
};
proxy.$post({
url: url,
data: submitData,
callback: () => {
loading.value = false;
ElMessage.success(rcCgqyglId.value ? "编辑成功" : "新增成功");
router.back(-1);
},
errorCallback: () => {
loading.value = false;
ElMessage.error("保存失败,请重试");
},
});
};
// 页面初始化
onMounted(() => {
// 获取项目列表
getProjectData();
if (rcCgqyglId.value) {
getJsqtzjcDetail();
}
});
</script>
<style scoped lang="less">
@import "@/styles/verticalManages.less";
// 标签页样式优化
:deep(.el-tabs--border-card) {
--el-tabs-card-border-color: var(--el-border-color);
--el-tabs-header-text-color: var(--el-text-color-primary);
--el-tabs-active-text-color: var(--el-color-primary);
}
// 表单间距优化
.el-form-item {
margin-bottom: 16px;
}
.el-row {
margin-bottom: 8px;
}
</style>
......@@ -319,9 +319,6 @@ const getProjectData = () => {
callback: (data) => {
projectList.value = data.rows || [];
},
errorCallback: () => {
ElMessage.error("获取项目列表失败");
},
});
};
......@@ -349,10 +346,6 @@ const getJsqtzjcDetail = () => {
jsqtzjcTzfxsList.value = data.jsqtzjcTzfxs || [];
jsqtzjcZxjcsList.value = data.jsqtzjcZxjcs || [];
},
errorCallback: () => {
loading.value = false;
ElMessage.error("网络异常,获取数据失败");
},
});
};
......@@ -391,10 +384,6 @@ const saveClick = () => {
ElMessage.success(rcCgqyglId.value ? "编辑成功" : "新增成功");
router.back(-1);
},
errorCallback: () => {
loading.value = false;
ElMessage.error("保存失败,请重试");
},
});
};
let options = ref();
......
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