271 lines
7.6 KiB
Vue
271 lines
7.6 KiB
Vue
|
<template>
|
|||
|
<el-dialog v-model="isShowDialog" title="变更单详情" draggable width="60vw" :close-on-click-modal="false" :destroy-on-close="true">
|
|||
|
<el-card :body-style="{ padding: '20px' }" style="border: none; box-shadow: none">
|
|||
|
<div class="dialog-footer">
|
|||
|
<div class="btn-item" @click="onLoad">
|
|||
|
<img src="./icon/down.png" />
|
|||
|
<span>导出</span>
|
|||
|
</div>
|
|||
|
</div>
|
|||
|
<el-form ref="formRef" :model="formData" label-width="100px" id="formContent" style="width: 75%; margin-left: 10%">
|
|||
|
<div class="table-content" id="table-content">
|
|||
|
<el-row class="mb20" style="display: flex; justify-content: center">
|
|||
|
<h2>设计变更申请单(总承包)</h2>
|
|||
|
</el-row>
|
|||
|
<el-row class="mb10" style="display: flex; justify-content: space-between">
|
|||
|
<div class="head-text">
|
|||
|
<span>NO:</span>
|
|||
|
<span>{{ formData.formNo }}</span>
|
|||
|
</div>
|
|||
|
<!-- <div class="head-text">
|
|||
|
<span>填报时间:</span>
|
|||
|
<span>{{ formData.createdAt }}</span>
|
|||
|
</div> -->
|
|||
|
</el-row>
|
|||
|
<table style="width: 100%" border="1" cellspacing="1">
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th width="150">工程名称</th>
|
|||
|
<td class="th-bg">{{ formData.projectName }}</td>
|
|||
|
<th width="150">提出单位</th>
|
|||
|
<td class="th-bg">{{ formData.submitUnit }}</td>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<th width="150">专业</th>
|
|||
|
<td class="th-bg">{{ formData.specialty }}</td>
|
|||
|
<th width="150">提出日期</th>
|
|||
|
<td class="th-bg">{{ parseTime(formData.submitDate, '{y}-{m}-{d}') }}</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th width="150">卷册名称</th>
|
|||
|
<td class="th-bg">{{ formData.volumeName }}</td>
|
|||
|
<th width="150">附图</th>
|
|||
|
<td class="th-bg">
|
|||
|
<el-image
|
|||
|
v-for="(item, i) of formData.attachmentPicList"
|
|||
|
:key="i"
|
|||
|
style="width: 100px; height: 100px"
|
|||
|
:src="item.url"
|
|||
|
fit="cover"
|
|||
|
:preview-src-list="[item.url]"
|
|||
|
/>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<th width="150">卷册号</th>
|
|||
|
<td colspan="3">{{ formData.volumeNo }}</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
<thead>
|
|||
|
<tr>
|
|||
|
<th width="150">变更原因</th>
|
|||
|
<td colspan="3">{{ formData.changeReason }}</td>
|
|||
|
</tr>
|
|||
|
</thead>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<th width="150">变更内容</th>
|
|||
|
<td colspan="3">{{ formData.changeContent }}</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
<tbody>
|
|||
|
<tr>
|
|||
|
<th width="150">变更费用估算(附计算表)</th>
|
|||
|
<td colspan="3">
|
|||
|
<div>
|
|||
|
<span
|
|||
|
v-for="(item, i) of formData.costEstimationFileList"
|
|||
|
:key="i"
|
|||
|
style="color: rgb(41 145 255);cursor: pointer"
|
|||
|
@click="onOpen(item.url)"
|
|||
|
>{{item.originalName}}</span>
|
|||
|
</div>
|
|||
|
</td>
|
|||
|
</tr>
|
|||
|
</tbody>
|
|||
|
</table>
|
|||
|
</div>
|
|||
|
</el-form>
|
|||
|
</el-card>
|
|||
|
</el-dialog>
|
|||
|
</template>
|
|||
|
|
|||
|
<script setup lang="ts">
|
|||
|
import { ref, reactive } from 'vue';
|
|||
|
import { listDesignChange, getDesignChange, delDesignChange, addDesignChange, updateDesignChange } from '@/api/design/designChange';
|
|||
|
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
|
|||
|
import { downLoadOss } from '@/api/system/oss';
|
|||
|
// 响应式状态
|
|||
|
const isShowDialog = ref(false);
|
|||
|
const initFormData: DesignChangeForm = {
|
|||
|
id: undefined,
|
|||
|
formNo: undefined,
|
|||
|
projectName: undefined,
|
|||
|
submitUnit: undefined,
|
|||
|
specialty: undefined,
|
|||
|
submitDate: undefined,
|
|||
|
volumeName: undefined,
|
|||
|
volumeNo: undefined,
|
|||
|
attachmentPic: undefined,
|
|||
|
changeReason: [],
|
|||
|
changeContent: undefined,
|
|||
|
costEstimation: undefined,
|
|||
|
costEstimationFile: undefined,
|
|||
|
fileId: undefined,
|
|||
|
status: undefined,
|
|||
|
remark: undefined
|
|||
|
};
|
|||
|
const data = reactive<PageData<DesignChangeForm, DesignChangeQuery>>({
|
|||
|
formData: { ...initFormData }
|
|||
|
});
|
|||
|
const design_change_reason_type = ref([]);
|
|||
|
const { formData } = toRefs(data);
|
|||
|
// 打开弹窗
|
|||
|
const openDialog = (row?: any, types) => {
|
|||
|
resetForm();
|
|||
|
design_change_reason_type.value = types;
|
|||
|
if (row?.id) {
|
|||
|
getInfos(row.id, types);
|
|||
|
}
|
|||
|
isShowDialog.value = true;
|
|||
|
};
|
|||
|
// 获取详情数据
|
|||
|
const getInfos = async (id: string, types) => {
|
|||
|
const res = await getDesignChange(id);
|
|||
|
Object.assign(formData.value, res.data);
|
|||
|
// 数据处理
|
|||
|
if (formData.value.changeReason) {
|
|||
|
let arr = formData.value.changeReason.split(',');
|
|||
|
var changeReason = types.filter((item) => arr.includes(item.value.toString())).map((item) => item.label);
|
|||
|
formData.value.changeReason = changeReason.join(',');
|
|||
|
}
|
|||
|
};
|
|||
|
// 重置表单
|
|||
|
const resetForm = () => {
|
|||
|
Object.keys(formData.value).forEach((key) => {
|
|||
|
formData[key] = undefined;
|
|||
|
});
|
|||
|
};
|
|||
|
// 下载文件
|
|||
|
const onOpen = (path: string) => {
|
|||
|
window.open(path, '_blank');
|
|||
|
};
|
|||
|
// 导出
|
|||
|
const onLoad = async () => {
|
|||
|
await downLoadOss({ id: formData.value.id }, '/design/designChange/export/word', '设计变更单.zip');
|
|||
|
};
|
|||
|
|
|||
|
// 关闭弹窗
|
|||
|
const closeDialog = () => {
|
|||
|
isShowDialog.value = false;
|
|||
|
};
|
|||
|
|
|||
|
// 暴露方法给父组件
|
|||
|
defineExpose({
|
|||
|
openDialog,
|
|||
|
closeDialog
|
|||
|
});
|
|||
|
</script>
|
|||
|
|
|||
|
<style scoped lang="scss">
|
|||
|
.pic-block {
|
|||
|
margin-right: 8px;
|
|||
|
}
|
|||
|
.file-block {
|
|||
|
width: 100%;
|
|||
|
border: 1px solid var(--el-border-color);
|
|||
|
border-radius: 6px;
|
|||
|
cursor: pointer;
|
|||
|
position: relative;
|
|||
|
overflow: hidden;
|
|||
|
transition: var(--el-transition-duration-fast);
|
|||
|
margin-bottom: 5px;
|
|||
|
padding: 3px 6px;
|
|||
|
}
|
|||
|
.ml-2 {
|
|||
|
margin-right: 5px;
|
|||
|
}
|
|||
|
::v-deep .el-icon svg {
|
|||
|
height: 100% !important;
|
|||
|
width: 100% !important;
|
|||
|
}
|
|||
|
::v-deep .el-step__icon-inner {
|
|||
|
font-size: 14px !important;
|
|||
|
font-weight: 700 !important;
|
|||
|
}
|
|||
|
.dialog-footer {
|
|||
|
height: 100px;
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
justify-content: space-between;
|
|||
|
position: absolute;
|
|||
|
top: 14%;
|
|||
|
right: 10%;
|
|||
|
background: #fff;
|
|||
|
box-shadow: 0px 0px 10px #ddd;
|
|||
|
text-align: center;
|
|||
|
padding: 20px 10px;
|
|||
|
.btn-item {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
justify-content: center;
|
|||
|
cursor: pointer;
|
|||
|
> span {
|
|||
|
padding-top: 5px;
|
|||
|
font-size: 14px;
|
|||
|
font-weight: 400;
|
|||
|
color: rgba(51, 51, 51, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
table {
|
|||
|
border-collapse: collapse; //合并为一个单一的边框
|
|||
|
border-color: rgba(199, 199, 199, 1); //边框颜色按实际自定义即可
|
|||
|
}
|
|||
|
thead {
|
|||
|
tr {
|
|||
|
th {
|
|||
|
background-color: rgba(247, 247, 247, 1); //设置表格标题背景色
|
|||
|
height: 35px; //设置单元格最小高度
|
|||
|
text-align: center;
|
|||
|
letter-spacing: 5px;
|
|||
|
padding: 15px;
|
|||
|
}
|
|||
|
td {
|
|||
|
text-align: left;
|
|||
|
height: 35px; //设置单元格最小高度
|
|||
|
padding: 15px;
|
|||
|
}
|
|||
|
.th-bg {
|
|||
|
background-color: rgba(247, 247, 247, 1);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
tbody {
|
|||
|
tr {
|
|||
|
td {
|
|||
|
text-align: left;
|
|||
|
height: 40px; //设置单元格最小高度
|
|||
|
padding: 15px;
|
|||
|
}
|
|||
|
th {
|
|||
|
height: 35px; //设置单元格最小高度
|
|||
|
text-align: center;
|
|||
|
letter-spacing: 5px;
|
|||
|
padding: 15px;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
.table-content {
|
|||
|
box-shadow: 0px 0px 10px #ddd;
|
|||
|
padding: 20px;
|
|||
|
position: relative;
|
|||
|
}
|
|||
|
</style>
|