明树Git Lab

Commit 1502b2cb authored by yangyajing's avatar yangyajing

投资控制表格字段

parent 5f1c0286
Pipeline #106378 passed with stage
in 17 seconds
...@@ -103,7 +103,19 @@ const routes = [ ...@@ -103,7 +103,19 @@ const routes = [
title: "新增投资控制", title: "新增投资控制",
component: () => import("@/views/investingManage/addControl.vue"), component: () => import("@/views/investingManage/addControl.vue"),
}, },
], {
path: "/majorRisk",
name: "majorRisk",
title: "重大风险防控",
component: () => import("@/views/investingManage/majorRisk.vue")
},
{
path: "/addRisk",
name: "addRisk",
title: "新增重大风险",
component: () => import("@/views/investingManage/addRisk.vue")
}
]
}, },
{ {
path: "/templateManage", path: "/templateManage",
......
...@@ -235,6 +235,7 @@ ...@@ -235,6 +235,7 @@
v-model="scope.row.yjwcsj" v-model="scope.row.yjwcsj"
type="datetime" type="datetime"
placeholder="请选择" placeholder="请选择"
value-format="YYYY-MM-DD HH:mm:SS"
/> />
</template> </template>
</el-table-column> </el-table-column>
...@@ -291,6 +292,139 @@ ...@@ -291,6 +292,139 @@
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="其他建设目标重大偏差" name="其他建设目标重大偏差"> <el-collapse-item title="其他建设目标重大偏差" name="其他建设目标重大偏差">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="24">
<el-form-item label="工期" :label-width="50"></el-form-item>
<div class="tab-handle">
<el-button type="primary" size="small" @click="addGq">新增</el-button>
</div>
<el-table :data="gqData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column type="index" width="60" />
<el-table-column label="监理开工令上传" prop="jlkglsc" width="180">
<template #default="scope">
<el-upload
v-if="!scope.row.jlkglsc"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{Authorization: token}"
:show-file-list="false"
:on-success="(res, file) => addJlkglFile(res, file, scope.row)"
>
<el-button link type="primary">上传</el-button>
</el-upload>
<div class="upload-file-wrap" v-else>
<span class="file-name" @click="downloadFile(scope.row.jlkglsc)">{{ scope.row.jlkglsc.originalname }}</span>
<span class="delete-btn" @click="deleteJlkglFile(scope.row, scope.$index)">
<el-icon><CloseBold /></el-icon>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="行业主管部门施工许可证上传" prop="sgxkzsc" width="180">
<template #default="scope">
<el-upload
v-if="!scope.row.sgxkzsc"
:action="windowConfig.baseUrl + '/api/file/upload'"
:headers="{Authorization: token}"
:show-file-list="false"
:on-success="(res, file) => addSgxkzFile(res, file, scope.row)"
>
<el-button link type="primary">上传</el-button>
</el-upload>
<div class="upload-file-wrap" v-else>
<span class="file-name" @click="downloadFile(scope.row.sgxkzsc)">{{ scope.row.sgxkzsc.originalname }}</span>
<span class="delete-btn" @click="deleteSgxkzFile(scope.row, scope.$index)">
<el-icon><CloseBold /></el-icon>
</span>
</div>
</template>
</el-table-column>
<el-table-column prop="kglsj" label="监理开工令开工时间" width="260">
<template #default="scope">
<el-date-picker
v-model="scope.row.kglsj"
type="date"
placeholder="请选择"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column prop="sgxksj" label="施工许可时间" width="260">
<template #default="scope">
<el-date-picker
v-model="scope.row.sgxksj"
type="date"
placeholder="请选择"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column prop="yjsjwgsj" label="预计/实际完成时间" width="260">
<template #default="scope">
<el-date-picker
v-model="scope.row.yjsjwgsj"
type="date"
placeholder="请选择"
value-format="YYYY-MM-DD"
/>
</template>
</el-table-column>
<el-table-column prop="htgqydms" label="合同工期约定描述" width="180">
<template #default="scope">
<el-input v-model="scope.row.htgqydms" type="textarea" />
</template>
</el-table-column>
<el-table-column prop="gqywsm" label="工期延误说明" width="180">
<template #default="scope">
<el-input v-model="scope.row.gqywsm" type="textarea" />
</template>
</el-table-column>
<el-table-column prop="gqtqsm" label="工期提前说明" width="180">
<template #default="scope">
<el-input v-model="scope.row.gqtqsm" type="textarea" />
</template>
</el-table-column>
<el-table-column label="操作" width="60" fixed="right">
<template #default="scope">
<el-button link type="danger" size="small" @click="deleteGq(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24">
<el-form-item label="安全质量环保" :label-width="100"></el-form-item>
<div class="tab-handle">
<el-button type="primary" size="small" @click="addAqzlhb">新增</el-button>
</div>
<el-table :data="aqzlhbData" style="width: 100%" empty-text="暂无数据" border>
<el-table-column type="index" width="60" />
<el-table-column prop="jlkglsc" label="目标描述">
<template #default="scope">
<el-input v-model="scope.row.jlkglsc" type="textarea" />
</template>
</el-table-column>
<el-table-column prop="ly" label="来源">
<template #default="scope">
<el-select v-model="scope.row.ly" placeholder="请选择" no-data-text="暂无数据">
<el-option v-for="item in lyList" :key="item.key"
:label="item.name" :value="item.key"
></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="sffsaqzlhbwt" label="是否发生安全质量环保问题被行政处罚">
<template #default="scope">
<el-radio-group v-model="scope.row.sffsaqzlhbwt">
<el-radio value="1"></el-radio>
<el-radio value="2"></el-radio>
</el-radio-group>
</template>
</el-table-column>
<el-table-column label="操作" width="60" fixed="right">
<template #default="scope">
<el-button link type="danger" size="small" @click="deleteAqzlhb(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="文件上传"> <el-form-item label="文件上传">
<el-upload <el-upload
...@@ -474,6 +608,8 @@ ...@@ -474,6 +608,8 @@
fyfxkzData.value = res.tzkztzekzs[0].tables; fyfxkzData.value = res.tzkztzekzs[0].tables;
} }
Object.assign(pfyjlsqkData.value, res.tzkzjcpfyjs); Object.assign(pfyjlsqkData.value, res.tzkzjcpfyjs);
Object.assign(gqData.value, res.tzkzgqs);
Object.assign(aqzlhbData.value, res.tzkzaqzlhbs);
Object.assign(mbpcData.value, res.qtjsmbzdpc); Object.assign(mbpcData.value, res.qtjsmbzdpc);
Object.assign(cwpjData.value, res.tzkzcwpjs); Object.assign(cwpjData.value, res.tzkzcwpjs);
Object.assign(tzsyData.value, res.tzkztzsys); Object.assign(tzsyData.value, res.tzkztzsys);
...@@ -483,6 +619,7 @@ ...@@ -483,6 +619,7 @@
let ssjdList = reactive([]); let ssjdList = reactive([]);
let jcdwList = reactive([]); let jcdwList = reactive([]);
let lsqkList = reactive([]); let lsqkList = reactive([]);
let lyList = reactive([]); // 安全质量环保-来源列表
onMounted(() => { onMounted(() => {
getProjectData(); getProjectData();
...@@ -490,6 +627,7 @@ ...@@ -490,6 +627,7 @@
ssjdList = resourceData.ssjd; ssjdList = resourceData.ssjd;
jcdwList = resourceData.jcdw; jcdwList = resourceData.jcdw;
lsqkList = resourceData.lszxqk; lsqkList = resourceData.lszxqk;
lyList = resourceData.source;
if (controlId) { if (controlId) {
getControlInfo(); getControlInfo();
fyfxkzIsEdit.value = false; fyfxkzIsEdit.value = false;
...@@ -586,6 +724,54 @@ ...@@ -586,6 +724,54 @@
} }
// 其他建设目标重大偏差 // 其他建设目标重大偏差
//-工期
let gqData = ref([]);
const addGq = () => {
gqData.value.push({});
};
// --监理开工令上传
const addJlkglFile = (res, file, row) => {
row.jlkglsc = {};
Object.assign(row.jlkglsc, res.data);
};
const deleteJlkglFile = (row, index) => {
let {wjsc, ...data} = row;
gqData.value[index] = data;
};
// --行业主管部门施工许可证上传
const addSgxkzFile = (res, file, row) => {
row.sgxkzsc = {};
Object.assign(row.sgxkzsc, res.data);
};
const deleteSgxkzFile = (row, index) => {
let {wjsc, ...data} = row;
gqData.value[index] = data;
};
const deleteGq = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
gqData.value.splice(index, 1);
})
}
// -安全质量环保
let aqzlhbData = ref([]);
const addAqzlhb = () => {
aqzlhbData.value.push({});
};
const deleteAqzlhb = (index) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
aqzlhbData.value.splice(index, 1);
})
}
// -文件上传
let mbpcData = ref([]); let mbpcData = ref([]);
const addMbpcFile = (res, file) => { const addMbpcFile = (res, file) => {
mbpcData.value.push(res.data); mbpcData.value.push(res.data);
...@@ -722,12 +908,16 @@ ...@@ -722,12 +908,16 @@
return ElMessage.warning("请先保存正在添加的费用分项控制、阶段对比表"); return ElMessage.warning("请先保存正在添加的费用分项控制、阶段对比表");
} }
let url = formData.id ? "updateTzkz" : "createTzkz"; let url = formData.id ? "updateTzkz" : "createTzkz";
let project = projectList.value.filter(item => item.id === formData.projectId)[0];
proxy.$post({ proxy.$post({
url: "/api/project/" + url, url: "/api/project/" + url,
data: { data: {
...formData, ...formData,
projectName: project ? project.projectName : "",
tzkztzekzs: rangeList.value, tzkztzekzs: rangeList.value,
tzkzjcpfyjs: pfyjlsqkData.value, tzkzjcpfyjs: pfyjlsqkData.value,
tzkzgqs: gqData.value,
tzkzaqzlhbs: aqzlhbData.value,
qtjsmbzdpc: mbpcData.value, qtjsmbzdpc: mbpcData.value,
tzkzcwpjs: cwpjData.value, tzkzcwpjs: cwpjData.value,
tzkztzsys: tzsyData.value tzkztzsys: tzsyData.value
......
<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="120" :disabled="isPreview">
<el-collapse v-model="activeCollapse">
<el-collapse-item title="基本信息" name="基本信息">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="项目信息" required>
<el-select v-model="formData.projectId" placeholder="请选择" no-data-text="暂无数据">
<el-option v-for="item in projectList" :key="item.id"
:label="item.projectName" :value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目名称">
<el-input v-model="formData.projectName"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="直属企业">
<el-input v-model="formData.zsqy"/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="项目公司全称">
<el-input v-model="formData.xmgsqc"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="境内/外">
<el-select v-model="formData.jnw" placeholder="请选择" no-data-text="暂无数据"
@change="changeJnw"
>
<el-option v-for="item in jnwList" :key="item.key"
:label="item.value" :value="item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="省(境内)/洲际(境外)" :label-width="180">
<el-select v-model="formData.sjnzjjw" placeholder="请选择" no-data-text="暂无数据"
@change="changeSzj"
>
<el-option v-for="item in szjList" :key="item.key"
:label="item.value" :value="item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="地市(境内)/国家(境外)" :label-width="190">
<el-select v-model="formData.dsjngjjw" placeholder="请选择" no-data-text="暂无数据">
<el-option v-for="item in dsgjList" :key="item.key"
:label="item.value" :value="item.key"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, getCurrentInstance, h } from "vue";
import { useRouter, useRoute } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus";
import { useUserStore } from "@/stores/user.js";
const userStore = useUserStore();
const router = useRouter();
const route = useRoute();
const { proxy } = getCurrentInstance();
let token = ref("");
token.value = userStore.authToken || sessionStorage.getItem("authToken") || "";
const activeCollapse = reactive([
"基本信息"
]);
let formData = reactive({});
let loading = ref(false);
let isPreview = !!route.query.isPreview;
let riskId = route.query.riskId;
const getRiskInfo = () => {
loading.value = true;
proxy.$post({
url: "/api/project/getTzkzInfo",
data: {
id: riskId
},
callback: (res) => {
loading.value = false;
Object.assign(formData, res);
}
});
};
// 项目列表
let projectList = ref([]);
const getProjectData = () => {
proxy.$post({
url: "/api/project/listProject",
data: {
page: 1,
pagesize: 1000,
attributes: [],
menuType: "xmjc"
},
callback: (data) => {
projectList.value = data.rows;
}
})
};
let jnwList = reactive([]); // 境内/外 // 级联
let szjList = ref([]); // 省(境内)/洲际(境外) // 级联
let dsgjList = ref([]); // 地市(境内)/国家(境外) // 级联
onMounted(() => {
getProjectData();
let resourceData = JSON.parse(sessionStorage.getItem("resourceData"));
jnwList = resourceData.dqlx;
if (riskId) {
getRiskInfo();
}
});
const changeJnw = (val) => {
if (val || val === 0) {
let selectData = jnwList.filter(item => item.key == val);
szjList.value = selectData[0] && selectData[0].children || [];
dsgjList.value = [];
qxgjList.value = [];
delete formData.sjnzjjw;
delete formData.dsjngjjw;
}
};
const changeSzj = (val) => {
if (val || val === 0) {
let selectData = szjList.value.filter(item => item.key == val);
dsgjList.value = selectData[0] && selectData[0].children || [];
qxgjList.value = [];
delete formData.dsjngjjw;
}
}
const backClick = () => {
router.back(-1)
}
const saveClick = () => {
if (!formData.projectId) {
return ElMessage.warning("请选择项目信息");
}
let url = formData.id ? "updateZdfx" : "createZdfx";
proxy.$post({
url: "/api/project/" + url,
data: {
...formData
},
callback: (data) => {
router.back(-1)
}
});
}
</script>
\ No newline at end of file
<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="addRisk">新增</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="previewRisk(row)">查看</el-button>
<el-button link type="primary" size="small" @click="editRisk(row)">编辑</el-button>
<el-button link type="danger" size="small" @click="deleteRisk(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
},
{
prop: "zsqy",
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 getRiskData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/getZdfxList",
data: {
page: currentPage.value,
pagesize: pageSize.value
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
}
})
};
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getRiskData();
}
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getRiskData();
}
const addRisk = () => {
router.push("/addRisk");
};
const editRisk = (item) => {
router.push({
name: "addRisk",
query: {
controlId: item.id
}
});
};
const previewRisk = (item) => {
router.push({
name: "addRisk",
query: {
isPreview: true,
riskId: item.id
}
})
}
const deleteRisk = (item) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
proxy.$post({
url: "/api/project/deleteZdfx",
data: {
id: item.id
},
callback: (data) => {
ElMessage.success("删除成功");
getRiskData();
}
})
}).catch(() => {})
}
onMounted(() => {
getRiskData();
})
</script>
<style lang="less" scoped>
@import "@/styles/manage.less";
</style>
\ No newline at end of file
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</div> </div>
</template> </template>
<script setup> <script setup>
import { ref, onMounted, getCurrentInstance } from "vue"; import { ref, reactive, onMounted, getCurrentInstance } from "vue";
import { useRouter } from "vue-router"; import { useRouter } from "vue-router";
import { ElMessage, ElMessageBox } from "element-plus"; import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue"; import CommonTable from "@/components/common/commonTable.vue";
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
const { proxy } = getCurrentInstance(); const { proxy } = getCurrentInstance();
let tableData = ref([]); let tableData = ref([]);
let jcdwList = reactive([]);
let tableColumns = ref([ let tableColumns = ref([
{ {
prop: "projectName", prop: "projectName",
...@@ -52,7 +53,11 @@ ...@@ -52,7 +53,11 @@
{ {
prop: "jcdw", prop: "jcdw",
label: "决策单位", label: "决策单位",
showOverflowTooltip: true showOverflowTooltip: true,
formatter: (row) => {
let data = jcdwList.filter(item => item.key === row.jcdw)[0]
return row.jcdw && data ? data.name : row.jcdw;
}
}, },
{ {
prop: "operations", prop: "operations",
...@@ -133,6 +138,8 @@ ...@@ -133,6 +138,8 @@
} }
onMounted(() => { onMounted(() => {
getControlData(); getControlData();
let resourceData = JSON.parse(sessionStorage.getItem("resourceData"));
jcdwList = resourceData.jcdw;
}) })
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
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