提交 3b478011e0e6666113eb9ad0f76e69da51257164

作者 guomingshu
1 个父辈 decbc290

feat: 签到列表页面优化

... ... @@ -102,7 +102,7 @@
102 102 },
103 103 "quickapp" : {},
104 104 "mp-weixin" : {
105   - "appid" : "wxac18386e35824192",
  105 + "appid" : "wx6cd2152282abd34c",
106 106 "setting" : {
107 107 "urlCheck" : false,
108 108 "es6" : true,
... ...
... ... @@ -45,7 +45,14 @@
45 45 "subPackages": [{
46 46 "root": "pages/main/home",
47 47 "pages": [
  48 + {
  49 + "path": "registrationReview/studentList",
  50 + "style": {
  51 + "navigationBarTitleText": "待报名单",
  52 + "enablePullDownRefresh": false
  53 + }
48 54
  55 + },
49 56 {
50 57 "path": "registrationReview/registrationReview",
51 58 "style": {
... ...
1 1 <template>
2   - <view class="registration_review" :style="vuex_theme">
3   - <view class="search_box">
4   - <!-- <view class="check">
  2 + <view class="registration_review" :style="vuex_theme">
  3 + <view class="link_page" @click="handleLik">
  4 + <view class="left">
  5 + <u-image
  6 + src="/static/img/home/mess.png"
  7 + width="32rpx"
  8 + height="32rpx"
  9 + ></u-image>
  10 + <text>查看待报名单</text>
  11 + </view>
  12 + <u-image
  13 + src="/static/img/home/right.png"
  14 + width="20rpx"
  15 + height="20rpx"
  16 + ></u-image>
  17 + </view>
  18 + <view class="search_box">
  19 + <!-- <view class="check">
5 20 <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
6 21 <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
7 22 v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
... ... @@ -9,97 +24,180 @@
9 24 </u-checkbox>
10 25 </u-checkbox-group>
11 26 </view> -->
12   -
13   - <!-- <view class="search">
  27 +
  28 + <!-- <view class="search">
14 29 <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
15 30 bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
16 31 </u-search>
17 32 </view> -->
18   - <view style="width: 148px;">
19   - <u-subsection :list="['待审核','全部']" :current="curNow" :fontSize="26" :activeColor="'#000'" @change="sectionChange"></u-subsection>
20   - </view>
21   - <view style="display: flex; justify-content: space-between; align-items: center;">
22   - <u-icon slot="icon" size="40" :name="'/static/img/home/search.png'" @click="searchCli"></u-icon>
23   - <view style="width: 16px;"></view>
24   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
25   - </view>
26   - </view>
27   -
28   - <view class="list_box" v-if="list.length > 0">
29   - <view class="item" v-for="(item, i) in list" :key="i" @click="handelDetail(item)">
30   -
31   - <view class="bg_image" v-if="item.status == 'wait'">
32   - <u-image :src="vuex_baseImgUrl && `${vuex_baseImgUrl}labelBgGreen.png`" width="142rpx" height="48rpx"></u-image>
33   - <text>待审核</text>
34   - </view>
35   -
36   - <view class="bg_image" v-if="item.status == 'pass'">
37   - <u-image src="/static/img/home/labelBgGrey.png" width="142rpx" height="48rpx"></u-image>
38   - <text>已通过</text>
39   - </view>
40   -
41   - <view class="bg_image" v-if="item.status == 'reject'">
42   - <u-image src="/static/img/home/labelBgGrey.png" width="142rpx" height="48rpx"></u-image>
43   - <text>已拒绝</text>
44   - </view>
45   -
46   - <view class="name">{{item.studentName}}</view>
47   - <view class="company">
48   - <u-icon size="32rpx" :name="vuex_baseImgUrl && `${vuex_baseImgUrl}internshipUnitIcon.png`"></u-icon>
49   - <text>实习单位</text>
50   - <text>{{item.companyName || '--'}}</text>
51   - </view>
52   - <view class="company position">
53   - <u-icon size="32rpx" :name="vuex_baseImgUrl && `${vuex_baseImgUrl}internshipJobIcon.png`"></u-icon>
54   - <text>实习岗位</text>
55   - <text>{{item.jobName|| '--'}}</text>
56   - </view>
57   -
58   - <view class="time">
59   - <text>申请时间</text>
60   - <text>{{timeFormat(item.applyTime, 'yyyy-mm-dd hh:MM')}}</text>
61   - </view>
62   -
63   - </view>
64   - <c-loading :loading="loading"></c-loading>
65   - </view>
66   - <view v-else class="no_data">
67   - <c-no-data></c-no-data>
68   - </view>
69   -
70   - <u-popup :show="show" mode="bottom" @close="close" :round="22">
71   - <view class="popup">
72   - <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
73   - <view class="title">
74   - 计划筛选
75   - </view>
76   - <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
77   - </view>
78   - <view class="search">
79   - <u-search placeholder="请输入计划关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
80   - bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
81   - </u-search>
82   - </view>
83   - <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
84   - @scrolltolower="lower()">
85   - <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
86   - <view style="display: flex; align-items: center; justify-content: space-between;">
87   - <view class="item_title">
88   - {{item.name}}
89   - </view>
90   - <image v-if="item.id == planId" style="width: 20px; height: 20px;" :src="vuex_baseImgUrl && `${vuex_baseImgUrl}popselect.png`" mode=""></image>
91   - </view>
92   - </view>
93   - </scroll-view>
94   - <view v-else class="no_data" @click="jumpVerified">
95   - <view class="text_black_28">
96   - 暂未搜索到该计划
97   - </view>
98   - </view>
99   - </view>
100   - </u-popup>
101   -
102   - <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  33 + <view style="width: 148px">
  34 + <u-subsection
  35 + :list="['待审核', '全部']"
  36 + :current="curNow"
  37 + :fontSize="26"
  38 + :activeColor="'#000'"
  39 + @change="sectionChange"
  40 + ></u-subsection>
  41 + </view>
  42 + <view
  43 + style="
  44 + display: flex;
  45 + justify-content: space-between;
  46 + align-items: center;
  47 + "
  48 + >
  49 + <u-icon
  50 + slot="icon"
  51 + size="40"
  52 + :name="'/static/img/home/search.png'"
  53 + @click="searchCli"
  54 + ></u-icon>
  55 + <view style="width: 16px"></view>
  56 + <u-icon
  57 + slot="icon"
  58 + size="40"
  59 + :name="'/static/img/home/selectIcon.png'"
  60 + @click="show = true"
  61 + ></u-icon>
  62 + </view>
  63 + </view>
  64 +
  65 + <view class="list_box" v-if="list.length > 0">
  66 + <view
  67 + class="item"
  68 + v-for="(item, i) in list"
  69 + :key="i"
  70 + @click="handelDetail(item)"
  71 + >
  72 + <view class="bg_image" v-if="item.status == 'wait'">
  73 + <u-image
  74 + :src="vuex_baseImgUrl && `${vuex_baseImgUrl}labelBgGreen.png`"
  75 + width="142rpx"
  76 + height="48rpx"
  77 + ></u-image>
  78 + <text>待审核</text>
  79 + </view>
  80 +
  81 + <view class="bg_image" v-if="item.status == 'pass'">
  82 + <u-image
  83 + src="/static/img/home/labelBgGrey.png"
  84 + width="142rpx"
  85 + height="48rpx"
  86 + ></u-image>
  87 + <text>已通过</text>
  88 + </view>
  89 +
  90 + <view class="bg_image" v-if="item.status == 'reject'">
  91 + <u-image
  92 + src="/static/img/home/labelBgGrey.png"
  93 + width="142rpx"
  94 + height="48rpx"
  95 + ></u-image>
  96 + <text>已拒绝</text>
  97 + </view>
  98 +
  99 + <view class="name">{{ item.studentName }}</view>
  100 + <view class="company">
  101 + <u-icon
  102 + size="32rpx"
  103 + :name="
  104 + vuex_baseImgUrl && `${vuex_baseImgUrl}internshipUnitIcon.png`
  105 + "
  106 + ></u-icon>
  107 + <text>实习单位</text>
  108 + <text>{{ item.companyName || "--" }}</text>
  109 + </view>
  110 + <view class="company position">
  111 + <u-icon
  112 + size="32rpx"
  113 + :name="vuex_baseImgUrl && `${vuex_baseImgUrl}internshipJobIcon.png`"
  114 + ></u-icon>
  115 + <text>实习岗位</text>
  116 + <text>{{ item.jobName || "--" }}</text>
  117 + </view>
  118 +
  119 + <view class="time">
  120 + <text>申请时间</text>
  121 + <text>{{ timeFormat(item.applyTime, "yyyy-mm-dd hh:MM") }}</text>
  122 + </view>
  123 + </view>
  124 + <c-loading :loading="loading"></c-loading>
  125 + </view>
  126 + <view v-else class="no_data">
  127 + <c-no-data></c-no-data>
  128 + </view>
  129 +
  130 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  131 + <view class="popup">
  132 + <view
  133 + style="
  134 + display: flex;
  135 + justify-content: space-between;
  136 + align-items: center;
  137 + margin-bottom: 28px;
  138 + "
  139 + >
  140 + <view class="title"> 计划筛选 </view>
  141 + <image
  142 + class="close"
  143 + src="/static/img/home/closepop.png"
  144 + @click="close"
  145 + mode=""
  146 + ></image>
  147 + </view>
  148 + <view class="search">
  149 + <u-search
  150 + placeholder="请输入计划关键词搜索"
  151 + placeholderColor="#C1C1C9"
  152 + searchIconSize="36"
  153 + height="64rpx"
  154 + bgColor="#F4F4F4"
  155 + :showAction="true"
  156 + shape="round"
  157 + v-model="sxsearch"
  158 + @custom="workSearch()"
  159 + @search="workSearch()"
  160 + >
  161 + </u-search>
  162 + </view>
  163 + <scroll-view
  164 + v-if="works.length > 0"
  165 + scroll-y="true"
  166 + style="height: 80%; margin-top: 40rpx"
  167 + @scrolltolower="lower()"
  168 + >
  169 + <view
  170 + class="item_box"
  171 + v-for="(item, index) in works"
  172 + :key="index"
  173 + @click="popupSelItem(item)"
  174 + >
  175 + <view
  176 + style="
  177 + display: flex;
  178 + align-items: center;
  179 + justify-content: space-between;
  180 + "
  181 + >
  182 + <view class="item_title">
  183 + {{ item.name }}
  184 + </view>
  185 + <image
  186 + v-if="item.id == planId"
  187 + style="width: 20px; height: 20px"
  188 + :src="vuex_baseImgUrl && `${vuex_baseImgUrl}popselect.png`"
  189 + mode=""
  190 + ></image>
  191 + </view>
  192 + </view>
  193 + </scroll-view>
  194 + <view v-else class="no_data" @click="jumpVerified">
  195 + <view class="text_black_28"> 暂未搜索到该计划 </view>
  196 + </view>
  197 + </view>
  198 + </u-popup>
  199 +
  200 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
103 201 <view class="popup_search">
104 202 <view class="content">
105 203 <view class="title">按计划筛选</view>
... ... @@ -133,516 +231,526 @@
133 231
134 232 </view>
135 233 </u-popup> -->
136   -
137   - </view>
  234 + </view>
138 235 </template>
139 236
140 237 <script>
141   - import {
142   - mapGetters,
143   - mapState,
144   - mapActions
145   - } from 'vuex'
146   - import listMixin from "@/common/mixins/list-mixin.js";
147   -
148   - import {
149   - getRegistrationReviewApi,
150   - getPlanListApi,
151   - } from '@/config/api.js';
152   -
153   - export default {
154   - mixins: [listMixin],
155   - data() {
156   - return {
157   - checkboxValue: [],
158   - // 基本案列数据
159   - checkboxList: [{
160   - name: '待审核',
161   - disabled: false
162   - }],
163   - keyword: '',
164   - show: false,
165   - list: [], //列表必须为key list的数组
166   - search: {
167   - //搜索对象必须为key search的对象
168   - keySearch: "",
169   - status: 'wait,pass,reject',
170   -
171   - },
172   - planId: '',
173   - switchValue: false,
174   - curNow: 1,
175   - sxsearch: '',
176   - works: [],
177   - workspage: 1,
178   - workstotal: 0,
179   - }
  238 +import { mapGetters, mapState, mapActions } from "vuex";
  239 +import listMixin from "@/common/mixins/list-mixin.js";
  240 +
  241 +import { getRegistrationReviewApi, getPlanListApi } from "@/config/api.js";
  242 +
  243 +export default {
  244 + mixins: [listMixin],
  245 + data() {
  246 + return {
  247 + checkboxValue: [],
  248 + // 基本案列数据
  249 + checkboxList: [
  250 + {
  251 + name: "待审核",
  252 + disabled: false,
  253 + },
  254 + ],
  255 + keyword: "",
  256 + show: false,
  257 + list: [], //列表必须为key list的数组
  258 + search: {
  259 + //搜索对象必须为key search的对象
  260 + keySearch: "",
  261 + status: "wait,pass,reject",
  262 + },
  263 + planId: "",
  264 + switchValue: false,
  265 + curNow: 1,
  266 + sxsearch: "",
  267 + works: [],
  268 + workspage: 1,
  269 + workstotal: 0,
  270 + };
  271 + },
  272 +
  273 + onLoad(option) {
  274 + console.log(option);
  275 + // this.$store.dispatch(`home/getProjectList`, {
  276 + // pageSize: -1,
  277 + // })
  278 +
  279 + // this.search.keySearch = '';
  280 +
  281 + this.worksloadData();
  282 +
  283 + if (option && option.status) {
  284 + // this.search.status = 'wait';
  285 + // this.checkboxValue = ['待审核'];
  286 + // this.switchValue = true;
  287 + this.curNow = 0;
  288 + }
  289 +
  290 + // this.finished = false;
  291 + // this.loading = "loadmore";
  292 + // this.page = 0;
  293 + // this.list = [];
  294 + },
  295 +
  296 + onShow() {
  297 + this.finished = false;
  298 + this.loading = "loadmore";
  299 + this.page = 0;
  300 + this.list = [];
  301 + this._getList();
  302 + },
  303 +
  304 + computed: {
  305 + ...mapState("home", {
  306 + // 箭头函数可使代码更简练
  307 + projectList: "projectList",
  308 + }),
  309 + },
  310 +
  311 + methods: {
  312 +
  313 + handleLik() {
  314 + this.$u.route("/pages/main/home/registrationReview/studentList");
180 315 },
181 316
182   - onLoad(option) {
183   - console.log(option)
184   - // this.$store.dispatch(`home/getProjectList`, {
185   - // pageSize: -1,
186   - // })
187   -
188   - // this.search.keySearch = '';
189   -
190   - this.worksloadData()
191   -
192   - if (option && option.status) {
193   - // this.search.status = 'wait';
194   - // this.checkboxValue = ['待审核'];
195   - // this.switchValue = true;
196   - this.curNow = 0;
197   - }
198   -
199   - // this.finished = false;
200   - // this.loading = "loadmore";
201   - // this.page = 0;
202   - // this.list = [];
203   -
204   - },
205   -
206   - onShow() {
207   - this.finished = false;
208   - this.loading = "loadmore";
209   - this.page = 0;
210   - this.list = [];
211   - this._getList();
212   - },
213   -
214   - computed: {
215   - ...mapState('home', {
216   - // 箭头函数可使代码更简练
217   - projectList: 'projectList',
218   -
219   - }),
220   -
221   - },
222   -
223   - methods: {
224   -
225   - searchCli() {
226   - this.$u.route('/pages/main/home/search/search?type=reg&searchkey=' + this.keyword);
227   - },
228   -
229   - sectionChange(index) {
230   - this.curNow = index;
231   -
232   - this.finished = false;
233   - this.loading = "loadmore";
234   - this.page = 0;
235   - this.list = [];
236   - this._getList();
237   - },
238   -
239   - handelDetail(record) {
240   - this.$u.route({
241   - url: `pages/main/home/registrationDetail/registrationDetail?&id=${record.id}`
242   - })
243   - },
244   -
245   - timeFormat(timestamp, format = 'yyyy-mm-dd') {
246   - return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : '--'
247   - },
248   -
249   - checkboxChange(n) {
250   - console.log('change', n);
251   -
252   - this.search.status = n.length > 0 ? 'wait' : 'wait,pass,reject';
253   -
254   - this.switchValue = n.length > 0 ? true : false;
255   -
256   - this.finished = false;
257   - this.loading = "loadmore";
258   - this.page = 0;
259   - this.list = [];
260   - this._getList();
261   - },
262   -
263   - handelSearch(value) {
264   - this.finished = false;
265   - this.loading = "loadmore";
266   - this.page = 0;
267   - this.list = [];
268   - this._getList();
269   - },
270   -
271   - open() {
272   - // console.log('open');
273   - },
274   - close() {
275   - this.show = false
276   - // console.log('close');
277   - },
278   - // scroll-view到底部加载更多
279   - onreachBottom() {},
280   - // 搜索
281   - searchSubmit() {
282   - // 调用混合搜索
283   - this._searchData();
284   - },
285   - // 模拟后端分页
286   - async getData(requestParams) {
287   - const {
288   - search = {}
289   - } = requestParams;
290   -
291   - let params = {};
292   - params.pageNumber = requestParams.page + 1;
293   - params.pageSize = 5;
294   -
295   - // if (search.status) {
296   - // params.status = search.status;
297   - // }
298   -
299   - if (this.curNow == 0) {
300   - params.status = 'wait';
301   - }else {
302   - params.status = 'wait,pass,reject';
303   - }
304   -
305   - if (this.keyword) {
306   - params.keySearch = this.keyword
307   - }
308   -
309   - if (this.planId) {
310   - params.planId = this.planId
311   - }
312   -
313   - return await getRegistrationReviewApi(params);
314   - },
315   - // 数据请求(没错就是这么少的代码)
316   - async _getList() {
317   - if (this.page == 0) {
318   - this.list = [];
319   - }
320   -
321   - // 根据实际情况修改自己修改key
322   - let result = await this.getData({
323   - page: this.page, // 传入页码
324   - size: this.size, // 传入每页条数
325   - search: this.search, // 传入搜索的对象
326   - });
327   -
328   - this.total = result.total;
329   -
330   - if (this.list.length == 0 && result.records.length == 0) {
331   - this.shownoData = false
332   - } else {
333   - this.shownoData = true
334   - }
335   -
336   - this.list = this.list.concat(result.records)
337   -
338   - // 判断是否全部加载完成
339   - if (this.total == this.list.length) {
340   - this.finished = true;
341   - this.loading = 'nomore';
342   - } else {
343   - this.loading = 'loadmore';
344   - }
345   - },
346   -
347   - handelClick(values) {
348   - console.log(values);
349   - this.planId = values.id;
350   - },
351   -
352   - handelChange(e) {
353   - console.log(e)
354   - this.checkboxValue = e ? ['待审核'] : [];
355   - this.search.status = e ? 'wait' : 'wait,pass,reject';
356   -
357   - },
358   -
359   - handelCancel() {
360   - this.switchValue = false;
361   - this.planId = '';
362   - },
363   -
364   - hancelSubmit() {
365   - this.finished = false;
366   - this.loading = "loadmore";
367   - this.page = 0;
368   - this.list = [];
369   - this._getList();
370   -
371   - this.show = false;
372   - },
373   -
374   - workSearch() {
375   - uni.hideKeyboard();
376   - this.works = []
377   - this.worksloadData()
378   - },
379   -
380   - lower() {
381   - setTimeout(() => {
382   - this.worksloadData(true);
383   - }, 200)
384   - },
385   -
386   - worksloadData(e) {
387   - let params = {}
388   - // this.loading = 'loading'
389   -
390   - if (e) {
391   - if (this.total <= this.works.length) {
392   - // this.loading = 'nomore'
393   - return
394   - }
395   - this.workspage++
396   - } else {
397   - this.workspage = 1
398   - }
399   - params['pageNumber'] = this.workspage
400   - if (this.sxsearch) {
401   - params['keyWord'] = this.sxsearch
402   - }
403   - getPlanListApi(params).then(async res => {
404   - if (res) {
405   - this.total = res.total
406   - // this.loading = 'loadmore'
407   - this.works = this.works.concat(res.records)
408   - }
409   - })
410   - },
411   - popupSelItem(item) {
412   - this.show = false
413   - this.planId = item.id;
414   - this.finished = false;
415   - this.loading = "loadmore";
416   - this.page = 0;
417   - this.list = [];
418   - this._getList();
419   - },
420   - }
421   - }
  317 + searchCli() {
  318 + this.$u.route(
  319 + "/pages/main/home/search/search?type=reg&searchkey=" + this.keyword
  320 + );
  321 + },
  322 +
  323 + sectionChange(index) {
  324 + this.curNow = index;
  325 +
  326 + this.finished = false;
  327 + this.loading = "loadmore";
  328 + this.page = 0;
  329 + this.list = [];
  330 + this._getList();
  331 + },
  332 +
  333 + handelDetail(record) {
  334 + this.$u.route({
  335 + url: `pages/main/home/registrationDetail/registrationDetail?&id=${record.id}`,
  336 + });
  337 + },
  338 +
  339 + timeFormat(timestamp, format = "yyyy-mm-dd") {
  340 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : "--";
  341 + },
  342 +
  343 + checkboxChange(n) {
  344 + console.log("change", n);
  345 +
  346 + this.search.status = n.length > 0 ? "wait" : "wait,pass,reject";
  347 +
  348 + this.switchValue = n.length > 0 ? true : false;
  349 +
  350 + this.finished = false;
  351 + this.loading = "loadmore";
  352 + this.page = 0;
  353 + this.list = [];
  354 + this._getList();
  355 + },
  356 +
  357 + handelSearch(value) {
  358 + this.finished = false;
  359 + this.loading = "loadmore";
  360 + this.page = 0;
  361 + this.list = [];
  362 + this._getList();
  363 + },
  364 +
  365 + open() {
  366 + // console.log('open');
  367 + },
  368 + close() {
  369 + this.show = false;
  370 + // console.log('close');
  371 + },
  372 + // scroll-view到底部加载更多
  373 + onreachBottom() {},
  374 + // 搜索
  375 + searchSubmit() {
  376 + // 调用混合搜索
  377 + this._searchData();
  378 + },
  379 + // 模拟后端分页
  380 + async getData(requestParams) {
  381 + const { search = {} } = requestParams;
  382 +
  383 + let params = {};
  384 + params.pageNumber = requestParams.page + 1;
  385 + params.pageSize = 5;
  386 +
  387 + // if (search.status) {
  388 + // params.status = search.status;
  389 + // }
  390 +
  391 + if (this.curNow == 0) {
  392 + params.status = "wait";
  393 + } else {
  394 + params.status = "wait,pass,reject";
  395 + }
  396 +
  397 + if (this.keyword) {
  398 + params.keySearch = this.keyword;
  399 + }
  400 +
  401 + if (this.planId) {
  402 + params.planId = this.planId;
  403 + }
  404 +
  405 + return await getRegistrationReviewApi(params);
  406 + },
  407 + // 数据请求(没错就是这么少的代码)
  408 + async _getList() {
  409 + if (this.page == 0) {
  410 + this.list = [];
  411 + }
  412 +
  413 + // 根据实际情况修改自己修改key
  414 + let result = await this.getData({
  415 + page: this.page, // 传入页码
  416 + size: this.size, // 传入每页条数
  417 + search: this.search, // 传入搜索的对象
  418 + });
  419 +
  420 + this.total = result.total;
  421 +
  422 + if (this.list.length == 0 && result.records.length == 0) {
  423 + this.shownoData = false;
  424 + } else {
  425 + this.shownoData = true;
  426 + }
  427 +
  428 + this.list = this.list.concat(result.records);
  429 +
  430 + // 判断是否全部加载完成
  431 + if (this.total == this.list.length) {
  432 + this.finished = true;
  433 + this.loading = "nomore";
  434 + } else {
  435 + this.loading = "loadmore";
  436 + }
  437 + },
  438 +
  439 + handelClick(values) {
  440 + console.log(values);
  441 + this.planId = values.id;
  442 + },
  443 +
  444 + handelChange(e) {
  445 + console.log(e);
  446 + this.checkboxValue = e ? ["待审核"] : [];
  447 + this.search.status = e ? "wait" : "wait,pass,reject";
  448 + },
  449 +
  450 + handelCancel() {
  451 + this.switchValue = false;
  452 + this.planId = "";
  453 + },
  454 +
  455 + hancelSubmit() {
  456 + this.finished = false;
  457 + this.loading = "loadmore";
  458 + this.page = 0;
  459 + this.list = [];
  460 + this._getList();
  461 +
  462 + this.show = false;
  463 + },
  464 +
  465 + workSearch() {
  466 + uni.hideKeyboard();
  467 + this.works = [];
  468 + this.worksloadData();
  469 + },
  470 +
  471 + lower() {
  472 + setTimeout(() => {
  473 + this.worksloadData(true);
  474 + }, 200);
  475 + },
  476 +
  477 + worksloadData(e) {
  478 + let params = {};
  479 + // this.loading = 'loading'
  480 +
  481 + if (e) {
  482 + if (this.total <= this.works.length) {
  483 + // this.loading = 'nomore'
  484 + return;
  485 + }
  486 + this.workspage++;
  487 + } else {
  488 + this.workspage = 1;
  489 + }
  490 + params["pageNumber"] = this.workspage;
  491 + if (this.sxsearch) {
  492 + params["keyWord"] = this.sxsearch;
  493 + }
  494 + getPlanListApi(params).then(async (res) => {
  495 + if (res) {
  496 + this.total = res.total;
  497 + // this.loading = 'loadmore'
  498 + this.works = this.works.concat(res.records);
  499 + }
  500 + });
  501 + },
  502 + popupSelItem(item) {
  503 + this.show = false;
  504 + this.planId = item.id;
  505 + this.finished = false;
  506 + this.loading = "loadmore";
  507 + this.page = 0;
  508 + this.list = [];
  509 + this._getList();
  510 + },
  511 + },
  512 +};
422 513 </script>
423 514
424 515 <style lang="scss" scoped>
425   - .registration_review {
426   - width: 100%;
427   - min-height: 100%;
428   - height: auto;
429   - background-color: #F7F7F7;
430   -
431   - .search_box {
432   - padding: 36rpx 30rpx 12rpx;
433   - background-color: #FFFFFF;
  516 +.registration_review {
  517 + width: 100%;
  518 + min-height: 100%;
  519 + height: auto;
  520 + background-color: #f7f7f7;
  521 +
  522 + .link_page {
  523 + background: rgba(244, 154, 35, 0.06);
  524 + display: flex;
  525 + align-items: center;
  526 + justify-content: space-between;
  527 + padding: 16rpx 26rpx;
  528 +
  529 + .left {
434 530 display: flex;
435   - flex-flow: row nowrap;
436   - justify-content: space-between;
437   -
438   - .check {
439   - padding: 20rpx 0 0 0;
440   - }
441   -
442   - .search {
443   - width: 468rpx;
  531 + align-items: center;
  532 +
  533 + text {
  534 + font-size: 24rpx;
  535 + font-weight: 400;
  536 + color: #f49a23;
  537 + line-height: 32rpx;
  538 + margin-left: 16rpx;
444 539 }
445 540 }
446 541
447   - .list_box {
448   - padding: 0 0 50rpx 0;
449   -
450   - .item {
451   - position: relative;
452   - width: 630rpx;
453   - margin: 30rpx auto;
454   - padding: 30rpx;
455   - border-radius: 12rpx;
456   - background-color: #FFFFFF;
457   -
458   - .bg_image {
459   - position: absolute;
460   - top: 0;
461   - right: 0;
462   -
463   - text {
464   - position: absolute;
465   - top: 12rpx;
466   - right: 30rpx;
467   - font-size: 24rpx;
468   - line-height: 24rpx;
469   - color: #FFFFFF;
470   - }
471   - }
472   -
473   - .name {
474   - font-size: 32rpx;
475   - line-height: 44rpx;
476   - color: #202131;
477   - font-weight: 500;
478   - margin: 0 0 30rpx 0;
479   - }
480   -
481   - .company {
482   - display: flex;
483   - flex-flow: row nowrap;
484   - margin: 0 0 30rpx 0;
485   -
486   - text {
487   - font-size: 28rpx;
488   - line-height: 32rpx;
489   - color: #909097;
490   - margin: 0 0 0 16rpx;
491   - }
492   -
493   - text:last-child {
494   - color: #202131;
495   - margin: 0 0 0 30rpx;
496   - }
497   - }
498   -
499   - .time {
500   - border-top: 2rpx solid #E2E2E8;
501   - padding: 28rpx 0 0 0;
502   -
503   - text {
504   - font-size: 28rpx;
505   - line-height: 32rpx;
506   - color: #909097;
507   - }
508   -
509   - text:last-child {
510   - color: #202131;
511   - margin: 0 0 0 78rpx;
512   - }
513   - }
514   - }
515   - }
516   -
517   - .popup_search {
518   - width: 640rpx;
519   - position: relative;
520   -
521   - .content {
522   - padding: 0 40rpx;
523   -
524   - .title {
525   - padding: 24rpx 0;
526   - font-size: 28rpx;
527   - line-height: 36rpx;
528   - color: #202131;
529   - }
530   -
531   - .scroll {
532   - max-height: 60vh;
533   -
534   - .item {
535   -
536   - view {
537   - display: flex;
538   - flex-flow: row wrap;
539   - align-items: center;
540   - width: 500rpx;
541   - height: 74rpx;
542   - border-radius: 4rpx;
543   - border: 2rpx solid #C1C1C9;
544   - margin: 0 10rpx 20rpx;
545   - font-size: 24rpx;
546   - line-height: 32rpx;
547   - color: #C0C0C9;
548   - padding: 16rpx 20rpx;
549   - }
550   -
551   - .selectItem {
552   - background-color: var(--primary-color);
553   - color: #FFFFFF;
554   - border: 2rpx solid var(--primary-color);
555   - }
556   - }
557   - }
558   -
559   - .switch {
560   - display: flex;
561   - flex-flow: row nowrap;
562   - justify-content: space-between;
563   - padding: 40rpx 0 0 0;
564   -
565   - text {
566   - font-size: 28rpx;
567   - line-height: 36rpx;
568   - color: #202131;
569   - }
570   - }
571   -
572   -
573   - }
574   -
575   - .footer {
576   - width: 560rpx;
577   - height: 96rpx;
578   - padding: 28rpx 40rpx;
579   - background: #FFFFFF;
580   - position: fixed;
581   - bottom: 0;
582   - right: 0;
583   - z-index: 99;
584   - border-top: 2rpx solid #E2E2E8;
585   -
586   - view {
587   - display: inline-block;
588   - }
589   -
590   - .left_btn {
591   - width: 194rpx;
592   - margin: 0 20rpx 0 0;
593   - }
594   -
595   - .right_btn {
596   - width: 346rpx;
597   - }
598   - }
599   - }
600   -
601   - .popup {
602   - height: 500px;
603   - padding: 19px 16px;
604   -
605   - .title {
606   - font-size: 18px;
607   - font-family: PingFangSC-Medium, PingFang SC;
608   - font-weight: 500;
609   - color: #000000;
610   - }
611   -
612   - .close {
613   - width: 22px;
614   - height: 22px;
615   - }
616   -
617   - .item_box {
618   - border-radius: 4px;
619   - margin: 0 0 48rpx;
620   -
621   - .item_title {
622   - height: 20px;
623   - font-size: 14px;
624   - font-family: PingFangSC-Regular, PingFang SC;
625   - font-weight: 400;
626   - color: rgba(0, 0, 0, 0.65);
627   - line-height: 20px;
628   - }
629   -
630   - }
631   -
632   - .no_data {
633   - width: 100%;
634   - margin-top: 310rpx;
635   -
636   - .text_black_28 {
637   - font-size: 14px;
638   - font-family: PingFangSC-Light, PingFang SC;
639   - font-weight: 300;
640   - color: rgba(0, 0, 0, 0.65);
641   - text-align: center;
642   - }
643   -
644   - }
645   -
646   - }
647   - }
  542 +
  543 + }
  544 +
  545 + .search_box {
  546 + padding: 36rpx 30rpx 12rpx;
  547 + background-color: #ffffff;
  548 + display: flex;
  549 + flex-flow: row nowrap;
  550 + justify-content: space-between;
  551 +
  552 + .check {
  553 + padding: 20rpx 0 0 0;
  554 + }
  555 +
  556 + .search {
  557 + width: 468rpx;
  558 + }
  559 + }
  560 +
  561 + .list_box {
  562 + padding: 0 0 50rpx 0;
  563 +
  564 + .item {
  565 + position: relative;
  566 + width: 630rpx;
  567 + margin: 30rpx auto;
  568 + padding: 30rpx;
  569 + border-radius: 12rpx;
  570 + background-color: #ffffff;
  571 +
  572 + .bg_image {
  573 + position: absolute;
  574 + top: 0;
  575 + right: 0;
  576 +
  577 + text {
  578 + position: absolute;
  579 + top: 12rpx;
  580 + right: 30rpx;
  581 + font-size: 24rpx;
  582 + line-height: 24rpx;
  583 + color: #ffffff;
  584 + }
  585 + }
  586 +
  587 + .name {
  588 + font-size: 32rpx;
  589 + line-height: 44rpx;
  590 + color: #202131;
  591 + font-weight: 500;
  592 + margin: 0 0 30rpx 0;
  593 + }
  594 +
  595 + .company {
  596 + display: flex;
  597 + flex-flow: row nowrap;
  598 + margin: 0 0 30rpx 0;
  599 +
  600 + text {
  601 + font-size: 28rpx;
  602 + line-height: 32rpx;
  603 + color: #909097;
  604 + margin: 0 0 0 16rpx;
  605 + }
  606 +
  607 + text:last-child {
  608 + color: #202131;
  609 + margin: 0 0 0 30rpx;
  610 + }
  611 + }
  612 +
  613 + .time {
  614 + border-top: 2rpx solid #e2e2e8;
  615 + padding: 28rpx 0 0 0;
  616 +
  617 + text {
  618 + font-size: 28rpx;
  619 + line-height: 32rpx;
  620 + color: #909097;
  621 + }
  622 +
  623 + text:last-child {
  624 + color: #202131;
  625 + margin: 0 0 0 78rpx;
  626 + }
  627 + }
  628 + }
  629 + }
  630 +
  631 + .popup_search {
  632 + width: 640rpx;
  633 + position: relative;
  634 +
  635 + .content {
  636 + padding: 0 40rpx;
  637 +
  638 + .title {
  639 + padding: 24rpx 0;
  640 + font-size: 28rpx;
  641 + line-height: 36rpx;
  642 + color: #202131;
  643 + }
  644 +
  645 + .scroll {
  646 + max-height: 60vh;
  647 +
  648 + .item {
  649 + view {
  650 + display: flex;
  651 + flex-flow: row wrap;
  652 + align-items: center;
  653 + width: 500rpx;
  654 + height: 74rpx;
  655 + border-radius: 4rpx;
  656 + border: 2rpx solid #c1c1c9;
  657 + margin: 0 10rpx 20rpx;
  658 + font-size: 24rpx;
  659 + line-height: 32rpx;
  660 + color: #c0c0c9;
  661 + padding: 16rpx 20rpx;
  662 + }
  663 +
  664 + .selectItem {
  665 + background-color: var(--primary-color);
  666 + color: #ffffff;
  667 + border: 2rpx solid var(--primary-color);
  668 + }
  669 + }
  670 + }
  671 +
  672 + .switch {
  673 + display: flex;
  674 + flex-flow: row nowrap;
  675 + justify-content: space-between;
  676 + padding: 40rpx 0 0 0;
  677 +
  678 + text {
  679 + font-size: 28rpx;
  680 + line-height: 36rpx;
  681 + color: #202131;
  682 + }
  683 + }
  684 + }
  685 +
  686 + .footer {
  687 + width: 560rpx;
  688 + height: 96rpx;
  689 + padding: 28rpx 40rpx;
  690 + background: #ffffff;
  691 + position: fixed;
  692 + bottom: 0;
  693 + right: 0;
  694 + z-index: 99;
  695 + border-top: 2rpx solid #e2e2e8;
  696 +
  697 + view {
  698 + display: inline-block;
  699 + }
  700 +
  701 + .left_btn {
  702 + width: 194rpx;
  703 + margin: 0 20rpx 0 0;
  704 + }
  705 +
  706 + .right_btn {
  707 + width: 346rpx;
  708 + }
  709 + }
  710 + }
  711 +
  712 + .popup {
  713 + height: 500px;
  714 + padding: 19px 16px;
  715 +
  716 + .title {
  717 + font-size: 18px;
  718 + font-family: PingFangSC-Medium, PingFang SC;
  719 + font-weight: 500;
  720 + color: #000000;
  721 + }
  722 +
  723 + .close {
  724 + width: 22px;
  725 + height: 22px;
  726 + }
  727 +
  728 + .item_box {
  729 + border-radius: 4px;
  730 + margin: 0 0 48rpx;
  731 +
  732 + .item_title {
  733 + height: 20px;
  734 + font-size: 14px;
  735 + font-family: PingFangSC-Regular, PingFang SC;
  736 + font-weight: 400;
  737 + color: rgba(0, 0, 0, 0.65);
  738 + line-height: 20px;
  739 + }
  740 + }
  741 +
  742 + .no_data {
  743 + width: 100%;
  744 + margin-top: 310rpx;
  745 +
  746 + .text_black_28 {
  747 + font-size: 14px;
  748 + font-family: PingFangSC-Light, PingFang SC;
  749 + font-weight: 300;
  750 + color: rgba(0, 0, 0, 0.65);
  751 + text-align: center;
  752 + }
  753 + }
  754 + }
  755 +}
648 756 </style>
... ...
  1 +<template>
  2 + <view class="registration_review" :style="vuex_theme">
  3 + <view class="list_box" v-if="list.length > 0">
  4 + <view class="item" v-for="(item, i) in list" :key="i">
  5 + <view class="info">
  6 + <view class="name">{{ item.studentName }}</view>
  7 + <view class="number">(学号:{{ item.studentNumber || "--" }})</view>
  8 + </view>
  9 + </view>
  10 + <c-loading :loading="loading"></c-loading>
  11 + </view>
  12 + <view v-else class="no_data">
  13 + <c-no-data></c-no-data>
  14 + </view>
  15 +
  16 + </view>
  17 +</template>
  18 +
  19 +<script>
  20 +import { mapGetters, mapState, mapActions } from "vuex";
  21 +import listMixin from "@/common/mixins/list-mixin.js";
  22 +
  23 +import { getRegistrationReviewApi, getPlanListApi } from "@/config/api.js";
  24 +
  25 +export default {
  26 + mixins: [listMixin],
  27 + data() {
  28 + return {
  29 + checkboxValue: [],
  30 + // 基本案列数据
  31 + checkboxList: [
  32 + {
  33 + name: "待审核",
  34 + disabled: false,
  35 + },
  36 + ],
  37 + keyword: "",
  38 + show: false,
  39 + list: [], //列表必须为key list的数组
  40 + search: {
  41 + //搜索对象必须为key search的对象
  42 + keySearch: "",
  43 + status: "wait,pass,reject",
  44 + },
  45 + planId: "",
  46 + switchValue: false,
  47 + curNow: 0,
  48 + sxsearch: "",
  49 + works: [],
  50 + workspage: 1,
  51 + workstotal: 0,
  52 + };
  53 + },
  54 +
  55 + // onLoad(option) {
  56 + // console.log(option);
  57 + // // this.$store.dispatch(`home/getProjectList`, {
  58 + // // pageSize: -1,
  59 + // // })
  60 +
  61 + // // this.search.keySearch = '';
  62 +
  63 + // this.worksloadData();
  64 +
  65 + // if (option && option.status) {
  66 + // // this.search.status = 'wait';
  67 + // // this.checkboxValue = ['待审核'];
  68 + // // this.switchValue = true;
  69 + // this.curNow = 0;
  70 + // }
  71 +
  72 + // // this.finished = false;
  73 + // // this.loading = "loadmore";
  74 + // // this.page = 0;
  75 + // // this.list = [];
  76 + // },
  77 +
  78 + onShow() {
  79 + this.finished = false;
  80 + this.loading = "loadmore";
  81 + this.page = 0;
  82 + this.list = [];
  83 + this._getList();
  84 + },
  85 +
  86 + computed: {
  87 + ...mapState("home", {
  88 + // 箭头函数可使代码更简练
  89 + projectList: "projectList",
  90 + }),
  91 + },
  92 +
  93 + methods: {
  94 + searchCli() {
  95 + this.$u.route(
  96 + "/pages/main/home/search/search?type=reg&searchkey=" + this.keyword
  97 + );
  98 + },
  99 +
  100 + sectionChange(index) {
  101 + this.curNow = index;
  102 +
  103 + this.finished = false;
  104 + this.loading = "loadmore";
  105 + this.page = 0;
  106 + this.list = [];
  107 + this._getList();
  108 + },
  109 +
  110 + handelDetail(record) {
  111 + this.$u.route({
  112 + url: `pages/main/home/registrationDetail/registrationDetail?&id=${record.id}`,
  113 + });
  114 + },
  115 +
  116 + timeFormat(timestamp, format = "yyyy-mm-dd") {
  117 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : "--";
  118 + },
  119 +
  120 + checkboxChange(n) {
  121 + console.log("change", n);
  122 +
  123 + this.search.status = n.length > 0 ? "wait" : "wait,pass,reject";
  124 +
  125 + this.switchValue = n.length > 0 ? true : false;
  126 +
  127 + this.finished = false;
  128 + this.loading = "loadmore";
  129 + this.page = 0;
  130 + this.list = [];
  131 + this._getList();
  132 + },
  133 +
  134 + handelSearch(value) {
  135 + this.finished = false;
  136 + this.loading = "loadmore";
  137 + this.page = 0;
  138 + this.list = [];
  139 + this._getList();
  140 + },
  141 +
  142 + open() {
  143 + // console.log('open');
  144 + },
  145 + close() {
  146 + this.show = false;
  147 + // console.log('close');
  148 + },
  149 + // scroll-view到底部加载更多
  150 + onreachBottom() {},
  151 + // 搜索
  152 + searchSubmit() {
  153 + // 调用混合搜索
  154 + this._searchData();
  155 + },
  156 + // 模拟后端分页
  157 + async getData(requestParams) {
  158 + const { search = {} } = requestParams;
  159 +
  160 + let params = {};
  161 + params.pageNumber = requestParams.page + 1;
  162 + params.pageSize = 5;
  163 +
  164 + // if (search.status) {
  165 + // params.status = search.status;
  166 + // }
  167 +
  168 + if (this.curNow == 0) {
  169 + params.status = "apply";
  170 + } else {
  171 + params.status = "wait,pass,reject";
  172 + }
  173 +
  174 + if (this.keyword) {
  175 + params.keySearch = this.keyword;
  176 + }
  177 +
  178 + if (this.planId) {
  179 + params.planId = this.planId;
  180 + }
  181 +
  182 + return await getRegistrationReviewApi(params);
  183 + },
  184 + // 数据请求(没错就是这么少的代码)
  185 + async _getList() {
  186 + if (this.page == 0) {
  187 + this.list = [];
  188 + }
  189 +
  190 + // 根据实际情况修改自己修改key
  191 + let result = await this.getData({
  192 + page: this.page, // 传入页码
  193 + size: this.size, // 传入每页条数
  194 + search: this.search, // 传入搜索的对象
  195 + });
  196 +
  197 + this.total = result.total;
  198 +
  199 + if (this.list.length == 0 && result.records.length == 0) {
  200 + this.shownoData = false;
  201 + } else {
  202 + this.shownoData = true;
  203 + }
  204 +
  205 + this.list = this.list.concat(result.records);
  206 +
  207 + // 判断是否全部加载完成
  208 + if (this.total == this.list.length) {
  209 + this.finished = true;
  210 + this.loading = "nomore";
  211 + } else {
  212 + this.loading = "loadmore";
  213 + }
  214 + },
  215 +
  216 + handelClick(values) {
  217 + console.log(values);
  218 + this.planId = values.id;
  219 + },
  220 +
  221 + handelChange(e) {
  222 + console.log(e);
  223 + this.checkboxValue = e ? ["待审核"] : [];
  224 + this.search.status = e ? "wait" : "wait,pass,reject";
  225 + },
  226 +
  227 + handelCancel() {
  228 + this.switchValue = false;
  229 + this.planId = "";
  230 + },
  231 +
  232 + hancelSubmit() {
  233 + this.finished = false;
  234 + this.loading = "loadmore";
  235 + this.page = 0;
  236 + this.list = [];
  237 + this._getList();
  238 +
  239 + this.show = false;
  240 + },
  241 +
  242 + workSearch() {
  243 + uni.hideKeyboard();
  244 + this.works = [];
  245 + this.worksloadData();
  246 + },
  247 +
  248 + lower() {
  249 + setTimeout(() => {
  250 + this.worksloadData(true);
  251 + }, 200);
  252 + },
  253 +
  254 + worksloadData(e) {
  255 + let params = {};
  256 + // this.loading = 'loading'
  257 +
  258 + if (e) {
  259 + if (this.total <= this.works.length) {
  260 + // this.loading = 'nomore'
  261 + return;
  262 + }
  263 + this.workspage++;
  264 + } else {
  265 + this.workspage = 1;
  266 + }
  267 + params["pageNumber"] = this.workspage;
  268 + if (this.sxsearch) {
  269 + params["keyWord"] = this.sxsearch;
  270 + }
  271 + getPlanListApi(params).then(async (res) => {
  272 + if (res) {
  273 + this.total = res.total;
  274 + // this.loading = 'loadmore'
  275 + this.works = this.works.concat(res.records);
  276 + }
  277 + });
  278 + },
  279 + popupSelItem(item) {
  280 + this.show = false;
  281 + this.planId = item.id;
  282 + this.finished = false;
  283 + this.loading = "loadmore";
  284 + this.page = 0;
  285 + this.list = [];
  286 + this._getList();
  287 + },
  288 + },
  289 +};
  290 +</script>
  291 +
  292 +<style lang="scss" scoped>
  293 +.registration_review {
  294 + width: 100%;
  295 + min-height: 100%;
  296 + height: auto;
  297 + background-color: #f7f7f7;
  298 +
  299 + .link_page {
  300 + background: rgba(244, 154, 35, 0.06);
  301 + display: flex;
  302 + align-items: center;
  303 + justify-content: space-between;
  304 + padding: 16rpx 26rpx;
  305 +
  306 + .left {
  307 + display: flex;
  308 + align-items: center;
  309 +
  310 + text {
  311 + font-size: 24rpx;
  312 + font-weight: 400;
  313 + color: #f49a23;
  314 + line-height: 32rpx;
  315 + margin-left: 16rpx;
  316 + }
  317 + }
  318 + }
  319 +
  320 + .search_box {
  321 + padding: 36rpx 30rpx 12rpx;
  322 + background-color: #ffffff;
  323 + display: flex;
  324 + flex-flow: row nowrap;
  325 + justify-content: space-between;
  326 +
  327 + .check {
  328 + padding: 20rpx 0 0 0;
  329 + }
  330 +
  331 + .search {
  332 + width: 468rpx;
  333 + }
  334 + }
  335 +
  336 + .list_box {
  337 + padding: 0 0 50rpx 0;
  338 + overflow: hidden;
  339 +
  340 + .item {
  341 + position: relative;
  342 + margin: 30rpx 30rpx 16rpx;
  343 + padding: 30rpx;
  344 + border-radius: 12rpx;
  345 + background-color: #ffffff;
  346 +
  347 + .bg_image {
  348 + position: absolute;
  349 + top: 0;
  350 + right: 0;
  351 +
  352 + text {
  353 + position: absolute;
  354 + top: 12rpx;
  355 + right: 30rpx;
  356 + font-size: 24rpx;
  357 + line-height: 24rpx;
  358 + color: #ffffff;
  359 + }
  360 + }
  361 +
  362 + .info {
  363 + display: flex;
  364 + flex-flow: row nowrap;
  365 + align-items: center;
  366 +
  367 + .avatar {
  368 + width: 78rpx;
  369 + height: 94rpx;
  370 + padding: 0 8rpx;
  371 + border-radius: 4rpx;
  372 + background-color: var(--primary-color);
  373 + font-size: 24rpx;
  374 + line-height: 94rpx;
  375 + color: #ffffff;
  376 + text-align: center;
  377 + }
  378 +
  379 + .name {
  380 + font-size: 32rpx;
  381 + line-height: 44rpx;
  382 + color: #202131;
  383 + font-weight: 500;
  384 + margin-right: 12rpx;
  385 + }
  386 +
  387 + .number {
  388 + font-size: 28rpx;
  389 + line-height: 32rpx;
  390 + color: #909097;
  391 + }
  392 + }
  393 +
  394 + .company {
  395 + display: flex;
  396 + flex-flow: row nowrap;
  397 + // margin: 0 0 30rpx 0;
  398 +
  399 + text {
  400 + font-size: 28rpx;
  401 + line-height: 32rpx;
  402 + color: #909097;
  403 + // margin: 0 0 0 16rpx;
  404 + }
  405 +
  406 + text:last-child {
  407 + color: #202131;
  408 + flex: 1;
  409 + }
  410 + }
  411 +
  412 + .time {
  413 + border-top: 2rpx solid #e2e2e8;
  414 + padding: 28rpx 0 0 0;
  415 +
  416 + text {
  417 + font-size: 28rpx;
  418 + line-height: 32rpx;
  419 + color: #909097;
  420 + }
  421 +
  422 + text:last-child {
  423 + color: #202131;
  424 + margin: 0 0 0 78rpx;
  425 + }
  426 + }
  427 + }
  428 + }
  429 +
  430 + .popup_search {
  431 + width: 640rpx;
  432 + position: relative;
  433 +
  434 + .content {
  435 + padding: 0 40rpx;
  436 +
  437 + .title {
  438 + padding: 24rpx 0;
  439 + font-size: 28rpx;
  440 + line-height: 36rpx;
  441 + color: #202131;
  442 + }
  443 +
  444 + .scroll {
  445 + max-height: 60vh;
  446 +
  447 + .item {
  448 + view {
  449 + display: flex;
  450 + flex-flow: row wrap;
  451 + align-items: center;
  452 + width: 500rpx;
  453 + height: 74rpx;
  454 + border-radius: 4rpx;
  455 + border: 2rpx solid #c1c1c9;
  456 + margin: 0 10rpx 20rpx;
  457 + font-size: 24rpx;
  458 + line-height: 32rpx;
  459 + color: #c0c0c9;
  460 + padding: 16rpx 20rpx;
  461 + }
  462 +
  463 + .selectItem {
  464 + background-color: var(--primary-color);
  465 + color: #ffffff;
  466 + border: 2rpx solid var(--primary-color);
  467 + }
  468 + }
  469 + }
  470 +
  471 + .switch {
  472 + display: flex;
  473 + flex-flow: row nowrap;
  474 + justify-content: space-between;
  475 + padding: 40rpx 0 0 0;
  476 +
  477 + text {
  478 + font-size: 28rpx;
  479 + line-height: 36rpx;
  480 + color: #202131;
  481 + }
  482 + }
  483 + }
  484 +
  485 + .footer {
  486 + width: 560rpx;
  487 + height: 96rpx;
  488 + padding: 28rpx 40rpx;
  489 + background: #ffffff;
  490 + position: fixed;
  491 + bottom: 0;
  492 + right: 0;
  493 + z-index: 99;
  494 + border-top: 2rpx solid #e2e2e8;
  495 +
  496 + view {
  497 + display: inline-block;
  498 + }
  499 +
  500 + .left_btn {
  501 + width: 194rpx;
  502 + margin: 0 20rpx 0 0;
  503 + }
  504 +
  505 + .right_btn {
  506 + width: 346rpx;
  507 + }
  508 + }
  509 + }
  510 +
  511 + .popup {
  512 + height: 500px;
  513 + padding: 19px 16px;
  514 +
  515 + .title {
  516 + font-size: 18px;
  517 + font-family: PingFangSC-Medium, PingFang SC;
  518 + font-weight: 500;
  519 + color: #000000;
  520 + }
  521 +
  522 + .close {
  523 + width: 22px;
  524 + height: 22px;
  525 + }
  526 +
  527 + .item_box {
  528 + border-radius: 4px;
  529 + margin: 0 0 48rpx;
  530 +
  531 + .item_title {
  532 + height: 20px;
  533 + font-size: 14px;
  534 + font-family: PingFangSC-Regular, PingFang SC;
  535 + font-weight: 400;
  536 + color: rgba(0, 0, 0, 0.65);
  537 + line-height: 20px;
  538 + }
  539 + }
  540 +
  541 + .no_data {
  542 + width: 100%;
  543 + margin-top: 310rpx;
  544 +
  545 + .text_black_28 {
  546 + font-size: 14px;
  547 + font-family: PingFangSC-Light, PingFang SC;
  548 + font-weight: 300;
  549 + color: rgba(0, 0, 0, 0.65);
  550 + text-align: center;
  551 + }
  552 + }
  553 + }
  554 +}
  555 +</style>
... ...
1 1 <template>
2   - <view class="registration_review" :style="vuex_theme">
3   -
4   - <view class="search_box">
5   - <view style="width: 148px;">
6   - <u-subsection :list="['未签到','全部']" :current="curNow" :fontSize="26" :activeColor="'#000'"
7   - @change="sectionChange"></u-subsection>
8   - </view>
9   - <view style="display: flex; justify-content: space-between; align-items: center;">
10   - <u-icon slot="icon" size="40" :name="'/static/img/home/dateIcon.png'" @click="showTime = true"></u-icon>
11   - <view style="width: 16px;"></view>
12   - <u-icon slot="icon" size="40" :name="'/static/img/home/search.png'" @click="searchCli"></u-icon>
13   - <view style="width: 16px;"></view>
14   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
15   - </view>
16   - </view>
17   -
18   - <u-calendar :minDate="minDate" :maxDate="maxDate" :monthNum="25" :show="showTime" :defaultDate="defaultDateMultiple"
19   - @close="showTime = false" :showSubtitle="false" color="var(--primary-color)" @confirm="confirm">
20   - </u-calendar>
21   -
22   - <view class="list_box" v-if="list.length > 0">
23   - <view class="item" v-for="(item, i) in list" :key="i">
24   -
25   - <view class="bg_image" v-if="item.waitAttendance == 'not_attendance'">
26   - <u-image :src="vuex_baseImgUrl && `${vuex_baseImgUrl}labelBgGreen.png`" width="142rpx" height="48rpx"></u-image>
27   - <text>未签到</text>
28   - </view>
29   -
30   - <view class="bg_image" v-else>
31   - <u-image src="/static/img/home/labelBgGrey.png" width="142rpx" height="48rpx"></u-image>
32   - <text>已签到</text>
33   - </view>
34   -
35   - <view class="info">
36   - <view class="avatar">{{getNameLastTwo(item.studentName)}}</view>
37   - <view class="name">{{overflowHide(item.studentName)}}</view>
38   - <view class="number">{{item.studentNumber}}</view>
39   - </view>
40   - <view class="company">
41   - <text>实习计划</text>
42   - <text>{{item.planName || '--'}}</text>
43   - </view>
44   - <view class="company">
45   - <text>班级</text>
46   - <text>{{item.className || '--'}}</text>
47   - </view>
48   - <view class="company position">
49   - <text>手机号</text>
50   - <text>{{item.studentPhone|| '--'}}</text>
51   - </view>
52   -
53   - <view class="time">
54   - <text>签到时间</text>
55   - <text>{{timeFormat(item.signIn, 'yyyy-mm-dd hh:MM')}}</text>
56   - </view>
57   -
58   - </view>
59   - <c-loading :loading="loading"></c-loading>
60   - </view>
61   - <view v-else class="no_data">
62   - <c-no-data></c-no-data>
63   - </view>
64   -
65   - <u-popup :show="show" mode="bottom" @close="close" :round="22">
66   - <view class="popup">
67   - <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
68   - <view class="title">
69   - 计划筛选
70   - </view>
71   - <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
72   - </view>
73   - <view class="search">
74   - <u-search placeholder="请输入计划关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
75   - bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
76   - </u-search>
77   - </view>
78   - <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
79   - @scrolltolower="lower()">
80   - <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
81   - <view style="display: flex; align-items: center; justify-content: space-between;">
82   - <view class="item_title">
83   - {{item.name}}
84   - </view>
85   - <image v-if="item.id == planId" style="width: 20px; height: 20px;"
86   - :src="vuex_baseImgUrl && `${vuex_baseImgUrl}popselect.png`" mode=""></image>
87   - </view>
88   - </view>
89   - </scroll-view>
90   - <view v-else class="no_data" @click="jumpVerified">
91   - <view class="text_black_28">
92   - 暂未搜索到该计划
93   - </view>
94   - </view>
95   - </view>
96   - </u-popup>
97   -
98   - <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  2 + <view class="registration_review" :style="vuex_theme">
  3 + <view class="search_box">
  4 + <view style="width: 148px">
  5 + <u-subsection
  6 + :list="['未签到', '全部']"
  7 + :current="curNow"
  8 + :fontSize="26"
  9 + :activeColor="'#000'"
  10 + @change="sectionChange"
  11 + ></u-subsection>
  12 + </view>
  13 + <view
  14 + style="
  15 + display: flex;
  16 + justify-content: space-between;
  17 + align-items: center;
  18 + "
  19 + >
  20 + <u-icon
  21 + slot="icon"
  22 + size="40"
  23 + :name="'/static/img/home/dateIcon.png'"
  24 + @click="showTime = true"
  25 + ></u-icon>
  26 + <view style="width: 16px"></view>
  27 + <u-icon
  28 + slot="icon"
  29 + size="40"
  30 + :name="'/static/img/home/search.png'"
  31 + @click="searchCli"
  32 + ></u-icon>
  33 + <view style="width: 16px"></view>
  34 + <u-icon
  35 + slot="icon"
  36 + size="40"
  37 + :name="'/static/img/home/selectIcon.png'"
  38 + @click="show = true"
  39 + ></u-icon>
  40 + </view>
  41 + </view>
  42 +
  43 + <u-calendar
  44 + :minDate="minDate"
  45 + :maxDate="maxDate"
  46 + :monthNum="25"
  47 + :show="showTime"
  48 + :defaultDate="defaultDateMultiple"
  49 + @close="showTime = false"
  50 + :showSubtitle="false"
  51 + color="var(--primary-color)"
  52 + @confirm="confirm"
  53 + >
  54 + </u-calendar>
  55 +
  56 + <view class="list_box" v-if="list.length > 0">
  57 + <view class="item" v-for="(item, i) in list" :key="i">
  58 + <view class="bg_image" v-if="item.waitAttendance == 'not_attendance'">
  59 + <u-image
  60 + src="/static/img/home/labelBgGrey.png"
  61 + width="142rpx"
  62 + height="48rpx"
  63 + ></u-image>
  64 + <text>未签到</text>
  65 + </view>
  66 +
  67 + <view class="bg_image" v-else>
  68 + <u-image
  69 + :src="vuex_baseImgUrl && `${vuex_baseImgUrl}labelBgGreen.png`"
  70 + width="142rpx"
  71 + height="48rpx"
  72 + ></u-image>
  73 + <text>已签到</text>
  74 + </view>
  75 +
  76 + <view class="info">
  77 + <!-- <view class="avatar">{{getNameLastTwo(item.studentName)}}</view> -->
  78 + <view class="name">{{ overflowHide(item.studentName) }}</view>
  79 + <view class="number">(学号:{{ item.studentNumber || "--" }})</view>
  80 + </view>
  81 + <view v-if="item.signIn" style="margin-top: 30rpx;">
  82 + <view class="company">
  83 + <text>签到时间:</text>
  84 + <text>{{
  85 + item.signIn ? timeFormat(item.signIn, "yyyy-mm-dd hh:MM") : "--"
  86 + }}</text>
  87 + </view>
  88 + <view class="company" style="margin-top: 12rpx;">
  89 + <text>签到地点:</text>
  90 + <text>{{ item.location || "--" }}</text>
  91 + </view>
  92 + </view>
  93 + </view>
  94 + <c-loading :loading="loading"></c-loading>
  95 + </view>
  96 + <view v-else class="no_data">
  97 + <c-no-data></c-no-data>
  98 + </view>
  99 +
  100 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  101 + <view class="popup">
  102 + <view
  103 + style="
  104 + display: flex;
  105 + justify-content: space-between;
  106 + align-items: center;
  107 + margin-bottom: 28px;
  108 + "
  109 + >
  110 + <view class="title"> 计划筛选 </view>
  111 + <image
  112 + class="close"
  113 + src="/static/img/home/closepop.png"
  114 + @click="close"
  115 + mode=""
  116 + ></image>
  117 + </view>
  118 + <view class="search">
  119 + <u-search
  120 + placeholder="请输入计划关键词搜索"
  121 + placeholderColor="#C1C1C9"
  122 + searchIconSize="36"
  123 + height="64rpx"
  124 + bgColor="#F4F4F4"
  125 + :showAction="true"
  126 + shape="round"
  127 + v-model="sxsearch"
  128 + @custom="workSearch()"
  129 + @search="workSearch()"
  130 + >
  131 + </u-search>
  132 + </view>
  133 + <scroll-view
  134 + v-if="works.length > 0"
  135 + scroll-y="true"
  136 + style="height: 80%; margin-top: 40rpx"
  137 + @scrolltolower="lower()"
  138 + >
  139 + <view
  140 + class="item_box"
  141 + v-for="(item, index) in works"
  142 + :key="index"
  143 + @click="popupSelItem(item)"
  144 + >
  145 + <view
  146 + style="
  147 + display: flex;
  148 + align-items: center;
  149 + justify-content: space-between;
  150 + "
  151 + >
  152 + <view class="item_title">
  153 + {{ item.name }}
  154 + </view>
  155 + <image
  156 + v-if="item.id == planId"
  157 + style="width: 20px; height: 20px"
  158 + :src="vuex_baseImgUrl && `${vuex_baseImgUrl}popselect.png`"
  159 + mode=""
  160 + ></image>
  161 + </view>
  162 + </view>
  163 + </scroll-view>
  164 + <view v-else class="no_data" @click="jumpVerified">
  165 + <view class="text_black_28"> 暂未搜索到该计划 </view>
  166 + </view>
  167 + </view>
  168 + </u-popup>
  169 +
  170 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
99 171 <view class="popup_search">
100 172 <view class="content">
101 173 <view class="title">按计划筛选</view>
... ... @@ -129,631 +201,600 @@
129 201
130 202 </view>
131 203 </u-popup> -->
132   -
133   - </view>
  204 + </view>
134 205 </template>
135 206
136 207 <script>
137   - import {
138   - mapGetters,
139   - mapState,
140   - mapActions
141   - } from 'vuex'
142   - import listMixin from "@/common/mixins/list-mixin.js";
143   - import miment from 'miment'
144   -
145   - import {
146   - getStudentSignInListApi,
147   - getPlanListApi,
148   - } from '@/config/api.js';
149   -
150   - export default {
151   - mixins: [listMixin],
152   - data() {
153   -
154   - const d = new Date();
155   - const year = d.getFullYear();
156   - let month = d.getMonth() + 1;
157   - month = month < 10 ? `0${month}` : month;
158   - const date = d.getDate();
159   -
160   - return {
161   - checkboxValue: [],
162   - // 基本案列数据
163   - checkboxList: [{
164   - name: '未签到',
165   - disabled: false
166   - }],
167   - keyword: '',
168   - show: false,
169   - search: {
170   - //搜索对象必须为key search的对象
171   - keySearch: "",
172   - waitAttendance: '',
173   - time: '',
174   -
175   - },
176   - showTime: false,
177   - minDate: `${year-2}-${month}-${date+1}`,
178   - maxDate: `${year}-${month}-${date+1}`,
179   - timeValue: `${year}-${month}-${date}`,
180   - defaultDateMultiple: [`${year}-${month}-${date}`],
181   - list: [], //列表必须为key list的数组
182   - planId: '',
183   - switchValue: false,
184   -
185   - curNow: 1,
186   - sxsearch: '',
187   - works: [],
188   - workspage: 1,
189   - workstotal: 0,
190   - }
191   - },
192   -
193   - onLoad(option) {
194   - // this.$store.dispatch(`home/getProjectList`, {
195   - // pageSize: -1,
196   - // })
197   -
198   - // this.search.keySearch = '';
199   -
200   - // this.finished = false;
201   - // this.loading = "loadmore";
202   - // this.page = 0;
203   - // this.list = [];
204   -
205   - this.worksloadData()
206   -
207   - if (option && option.status) {
208   - // this.search.status = 'wait';
209   - this.curNow = 0;
210   - // this.checkboxValue = ['待处理'];
211   - // this.switchValue = true;
212   - }
213   -
214   -
215   - },
216   -
217   - onShow() {
218   - this.finished = false;
219   - this.loading = "loadmore";
220   - this.page = 0;
221   - this.list = [];
222   - this._getList();
223   - },
224   -
225   - computed: {
226   - ...mapState('home', {
227   - // 箭头函数可使代码更简练
228   - projectList: 'projectList',
229   -
230   - }),
231   -
232   - },
233   -
234   - methods: {
235   -
236   - searchCli() {
237   - this.$u.route('/pages/main/home/search/search?type=student&searchkey=' + this.keyword);
238   - },
239   -
240   - sectionChange(index) {
241   - this.curNow = index;
242   -
243   - this.finished = false;
244   - this.loading = "loadmore";
245   - this.page = 0;
246   - this.list = [];
247   - this._getList();
248   - },
249   -
250   -
251   - getNameLastTwo(value) {
252   - if (value && value.length > 3) {
253   - return value.substring(value.length - 3)
254   - } else {
255   - return value;
256   - }
257   - },
258   -
259   - overflowHide(value, num = 4) {
260   - if (value && value.length > num) {
261   - return `${value.slice(0, num)}...`
262   - } else {
263   - return value;
264   - }
265   - },
266   -
267   - confirm(e) {
268   - this.timeValue = e[0];
269   - this.time = miment(e[0]).valueOf();
270   -
271   - this.finished = false;
272   - this.loading = "loadmore";
273   - this.page = 0;
274   - this.list = [];
275   - this._getList();
276   -
277   - this.showTime = false;
278   - },
279   -
280   - handelDetail(record) {
281   - this.$u.route({
282   - url: `pages/main/home/registrationDetail/registrationDetail?&id=${record.id}`
283   - })
284   - },
285   -
286   - timeFormat(timestamp, format = 'yyyy-mm-dd') {
287   - return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : '--'
288   - },
289   -
290   - checkboxChange(n) {
291   - console.log('change', n);
292   -
293   - this.search.waitAttendance = n.length > 0 ? 'not_attendance' : '';
294   -
295   - this.switchValue = n.length > 0 ? true : false;
296   -
297   - this.finished = false;
298   - this.loading = "loadmore";
299   - this.page = 0;
300   - this.list = [];
301   - this._getList();
302   - },
303   -
304   - handelSearch(value) {
305   - this.finished = false;
306   - this.loading = "loadmore";
307   - this.page = 0;
308   - this.list = [];
309   - this._getList();
310   - },
311   -
312   - open() {
313   - // console.log('open');
314   - },
315   - close() {
316   - this.show = false
317   - // console.log('close');
318   - },
319   - // scroll-view到底部加载更多
320   - onreachBottom() {},
321   - // 搜索
322   - searchSubmit() {
323   - // 调用混合搜索
324   - this._searchData();
325   - },
326   - // 模拟后端分页
327   - async getData(requestParams) {
328   - const {
329   - search = {}
330   - } = requestParams;
331   -
332   - let params = {};
333   - params.pageNumber = requestParams.page + 1;
334   - params.pageSize = 5;
335   -
336   - // if (search.waitAttendance) {
337   - // params.waitAttendance = search.waitAttendance;
338   - // }
339   -
340   - if (this.curNow == 0) {
341   - params.waitAttendance = 'not_attendance';
342   - }
343   -
344   - if (this.keyword) {
345   - params.keySearch = this.keyword
346   - }
347   -
348   - if (this.planId) {
349   - params.planId = this.planId
350   - }
351   -
352   - if (this.time) {
353   - params.time = this.time
354   - }
355   -
356   - return await getStudentSignInListApi(params);
357   - },
358   - // 数据请求(没错就是这么少的代码)
359   - async _getList() {
360   - if (this.page == 0) {
361   - this.list = [];
362   - }
363   -
364   - // 根据实际情况修改自己修改key
365   - let result = await this.getData({
366   - page: this.page, // 传入页码
367   - size: this.size, // 传入每页条数
368   - search: this.search, // 传入搜索的对象
369   - });
370   -
371   - this.total = result.total;
372   -
373   - if (this.list.length == 0 && result.records.length == 0) {
374   - this.shownoData = false
375   - } else {
376   - this.shownoData = true
377   - }
378   -
379   - this.list = this.list.concat(result.records)
380   -
381   - // 判断是否全部加载完成
382   - if (this.total == this.list.length) {
383   - this.finished = true;
384   - this.loading = 'nomore';
385   - } else {
386   - this.loading = 'loadmore';
387   - }
388   - },
389   -
390   - handelClick(values) {
391   - console.log(values);
392   - this.planId = values.id;
393   - },
394   -
395   - handelChange(e) {
396   - console.log(e)
397   - this.checkboxValue = e ? ['未签到'] : [];
398   - this.search.waitAttendance = e ? 'not_attendance' : '';
399   - },
400   -
401   - handelCancel() {
402   - this.switchValue = false;
403   - this.planId = '';
404   - },
405   -
406   - hancelSubmit() {
407   - this.finished = false;
408   - this.loading = "loadmore";
409   - this.page = 0;
410   - this.list = [];
411   - this._getList();
412   -
413   - this.show = false;
414   - },
415   -
416   - workSearch() {
417   - uni.hideKeyboard();
418   - this.works = []
419   - this.worksloadData()
420   - },
421   -
422   - lower() {
423   - setTimeout(() => {
424   - this.worksloadData(true);
425   - }, 200)
426   - },
427   -
428   - worksloadData(e) {
429   - let params = {}
430   - // this.loading = 'loading'
431   -
432   - if (e) {
433   - if (this.total <= this.works.length) {
434   - // this.loading = 'nomore'
435   - return
436   - }
437   - this.workspage++
438   - } else {
439   - this.workspage = 1
440   - }
441   - params['pageNumber'] = this.workspage
442   - if (this.sxsearch) {
443   - params['keyWord'] = this.sxsearch
444   - }
445   - getPlanListApi(params).then(async res => {
446   - if (res) {
447   - this.total = res.total
448   - // this.loading = 'loadmore'
449   - this.works = this.works.concat(res.records)
450   - }
451   - })
452   - },
453   - popupSelItem(item) {
454   - this.show = false
455   - this.planId = item.id;
456   - this.finished = false;
457   - this.loading = "loadmore";
458   - this.page = 0;
459   - this.list = [];
460   - this._getList();
461   - },
462   -
463   - }
464   - }
  208 +import { mapGetters, mapState, mapActions } from "vuex";
  209 +import listMixin from "@/common/mixins/list-mixin.js";
  210 +import miment from "miment";
  211 +
  212 +import { getStudentSignInListApi, getPlanListApi } from "@/config/api.js";
  213 +
  214 +export default {
  215 + mixins: [listMixin],
  216 + data() {
  217 + const d = new Date();
  218 + const year = d.getFullYear();
  219 + let month = d.getMonth() + 1;
  220 + month = month < 10 ? `0${month}` : month;
  221 + const date = d.getDate();
  222 +
  223 + return {
  224 + checkboxValue: [],
  225 + // 基本案列数据
  226 + checkboxList: [
  227 + {
  228 + name: "未签到",
  229 + disabled: false,
  230 + },
  231 + ],
  232 + keyword: "",
  233 + show: false,
  234 + search: {
  235 + //搜索对象必须为key search的对象
  236 + keySearch: "",
  237 + waitAttendance: "",
  238 + time: "",
  239 + },
  240 + showTime: false,
  241 + minDate: `${year - 2}-${month}-${date + 1}`,
  242 + maxDate: `${year}-${month}-${date + 1}`,
  243 + timeValue: `${year}-${month}-${date}`,
  244 + defaultDateMultiple: [`${year}-${month}-${date}`],
  245 + list: [], //列表必须为key list的数组
  246 + planId: "",
  247 + switchValue: false,
  248 +
  249 + curNow: 1,
  250 + sxsearch: "",
  251 + works: [],
  252 + workspage: 1,
  253 + workstotal: 0,
  254 + };
  255 + },
  256 +
  257 + onLoad(option) {
  258 + // this.$store.dispatch(`home/getProjectList`, {
  259 + // pageSize: -1,
  260 + // })
  261 +
  262 + // this.search.keySearch = '';
  263 +
  264 + // this.finished = false;
  265 + // this.loading = "loadmore";
  266 + // this.page = 0;
  267 + // this.list = [];
  268 +
  269 + this.worksloadData();
  270 +
  271 + if (option && option.status) {
  272 + // this.search.status = 'wait';
  273 + this.curNow = 0;
  274 + // this.checkboxValue = ['待处理'];
  275 + // this.switchValue = true;
  276 + }
  277 + },
  278 +
  279 + onShow() {
  280 + this.finished = false;
  281 + this.loading = "loadmore";
  282 + this.page = 0;
  283 + this.list = [];
  284 + this._getList();
  285 + },
  286 +
  287 + computed: {
  288 + ...mapState("home", {
  289 + // 箭头函数可使代码更简练
  290 + projectList: "projectList",
  291 + }),
  292 + },
  293 +
  294 + methods: {
  295 + searchCli() {
  296 + this.$u.route(
  297 + "/pages/main/home/search/search?type=student&searchkey=" + this.keyword
  298 + );
  299 + },
  300 +
  301 + sectionChange(index) {
  302 + this.curNow = index;
  303 +
  304 + this.finished = false;
  305 + this.loading = "loadmore";
  306 + this.page = 0;
  307 + this.list = [];
  308 + this._getList();
  309 + },
  310 +
  311 + getNameLastTwo(value) {
  312 + if (value && value.length > 3) {
  313 + return value.substring(value.length - 3);
  314 + } else {
  315 + return value;
  316 + }
  317 + },
  318 +
  319 + overflowHide(value, num = 4) {
  320 + if (value && value.length > num) {
  321 + return `${value.slice(0, num)}...`;
  322 + } else {
  323 + return value;
  324 + }
  325 + },
  326 +
  327 + confirm(e) {
  328 + this.timeValue = e[0];
  329 + this.time = miment(e[0]).valueOf();
  330 +
  331 + this.finished = false;
  332 + this.loading = "loadmore";
  333 + this.page = 0;
  334 + this.list = [];
  335 + this._getList();
  336 +
  337 + this.showTime = false;
  338 + },
  339 +
  340 + handelDetail(record) {
  341 + this.$u.route({
  342 + url: `pages/main/home/registrationDetail/registrationDetail?&id=${record.id}`,
  343 + });
  344 + },
  345 +
  346 + timeFormat(timestamp, format = "yyyy-mm-dd") {
  347 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : "--";
  348 + },
  349 +
  350 + checkboxChange(n) {
  351 + console.log("change", n);
  352 +
  353 + this.search.waitAttendance = n.length > 0 ? "not_attendance" : "";
  354 +
  355 + this.switchValue = n.length > 0 ? true : false;
  356 +
  357 + this.finished = false;
  358 + this.loading = "loadmore";
  359 + this.page = 0;
  360 + this.list = [];
  361 + this._getList();
  362 + },
  363 +
  364 + handelSearch(value) {
  365 + this.finished = false;
  366 + this.loading = "loadmore";
  367 + this.page = 0;
  368 + this.list = [];
  369 + this._getList();
  370 + },
  371 +
  372 + open() {
  373 + // console.log('open');
  374 + },
  375 + close() {
  376 + this.show = false;
  377 + // console.log('close');
  378 + },
  379 + // scroll-view到底部加载更多
  380 + onreachBottom() {},
  381 + // 搜索
  382 + searchSubmit() {
  383 + // 调用混合搜索
  384 + this._searchData();
  385 + },
  386 + // 模拟后端分页
  387 + async getData(requestParams) {
  388 + const { search = {} } = requestParams;
  389 +
  390 + let params = {};
  391 + params.pageNumber = requestParams.page + 1;
  392 + params.pageSize = 5;
  393 +
  394 + // if (search.waitAttendance) {
  395 + // params.waitAttendance = search.waitAttendance;
  396 + // }
  397 +
  398 + if (this.curNow == 0) {
  399 + params.waitAttendance = "not_attendance";
  400 + }
  401 +
  402 + if (this.keyword) {
  403 + params.keySearch = this.keyword;
  404 + }
  405 +
  406 + if (this.planId) {
  407 + params.planId = this.planId;
  408 + }
  409 +
  410 + if (this.time) {
  411 + params.time = this.time;
  412 + }
  413 +
  414 + return await getStudentSignInListApi(params);
  415 + },
  416 + // 数据请求(没错就是这么少的代码)
  417 + async _getList() {
  418 + if (this.page == 0) {
  419 + this.list = [];
  420 + }
  421 +
  422 + // 根据实际情况修改自己修改key
  423 + let result = await this.getData({
  424 + page: this.page, // 传入页码
  425 + size: this.size, // 传入每页条数
  426 + search: this.search, // 传入搜索的对象
  427 + });
  428 +
  429 + this.total = result.total;
  430 +
  431 + if (this.list.length == 0 && result.records.length == 0) {
  432 + this.shownoData = false;
  433 + } else {
  434 + this.shownoData = true;
  435 + }
  436 +
  437 + this.list = this.list.concat(result.records);
  438 +
  439 + // 判断是否全部加载完成
  440 + if (this.total == this.list.length) {
  441 + this.finished = true;
  442 + this.loading = "nomore";
  443 + } else {
  444 + this.loading = "loadmore";
  445 + }
  446 + },
  447 +
  448 + handelClick(values) {
  449 + console.log(values);
  450 + this.planId = values.id;
  451 + },
  452 +
  453 + handelChange(e) {
  454 + console.log(e);
  455 + this.checkboxValue = e ? ["未签到"] : [];
  456 + this.search.waitAttendance = e ? "not_attendance" : "";
  457 + },
  458 +
  459 + handelCancel() {
  460 + this.switchValue = false;
  461 + this.planId = "";
  462 + },
  463 +
  464 + hancelSubmit() {
  465 + this.finished = false;
  466 + this.loading = "loadmore";
  467 + this.page = 0;
  468 + this.list = [];
  469 + this._getList();
  470 +
  471 + this.show = false;
  472 + },
  473 +
  474 + workSearch() {
  475 + uni.hideKeyboard();
  476 + this.works = [];
  477 + this.worksloadData();
  478 + },
  479 +
  480 + lower() {
  481 + setTimeout(() => {
  482 + this.worksloadData(true);
  483 + }, 200);
  484 + },
  485 +
  486 + worksloadData(e) {
  487 + let params = {};
  488 + // this.loading = 'loading'
  489 +
  490 + if (e) {
  491 + if (this.total <= this.works.length) {
  492 + // this.loading = 'nomore'
  493 + return;
  494 + }
  495 + this.workspage++;
  496 + } else {
  497 + this.workspage = 1;
  498 + }
  499 + params["pageNumber"] = this.workspage;
  500 + if (this.sxsearch) {
  501 + params["keyWord"] = this.sxsearch;
  502 + }
  503 + getPlanListApi(params).then(async (res) => {
  504 + if (res) {
  505 + this.total = res.total;
  506 + // this.loading = 'loadmore'
  507 + this.works = this.works.concat(res.records);
  508 + }
  509 + });
  510 + },
  511 + popupSelItem(item) {
  512 + this.show = false;
  513 + this.planId = item.id;
  514 + this.finished = false;
  515 + this.loading = "loadmore";
  516 + this.page = 0;
  517 + this.list = [];
  518 + this._getList();
  519 + },
  520 + },
  521 +};
465 522 </script>
466 523
467 524 <style lang="scss" scoped>
468   - .registration_review {
469   - width: 100%;
470   - min-height: 100%;
471   - height: auto;
472   - background-color: #F7F7F7;
473   -
474   - // .search_box {
475   - // padding: 36rpx 30rpx 0;
476   - // background-color: #FFFFFF;
477   -
478   - // .top {
479   - // display: flex;
480   - // flex-flow: row nowrap;
481   - // justify-content: space-between;
482   -
483   - // .check {
484   - // padding: 20rpx 0 0 0;
485   - // }
486   -
487   - // .search {
488   - // width: 410rpx;
489   - // }
490   -
491   - // .icon {
492   - // display: flex;
493   - // flex-flow: row nowrap;
494   - // }
495   - // }
496   -
497   - // .bottom {
498   - // .time {
499   - // padding: 30rpx 0 30rpx 40rpx;
500   - // }
501   - // }
502   -
503   -
504   - // }
505   -
506   - .search_box {
507   - padding: 36rpx 30rpx 12rpx;
508   - background-color: #FFFFFF;
509   - display: flex;
510   - flex-flow: row nowrap;
511   - justify-content: space-between;
512   -
513   - .check {
514   - padding: 20rpx 0 0 0;
515   - }
516   -
517   - .search {
518   - width: 468rpx;
519   - }
520   - }
521   -
522   - .list_box {
523   - padding: 0 0 50rpx 0;
524   -
525   - .item {
526   - position: relative;
527   - width: 630rpx;
528   - margin: 30rpx auto;
529   - padding: 30rpx;
530   - border-radius: 12rpx;
531   - background-color: #FFFFFF;
532   -
533   - .bg_image {
534   - position: absolute;
535   - top: 0;
536   - right: 0;
537   -
538   - text {
539   - position: absolute;
540   - top: 12rpx;
541   - right: 30rpx;
542   - font-size: 24rpx;
543   - line-height: 24rpx;
544   - color: #FFFFFF;
545   - }
546   - }
547   -
548   - .info {
549   - display: flex;
550   - flex-flow: row nowrap;
551   - align-items: center;
552   - margin: 0 0 30rpx 0;
553   -
554   - .avatar {
555   - width: 78rpx;
556   - height: 94rpx;
557   - padding: 0 8rpx;
558   - border-radius: 4rpx;
559   - background-color: var(--primary-color);
560   - font-size: 24rpx;
561   - line-height: 94rpx;
562   - color: #FFFFFF;
563   - text-align: center;
564   - }
565   -
566   - .name {
567   - font-size: 32rpx;
568   - line-height: 44rpx;
569   - color: #202131;
570   - font-weight: 500;
571   - margin: 0 20rpx;
572   - }
573   -
574   - .number {
575   - font-size: 28rpx;
576   - line-height: 32rpx;
577   - color: #909097;
578   - }
579   - }
580   -
581   - .company {
582   - display: flex;
583   - flex-flow: row nowrap;
584   - margin: 0 0 30rpx 0;
585   -
586   - text {
587   - width: 130rpx;
588   - font-size: 28rpx;
589   - line-height: 32rpx;
590   - color: #909097;
591   - margin: 0 0 0 16rpx;
592   - }
593   -
594   - text:first-child {
595   - text-align: justify;
596   - text-align-last: justify;
597   - }
598   -
599   - text:last-child {
600   - width: 400rpx;
601   - color: #202131;
602   - margin: 0 0 0 30rpx;
603   - }
604   - }
605   -
606   - .time {
607   - border-top: 2rpx solid #E2E2E8;
608   - padding: 28rpx 0 0 0;
609   -
610   - text {
611   - font-size: 28rpx;
612   - line-height: 32rpx;
613   - color: #909097;
614   - }
615   -
616   - text:last-child {
617   - color: #202131;
618   - margin: 0 0 0 78rpx;
619   - }
620   - }
621   - }
622   - }
623   -
624   - .popup_search {
625   - width: 640rpx;
626   - position: relative;
627   -
628   - .content {
629   - padding: 0 40rpx;
630   -
631   - .title {
632   - padding: 24rpx 0;
633   - font-size: 28rpx;
634   - line-height: 36rpx;
635   - color: #202131;
636   - }
637   -
638   - .scroll {
639   - max-height: 60vh;
640   -
641   - .item {
642   -
643   - view {
644   - display: flex;
645   - flex-flow: row wrap;
646   - align-items: center;
647   - width: 500rpx;
648   - height: 74rpx;
649   - border-radius: 4rpx;
650   - border: 2rpx solid #C1C1C9;
651   - margin: 0 10rpx 20rpx;
652   - font-size: 24rpx;
653   - line-height: 32rpx;
654   - color: #C0C0C9;
655   - padding: 16rpx 20rpx;
656   - }
657   -
658   - .selectItem {
659   - background-color: var(--primary-color);
660   - color: #FFFFFF;
661   - border: 2rpx solid var(--primary-color);
662   - }
663   - }
664   - }
665   -
666   - .time {
667   - padding: 40rpx 0 0 0;
668   - }
669   -
670   - .switch {
671   - display: flex;
672   - flex-flow: row nowrap;
673   - justify-content: space-between;
674   - padding: 40rpx 0 0 0;
675   -
676   - text {
677   - font-size: 28rpx;
678   - line-height: 36rpx;
679   - color: #202131;
680   - }
681   - }
682   -
683   -
684   - }
685   -
686   - .footer {
687   - width: 560rpx;
688   - height: 96rpx;
689   - padding: 28rpx 40rpx;
690   - background: #FFFFFF;
691   - position: fixed;
692   - bottom: 0;
693   - right: 0;
694   - z-index: 99;
695   - border-top: 2rpx solid #E2E2E8;
696   -
697   - view {
698   - display: inline-block;
699   - }
700   -
701   - .left_btn {
702   - width: 194rpx;
703   - margin: 0 20rpx 0 0;
704   - }
705   -
706   - .right_btn {
707   - width: 346rpx;
708   - }
709   - }
710   - }
711   -
712   - .popup {
713   - height: 500px;
714   - padding: 19px 16px;
715   -
716   - .title {
717   - font-size: 18px;
718   - font-family: PingFangSC-Medium, PingFang SC;
719   - font-weight: 500;
720   - color: #000000;
721   - }
722   -
723   - .close {
724   - width: 22px;
725   - height: 22px;
726   - }
727   -
728   - .item_box {
729   - border-radius: 4px;
730   - margin: 0 0 48rpx;
731   -
732   - .item_title {
733   - height: 20px;
734   - font-size: 14px;
735   - font-family: PingFangSC-Regular, PingFang SC;
736   - font-weight: 400;
737   - color: rgba(0, 0, 0, 0.65);
738   - line-height: 20px;
739   - }
740   -
741   - }
742   -
743   - .no_data {
744   - width: 100%;
745   - margin-top: 310rpx;
746   -
747   - .text_black_28 {
748   - font-size: 14px;
749   - font-family: PingFangSC-Light, PingFang SC;
750   - font-weight: 300;
751   - color: rgba(0, 0, 0, 0.65);
752   - text-align: center;
753   - }
754   -
755   - }
756   -
757   - }
758   - }
  525 +.registration_review {
  526 + width: 100%;
  527 + min-height: 100%;
  528 + height: auto;
  529 + background-color: #f7f7f7;
  530 +
  531 + // .search_box {
  532 + // padding: 36rpx 30rpx 0;
  533 + // background-color: #FFFFFF;
  534 +
  535 + // .top {
  536 + // display: flex;
  537 + // flex-flow: row nowrap;
  538 + // justify-content: space-between;
  539 +
  540 + // .check {
  541 + // padding: 20rpx 0 0 0;
  542 + // }
  543 +
  544 + // .search {
  545 + // width: 410rpx;
  546 + // }
  547 +
  548 + // .icon {
  549 + // display: flex;
  550 + // flex-flow: row nowrap;
  551 + // }
  552 + // }
  553 +
  554 + // .bottom {
  555 + // .time {
  556 + // padding: 30rpx 0 30rpx 40rpx;
  557 + // }
  558 + // }
  559 +
  560 + // }
  561 +
  562 + .search_box {
  563 + padding: 36rpx 30rpx 12rpx;
  564 + background-color: #ffffff;
  565 + display: flex;
  566 + flex-flow: row nowrap;
  567 + justify-content: space-between;
  568 +
  569 + .check {
  570 + padding: 20rpx 0 0 0;
  571 + }
  572 +
  573 + .search {
  574 + width: 468rpx;
  575 + }
  576 + }
  577 +
  578 + .list_box {
  579 + padding: 0 0 50rpx 0;
  580 +
  581 + .item {
  582 + position: relative;
  583 + margin: 30rpx 30rpx 16rpx;
  584 + padding: 30rpx;
  585 + border-radius: 12rpx;
  586 + background-color: #ffffff;
  587 +
  588 + .bg_image {
  589 + position: absolute;
  590 + top: 0;
  591 + right: 0;
  592 +
  593 + text {
  594 + position: absolute;
  595 + top: 12rpx;
  596 + right: 30rpx;
  597 + font-size: 24rpx;
  598 + line-height: 24rpx;
  599 + color: #ffffff;
  600 + }
  601 + }
  602 +
  603 + .info {
  604 + display: flex;
  605 + flex-flow: row nowrap;
  606 + align-items: center;
  607 +
  608 + .avatar {
  609 + width: 78rpx;
  610 + height: 94rpx;
  611 + padding: 0 8rpx;
  612 + border-radius: 4rpx;
  613 + background-color: var(--primary-color);
  614 + font-size: 24rpx;
  615 + line-height: 94rpx;
  616 + color: #ffffff;
  617 + text-align: center;
  618 + }
  619 +
  620 + .name {
  621 + font-size: 32rpx;
  622 + line-height: 44rpx;
  623 + color: #202131;
  624 + font-weight: 500;
  625 + margin-right: 12rpx;
  626 + }
  627 +
  628 + .number {
  629 + font-size: 28rpx;
  630 + line-height: 32rpx;
  631 + color: #909097;
  632 + }
  633 + }
  634 +
  635 + .company {
  636 + display: flex;
  637 + flex-flow: row nowrap;
  638 + // margin: 0 0 30rpx 0;
  639 +
  640 + text {
  641 + font-size: 28rpx;
  642 + line-height: 32rpx;
  643 + color: #909097;
  644 + // margin: 0 0 0 16rpx;
  645 + }
  646 +
  647 + text:last-child {
  648 + color: #202131;
  649 + flex: 1;
  650 + }
  651 + }
  652 +
  653 + .time {
  654 + border-top: 2rpx solid #e2e2e8;
  655 + padding: 28rpx 0 0 0;
  656 +
  657 + text {
  658 + font-size: 28rpx;
  659 + line-height: 32rpx;
  660 + color: #909097;
  661 + }
  662 +
  663 + text:last-child {
  664 + color: #202131;
  665 + margin: 0 0 0 78rpx;
  666 + }
  667 + }
  668 + }
  669 + }
  670 +
  671 + .popup_search {
  672 + width: 640rpx;
  673 + position: relative;
  674 +
  675 + .content {
  676 + padding: 0 40rpx;
  677 +
  678 + .title {
  679 + padding: 24rpx 0;
  680 + font-size: 28rpx;
  681 + line-height: 36rpx;
  682 + color: #202131;
  683 + }
  684 +
  685 + .scroll {
  686 + max-height: 60vh;
  687 +
  688 + .item {
  689 + view {
  690 + display: flex;
  691 + flex-flow: row wrap;
  692 + align-items: center;
  693 + width: 500rpx;
  694 + height: 74rpx;
  695 + border-radius: 4rpx;
  696 + border: 2rpx solid #c1c1c9;
  697 + margin: 0 10rpx 20rpx;
  698 + font-size: 24rpx;
  699 + line-height: 32rpx;
  700 + color: #c0c0c9;
  701 + padding: 16rpx 20rpx;
  702 + }
  703 +
  704 + .selectItem {
  705 + background-color: var(--primary-color);
  706 + color: #ffffff;
  707 + border: 2rpx solid var(--primary-color);
  708 + }
  709 + }
  710 + }
  711 +
  712 + .time {
  713 + padding: 40rpx 0 0 0;
  714 + }
  715 +
  716 + .switch {
  717 + display: flex;
  718 + flex-flow: row nowrap;
  719 + justify-content: space-between;
  720 + padding: 40rpx 0 0 0;
  721 +
  722 + text {
  723 + font-size: 28rpx;
  724 + line-height: 36rpx;
  725 + color: #202131;
  726 + }
  727 + }
  728 + }
  729 +
  730 + .footer {
  731 + width: 560rpx;
  732 + height: 96rpx;
  733 + padding: 28rpx 40rpx;
  734 + background: #ffffff;
  735 + position: fixed;
  736 + bottom: 0;
  737 + right: 0;
  738 + z-index: 99;
  739 + border-top: 2rpx solid #e2e2e8;
  740 +
  741 + view {
  742 + display: inline-block;
  743 + }
  744 +
  745 + .left_btn {
  746 + width: 194rpx;
  747 + margin: 0 20rpx 0 0;
  748 + }
  749 +
  750 + .right_btn {
  751 + width: 346rpx;
  752 + }
  753 + }
  754 + }
  755 +
  756 + .popup {
  757 + height: 500px;
  758 + padding: 19px 16px;
  759 +
  760 + .title {
  761 + font-size: 18px;
  762 + font-family: PingFangSC-Medium, PingFang SC;
  763 + font-weight: 500;
  764 + color: #000000;
  765 + }
  766 +
  767 + .close {
  768 + width: 22px;
  769 + height: 22px;
  770 + }
  771 +
  772 + .item_box {
  773 + border-radius: 4px;
  774 + margin: 0 0 48rpx;
  775 +
  776 + .item_title {
  777 + height: 20px;
  778 + font-size: 14px;
  779 + font-family: PingFangSC-Regular, PingFang SC;
  780 + font-weight: 400;
  781 + color: rgba(0, 0, 0, 0.65);
  782 + line-height: 20px;
  783 + }
  784 + }
  785 +
  786 + .no_data {
  787 + width: 100%;
  788 + margin-top: 310rpx;
  789 +
  790 + .text_black_28 {
  791 + font-size: 14px;
  792 + font-family: PingFangSC-Light, PingFang SC;
  793 + font-weight: 300;
  794 + color: rgba(0, 0, 0, 0.65);
  795 + text-align: center;
  796 + }
  797 + }
  798 + }
  799 +}
759 800 </style>
... ...

984 Bytes | 宽: | 高:

993 Bytes | 宽: | 高:

  • 两方对比
  • 交换覆盖
  • 透明覆盖
... ... @@ -10,9 +10,9 @@ const appNameData = {
10 10 }
11 11
12 12 let lifeData = {};
13   -// let appId = 'wx6cd2152282abd34c';
  13 +let appId = 'wx6cd2152282abd34c';
14 14 // 新华网
15   -let appId = 'wxac18386e35824192';
  15 +// let appId = 'wxac18386e35824192';
16 16
17 17
18 18 try {
... ...
注册登录 后发表评论