From 2c75d16ba44967e2b24b636aeba9d9ec18582136 Mon Sep 17 00:00:00 2001
From: niedongsheng <605973111@qq.com>
Date: Thu, 9 Apr 2026 14:19:04 +0800
Subject: [PATCH 01/19] =?UTF-8?q?feat:=20=E6=B0=B4=E6=AF=81=E8=A1=A8?=
=?UTF-8?q?=E5=8D=95=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../DisasterReport/WaterDisasterReport.vue | 23 +++++++++++++------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
index f494c67..ac0d191 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
@@ -307,24 +307,33 @@
-
- 台/班
+
+
+ 台/班
+
+
-
- 人次
+
+
+ 人次
+
+
-
- 万元
+
+
+ 万元
+
+
@@ -351,7 +360,7 @@
-
+
万元
From ed1f51b86b859ce6fdc0d9b76a5fb15fb755504e Mon Sep 17 00:00:00 2001
From: niedongsheng <605973111@qq.com>
Date: Thu, 9 Apr 2026 15:45:16 +0800
Subject: [PATCH 02/19] =?UTF-8?q?feat:=20=E6=96=87=E4=BB=B6=E4=B8=8A?=
=?UTF-8?q?=E4=BC=A0=E5=9F=BA=E6=9C=AC=E7=BB=93=E6=9E=84?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/component/FileUpload/FileUpload.vue | 58 +++++
.../src/component/FileUpload/PreviewBlock.vue | 237 ++++++++++++++++++
.../src/component/FileUpload/UploadBlock.vue | 141 +++++++++++
.../DisasterReport/WaterDisasterReport.vue | 44 ++--
4 files changed, 451 insertions(+), 29 deletions(-)
create mode 100644 packages/screen/src/component/FileUpload/FileUpload.vue
create mode 100644 packages/screen/src/component/FileUpload/PreviewBlock.vue
create mode 100644 packages/screen/src/component/FileUpload/UploadBlock.vue
diff --git a/packages/screen/src/component/FileUpload/FileUpload.vue b/packages/screen/src/component/FileUpload/FileUpload.vue
new file mode 100644
index 0000000..6916ee0
--- /dev/null
+++ b/packages/screen/src/component/FileUpload/FileUpload.vue
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
diff --git a/packages/screen/src/component/FileUpload/PreviewBlock.vue b/packages/screen/src/component/FileUpload/PreviewBlock.vue
new file mode 100644
index 0000000..a9ab090
--- /dev/null
+++ b/packages/screen/src/component/FileUpload/PreviewBlock.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ file.fileName }}
+ {{ formatFileSize(file.fileSize) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/screen/src/component/FileUpload/UploadBlock.vue b/packages/screen/src/component/FileUpload/UploadBlock.vue
new file mode 100644
index 0000000..3050491
--- /dev/null
+++ b/packages/screen/src/component/FileUpload/UploadBlock.vue
@@ -0,0 +1,141 @@
+
+
+
+
+ 选择文件
+
+
+
+
+
+
+
diff --git a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
index ac0d191..e5837d5 100644
--- a/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
+++ b/packages/screen/src/views/DisasterManagement/DisasterReport/WaterDisasterReport.vue
@@ -35,8 +35,8 @@
-
-
+
+
@@ -206,35 +206,14 @@
-
+
-
-
-
- 只能上传jpg/png格式,且不超过500kb
+
-
+
-
- 选择文件
-
- 仅支持20s内的视频,不超过20MB
-
-
-
+
@@ -394,7 +373,7 @@ import mockData from './waterMockJson.json'
import { request } from '@/utils/request'
import LossList from './LossList.vue'
import BlockItem from '@/component/BlockItem.vue'
-import { el } from 'element-plus/es/locale/index.mjs'
+import FileUpload from '@/component/FileUpload/FileUpload.vue'
const router = useRouter()
const route = useRoute()
@@ -411,6 +390,8 @@ const disposalMeasuresArray = ref([])
const imageFileList = ref([])
const videoFileList = ref([])
+const eventType = ref('水毁事件')
+
const formData = reactive({
// 顶层字段
occurLocation: null, // 发生地点/路况位置
@@ -644,7 +625,12 @@ const handleSubmit = async () => {
// 加载编辑数据
const loadEditData = async () => {
- initFormData(mockData)
+
+ if(route.query.mock) {
+ initFormData(mockData)
+ } else {
+ initFormData({})
+ }
}
onMounted(() => {
From 58b4720b94090e32778b11341e101031fa89fd9c Mon Sep 17 00:00:00 2001
From: huangchenhao <123673748@qq.com>
Date: Thu, 9 Apr 2026 16:12:48 +0800
Subject: [PATCH 03/19] =?UTF-8?q?feat:=20=E6=81=A2=E5=A4=8D=E9=87=8D?=
=?UTF-8?q?=E5=BB=BApc=E7=AB=AF=20=E9=A1=B9=E7=9B=AE=E5=A1=AB=E6=8A=A5=20?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E9=A9=B3=E5=9B=9E?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../screen/src/component/Breadcrumb/index.vue | 17 +
packages/screen/src/router/index.js | 11 +-
.../examineDialog.vue | 192 ++++------
.../views/ProjectManagement_Rebuild/index.js | 347 +++++++++++-------
.../views/ProjectManagement_Rebuild/index.vue | 20 +-
.../projectAddPage.vue | 312 +++++++++++++++-
.../rejectDialog.vue | 48 +++
7 files changed, 683 insertions(+), 264 deletions(-)
create mode 100644 packages/screen/src/views/ProjectManagement_Rebuild/rejectDialog.vue
diff --git a/packages/screen/src/component/Breadcrumb/index.vue b/packages/screen/src/component/Breadcrumb/index.vue
index 7082377..40ffd71 100644
--- a/packages/screen/src/component/Breadcrumb/index.vue
+++ b/packages/screen/src/component/Breadcrumb/index.vue
@@ -85,6 +85,23 @@ const generateBreadcrumb = () => {
name: 'ledgerManagement',
meta: { title: '驻地台账' }
})
+ } else if (currentPath.includes('/projectAdd')) {
+ // 特殊处理:项目填报页面(项目管理的子页面)
+ // 添加项目管理(父级)
+ breadcrumbList.value.push({
+ title: '项目管理',
+ path: '/projectManagement',
+ name: 'projectManagement',
+ meta: { title: '项目管理' }
+ })
+
+ // 添加项目填报(当前页)
+ breadcrumbList.value.push({
+ title: '项目填报',
+ path: currentPath,
+ name: 'projectAdd',
+ meta: { title: '项目填报' }
+ })
} else {
// 普通路由处理
matched.forEach((record, index) => {
diff --git a/packages/screen/src/router/index.js b/packages/screen/src/router/index.js
index 6207d7e..ddd0d9d 100644
--- a/packages/screen/src/router/index.js
+++ b/packages/screen/src/router/index.js
@@ -1,4 +1,3 @@
-import component from 'element-plus/es/components/tree-select/src/tree-select-option.mjs'
import { createRouter, createWebHistory } from 'vue-router'
const routes = [
@@ -149,6 +148,16 @@ const routes = [
breadcrumb: true
}
},
+ {
+ path: '/projectAdd/:data?',
+ name: 'projectAdd',
+ component: () => import('../views/ProjectManagement_Rebuild/projectAddPage.vue'),
+ meta: {
+ title: '项目填报',
+ breadcrumb: true,
+ parentRoute: 'projectManagement' // 用于在面包屑中建立父子关系
+ }
+ },
{
path: '/disasterManagement',
name: 'disasterManagement',
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue
index 16207f9..0795876 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/examineDialog.vue
@@ -1,71 +1,83 @@
+ style="max-height: 60vh; overflow-y: auto; padding-right: 50px" :rules="rules">
-
+
-
+
-
-
+
+
+
+ 公里
+
+
-
+
+
+ 方/万元
+
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+ 万元
+
+
-
+
@@ -74,31 +86,35 @@
-
+
-
+
-
+
-
+
+
+ 万元
+
+
-
+
自费重修
申报重修
@@ -120,163 +136,83 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
- disabled: {
- type: Boolean,
- default: false,
- }
});
-const sfjwd = ref("是");
-const qx = ref("");
-const loading = ref(false);
-const selectOptions = ref([]);
-const qxList = ref([]);
-
-// 根据用户信息 查询角色列表
-const getUserList = async (key) => {
- try {
- const keyword = key;
- let url = "";
- if (keyword) {
- url = `/snow-ops-platform/yhzry/getUserByKey?key=${keyword}`;
- } else {
- url = `/snow-ops-platform/yhzry/getUserByKey?key=`;
- }
- const res = await request({
- url: url,
- method: "GET",
- });
- if (res.code === "00000") {
- return res.data;
- } else {
- throw new Error(res.message);
- }
- } catch (error) {
- ElMessage.error(error.message);
- console.log(error);
- }
-};
-
-// 选择人员筛选
-const remoteMethod = async (query) => {
- if (query === "") {
- selectOptions.value = [];
- return [];
- }
- loading.value = true;
- const res = await getUserList(query);
- if (res) {
- selectOptions.value = res;
- }
- loading.value = false;
-};
-
-// 根据区县名称 查询区县列表
-const getQxList = async (key) => {
- try {
- const keyword = key;
- let url = "";
- if (keyword) {
- url = `/snow-ops-platform/district/listDistricts?qxmc=${keyword}`;
- } else {
- url = `/snow-ops-platform/district/listDistricts?qxmc=`;
- }
- const res = await request({
- url: url,
- method: "GET",
- });
- if (res.code === "00000") {
- return res.data;
- } else {
- throw new Error(res.message);
- }
- } catch (error) { }
-};
-
-// 选择区县筛选
-const remoteMethod_qx = async (query) => {
- loading.value = true;
- const res = await getQxList(query);
- if (res) {
- qxList.value = res;
- }
- loading.value = false;
-};
-
-// 选择区县
-const handleSelect_qx = (value) => {
- props.form.qxmc = value;
-};
-
-// 选择人员
-const handleSelect = (value) => {
- console.log("value", value);
- props.form.fzrXm = value.realName;
- props.form.fzrSjhm = value.phone;
- props.form.fzrUserId = value.userId;
-};
const rules = computed(() => {
return {
- mc: [
+ 技术等级: [
{
required: true,
validator: (rule, value, callback) => {
- if (props.form.mc) {
+ if (props.form.technicalGrade) {
callback();
} else {
- callback(new Error("请输入服务站名称"));
+ callback(new Error("请选择技术等级"));
}
},
trigger: "blur",
},
],
- qxmc: [
+ 资金来源: [
{
required: true,
validator: (rule, value, callback) => {
- if (props.form.qxmc) {
+ if (props.form.fundingSource) {
callback();
} else {
- callback(new Error("请选择所属区县"));
+ callback(new Error("请填写资金来源"));
}
},
trigger: "blur",
},
],
- fzr: [
+ 处置灾毁处数: [
{
required: true,
validator: (rule, value, callback) => {
- if (props.form.fzrUserId && props.form.fzrXm && props.form.fzrSjhm) {
+ if (props.form.disposalCount) {
callback();
} else {
- callback(new Error("请选择负责人"));
+ callback(new Error("请填写处置灾毁处数"));
}
},
trigger: "blur",
},
],
- jd: [
+ 已完工处数: [
{
- required: sfjwd.value === "否",
+ required: true,
validator: (rule, value, callback) => {
- if (props.form.jd) {
+ if (props.form.completedCount) {
callback();
} else {
- callback(new Error("请输入站点经度"));
+ callback(new Error("请填写已完工处数"));
}
},
trigger: "blur",
},
],
- wd: [
+ 总投资: [
{
- required: sfjwd.value === "否",
+ required: true,
validator: (rule, value, callback) => {
- if (props.form.wd) {
+ if (props.form.totalInvestment) {
callback();
} else {
- callback(new Error("请输入站点纬度"));
+ callback(new Error("请填写总投资数"));
+ }
+ },
+ trigger: "blur",
+ },
+ ],
+ 项目费用类型: [
+ {
+ required: true,
+ validator: (rule, value, callback) => {
+ if (props.form.projectExpenseType) {
+ callback();
+ } else {
+ callback(new Error("请选择项目费用类型"));
}
},
trigger: "blur",
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
index c07a8c8..ecc3061 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.js
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
@@ -2,6 +2,8 @@ import { h, ref, onMounted, reactive, watch, toRaw, nextTick } from "vue";
import { request } from "@/utils/request";
import { useRoute, useRouter } from 'vue-router'
import ExamineDialog from "./examineDialog.vue";
+import RejectDialog from './rejectDialog.vue';
+import { ElLoading } from 'element-plus'
const tableData = ref([]); // 表格数据
const modelVisible = ref(false); // 弹窗状态
@@ -23,10 +25,6 @@ const model = reactive({
});
const form = reactive({
});
-const INIT_FORM = {
- project: {},
- fileList: []
-};
// 抽屉内容
const drawer = reactive({
title: '',
@@ -40,102 +38,28 @@ const drawer = reactive({
const dialogRef = ref(null); // 弹窗实例
const drawerRef = ref(null); // 抽屉实例
-const columns = [
- {
- prop: "districtName",
- label: "区县",
- },
- {
- prop: "routeNo",
- label: "路线编码",
- },
- {
- prop: "disasterType",
- label: "灾害类型",
- },
- {
- prop: "startStakeNo",
- label: "起点桩号",
- },
- {
- prop: "endStakeNo",
- label: "止点桩号",
- },
- {
- prop: "implementMileage",
- label: "实施里程(公里)",
- },
- {
- prop: "technicalGrade",
- label: "技术等级",
- },
- {
- prop: "totalInvestment",
- label: "总投资金额(万元)",
- },
- {
- prop: "estimatedCost",
- label: "投资估算(万元)",
- },
- {
- prop: "startTime",
- label: "开工或预计开工时间",
- },
- {
- prop: "endTime",
- label: "完工或预计完工时间",
- },
- {
- prop: "approvalStatus",
- label: "审批状态",
- formatter: (row) => {
- const statusMap = {
- 0: '待审批',
- 1: '审批通过',
- 2: '审批驳回'
- };
- return statusMap[row.approvalStatus] || '未知状态';
- }
- },
- {
- prop: "updateTime",
- label: "更新日期",
- },
- {
- label: "操作",
- fixed: "right",
- width: 150,
- render: (row) => () =>
- h("div", { class: "action-btns" }, [
- h(
- ElButton,
- {
- type: "primary",
- link: true,
- onClick: async () => {
- },
- },
- () => "审批"
- ),
- h(
- ElButton,
- {
- type: "primary",
- link: true,
- style: "margin-left: 10px;",
- onClick: async () => {
- },
- },
- () => "详情"
- ),
- ]),
- },
-]
+// 第二个弹窗
+const model2 = reactive({
+ title: '',
+ content: null,
+ props: {},
+ onCancel: null,
+ onConfirm: null,
+ width: '',
+ footerPosition: null,
+ onCancelType: null,
+ onConfirmName: null,
+ onCancelName: null,
+ tagContent: null,
+ tagType: null,
+});
+const modelVisible2 = ref(false);
+const dialogRef2 = ref(null);
+
+
// 过滤条件
const filterData = reactive({
- submitTimeStart: "",
- routeNo: "",
})
// 分页
const pagination = reactive({
@@ -152,52 +76,66 @@ const pagination = reactive({
});
// 获取项目列表
-const getTableData = async (filterData) => {
+const getTableData = async (filterData = {}) => {
try {
+ // 过滤空字符串属性
+ const filteredParams = {};
+ Object.keys(filterData).forEach(key => {
+ if (filterData[key] !== '' && filterData[key] != null) {
+ filteredParams[key] = filterData[key];
+ }
+ });
+
const res = await request({
url: '/snow-ops-platform/recovery/list',
method: "GET",
params: {
- ...filterData,
- submitTimeStart: filterData.submitTimeStart ? filterData.submitTimeStart+`-01-01 00:00:00` : null,
+ ...filteredParams,
+ submitTimeStart: filteredParams?.submitTimeStart ? filteredParams.submitTimeStart + `-01-01 00:00:00` : null,
pageNum: pagination.current,
pageSize: pagination.pageSize,
}
})
+ if (res.code === '00000') {
+ tableData.value = res.data.records
+ }
} catch (error) {
console.error('获取项目列表失败:', error);
}
}
-// 打开审批弹窗
-const openExamineDialog = async () => {
- model.title = '项目审批';
- Object.assign(form, INIT_FORM);
- model.props = {
- form: form,
- };
- model.content = ExamineDialog;
- model.onCancel = () => {
- modelVisible.value = false;
- };
- model.onConfirm = async () => {
- dialogType.value = '';
- await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => {
- console.log('@@@@@填报项目', form);
+
+
+// 驳回项目
+const rejectProject = async () => {
+ try {
+ const loading = ElLoading.service({
+ lock: true,
+ text: '操作中',
+ background: 'rgba(0, 0, 0, 0.7)',
})
- .catch((err) => {
- ElMessage.error('请处理表单中的错误项');
- });
- };
- model.width = "50%"
- model.footerPosition = 'flex-end'
- model.onCancelType = 'danger'
- model.onConfirmName = '审批通过'
- model.onCancelName = '审批驳回'
- // model.tagType = 'warning'
- // model.tagContent = '测试'
- modelVisible.value = true;
+ const res = await request({
+ url: '/snow-ops-platform/recovery/approve',
+ method: 'POST',
+ data: {
+ id: form.id,
+ approveLevel: 1,
+ isPass: false,
+ rejectReason: form.rejectReason,
+ }
+ })
+ loading.close();
+ if (res.code === '00000') {
+ ElMessage.success('操作成功');
+ modelVisible.value = false;
+ modelVisible2.value = false;
+ getTableData(filterData);
+ }
+ } catch (error) {
+ ElMessage.error('操作失败');
+ console.error('驳回项目失败:', error);
+ }
}
@@ -208,6 +146,157 @@ export default () => {
const router = useRouter();
+ const columns = [
+ {
+ prop: "districtName",
+ label: "区县",
+ },
+ {
+ prop: "routeNo",
+ label: "路线编码",
+ },
+ {
+ prop: "disasterType",
+ label: "灾害类型",
+ },
+ {
+ prop: "startStakeNo",
+ label: "起点桩号",
+ },
+ {
+ prop: "endStakeNo",
+ label: "止点桩号",
+ },
+ {
+ prop: "implementMileage",
+ label: "实施里程(公里)",
+ },
+ {
+ prop: "technicalGrade",
+ label: "技术等级",
+ },
+ {
+ prop: "totalInvestment",
+ label: "总投资金额(万元)",
+ },
+ {
+ prop: "estimatedCost",
+ label: "投资估算(万元)",
+ },
+ {
+ prop: "startTime",
+ label: "开工或预计开工时间",
+ },
+ {
+ prop: "endTime",
+ label: "完工或预计完工时间",
+ },
+ {
+ prop: "approvalStatus",
+ label: "审批状态",
+ formatter: (row) => {
+ const statusMap = {
+ 0: '待审批',
+ 1: '审批通过',
+ 2: '审批驳回'
+ };
+ return statusMap[row.approvalStatus] || '未知状态';
+ }
+ },
+ {
+ prop: "updateTime",
+ label: "更新日期",
+ },
+ {
+ label: "操作",
+ fixed: "right",
+ width: 150,
+ render: (row) => () =>
+ h("div", { class: "action-btns" }, [
+ h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ onClick: async () => {
+ openExamineDialog(row);
+ },
+ },
+ () => "审批"
+ ),
+ h(
+ ElButton,
+ {
+ type: "primary",
+ link: true,
+ style: "margin-left: 10px;",
+ onClick: async () => {
+ },
+ },
+ () => "详情"
+ ),
+ ]),
+ },
+ ]
+
+ // 打开审批弹窗
+ const openExamineDialog = async (row) => {
+ model.title = '项目审批';
+ Object.assign(form, row);
+ model.props = {
+ form: form,
+ };
+ model.content = ExamineDialog;
+ model.onCancel = () => {
+ model2.title = '驳回原因';
+ model2.props = {
+ form: form,
+ }
+ model2.content = RejectDialog;
+ model2.onCancel = () => {
+ modelVisible2.value = false;
+ }
+ model2.onConfirm = async () => {
+ await dialogRef2?.value?.dynamicComponentRef?.formRef.validate().then(async () => {
+ await rejectProject()
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+
+ }
+ model2.width = '30%'
+ model2.footerPosition = 'center'
+ model2.onConfirmName = '确定'
+ model2.onCancelName = '取消'
+ modelVisible2.value = true;
+ };
+ model.onConfirm = async () => {
+ await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => {
+ if (form.projectExpenseType === '自费重修') {
+ router.push({
+ name: 'projectAdd',
+ params: {
+ data: encodeURIComponent(JSON.stringify(form))
+ }
+ })
+ modelVisible.value = false;
+ }
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+ };
+ model.width = "50%"
+ model.footerPosition = 'flex-end'
+ model.onCancelType = 'danger'
+ model.onConfirmName = '审批通过'
+ model.onCancelName = '审批驳回'
+ // model.tagType = 'warning'
+ // model.tagContent = '测试'
+ modelVisible.value = true;
+ }
+
onMounted(() => {
getTableData();
})
@@ -231,5 +320,9 @@ export default () => {
dialogRef,
drawerRef,
openExamineDialog,
+
+ model2,
+ modelVisible2,
+ dialogRef2,
}
}
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.vue b/packages/screen/src/views/ProjectManagement_Rebuild/index.vue
index 66bc244..0a4ca0d 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/index.vue
@@ -1,8 +1,8 @@
-
+
@@ -19,10 +19,16 @@
:onConfirm="script.model?.onConfirm" :onCancel="script.model?.onCancel" ref="dialogRef"
:width="script.model?.width" :footer-position="script.model?.footerPosition"
:onCancelType="script.model?.onCancelType" :onConfirmName="script.model?.onConfirmName"
- :onCancelName="script.model?.onCancelName"
- :tagContent="script.model?.tagContent"
- :tagType="script.model?.tagType"
- >
+ :onCancelName="script.model?.onCancelName" :tagContent="script.model?.tagContent"
+ :tagType="script.model?.tagType">
+
+
\ No newline at end of file
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/rejectDialog.vue b/packages/screen/src/views/ProjectManagement_Rebuild/rejectDialog.vue
new file mode 100644
index 0000000..bdaf278
--- /dev/null
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/rejectDialog.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From 7d5ebc8b5fac942af4a8229d6429d5596b9d1567 Mon Sep 17 00:00:00 2001
From: huangchenhao <123673748@qq.com>
Date: Thu, 9 Apr 2026 17:03:36 +0800
Subject: [PATCH 04/19] =?UTF-8?q?feat:=20=E6=81=A2=E5=A4=8D=E9=87=8D?=
=?UTF-8?q?=E5=BB=BAPC=E7=AB=AF=20=E9=A1=B9=E7=9B=AE=E5=A1=AB=E6=8A=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/component/FileUpload/FileUpload.vue | 7 +-
.../src/component/FileUpload/UploadBlock.vue | 17 ++--
.../views/ProjectManagement_Rebuild/index.js | 16 ++--
.../projectAddPage.vue | 87 +++++++++++++++++--
4 files changed, 103 insertions(+), 24 deletions(-)
diff --git a/packages/screen/src/component/FileUpload/FileUpload.vue b/packages/screen/src/component/FileUpload/FileUpload.vue
index 6916ee0..709aeb1 100644
--- a/packages/screen/src/component/FileUpload/FileUpload.vue
+++ b/packages/screen/src/component/FileUpload/FileUpload.vue
@@ -1,7 +1,7 @@
@@ -45,6 +45,11 @@ const props = defineProps({
placeholder: {
type: String,
default: ''
+ },
+ // 自定义fileType
+ fileType: {
+ type: Number,
+ default: null,
}
})
diff --git a/packages/screen/src/component/FileUpload/UploadBlock.vue b/packages/screen/src/component/FileUpload/UploadBlock.vue
index 3050491..2c311f0 100644
--- a/packages/screen/src/component/FileUpload/UploadBlock.vue
+++ b/packages/screen/src/component/FileUpload/UploadBlock.vue
@@ -2,8 +2,9 @@
- 选择文件
+
+
+ 选择文件
@@ -39,6 +40,11 @@ const props = defineProps({
placeholder: {
type: String,
default: ''
+ },
+ // 自定义fileType
+ customFileType: {
+ type: Number,
+ default: null
}
})
@@ -104,14 +110,14 @@ const uploadFiles = async (event) => {
})
if (res.code === '00000') {
let fileType = 3
- if(props.type == 'image') fileType = 1
- if(props.type == 'video') fileType = 2
+ if (props.type == 'image') fileType = 1
+ if (props.type == 'video') fileType = 2
const url = res.data
const fileData = {
fileName: name,
fileUrl: url,
- fileType,
+ fileType: props.customFileType || fileType,
fileSize: file.size
}
emit('update:modelValue', [...props.modelValue, fileData])
@@ -130,6 +136,7 @@ const uploadFiles = async (event) => {
position: relative;
margin-bottom: 20px;
}
+
.inner-file {
z-index: 0;
position: absolute;
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
index ecc3061..bf5cf3c 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.js
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
@@ -273,15 +273,13 @@ export default () => {
};
model.onConfirm = async () => {
await dialogRef?.value?.dynamicComponentRef?.formRef.validate().then(() => {
- if (form.projectExpenseType === '自费重修') {
- router.push({
- name: 'projectAdd',
- params: {
- data: encodeURIComponent(JSON.stringify(form))
- }
- })
- modelVisible.value = false;
- }
+ router.push({
+ name: 'projectAdd',
+ params: {
+ data: encodeURIComponent(JSON.stringify(form)),
+ }
+ })
+ modelVisible.value = false;
})
.catch((err) => {
ElMessage.error('请处理表单中的错误项');
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
index 6e17708..b887d96 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
@@ -180,10 +180,7 @@
{ value: '财政评审', label: '财政评审' },
{ value: '开展施工图设计', label: '开展施工图设计' },
{ value: '完成施设于批复', label: '完成施设于批复' }
- ]"
- :key="item.value"
- :label="item.label"
- :value="item.value" />
+ ]" :key="item.value" :label="item.label" :value="item.value" />
@@ -269,8 +266,68 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 万元
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -286,18 +343,30 @@
import { ref, onMounted, watch, reactive, toRaw } from 'vue'
import { useRouter, useRoute } from 'vue-router'
+import FileUpload from '@/component/FileUpload/FileUpload.vue'
const router = useRouter()
const route = useRoute()
const form = ref({})
const formRef = ref(null)
+//附件分类: 1-现场图片/视频 2-施工图设计批复文件 3-施工合同 4-交竣工证书 5-完工项目上传图片 6-其他佐证文件
+const designApprovalFiles = ref([]) // 施工图设计批复文件
+const contractFiles = ref([]) // 施工合同
+const acceptanceFiles = ref([]) // 交竣工证书
+const completedFiles = ref([]) // 完工项目上传图片
+const otherFiles = ref([]) // 其他佐证文件
+
+
+
+watch(() => designApprovalFiles.value, (data) => {
+ console.log('@@@@@', data);
+})
+
onMounted(() => {
if (route.params.data) {
const data = JSON.parse(decodeURIComponent(route.params.data));
form.value = data
- // console.log('@@@@跳转过来了data', data);
- } else {
-
+ // console.log('form', form.value.projectExpenseType)
}
})
From 6f5c28722ff979dc71a5861da4961c263b7d6e21 Mon Sep 17 00:00:00 2001
From: huangchenhao <123673748@qq.com>
Date: Thu, 9 Apr 2026 17:46:43 +0800
Subject: [PATCH 05/19] =?UTF-8?q?feat:=20=E6=81=A2=E5=A4=8D=E9=87=8D?=
=?UTF-8?q?=E5=BB=BAPC=E7=AB=AF=20=E6=9B=B2=E7=BA=BF=E4=BA=BA=E5=91=98=20?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AE=E5=A1=AB=E6=8A=A5=E8=B0=83=E9=80=9A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../views/ProjectManagement_Rebuild/index.js | 11 +++
.../projectAddPage.vue | 71 ++++++++++++++++---
2 files changed, 72 insertions(+), 10 deletions(-)
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/index.js b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
index bf5cf3c..9a0726d 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/index.js
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/index.js
@@ -191,6 +191,17 @@ export default () => {
prop: "endTime",
label: "完工或预计完工时间",
},
+ {
+ prop: "reportStatus",
+ label: "申报状态",
+ formatter: (row) => {
+ const statusMap = {
+ 0: '未申报',
+ 1: '已申报',
+ };
+ return statusMap[row.reportStatus] || '未知状态';
+ }
+ },
{
prop: "approvalStatus",
label: "审批状态",
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
index b887d96..579e06e 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/projectAddPage.vue
@@ -174,12 +174,12 @@
-
+
@@ -212,7 +212,7 @@
-
+
@@ -334,7 +334,7 @@
- 提交
+ 提交
@@ -344,12 +344,14 @@
import { ref, onMounted, watch, reactive, toRaw } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import FileUpload from '@/component/FileUpload/FileUpload.vue'
+import { request } from '../../../../shared/utils/request'
+import { ElLoading } from 'element-plus'
const router = useRouter()
const route = useRoute()
const form = ref({})
const formRef = ref(null)
-//附件分类: 1-现场图片/视频 2-施工图设计批复文件 3-施工合同 4-交竣工证书 5-完工项目上传图片 6-其他佐证文件
+// 附件分类: 1-现场图片/视频 2-施工图设计批复文件 3-施工合同 4-交竣工证书 5-完工项目上传图片 6-其他佐证文件
const designApprovalFiles = ref([]) // 施工图设计批复文件
const contractFiles = ref([]) // 施工合同
const acceptanceFiles = ref([]) // 交竣工证书
@@ -358,18 +360,67 @@ const otherFiles = ref([]) // 其他佐证文件
-watch(() => designApprovalFiles.value, (data) => {
- console.log('@@@@@', data);
-})
+// watch(() => designApprovalFiles.value, (data) => {
+// console.log('@@@@@', data);
+// })
+
+// watch(() => form.value, (data) => {
+// console.log('@@@@@form', data);
+// }, { deep: true })
onMounted(() => {
if (route.params.data) {
const data = JSON.parse(decodeURIComponent(route.params.data));
- form.value = data
- // console.log('form', form.value.projectExpenseType)
+
+ if (data.projectExpenseType === '申报重修') {
+ form.value = {
+ ...data,
+ projectProgress: '申报审批'
+ }
+ } else {
+ form.value = data
+ }
}
})
+const submit = async () => {
+ const data = {
+ project: form.value,
+ designApprovalFiles: designApprovalFiles.value,
+ contractFiles: contractFiles.value,
+ acceptanceFiles: acceptanceFiles.value,
+ completedFiles: completedFiles.value,
+ otherFiles: otherFiles.value,
+ }
+ await formRef.value.validate().then(async () => {
+ try {
+ const loading = ElLoading.service({
+ lock: true,
+ text: '操作中',
+ background: 'rgba(0, 0, 0, 0.7)',
+ })
+ const res = await request({
+ url: '/snow-ops-platform/recovery/report',
+ method: 'POST',
+ data: data,
+ })
+ loading.close();
+ if (res.code === '00000') {
+ router.push({
+ name: 'projectManagement',
+ })
+ } else {
+ throw new Error(res.message || '操作失败')
+ }
+ } catch (error) {
+ ElMessage.error(error.message);
+ }
+ })
+ .catch((err) => {
+ ElMessage.error('请处理表单中的错误项');
+ });
+}
+
\ No newline at end of file
From 17b0871ab5ad97816c64481dd5fc950b63e689e3 Mon Sep 17 00:00:00 2001
From: huangchenhao <123673748@qq.com>
Date: Thu, 9 Apr 2026 18:23:33 +0800
Subject: [PATCH 07/19] =?UTF-8?q?faet:=20=E9=A1=B9=E7=9B=AE=E8=AF=A6?=
=?UTF-8?q?=E6=83=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../projectDetailPage.vue | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/packages/screen/src/views/ProjectManagement_Rebuild/projectDetailPage.vue b/packages/screen/src/views/ProjectManagement_Rebuild/projectDetailPage.vue
index 1defdf5..19cc624 100644
--- a/packages/screen/src/views/ProjectManagement_Rebuild/projectDetailPage.vue
+++ b/packages/screen/src/views/ProjectManagement_Rebuild/projectDetailPage.vue
@@ -8,7 +8,8 @@
基本信息
- {{ getApprovalStatusText(form.approvalStatus) }}
+ {{
+ getApprovalStatusText(form.approvalStatus) }}
@@ -336,6 +337,14 @@
+
+
+ 驳回原因
+
+
+ {{form.rejectReason}}
+
+