feat(): 巡检开发

master
李神峰 2024-10-15 15:05:52 +08:00
parent b57cd3f678
commit 5dba23280d
30 changed files with 102408 additions and 24282 deletions

4
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,4 @@
{
"editor.formatOnSave": true,
"editor.formatOnPaste": true
}

View File

@ -13,6 +13,7 @@
} else { } else {
uni.reLaunch({ uni.reLaunch({
url: '/pages/login/login' url: '/pages/login/login'
// url:'/pages/spjk/index'
}) })
console.log(token.secretKey,'App Launch2') console.log(token.secretKey,'App Launch2')
} }

View File

@ -9,6 +9,43 @@
"navigationBarTitleText": "" "navigationBarTitleText": ""
} }
}, },
{
"path": "pages/xcrw/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/xcrw/detail/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/stlljk/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/spjk/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/spjk/spbf/index",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/aqjc/index",
"style": {
"navigationBarTitleText": ""
}
},
{ {
"path": "pages/rain/rain", "path": "pages/rain/rain",
"style": { "style": {
@ -287,6 +324,7 @@
"navigationBarTitleText": "" "navigationBarTitleText": ""
} }
} }
], ],
"usingComponents": { "usingComponents": {
"map": "/uni_modules/@dcloudio/uni-map/components/uni-map/uni-map" "map": "/uni_modules/@dcloudio/uni-map/components/uni-map/uni-map"

File diff suppressed because one or more lines are too long

399
pages/aqjc/index.vue Normal file
View File

@ -0,0 +1,399 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar title="安全监测" :autoBack="true" :titleStyle="{
fontSize:'18px'
}" :height='44' :safeAreaInsetTop=true leftIconSize='20' leftIconColor='rgb(153, 153, 153)'>
</u-navbar>
<picker @change="bindPickerChange" :range="array" range-key="profileName" style="margin-top:50px;padding: 0 10px;">
<view class="uni-input12" >
<view>{{profileName}}</view>
<u-icon name="arrow-down-fill" color="#000" size="15" ></u-icon>
</view>
</picker>
<view class="jcsj-box">
<view class="time-ranger" >
<view class="start-time">
<text>开始时间</text>
<text @click="showTime=true" style="margin-left:15%;color:#3399ef">{{stm}}</text>
</view>
<view class="end-time">
<text>结束时间</text>
<text @click="showTime1=true" style="margin:0 15%;color:#3399ef">{{etm}}</text>
<view class="search-btn" @click="searchHandle">
搜索
</view>
</view>
</view>
<view class="jcsj-content">
<view class="tool-btn">
<view class="scale-btn">
<button style="margin-right:10px" @click="fd">+</button>
<button @click="sx">-</button>
</view>
<view class="play-btn">
<uni-icons type="videocam" size="40" @click="play"></uni-icons>
</view>
</view>
<view class="jcsj-charts" >
<movable-area :style="areaStyle">
<movable-view @scale="scale" direction="all" :scale-value="scaleValue" scale-min="0.5" scale="true" scale-max="4" out-of-bounds="true">
<qiun-data-charts :chartData="chartData.chartData" :echartsApp="true" :eopts="chartData.eopts" />
</movable-view>
</movable-area>
</view>
<view style="margin-top: 20px;">
<JcsjTable :columns="columns" :data="dataSources" :newCol="newCol" :cols2="cols2"/>
</view>
</view>
<u-datetime-picker
:show="showTime"
v-model="startTime"
mode="datetime"
@confirm="handleStartTime"
@cancel="showTime=false"
></u-datetime-picker>
<u-datetime-picker
:show="showTime1"
v-model="endTime"
mode="datetime"
@confirm="handleEndTime"
@cancel="showTime1=false"
></u-datetime-picker>
</view>
</view>
</template>
<script>
import moment from "moment"
import drpOption from './jrxOptions';
import JcsjTable from "./jcsjTable"
const stm = moment().subtract(7, 'months').add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD HH:mm");
const etm = moment().add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD HH:mm");
export default {
data() {
return {
startTime:stm,
endTime:etm,
stm,
etm,
showTime:false,
showTime1:false,
array:[],
profileCode:'',
dbType:'',
trData:[],
dataSources:[],
chartData: {chartData:{},eopts:{}},
areaStyle:{left:"-450px"},
scaleValue:0.5,
swiper:false,
timer:100,
columns:[],
cols1:[
{
title: '序号',
key: 'index',
width: 60,
align: 'center',
},
{
title: '时间',
key: 'time',
width: 120,
align: 'center',
},
{ title: '库水位(m)', key: 'rz', dataIndex: 'rz', width: 150, align: "center" },
],
cols2:[
{title: '结果分析', key: 'status', dataIndex: 'status', width: 150, align: "center",}
],
newCol:[]
}
},
components:{
JcsjTable
},
computed:{
profileName(){
if(this.array.length > 0){
return this.array.find(item => item.profileCode == this.profileCode).profileName;
}else{
return '';
}
},
},
watch:{
profileCode:{
handler(newVal, oldVal) {
if(newVal){
let name = this.array.find(item => item.profileCode == newVal).profileName;
this.dbType = name == "大坝B0+060" ? "1" :
name == "大坝B0+090" ? "2" :
name == "大坝B0+120" ? "2" : '1'
}
},
immediate: true,
},
trData:{
handler(newVal, oldVal) {
if(newVal){
this.getTableData()
}
},
deep: true,
},
dataSources:{
handler(newVal, oldVal) {
if(newVal){
this.chartData = {...drpOption(newVal[0],this.dbType)}
}
},
deep: true,
immediate: true,
},
swiper(newVal){
console.log("ww", newVal);
if(newVal){
this.InitialScroll(this.dataSources)
}else{
clearInterval(this.timer)
}
}
},
methods:{
InitialScroll(data){
let index = 0;
this.timer = setInterval(() => {
console.log("data",data[index % data.length]);
this.chartData = {...drpOption(data[index % data.length],this.dbType)}
index++;
},1000)
},
//
play(){
this.swiper = !this.swiper;
},
//
fd(){
if(this.scaleValue == 4){
return;
}else{
this.scaleValue += 0.1;
}
},
//
sx(){
if(this.scaleValue == 0.5){
return''
}else{
this.scaleValue -= 0.1;
}
},
//
scale(e){
this.areaStyle.left = -(e.detail.scale + 1) * 450 + 'px';
},
searchHandle(){
this.getTableData();
},
handleStartTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
console.log("time",time);
this.stm = time
this.showTime = false
},
handleEndTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
this.etm = time;
this.showTime1 = false
},
handleRanger(e){
console.log(e);
this.tm = [...e]
},
bindPickerChange(e) {
this.profileCode = this.array[e.target.value].profileCode
},
//
async getMonthData(){
try{
const {data} = await uni.$http.post(
`/gunshiApp/xyt/attDamProfile/list`,)
if(data.code == 200){
this.array =data.data
this.profileCode = data.data[0].profileCode;
}
}catch(e){
uni.$showMsg();
}
},
//
async getTableData(){
try {
const {data} = await uni.$http.post(
"/gunshiApp/xyt/osmoticPressR/infiltra/line",
{
stationCodes:this.trData,
dateTimeRangeSo:
{
start:moment(this.stm).format("YYYY-MM-DD HH:mm:00"),
end:moment(this.etm).format("YYYY-MM-DD HH:mm:00"),
}
}
)
if(data.code == 200){
let newArr = [];
let newData = data.data.map((s, i) => {
newArr.push(s.list.map(c => ({
[c.stationCode]: c.value || '-',
tm: c.tm,
})))
return {
tm: s.tm,
rz: s.rz,
status: s.status || '',
inx:i+1
}
})
let filterData = newArr.filter(s => s.length > 0).flat()
let result = newData.map(s => {
let tm1 = s.tm;
let r = filterData.filter(t => {
return t.tm == tm1
})
let obj = {};
r.forEach(s1 => {
obj = {...s1,...obj}
})
return {
...s,
...obj,
}
})
let res1 = result.map(item => ({...item,rz:(item.rz - 100).toFixed(2)})) //
this.dataSources = [...res1];
}
} catch (error) {
uni.$showMsg();
}
},
//
async getDmTree(){
try {
const {data} = await uni.$http.post("/gunshiApp/xyt/attDamProfile/tree")
if(data.code == 200){
console.log("data",data);
let filterData = data.data.filter(s => s.profileCode == this.profileCode)
this.trData = filterData[0]?.children;
const newCol = filterData[0]?.children.map(s => ({
title: `${s}(m)`,
key: s,
dataIndex: s,
width: 150,
align: "center",
}))
this.columns=[...this.cols1,...newCol,...this.cols2]
this.newCol = newCol;
}
} catch (error) {
uni.$showMsg();
}
},
//
onChange(e){
console.log(e);
},
},
mounted() {
this.getMonthData()
this.getDmTree()
},
}
</script>
<style lang="scss" scoped>
.uni-input12{
display:flex;
justify-content: center;
column-gap: 30px;
align-items: center;
padding:5px 0;
border: 1px solid #f2f2f2;
border-left: none;
border-right: none;
// background-image: '../../static/images/';
}
.jcsj-box{
padding: 0 10px;
.time-ranger{
// display: flex;
// align-items: center;
margin-bottom: 10px;
.start-time, .end-time{
display: flex;
align-items: center;
padding: 10px 0;
border-bottom: 1px solid #dfdfdf;
}
.search-btn{
margin: 3px 0 0 5px;
// color: #3399ef;
}
}
.jcsj-content{
max-height:100vh;
width: 100%;
overflow-y:auto;
overflow-x: hidden;
.tool-btn{
display: flex;
justify-content: space-between;
align-items: "center";
padding: 5px ;
.scale-btn{
display: flex;
button{
height: 40px;
}
}
}
}
.jcsj-charts{
width: 1310px;
height: 250px;
overflow-y: auto;
// margin-top: 20px;
&>movable-area {
height: 250px;
width: 3000px;
// position:fixed;
overflow: hidden;
z-index: 1000;
background-color: #efefef;
movable-view{
display: flex;
justify-content: center;
width: 1310px;
height: 380px;
background-color: #fff;
left:450px;
top:10px
}}
.active{
border-color: #68bbff !important;
color: #68bbff;
}}
}
</style>

120
pages/aqjc/jcsjTable.vue Normal file
View File

@ -0,0 +1,120 @@
<template>
<div class="table_div">
<div class="table_cur">
<table style="display:block;width:700px;overflow-x:auto">
<tr>
<th v-for="(cols,i) in columns" :key="i" :style="getStyle(cols)">
{{ cols.title }}
</th>
</tr>
<!-- style="max-height: 480px; overflow-y: auto" -->
<div class="scroll-table">
<tr v-for="(item, index) in data" :key="index">
<td style="width:100px;text-align:center">{{ index + 1 }}</td>
<td style="width:200px;white-space:pre-wrap;text-align:center">{{ item.tm }}</td>
<td style="width:100px;white-space:pre-wrap;text-align:center">{{ item.rz }}</td>
<td v-for="(col,i) in newCol" :key="i" style="width:100px;text-align:center;">
{{item[col.key] }}
</td>
<td style="width:100px;">
{{item.status == 1 ? "正常" : rec == 0 ? "异常" : ''}}
</td>
</tr>
</div>
<div style="height:180px"></div>
</table>
</div>
</div>
</template>
<script>
import moment from "moment"
export default {
props:{
columns:{
type:Array,
default:[],
},
data:{
type:Array,
default:[],
},
cols2:{
type:Array,
default:[],
},
newCol:{
type:Array,
default:[],
}
},
computed:{
// newList(){
// if(this.tableData.length){
// return this.tableData.map(item => ({...item,tm:moment(item.tm).format("MM-DD HH:mm")}))
// }
// }
},
methods:{
getStyle(row){
return {
width:row.title == "时间" ? "200px": "100px"
}
}
}
}
</script>
<style lang="scss" scoped>
.table_div {
height: 100%;
max-width: calc(100% - 0px);
max-height: calc(100vh);
flex: 1;
padding-top: 0px;
overflow-x: scroll;
}
/*table样式*/
.table_cur {
width: 100%;
empty-cells: show;
border-collapse: collapse;
font-size: 14px;
}
.scroll-table{
height: calc(100vh - 180px);
overflow-y: auto;
overflow-x: auto;
width:'100%'
}
.table_cur tr {
display: flex;
line-height: 90rpx;
// overflow-x: auto;
}
.table_cur th {
height: 85rpx;
color: #3399ef;
background: #e1f3ff;
font-size: 14px;
// font-weight: bold;
padding: 0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-align: center !important;
}
.table_cur td {
height: 65rpx;
// border-bottom: 1px solid #d8ddeb;
font-size: 14px;
color: #2f4056;
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
text-align: center !important;
}
/*table样式 end*/
</style>

321
pages/aqjc/jrxOptions.js Normal file
View File

@ -0,0 +1,321 @@
import { imageUrl060,imageUrl090,rule } from './dataUrl'
export default function jrxOptions(data = {}, type = "1") {
const yMin = type == "1" ? 147 : type == "2" ? 146 : 146;
const yMax = type == "1" ? 209 : type == "2" ? 210 : 210;
const type1 = ["SY05", "SY06", "SY07", "SY08"]
const type2 = ["SY09","SY10","SY11","SY12"]
const alltype = type == "1" ? type1 : type == "2" ? type2 : type2;
// 字体颜色
const textColor = '#666'
const imageUrl = type == "1" ? imageUrl060:
type == "2" ? imageUrl090 : imageUrl090;
const xValue = type == "1" ? (((data?.rz - 169) + 0.65 * 14) / 0.65):
type == "2" ?(((data?.rz - 169) + 0.85 * 14) / 0.84) :(((data?.rz - 169) + 0.84 * 14) / 0.84)
const rz = data?.rz ?
[[xValue, data?.rz], [0, data?.rz], ] :
[]
const rz1 = data?.rz ?
[[0,169],[14, 169], [xValue, data?.rz]] :
[]
const gz1 = data[alltype[0]] ?
type == "1" ? [[57.6, 158], [57.6, data[alltype[0]]]] :
type == "2" ? [[52.6, 158], [52.6, data[alltype[0]]]] :
[[52.6, 158], [52.6, data[alltype[0]]]]
: [];
const gz2 = data[alltype[1]] ?
type == "1" ? [[60.6, 158], [60.6, data[alltype[1]]]] :
type == "2" ? [[55.6, 158], [55.6, data[alltype[1]]]] :
[[53.6, 158], [53.6, data[alltype[1]]]] :
[];
const gz3 = data[alltype[2]] ?
type == "1" ? [[82, 161], [82, data[alltype[2]]]] :
type == "2" ? [[66.5, 162], [66.5, data[alltype[2]]]] :
[[73, 161], [73, data[alltype[2]]]] : [];
const gz4 = data[alltype[3]] ?
type == "1" ? [[96.6, 166], [96.6, data[alltype[3]]]] :
type == "2" ? [[77, 161], [77, data[alltype[3]]]] :
[[85, 166], [85, data[alltype[3]]]] : [];
const line = data?.rz ?
type == "1" ?
[
[xValue, data?.rz],
[57.6, data[alltype[0]]],
[60.6, data[alltype[1]]],
[82, data[alltype[2]]],
[96.6, data[alltype[3]]]
] :
type == "2" ?
[
[xValue, data?.rz],
[52.6, data[alltype[0]]],
[55.6, data[alltype[1]]],
[66.5, data[alltype[2]]],
[77, data[alltype[3]]]
] :
[
[xValue, data?.rz],
[52.6, data[alltype[0]]],
[55.6, data[alltype[1]]],
[73, data[alltype[2]]],
[85, data[alltype[3]]]
]
: []
let eopts = {
toolbox: {
show: true,
feature: {
saveAsImage: {
show: true,
excludeComponents: ['toolbox'],
pixelRatio: 2,
name:"测值图"
},
},
right: "10%",
top:"4%"
},
graphic: [
{
type: 'image',
left: '5%',
top: 0,
bottom:0,
z: 1,
bounding: 'raw',
style: {
image: imageUrl,
width: 1310,
height: 380
}
},
{
type: 'image',
// id: 'background',
left: '5%',
bottom:"5%",
z: 1,
bounding: 'all',
style: {
image: rule,
width: 10,
height: 450
}
}
],
grid: {
top: '0%',
left: '2%',
right: '5%',
bottom: '0%',
containLabel: true
},
xAxis: {
min: 0,
max:100,
axisLabel: {
show:false,
// 坐标轴字体颜色
color: textColor,
fontSize: 18
},
axisLine: {
show:false,
lineStyle: {
color: textColor
}
},
axisTick: {
// y轴刻度线
show: false
},
splitLine: {
// 网格
show: false
},
boundaryGap: false
},
yAxis: {
type: 'value',
min: yMin,
max: yMax,
interval:5,
// data:[155,160,180,190,210],
nameTextStyle: {
color: '#333',
fontSize: 18,
padding: [0, 0, 0, 80]
},
axisLabel: {
// 坐标轴字体颜色
color: textColor,
fontSize: 18,
showMinLabel: false,
showMaxLabel: false
},
axisLine: {
show: false
},
axisTick: {
// y轴刻度线
show: false
},
splitLine: {
// 网格
show: false,
lineStyle: {
color: '#CCCCCC',
type: 'dashed'
}
}
},
}
let chartData = {
series: [
// 和大坝坡面重合的线 斜率为0.75
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#fff'
},
lineStyle: {
color: '#fff'
},
areaStyle: {
origin: "end",
color: 'rgba(0, 128, 255, 0.3)' // 设置区域填充颜色
},
data:[...rz,...rz1]
},
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF'
},
markPoint: {
data: [{ type: 'max',x:"20%", coord: [xValue, data?.rz] }],
symbol: 'pin',
symbolSize: [30, 10],
itemStyle: {
color: '#fff', // 标注点颜色
borderColor: '#ffa500', // 标注点边框颜色
borderWidth: 0 // 标注点边框宽度
},
label: {
show: true, // 是否显示标签
formatter: "库水位" +data?.rz + "m", // 标签格式
color: '#5487FF', // 标签文字颜色
fontSize: 12, // 标签文字大小
}
},
data:rz
},
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF'
},
data:rz1
},
// 管位
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF',
width:6
},
data: gz1
},
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF',
width:6
},
data: gz2
},
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF',
width:6
},
data: gz3
},
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF',
width:6
},
data: gz4
},
// 管位连接线
{
type: 'line',
symbol: 'none',
symbolSize: 10,
z: 1,
itemStyle: {
color: '#5487FF'
},
lineStyle: {
color: '#5487FF',
},
data: line
},
]
}
return {
eopts,
chartData
}
}

View File

@ -242,6 +242,12 @@
icon: '../../static/tabs/yujing_icon@2x2.png', icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/forewarning/forewarning' url: '/pages/forewarning/forewarning'
}, },
{
value: '巡查任务111',
key: 6,
icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/xcrw/index'
},
{ {
value: '维修养护111', value: '维修养护111',
key: 6, key: 6,
@ -260,6 +266,24 @@
icon: '../../static/tabs/yujing_icon@2x2.png', icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/yj/index' url: '/pages/yj/index'
}, },
{
value: '视频监控11',
key: 7,
icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/spjk/index'
},
{
value: '生态流量监控11',
key: 7,
icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/stlljk/index'
},
{
value: '安全监测',
key: 7,
icon: '../../static/tabs/yujing_icon@2x2.png',
url: '/pages/aqjc/index'
},
] ]
// } else { // } else {
// // // //

View File

@ -119,7 +119,7 @@ export default {
console.log(res,'---==='); console.log(res,'---===');
if (res.data.code === 200) { if (res.data.code === 200) {
//localStoragetoken //localStoragetoken
if (res.data.token) { if (res.data.token) {
uni.setStorageSync('Gs-Token', res.data.token) uni.setStorageSync('Gs-Token', res.data.token)
uni.$http.get('/gunshiApp/xyt/getInfo').then(res => { uni.$http.get('/gunshiApp/xyt/getInfo').then(res => {
@ -135,7 +135,7 @@ export default {
// console.log('-----value------', res.data.data) // console.log('-----value------', res.data.data)
}) })
//userId // userId
uni.$http uni.$http
.get('/gunshiApp/xfflood/my/info/getByUserId') .get('/gunshiApp/xfflood/my/info/getByUserId')
.then(res => { .then(res => {

121
pages/spjk/index.vue Normal file
View File

@ -0,0 +1,121 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar title="视频监控" :autoBack="true" :titleStyle="{
fontSize:'18px'
}" :height='44' :safeAreaInsetTop=true leftIconSize='20' leftIconColor='rgb(153, 153, 153)'>
</u-navbar>
<!-- 搜索区域 -->
<view class="search">
<view class="search_sear">
<input
class="searchInput"
confirm-type="search"
placeholder-style="color:#bbb"
v-model="saerchValue"
@input="search"
placeholder="搜索视频名称"
border="surround"
/>
</view>
</view>
<!-- 列表区域 -->
<view class="contentItem">
<view class="itemC" v-for="item in videoList" :key="item.indexCode" @click="jumpVideo(item)">
<view class="name">
<image
style="width: 15px; height: 10px;"
src="../../static/images/video.svg"
></image>
<text style="margin-left:10px">{{item.name}}</text>
</view>
<image
style="width: 15px; height: 15px;"
src="../../static/images/play.svg"
></image>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
saerchValue: '',
videoList:[]
}
},
methods: {
search(e){
const value = e.detail.value;
if(value){
const filterData = this.videoList.filter(item => item.name.includes(value));
this.videoList = filterData;
}else{
this.getVideoList()
}
},
async getVideoList(){
try {
const {data} = await uni.$http.post("/gunshiApp/xyt/attCctvBase/list")
if(data.code == 200){
this.videoList = data.data
}
} catch (error) {
uni.$showMsg();
}
},
jumpVideo(r){
uni.navigateTo({
url: `/pages/spjk/spbf/index?info=${encodeURIComponent(JSON.stringify(r))}`
})
}
},
mounted() {
this.getVideoList()
},
}
</script>
<style lang="scss" scoped>
.search {
background-color: #fff;
margin-top:50px;
padding:0 10px;
display: flex;
justify-content: center;
align-items: center;
height: 50px;
background-color: #eee;
// padding-right: 20px;
}
.searchInput {
width:100%;
background-color: #fff;
height: 60rpx;
border-radius: 26rpx;
color: #bbb;
padding-left: 60rpx;
}
.search_sear{
width:76%;
}
.contentItem{
.itemC{
display: flex;
justify-content: space-between;
display: flex;
color: #666666;
padding: 10px;
border-bottom: 1px solid #f0f0f0;
}
.name{
display: flex;
align-items: center;
}
.itemNo{
color: #666666;
padding: 10px;
}
}
</style>

222
pages/spjk/spbf/index.vue Normal file
View File

@ -0,0 +1,222 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar
v-show="show == 0"
:title="info.name"
:autoBack="true"
:titleStyle="{
fontSize:'18px',width:'220px'
}" :height='44' :safeAreaInsetTop=true leftIconSize='20' leftIconColor='rgb(153, 153, 153)'>
</u-navbar>
<view class="video-box" >
<iframe :src="webURL" :class="{'normal': show == 0,'active': show == 1}" frameborder="0" ref="videoFrame" :allowfullscreen="true"></iframe>
</view>
<view class="video-tool">
<view class="left-tool">
<view class="outside-circle">
<view class="up" @click="onOperation('UP')">
<image
style="width: 20px; height: 20px;"
src="../../../static/images/up.png"></image>
</view>
<view class="down" @click="onOperation('DOWN')">
<image
style="width: 20px; height: 20px; transform: rotate(180deg);"
src="../../../static/images/up.png"></image>
</view>
<view class="left" @click="onOperation('LEFT')">
<image
style="width: 20px; height: 20px; transform: rotate(-90deg);"
src="../../../static/images/up.png"></image>
</view>
<view class="right" @click="onOperation('RIGHT')">
<image
style="width: 20px; height: 20px; transform: rotate(90deg);"
src="../../../static/images/up.png"></image>
</view>
</view>
</view>
<view class="right-tool">
<view class="fd" @click="onOperation('ZOOM_IN')">
<image
style="width: 20px; height: 20px;"
src="../../../static/images/fd.png"
></image>
<text>放大</text>
</view>
<view class="sx" @click="onOperation('ZOOM_OUT')">
<image
style="width: 20px; height: 20px;"
src="../../../static/images/sx.png"
></image>
<text>缩小</text>
</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
info:{},
show:0,
webURL:'',
timer:null
}
},
methods: {
receiveRenderData(e){
this.show = e.data;
},
async getVideoSrc(id){
try{
const {data} = await uni.$http.get(
`/gunshiApp/xyt/attCctvBase/preview/${id}`)
if(data.code == 200){
this.webURL="./static/h5Player/webplayer.html?cameraIndexCode="+id+"&cameraUrl="+data.data
}
}catch(e){
uni.$showMsg()
}
},
async onOperation(type){
const params = {
command:type,
indexCode:this.info.indexCode,
action:0,
speed:30
}
try{
const {data} = await uni.$http.post("/gunshiApp/xyt/attCctvBase/control",params)
if(this.timer) clearTimeout(this.timer)
this.timer = setTimeout(() => {
this.onOperation1(type)
},500)
}catch(error){
// uni.$showMsg()
}
},
async onOperation1(type){
const params = {
command:type,
indexCode:this.info.indexCode,
action:1,
speed:30
}
try{
const {data} = await uni.$http.post("/gunshiApp/xyt/attCctvBase/control",params)
}catch(error){
uni.$showMsg()
}
},
},
mounted() {
this.getVideoSrc(this.info?.indexCode)
},
onLoad(options){
this.info = JSON.parse(decodeURIComponent(options.info));
}
}
</script>
<script module="renderModal" lang="renderjs">
export default {
data() {
return {
dom: '',
}
},
mounted() {
this.dom = document.getElementById('iframe')
// iframe
window.addEventListener('message', (e)=> {
var data = e.data;
this.emitData(data)
});
},
methods: {
emitData(e) {
this.$ownerInstance.callMethod('receiveRenderData',e)
},
},
}
</script>
<style lang="scss" scoped>
.video-box{
// margin-top: 50px;
// padding: 0 10px;
.normal{
position: absolute;
top: 70px;
left: 0;
width: 100vw;
height: 100vh;
}
.active{
position: absolute;
width: 100vw;
height: 100vh;
top: 0px;
left: 0;
}
}
.video-tool{
display: flex;
align-items: center;
justify-content: center;
position: absolute;
top:50%;
margin-left: 10px;
padding: 5px;
width: 93%;
background-color: #efefef;
}
.outside-circle{
position: relative;
width: 150px;
height: 150px;
border-radius: 50%;
background-color: #0796fe;
.up,.down,.left,.right{
position: absolute;
}
.up{
left:45%;
top: 10%;
}
.down{
left:45%;
top: 70%;
}
.left{
left:20%;
top:41%;
}
.right{
left:70%;
top:41%;
}
}
.fd,.sx{
display: flex;
align-items: center;
color: #fff;
padding: 10px 40px;
background-color: #0796fe;
margin-left: 10px;
margin-bottom: 10px;
border-radius: 7%;
&>text{
margin-left: 10px;
}
}
.left-tool{
margin-right: 20px;
}
</style>

145
pages/stlljk/chartOption.js Normal file
View File

@ -0,0 +1,145 @@
import "echarts/extension/bmap/bmap"
export default function drpOption (obj) {
const data = obj.list;
const monthsData = obj.chart
console.log(data,monthsData);
const maxQ = Math.ceil(Math.max(...data.map(obj => {
return obj?.q ? obj?.q:0
})))
const minQ = Math.floor(Math.min(...data.map(obj => {
return obj?.q? obj?.q :300
})))
const monthsX = Object.keys(monthsData);
const res = monthsX.map(item => {
const result = data?.map(s => {
const momth = s.tm.substr("2024-0".length, "2024-0".length - 5);
if (momth == String(item)) {
return [s.tm,monthsData[item]]
} else {
return []
}
})
return result
})
const data1 = res.map(s => s.filter(o => o.length > 0)).filter(o => o.length > 0)
const lines = data1.map((item, index, c) => ({
type: 'line',
markLine: {
symbol:"none",
lineStyle: {
type: "dotted",
color: "#47daff",
width: 3
},
label: {
show: true,
position:"middle",
color: "#47daff",
distance: 5,
format: "stMonth"
},
data: [
[{ coord: [item[0][0], item[0][1]] },{coord:[item[item.length - 1][0],item[item.length - 1][1]]}]
]
}
}))
let eopts = {
tooltip: {
trigger: 'axis'
},
grid: [
{
top: '10%',
left: '11%',
right: '5%',
bottom:"12%"
// width: '80%',
// height: '35%'
},
],
legend: {
// 显示图例
show: true,
top: '-1%',
},
xAxis: [
{
type: 'category',
data: data.map(o => o.tm),
// inverse: true,
splitLine: {
show: false
},
axisLabel: {
color: '#333',
fontSize: 12,
format:"stList"
},
axisLine: {
lineStyle: {
color: '#000',
width: 0.5
}
},
axisTick: {
show: false
}
}
],
yAxis: [
{
type: 'value',
// gridIndex:0,
position: 'left',
name: '生态流量(m³/s)',
splitLine: {
show: true,
lineStyle: {
color: '#000',
width: 0.25,
type: 'dotted'
}
},
axisLabel: {
color: '#333',
fontSize: 12
},
axisLine: {
show: false
},
axisTick: {
show: false
},
min: minQ,
max: maxQ
},
],
}
let chartData = {
series: [
{
name: '生态流量(m³/s)',
type: 'line',
symbol: 'none',
color: '#4fa2ea',
smooth:true,
label: {
show: false
},
data: data.map(o => o.q)
},
...lines
]
}
return {
eopts,
chartData
}
}

209
pages/stlljk/index.vue Normal file
View File

@ -0,0 +1,209 @@
<template>
<view style="height:100vh; overflow:hidden">
<u-status-bar></u-status-bar>
<u-navbar
title="生态流量监控"
:autoBack="true"
:titleStyle="{
fontSize:'18px'
}"
:height='44'
:safeAreaInsetTop=true
leftIconSize='20'
leftIconColor='rgb(153, 153, 153)'
>
</u-navbar>
<view class="jcsj-box">
<view class="time-ranger" >
<view class="start-time">
<text>开始时间</text>
<text @click="showTime=true" style="margin-left:15%;color:#3399ef">{{stm}}</text>
</view>
<view class="end-time">
<text>结束时间</text>
<text @click="showTime1=true" style="margin:0 15%;color:#3399ef">{{etm}}</text>
<view class="search-btn" @click="searchHandle">
搜索
</view>
</view>
</view>
<view class="jcsj-content">
<view class="jcsj-charts" >
<qiun-data-charts :chartData="chartData.chartData" :echartsApp="true" :eopts="chartData.eopts" />
</view>
<view style="margin-top: 20px;">
<JcsjTable :tableData="tableData" />
</view>
</view>
<u-datetime-picker
:show="showTime"
v-model="startTime"
mode="datetime"
@confirm="handleStartTime"
@cancel="showTime=false"
></u-datetime-picker>
<u-datetime-picker
:show="showTime1"
v-model="endTime"
mode="datetime"
@confirm="handleEndTime"
@cancel="showTime1=false"
></u-datetime-picker>
</view>
</view>
</template>
<script>
import moment from "moment"
import JcsjTable from "./jcsjTable"
import drpOption from "./chartOption.js"
const stm = moment().subtract(7, 'months').add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD HH:mm");
const etm = moment().add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD HH:mm");
export default {
props:{
stcd:String,
source:String,
wrz:String,
grz:String,
afsltdz:String,
flLowLimLev:String,
desFloodLev:String,
calFloodLev:String,
default:''
},
data() {
return {
startTime:stm,
endTime:etm,
stm,
etm,
showTime:false,
showTime1:false,
tableData:[],
chartData: {chartData:{},eopts:{}},
stData:{}
}
},
components:{
JcsjTable
},
watch:{
stData:{
handler(newV){
this.chartData = {...drpOption(newV)}
},
deep:true
}
},
methods: {
handleStartTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
this.stm = time
this.showTime = false
},
handleEndTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
this.etm = time;
this.showTime1 = false
},
handleRanger(e){
console.log(e);
this.tm = [...e]
},
//
async getMonthData(){
const startTime = moment(this.stm).format("YYYY-MM-DD HH:mm:ss");
const endTime = moment(this.etm).format("YYYY-MM-DD HH:mm:ss");
try{
const {data} = await uni.$http.get(
`/gunshiApp/xyt/stWaterR/getResMonthEcoFlow?startTime=${startTime}&endTime=${endTime}`,)
if(data.code == 200){
this.stData = {
...this.stData,
chart:data.data
}
}
}catch(e){
uni.$showMsg();
}
},
//
async getJcsjData(){
try{
const {data} = await uni.$http.post(
"/gunshiApp/xyt/stWaterR/ecologyFlowList",
{
startTime:moment(this.stm).format("YYYY-MM-DD HH:mm:ss"),
endTime:moment(this.etm).format("YYYY-MM-DD HH:mm:ss"),
isAsc:false,
orderField:"tm"
})
if(data.code == 200){
this.stData = {
...this.stData,
list:data.data
}
this.tableData = data.data;
}
}catch(e){
uni.$showMsg();
}
},
//
searchHandle(){
this.getJcsjData()
this.getMonthData()
}
},
mounted() {
this.getJcsjData();
this.getMonthData()
},
}
</script>
<style lang="scss" scoped>
.jcsj-box{
padding: 0 10px;
margin-top: 50px;
.time-ranger{
// display: flex;
// align-items: center;
margin-bottom: 10px;
.start-time, .end-time{
display: flex;
align-items: center;
padding: 10px 0;
border-bottom: 1px solid #dfdfdf;
}
.search-btn{
margin: 3px 0 0 5px;
// color: #3399ef;
}
}
.jcsj-content{
max-height:100vh;
width: 100%;
overflow-y:auto
}
.jcsj-charts{
// width:103vw;
height: 300px;
overflow-y: auto;
margin-top: 20px;
}
.active{
border-color: #68bbff !important;
color: #68bbff;
}
}
</style>

57
pages/stlljk/index1.vue Normal file
View File

@ -0,0 +1,57 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar
title="生态流量监控"
:autoBack="true"
:titleStyle="{
fontSize:'18px'
}"
:height='44'
:safeAreaInsetTop=true
leftIconSize='20'
leftIconColor='rgb(153, 153, 153)'
>
</u-navbar>
<view class="" style="margin-top: 44px;;background-color: #f0f0f0;border-top: 1px solid #f0f0f0;">
<view style="display: flex;padding: 20px;background-color: #fff;align-items: center;">
<u--input v-model="start" shape='circle'
style="background-color: #f0f0f0;height: 30px;text-align: center;" border='none' @focus="show = true;"></u--input>
-
<u--input v-model="end" shape='circle'
style="background-color: #f0f0f0;height:30px;" border='none' @focus="show = true;"></u--input>
<text style="color: #006cff; margin-left: 10px;">搜索</text>
</view>
</view>
<!-- <u-calendar :show="show" mode="single" @confirm="confirm" @cancel='cancel' @close="show=false"></u-calendar> -->
<u-datetime-picker :show="show" mode="datetime" @confirm="confirm" @cancel='cancel' @close="show=false" v-modal="stm"></u-datetime-picker>
</view>
</template>
<script>
import moment from 'moment';
export default {
data(){
return{
show:false,
start:moment().subtract(1,"weeks").format("YYYY-MM-DD HH"),
end:moment().format("YYYY-MM-DD HH")
}
},
computed:{
stm(){
return moment()
}
},
methods:{
confirm(e) {
console.log(e);
this.start = moment(e.value).format("YYYY-MM-DD HH")
this.show = false
},
cancel() {
this.show = false
},
}
}
</script>

111
pages/stlljk/jcsjTable.vue Normal file
View File

@ -0,0 +1,111 @@
<template>
<div class="table_div">
<div class="table_cur">
<table style="width:100%;display:block">
<tr>
<th style="width: 40px;">
序号
</th>
<th style="width: 82px">时间</th>
<th style="width: 80px;">
流量(/s)
</th>
<th style="width:100px;position: relative;">
当月核定流量
<text style="position: absolute; top:16px; left: 30px;">(/s)</text>
</th>
<th style="width: 70px; ">
<view>
是否达标
<!-- <text style="position: absolute; bottom:-10px; left: 20px;">(/s)</text> -->
</view>
</th>
</tr>
<!-- style="max-height: 480px; overflow-y: auto" -->
<div class="scroll-table">
<tr v-for="(item, index) in newList" :key="index">
<td style="width: 30px">{{ index + 1 }}</td>
<td style="width: 80px;">{{ item.tm }}</td>
<td style="width: 90px">{{ item.q }}</td>
<td style="width: 100px">{{ item.approvalV }}</td>
<td :style="{width:'70px',color: item.isStandard ? '#000' : 'red'}">{{ item.isStandard ? "是" : "否" }}</td>
</tr>
<div style="height:180px"></div>
</div>
</table>
</div>
</div>
</template>
<script>
import moment from "moment"
export default {
props:{
tableData:{
type:Array,
default:[],
}
},
computed:{
newList(){
if(this.tableData.length){
return this.tableData.map(item => ({...item,tm:moment(item.tm).format("MM-DD HH:mm")}))
}
}
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.table_div {
height: 100%;
max-width: calc(100% - 0px);
max-height: calc(100vh);
flex: 1;
padding-top: 0px;
overflow-x: scroll;
}
/*table样式*/
.table_cur {
width: 100%;
empty-cells: show;
border-collapse: collapse;
font-size: 14px;
}
.scroll-table{
height: calc(100vh - 180px);
overflow-y: auto;
width:'100%'
}
.table_cur tr {
display: flex;
line-height: 75rpx;
}
.table_cur th {
height: 85rpx;
color: #3399ef;
background: #e1f3ff;
font-size: 14px;
// font-weight: bold;
padding: 0px 10px;
box-sizing: border-box;
white-space: nowrap;
text-align: center !important;
}
.table_cur td {
height: 65rpx;
// border-bottom: 1px solid #d8ddeb;
font-size: 14px;
color: #2f4056;
padding: 0 10px;
box-sizing: border-box;
white-space: nowrap;
text-align: center !important;
}
/*table样式 end*/
</style>

249
pages/xcrw/detail/index.vue Normal file
View File

@ -0,0 +1,249 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar :title="taskTitle" :autoBack="true" :titleStyle="{
fontSize:'18px'
}" :height='44' :safeAreaInsetTop=true leftIconSize='20' leftIconColor='rgb(153, 153, 153)'>
</u-navbar>
<view class="" style="margin-top: 44px;;background-color: #f0f0f0;border-top: 1px solid #f0f0f0; height:calc(100vh - 44px)">
<view style="margin: 10px;background-color: #fff;padding: 10px;">
<view class="item">
<view class="blueTiao"></view>
<view class="title">
基本信息
</view>
</view>
<view class="contentItem">
<view class="itemC">
<text>任务标题</text>
<text>{{taskTitle}}</text>
</view>
<view class="itemC">
<text>任务类型</text>
<text>{{taskType == 1 ? "日常巡查" : taskType == 2 ? "特别检查" : taskType == 3 ? "汛前巡检" : '' }}</text>
</view>
<view class="itemC">
<text>任务内容</text>
<text>{{taskContent ? taskContent : ''}}</text>
</view>
<view class="itemC">
<text>开始日期</text>
<text>{{startDate}}</text>
</view>
<view class="itemC">
<text>结束日期</text>
<text>{{endDate}}</text>
</view>
</view>
</view>
<view v-show="status == 0 && btnStatus == 0" style="display:flex;justify-content: center;margin-top: 20%;">
<view class="circle-btn" @click="startXc"></view>
</view>
<view v-show="btnStatus != 0" style="margin: 10px;background-color: #fff;padding: 10px;">
<view class="item">
<view class="blueTiao"></view>
<view class="title">
巡检项
</view>
</view>
<view class="contentItem">
<uni-collapse>
<uni-collapse-item
title-border="none"
v-for="(item,index) in xjItem"
:key="index"
:border="false"
:show-animation="true"
>
<template v-slot:title >
<view style="display: flex;align-items: center;">
<text class="yuandian"></text>
<text>{{item.name}}</text>
<text style="margin-left: auto; color:#ff0000">{{item.children.length}}项未填写</text>
</view>
</template>
<view class="xj-content">
<view class="xj-text" v-for="(o,i) in item.children" :key="i">
<text>{{o.itemDesc}}</text>
<view class="subsectioin">
<text>状态</text>
<u-subsection
:list="list"
:current="current"
mode="subsection"
style="width:250px;margin-left: 10px"
@change="change"
></u-subsection>
</view>
</view>
</view>
</uni-collapse-item >
</uni-collapse>
</view>
</view>
</view>
</view>
</template>
<script>
import moment from 'moment'
export default {
data() {
return {
taskTitle:'',
taskType:'',
taskContent:'',
startDate:'',
endDate:'',
status:'',
id:'',
btnStatus: 0,
xjItem:[],
list:["正常","异常"],
current:3
};
},
methods: {
//
async startXc(){
try {
// const {data} = await uni.$http.get(`/gunshiApp/xyt/inspect/task/startInspect/${this.id}`)
// if(data.code == 200){
// this.btnStatus = 1;
// }
this.btnStatus = 1;
this.getXjItem(this.id)
} catch (error) {
uni.$showMsg();
}
},
//
async getXjItem(id){
try {
const {data} = await uni.$http.get(`/gunshiApp/xyt/inspect/detail/info?taskId=${id}`)
if(data.code == 200){
this.xjItem = data.data
}
} catch (error) {
uni.$showMsg();
}
},
change(e){
this.current = e;
}
},
onLoad(option){
this.taskTitle = option.taskTitle
this.taskType = JSON.parse(option.taskType)
this.taskContent = JSON.parse(option.taskContent)
this.startDate = (option.startDate)
this.endDate = option.endDate == "null" ? "" : option.endDate
this.status = option.status
this.id = option.id
}
}
</script>
<style lang="scss" scoped>
.myTitleStyle {
font-size: 30px;
background-color: red;
height: 200px;
}
.tabsClass {
margin-top: 44px;
height: 44px;
padding: 0 40px;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.item {
padding-bottom: 10px;
display: flex;
align-items: center;
// justify-content: space-between;
.blueTiao{
background-color: #007aff;
width: 5px;
height: 16px;
margin-right: 10px;
}
.title {
border-width: 0px;
font-family: '微软雅黑 Bold', '微软雅黑 Regular', '微软雅黑', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 15px;
color: #666666
}
.titleRight {
display: flex;
.border {
border-width: 0px;
background-color: rgba(236, 245, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(187, 220, 255, 1);
border-radius: 5px;
box-shadow: none;
width: 58px;
height: 25px;
color: #689FFF;
text-align: center;
}
}
}
.contentItem{
.itemC{
display: flex;
justify-content: space-between;
display: flex;
color: #666666;
padding: 10px;
border-bottom: 1px solid #f0f0f0;
}
.itemNo{
color: #666666;
padding: 10px;
}
}
.circle-btn{
width: 120px;
height: 120px;
background-color: #007aff;
border-radius: 50%;
color:#fff;
text-align: center;
line-height: 120px;
}
.yuandian{
display: inline-block;
width: 10px;
height: 10px;
background-color: #409eff;
border-radius: 50%;
margin-right: 10px;
}
.xj-content{
height: 300px;
overflow-y: auto;
}
.xj-text{
margin-left: 10%;
margin-top: 2%;
}
.subsectioin{
display: flex;
column-gap: 10px;
align-items: center;
margin-top: 10px;
}
</style>

197
pages/xcrw/index.vue Normal file
View File

@ -0,0 +1,197 @@
<template>
<view :style="{height:'100vh',overflow:'hidden'}">
<u-status-bar></u-status-bar>
<u-navbar title="巡查任务" :autoBack="true" :titleStyle="{
fontSize:'18px'
}" :height='44' :safeAreaInsetTop=true leftIconSize='20' leftIconColor='rgb(153, 153, 153)'>
</u-navbar>
<view style="padding:0 10px; margin-top:50px">
<view class="time-ranger" >
<view class="start-time">
<text>开始时间</text>
<text @click="showTime=true" style="margin-left:15%;color:#3399ef">{{stm}}</text>
</view>
<view class="end-time">
<text>结束时间</text>
<text @click="showTime1=true" style="margin:0 15%;color:#3399ef">{{etm}}</text>
<view class="search-btn" @click="searchHandle">
搜索
</view>
</view>
</view>
<view class="" v-for="(item,i) in list" :key="i" style="background-color: #fff;margin-top:10px;">
<view class="item">
<!-- {{item.title}} -->
<view class="title">
{{item.taskTitle}}
</view>
<view class="titleRight" @click="toDetail(item)">
<view class="border">
{{item.status == 1 ? "继续任务": "开始任务" }}
</view>
<u-icon name="arrow-right" size="20"></u-icon>
</view>
</view>
<view class="contentItem">
<view class="itemC">
<text>开始日期</text>
<text>{{item.startDate}}</text>
</view>
<view class="itemC">
<text>结束日期</text>
<text>{{item.endDate}}</text>
</view>
</view>
</view>
</view>
<u-datetime-picker
:show="showTime"
v-model="startTime"
mode="datetime"
@confirm="handleStartTime"
@cancel="showTime=false"
></u-datetime-picker>
<u-datetime-picker
:show="showTime1"
v-model="endTime"
mode="datetime"
@confirm="handleEndTime"
@cancel="showTime1=false"
></u-datetime-picker>
</view>
</template>
<script>
import moment from 'moment'
const stm = moment().subtract(7, 'months').add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD");
const etm = moment().add(1, 'hour').set({minute: 0, second: 0}).format("YYYY-MM-DD");
export default {
data() {
return {
startTime:stm,
endTime:etm,
stm,
etm,
showTime:false,
showTime1:false,
list: []
};
},
mounted() {
this.getData()
},
methods: {
searchHandle(){
this.getData()
},
handleStartTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
this.stm = time
this.showTime = false
},
handleEndTime(e){
let time = moment(e.value).format("YYYY-MM-DD HH:mm")
this.etm = time;
this.showTime1 = false
},
async getData(){
const userId = uni.getStorageSync('value')?.userId
const params = {
dateRangeSo:{
start:moment(this.stm).format("YYYY-MM-DD"),
end:moment(this.etm).format("YYYY-MM-DD"),
},
inspectUserId:userId,
statusList:[0,1]
}
try {
const res = await uni.$http.post("/gunshiApp/xyt/inspect/task/list",params)
this.list = [...res.data.data];
} catch (error) {
uni.$showMsg();
}
},
toDetail(record){
uni.navigateTo({
url:`/pages/xcrw/detail/index?taskTitle=${record.taskTitle}&taskType=${record.taskType}&taskContent=${record.taskContent}&startDate=${record.startDate}&endDate=${record.endDate}&status=${record.status}&id=${record.id}`
})
}
}
}
</script>
<style lang="scss" scoped>
.time-ranger{
margin-bottom: 10px;
.start-time, .end-time{
display: flex;
align-items: center;
padding: 10px 0;
border-bottom: 1px solid #dfdfdf;
}
.search-btn{
margin: 3px 0 0 5px;
// color: #3399ef;
}
}
.myTitleStyle {
font-size: 30px;
background-color: red;
height: 200px;
}
.tabsClass {
margin-top: 44px;
height: 44px;
padding: 0 40px;
border-top: 1px solid #eee;
border-bottom: 1px solid #eee;
}
.item {
border-bottom: 1px solid #f0f0f0;
padding-bottom: 10px;
display: flex;
justify-content: space-between;
.title {
border-width: 0px;
font-family: '微软雅黑 Bold', '微软雅黑 Regular', '微软雅黑', sans-serif;
font-weight: 700;
font-style: normal;
font-size: 15px;
color: #666666
}
.titleRight {
display: flex;
.border {
border-width: 0px;
background-color: rgba(236, 245, 255, 1);
box-sizing: border-box;
border-width: 1px;
border-style: solid;
border-color: rgba(187, 220, 255, 1);
border-radius: 5px;
box-shadow: none;
width: 75px;
height: 25px;
color: #689FFF;
text-align: center;
}
}
}
.contentItem{
.itemC{
display: flex;
justify-content: space-between;
display: flex;
color: #666666;
padding: 10px;
}
}
</style>

View File

@ -2,10 +2,10 @@
<view class="skinfo"> <view class="skinfo">
<view class="title"> <view class="title">
<view class="left"> <view class="left">
<text>上游雨量站</text> <text>{{123}}</text>
</view> </view>
<view class="right"> <view class="right">
2024-08-12 11:00 {{123}}
</view> </view>
</view> </view>
<view class="content"> <view class="content">
@ -24,6 +24,7 @@
<script> <script>
export default{ export default{
data(){ data(){
return{ return{
list:{ list:{

BIN
static/images/060.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

BIN
static/images/090.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB

BIN
static/images/fd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

6
static/images/play.svg Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="20px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -322 -119 )">
<path d="M 9.99999644886364 19.9431747159091 C 4.50871053799716 19.9431747159091 0.0568181818181818 15.4912823597301 0.0568181818181818 9.99999644886364 C 0.0568181818181818 4.50871053799716 4.50871053799716 0.0568181818181818 9.99999644886364 0.0568181818181818 C 15.4912823597301 0.0568181818181818 19.9431747159091 4.50871053799716 19.9431747159091 9.99999644886364 C 19.9431747159091 15.4912823597301 15.4912823597301 19.9431747159091 9.99999644886364 19.9431747159091 Z M 14.8177977627841 9.36031864790483 L 7.84365252130682 5.51098291015625 C 7.20463760653409 5.15899438476563 6.68560369318182 5.4625927734375 6.68560369318182 6.19175916637074 L 6.68560369318182 13.8075708451705 C 6.68560369318182 14.5314342151989 7.20397472034801 14.8409985129616 7.84365252130682 14.4883471235795 L 14.8177977627841 10.6390113636364 C 15.4554869273793 10.2863599742543 15.4568126775568 9.71363292347301 14.8177977627841 9.36031864790483 Z " fill-rule="nonzero" fill="#037bfb" stroke="none" transform="matrix(1 0 0 1 322 119 )" />
</g>
</svg>

BIN
static/images/ruler.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
static/images/sx.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
static/images/up.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

6
static/images/video.svg Normal file
View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="20px" height="13px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -22 -124 )">
<path d="M 20 1.78985507246377 C 20 1.13951976922099 19.4403559372885 0.61231884057971 18.75 0.61231884057971 L 18.195625 0.61231884057971 C 17.8675 0.61231884057971 17.5525 0.73419384057971 17.318125 0.951449275362318 L 15.625 2.52463768115942 L 15.625 1.78985507246377 C 15.625 0.814352117599596 14.7855339059327 0.0235507246376818 13.75 0 L 1.875 0 C 0.84125 0.0235507246376812 0 0.81544384057971 0 1.78985507246377 L 0 11.2101449275362 C 0 12.1856478824004 0.839466094067262 12.9764492753623 1.875 13 L 13.75 13 C 14.785 12.9764492753623 15.625 12.1851449275362 15.625 11.2101449275362 L 15.625 10.491259057971 L 17.318125 12.0644474637681 C 17.5525 12.2817028985507 17.8675 12.4035778985507 18.195625 12.4035778985507 L 18.75 12.4035778985507 C 19.4403559372885 12.4035778985507 20 11.8763769699094 20 11.2260416666667 L 20 1.78985507246377 Z M 13.75 11.7989130434783 L 1.875 11.7989130434783 C 1.53 11.7989130434783 1.25 11.5345561594203 1.25 11.2101449275362 L 1.25 1.78985507246377 C 1.25 1.46468742084238 1.52982203135575 1.20108695652174 1.875 1.20108695652174 L 13.75 1.20108695652174 C 14.094375 1.20108695652174 14.375 1.46485507246377 14.375 1.78985507246377 L 14.375 11.2101449275362 C 14.375 11.5345561594203 14.094375 11.7989130434783 13.75 11.7989130434783 Z M 18.75 1.78985507246377 L 18.75 11.2260416666667 L 18.125 11.2260416666667 L 15.625 8.87096920289855 L 15.625 8.85507246376812 L 15 8.26630434782609 L 15 4.73369565217391 L 18.125 1.78985507246377 L 18.75 1.78985507246377 Z " fill-rule="nonzero" fill="#409eff" stroke="none" transform="matrix(1 0 0 1 22 124 )" />
</g>
</svg>

View File

@ -57,6 +57,43 @@ const cfe = {
"xAxisFormat": function (value) { "xAxisFormat": function (value) {
return value.substr('2020--'.length, 11) return value.substr('2020--'.length, 11)
}, },
"stList": function (val)
{
let value = val.substr('2020-'.length, 11)
var ret = "";//拼接加\n返回的类目项
var maxLength = 6;//每项显示文字个数
var valLength = value.length;//X轴类目项的文字个数
var rowN = Math.ceil(valLength / maxLength); //类目项需要换行的行数
if (rowN > 1)//如果类目项的文字大于5,
{
for (var i = 0; i < rowN; i++) {
var temp = "";//每次截取的字符串
var start = i * maxLength;//开始截取的位置
var end = start + maxLength;//结束截取的位置
//这里也可以加一个是否是最后一行的判断,但是不加也没有影响,那就不加吧
temp = value.substring(start, end) + "\n";
ret += temp; //凭借最终的字符串
}
return ret;
}
else {
return value;
}
},
"stMonth":function(value){
let months = value.data.coord[0].substr("2024-0".length, "2024-0".length - 5);
let val = value.data.coord[1]
return `${months}月核定生态流量${val}m³/s`
},
"yhidden": function (value, index, axis) {
console.log("axis",axis);
if (index === 0 || index === axis.data.length - 1) {
return ''
} else {
return value
}
},
yAxisFormatDemo:function (value, index) { yAxisFormatDemo:function (value, index) {
return value + '元'; return value + '元';
}, },

View File

@ -1,8 +1,8 @@
var isReady=false;var onReadyCallbacks=[]; var isReady=false;var onReadyCallbacks=[];
var isServiceReady=false;var onServiceReadyCallbacks=[]; var isServiceReady=false;var onServiceReadyCallbacks=[];
var __uniConfig = {"pages":["pages/login/login","pages/rain/rain","pages/homeIndex/index","pages/xxsb/index","pages/xxsb/from","pages/xxsb/fromSeverity","pages/xxsb/dsfrom","pages/xxsb/map","pages/gqzq/index","pages/gqzq/gqxx","pages/gqzq/zqxx","pages/gqzq/detail/index","pages/mypage/mypage","pages/personInfo/personInfo","pages/modifyPassword/modifyPassword","pages/forewarning/forewarning","pages/forewarning/sh","pages/forewarning/shInformation/shInformation","pages/addressBook/addressBook","pages/water/water","pages/rainDetail/rainDetail","pages/hdDetail/hdDetail","pages/skDetail/skDetail","pages/addressBook/follow","pages/addressBook/myDept","pages/orderFeedback/orderFeedback","pages/orderFeedback/orderInformation","pages/gqzq/gqxx/gqxx","pages/gqzq/gqxx/qk","pages/gqzq/gqxx/xq","pages/gqzq/gqxx/qkForm","pages/gqzq/gqxx/xqForm","pages/gqzq/zqxx/zqxx","pages/gqzq/zqxx/table","pages/gqzq/zqxx/form","pages/wxyh/index","subpkg/rainDetail/rainDetail"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8","backgroundColorTop":"transparent","navigationStyle":"custom","background":"#efeff4"},"tabBar":{"color":"#333333","selectedColor":"#59A7FF","list":[{"pagePath":"pages/homeIndex/index","iconPath":"/static/tabs/home.png","selectedIconPath":"static/tabs/home2.png","text":"首页"},{"pagePath":"pages/addressBook/addressBook","iconPath":"/static/tabs/phone_icon@2x.png","selectedIconPath":"static/tabs/phone_icon@2x2.png","text":"通讯录"},{"pagePath":"pages/mypage/mypage","iconPath":"/static/images/my2_icon@2x.png","selectedIconPath":"static/images/my2_icon@2x2.png","text":"我的"}]},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"咸丰水利","compilerVersion":"4.24","entryPagePath":"pages/login/login","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}}; var __uniConfig = {"pages":["pages/login/login","pages/xcrw/index","pages/xcrw/detail/index","pages/stlljk/index","pages/spjk/index","pages/spjk/spbf/index","pages/aqjc/index","pages/rain/rain","pages/homeIndex/index","pages/xxsb/index","pages/xxsb/from","pages/xxsb/fromSeverity","pages/xxsb/dsfrom","pages/xxsb/map","pages/gqzq/index","pages/gqzq/gqxx","pages/gqzq/zqxx","pages/gqzq/detail/index","pages/mypage/mypage","pages/personInfo/personInfo","pages/modifyPassword/modifyPassword","pages/forewarning/forewarning","pages/forewarning/sh","pages/forewarning/shInformation/shInformation","pages/addressBook/addressBook","pages/water/water","pages/rainDetail/rainDetail","pages/hdDetail/hdDetail","pages/skDetail/skDetail","pages/addressBook/follow","pages/addressBook/myDept","pages/orderFeedback/orderFeedback","pages/orderFeedback/orderInformation","pages/gqzq/gqxx/gqxx","pages/gqzq/gqxx/qk","pages/gqzq/gqxx/xq","pages/gqzq/gqxx/qkForm","pages/gqzq/gqxx/xqForm","pages/gqzq/zqxx/zqxx","pages/gqzq/zqxx/table","pages/gqzq/zqxx/form","pages/wxyh/index","pages/wtcl/index","pages/wtcl/detail/index","pages/yj/index","pages/yj/detail/qxyj","pages/yj/detail/wyyj","pages/yj/detail/aiyj","pages/messageList/index","pages/messageList/detail/index","pages/skInfo/detail/index","subpkg/rainDetail/rainDetail"],"window":{"navigationBarTextStyle":"black","navigationBarTitleText":"uni-app","navigationBarBackgroundColor":"#F8F8F8","backgroundColor":"#F8F8F8","backgroundColorTop":"transparent","navigationStyle":"custom","background":"#efeff4"},"tabBar":{"color":"#333333","selectedColor":"#59A7FF","list":[{"pagePath":"pages/homeIndex/index","iconPath":"/static/tabs/home.png","selectedIconPath":"static/tabs/home2.png","text":"首页"},{"pagePath":"pages/addressBook/addressBook","iconPath":"/static/tabs/phone_icon@2x.png","selectedIconPath":"static/tabs/phone_icon@2x2.png","text":"通讯录"},{"pagePath":"pages/mypage/mypage","iconPath":"/static/images/my2_icon@2x.png","selectedIconPath":"static/images/my2_icon@2x2.png","text":"我的"}]},"darkmode":false,"nvueCompiler":"uni-app","nvueStyleCompiler":"uni-app","renderer":"auto","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":false},"appname":"咸丰水利","compilerVersion":"4.24","entryPagePath":"pages/login/login","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000}};
var __uniRoutes = [{"path":"/pages/login/login","meta":{"isQuit":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/rain/rain","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/homeIndex/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"","enablePullDownRefresh":true,"pullToRefresh":{"support":true,"style":"default","offset":"70px"}}},{"path":"/pages/xxsb/index","meta":{},"window":{"navigationBarTitleText":"信息上报"}},{"path":"/pages/xxsb/from","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/fromSeverity","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/dsfrom","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/map","meta":{},"window":{"navigationBarTitleText":"地图示例"}},{"path":"/pages/gqzq/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx","meta":{},"window":{"navigationBarTitleText":"工情信息"}},{"path":"/pages/gqzq/zqxx","meta":{},"window":{"navigationBarTitleText":"灾情信息"}},{"path":"/pages/gqzq/detail/index","meta":{},"window":{"navigationBarTitleText":"查看"}},{"path":"/pages/mypage/mypage","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/personInfo/personInfo","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/modifyPassword/modifyPassword","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/forewarning","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/sh","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/shInformation/shInformation","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/addressBook/addressBook","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/water/water","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/rainDetail/rainDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/hdDetail/hdDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/skDetail/skDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/addressBook/follow","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/addressBook/myDept","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/orderFeedback/orderFeedback","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/orderFeedback/orderInformation","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/gqxx","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/qk","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/xq","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/qkForm","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/xqForm","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/zqxx","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/table","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/form","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/wxyh/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/subpkg/rainDetail/rainDetail","meta":{},"window":{}}]; var __uniRoutes = [{"path":"/pages/login/login","meta":{"isQuit":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/xcrw/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xcrw/detail/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/stlljk/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/spjk/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/spjk/spbf/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/aqjc/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/rain/rain","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/homeIndex/index","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":"","enablePullDownRefresh":true,"pullToRefresh":{"support":true,"style":"default","offset":"70px"}}},{"path":"/pages/xxsb/index","meta":{},"window":{"navigationBarTitleText":"信息上报"}},{"path":"/pages/xxsb/from","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/fromSeverity","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/dsfrom","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/xxsb/map","meta":{},"window":{"navigationBarTitleText":"地图示例"}},{"path":"/pages/gqzq/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx","meta":{},"window":{"navigationBarTitleText":"工情信息"}},{"path":"/pages/gqzq/zqxx","meta":{},"window":{"navigationBarTitleText":"灾情信息"}},{"path":"/pages/gqzq/detail/index","meta":{},"window":{"navigationBarTitleText":"查看"}},{"path":"/pages/mypage/mypage","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/personInfo/personInfo","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/modifyPassword/modifyPassword","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/forewarning","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/sh","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/forewarning/shInformation/shInformation","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/addressBook/addressBook","meta":{"isQuit":true,"isTabBar":true},"window":{"navigationBarTitleText":""}},{"path":"/pages/water/water","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/rainDetail/rainDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/hdDetail/hdDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/skDetail/skDetail","meta":{},"window":{"navigationBarTitleText":"","enablePullDownRefresh":false}},{"path":"/pages/addressBook/follow","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/addressBook/myDept","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/orderFeedback/orderFeedback","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/orderFeedback/orderInformation","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/gqxx","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/qk","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/xq","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/qkForm","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/gqxx/xqForm","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/zqxx","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/table","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/gqzq/zqxx/form","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/wxyh/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/wtcl/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/wtcl/detail/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/yj/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/yj/detail/qxyj","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/yj/detail/wyyj","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/yj/detail/aiyj","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/messageList/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/messageList/detail/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/pages/skInfo/detail/index","meta":{},"window":{"navigationBarTitleText":""}},{"path":"/subpkg/rainDetail/rainDetail","meta":{},"window":{}}];
__uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
__uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}}); __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:void 0,window:void 0,document:void 0,frames:void 0,self:void 0,location:void 0,navigator:void 0,localStorage:void 0,history:void 0,Caches:void 0,screen:void 0,alert:void 0,confirm:void 0,prompt:void 0,fetch:void 0,XMLHttpRequest:void 0,WebSocket:void 0,webkit:void 0,print:void 0}}}}); service.register("uni-app-config",{create(a,b,c){if(!__uniConfig.viewport){var d=b.weex.config.env.scale,e=b.weex.config.env.deviceWidth,f=Math.ceil(e/d);Object.assign(__uniConfig,{viewport:f,defaultFontSize:Math.round(f/20)})}return{instance:{__uniConfig:__uniConfig,__uniRoutes:__uniRoutes,global:void 0,window:void 0,document:void 0,frames:void 0,self:void 0,location:void 0,navigator:void 0,localStorage:void 0,history:void 0,Caches:void 0,screen:void 0,alert:void 0,confirm:void 0,prompt:void 0,fetch:void 0,XMLHttpRequest:void 0,WebSocket:void 0,webkit:void 0,print:void 0}}}});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long