提交代码

This commit is contained in:
guanj
2026-06-01 11:32:25 +08:00
parent 276ef60389
commit 43c6249530
15 changed files with 384 additions and 157 deletions

View File

@@ -108,6 +108,9 @@
></uni-load-more> ></uni-load-more>
<Cn-empty v-else></Cn-empty> <Cn-empty v-else></Cn-empty>
</view> </view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</template> </template>
</Cn-page> </Cn-page>
@@ -156,6 +159,7 @@ export default {
}, },
], ],
pageOptions: {}, pageOptions: {},
showBackTop: false,
options1: [ options1: [
{ {
text: '置顶', text: '置顶',
@@ -457,7 +461,17 @@ export default {
} else { } else {
this[type] = true this[type] = true
} }
} },
backToTop() {
uni.pageScrollTo({
scrollTop: 0,
duration: 300,
})
this.showBackTop = false
},
},
onPageScroll(e) {
this.showBackTop = e.scrollTop > 200
}, },
} }
</script> </script>
@@ -465,4 +479,19 @@ export default {
/deep/ .button-group--right { /deep/ .button-group--right {
padding: 0 0 20rpx; padding: 0 0 20rpx;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -95,7 +95,7 @@
{{ {{
item.landPoint != null && item.landPoint !== '' item.landPoint != null && item.landPoint !== ''
? ',落点区域:' + item.landPoint ? ',落点区域:' + item.landPoint
: '' : ',落点区域:未知'
}} }}
</text> </text>
</view> </view>

View File

@@ -4,14 +4,8 @@
<!-- <view class="nav-menu" :class="{ 'nav-menu-active': select.engineeringName }" @click="openDrawer" <!-- <view class="nav-menu" :class="{ 'nav-menu-active': select.engineeringName }" @click="openDrawer"
>{{ select.engineeringName || '工程' }} >{{ select.engineeringName || '工程' }}
</view> --> </view> -->
<picker <picker @change="projectNameChange" @cancel="selectProject = false" :value="select.projectNameIndex"
@change="projectNameChange" :range="projectList" range-key="text" v-if="store.params.engineerId">
@cancel="selectProject = false"
:value="select.projectNameIndex"
:range="projectList"
range-key="text"
v-if="store.params.engineerId"
>
<view class="nav-menu" :class="{ 'nav-menu-active': select.projectName }" @click="selectProject = true"> <view class="nav-menu" :class="{ 'nav-menu-active': select.projectName }" @click="selectProject = true">
{{ {{
select.projectName select.projectName
@@ -20,18 +14,10 @@
: select.projectName : select.projectName
: '全部项目' : '全部项目'
}} }}
<uni-icons <uni-icons type="top" size="14" :color="select.projectName ? '#376cf3' : '#666'"
type="top" v-if="selectProject"></uni-icons>
size="14" <uni-icons type="bottom" size="14" :color="select.projectName ? '#376cf3' : '#666'"
:color="select.projectName ? '#376cf3' : '#666'" v-else></uni-icons>
v-if="selectProject"
></uni-icons>
<uni-icons
type="bottom"
size="14"
:color="select.projectName ? '#376cf3' : '#666'"
v-else
></uni-icons>
</view> </view>
</picker> </picker>
<view style="flex: 1"></view> <view style="flex: 1"></view>
@@ -40,17 +26,11 @@
<view class="nav-menu nav-menu-btn" @click="submit">确定</view> <view class="nav-menu nav-menu-btn" @click="submit">确定</view>
</template> </template>
<template v-else-if="deviceListFilter.length"> <template v-else-if="deviceListFilter.length">
<view <view class="nav-menu nav-menu-btn" @click="selectDevice('transfer')"
class="nav-menu nav-menu-btn" v-if="userInfo.authorities === 'app_vip_user' || userInfo.authorities === 'engineering_user'">移交
@click="selectDevice('transfer')"
v-if="userInfo.authorities === 'app_vip_user' || userInfo.authorities === 'engineering_user'"
>移交
</view> </view>
<view <view class="nav-menu nav-menu-btn" @click="selectDevice('share')"
class="nav-menu nav-menu-btn" v-if="userInfo.authorities === 'app_vip_user'">分享
@click="selectDevice('share')"
v-if="userInfo.authorities === 'app_vip_user'"
>分享
</view> </view>
</template> </template>
<!-- <picker @change="projectTypeChange" :value="select.projectTypeIndex" :range="projectType" range-key="text"> <!-- <picker @change="projectTypeChange" :value="select.projectTypeIndex" :range="projectType" range-key="text">
@@ -59,23 +39,16 @@
</view> </view>
</picker> --> </picker> -->
</view> </view>
<view class="content device" :style="{ minHeight: minHeight }"> <view class="content device" >
<uni-swipe-action> <uni-swipe-action>
<uni-swipe-action-item <uni-swipe-action-item v-for="(item, index) in deviceListFilter" :threshold="0"
v-for="(item, index) in deviceListFilter" :right-options="item.isTop == 0 ? options1 : options12" @click="bindClick($event, item)">
:threshold="0"
:right-options="item.isTop == 0 ? options1 : options12"
@click="bindClick($event, item)"
>
<Cn-device-card :device="item" :key="index"> <Cn-device-card :device="item" :key="index">
<template v-slot:title> <template v-slot:title>
<!-- 卡片标题 --> <!-- 卡片标题 -->
<switch <switch v-if="transfer || share" :checked="checkList.indexOf(item.equipmentId) > -1"
v-if="transfer || share"
:checked="checkList.indexOf(item.equipmentId) > -1"
style="transform: scale(0.8); position: relative; left: 20rpx" style="transform: scale(0.8); position: relative; left: 20rpx"
@change="switchChange(item)" @change="switchChange(item)" />
/>
<view class="star-icon" v-else> <view class="star-icon" v-else>
<uni-icons type="search" size="25" color="#376cf3"></uni-icons> <uni-icons type="search" size="25" color="#376cf3"></uni-icons>
</view> </view>
@@ -83,10 +56,8 @@
</Cn-device-card> </Cn-device-card>
</uni-swipe-action-item> </uni-swipe-action-item>
</uni-swipe-action> </uni-swipe-action>
<uni-load-more <uni-load-more v-if="store.status == 'loading' || deviceListFilter.length > 0"
v-if="store.status == 'loading' || deviceListFilter.length > 0" :status="store.status"></uni-load-more>
:status="store.status"
></uni-load-more>
<Cn-empty v-else></Cn-empty> <Cn-empty v-else></Cn-empty>
</view> </view>
</view> </view>
@@ -140,6 +111,7 @@ export default {
], ],
} }
}, },
computed: { computed: {
deviceListFilter() { deviceListFilter() {
@@ -370,10 +342,7 @@ export default {
} }
</script> </script>
<style lang="scss"> <style lang="scss">
.index-device { .index-device {}
.nav-menu {
}
}
/deep/ .button-group--right { /deep/ .button-group--right {
padding: 0 0 20rpx; padding: 0 0 20rpx;

View File

@@ -1,7 +1,8 @@
<template> <template>
<view class="index-device"> <view class="index-device">
<view class="nav" :style="{ top: navTabHeight + 'px' }"> </view> <view class="nav" :style="{ top: navTabHeight + 'px' }"> </view>
<view class="content device project-list" :style="{ minHeight: minHeight }"> <!-- :style="{ minHeight: minHeight }" -->
<view class="content device project-list" >
<uni-swipe-action> <uni-swipe-action>
<uni-swipe-action-item <uni-swipe-action-item
v-for="(item, index) in store.data" v-for="(item, index) in store.data"

View File

@@ -519,17 +519,17 @@ export default {
} }
.meta-item { .meta-item {
font-size: 26rpx; font-size: 24rpx;
color: #666666; color: #666666;
line-height: 1.3; line-height: 1.2;
} }
.meta-time { .meta-time {
display: block; display: block;
margin-top: 8rpx; margin-top: 8rpx;
font-size: 26rpx; font-size: 24rpx;
color: #666666; color: #666666;
line-height: 1.3; line-height: 1.2;
} }
.params-section { .params-section {

View File

@@ -3,13 +3,8 @@
<!-- {{ height }} --> <!-- {{ height }} -->
<view class="pd20"> <view class="pd20">
<uni-segmented-control <uni-segmented-control :current="curSub" class="subsection" active-color="#376cf3" :values="subsectionList"
:current="curSub" @clickItem="sectionChange" />
class="subsection"
active-color="#376cf3"
:values="subsectionList"
@clickItem="sectionChange"
/>
</view> </view>
<view class="filterCriteria"> <view class="filterCriteria">
<!-- 筛选条件 --> <!-- 筛选条件 -->
@@ -17,14 +12,10 @@
</view> </view>
<!-- 卡片 --> <!-- 卡片 -->
<scroll-view <scroll-view scroll-y="true" @scroll="onScroll" :scroll-top="scrollTop" scroll-with-animation
scroll-y="true" @refresherrefresh="refresherrefresh" :refresher-triggered="triggered" refresher-enabled="true"
@refresherrefresh="refresherrefresh"
:refresher-triggered="triggered"
refresher-enabled="true"
class="event-list mt20" class="event-list mt20"
:style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }" :style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }">
>
<!-- 循环渲染事件项 --> <!-- 循环渲染事件项 -->
<uni-card class="event-item" :class="item.type" v-for="(item, index) in store.data" :key="index"> <uni-card class="event-item" :class="item.type" v-for="(item, index) in store.data" :key="index">
<!-- 头部图标 + 信息 + 操作 --> <!-- 头部图标 + 信息 + 操作 -->
@@ -48,22 +39,20 @@
</view> --> </view> -->
</view> </view>
<view class="event-desc"> <view class="event-desc">
<text <text>统计时间{{
>统计时间{{
curSub == 0 ? item.startTime : item.startTime + ' 至 ' + item.endTime curSub == 0 ? item.startTime : item.startTime + ' 至 ' + item.endTime
}}</text }}</text>
>
</view> </view>
</view> </view>
<view class="event-action" v-if="curSub == 0 ? monthFlag : item.endTime != thisMonth01"> <view class="event-action" v-if="!showNotGenerated(item)">
<view class="iconText boxClick" @click="download(item)" <view class="iconText boxClick" @click="download(item)"><uni-icons type="arrow-down"
><uni-icons type="arrow-down" color="#fff" size="16"></uni-icons> color="#fff" size="16"></uni-icons>
</view> </view>
</view> </view>
</view> </view>
<!-- 详情区域 --> <!-- 详情区域 -->
<view class="event-detail textBox" @touchmove.stop> <view class="event-detail textBox" @touchmove.stop>
<text v-if="curSub == 0 ? monthFlag : item.endTime != thisMonth01">{{ <text v-if="!showNotGenerated(item)">{{
item.overLimitDesc == '' ? '该监测点暂无指标越限' : item.overLimitDesc item.overLimitDesc == '' ? '该监测点暂无指标越限' : item.overLimitDesc
}}</text> }}</text>
<text v-else>数据未生成暂不支持下载</text> <text v-else>数据未生成暂不支持下载</text>
@@ -72,12 +61,13 @@
<uni-icons type="download" size="16" color="#376cf3"></uni-icons>下载报告 <uni-icons type="download" size="16" color="#376cf3"></uni-icons>下载报告
</view> --> </view> -->
</uni-card> </uni-card>
<uni-load-more <uni-load-more v-if="store.status == 'loading' || (store.data && store.data.length > 0)"
v-if="store.status == 'loading' || (store.data && store.data.length > 0)" :status="store.status"></uni-load-more>
:status="store.status"
></uni-load-more>
<Cn-empty v-else style="top: 20%"></Cn-empty> <Cn-empty v-else style="top: 20%"></Cn-empty>
</scroll-view> </scroll-view>
<!-- <view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view> -->
</view> </view>
</template> </template>
<script> <script>
@@ -105,18 +95,19 @@ export default {
return { return {
status: 'noMore', status: 'noMore',
curSub: 0, curSub: 0,
subsectionList: ['报', '月报'], subsectionList: ['报', '月报'],
thisSelectValue: {}, thisSelectValue: {},
triggered: true, triggered: true,
height: 0, height: 0,
thisMonth01: '', thisMonth01: '',
monthFlag: true, scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
created() {}, created() { },
mounted() { mounted() {
this.thisMonth01 = this.$util.getToday().slice(0, -3) + '-01' this.thisMonth01 = this.$util.getToday().slice(0, -3) + '-01'
this.monthFlag = this.$util.getToday() != this.$util.getToday().slice(0, -3) + '-01'
// this.setHeight() // this.setHeight()
}, },
@@ -137,6 +128,8 @@ export default {
}, },
sectionChange(index) { sectionChange(index) {
this.curSub = index.currentIndex this.curSub = index.currentIndex
this.showBackTop = false
this.scrollTop = 0
this.init() this.init()
}, },
init() { init() {
@@ -156,7 +149,9 @@ export default {
} }
// this.store.params.startTime = this.selectValue.range[0] // this.store.params.startTime = this.selectValue.range[0]
// this.store.params.endTime = this.selectValue.range[1] // this.store.params.endTime = this.selectValue.range[1]
this.store.loadedCallback = () => {} this.store.loadedCallback = () => {
this.store.status = 'noMore'
}
this.store.reload() this.store.reload()
}, },
@@ -233,7 +228,7 @@ export default {
}) })
} }
}, },
fail: function (res) {}, fail: function (res) { },
}) })
}) })
.catch((err) => { .catch((err) => {
@@ -253,6 +248,24 @@ export default {
this.triggered = false this.triggered = false
}, 500) }, 500)
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
/** 日报统计时间与今天相同月报开始、结束时间均为当月1号 */
showNotGenerated(item) {
if (this.curSub === 0) {
return item.startTime === this.$util.getToday()
}
return item.startTime === this.thisMonth01 && item.endTime === this.thisMonth01
},
}, },
computed: {}, computed: {},
@@ -262,12 +275,14 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import '@/pages/message1/index.scss'; @import '@/pages/message1/index.scss';
.event-title { .event-title {
justify-content: space-between; justify-content: space-between;
} }
.event-tags { .event-tags {
display: flex; display: flex;
font-size: 27rpx !important ; font-size: 27rpx !important;
line-height: 50rpx; line-height: 50rpx;
} }
@@ -276,6 +291,7 @@ export default {
// display: grid; // display: grid;
// grid-template-columns: 1fr 1fr; // grid-template-columns: 1fr 1fr;
} }
.downloadReport { .downloadReport {
width: 100%; width: 100%;
background: #376cf320; background: #376cf320;
@@ -288,25 +304,31 @@ export default {
display: flex; display: flex;
justify-content: center; justify-content: center;
} }
.filterCriteria { .filterCriteria {
.nav { .nav {
background-color: #fff; background-color: #fff;
} }
.choose1 { .choose1 {
background-color: #fff; background-color: #fff;
padding: 0 20rpx; padding: 0 20rpx;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
/deep/ .uni-checkbox-input { /deep/ .uni-checkbox-input {
width: 30rpx; width: 30rpx;
height: 30rpx; height: 30rpx;
} }
font-size: 26rpx; font-size: 26rpx;
} }
} }
/deep/ .uni-scroll-view-refresher { /deep/ .uni-scroll-view-refresher {
display: none; display: none;
} }
.iconText { .iconText {
width: 45rpx; width: 45rpx;
height: 45rpx; height: 45rpx;
@@ -315,13 +337,16 @@ export default {
text-align: center; text-align: center;
line-height: 40rpx; line-height: 40rpx;
} }
.segmented-control { .segmented-control {
flex: 1; flex: 1;
margin-right: 24rpx; margin-right: 24rpx;
height: 60rpx; height: 60rpx;
} }
/* 列表容器 */ /* 列表容器 */
.event-list { .event-list {
/* 头部:图标 + 信息 + 操作 */ /* 头部:图标 + 信息 + 操作 */
.event-header { .event-header {
display: flex; display: flex;
@@ -340,9 +365,25 @@ export default {
font-size: 24rpx; font-size: 24rpx;
} }
} }
.textBox { .textBox {
// @touchmove.stop // @touchmove.stop
max-height: 110rpx; max-height: 110rpx;
overflow-y: auto; overflow-y: auto;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -147,17 +147,17 @@ export default {
} }
.meta-item { .meta-item {
font-size: 26rpx; font-size: 24rpx;
color: #666666; color: #666666;
line-height: 1.3; line-height: 1.2;
} }
.meta-time { .meta-time {
display: block; display: block;
margin-top: 8rpx; margin-top: 8rpx;
font-size: 26rpx; font-size: 24rpx;
color: #666666; color: #666666;
line-height: 1.3; line-height: 1.2;
} }
.legend-row { .legend-row {

View File

@@ -12,12 +12,13 @@
</view> </view>
<!-- 申请记录 --> <!-- 申请记录 -->
<view v-if="curSub == 1"> <view v-if="curSub == 1" style="position: relative">
<view class="filterCriteria"> <view class="filterCriteria">
<!-- 筛选条件 --> <!-- 筛选条件 -->
<Cn-filterCriteria @select="select" :showQianTree="false"> </Cn-filterCriteria> <Cn-filterCriteria @select="select" :showQianTree="false"> </Cn-filterCriteria>
</view> </view>
<scroll-view scroll-y="true" @refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower" <scroll-view scroll-y="true" @scroll="onScroll" :scroll-top="scrollTop" scroll-with-animation
@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower"
:refresher-triggered="triggered" refresher-enabled="true" class="record event-list mt20" :refresher-triggered="triggered" refresher-enabled="true" class="record event-list mt20"
:style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }"> :style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }">
<uni-card class="event-item" :class="item.type" v-for="(item, index) in store.data" :key="index"> <uni-card class="event-item" :class="item.type" v-for="(item, index) in store.data" :key="index">
@@ -90,6 +91,9 @@
:status="store.status"></uni-load-more> :status="store.status"></uni-load-more>
<Cn-empty v-else style="top: 30%"></Cn-empty> <Cn-empty v-else style="top: 30%"></Cn-empty>
</scroll-view> </scroll-view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</view> </view>
</template> </template>
@@ -132,6 +136,9 @@ export default {
userInfo: {}, userInfo: {},
height: 0, height: 0,
selectValue: {}, selectValue: {},
scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
created() { }, created() { },
@@ -170,6 +177,8 @@ export default {
sectionChange(index) { sectionChange(index) {
this.curSub = index.currentIndex this.curSub = index.currentIndex
this.showBackTop = false
this.scrollTop = 0
}, },
// 生成报告 // 生成报告
generate(item) { generate(item) {
@@ -284,6 +293,17 @@ export default {
this.store.next && this.store.next() this.store.next && this.store.next()
} }
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
}, },
watch: {}, watch: {},
} }
@@ -383,4 +403,19 @@ export default {
/deep/ .uni-scroll-view-refresher { /deep/ .uni-scroll-view-refresher {
display: none; display: none;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -42,6 +42,9 @@
<Device ref="device" :store="store" /> <Device ref="device" :store="store" />
</template> </template>
</view> </view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</Cn-page> </Cn-page>
</template> </template>
@@ -80,6 +83,7 @@ export default {
engineeringList: [], engineeringList: [],
navTabHeight: 0, navTabHeight: 0,
timer: null, timer: null,
showBackTop: false,
} }
}, },
computed: { computed: {
@@ -93,6 +97,7 @@ export default {
} }
}, },
}, },
methods: { methods: {
selectEngineering() { selectEngineering() {
if (this.userInfo.authorities === 'engineering_user') { if (this.userInfo.authorities === 'engineering_user') {
@@ -221,7 +226,17 @@ export default {
uni.navigateTo({ uni.navigateTo({
url: `/pages/index/comp/monitoringPoint`, url: `/pages/index/comp/monitoringPoint`,
}) })
} },
backToTop() {
uni.pageScrollTo({
scrollTop: 0,
duration: 300,
})
this.showBackTop = false
},
},
onPageScroll(e) {
this.showBackTop = e.scrollTop > 200
}, },
onLoad() { onLoad() {
// 页面加载时,动态配置导航栏按钮 // 页面加载时,动态配置导航栏按钮
@@ -302,7 +317,7 @@ export default {
.canneng-index-title { .canneng-index-title {
padding: 0 20rpx; padding: 0 20rpx;
font-weight: 500; /* font-weight: 500; */
display: flex; display: flex;
} }
@@ -337,4 +352,19 @@ export default {
margin-left: auto; margin-left: auto;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -3,7 +3,8 @@
<!-- 运行告警 --> <!-- 运行告警 -->
<!-- 卡片 --> <!-- 卡片 -->
<scroll-view scroll-y="true" @refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower" <scroll-view scroll-y="true" @scroll="onScroll" :scroll-top="scrollTop" scroll-with-animation
@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower"
:refresher-triggered="triggered" refresher-enabled="true" class="event-list" :refresher-triggered="triggered" refresher-enabled="true" class="event-list"
:style="{ height: 'calc(100vh - ' + (navHeight + 10) + 'px)', overflow: 'auto' }"> :style="{ height: 'calc(100vh - ' + (navHeight + 10) + 'px)', overflow: 'auto' }">
<!-- 循环渲染事件项 --> <!-- 循环渲染事件项 -->
@@ -46,6 +47,9 @@
:status="store.status"></uni-load-more> :status="store.status"></uni-load-more>
<Cn-empty v-else style="top: 20%"></Cn-empty> <Cn-empty v-else style="top: 20%"></Cn-empty>
</scroll-view> </scroll-view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</template> </template>
<script> <script>
@@ -68,6 +72,9 @@ export default {
return { return {
triggered: true, triggered: true,
status: 'noMore', //more加载前 loading加载中 noMore加载后 status: 'noMore', //more加载前 loading加载中 noMore加载后
scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
mounted() { mounted() {
@@ -108,6 +115,17 @@ export default {
this.store.next && this.store.next() this.store.next && this.store.next()
} }
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
}, },
computed: {}, computed: {},
@@ -159,4 +177,19 @@ export default {
.event-header { .event-header {
margin-bottom: 0rpx !important; margin-bottom: 0rpx !important;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -14,7 +14,7 @@
<view class="mb5" v-if="detail.evtParamTm"> 持续时间{{ detail.evtParamTm }}s</view> <view class="mb5" v-if="detail.evtParamTm"> 持续时间{{ detail.evtParamTm }}s</view>
<view class="mb5" v-if="detail.evtParamVVaDepth"> 幅值{{ detail.evtParamVVaDepth }}%</view> <view class="mb5" v-if="detail.evtParamVVaDepth"> 幅值{{ detail.evtParamVVaDepth }}%</view>
<view class="mb5" v-if="detail.evtParamPhase"> 相别{{ detail.evtParamPhase }}</view> <view class="mb5" v-if="detail.evtParamPhase"> 相别{{ detail.evtParamPhase }}</view>
<view class="mb5" v-if="detail.landPoint"> 落点区域{{ detail.landPoint }}</view> <view class="mb5" > 落点区域{{ detail.landPoint != null && detail.landPoint !== '' ? detail.landPoint : '未知' }}</view>
</view> </view>
<view class="detail-tabs"> <view class="detail-tabs">
<uni-segmented-control :current="detailTab" active-color="#376cf3" :values="['波形图', 'ITIC', 'F47']" <uni-segmented-control :current="detailTab" active-color="#376cf3" :values="['波形图', 'ITIC', 'F47']"
@@ -23,25 +23,25 @@
<view v-if="detailTab == 0"> <view v-if="detailTab == 0">
<view class="detail-content"> <view class="detail-content">
<view class="detail-content-title mb20">瞬时波形图</view> <view class="detail-content-title mb20">瞬时波形图</view>
<!-- <image style="width: 100%" :src="detail.instantPics" mode="widthFix" v-if="detail.instantPics" <image style="width: 100%" :src="detail.instantPics" mode="widthFix" v-if="detail.instantPics"
@click="previewImage(detail.instantPics)" /> @click="previewImage(detail.instantPics)" />
<text v-else>暂无</text> --> <text v-else>暂无</text>
<view v-if="listWaveData.length > 0"> <!-- <view v-if="listWaveData.length > 0">
<waveform v-for="(value, ind) in listWaveData" :index="ind" :unit="unit" :data="value" <waveform v-for="(value, ind) in listWaveData" :index="ind" :unit="unit" :data="value"
style="height: 150px;" /> style="height: 150px;" />
</view> </view>
<text v-else>暂无</text> <text v-else>暂无</text> -->
</view> </view>
<view class="detail-content"> <view class="detail-content">
<view class="detail-content-title mb20">RMS波形图</view> <view class="detail-content-title mb20">RMS波形图</view>
<!-- <image style="width: 100%" :src="detail.rmsPics" mode="widthFix" v-if="detail.rmsPics" <image style="width: 100%" :src="detail.rmsPics" mode="widthFix" v-if="detail.rmsPics"
@click="previewImage(detail.rmsPics)" /> @click="previewImage(detail.rmsPics)" />
<text v-else>暂无</text> --> <text v-else>暂无</text>
<view v-if="listRmsData.length > 0"> <!-- <view v-if="listRmsData.length > 0">
<waveform v-for="(value, ind) in listRmsData" :index="ind" :unit="unit" :data="value" <waveform v-for="(value, ind) in listRmsData" :index="ind" :unit="unit" :data="value"
style="height: 150px;" /> style="height: 150px;" />
</view> </view>
<text v-else>暂无</text> <text v-else>暂无</text> -->
</view> </view>
</view> </view>
<view v-if="detailTab == 1" class="chart-wrapper"> <view v-if="detailTab == 1" class="chart-wrapper">

View File

@@ -3,7 +3,8 @@
<!-- 运行事件 --> <!-- 运行事件 -->
<!-- 卡片 --> <!-- 卡片 -->
<scroll-view scroll-y="true" @refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower" <scroll-view scroll-y="true" @scroll="onScroll" :scroll-top="scrollTop" scroll-with-animation
@refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower"
:refresher-triggered="triggered" refresher-enabled="true" class="event-list" :refresher-triggered="triggered" refresher-enabled="true" class="event-list"
:style="{ height: 'calc(100vh - ' + (navHeight + 10) + 'px)', overflow: 'auto' }"> :style="{ height: 'calc(100vh - ' + (navHeight + 10) + 'px)', overflow: 'auto' }">
<!-- 循环渲染事件项 --> <!-- 循环渲染事件项 -->
@@ -40,6 +41,9 @@
:status="store.status"></uni-load-more> :status="store.status"></uni-load-more>
<Cn-empty v-else style="top: 20%"></Cn-empty> <Cn-empty v-else style="top: 20%"></Cn-empty>
</scroll-view> </scroll-view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</template> </template>
<script> <script>
@@ -61,6 +65,9 @@ export default {
data() { data() {
return { return {
triggered: true, triggered: true,
scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
mounted() { }, mounted() { },
@@ -106,6 +113,17 @@ export default {
this.store.next && this.store.next() this.store.next && this.store.next()
} }
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
}, },
computed: {}, computed: {},
@@ -156,4 +174,19 @@ export default {
display: none; display: none;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>

View File

@@ -21,6 +21,9 @@
<scroll-view <scroll-view
v-if="filterValue == '越限数量'" v-if="filterValue == '越限数量'"
scroll-y="true" scroll-y="true"
@scroll="onScroll"
:scroll-top="scrollTop"
scroll-with-animation
@refresherrefresh="refresherrefresh" @refresherrefresh="refresherrefresh"
@scrolltolower="scrolltolower" @scrolltolower="scrolltolower"
:refresher-triggered="triggered" :refresher-triggered="triggered"
@@ -91,6 +94,9 @@
<scroll-view <scroll-view
v-if="filterValue == '越限测点数'" v-if="filterValue == '越限测点数'"
scroll-y="true" scroll-y="true"
@scroll="onScroll"
:scroll-top="scrollTop"
scroll-with-animation
@refresherrefresh="refresherrefresh" @refresherrefresh="refresherrefresh"
@scrolltolower="scrolltolower" @scrolltolower="scrolltolower"
:refresher-triggered="triggered" :refresher-triggered="triggered"
@@ -143,6 +149,9 @@
></uni-load-more> ></uni-load-more>
<Cn-empty v-else style="top: 20%"></Cn-empty> <Cn-empty v-else style="top: 20%"></Cn-empty>
</scroll-view> </scroll-view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</template> </template>
<script> <script>
@@ -181,6 +190,9 @@ export default {
triggered: true, triggered: true,
status: 'noMore', //more加载前 loading加载中 noMore加载后 status: 'noMore', //more加载前 loading加载中 noMore加载后
scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
mounted() { mounted() {
@@ -206,6 +218,8 @@ export default {
// "time": "" // "time": ""
// 查詢 // 查詢
init() { init() {
this.showBackTop = false
this.scrollTop = 0
if (this.filterValue == '越限测点数') { if (this.filterValue == '越限测点数') {
this.store = this.DataSource('/cs-harmonic-boot/csHarmonic/queryAppHarmonicLine') this.store = this.DataSource('/cs-harmonic-boot/csHarmonic/queryAppHarmonicLine')
} else { } else {
@@ -253,6 +267,17 @@ export default {
this.store.next && this.store.next() this.store.next && this.store.next()
} }
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
}, },
computed: {}, computed: {},
@@ -300,6 +325,21 @@ export default {
display: none; display: none;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
.textBox { .textBox {
max-height: 110rpx; max-height: 110rpx;
overflow-y: auto; overflow-y: auto;

View File

@@ -3,15 +3,11 @@
<!-- 暂态 --> <!-- 暂态 -->
<view class="transientBox"> <view class="transientBox">
<view class="statistics pd20"> <view class="statistics pd20">
<view <view class="box boxClick" :class="{ boxClick1: filterValue == index }"
class="box boxClick" v-for="(item, index) in dataList" @click="
:class="{ boxClick1: filterValue == index }"
v-for="(item, index) in dataList"
@click="
filterValue = index filterValue = index
init() init()
" ">
>
<!-- <text class="num">{{ item.value }}</text> --> <!-- <text class="num">{{ item.value }}</text> -->
<text class="num">{{ item.value }}</text> <text class="num">{{ item.value }}</text>
<text class="label">{{ item.label }}</text> <text class="label">{{ item.label }}</text>
@@ -20,23 +16,13 @@
<!-- <view class="smallLabel"> </view> --> <!-- <view class="smallLabel"> </view> -->
</view> </view>
<!-- 卡片 --> <!-- 卡片 -->
<scroll-view <scroll-view scroll-y="true" @scroll="onScroll" :scroll-top="scrollTop" scroll-with-animation
scroll-y="true" @refresherrefresh="refresherrefresh" @scrolltolower="scrolltolower"
@refresherrefresh="refresherrefresh" :refresher-triggered="triggered" refresher-enabled="true" class="event-list"
@scrolltolower="scrolltolower" :style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }">
:refresher-triggered="triggered"
refresher-enabled="true"
class="event-list"
:style="{ height: 'calc(100vh - ' + (navHeight + height) + 'px)', overflow: 'auto' }"
>
<!-- 循环渲染事件项 --> <!-- 循环渲染事件项 -->
<uni-card <uni-card class="event-item boxClick" :class="judgment(item.showName).type"
class="event-item boxClick" v-for="(item, index) in store.data || []" :key="index" @click="jump(item)">
:class="judgment(item.showName).type"
v-for="(item, index) in store.data || []"
:key="index"
@click="jump(item)"
>
<!-- 头部图标 + 信息 + 操作 --> <!-- 头部图标 + 信息 + 操作 -->
<view class="event-header"> <view class="event-header">
<view class="event-icon"> <view class="event-icon">
@@ -89,17 +75,18 @@
}} {{ }} {{
item.landPoint != null && item.landPoint !== '' item.landPoint != null && item.landPoint !== ''
? ',落点区域:' + item.landPoint ? ',落点区域:' + item.landPoint
: '' : ',落点区域:未知'
}} }}
</text> </text>
</view> </view>
</uni-card> </uni-card>
<uni-load-more <uni-load-more v-if="store.status == 'loading' || (store.data && store.data.length > 0)"
v-if="store.status == 'loading' || (store.data && store.data.length > 0)" :status="store.status"></uni-load-more>
:status="store.status"
></uni-load-more>
<Cn-empty v-else style="top: 20%"></Cn-empty> <Cn-empty v-else style="top: 20%"></Cn-empty>
</scroll-view> </scroll-view>
<view class="back-top boxClick" v-show="showBackTop" @click="backToTop">
<uni-icons type="arrow-up" size="22" color="#fff"></uni-icons>
</view>
</view> </view>
</template> </template>
<script> <script>
@@ -117,7 +104,7 @@ export default {
// default: () => {}, // default: () => {},
}, },
sortIndex: { sortIndex: {
type: [Number,String], type: [Number, String],
// default: () => {}, // default: () => {},
}, },
}, },
@@ -135,6 +122,9 @@ export default {
status: 'noMore', //more加载前 loading加载中 noMore加载后 status: 'noMore', //more加载前 loading加载中 noMore加载后
sort: 0, sort: 0,
triggered: true, triggered: true,
scrollTop: 0,
oldScrollTop: 0,
showBackTop: false,
} }
}, },
@@ -177,10 +167,10 @@ export default {
this.getHeight() this.getHeight()
this.loading = false this.loading = false
queryAppEventCounts(this.store.params).then((res) => { queryAppEventCounts(this.store.params).then((res) => {
this.dataList[0].value = res.data.allNum this.dataList[0].value = res.data?.allNum || 0
this.dataList[1].value = res.data.eventDown this.dataList[1].value = res.data?.eventDown || 0
this.dataList[2].value = res.data.eventOff this.dataList[2].value = res.data?.eventOff || 0
this.dataList[3].value = res.data.eventUp this.dataList[3].value = res.data?.eventUp || 0
}) })
} }
this.store.reload() this.store.reload()
@@ -232,7 +222,7 @@ export default {
uni.navigateTo({ url: '/pages/message1/comp/transientDetails?detail=' + encodeURIComponent(str) }) uni.navigateTo({ url: '/pages/message1/comp/transientDetails?detail=' + encodeURIComponent(str) })
}, },
setSort(index) { setSort(index) {
console.log(123,this.sortIndex); console.log(123, this.sortIndex);
// this.sort = index // this.sort = index
this.init() this.init()
@@ -251,6 +241,17 @@ export default {
this.store.next && this.store.next() this.store.next && this.store.next()
} }
}, },
onScroll(e) {
this.oldScrollTop = e.detail.scrollTop
this.showBackTop = e.detail.scrollTop > 200
},
backToTop() {
this.scrollTop = this.oldScrollTop
this.$nextTick(() => {
this.scrollTop = 0
})
this.showBackTop = false
},
}, },
computed: {}, computed: {},
@@ -273,4 +274,19 @@ export default {
/deep/ .uni-scroll-view-refresher { /deep/ .uni-scroll-view-refresher {
display: none; display: none;
} }
.back-top {
position: fixed;
right: 30rpx;
bottom: 60rpx;
width: 80rpx;
height: 80rpx;
border-radius: 50%;
background: #376cf3;
display: flex;
align-items: center;
justify-content: center;
box-shadow: 0 4rpx 16rpx rgba(55, 108, 243, 0.35);
z-index: 99;
}
</style> </style>