123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312 |
- <template>
- <view class="meteorological">
- <view class="meteorological-header">
- <view class="meteorological-header-category">
- <picker
- @change="bindPickerChange"
- :value="meteorologicalIndex"
- :range="meteorologicalPickerList"
- >
- <view class="category-content">
- <view class="category-img">
- <u-icon name="list" size="54" class="category-icon"></u-icon>
- </view>
- <view class="category-text">{{ meteorologicalPickerList[meteorologicalIndex] }}</view>
- </view>
- </picker>
- </view>
- </view>
- <view class="meteorological-content">
- <scroll-view scroll-y="true" class="scroll-Y" @scrolltolower="handleScrolltolower">
- <view class="meteorological-listbody">
- <!-- 列表无数据 -->
- <template v-if="list_empty">
- <view class="meteorological-listbody-nodata">
- <text class="meteorological-listbody-nodata-text">暂无数据</text>
- </view>
- </template>
- <!-- 列表有数据 -->
- <template v-else>
- <view
- class="listbody-item"
- v-for="meteorologicalItem in meteorologicalList"
- :key="meteorologicalItem.id"
- @click="handleMeteorologicalDetails(meteorologicalItem)"
- >
- <view class="item-container">
- <!-- 标题 -->
- <view
- class="item-title"
- >{{ meteorologicalItem.metTitle }}({{ meteorologicalItem.metCategoryName }})</view>
- <!-- 简介 -->
- <view class="item-content">{{ meteorologicalItem.metSummary }}</view>
- <!-- 发布时间 -->
- <view class="item-releasetime">发布时间:{{ meteorologicalItem.metInTime }}</view>
- </view>
- </view>
- </template>
- <!-- 加载更多组件 -->
- <uni-load-more :status="loadStatus" v-if="!list_empty"></uni-load-more>
- </view>
- </scroll-view>
- </view>
- </view>
- </template>
- <script>
- import {
- meteorologicalListData,
- meteorologicalCategoryListData
- } from '@/agrcloud-api/meteorological';
- import uniLoadMore from "@/agrcloud-components/uni-load-more/uni-load-more.vue"
- export default {
- name: 'meteorological',
- components: {
- uniLoadMore
- },
- data() {
- return {
- meteorologicalIndex: 0,
- respCategoryList: [],
- meteorologicalPickerList: ["全部"],
- currMeteorologicalValue: '',
- loadStatus: 'more',
- list_empty: false,
- pageTotal: 0,
- pageCount: 0,
- pagination: {
- pageNum: 1,
- pageSize: 10
- },
- meteorologicalList: []
- };
- },
- onLoad() {
- this.initData();
- },
- methods: {
- /** 初始化数据 */
- initData() {
- this.getCategoryListData();
- },
- getCategoryListData() {
- meteorologicalCategoryListData().then((res) => {
- this.respCategoryList = res.data || [];
- let tempCategoryList = [];
- for (let categoryIndex = 0; categoryIndex < this.respCategoryList.length; categoryIndex++) {
- tempCategoryList.push(this.respCategoryList[categoryIndex].dictLabel);
- }
- this.meteorologicalPickerList = [...this.meteorologicalPickerList, ...tempCategoryList];
- this.getMeteorologicalListData();
- }).catch(err => {
- this.loadStatus = 'noMores';
- });
- },
- bindPickerChange: function (e) {
- this.meteorologicalIndex = e.target.value;
- const currPickerChangeCategory = this.meteorologicalPickerList[e.target.value];
- if (currPickerChangeCategory != '全部') {
- for (let categoryIndex = 0; categoryIndex < this.respCategoryList.length; categoryIndex++) {
- if (currPickerChangeCategory == this.respCategoryList[categoryIndex].dictLabel) {
- this.currMeteorologicalValue = this.respCategoryList[categoryIndex].dictValue;
- break;
- }
- }
- } else {
- this.currMeteorologicalValue = '';
- }
- this.pagination.pageNum = 1;
- this.getMeteorologicalListData();
- },
- /** 获取通知公告之列表数据 */
- getMeteorologicalListData() {
- this.list_empty = false;
- this.loadStatus = 'loading';
- meteorologicalListData({ ...this.pagination, metCategoryId: this.currMeteorologicalValue }).then(res => {
- // 数据总条数
- this.pageTotal = res.total || 0;
- // 如果列表为第一页,返回列表数据清空
- if (this.pagination.pageNum == 1) {
- this.meteorologicalList = [];
- };
- // 处理返回结果
- if ((res.rows || []).length <= 0) { // 返回结果没有数据
- if ((this.meteorologicalList || []).length <= 0) {
- this.loadStatus = 'noMores';
- this.list_empty = true;
- } else {
- this.loadStatus = 'noMores';
- }
- } else { //返回结果有数据
- this.list_empty = false;
- // 获取列表数据分页数量
- this.pageCount = Math.ceil((res.total || 0) / this.pagination.pageSize);
- if ((res.total || 0) % this.pagination.pageSize == 0) {
- this.pageCount = Math.ceil((res.total || 0) / this.pagination.pageSize);
- if (this.pageCount == 1) {
- this.pageCount--;
- }
- } else {
- this.pageCount--;
- };
- // 处理页面状态
- if (this.pageCount === 0) {
- this.loadStatus = 'noMores'
- } else {
- this.loadStatus = 'more'
- }
- // 组装返回数据
- this.meteorologicalList.push.apply(this.meteorologicalList, res.rows || []);
- uni.stopPullDownRefresh();
- }
- }).catch(err => {
- this.loadStatus = 'noMores';
- });
- },
- handleScrolltolower() {
- this.loadStatus = 'loading';
- if (this.pagination.pageNum - 1 >= this.pageCount) {
- this.loadStatus = 'noMores';
- return;
- } else {
- this.pagination.pageNum++;
- this.getMeteorologicalListData();
- }
- },
- /** 通知公告之详情数据操作 */
- handleMeteorologicalDetails(param) {
- this.$store.dispatch("SetMeteorologicalDetails", param).then(() => {
- uni.navigateTo({
- url: '/pages/meteorological/modal/details'
- });
- }).catch(() => {
- this.$msgbox('访问数据异常!', 'none');
- });
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .meteorological {
- padding: 0;
- width: 100%;
- &-header {
- width: 100%;
- background: #ffffff;
- height: 104rpx;
- padding-top: 24rpx;
- &-category {
- margin: 0 24rpx;
- width: 100%;
- height: 56rpx;
- line-height: 56rpx;
- .category-content {
- display: flex;
- .category-img {
- flex: 1;
- margin-top: 4rpx;
- }
- .category-text {
- flex: 10;
- height: 56rpx;
- font-size: 34rpx;
- font-family: PingFangSC-Medium, PingFang SC;
- font-weight: 500;
- color: #333333;
- line-height: 56rpx;
- }
- }
- }
- }
- .meteorological-content {
- padding-top: 25rpx;
- width: 100%;
- .scroll-Y {
- height: calc(
- 100vh - 88rpx - 205rpx - env(safe-area-inset-bottom) -
- var(--status-bar-height)
- );
- }
- .meteorological-listbody {
- width: 100%;
- .listbody-item {
- height: 246rpx;
- background: #ffffff;
- margin-bottom: 24rpx;
- .item-container {
- padding: 24rpx;
- .item-title {
- height: 66rpx;
- font-size: 30rpx;
- font-family: PingFangSC-Medium, PingFang SC;
- font-weight: 700;
- color: #333333;
- line-height: 42rpx;
- border-bottom: 2rpx solid #eeeeee;
- }
- .item-content {
- margin: 24rpx 0;
- font-size: 30rpx;
- font-family: PingFangSC-Regular, PingFang SC;
- font-weight: 400;
- color: #666666;
- line-height: 42rpx;
- overflow: hidden;
- text-overflow: ellipsis;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
- }
- .item-releasetime {
- height: 42rpx;
- font-size: 30rpx;
- font-family: PingFangSC-Regular, PingFang SC;
- font-weight: 400;
- color: #999999;
- line-height: 42rpx;
- }
- }
- }
- &-nodata {
- text-align: center;
- margin-top: 20rpx;
- &-text {
- font-size: 30rpx;
- color: #777777;
- }
- }
- }
- }
- }
- </style>
|