Compare commits

...

2 Commits

5 changed files with 229 additions and 17 deletions

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="panel-item"> <div class="panel-item">
<slot name="header"> <slot v-if="title" name="header">
<div class="header"> <div class="header">
<div class="header-title">{{ title }}</div> <div class="header-title">{{ title }}</div>
<div class="header-extra" v-if="$slots.headerExtra"> <div class="header-extra" v-if="$slots.headerExtra">

View File

@ -91,6 +91,11 @@ const routes = [
name: 'RebuildAdd', name: 'RebuildAdd',
component: () => import('../views/Rebuild/RebuildAdd.vue') component: () => import('../views/Rebuild/RebuildAdd.vue')
}, },
{
path: '/rebuild-details/:data?',
name: 'RebuildDetails',
component: () => import('../views/Rebuild/RebuildDetails.vue')
},
{ {
path: '/disasterManagement', path: '/disasterManagement',
name: 'DisasterManagement', name: 'DisasterManagement',

View File

@ -60,6 +60,7 @@ const searchValue = ref('')
// //
const list = ref([ const list = ref([
{ {
id: 1,
area: '彭水', area: '彭水',
rNumber: 'G211', rNumber: 'G211',
type: '发生水毁道路崩塌恢复重建', type: '发生水毁道路崩塌恢复重建',
@ -69,6 +70,7 @@ const list = ref([
status: '审批通过' status: '审批通过'
}, },
{ {
id: 2,
area: '巴南', area: '巴南',
rNumber: 'S303', rNumber: 'S303',
type: '道路发生边坡坍塌', type: '道路发生边坡坍塌',
@ -78,6 +80,7 @@ const list = ref([
status: '审批驳回' status: '审批驳回'
}, },
{ {
id: 3,
area: '彭水', area: '彭水',
rNumber: 'G211', rNumber: 'G211',
type: '道路崩塌改造工程', type: '道路崩塌改造工程',
@ -93,6 +96,15 @@ const handleClickBack = () => {
router.push('/') router.push('/')
} }
const handleClickItem = (item) => {
router.push({
name: 'RebuildDetails',
params: {
data: encodeURIComponent(JSON.stringify(item.id))
}
})
}
const handleAddDevice = () => { const handleAddDevice = () => {
router.push('/rebuild-add') router.push('/rebuild-add')
// router.push({ // router.push({

View File

@ -1,7 +1,50 @@
<template> <template>
<PageContainer title="项目填报" @click-back="handleClickBack"> <PageContainer title="项目填报" @click-back="handleClickBack">
<div class="content"> <div class="content">
<PanelItem>
<van-form label-align="left" colon>
<van-field v-model="form.name" label="区县名称" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写区县名称' }]" />
<van-field v-model="form.name" label="线路编号" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写线路编号' }]" />
<van-field v-model="form.name" label="起点桩号" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写起点桩号' }]" />
<van-field v-model="form.name" label="止点桩号" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写止点桩号' }]" />
<van-field v-model="form.name" label="止点桩号" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写止点桩号' }]" />
<van-field v-model="form.number" label="实施里程" center placeholder="单位:公里" required type="number"
:rules="[{ required: true, message: '请填写实施里程' }]">
<template #extra>
公里
</template>
</van-field>
<van-field v-model="form.name" label="塌方及损失" center placeholder="(方/万元)" required
:rules="[{ required: true, message: '请填写塌方及损失' }]" />
<van-field v-model="form.name" label="灾害类型" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写灾害类型' }]" />
<van-field v-model="form.name" label="地点路线" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写地点路线' }]" />
<van-field v-model="form.name" label="路况位置" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写路况位置' }]" />
<van-field v-model="form.name" label="阻断点小地名" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写阻断点小地名' }]" />
<van-field v-model="form.name" label="恢复重建预估费用" center placeholder="请填写" required
:rules="[{ required: true, message: '请填写恢复重建预估费用' }]">
<template #extra>
万元
</template>
</van-field>
<van-field label="附件" center>
<template #input>
<van-uploader v-model="fileList" @delete="handleDelete" name="photos" :file-list="fileList"
:file-type="['image/jpeg', 'image/png']" :after-read="afterRead" multiple
:max-count="6" />
</template>
</van-field>
</van-form>
</PanelItem>
</div> </div>
<van-button type="primary" class="add-btn" icon="plus" @click="handleAdd"> <van-button type="primary" class="add-btn" icon="plus" @click="handleAdd">
@ -16,14 +59,15 @@
import { ref, onMounted, watch } from 'vue' import { ref, onMounted, watch } from 'vue'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import PageContainer from '@/components/PageContainer.vue' import PageContainer from '@/components/PageContainer.vue'
import SearchInput from '@/components/SearchInput.vue' import { showToast, showLoadingToast } from "vant";
import CurrentSite from '@/components/CurrentSite.vue' import PanelItem from '@/components/PanelItem.vue'
import CardItem from '@/components/CardItem.vue'
import EmptyBox from '@/components/EmptyBox.vue'
const router = useRouter() const router = useRouter()
const route = useRoute() const route = useRoute()
const form = ref({})
const fileList = ref([]);
onMounted(() => { onMounted(() => {
if (route.params.data) { if (route.params.data) {
const data = JSON.parse(decodeURIComponent(route.params.data)); const data = JSON.parse(decodeURIComponent(route.params.data));
@ -41,23 +85,70 @@ const handleClickBack = () => {
router.push('/rebuild') router.push('/rebuild')
} }
} }
//
const handleDelete = (file) => {
if (file.serverUrl) {
const index = form.photos.findIndex((p) => p.photoUrl === file.serverUrl);
if (index !== -1) {
form.photos.splice(index, 1);
}
}
};
//
const afterRead = async (file) => {
try {
const toast = showLoadingToast({
message: "上传中...",
forbidClick: true,
duration: 0, // 0
});
const formData = new FormData();
formData.append("file", file.file);
const res = await request({
url: "/snow-ops-platform/file/upload",
method: "post",
data: formData,
});
toast.close();
if (res.code === "00000") {
form.photos.push({ photoUrl: res.data });
const index = fileList.value.findIndex((f) => f.file === file.file);
if (index !== -1) {
fileList.value[index].serverUrl = res.data;
}
console.log("form.photos", toRaw(form.photos));
console.log("fileList.value", fileList.value);
} else {
throw new Error(res.message);
}
} catch (error) {
toast.close();
showToast({
type: "fail",
message: error.message,
});
}
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.content { .content {
padding: 16px 16px 80px 16px; padding: 20px 0px 80px 0px;
} }
.add-btn { .add-btn {
position: fixed; position: fixed;
bottom: 20px; bottom: 20px;
left: 16px; left: 16px;
right: 16px; right: 16px;
width: calc(100% - 32px); width: calc(100% - 32px);
margin: 0 auto; margin: 0 auto;
border-radius: 24px; border-radius: 24px;
font-size: 16px; font-size: 16px;
height: 44px; height: 44px;
z-index: 999; z-index: 999;
} }
</style> </style>

View File

@ -0,0 +1,104 @@
<template>
<PageContainer title="项目填报" @click-back="handleClickBack">
<div class="content">
<PanelItem>
<div class="detail">
<div class="header">
<div class="header-title">{{ `${data.area} ${data.rNumber} ${data.type}` }}</div>
<div class="header-extra">
<van-tag v-if="data.status === '审批通过'" type="success" plain size="medium">{{ data.status
}}</van-tag>
<van-tag v-else-if="data.status === '审批驳回'" type="danger" plain size="medium">{{ data.status
}}</van-tag>
<van-tag v-else type="warning" plain size="medium">{{ data.status }}</van-tag>
</div>
</div>
<div class="item">区县名称 {{ data.area }}</div>
<div class="item">线路编号 {{ data.area }}</div>
<div class="item">起点桩号 {{ data.area }}</div>
<div class="item">止点桩号 {{ data.area }}</div>
<div class="item">实施里程 {{ data.area }}</div>
<div class="item">塌方及损失 {{ data.area }}</div>
<div class="item">灾害类型 {{ data.area }}</div>
<div class="item">地点路线 {{ data.area }}</div>
<div class="item">阻断点小地名 {{ data.area }}</div>
<div class="item">提交时间 {{ data.area }}</div>
<div class="item">恢复重建预估费用 {{ data.area }}</div>
</div>
</PanelItem>
<PanelItem title="附件">
<!-- 附件 -->
</PanelItem>
<PanelItem v-if="data.xxx">
<!-- 驳回理由 -->
</PanelItem>
</div>
</PageContainer>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import PageContainer from '@/components/PageContainer.vue'
import { showToast, showLoadingToast } from "vant";
import PanelItem from '@/components/PanelItem.vue'
const router = useRouter()
const route = useRoute()
const data = ref({
area: '',
rNumber: '',
type: '',
status: '审批通过',
})
onMounted(() => {
if (route.params.data) {
const data = JSON.parse(decodeURIComponent(route.params.data));
console.log('@@@@data', data);
// todo
} else {
console.log('无传入数据');
}
})
const handleClickBack = () => {
router.push('/rebuild')
}
</script>
<style scoped lang="scss">
.content {
padding: 20px 0px 0px 0px;
display: flex;
flex-direction: column;
gap: 10px;
}
.detail {
display: flex;
flex-direction: column;
}
.header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 18px;
}
.header-title {
font-weight: 500;
font-size: 20px;
color: #4a4a4a;
line-height: 16px;
}
.item {
margin-bottom: 18px;
}
</style>