xytSk-App/pages/xxsb/dsfrom.vue

760 lines
21 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="u-page">
<view v-if="!isMap">
<u-navbar
title="实时灾情上报"
@leftClick="navigateBack"
safeAreaInsetTop
fixed
placeholder
></u-navbar>
<view class="info">
<view class="u-demo-block__content">
<!-- 注意如果需要兼容微信小程序最好通过setRules方法设置rules规则 -->
<!-- 工程详情上报 -->
<u--form
labelPosition="left"
:model="formList"
ref="form2"
labelWidth="100"
v-if="key == 3"
>
<u-form-item
label="灾害发生时间"
prop="otime"
@click="
isTime2 = true
hideKeyboard()
"
:borderBottom="false"
ref="item1"
>
<u--input
placeholder="请选择"
v-model="formList.otime"
suffixIcon="arrow-right"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<u-form-item
label="严重程度"
prop="severity"
:borderBottom="false"
@click="
isseverity = true
hideKeyboard()
"
ref="item1"
>
<u--input
placeholder="请选择"
v-model="formList.severity"
suffixIcon="arrow-right"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<!-- @click="toMap" -->
<u-form-item
label="灾害发生地点"
prop="address"
@click="toMap"
:borderBottom="false"
ref="item1"
>
<u--input
placeholder="请输入"
v-model="formList.address"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<u-form-item label="经度:" :borderBottom="false" ref="item1">
<u--input
placeholder="请选择"
v-model="formList.lgtd"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<u-form-item label="纬度" :borderBottom="false" ref="item1">
<u--input
placeholder="请选择"
v-model="formList.lttd"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<!-- 水位(m) -->
<u-form-item
label="灾情描述"
prop="ddscrib"
:borderBottom="false"
ref="item3"
>
<u--textarea
placeholder="请输入"
v-model="formList.ddscrib"
count
></u--textarea>
</u-form-item>
<!-- 管控责任人: -->
<u-form-item label="伤亡人数" prop="dpcount" ref="item3">
<u--input
v-model="formList.dpcount"
placeholder="请输入"
border="surround"
clearable
></u--input>
</u-form-item>
<!-- 出库流量 (m³/s) -->
<u-form-item
label="失踪人数"
prop="mpcount"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="formList.mpcount"
placeholder="请输入"
type="number"
clearable
border="surround"
></u--input>
</u-form-item>
<u-form-item
label="转移人数"
prop="spcount"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="formList.spcount"
placeholder="请输入"
type="number"
clearable
border="surround"
></u--input>
</u-form-item>
<u-form-item
label="损毁房屋(间)"
prop="chcount"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="formList.chcount"
placeholder="请输入"
type="number"
clearable
border="surround"
@blur="BlurText($event)"
></u--input>
</u-form-item>
<u-form-item
label="直接经济损失 (万元)"
prop="elose"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="formList.elose"
placeholder="请输入"
type="number"
clearable
border="surround"
@blur="BlurText($event)"
></u--input>
</u-form-item>
<u-form-item
label="过程降雨量(mm)"
prop="pfrain"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="formList.pfrain"
placeholder="请输入"
type="number"
clearable
border="surround"
@blur="BlurText($event)"
></u--input>
</u-form-item>
<!-- 其他运行情况 -->
<u-form-item
label="其他情况说明"
prop="remark"
:borderBottom="false"
ref="item3"
>
<u--textarea
placeholder="请输入"
v-model="formList.remark"
count
></u--textarea>
</u-form-item>
<u-form-item
label="附件"
prop="fileList"
:borderBottom="false"
ref="item3"
>
<u-upload
:fileList="fileList1"
@afterRead="afterRead"
@delete="deletePic"
name="1"
multiple
:maxCount="10"
:previewFullImage="true"
></u-upload>
</u-form-item>
</u--form>
<u-button
type="primary"
text="提交"
customStyle="margin-top: 50px"
@click="submit"
></u-button>
<!-- 下拉选择 -->
<u-datetime-picker
:show="isTime2"
v-model="valueTime2"
mode="datetime"
@confirm="confirm2"
@cancel="cancel2"
></u-datetime-picker>
<!-- mode="top" -->
<view v-if="isName">
<u-popup
:show="isName"
@close="isName = false"
mode="right"
@open="open"
>
<view style="padding: 30px 20px">
<view class="tabs_h">
<div
class="leftTab"
:class="{ activetextTypeTab: showTextTypeTab == 1 }"
@click="tabChange(1)"
>
{{ namelabel }}
</div>
<div
class="rightTab"
:class="{ activetextTypeTab: showTextTypeTab == 2 }"
@click="tabChange(2)"
>
{{ gclabel }}
</div>
</view>
<!-- 水电站和水库 -->
<view class="" v-if="isSk">
<div
class="ul_list"
:class="{ activeTypeClass: activeType == 1 }"
@click="todetail(1, '水库')"
>
<div class="left">水库</div>
<u-icon
v-if="activeType == 1"
name="checkmark"
color="#2286f6"
size="20"
></u-icon>
</div>
<div
class="ul_list"
:class="{ activeTypeClass: activeType == 2 }"
@click="todetail(2, '水电站')"
>
<div class="left">水电站</div>
<u-icon
v-if="activeType == 2"
name="checkmark"
color="#2286f6"
size="20"
></u-icon>
</div>
</view>
<!-- 具体水库或者水电站 -->
<view v-else style="height: 300px; overflow-y: auto">
<div v-for="(item, index) in resList" :key="index">
<div
class="ul_list"
:class="{ activeTypeClass: item.isShow }"
@click="infoClick(item)"
>
<div class="left">{{ item.resName }}</div>
<u-icon
v-if="item.isShow"
name="checkmark"
color="#2286f6"
size="20"
></u-icon>
</div>
</div>
</view>
</view>
</u-popup>
</view>
<!-- 严重程度 -->
<u-action-sheet
:show="isseverity"
:actions="severityList"
title="请选择"
@close="isseverity = false"
@select="severitySelect"
>
</u-action-sheet>
<!-- 是否已管控 -->
<u-action-sheet
:show="isControlled"
:actions="actions"
title="请选择"
@close="isControlled = false"
@select="controlledSelect"
>
</u-action-sheet>
</view> </view
></view>
<view v-if="isMap">
<newmap @back="back"></newmap>
</view>
</view>
</template>
<script>
import moment from 'moment'
import newmap from './map.vue'
export default {
name: 'dsfrom',
components: {
newmap
},
data () {
return {
isMap: false,
showTextTypeTab: 1,
activeType: '',
valueTime2: Number(moment()),
isSk: true,
isTime2: false,
resList: [],
key: '',
title: {
1: '运行情况上报',
2: '工程险情上报',
3: '实时灾情上报'
},
namelabel: '请选择',
gclabel: '工程',
fileList1: [],
disabled1: false,
tips: '',
value: '',
showCalendar: false,
showBirthday: false,
formList: {
otime: '',
severity: '', // 严重程度1一般险情 2较大险情 3重大险情 4特别重大险情
address: '',
lgtd: '',
lttd: '',
ddscrib: '',
dpcount: '',
mpcount: '',
chcount: '',
spcount: '',
elose: '',
remark: ''
},
fileIds: [],
isControlled: false,
isseverity: false, // 严重程度
showSex: false,
isRelease: false,
isName: false,
severityList: [
{
name: '一般险情'
},
{
name: '较大险情'
},
{
name: '重大险情'
},
{
name: '特别重大险情'
}
],
actions: [
{
name: '是'
},
{
name: '否'
}
],
rules: {
otime: [
{
type: 'string',
required: true,
message: '请选择时间',
trigger: ['blur', 'change']
}
],
severity: [
{
type: 'string',
required: true,
message: '请选择严重程度',
trigger: ['blur', 'change']
}
],
address: [
{
type: 'string',
required: true,
message: '请选择灾害发生点',
trigger: ['blur', 'change']
}
]
},
projectType: 1
}
},
onLoad (options) {
this.key = options.key
console.log('搜索框22', options.key)
this.getresList()
},
onReady () {
console.log('搜索框22key', this.key)
// 如果需要兼容微信小程序并且校验规则中含有方法等只能通过setRules方法设置规则
this.$refs.form2.setRules(this.rules)
},
methods: {
back (lnglat, address) {
console.log('搜索框22key', lnglat, address)
this.isMap = false
this.formList.lgtd = lnglat[0]
this.formList.lttd = lnglat[1]
this.formList.address = address
},
toMap () {
// uni.navigateTo({
// url: `./map`
// })
this.isMap = true
},
async getresList () {
let res = null
this.resList = []
res = await uni.$http.get('/gunshiApp/xfflood/webi/resList')
this.resList = res.data.data.map(item => {
item.isShow = false
return item
})
},
async gethystList () {
this.resList = []
let res = await uni.$http.get('/gunshiApp/xfflood/webi/hystList')
console.log('res', res.data.data)
this.resList = res.data.data.map(item => {
item.isShow = false
item.resName = item.hystName
return item
})
},
tabChange (val) {
this.showTextTypeTab = val
if (val == 1) {
this.isSk = true
} else {
this.isSk = false
}
},
todetail (val, title) {
this.activeType = val
this.showTextTypeTab = 2
this.isSk = false
this.namelabel = title
this.projectType = val
if (val == 1) {
this.getresList()
} else {
this.gethystList()
}
},
infoClick (obj) {
if (this.activeType == 1) {
this.resList = this.resList.map(item => {
if (item.resCode == obj.resCode) {
item.isShow = true
this.gclabel = item.resName
this.formList.projectName = item.resName
} else {
item.isShow = false
}
return item
})
} else {
this.resList = this.resList.map(item => {
if (item.hystCode == obj.hystCode) {
item.isShow = true
this.gclabel = item.resName
this.formList.projectName = item.resName
} else {
item.isShow = false
}
return item
})
}
},
// 删除图片
deletePic (event) {
this[`fileList${event.name}`].splice(event.index, 1)
},
// 新增图片
async afterRead (event) {
// 当设置 multiple 为 true 时, file 为数组格式,否则为对象格式
let lists = [].concat(event.file)
let fileListLen = this[`fileList${event.name}`].length
lists.map(item => {
this[`fileList${event.name}`].push({
...item,
status: 'uploading',
message: '上传中'
})
})
for (let i = 0; i < lists.length; i++) {
const result = await this.uploadFilePromise(lists[i].url)
let item = this[`fileList${event.name}`][fileListLen]
this[`fileList${event.name}`].splice(
fileListLen,
1,
Object.assign(item, {
status: 'success',
message: '',
url: result
})
)
fileListLen++
}
},
uploadFilePromise (url) {
return new Promise((resolve, reject) => {
let a = uni.uploadFile({
url: `${uni.$http.baseUrl}/gunshiApp/xfflood/iaCHsfwater/file/upload/singleSimple`,
filePath: url,
name: 'file',
success: res => {
setTimeout(() => {
resolve(res.data)
}, 1000)
}
})
})
},
open () {},
navigateBack () {
uni.navigateBack()
},
severitySelect (e) {
console.log('severitySelect0', e)
this.formList.severity = e.name
this.$refs.form2.validateField('severity')
},
controlledSelect (e) {
this.formList.isControlled = e.name
this.$refs.form2.validateField('isControlled')
},
submit () {
this.$refs.form2
.validate()
.then(res => {
uni.$u.toast('校验通过', res)
debugger
let params = Object.assign(this.formList)
// 严重程度1一般险情 2较大险情 3重大险情 4特别重大险情
if (this.formList.severity == '一般险情') {
params.severity = 1
} else if (this.formList.severity == '较大险情') {
params.severity = 2
} else if (this.formList.severity == '重大险情') {
params.severity = 3
} else if (this.formList.severity == '特别重大险情') {
params.severity = 4
}
params.adcd = ''
if (this.fileList1.length > 0) {
params.fileId = this.fileList1.map(item => {
return JSON.parse(item.url).data.fileId
})
}
uni.$http
.post('/gunshiApp/xfflood/iaCHsfwater/insert', params)
.then(res => {
console.log('this.---', res)
if (res.data.code == 200) {
console.log('this.model122', res.data)
uni.reLaunch({
url: '/pages/xxsb/index'
})
}
})
})
.catch(errors => {
uni.$u.toast('校验失败', errors)
console.log('校验失败')
})
// 如果有错误会在catch中返回报错信息数组校验通过则在then中返回true
},
reset () {
const validateList = ['projectName', 'radiovalue1']
this.$refs.form1.resetFields()
this.$refs.form1.clearValidate()
setTimeout(() => {
this.$refs.form1.clearValidate(validateList)
// 或者使用 this.$refs.form1.clearValidate()
}, 10)
},
hideKeyboard () {
uni.hideKeyboard()
},
confirm2 (val) {
console.log(
'点击确定按钮时触发',
val.value,
moment(val.value).format('YYYY-MM-DD HH:mm:ss')
)
this.valueTime2 = Number(val)
this.formList.otime = moment(val.value).format('YYYY-MM-DD HH:mm:ss')
this.isTime2 = false
},
cancel2 () {
console.log('取消')
this.isTime2 = false
},
// 过滤字符串
BlurText (e) {
console.log('e', e)
let reg = /^\d+$/.test(e)
if (!reg) {
// this.
console.log('22e', e)
}
}
}
}
</script>
<style lang="scss" scoped>
.container {
font-size: 14px;
background-color: #f3f5f8;
}
.tabs_h {
display: flex;
// justify-content: center;
align-items: center;
height: 56rpx;
line-height: 88rpx;
background-color: #fff;
margin-bottom: 12rpx;
text-align: center;
}
.leftTab {
// width: 80px;
margin-right: 20px;
}
.rightTab {
// width: 80px;
}
.activetextTypeTab,
.activetextTypeTab:hover {
border-bottom: 3rpx solid #2286f6;
color: #026be0;
}
.activeTypeClass,
.activeTypeClass:hover {
color: #026be0;
}
.nav_bar {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
margin-top: 30px;
padding-top: 20px;
padding-bottom: 10px;
border-bottom: 1px solid #dfdfdf;
box-shadow: 0 5px 10px -8px #dfdfdf inset;
background-color: #fff;
margin-bottom: 12rpx;
}
.nav_bar_tit {
text-align: center;
}
.info {
background-color: #fff;
margin-bottom: 12rpx;
padding: 20px;
}
.fl {
display: flex;
justify-content: start;
align-items: left;
}
.flsb {
display: flex;
justify-content: space-between;
align-items: center;
}
.bottom {
display: flex;
justify-content: space-between;
align-items: center;
}
.u-image {
width: 100%; /* 或者其他尺寸 */
transition: transform 0.3s; /* 平滑的放大效果 */
}
.ul_list {
display: flex;
justify-content: space-between;
align-items: center;
height: 48px;
// border-bottom: 1px solid #dfdfdf;
}
</style>