Merge branch 'dev' of http://222.212.85.86:8222/bdzl2/bxztApp into dev
This commit is contained in:
commit
fa880703b2
@ -5,8 +5,8 @@
|
|||||||
<CurrentSite />
|
<CurrentSite />
|
||||||
|
|
||||||
<div class="list-panel">
|
<div class="list-panel">
|
||||||
<CardItem v-for="(item, index) in list" :key="index" :title="`${item.projectName}`"
|
<van-list :loading="loading" :finished="finished" finished-text="没有更多了" @load="handleLoadMore">
|
||||||
@click="handleClickItem(item)">
|
<CardItem v-for="(item, index) in list" :key="index" :title="`${item.projectName}`" @click="handleClickItem(item)">
|
||||||
<template #headerExtra>
|
<template #headerExtra>
|
||||||
<van-tag v-if="item.approvalStatus === 3 || item.approvalStatus === 1" type="success" plain size="medium">审批通过</van-tag>
|
<van-tag v-if="item.approvalStatus === 3 || item.approvalStatus === 1" type="success" plain size="medium">审批通过</van-tag>
|
||||||
<van-tag v-else-if="item.approvalStatus === 2 || item.approvalStatus === 4" type="danger" plain size="medium">审批驳回</van-tag>
|
<van-tag v-else-if="item.approvalStatus === 2 || item.approvalStatus === 4" type="danger" plain size="medium">审批驳回</van-tag>
|
||||||
@ -15,11 +15,19 @@
|
|||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="left-info">
|
<div class="left-info">
|
||||||
<div><span class="label">起止桩号:</span><span class="value">{{ `${item.startStakeNo} -
|
<div>
|
||||||
${item.endStakeNo}`}}</span>
|
<span class="label">起止桩号:</span
|
||||||
|
><span class="value">{{
|
||||||
|
`${item.startStakeNo} -
|
||||||
|
${item.endStakeNo}`
|
||||||
|
}}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="label">路况位置:</span><span class="value">{{ item.roadLocation }}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<span class="label">提交日期:</span><span class="value">{{ item.submitTime }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div><span class="label">路况位置:</span><span class="value">{{ item.roadLocation }}</span></div>
|
|
||||||
<div><span class="label">提交日期:</span><span class="value">{{ item.submitTime }}</span></div>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="right-arrow" @click.stop="handleClickItem(item)">
|
<div class="right-arrow" @click.stop="handleClickItem(item)">
|
||||||
<van-icon name="arrow" />
|
<van-icon name="arrow" />
|
||||||
@ -28,12 +36,11 @@
|
|||||||
</CardItem>
|
</CardItem>
|
||||||
|
|
||||||
<!-- 空状态提示 -->
|
<!-- 空状态提示 -->
|
||||||
<EmptyBox v-if="list.length === 0" placeholder="暂无相关预警信息" />
|
<!-- <EmptyBox v-if="list.length === 0" placeholder="暂无相关预警信息" /> -->
|
||||||
|
</van-list>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<van-button type="primary" class="add-btn" icon="plus" @click="handleAddDevice">
|
<van-button type="primary" class="add-btn" icon="plus" @click="handleAddDevice"> 项目填报 </van-button>
|
||||||
项目填报
|
|
||||||
</van-button>
|
|
||||||
</PageContainer>
|
</PageContainer>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -45,29 +52,57 @@ import SearchInput from '@/components/SearchInput.vue'
|
|||||||
import CurrentSite from '@/components/CurrentSite.vue'
|
import CurrentSite from '@/components/CurrentSite.vue'
|
||||||
import CardItem from '@/components/CardItem.vue'
|
import CardItem from '@/components/CardItem.vue'
|
||||||
import EmptyBox from '@/components/EmptyBox.vue'
|
import EmptyBox from '@/components/EmptyBox.vue'
|
||||||
import { request } from "../../../../shared/utils/request";
|
import { request } from '../../../../shared/utils/request'
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
|
const loading = ref(false)
|
||||||
|
const finished = ref(false)
|
||||||
|
|
||||||
|
const pageNum = ref(1)
|
||||||
|
const pageSize = 10
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getData()
|
getData({ reset: true })
|
||||||
})
|
})
|
||||||
|
|
||||||
const getData = async () => {
|
const getData = async ({ reset = false } = {}) => {
|
||||||
|
if (loading.value) return
|
||||||
|
|
||||||
|
if (reset) {
|
||||||
|
pageNum.value = 1
|
||||||
|
finished.value = false
|
||||||
|
list.value = []
|
||||||
|
}
|
||||||
|
|
||||||
|
if (finished.value) return
|
||||||
|
|
||||||
|
loading.value = true
|
||||||
|
|
||||||
|
try {
|
||||||
const params = {
|
const params = {
|
||||||
pageNum: 1,
|
pageNum: pageNum.value,
|
||||||
pageSize: 999,
|
pageSize,
|
||||||
}
|
}
|
||||||
if (searchValue.value) {
|
if (searchValue.value) {
|
||||||
params.districtName = searchValue.value
|
params.districtName = searchValue.value.trim()
|
||||||
}
|
}
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/snow-ops-platform/recovery/list',
|
url: '/snow-ops-platform/recovery/list',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params
|
params,
|
||||||
})
|
})
|
||||||
if (res.code === '00000') {
|
if (res.code === '00000' && res.data?.records) {
|
||||||
list.value = res.data.records
|
list.value = reset ? res.data.records : [...list.value, ...res.data.records]
|
||||||
|
const total = Number(res.data.total || 0)
|
||||||
|
finished.value = list.value.length >= total || res.data.records.length < pageSize
|
||||||
|
pageNum.value += 1
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('获取列表失败:', error)
|
||||||
|
showToast('获取数据失败,请稍后重试')
|
||||||
|
finished.value = true
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,7 +112,6 @@ const searchValue = ref('')
|
|||||||
// 预警列表数据
|
// 预警列表数据
|
||||||
const list = ref([])
|
const list = ref([])
|
||||||
|
|
||||||
|
|
||||||
const handleClickBack = () => {
|
const handleClickBack = () => {
|
||||||
router.push('/')
|
router.push('/')
|
||||||
}
|
}
|
||||||
@ -86,8 +120,8 @@ const handleClickItem = (item) => {
|
|||||||
router.push({
|
router.push({
|
||||||
name: 'RebuildDetails',
|
name: 'RebuildDetails',
|
||||||
params: {
|
params: {
|
||||||
data: encodeURIComponent(JSON.stringify(item.id))
|
data: encodeURIComponent(JSON.stringify(item.id)),
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,11 +135,17 @@ const handleAddDevice = () => {
|
|||||||
// });
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
watch(() => searchValue.value, () => {
|
const handleLoadMore = () => {
|
||||||
|
if (loading.value) return
|
||||||
getData()
|
getData()
|
||||||
})
|
}
|
||||||
|
|
||||||
|
|
||||||
|
watch(
|
||||||
|
() => searchValue.value,
|
||||||
|
() => {
|
||||||
|
getData({ reset: true })
|
||||||
|
},
|
||||||
|
)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@ -3,57 +3,107 @@
|
|||||||
<div class="content">
|
<div class="content">
|
||||||
<PanelItem>
|
<PanelItem>
|
||||||
<van-form ref="formRef" label-align="left" colon>
|
<van-form ref="formRef" label-align="left" colon>
|
||||||
<van-field v-model="form.project.districtName" label="区县名称" center placeholder="请填写" required
|
<van-field
|
||||||
:rules="[{ required: true, message: '请填写区县名称' }]" />
|
v-model="form.project.districtName"
|
||||||
<RoadRoutesPicker v-model="form.project.routeNo" label="线路编号" center placeholder="请选择" required
|
label="区县名称"
|
||||||
:rules="[{ required: true, message: '请选择线路编号' }]" @change="handleRouteNoChange" />
|
center
|
||||||
<van-field v-model="form.project.startStakeNo" label="起点桩号" disabled center placeholder="请选择线路编号"
|
placeholder="请填写"
|
||||||
required :rules="[{ required: true, message: '请填写起点桩号' }]" />
|
:rules="[{ required: true, message: '请填写区县名称' }]"
|
||||||
<van-field v-model="form.project.endStakeNo" label="止点桩号" disabled center placeholder="请选择线路编号"
|
/>
|
||||||
required :rules="[{ required: true, message: '请填写止点桩号' }]" />
|
<RoadRoutesPicker
|
||||||
<van-field v-model="form.project.implementMileage" label="实施里程" center placeholder="单位:公里" required
|
v-model="form.project.routeNo"
|
||||||
type="number" :rules="[{ required: true, message: '请填写实施里程' }]">
|
label="线路编号"
|
||||||
<template #extra>
|
center
|
||||||
公里
|
placeholder="请选择"
|
||||||
</template>
|
:rules="[{ required: true, message: '请选择线路编号' }]"
|
||||||
|
@change="handleRouteNoChange"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.startStakeNo"
|
||||||
|
label="起点桩号"
|
||||||
|
disabled
|
||||||
|
center
|
||||||
|
placeholder="请选择线路编号"
|
||||||
|
:rules="[{ required: true, message: '请填写起点桩号' }]"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.endStakeNo"
|
||||||
|
label="止点桩号"
|
||||||
|
disabled
|
||||||
|
center
|
||||||
|
placeholder="请选择线路编号"
|
||||||
|
:rules="[{ required: true, message: '请填写止点桩号' }]"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.implementMileage"
|
||||||
|
label="实施里程"
|
||||||
|
center
|
||||||
|
placeholder="单位:公里"
|
||||||
|
type="number"
|
||||||
|
:rules="[{ required: true, message: '请填写实施里程' }]"
|
||||||
|
>
|
||||||
|
<template #extra> 公里 </template>
|
||||||
</van-field>
|
</van-field>
|
||||||
<van-field v-model="form.project.earthworkLoss" label="塌方及损失" center placeholder="(方/万元)" required
|
<van-field
|
||||||
:rules="[{ required: true, message: '请填写塌方及损失' }]" />
|
v-model="form.project.earthworkLoss"
|
||||||
<van-field v-model="form.project.disasterType" label="灾害类型" center placeholder="请填写" required
|
label="塌方及损失"
|
||||||
:rules="[{ required: true, message: '请填写灾害类型' }]" />
|
center
|
||||||
<van-field v-model="form.project.locationRoute" label="地点路线" center placeholder="请填写" required
|
placeholder="(方/万元)"
|
||||||
:rules="[{ required: true, message: '请填写地点路线' }]" />
|
:rules="[{ required: true, message: '请填写塌方及损失' }]"
|
||||||
<van-field v-model="form.project.roadLocation" label="路况位置" center placeholder="请填写" required
|
/>
|
||||||
:rules="[{ required: true, message: '请填写路况位置' }]" />
|
<van-field
|
||||||
<van-field v-model="form.project.blockedPointName" label="阻断点小地名" center placeholder="请填写" required
|
v-model="form.project.disasterType"
|
||||||
:rules="[{ required: true, message: '请填写阻断点小地名' }]" />
|
label="灾害类型"
|
||||||
<van-field v-model="form.project.estimatedCost" label="恢复重建预估费用" center placeholder="请填写" required
|
center
|
||||||
:rules="[{ required: true, message: '请填写恢复重建预估费用' }]">
|
placeholder="请填写"
|
||||||
<template #extra>
|
:rules="[{ required: true, message: '请填写灾害类型' }]"
|
||||||
万元
|
/>
|
||||||
</template>
|
<van-field
|
||||||
|
v-model="form.project.locationRoute"
|
||||||
|
label="地点路线"
|
||||||
|
center
|
||||||
|
placeholder="请填写"
|
||||||
|
:rules="[{ required: true, message: '请填写地点路线' }]"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.roadLocation"
|
||||||
|
label="路况位置"
|
||||||
|
center
|
||||||
|
placeholder="请填写"
|
||||||
|
:rules="[{ required: true, message: '请填写路况位置' }]"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.blockedPointName"
|
||||||
|
label="阻断点小地名"
|
||||||
|
center
|
||||||
|
placeholder="请填写"
|
||||||
|
:rules="[{ required: true, message: '请填写阻断点小地名' }]"
|
||||||
|
/>
|
||||||
|
<van-field
|
||||||
|
v-model="form.project.estimatedCost"
|
||||||
|
label="恢复重建预估费用"
|
||||||
|
center
|
||||||
|
placeholder="请填写"
|
||||||
|
:rules="[{ required: true, message: '请填写恢复重建预估费用' }]"
|
||||||
|
>
|
||||||
|
<template #extra> 万元 </template>
|
||||||
</van-field>
|
</van-field>
|
||||||
<DisasterFileUpload label="附件上传" v-model="form.fileList"></DisasterFileUpload>
|
<DisasterFileUpload label="附件上传" v-model="form.fileList"></DisasterFileUpload>
|
||||||
</van-form>
|
</van-form>
|
||||||
|
|
||||||
</PanelItem>
|
</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"> 提交 </van-button>
|
||||||
提交
|
|
||||||
</van-button>
|
|
||||||
</PageContainer>
|
</PageContainer>
|
||||||
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, onMounted, watch, reactive, toRaw } from 'vue'
|
import { ref, onMounted, watch, reactive, toRaw } 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 { showToast, showLoadingToast } from "vant";
|
import { showToast, showLoadingToast } from 'vant'
|
||||||
import PanelItem from '@/components/PanelItem.vue'
|
import PanelItem from '@/components/PanelItem.vue'
|
||||||
import { request } from "../../../../shared/utils/request";
|
import { request } from '../../../../shared/utils/request'
|
||||||
import RoadRoutesPicker from '../DisasterManagement/components/RoadRoutesPicker.vue'
|
import RoadRoutesPicker from '../DisasterManagement/components/RoadRoutesPicker.vue'
|
||||||
import DisasterFileUpload from '../DisasterManagement/components/DisasterFileUpload.vue'
|
import DisasterFileUpload from '../DisasterManagement/components/DisasterFileUpload.vue'
|
||||||
|
|
||||||
@ -74,9 +124,9 @@ const form = reactive({
|
|||||||
blockedPointName: null,
|
blockedPointName: null,
|
||||||
estimatedCost: null,
|
estimatedCost: null,
|
||||||
},
|
},
|
||||||
fileList: []
|
fileList: [],
|
||||||
})
|
})
|
||||||
const formRef = ref();
|
const formRef = ref()
|
||||||
|
|
||||||
// 获取灾害事件详情
|
// 获取灾害事件详情
|
||||||
const getDetail = async (id) => {
|
const getDetail = async (id) => {
|
||||||
@ -85,8 +135,8 @@ const getDetail = async (id) => {
|
|||||||
url: '/snow-ops-platform/water-damage/getById',
|
url: '/snow-ops-platform/water-damage/getById',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params: {
|
params: {
|
||||||
id
|
id,
|
||||||
}
|
},
|
||||||
})
|
})
|
||||||
if (res.code === '00000') {
|
if (res.code === '00000') {
|
||||||
form.project.districtName = res.data.event.district
|
form.project.districtName = res.data.event.district
|
||||||
@ -106,18 +156,18 @@ const getDetail = async (id) => {
|
|||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast({
|
showToast({
|
||||||
type: "fail",
|
type: 'fail',
|
||||||
message: error.message,
|
message: error.message,
|
||||||
});
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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))
|
||||||
// console.log('@@@@data', data);
|
// console.log('@@@@data', data);
|
||||||
// 在有传参的时候 调用接口去获取数据 并且初始化表单
|
// 在有传参的时候 调用接口去获取数据 并且初始化表单
|
||||||
getDetail(data);
|
getDetail(data)
|
||||||
} else {
|
} else {
|
||||||
// console.log('无传入数据');
|
// console.log('无传入数据');
|
||||||
}
|
}
|
||||||
@ -134,46 +184,42 @@ const handleClickBack = () => {
|
|||||||
const handleAdd = async () => {
|
const handleAdd = async () => {
|
||||||
// 先进行表单校验
|
// 先进行表单校验
|
||||||
if (!formRef.value) {
|
if (!formRef.value) {
|
||||||
showToast('表单初始化失败');
|
showToast('表单初始化失败')
|
||||||
return;
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const isValid = await formRef.value.validate();
|
const isValid = await formRef.value.validate()
|
||||||
// 表单校验通过,继续处理提交逻辑
|
// 表单校验通过,继续处理提交逻辑
|
||||||
const toast = showLoadingToast({
|
const toast = showLoadingToast({
|
||||||
message: "上报中...",
|
message: '上报中...',
|
||||||
forbidClick: true,
|
forbidClick: true,
|
||||||
duration: 0, // 设置为0表示不会自动关闭
|
duration: 0, // 设置为0表示不会自动关闭
|
||||||
});
|
})
|
||||||
console.log('表单校验通过,提交数据:', form);
|
console.log('表单校验通过,提交数据:', form)
|
||||||
|
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/snow-ops-platform/recovery/add',
|
url: '/snow-ops-platform/recovery/add',
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: form
|
data: form,
|
||||||
})
|
})
|
||||||
toast.close();
|
toast.close()
|
||||||
if (res.code === '00000') {
|
if (res.code === '00000') {
|
||||||
showToast('提交成功');
|
showToast('提交成功')
|
||||||
handleClickBack();
|
handleClickBack()
|
||||||
} else {
|
} else {
|
||||||
showToast('提交失败, 请稍后重试或联系管理员');
|
showToast('提交失败, 请稍后重试或联系管理员')
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
// console.log('表单校验失败:', error);
|
// console.log('表单校验失败:', error);
|
||||||
showToast('请检查并完善表单信息');
|
showToast('请检查并完善表单信息')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const handleRouteNoChange = (item) => {
|
const handleRouteNoChange = (item) => {
|
||||||
form.project.startStakeNo = item.startStakeNo
|
form.project.startStakeNo = item.startStakeNo
|
||||||
form.project.endStakeNo = item.endStakeNo
|
form.project.endStakeNo = item.endStakeNo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<PageContainer title="项目填报" @click-back="handleClickBack">
|
<PageContainer title="项目填报" @click-back="handleClickBack">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<PanelItem>
|
<PanelItem v-if="!loading">
|
||||||
<div class="detail">
|
<div class="detail">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="header-title">{{ data.projectName }}</div>
|
<div class="header-title">{{ data.projectName }}</div>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<div class="item">恢复重建预估费用: {{ data.estimatedCost }}</div>
|
<div class="item">恢复重建预估费用: {{ data.estimatedCost }}</div>
|
||||||
</div>
|
</div>
|
||||||
</PanelItem>
|
</PanelItem>
|
||||||
<PanelItem title="附件">
|
<PanelItem v-if="!loading" title="附件">
|
||||||
<div class="fileArea">
|
<div class="fileArea">
|
||||||
<van-image v-for="(item, index) in data?.fileList" :key="index" :src="item.fileUrl" fit="cover"
|
<van-image v-for="(item, index) in data?.fileList" :key="index" :src="item.fileUrl" fit="cover"
|
||||||
width="100px" height="100px" style="margin: 10px" @click="showImage(item.fileUrl)"></van-image>
|
width="100px" height="100px" style="margin: 10px" @click="showImage(item.fileUrl)"></van-image>
|
||||||
@ -56,6 +56,7 @@ const router = useRouter()
|
|||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
||||||
const data = ref({})
|
const data = ref({})
|
||||||
|
const loading = ref(false)
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
if (route.params.data) {
|
if (route.params.data) {
|
||||||
@ -69,6 +70,7 @@ onMounted(() => {
|
|||||||
|
|
||||||
const getDetaillData = async (id) => {
|
const getDetaillData = async (id) => {
|
||||||
try {
|
try {
|
||||||
|
loading.value = true
|
||||||
const res = await request({
|
const res = await request({
|
||||||
url: '/snow-ops-platform/recovery/getById',
|
url: '/snow-ops-platform/recovery/getById',
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
@ -82,6 +84,8 @@ const getDetaillData = async (id) => {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
showToast('获取详情失败,请稍后重试')
|
showToast('获取详情失败,请稍后重试')
|
||||||
console.log('error', error);
|
console.log('error', error);
|
||||||
|
} finally {
|
||||||
|
loading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user