631 lines
17 KiB
Vue
631 lines
17 KiB
Vue
<template>
|
||
<view class="u-page">
|
||
<u-navbar
|
||
:title="title[key]"
|
||
@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"
|
||
>
|
||
<u-form-item
|
||
label="工程名称"
|
||
prop="projectName"
|
||
@click="
|
||
isName = true
|
||
hideKeyboard()
|
||
"
|
||
:borderBottom="false"
|
||
ref="item1"
|
||
>
|
||
<u--input
|
||
placeholder="请选择"
|
||
v-model="formList.projectName"
|
||
suffixIcon="arrow-right"
|
||
suffixIconStyle="color: #909399"
|
||
></u--input>
|
||
</u-form-item>
|
||
<u-form-item
|
||
label="严重程度"
|
||
prop="severityList"
|
||
: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>
|
||
<u-form-item
|
||
label="是否已管控"
|
||
prop="isControlled"
|
||
:borderBottom="false"
|
||
@click="
|
||
isControlled = true
|
||
hideKeyboard()
|
||
"
|
||
ref="item1"
|
||
>
|
||
<u--input
|
||
placeholder="请选择"
|
||
v-model="formList.isControlled"
|
||
suffixIcon="arrow-right"
|
||
suffixIconStyle="color: #909399"
|
||
></u--input>
|
||
</u-form-item>
|
||
<!-- 水位(m) -->
|
||
<u-form-item
|
||
label="险情描述"
|
||
prop="incidentDescription"
|
||
:borderBottom="false"
|
||
ref="item3"
|
||
>
|
||
<u--textarea
|
||
placeholder="请输入"
|
||
v-model="formList.incidentDescription"
|
||
count
|
||
></u--textarea>
|
||
</u-form-item>
|
||
<!-- 管控责任人: -->
|
||
<u-form-item
|
||
label="管控责任人"
|
||
prop="controlResponsiblePerson"
|
||
ref="item3"
|
||
>
|
||
<u--input
|
||
v-model="formList.controlResponsiblePerson"
|
||
placeholder="请输入"
|
||
border="surround"
|
||
clearable
|
||
></u--input>
|
||
</u-form-item>
|
||
<!-- 出库流量 (m³/s): -->
|
||
<u-form-item
|
||
label="联系电话"
|
||
prop="responsiblePersonPhone"
|
||
:borderBottom="false"
|
||
ref="item3"
|
||
>
|
||
<u--input
|
||
v-model="formList.responsiblePersonPhone"
|
||
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>
|
||
|
||
<!-- 下拉选择 -->
|
||
|
||
<!-- 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>
|
||
</template>
|
||
|
||
<script>
|
||
export default {
|
||
data () {
|
||
return {
|
||
showTextTypeTab: 1,
|
||
activeType: '',
|
||
isSk: true,
|
||
resList: [],
|
||
key: '',
|
||
title: {
|
||
1: '运行情况上报',
|
||
2: '工程险情上报',
|
||
3: '实时灾情上报'
|
||
},
|
||
namelabel: '请选择',
|
||
gclabel: '工程',
|
||
fileList1: [],
|
||
disabled1: false,
|
||
tips: '',
|
||
value: '',
|
||
showCalendar: false,
|
||
showBirthday: false,
|
||
formList: {
|
||
projectName: '', //工程名称
|
||
projectType: '', //工程类型
|
||
severity: '', // 严重程度(1一般险情 2较大险情 3重大险情 4特别重大险情)
|
||
isControlled: '', // 是否已管控(0 否 1 是)
|
||
incidentDescription: '',
|
||
controlResponsiblePerson: '', // 管控责任人
|
||
responsiblePersonPhone: '', //责任人电话
|
||
remark: ''
|
||
},
|
||
|
||
isControlled: false,
|
||
isseverity: false, // 严重程度
|
||
showSex: false,
|
||
isRelease: false,
|
||
isName: false,
|
||
|
||
severityList: [
|
||
{
|
||
name: '一般险情'
|
||
},
|
||
{
|
||
name: '较大险情'
|
||
},
|
||
{
|
||
name: '重大险情'
|
||
},
|
||
{
|
||
name: '特别重大险情'
|
||
}
|
||
],
|
||
|
||
actions: [
|
||
{
|
||
name: '是'
|
||
},
|
||
{
|
||
name: '否'
|
||
}
|
||
],
|
||
rules: {
|
||
projectName: [
|
||
{
|
||
type: 'string',
|
||
required: true,
|
||
message: '请选择工程名称',
|
||
trigger: ['blur', 'change']
|
||
}
|
||
]
|
||
},
|
||
projectType: 1,
|
||
fileId: []
|
||
}
|
||
},
|
||
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: {
|
||
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++
|
||
}
|
||
|
||
console.log('fileList1111', this.fileList1)
|
||
},
|
||
uploadFilePromise (url) {
|
||
return new Promise((resolve, reject) => {
|
||
let a = uni.uploadFile({
|
||
url: `${uni.$http.baseUrl}/gunshiApp/xfflood/xfProjectIncident/file/upload/singleSimple`,
|
||
filePath: url,
|
||
name: 'file',
|
||
success: res => {
|
||
setTimeout(() => {
|
||
resolve(res.data)
|
||
}, 1000)
|
||
}
|
||
})
|
||
})
|
||
},
|
||
|
||
open () {},
|
||
groupChange (n) {
|
||
// console.log('groupChange', n);
|
||
},
|
||
radioChange (n) {
|
||
// console.log('radioChange', n);
|
||
},
|
||
navigateBack () {
|
||
uni.reLaunch({
|
||
url: '/pages/xxsb/index'
|
||
})
|
||
},
|
||
|
||
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)
|
||
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.projectType = this.projectType
|
||
params.isControlled = params.isControlled == '是' ? 1 : 0
|
||
if (this.fileList1.length > 0) {
|
||
params.fileId = this.fileList1.map(item => {
|
||
return JSON.parse(item.url).data.fileId
|
||
})
|
||
}
|
||
|
||
uni.$http
|
||
.post('/gunshiApp/xfflood/xfProjectIncident/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)
|
||
})
|
||
},
|
||
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()
|
||
},
|
||
// 过滤字符串
|
||
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>
|