张晓波
2023-09-19 164694c47c35d6654df69b533e8dbf8b5423efc5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
<template>
    <view class="safe_index">
        <view class="safe_list">
            <scroll-view
                scroll-y="true"
                class="incom_index_scroll"
                :scroll-top="scrollTop" 
                refresher-enabled="true" 
                refresher-background="#EAEAEA"
                :refresher-triggered="triggered" 
                @refresherpulling="refresherrefresh"
                @scrolltolower="scrolltoLower">
                <view class="safe_cards" v-for="(item,index) in trainList" :key="index">
                    <view class="safe_cards_left">
                        <view class="safe_cards_titles">{{item.secureName}}</view>
                        <view class="safe_cards_time"><span>培训日期:</span>{{item.secureTime}}</view>
                    </view>
                    <view class="safe_cards_right">
                        <view class="safe_cards_types"><span>类型:</span>{{item.dictName}}</view>
                        <view class="safe_cards_arrows" @click="detailsClick(item)"></view>
                    </view>
                </view>
                <u-loadmore :status="status" :icon-type="iconType" :load-text="loadText" />
            </scroll-view>
        </view>
    </view>
</template>
 
<script>
    import { throttle } from '../../plugins/public.js';
    export default{
        data(){
            return{
                pageNum: 1,
                pageSize: 10,
                loadPage: 0,
                scrollTop: 0,
                triggered: true,
                status: 'loading',
                loadText: {
                    loading: '努力加载中',
                    nomore: '没有更多数据了'
                },
                trainList:[],//培训列表
            }
        },
        onLoad() {
            this.searchTrainList()
        },
        methods:{
            //查询列表
            searchTrainList(){
                this.triggered = true;
                this.trainList = [];
                let params = {
                    pageNum: this.pageNum,
                    pageSize:this.pageSize,
                }
                this.$api.reboSystem.getAllTrainingList(params).then(res=>{
                    if(res.statusMsg === 'ok'){
                        this.trainList = res.data.list
                        this.loadPage = res.data.pages;
                        this.triggered = false;
                        this.status = 'nomore';
                    }else{
                        uni.$u.toast(res.statusMsg);
                    }
                }).catch((err) => {
                    uni.$u.toast('请检查网络服务或联系管理员!')
                })
            },
            //自定义下拉刷新
            refresherrefresh: throttle(function() {
                this.status = 'loading';
                this.pageNum = 1;
                this.searchTrainList();
                uni.$u.toast('刷新成功');
            }, 500),
            //触底刷新
            scrolltoLower: throttle(function() {
                this.status = 'loading';
                if(this.pageNum >= this.loadPage) {
                    setTimeout(() => {
                        this.status = 'nomore'
                        uni.$u.toast('没有更多数据了');
                    },1000)
                    return
                } else {
                    this.pageNum+=1
                    let params = {
                        pageNum: this.pageNum,
                        pageSize:this.pageSize,
                    }
                    this.$api.reboSystem.getAllTrainingList(params).then(res=>{
                        if(res.statusMsg === 'ok'){
                            this.trainList.push(...res.data.list)
                            this.loadPage = res.data.pages;
                            this.triggered = false;
                            this.status = 'nomore';
                        }else{
                            uni.$u.toast(res.statusMsg);
                        }
                    }).catch((err) => {
                        uni.$u.toast('请检查网络服务或联系管理员!')
                    })
                }
            }, 1500),
            //跳转详情
            detailsClick(val){
                uni.navigateTo({
                    url: `./trainDetails?secureId=${val.secureId}&totals=${val.totals}&completes=${val.completes}`
                })
            }
        }
    }
</script>
 
<style scoped lang="scss">
    .safe_index{
        height: 100vh;
        background-color: #F6F6F6;
        .safe_list{
            height: 100%;
            padding: 10px 15px 0px;
            .incom_index_scroll{
                height: 90%;
                .safe_cards{
                    height: 15vh;
                    border-radius: 6px;
                    background-color: #FFFFFF;
                    margin-bottom: 15px;
                    display: flex;
                    justify-content: space-between;
                    
                    .safe_cards_left{
                        width: 50%;
                        height: 100%;
                        margin-left: 15px;
                        display: flex;
                        justify-content: center;
                        flex-direction: column;
                        .safe_cards_titles{
                            font-weight: 500;
                            font-size: 17px;
                            color: #333333;
                        }
                        .safe_cards_time{
                            margin-top: 15px;
                            font-size: 13px;
                            color: #999999;
                        }
                    }
                    .safe_cards_right{
                        width: 50%;
                        height: 100%;
                        margin-top: -17px;
                        display: flex;
                        justify-content: center;
                        align-items: center;
                        flex-direction: column;
                        position: relative;
                        .safe_cards_types{
                            color: #1977FF;
                            font-size:15px ;
                            span{
                                color: #999999;
                            }
                        }
                        .safe_cards_arrows{
                            position: absolute;
                            top: 68px;
                            left: 85%;
                            width: 100%;
                            height: 20px;
                            background: url('../../static/back.png') no-repeat;
                        }
                    }
                }
            }
        }
    }
</style>