Compare commits

..

2 Commits

4 changed files with 335 additions and 182 deletions

View File

@ -5,6 +5,15 @@
:width="width"
destroy-on-close
>
<template #title>
<div class="dialog-header" v-if="tagContent">
<span>{{ title }}</span>
<div class="dialog-header-extra">
<el-tag :type="tagType">{{ tagContent }}</el-tag>
</div>
</div>
<template v-else>{{ title }}</template>
</template>
<component
v-if="dynamicComponent"
:is="dynamicComponent"
@ -13,16 +22,16 @@
/>
<slot></slot>
<template #footer>
<div class="dialog-footer">
<el-button class="button" size="large" type="primary" @click="onConfirm"> {{ onConfirmName }} </el-button>
<el-button class="button" size="large" @click="onCancel"> {{ onCancelName }} </el-button>
<div class="dialog-footer" :class="footerClass">
<el-button class="button" size="large" type="primary" @click="onConfirm"> {{ onConfirmName || '保存' }} </el-button>
<el-button class="button" size="large" :type="onCancelType" @click="onCancel"> {{ onCancelName || '取消' }} </el-button>
</div>
</template>
</el-dialog>
</template>
<script setup>
import { computed, ref, } from "vue";
import { computed, ref, markRaw } from "vue";
const dynamicComponentRef = ref(null);
defineExpose({
dynamicComponentRef //
@ -60,22 +69,70 @@ const props = defineProps({
onConfirmName: {
type: String,
default: "保存",
validator: (value) => value === null || typeof value === 'string'
},
onCancelName: {
type: String,
default: "取消",
validator: (value) => value === null || typeof value === 'string'
},
onCancelType: {
type: String,
default: null,
},
tagContent: {
type: String,
default: ""
},
tagType: {
type: String,
default: ""
},
footerPosition: {
type: String,
default: "center",
validator: (value) => value === null || ['center', 'flex-end', 'flex-start'].includes(value)
}
});
const normalizedComponent = computed(() =>
props.dynamicComponent ? markRaw(props.dynamicComponent) : null
);
const footerClass = computed(() => {
if (!props.footerPosition) {
return 'footer-center';
}
return `footer-${props.footerPosition}`;
});
</script>
<style lang="scss" scoped>
.dialog-header {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
.dialog-header-extra {
margin-left: auto;
}
}
.dialog-footer {
display: flex;
justify-content: center;
&.footer-center {
justify-content: center;
}
&.footer-flex-end {
justify-content: flex-end;
}
&.footer-flex-start {
justify-content: flex-start;
}
.button {
width: 150px;

View File

@ -1,194 +1,269 @@
<template>
<div class="detail-container">
<el-form ref="formRef" :model="form" label-position="right" label-width="auto"
style="max-height: 60vh; overflow-y: auto; padding-right: 50px" :rules="rules">
<el-row style="margin: 20px 0px;">
<h4>项目信息</h4>
<el-form ref="formRef" :model="form" label-position="right" label-width="150px"
style="max-height: 60vh; overflow-y: auto; padding-right: 50px" :rules="rules" :disabled="disabled">
<el-row style="margin: 20px 20px;">
<h4>基本信息</h4>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="区县名称" prop="区县名称">
<el-input v-model="form.project.districtName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="路线编码" prop="路线编码">
<el-input v-model="form.project.routeNo"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="实施里程(公里)" prop="实施里程">
<el-input-number v-model="form.project.implementMileage" :controls="false"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="路线名称" prop="路线名称">
<el-input v-model="form.project.routeName"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="起点桩号" prop="起点桩号">
<el-input v-model="form.project.startStakeNo"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="止点桩号" prop="止点桩号">
<el-input v-model="form.project.endStakeNo"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="总投资(万元)" prop="总投资">
<el-input-number v-model="form.project.totalInvestment" :controls="false"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="预估费用(万元)" prop="预估费用">
<el-input-number v-model="form.project.estimatedCost" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="技术等级" prop="技术等级">
<el-select v-model="form.project.technicalGrade">
<el-option
v-for="item in [{ value: '三级', label: '三级' }, { value: '二级', label: '二级' }, { value: '一级', label: '一级' }]"
:key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="资金来源" prop="资金来源">
<el-input v-model="form.project.fundingSource"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="处置灾毁处数" prop="处置灾毁处数">
<el-input-number v-model="form.project.disposalCount" :controls="false"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="已完工处数" prop="已完工处数">
<el-input-number v-model="form.project.completedCount" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="工程状态" prop="工程状态">
<el-radio-group v-model="form.zt">
<el-radio value="1">在建</el-radio>
<el-radio value="2">停工</el-radio>
<el-form-item label="项目费用类型" prop="项目费用类型">
<el-radio-group v-model="form.project.projectExpenseType">
<el-radio value="自费重修">自费重修</el-radio>
<el-radio value="申报重修">申报重修</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="所属区县" prop="所属区县">
<el-select v-model="qx" filterable remote reserve-keyword clearable placeholder="输入区县名称查询"
:remote-method="remoteMethod_qx" :loading="loading" @change="handleSelect_qx" value-key="index">
<el-option v-for="(item, index) in qxList" :key="index" :label="item.qxmc" :value="item.qxmc" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目名称" prop="项目名称">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="驻地名称" prop="驻地名称">
<el-input />
<el-row style="margin: 20px 20px;">
<h4>实施情况</h4>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="主要建设内容" prop="主要建设内容">
<el-input v-model="form.project.mainConstructionContent" type="textarea"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="驻地类型" prop="驻地类型">
<el-select>
</el-select>
<el-row>
<el-col :span="12">
<el-form-item label="开工或预计开工时间" prop="开工或预计开工时间">
<el-date-picker type="date" v-model="form.project.startTime" format="YYYY/MM/DD"
value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="坐标点位" prop="坐标点位">
<el-row :gutter="10">
<el-col :span="12">
<el-input aria-label="经度" placeholder="经度" />
</el-col>
<el-col :span="12">
<el-input aria-label="纬度" placeholder="纬度" />
</el-col>
</el-row>
<el-col :span="12">
<el-form-item label="完工或预计完工时间" prop="完工或预计完工时间">
<el-date-picker type="date" v-model="form.project.endTime" format="YYYY/MM/DD"
value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="所属项目名称:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="项目类型:">
<el-select>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="建设单位:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="施工单位:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="行政区域:">
<el-select ></el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="驻地人数:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="驻地风险等级:">
<el-select ></el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="房建类型:">
<el-select ></el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="搬迁状态:">
<el-select ></el-select>
</el-form-item>
</el-col>
</el-row>
<el-row style="margin: 20px 0px;">
<h4>项目联系人信息</h4>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="吹哨人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="吹哨人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="建设单位包保责任人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="建设单位包保责任人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="施工单位包保责任人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="施工单位包保责任人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="驻地包保责任人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="驻地包保责任人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="区县级包保责任人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="区县级包保责任人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="市级包保责任人姓名:">
<el-input />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="市级包保责任人电话:">
<el-input />
</el-form-item>
</el-col>
</el-row>
<el-row style="margin: 20px 0px;">
<h4>其他信息</h4>
</el-row>
<el-row :gutter="20">
<el-row>
<el-col :span="24">
<el-form-item label="备注:">
<el-input />
<el-form-item label="是否在部交通统计报表管理系统报送投资" prop="是否在部交通统计报表管理系统报送投资" label-width="300px">
<el-radio-group v-model="form.project.isReportedToMinistry">
<el-radio value="1"></el-radio>
<el-radio value="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="已报送投资额" prop="已报送投资额" label-width="160px">
<el-input-number v-model="form.project.reportedInvestment" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="建设单位名称" prop="建设单位名称">
<el-input v-model="form.project.constructionUnit"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="建设单位联系人" prop="建设单位联系人">
<el-input v-model="form.project.constructionUnitContact"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="建设单位联系电话" prop="建设单位联系电话">
<el-input v-model="form.project.constructionUnitPhone"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工单位名称" prop="施工单位名称">
<el-input v-model="form.project.executionUnit"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="施工单位联系人" prop="施工单位联系人">
<el-input v-model="form.project.executionUnitContact"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工单位联系电话" prop="施工单位联系电话">
<el-input v-model="form.project.executionUnitPhone"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设计单位名称" prop="设计单位名称">
<el-input v-model="form.project.designUnit"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="设计单位联系人" prop="设计单位联系人">
<el-input v-model="form.project.designUnitContact"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="设计单位联系电话" prop="设计单位联系电话">
<el-input v-model="form.project.designUnitPhone"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="监理单位名称" prop="监理单位名称">
<el-input v-model="form.project.supervisionUnit"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="监理单位联系人" prop="监理单位联系人">
<el-input v-model="form.project.supervisionUnitContact"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="监理单位联系电话" prop="监理单位联系电话">
<el-input v-model="form.project.supervisionUnitPhone"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="施工图批复时间" prop="施工图批复时间">
<el-date-picker type="date" v-model="form.project.designApprovalTime" format="YYYY/MM/DD"
value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工图批复文件" prop="施工图批复文件">
<el-input v-model="form.project.xxx"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="施工合同时间" prop="施工合同时间">
<el-date-picker type="date" v-model="form.project.contractTime" format="YYYY/MM/DD"
value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="施工合同金额" prop="施工合同金额">
<el-input-number v-model="form.project.contractAmount" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="施工合同" prop="施工合同">
<el-input v-model="form.project.xxxx"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="建设完成投资" prop="建设完成投资">
<el-input-number v-model="form.project.completedInvestment" :controls="false"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="交竣工验收时间" prop="交竣工验收时间">
<el-date-picker type="date" v-model="form.project.acceptanceTime" format="YYYY/MM/DD"
value-format="YYYY-MM-DD"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="交竣工证书" prop="交竣工证书">
<el-input v-model="form.project.xxxx"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="其他佐证文件" prop="其他佐证文件">
<el-input v-model="form.project.xxxx"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="完工项目上传" prop="完工项目上传">
<el-input v-model="form.project.xxxx"></el-input>
</el-form-item>
</el-col>
</el-row>
@ -207,6 +282,10 @@ const props = defineProps({
type: Object,
default: () => ({}),
},
disabled: {
type: Boolean,
default: false,
}
});
const sfjwd = ref("是");
const qx = ref("");

View File

@ -14,11 +14,18 @@ const model = reactive({
onCancel: null,
onConfirm: null,
width: '',
footerPosition: null,
onCancelType: null,
onConfirmName: null,
onCancelName: null,
tagContent: null,
tagType: null,
});
const form = reactive({
});
const INIT_FORM = {
project: {},
fileList: []
};
// 抽屉内容
const drawer = reactive({
@ -158,7 +165,7 @@ const getTableData = async (filterData) => {
// 打开填报项目弹窗
const openAddDialog = () => {
model.title = '填报项目';
model.title = '';
Object.assign(form, INIT_FORM);
model.props = {
form: form,
@ -176,7 +183,11 @@ const openAddDialog = () => {
ElMessage.error('请处理表单中的错误项');
});
};
model.width = "70%"
model.width = "50%"
// model.footerPosition = 'center'
// model.onCancelType = 'null'
// model.tagType = 'warning'
// model.tagContent = '测试'
modelVisible.value = true;
}

View File

@ -18,7 +18,12 @@
<MyDialog v-model="script.modelVisible.value" :title="script.model?.title"
:dynamicComponent="script.model?.content" :component-props="script.model?.props"
:onConfirm="script.model?.onConfirm" :onCancel="script.model?.onCancel" ref="dialogRef"
:width="script.model?.width">
: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"
>
</MyDialog>
<MyDrawer v-model="script.drawerVisible.value" :title="script.drawer?.title"
:dynamicComponent="script.drawer?.content" :component-props="script.drawer?.props"
@ -36,6 +41,7 @@ import MyDialog from "../../component/MyDialog";
import MyDrawer from "../../component/MyDrawer";
import scriptFn from "./index.js";
const script = scriptFn();
const { dialogRef, drawerRef } = script;
</script>
<style scoped>