xytSk-App/pages/xxsb/from.vue

574 lines
15 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">
<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="model1"
ref="form1"
labelWidth="100"
>
<u-form-item
label="工程名称"
prop="userInfo.name"
@click="
isName = true
hideKeyboard()
"
:borderBottom="false"
ref="item1"
>
<u--input
placeholder="请选择"
v-model="model1.userInfo.name"
suffixIcon="arrow-right"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<u-form-item
label="是否发电"
prop="userInfo.sex"
:borderBottom="false"
@click="
showSex = true
hideKeyboard()
"
ref="item1"
>
<u--input
placeholder="请选择"
v-model="model1.userInfo.sex"
suffixIcon="arrow-right"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<u-form-item
label="是否泄洪"
prop="isFloodRelease"
:borderBottom="false"
@click="
isRelease = true
hideKeyboard()
"
ref="item1"
>
<u--input
placeholder="请选择"
v-model="model1.isFloodRelease"
suffixIcon="arrow-right"
suffixIconStyle="color: #909399"
></u--input>
</u-form-item>
<!-- 水位(m) -->
<u-form-item
label="水位(m)"
prop="waterLevel"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="model1.waterLevel"
placeholder="请输入"
border="surround"
type="number"
clearable
></u--input>
</u-form-item>
<!-- 入库流量(m³/s) -->
<u-form-item label="入库流量(m³/s)" prop="inflowVolume" ref="item3">
<u--input
v-model="model1.inflowVolume"
placeholder="请输入"
border="surround"
type="number"
clearable
></u--input>
</u-form-item>
<!-- 出库流量 (m³/s) -->
<u-form-item
label="出库流量(m³/s)"
prop="outflowVolume"
:borderBottom="false"
ref="item3"
>
<u--input
v-model="model1.outflowVolume"
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="model1.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"
></u-upload>
</u-form-item>
</u--form>
<u-button
type="primary"
text="提交"
customStyle="margin-top: 50px"
@click="submit"
></u-button>
<!-- isRelease -->
<u-action-sheet
:show="isRelease"
:actions="actions"
title="请选择"
@close="isRelease = false"
@select="releaseSelect"
>
</u-action-sheet>
<!-- showSex -->
<u-action-sheet
:show="showSex"
:actions="actions"
title="请选择"
@close="showSex = false"
@select="sexSelect"
>
</u-action-sheet>
<!-- -->
<view v-if="isName">
<u-popup :show="isName" @close="isName = false" @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>
</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,
model1: {
userInfo: {
name: '',
sex: ''
},
isFloodRelease: '',
waterLevel: '',
inflowVolume: '',
outflowVolume: '',
remark: ''
},
showSex: false,
isRelease: false,
isName: false,
actions: [
{
name: '是'
},
{
name: '否'
}
],
rules: {
'userInfo.name': [
{
type: 'string',
required: true,
message: '请选择工程名称',
trigger: ['blur', 'change']
}
]
}
}
},
onLoad (options) {
this.key = options.key
console.log('搜索框', options.key)
this.getresList()
},
onReady () {
// 如果需要兼容微信小程序并且校验规则中含有方法等只能通过setRules方法设置规则
this.$refs.form1.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
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.model1.userInfo.name = item.resName
this.$refs.form1.validateField('userInfo.sex')
} 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.model1.userInfo.name = 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: 'http://192.168.2.21:7001/upload', // 仅为示例,非真实的接口地址
filePath: url,
name: 'file',
formData: {
user: 'test'
},
success: res => {
setTimeout(() => {
resolve(res.data.data)
}, 1000)
}
})
})
},
afterRead (event) {
this.fileList1.push({
url: event.file,
status: 'uploading',
message: '上传中'
})
},
open () {},
groupChange (n) {
// console.log('groupChange', n);
},
radioChange (n) {
// console.log('radioChange', n);
},
navigateBack () {
uni.navigateBack()
},
// 是否发电
sexSelect (e) {
this.model1.userInfo.sex = e.name
this.$refs.form1.validateField('userInfo.sex')
},
// 是否泄洪
releaseSelect (e) {
this.model1.isFloodRelease = e.name
this.$refs.form1.validateField('isFloodRelease')
},
change (e) {
console.log(e)
},
submit () {
// 如果有错误会在catch中返回报错信息数组校验通过则在then中返回true
this.$refs.form1
.validate()
.then(res => {
uni.$u.toast('校验通过')
console.log('this.model1', this.model1)
})
.catch(errors => {
uni.$u.toast('校验失败')
})
},
reset () {
const validateList = ['userInfo.name', 'userInfo.sex', '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>