|
@@ -12,55 +12,51 @@
|
|
|
<el-input v-model="formValue.projectName" size="large" placeholder="请输入项目名称" style="width: 330px" />
|
|
<el-input v-model="formValue.projectName" size="large" placeholder="请输入项目名称" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="施工单位" prop="constructionUnit">
|
|
|
|
|
|
|
+ <el-form-item label="施工地点(区域)" prop="constructionLocation">
|
|
|
<el-input
|
|
<el-input
|
|
|
- v-model="formValue.constructionUnit"
|
|
|
|
|
|
|
+ v-model="formValue.constructionLocation"
|
|
|
size="large"
|
|
size="large"
|
|
|
- placeholder="请输入单位全称"
|
|
|
|
|
|
|
+ placeholder="请输入施工地点(区域)"
|
|
|
style="width: 330px"
|
|
style="width: 330px"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="施工地点" prop="constructionLocation">
|
|
|
|
|
|
|
+ <el-form-item label="施工单位名称" prop="constructionUnit">
|
|
|
<el-input
|
|
<el-input
|
|
|
- v-model="formValue.constructionLocation"
|
|
|
|
|
|
|
+ v-model="formValue.constructionUnit"
|
|
|
size="large"
|
|
size="large"
|
|
|
- placeholder="楼宇名称/区域"
|
|
|
|
|
|
|
+ placeholder="请输入施工单位名称"
|
|
|
style="width: 330px"
|
|
style="width: 330px"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="施工人数" prop="workerCount">
|
|
|
|
|
- <el-input-number v-model="formValue.workerCount" size="large" :min="1" style="width: 330px" />
|
|
|
|
|
- </el-form-item>
|
|
|
|
|
-
|
|
|
|
|
- <el-form-item label="项目负责人" prop="projectManagerName">
|
|
|
|
|
- <el-input v-model="formValue.projectManagerName" size="large" placeholder="负责人姓名" style="width: 330px" />
|
|
|
|
|
|
|
+ <el-form-item label="施工项目负责人" prop="projectManagerName">
|
|
|
|
|
+ <el-input v-model="formValue.projectManagerName" size="large" placeholder="输入施工项目负责人" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="负责人电话1" prop="projectManagerPhone1">
|
|
|
|
|
- <el-input v-model="formValue.projectManagerPhone1" size="large" placeholder="必填" style="width: 330px" />
|
|
|
|
|
|
|
+ <el-form-item label="施工项目负责人电话1" prop="projectManagerPhone1">
|
|
|
|
|
+ <el-input v-model="formValue.projectManagerPhone1" size="large" placeholder="输入施工项目负责人电话1" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="负责人电话2" prop="projectManagerPhone2">
|
|
|
|
|
- <el-input v-model="formValue.projectManagerPhone2" size="large" placeholder="选填" style="width: 330px" />
|
|
|
|
|
|
|
+ <el-form-item label="施工项目负责人电话2" prop="projectManagerPhone2">
|
|
|
|
|
+ <el-input v-model="formValue.projectManagerPhone2" size="large" placeholder="输入施工项目负责人电话2" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="现场安全员" prop="siteSafetyManagerName">
|
|
|
|
|
|
|
+ <el-form-item label="施工现场安全负责人" prop="siteSafetyManagerName">
|
|
|
<el-input
|
|
<el-input
|
|
|
v-model="formValue.siteSafetyManagerName"
|
|
v-model="formValue.siteSafetyManagerName"
|
|
|
size="large"
|
|
size="large"
|
|
|
- placeholder="安全员姓名"
|
|
|
|
|
|
|
+ placeholder="输入施工现场安全负责人"
|
|
|
style="width: 330px"
|
|
style="width: 330px"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="安全员电话1" prop="siteSafetyPhone1">
|
|
|
|
|
- <el-input v-model="formValue.siteSafetyPhone1" size="large" placeholder="必填" style="width: 330px" />
|
|
|
|
|
|
|
+ <el-form-item label="施工现场安全负责人电话1" prop="siteSafetyPhone1">
|
|
|
|
|
+ <el-input v-model="formValue.siteSafetyPhone1" size="large" placeholder="输入施工现场安全负责人电话1" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="安全员电话2" prop="siteSafetyPhone2">
|
|
|
|
|
- <el-input v-model="formValue.siteSafetyPhone2" size="large" placeholder="选填" style="width: 330px" />
|
|
|
|
|
|
|
+ <el-form-item label="施工现场安全负责人电话2" prop="siteSafetyPhone2">
|
|
|
|
|
+ <el-input v-model="formValue.siteSafetyPhone2" size="large" placeholder="输入施工现场安全负责人电话2" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<el-form-item label="开始时间" prop="projectStartTime">
|
|
<el-form-item label="开始时间" prop="projectStartTime">
|
|
@@ -69,6 +65,7 @@
|
|
|
type="date"
|
|
type="date"
|
|
|
value-format="YYYY-MM-DD"
|
|
value-format="YYYY-MM-DD"
|
|
|
size="large"
|
|
size="large"
|
|
|
|
|
+ placeholder="开始时间"
|
|
|
style="width: 330px"
|
|
style="width: 330px"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
@@ -79,11 +76,16 @@
|
|
|
type="date"
|
|
type="date"
|
|
|
value-format="YYYY-MM-DD"
|
|
value-format="YYYY-MM-DD"
|
|
|
size="large"
|
|
size="large"
|
|
|
|
|
+ placeholder="结束时间"
|
|
|
style="width: 330px"
|
|
style="width: 330px"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="涉及工种" prop="involvedTrades" style="width: 87.2%">
|
|
|
|
|
|
|
+ <el-form-item label="施工人数" prop="workerCount">
|
|
|
|
|
+ <el-input-number v-model="formValue.workerCount" size="large" :min="1" style="width: 330px" />
|
|
|
|
|
+ </el-form-item>
|
|
|
|
|
+
|
|
|
|
|
+ <el-form-item label="所涉工种" prop="involvedTrades" style="width: 87.2%">
|
|
|
<el-checkbox-group v-model="tradeArray">
|
|
<el-checkbox-group v-model="tradeArray">
|
|
|
<el-checkbox
|
|
<el-checkbox
|
|
|
v-for="t in ['水电', '泥瓦', '木工', '焊接', '气割', '登高', '密闭', '特种驾驶', '其他']"
|
|
v-for="t in ['水电', '泥瓦', '木工', '焊接', '气割', '登高', '密闭', '特种驾驶', '其他']"
|
|
@@ -97,37 +99,38 @@
|
|
|
<el-input v-model="formValue.otherTrade" size="large" placeholder="请补充工种类型" style="width: 330px" />
|
|
<el-input v-model="formValue.otherTrade" size="large" placeholder="请补充工种类型" style="width: 330px" />
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="施工内容简述" prop="constructionContent" style="width: 87.2%">
|
|
|
|
|
|
|
+ <el-form-item label="工程施工内容(方案)简要描述" prop="constructionContent" style="width: 81%">
|
|
|
<el-input
|
|
<el-input
|
|
|
type="textarea"
|
|
type="textarea"
|
|
|
v-model="formValue.constructionContent"
|
|
v-model="formValue.constructionContent"
|
|
|
size="large"
|
|
size="large"
|
|
|
:rows="3"
|
|
:rows="3"
|
|
|
- placeholder="简要描述施工方案"
|
|
|
|
|
|
|
+ placeholder="输入工程施工内容(方案)简要描述"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
- <el-form-item label="备注说明" prop="otherDescription" style="width: 87.2%">
|
|
|
|
|
|
|
+ <el-form-item label="其他说明" prop="otherDescription" style="width: 81%">
|
|
|
<el-input
|
|
<el-input
|
|
|
type="textarea"
|
|
type="textarea"
|
|
|
v-model="formValue.otherDescription"
|
|
v-model="formValue.otherDescription"
|
|
|
size="large"
|
|
size="large"
|
|
|
:rows="3"
|
|
:rows="3"
|
|
|
- placeholder="其他补充说明"
|
|
|
|
|
|
|
+ placeholder="补充其他说明"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
|
|
<div style="width: 100%; height: 1px; background: #eee; margin: 20px 0"></div>
|
|
<div style="width: 100%; height: 1px; background: #eee; margin: 20px 0"></div>
|
|
|
<div style="width: 100%; margin-bottom: 20px; font-weight: bold; padding-left: 10px"
|
|
<div style="width: 100%; margin-bottom: 20px; font-weight: bold; padding-left: 10px"
|
|
|
- >附件上传清单(全项必填)</div
|
|
|
|
|
- >
|
|
|
|
|
|
|
+ >附件上传清单(全项必填)</div>
|
|
|
|
|
|
|
|
<el-form-item
|
|
<el-form-item
|
|
|
v-for="item in attachmentConfigs"
|
|
v-for="item in attachmentConfigs"
|
|
|
:key="item.prop"
|
|
:key="item.prop"
|
|
|
:label="item.label"
|
|
:label="item.label"
|
|
|
|
|
+ label-width="240px"
|
|
|
:prop="item.prop"
|
|
:prop="item.prop"
|
|
|
- style="width: 43.6%"
|
|
|
|
|
|
|
+ class="label"
|
|
|
|
|
+ style="width: 43.6%;"
|
|
|
>
|
|
>
|
|
|
<UploadFiles
|
|
<UploadFiles
|
|
|
label="上传文件"
|
|
label="上传文件"
|
|
@@ -175,18 +178,26 @@
|
|
|
const tradeArray = ref<string[]>([]);
|
|
const tradeArray = ref<string[]>([]);
|
|
|
const approvalOptions = ref<any[]>([]);
|
|
const approvalOptions = ref<any[]>([]);
|
|
|
const attachmentConfigs = [
|
|
const attachmentConfigs = [
|
|
|
- { label: '施工安全交底', prop: 'safetyCommitmentAttachment' },
|
|
|
|
|
- { label: '安全管理协议', prop: 'safetyAgreementAttachment' },
|
|
|
|
|
- { label: '安全告知单', prop: 'safetyNoticeAttachment' },
|
|
|
|
|
- { label: '施工方案', prop: 'constructionPlanAttachment' },
|
|
|
|
|
|
|
+ { label: '施工人员身份信息(复印件,施工单位盖章)', prop: 'personnelIdAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '施工方提供施工安全交底(施工方敲章)', prop: 'safetyCommitmentAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '施工方提供施工人员安全教育(施工人员签字并敲章)', prop: 'safetyEducationAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '安全管理协议(双方签字两份,上飞院部门领导签甲方代表、乙方盖章并签字)', prop: 'safetyAgreementAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '施工作业环境承诺(上飞院的项目具体经办人签字)', prop: 'environmentCommitmentAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '安全告知单(部门具体经办人签字)', prop: 'safetyNoticeAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '消防管理承诺书(部门具体经办人签字)', prop: 'fireManagementAttachment' },
|
|
|
|
|
+
|
|
|
|
|
+ { label: '施工方案(含风险识别、安全措施、应急预案等)', prop: 'constructionPlanAttachment' },
|
|
|
|
|
+
|
|
|
{ label: '劳保用品清单', prop: 'ppeListAttachment' },
|
|
{ label: '劳保用品清单', prop: 'ppeListAttachment' },
|
|
|
{ label: '施工机械清单', prop: 'equipmentListAttachment' },
|
|
{ label: '施工机械清单', prop: 'equipmentListAttachment' },
|
|
|
- { label: '人员身份信息', prop: 'personnelIdAttachment' },
|
|
|
|
|
- { label: '安全教育记录', prop: 'safetyEducationAttachment' },
|
|
|
|
|
- { label: '环境承诺书', prop: 'environmentCommitmentAttachment' },
|
|
|
|
|
- { label: '消防管理承诺', prop: 'fireManagementAttachment' },
|
|
|
|
|
- { label: '特种作业证', prop: 'specialWorkerCertAttachment' },
|
|
|
|
|
- { label: '特种设备合格证', prop: 'specialEquipmentCertAttachment' },
|
|
|
|
|
|
|
+ { label: '若有特种施工人员提供特种作业证(复印件,施工单位盖章)', prop: 'specialWorkerCertAttachment' },
|
|
|
|
|
+ { label: '若有特种设备提供特种设备的合格证(复印件,施工单位盖章', prop: 'specialEquipmentCertAttachment' },
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
const attachmentLists = reactive<any>(Object.fromEntries(attachmentConfigs.map((a) => [a.prop, []])));
|
|
const attachmentLists = reactive<any>(Object.fromEntries(attachmentConfigs.map((a) => [a.prop, []])));
|
|
@@ -231,9 +242,67 @@
|
|
|
constructionLocation: [{ required: true, message: '请输入施工地点', trigger: 'blur' }],
|
|
constructionLocation: [{ required: true, message: '请输入施工地点', trigger: 'blur' }],
|
|
|
workerCount: [{ required: true, message: '请输入人数', trigger: 'blur' }],
|
|
workerCount: [{ required: true, message: '请输入人数', trigger: 'blur' }],
|
|
|
projectManagerName: [{ required: true, message: '请输入项目负责人', trigger: 'blur' }],
|
|
projectManagerName: [{ required: true, message: '请输入项目负责人', trigger: 'blur' }],
|
|
|
- projectManagerPhone1: [{ required: true, message: '请输入电话', trigger: 'blur' }],
|
|
|
|
|
|
|
+ projectManagerPhone1: [
|
|
|
|
|
+ { required: true, message: '请输入电话', trigger: 'blur' },
|
|
|
|
|
+ {
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请输入电话'));
|
|
|
|
|
+ } else if (!/^1[3-9]\d{9}$/.test(value)) {
|
|
|
|
|
+ callback(new Error('请输入有效的11位手机号'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ projectManagerPhone2: [
|
|
|
|
|
+ { required: true, message: '请输入电话', trigger: 'blur' },
|
|
|
|
|
+ {
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请输入电话'));
|
|
|
|
|
+ } else if (!/^1[3-9]\d{9}$/.test(value)) {
|
|
|
|
|
+ callback(new Error('请输入有效的11位手机号'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
siteSafetyManagerName: [{ required: true, message: '请输入安全负责人', trigger: 'blur' }],
|
|
siteSafetyManagerName: [{ required: true, message: '请输入安全负责人', trigger: 'blur' }],
|
|
|
- siteSafetyPhone1: [{ required: true, message: '请输入电话', trigger: 'blur' }],
|
|
|
|
|
|
|
+ siteSafetyPhone1: [
|
|
|
|
|
+ { required: true, message: '请输入电话', trigger: 'blur' },
|
|
|
|
|
+ {
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请输入电话'));
|
|
|
|
|
+ } else if (!/^1[3-9]\d{9}$/.test(value)) {
|
|
|
|
|
+ callback(new Error('请输入有效的11位手机号'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
|
|
+ siteSafetyPhone2: [
|
|
|
|
|
+ { required: true, message: '请输入电话', trigger: 'blur' },
|
|
|
|
|
+ {
|
|
|
|
|
+ validator: (_rule: any, value: any, callback: any) => {
|
|
|
|
|
+ if (!value) {
|
|
|
|
|
+ callback(new Error('请输入电话'));
|
|
|
|
|
+ } else if (!/^1[3-9]\d{9}$/.test(value)) {
|
|
|
|
|
+ callback(new Error('请输入有效的11位手机号'));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ callback();
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ trigger: 'blur'
|
|
|
|
|
+ }
|
|
|
|
|
+ ],
|
|
|
projectStartTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
projectStartTime: [{ required: true, message: '请选择开始时间', trigger: 'change' }],
|
|
|
projectEndTime: [
|
|
projectEndTime: [
|
|
|
{ required: true, message: '请选择结束时间', trigger: 'change' },
|
|
{ required: true, message: '请选择结束时间', trigger: 'change' },
|
|
@@ -302,4 +371,9 @@
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ .label{
|
|
|
|
|
+ :deep(.el-form-item__label){
|
|
|
|
|
+ line-height: 26px;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
</style>
|
|
</style>
|