提交 d72e8f1532b15f004cfbba135ffddeb1902fd69a

作者 wangws
1 个父辈 2345202c

1

... ... @@ -208,4 +208,24 @@ export const scoreinternshipInfoUrl = (params) => http.get('/internship/v1/score
208 208 })
209 209
210 210 // 鉴定成绩鉴定
211   -export const putscoreappraisalApi = (params) => http.put('/internship/v1/score/appraisal', params)
\ No newline at end of file
  211 +export const putscoreappraisalApi = (params) => http.put('/internship/v1/score/appraisal', params)
  212 +
  213 +// 实习生详情-实习课程-实习信息
  214 +export const getforminternshipInfoApi = (params) => http.get('/internship/v1/form/internshipInfo', {
  215 + params: params
  216 +})
  217 +
  218 +// 实习申请-列表
  219 +export const getformApplyschoollistApi = (params) => http.get('/internship/v1/formApply/school/list', {
  220 + params: params
  221 +})
  222 +
  223 +// 实习申请-详情
  224 +export const getformApplyschooldetailApi = (id,params) => http.get('/internship/v1/formApply/'+id, {
  225 + params: params
  226 +})
  227 +
  228 +// 实习申请-审核
  229 +export const putformApplyApi = (id,params) => http.put('/internship/v1/formApply/audit/'+id, {
  230 + params: params
  231 +})
\ No newline at end of file
... ...
... ... @@ -155,6 +155,18 @@
155 155 "enablePullDownRefresh": false
156 156 }
157 157
  158 + }, {
  159 + "path": "interapply/interapply",
  160 + "style": {
  161 + "navigationBarTitleText": "实习申请",
  162 + "enablePullDownRefresh": false
  163 + }
  164 + }, {
  165 + "path": "interapplydetail/interapplydetail",
  166 + "style": {
  167 + "navigationBarTitleText": "实习申请",
  168 + "enablePullDownRefresh": false
  169 + }
158 170 }
159 171 ]
160 172 },
... ... @@ -227,7 +239,14 @@
227 239 "enablePullDownRefresh": false
228 240 }
229 241
230   - }
  242 + },{
  243 + "path" : "traineeInterList/traineeInterList",
  244 + "style" :
  245 + {
  246 + "navigationBarTitleText": "实习信息",
  247 + "enablePullDownRefresh": false
  248 + }
  249 + }
231 250 ]
232 251 },
233 252 {
... ... @@ -383,7 +402,7 @@
383 402 "pagePath": "pages/tabBar/internship/internship",
384 403 "iconPath": "/static/img/icon/internship.png",
385 404 "selectedIconPath": "/static/img/icon/internshipHL.png",
386   - "text": "实习"
  405 + "text": "实习"
387 406 },
388 407 {
389 408 "pagePath": "pages/tabBar/my/my",
... ...
... ... @@ -36,7 +36,7 @@
36 36 <view class="gv" style="background-color: #fff; padding: 20px 16px 0;">
37 37 <view class="green"></view>
38 38 <view class="title">
39   - 学校评价
  39 + 教师评价
40 40 </view>
41 41 </view>
42 42 <view style="background-color: #fff; padding: 20px 16px 0;">
... ... @@ -623,7 +623,7 @@
623 623 display: flex;
624 624 flex-direction: column;
625 625 margin-left: 2px;
626   - width: 85%;
  626 + width: 80%;
627 627
628 628 .pdffj {
629 629 margin-bottom: 5px;
... ...
... ... @@ -72,7 +72,7 @@
72 72 </view>
73 73 <view class="list">
74 74 <text class="item1">评分:</text>
75   - <text class="item2">{{detailObj.reportAverageScore}}分</text>
  75 + <text class="item2">{{detailObj.reportAverageScore?`${detailObj.reportAverageScore}分`:'-'}}</text>
76 76 </view>
77 77 </view>
78 78
... ... @@ -90,6 +90,7 @@
90 90 <view class="list list_item_top">
91 91 <text class="item1">评语:</text>
92 92 <text class="item2">{{detailObj.studentComment}}</text>
  93 + <!-- <text class="item2">12321312390128390218309809sda890asd809s0a9d8a90sd8a90asd809asd89asd890as8d9</text> -->
93 94 </view>
94 95 <view class="listflex list_item_top">
95 96 <text class="item1">附件:</text>
... ... @@ -140,7 +141,7 @@
140 141 <view class="t">
141 142 <view class="green"></view>
142 143 <view class="title">
143   - 学校评价
  144 + 教师评价
144 145 </view>
145 146 </view>
146 147 <view class="list list_item_top">
... ... @@ -597,6 +598,10 @@
597 598 }
598 599
599 600 .item2 {
  601 + -webkit-box-orient: vertical;
  602 + overflow: hidden;
  603 + word-break: break-all;
  604 + word-wrap: break-word;
600 605 margin-left: 2px;
601 606 font-size: 12px;
602 607 font-family: PingFangSC-Light, PingFang SC;
... ...
  1 +<template>
  2 + <view class="registration_review">
  3 + <view class="search_box">
  4 + <!-- <view class="check">
  5 + <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
  6 + <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
  7 + v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
  8 + activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
  9 + </u-checkbox>
  10 + </u-checkbox-group>
  11 + </view> -->
  12 +
  13 + <!-- <view class="search">
  14 + <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  15 + bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
  16 + </u-search>
  17 + </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 + <view class="t1">
  31 + {{item.studentName}}提交的实习申请
  32 + </view>
  33 + <view class="t3">
  34 + {{item.projectName}}
  35 + </view>
  36 + <view class="t2 t2top14">
  37 + 申请类型: {{getCategoryList(item.type)}}
  38 + </view>
  39 + <view class="t2">
  40 + 开始时间: {{timeFormat(item.formStartTime, 'yyyy-mm-dd hh:MM')}}
  41 + </view>
  42 + <view class="t2">
  43 + 结束时间: {{timeFormat(item.formEndTime, 'yyyy-mm-dd hh:MM')}}
  44 + </view>
  45 + <view v-if="item.status == 'wait'" class="status" style="color: #F49A23;">
  46 + 待处理
  47 + </view>
  48 + <view v-else-if="item.status == 'passed'" class="status" style="color: #0CB17A;">
  49 + 已通过
  50 + </view>
  51 + <view v-else-if="item.status == 'rejected'" class="status" style="color: red;">
  52 + 已驳回
  53 + </view>
  54 + <view class="time">
  55 + {{timeFormat(item.createdTime, 'mm-dd')}}
  56 + </view>
  57 + </view>
  58 + <c-loading :loading="loading"></c-loading>
  59 + </view>
  60 + <view v-else class="no_data">
  61 + <c-no-data></c-no-data>
  62 + </view>
  63 +
  64 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  65 + <view class="popup">
  66 + <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
  67 + <view class="title">
  68 + 项目筛选
  69 + </view>
  70 + <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
  71 + </view>
  72 + <view class="search">
  73 + <u-search placeholder="请输入项目关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  74 + bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
  75 + </u-search>
  76 + </view>
  77 + <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
  78 + @scrolltolower="lower()">
  79 + <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
  80 + <view style="display: flex; align-items: center; justify-content: space-between;">
  81 + <view class="item_title">
  82 + {{item.name}}
  83 + </view>
  84 + <image v-if="item.id == projectId" style="width: 20px; height: 20px;" src="/static/img/home/popselect.png" mode=""></image>
  85 + </view>
  86 + </view>
  87 + </scroll-view>
  88 + <view v-else class="no_data" @click="jumpVerified">
  89 + <view class="text_black_28">
  90 + 暂未搜索到该项目
  91 + </view>
  92 + </view>
  93 + </view>
  94 + </u-popup>
  95 +
  96 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  97 + <view class="popup_search">
  98 + <view class="content">
  99 + <view class="title">按项目筛选</view>
  100 + <scroll-view class="scroll" scroll-y="true">
  101 + <view class="item" v-for="(item, i) in projectList" :key="i" @click="handelClick(item)">
  102 + <view class="selectItem" v-if="item.id == projectId">
  103 + <text>{{item.name}}</text>
  104 + </view>
  105 + <view v-else>
  106 + <text>{{item.name}}</text>
  107 + </view>
  108 + </view>
  109 + </scroll-view>
  110 + <view class="switch">
  111 + <text>待处理</text>
  112 + <u-switch v-model="switchValue" size="48" activeColor="#06B079" @change="handelChange">
  113 + </u-switch>
  114 + </view>
  115 + </view>
  116 +
  117 + <view class="footer">
  118 + <view class="left_btn">
  119 + <c-button type="cancel" text="重置" @click="handelCancel">
  120 + </c-button>
  121 + </view>
  122 + <view class="right_btn">
  123 + <c-button type="confirm" text="确定" @click="hancelSubmit">
  124 + </c-button>
  125 + </view>
  126 + </view>
  127 +
  128 + </view>
  129 + </u-popup> -->
  130 +
  131 + </view>
  132 +</template>
  133 +
  134 +<script>
  135 + import {
  136 + mapGetters,
  137 + mapState,
  138 + mapActions
  139 + } from 'vuex'
  140 + import listMixin from "@/common/mixins/list-mixin.js";
  141 +
  142 + import {
  143 + getformApplyschoollistApi,
  144 + getProjectListApi,
  145 + } from '@/config/api.js';
  146 +
  147 + export default {
  148 + mixins: [listMixin],
  149 + data() {
  150 + return {
  151 + checkboxValue: [],
  152 + // 基本案列数据
  153 + checkboxList: [{
  154 + name: '待处理',
  155 + disabled: false
  156 + }],
  157 + keyword: '',
  158 + show: false,
  159 + list: [], //列表必须为key list的数组
  160 + search: {
  161 + //搜索对象必须为key search的对象
  162 + keySearch: "",
  163 + status: '',
  164 +
  165 + },
  166 + projectId: '',
  167 + switchValue: false,
  168 + categoryList: [{
  169 + label: '开始实习申请',
  170 + value: 'start'
  171 + },
  172 + {
  173 + label: '结束实习申请',
  174 + value: "end",
  175 + }
  176 + ],
  177 + curNow: 1,
  178 + sxsearch: '',
  179 + works: [],
  180 + workspage: 1,
  181 + workstotal: 0,
  182 + }
  183 + },
  184 +
  185 + onLoad(option) {
  186 + console.log(option)
  187 + // this.$store.dispatch(`home/getProjectList`, {
  188 + // pageSize: -1,
  189 + // })
  190 +
  191 + this.worksloadData()
  192 +
  193 + // this.search.keySearch = '';
  194 +
  195 + if (option && option.status) {
  196 + // this.search.status = 'wait';
  197 + this.curNow = 0;
  198 + // this.checkboxValue = ['待处理'];
  199 + // this.switchValue = true;
  200 + }
  201 +
  202 + },
  203 +
  204 + onShow() {
  205 + this.finished = false;
  206 + this.loading = "loadmore";
  207 + this.page = 0;
  208 + this.list = [];
  209 + this._getList();
  210 + },
  211 +
  212 + computed: {
  213 + ...mapState('home', {
  214 + // 箭头函数可使代码更简练
  215 + projectList: 'projectList',
  216 +
  217 + }),
  218 +
  219 + },
  220 +
  221 + methods: {
  222 +
  223 + searchCli() {
  224 + this.$u.route('/pages/main/home/search/search?type=ask&searchkey=' + this.keyword);
  225 + },
  226 +
  227 + sectionChange(index) {
  228 + this.curNow = index;
  229 +
  230 + this.finished = false;
  231 + this.loading = "loadmore";
  232 + this.page = 0;
  233 + this.list = [];
  234 + this._getList();
  235 + },
  236 +
  237 + getCategoryList(e) {
  238 + for (var i = 0; i < this.categoryList.length; i++) {
  239 + let item = this.categoryList[i]
  240 + if (e == item.value) {
  241 + return item.label
  242 + }
  243 + }
  244 + },
  245 +
  246 + handelDetail(record) {
  247 + this.$u.route('/pages/main/home/interapplydetail/interapplydetail?id='+record.id);
  248 + },
  249 +
  250 + timeFormat(timestamp, format = 'yyyy-mm-dd') {
  251 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : '--'
  252 + },
  253 +
  254 + checkboxChange(n) {
  255 + console.log('change', n);
  256 +
  257 + this.search.status = n.length > 0 ? 'wait' : '';
  258 +
  259 + this.switchValue = n.length > 0 ? true : false;
  260 +
  261 + this.finished = false;
  262 + this.loading = "loadmore";
  263 + this.page = 0;
  264 + this.list = [];
  265 + this._getList();
  266 + },
  267 +
  268 + handelSearch(value) {
  269 + this.finished = false;
  270 + this.loading = "loadmore";
  271 + this.page = 0;
  272 + this.list = [];
  273 + this._getList();
  274 + },
  275 +
  276 + open() {
  277 + // console.log('open');
  278 + },
  279 + close() {
  280 + this.show = false
  281 + // console.log('close');
  282 + },
  283 + // scroll-view到底部加载更多
  284 + onreachBottom() {},
  285 + // 搜索
  286 + searchSubmit() {
  287 + // 调用混合搜索
  288 + this._searchData();
  289 + },
  290 + // 模拟后端分页
  291 + async getData(requestParams) {
  292 + const {
  293 + search = {}
  294 + } = requestParams;
  295 +
  296 + let params = {};
  297 + params.pageNumber = requestParams.page + 1;
  298 + params.pageSize = 5;
  299 +
  300 + if (this.curNow == 0) {
  301 + params.status = 'wait';
  302 + }
  303 +
  304 + if (this.keyword) {
  305 + params.keySearch = this.keyword
  306 + }
  307 +
  308 + if (this.projectId) {
  309 + params.projectId = this.projectId
  310 + }
  311 +
  312 + return await getformApplyschoollistApi(params);
  313 + },
  314 + // 数据请求(没错就是这么少的代码)
  315 + async _getList() {
  316 + if (this.page == 0) {
  317 + this.list = [];
  318 + }
  319 +
  320 + // 根据实际情况修改自己修改key
  321 + let result = await this.getData({
  322 + page: this.page, // 传入页码
  323 + size: this.size, // 传入每页条数
  324 + search: this.search, // 传入搜索的对象
  325 + });
  326 +
  327 + this.total = result.total;
  328 +
  329 + if (this.list.length == 0 && result.records.length == 0) {
  330 + this.shownoData = false
  331 + } else {
  332 + this.shownoData = true
  333 + }
  334 +
  335 + this.list = this.list.concat(result.records)
  336 +
  337 + // 判断是否全部加载完成
  338 + if (this.total == this.list.length) {
  339 + this.finished = true;
  340 + this.loading = 'nomore';
  341 + } else {
  342 + this.loading = 'loadmore';
  343 + }
  344 + },
  345 +
  346 + handelClick(values) {
  347 + console.log(values);
  348 + this.projectId = values.id;
  349 + },
  350 +
  351 + handelChange(e) {
  352 + console.log(e)
  353 + this.checkboxValue = e ? ['待处理'] : [];
  354 + this.search.status = e ? 'wait' : '';
  355 +
  356 + },
  357 +
  358 + handelCancel() {
  359 + this.switchValue = false;
  360 + this.projectId = '';
  361 + },
  362 +
  363 + hancelSubmit() {
  364 + this.finished = false;
  365 + this.loading = "loadmore";
  366 + this.page = 0;
  367 + this.list = [];
  368 + this._getList();
  369 +
  370 + this.show = false;
  371 + },
  372 +
  373 + workSearch() {
  374 + uni.hideKeyboard();
  375 + this.works = []
  376 + this.worksloadData()
  377 + },
  378 +
  379 + lower() {
  380 + setTimeout(() => {
  381 + this.worksloadData(true);
  382 + }, 200)
  383 + },
  384 +
  385 + worksloadData(e) {
  386 + let params = {}
  387 + // this.loading = 'loading'
  388 +
  389 + if (e) {
  390 + if (this.total <= this.works.length) {
  391 + // this.loading = 'nomore'
  392 + return
  393 + }
  394 + this.workspage++
  395 + } else {
  396 + this.workspage = 1
  397 + }
  398 + params['pageNumber'] = this.workspage
  399 + if (this.sxsearch) {
  400 + params['keyWord'] = this.sxsearch
  401 + }
  402 + getProjectListApi(params).then(async res => {
  403 + if (res) {
  404 + this.total = res.total
  405 + // this.loading = 'loadmore'
  406 + this.works = this.works.concat(res.records)
  407 + }
  408 + })
  409 + },
  410 + popupSelItem(item) {
  411 + this.show = false
  412 + this.projectId = item.id;
  413 + this.finished = false;
  414 + this.loading = "loadmore";
  415 + this.page = 0;
  416 + this.list = [];
  417 + this._getList();
  418 + },
  419 +
  420 + }
  421 + }
  422 +</script>
  423 +
  424 +<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;
  434 + 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;
  444 + }
  445 + }
  446 +
  447 + .list_box {
  448 + padding: 0 0 50rpx 0;
  449 +
  450 + .item {
  451 + position: relative;
  452 + margin: 8px 13px 0;
  453 + padding: 20px 17px;
  454 + border-radius: 8rpx;
  455 + background-color: #FFFFFF;
  456 +
  457 + .t1 {
  458 + font-size: 14px;
  459 + font-family: PingFangSC-Medium, PingFang SC;
  460 + font-weight: 500;
  461 + color: #000000;
  462 + }
  463 +
  464 + .t2 {
  465 + margin-top: 6px;
  466 + font-size: 12px;
  467 + font-family: PingFangSC-Light, PingFang SC;
  468 + font-weight: 300;
  469 + color: rgba(38,41,47,0.85);
  470 + }
  471 +
  472 + .t3 {
  473 + margin-top: 2px;
  474 + font-size: 12px;
  475 + font-family: PingFangSC-Light, PingFang SC;
  476 + font-weight: 300;
  477 + color: #000000;
  478 + }
  479 +
  480 + .t2top14 {
  481 + margin-top: 14px;
  482 + }
  483 +
  484 + .time {
  485 + position: absolute;
  486 + top: 17px;
  487 + right: 17px;
  488 + font-size: 12px;
  489 + font-family: PingFangSC-Light, PingFang SC;
  490 + font-weight: 300;
  491 + color: rgba(0,0,0,0.85);
  492 + }
  493 +
  494 + .status {
  495 + position: absolute;
  496 + bottom: 20px;
  497 + right: 17px;
  498 + font-size: 12px;
  499 + font-family: PingFangSC-Regular, PingFang SC;
  500 + font-weight: 400;
  501 + }
  502 + }
  503 + }
  504 +
  505 + .popup_search {
  506 + width: 640rpx;
  507 + position: relative;
  508 +
  509 + .content {
  510 + padding: 0 40rpx;
  511 +
  512 + .title {
  513 + padding: 24rpx 0;
  514 + font-size: 28rpx;
  515 + line-height: 36rpx;
  516 + color: #202131;
  517 + }
  518 +
  519 + .scroll {
  520 + max-height: 60vh;
  521 +
  522 + .item {
  523 +
  524 + view {
  525 + display: flex;
  526 + flex-flow: row wrap;
  527 + align-items: center;
  528 + width: 500rpx;
  529 + height: 74rpx;
  530 + border-radius: 4rpx;
  531 + border: 2rpx solid #C1C1C9;
  532 + margin: 0 10rpx 20rpx;
  533 + font-size: 24rpx;
  534 + line-height: 32rpx;
  535 + color: #C0C0C9;
  536 + padding: 16rpx 20rpx;
  537 + }
  538 +
  539 + .selectItem {
  540 + background-color: #06B079;
  541 + color: #FFFFFF;
  542 + border: 2rpx solid #06B079;
  543 + }
  544 + }
  545 + }
  546 +
  547 + .switch {
  548 + display: flex;
  549 + flex-flow: row nowrap;
  550 + justify-content: space-between;
  551 + padding: 40rpx 0 0 0;
  552 +
  553 + text {
  554 + font-size: 28rpx;
  555 + line-height: 36rpx;
  556 + color: #202131;
  557 + }
  558 + }
  559 +
  560 +
  561 + }
  562 +
  563 + .footer {
  564 + width: 560rpx;
  565 + height: 96rpx;
  566 + padding: 28rpx 40rpx;
  567 + background: #FFFFFF;
  568 + position: fixed;
  569 + bottom: 0;
  570 + right: 0;
  571 + z-index: 99;
  572 + border-top: 2rpx solid #E2E2E8;
  573 +
  574 + view {
  575 + display: inline-block;
  576 + }
  577 +
  578 + .left_btn {
  579 + width: 194rpx;
  580 + margin: 0 20rpx 0 0;
  581 + }
  582 +
  583 + .right_btn {
  584 + width: 346rpx;
  585 + }
  586 + }
  587 + }
  588 +
  589 + .popup {
  590 + height: 500px;
  591 + padding: 19px 16px;
  592 +
  593 + .title {
  594 + font-size: 18px;
  595 + font-family: PingFangSC-Medium, PingFang SC;
  596 + font-weight: 500;
  597 + color: #000000;
  598 + }
  599 +
  600 + .close {
  601 + width: 22px;
  602 + height: 22px;
  603 + }
  604 +
  605 + .item_box {
  606 + border-radius: 4px;
  607 + margin: 0 0 48rpx;
  608 +
  609 + .item_title {
  610 + height: 20px;
  611 + font-size: 14px;
  612 + font-family: PingFangSC-Regular, PingFang SC;
  613 + font-weight: 400;
  614 + color: rgba(0, 0, 0, 0.65);
  615 + line-height: 20px;
  616 + }
  617 +
  618 + }
  619 +
  620 + .no_data {
  621 + width: 100%;
  622 + margin-top: 310rpx;
  623 +
  624 + .text_black_28 {
  625 + font-size: 14px;
  626 + font-family: PingFangSC-Light, PingFang SC;
  627 + font-weight: 300;
  628 + color: rgba(0,0,0,0.65);
  629 + text-align: center;
  630 + }
  631 +
  632 + }
  633 +
  634 + }
  635 + }
  636 +</style>
... ...
  1 +<template>
  2 + <view class="page">
  3 + <view class="top">
  4 + <view class="title">
  5 + {{detailObj.studentName}}提交的请假申请
  6 + </view>
  7 + <view class="t1">
  8 + {{detailObj.projectName}}
  9 + </view>
  10 + <!-- <view class="t2">
  11 + {{detailObj.courseName}}
  12 + </view> -->
  13 + <view v-if="detailObj.status == 'wait'" class="status" style="color: #FFC200;">
  14 + 待处理
  15 + </view>
  16 + <view v-else-if="detailObj.status == 'passed'" class="status" style="color: #0CB17A;">
  17 + 已通过
  18 + </view>
  19 + <view v-else-if="detailObj.status == 'rejected'" class="status" style="color: red;">
  20 + 已驳回
  21 + </view>
  22 + </view>
  23 + <view class="content">
  24 + <view class="c1">
  25 + 申请类型
  26 + </view>
  27 + <view class="c2">
  28 + {{getCategoryList(detailObj.type)}}
  29 + </view>
  30 + <view class="grayV">
  31 + <view class="g1">
  32 + 实习时间
  33 + </view>
  34 + <image class="timeline" src="/static/img/home/timeline.png"></image>
  35 + <view class="start">
  36 + {{timeFormat(detailObj.formStartTime,'yyyy-mm-dd hh:MM')}}
  37 + </view>
  38 + <view class="end">
  39 + {{timeFormat(detailObj.formEndTime,'yyyy-mm-dd hh:MM')}}
  40 + </view>
  41 + </view>
  42 + <!-- <view class="c1" style="margin-top: 16rpx;">
  43 + 请假原因
  44 + </view>
  45 + <view class="c2" style="margin-top: 16rpx;">
  46 + {{detailObj.reason}}
  47 + </view> -->
  48 + <!-- <view class="c1" style="margin-top: 32rpx;">
  49 + 附件
  50 + </view> -->
  51 + <!-- <view v-if="picList.length>0" class="fj_content">
  52 + <view class="item">
  53 + <view class="p_item" v-for="(item, index) in picList" :key="index" @click="openImage(item)">
  54 + <u-image :height="120" :width="120" :border-radius="16" :src="item"></u-image>
  55 + </view>
  56 + </view>
  57 + </view> -->
  58 + </view>
  59 + <view class="timeb">
  60 + <view class="title">
  61 + 审批信息
  62 + </view>
  63 + <view style="padding: 10rpx;">
  64 + <view>
  65 + <view v-for="(item,index) in questions" :key="index">
  66 + <view class="nodef">
  67 + <!-- <<!-- template v-slot:node> -->
  68 + <view class="node1">
  69 + <view class="u-node"></view>
  70 + </view>
  71 + <!-- </template> -->
  72 + <!-- <template v-slot:content> -->
  73 + <view class="node2">
  74 + <view style="display: flex; align-self: center; justify-content:space-between;">
  75 + <view class='u-order-title'>{{item.title}}</view>
  76 + <view class='u-order-time'>{{timeFormat(item.time,'mm-dd hh:MM')}}</view>
  77 + </view>
  78 + <view class='u-order-desc'>{{item.desc}}{{item.peo?item.peo:''}}</view>
  79 + <view v-if="item.reply" class='u-order-reply'>{{item.reply}}</view>
  80 + </view>
  81 + <!-- </template> -->
  82 + </view>
  83 + </view>
  84 + </view>
  85 + </view>
  86 + </view>
  87 + <view style="height: 100px;">
  88 +
  89 + </view>
  90 + <view class="footer" v-if="detailObj.status == 'wait'">
  91 + <view class="left_btn">
  92 + <c-button type="cancel" text="驳回" @click="handelCancel">
  93 + </c-button>
  94 + </view>
  95 + <view class="right_btn">
  96 + <c-button type="confirm" text="通过" @click="hancelSubmit">
  97 + </c-button>
  98 + </view>
  99 + </view>
  100 + </view>
  101 +</template>
  102 +
  103 +<script>
  104 + import {
  105 + getformApplyschooldetailApi,
  106 + putformApplyApi,
  107 + getImgUrlApi,
  108 + } from '@/config/api.js';
  109 +
  110 + export default {
  111 + data() {
  112 + return {
  113 + id: '',
  114 + picList: [],
  115 + detailObj: {},
  116 + attachments: [],
  117 + questions: [],
  118 + categoryList: [{
  119 + label: '开始实习申请',
  120 + value: 'start'
  121 + },
  122 + {
  123 + label: '结束实习申请',
  124 + value: "end",
  125 + }
  126 + ],
  127 + }
  128 + },
  129 +
  130 + onLoad(e) {
  131 + this.id = e.id
  132 + this.loadData()
  133 + },
  134 +
  135 + methods: {
  136 +
  137 + loadData() {
  138 + getformApplyschooldetailApi(this.id).then(res => {
  139 + if (res) {
  140 + this.detailObj = res;
  141 + this.handleDatas()
  142 +
  143 + let q1 = {
  144 + title: '发起申请',
  145 + desc: this.detailObj.studentName,
  146 + time: this.detailObj.createdTime
  147 + }
  148 +
  149 + let s = ''
  150 + if (this.detailObj.status == 'wait') {
  151 + s = '(待处理)'
  152 + }else if (this.detailObj.status == 'passed') {
  153 + s = '(已通过)'
  154 + }else if (this.detailObj.status == 'rejected') {
  155 + s = '(已驳回)'
  156 + }
  157 + let q2 = {
  158 + title: '学校审批',
  159 + desc: this.detailObj.auditTeacher ? this.detailObj.auditTeacher : '-',
  160 + time: this.detailObj.auditTime,
  161 + // reply: this.detailObj.reply,
  162 + peo: s,
  163 + }
  164 + this.questions.push(q1)
  165 + if (this.detailObj.status != 'wait') {
  166 + this.questions.push(q2)
  167 + }
  168 + }
  169 + })
  170 + },
  171 +
  172 + handelCancel() {
  173 + putformApplyApi(this.id,{status: 'reject'}).then(res => {
  174 + if (res) {
  175 + uni.navigateBack({
  176 + delta: 1
  177 + });
  178 + }
  179 + })
  180 + },
  181 +
  182 + hancelSubmit() {
  183 + putformApplyApi(this.id,{status: 'pass'}).then(res => {
  184 + if (res) {
  185 + uni.navigateBack({
  186 + delta: 1
  187 + });
  188 + }
  189 + })
  190 + },
  191 +
  192 + getCategoryList(e) {
  193 + for (var i = 0; i < this.categoryList.length; i++) {
  194 + let item = this.categoryList[i]
  195 + if (e == item.value) {
  196 + return item.label
  197 + }
  198 + }
  199 + },
  200 +
  201 + timeFormat(timestamp, format = 'yyyy-mm-dd') {
  202 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : '--'
  203 + },
  204 +
  205 + handleDatas() { //处理获取的网络图片
  206 + if (this.detailObj.attachments) {
  207 + this.createdTime = this.$u.timeFormat(this.detailObj.createdTime / 1000, 'yyyy/mm/dd');
  208 + var originInfo = JSON.parse(this.detailObj.attachments);
  209 + this.attachments = this.attachments.concat(originInfo)
  210 + console.log("1---", originInfo, "2---", this.attachments)
  211 + if (originInfo && originInfo.length > 0) {
  212 + for (var i = 0; i < originInfo.length; i++) {
  213 + getImgUrlApi({
  214 + bucket: originInfo[i].bucket,
  215 + filePath: originInfo[i].object
  216 + }).then(res => {
  217 + this.picList.push(res.url)
  218 + console.log('picList...', this.picList)
  219 + })
  220 + }
  221 + }
  222 + }
  223 + },
  224 +
  225 + openLink(e) {
  226 + var _this = this
  227 +
  228 + uni.showLoading({
  229 + title: '努力加载中~',
  230 + mask: true
  231 + })
  232 +
  233 + getImgUrlApi({
  234 + bucket: e.bucket,
  235 + filePath: e.object
  236 + }).then(data => {
  237 + console.log("data...", data)
  238 + if (e.mime_type.indexOf("image") != -1) {
  239 + _this.openImage(data.url)
  240 + } else {
  241 + uni.downloadFile({
  242 + url: data.url,
  243 + success: function(res) {
  244 + var filePath = res.tempFilePath;
  245 + uni.openDocument({
  246 + filePath: filePath,
  247 + showMenu: true,
  248 + success: function(res) {
  249 + console.log('打开文档成功');
  250 + },
  251 + complete: function() {
  252 + uni.hideLoading();
  253 + }
  254 + });
  255 + }
  256 + });
  257 + }
  258 + })
  259 + },
  260 + openImage(imgPath) {
  261 + let array = new Array(1).fill(imgPath);
  262 + uni.previewImage({
  263 + urls: array,
  264 + success(res) {
  265 + uni.hideLoading();
  266 + console.log('openImage success');
  267 + },
  268 + fail(res) {
  269 + uni.hideLoading();
  270 + console.log('openImage fail:', res);
  271 + }
  272 + });
  273 + },
  274 + }
  275 + }
  276 +</script>
  277 +
  278 +<style>
  279 + page {
  280 + background-color: #F7F7F7;
  281 + }
  282 +</style>
  283 +
  284 +<style lang="scss" scoped>
  285 + .page {
  286 + padding: 16rpx 32rpx;
  287 +
  288 + .top {
  289 + padding: 40rpx 32rpx;
  290 + background-color: #fff;
  291 + border-radius: 10px;
  292 +
  293 + .title {
  294 + font-size: 20px;
  295 + font-family: PingFangSC-Semibold, PingFang SC;
  296 + font-weight: 600;
  297 + color: #000000;
  298 + }
  299 +
  300 + .t1 {
  301 + margin-top: 32rpx;
  302 + font-size: 13px;
  303 + font-family: PingFangSC-Regular, PingFang SC;
  304 + font-weight: 400;
  305 + color: rgba(0,0,0,0.6500);
  306 + }
  307 +
  308 + .t2 {
  309 + margin-top: 16rpx;
  310 + font-size: 13px;
  311 + font-family: PingFangSC-Regular, PingFang SC;
  312 + font-weight: 400;
  313 + color: rgba(0,0,0,0.6500);
  314 + }
  315 +
  316 + .status {
  317 + margin-top: 32rpx;
  318 + font-size: 13px;
  319 + font-family: PingFangSC-Regular, PingFang SC;
  320 + font-weight: 400;
  321 + color: #FFC200;
  322 + }
  323 + }
  324 +
  325 + .content {
  326 + padding: 40rpx 32rpx;
  327 + background-color: #fff;
  328 + border-radius: 10px;
  329 + margin-top: 16rpx;
  330 +
  331 + .c1 {
  332 + font-size: 16px;
  333 + font-family: PingFangSC-Semibold, PingFang SC;
  334 + font-weight: 600;
  335 + color: #000000;
  336 + }
  337 +
  338 + .c2 {
  339 + margin-top: 16rpx;
  340 + font-size: 14px;
  341 + font-family: PingFangSC-Regular, PingFang SC;
  342 + font-weight: 400;
  343 + color: rgba(0,0,0,0.6500);
  344 + }
  345 +
  346 + .grayV {
  347 + margin-top: 24rpx;
  348 + height: 98px;
  349 + background: #F7F7F7;
  350 + border-radius: 24px;
  351 + padding: 8rpx 16rpx;
  352 + position: relative;
  353 +
  354 + .g1 {
  355 + font-size: 16px;
  356 + font-family: PingFangSC-Semibold, PingFang SC;
  357 + font-weight: 600;
  358 + color: #000000;
  359 + }
  360 +
  361 + .timeline {
  362 + position: absolute;
  363 + left: 2rpx;
  364 + top: 72rpx;
  365 + width: 40rpx;
  366 + height: 100rpx;
  367 + }
  368 +
  369 + .start {
  370 + position: absolute;
  371 + left: 88rpx;
  372 + top: 68rpx;
  373 + font-size: 14px;
  374 + font-family: DINAlternate-Bold, DINAlternate;
  375 + font-weight: bold;
  376 + color: rgba(0,0,0,0.6500);
  377 + }
  378 +
  379 + .end {
  380 + position: absolute;
  381 + left: 88rpx;
  382 + top: 134rpx;
  383 + font-size: 14px;
  384 + font-family: DINAlternate-Bold, DINAlternate;
  385 + font-weight: bold;
  386 + color: rgba(0,0,0,0.6500);
  387 + }
  388 + }
  389 +
  390 + .fj_content {
  391 + margin-top: 8px;
  392 + background-color: #fff;
  393 +
  394 + .item {
  395 + width: 100%;
  396 + display: flex;
  397 + flex-direction: row;
  398 + flex-wrap: wrap;
  399 +
  400 + .p_item {
  401 + position: relative;
  402 + width: 120rpx;
  403 + height: 120rpx;
  404 + margin-right: 13px;
  405 + margin-bottom: 13px;
  406 +
  407 + .delete {
  408 + position: absolute;
  409 + width: 24rpx;
  410 + height: 24rpx;
  411 + top: -12rpx;
  412 + right: -12rpx;
  413 + z-index: 199;
  414 + }
  415 + }
  416 +
  417 + }
  418 +
  419 + }
  420 + }
  421 +
  422 + .timeb {
  423 + padding: 40rpx 36rpx;
  424 + background-color: #fff;
  425 + border-radius: 10px;
  426 + margin-top: 16rpx;
  427 + position: relative;
  428 +
  429 + .title {
  430 + font-size: 16px;
  431 + font-family: PingFangSC-Semibold, PingFang SC;
  432 + font-weight: 600;
  433 + color: #000000;
  434 + margin-bottom: 20rpx;
  435 + }
  436 +
  437 + .nodef {
  438 + display: flex;
  439 + justify-content: start;
  440 + margin-bottom: 30rpx;
  441 +
  442 + .node1 {
  443 + position: relative;
  444 + margin-top: 4px;
  445 +
  446 + .line {
  447 + position: absolute;
  448 + left: 5px;
  449 + width: 1px;
  450 + height: 100%;
  451 + background-color: #f7f7f7;
  452 + }
  453 + }
  454 +
  455 + .node2 {
  456 + margin-left: 10px;
  457 + }
  458 + }
  459 +
  460 + .u-node {
  461 + width: 8px;
  462 + height: 8px;
  463 + border-radius: 8rpx;
  464 + background: #E5E5E6;
  465 + }
  466 +
  467 + .u-order-title {
  468 + color: rgba(0,0,0,0.4500);
  469 + font-family: PingFangSC-Regular, PingFang SC;
  470 + font-weight: 400;
  471 + font-size: 24rpx;
  472 + }
  473 +
  474 + .u-order-desc {
  475 + font-size: 14px;
  476 + font-weight: bold;
  477 + color: rgba(0,0,0,1);
  478 + }
  479 +
  480 + .u-order-kf {
  481 + margin-top: 20px;
  482 + font-size: 14px;
  483 + font-weight: 400;
  484 + color: #8C8E91;
  485 + }
  486 +
  487 + .u-order-time {
  488 + font-size: 12px;
  489 + font-family: PingFangSC-Medium, PingFang SC;
  490 + font-weight: 500;
  491 + color: rgba(0,0,0,0.6500);
  492 + margin-left: 10px;
  493 + }
  494 +
  495 + .u-order-reply {
  496 + width: 245px;
  497 + padding: 10rpx 14rpx;
  498 + background: #F7F7F7;
  499 + border-radius: 24px;
  500 + margin-top: 14rpx;
  501 + }
  502 +
  503 + }
  504 +
  505 + .footer {
  506 + width: 100%;
  507 + height: 96rpx;
  508 + padding: 28rpx 30rpx;
  509 + background: #FFFFFF;
  510 + position: fixed;
  511 + bottom: 0;
  512 + left: 0;
  513 + z-index: 99;
  514 + border-top: 2rpx solid #E2E2E8;
  515 +
  516 + view {
  517 + display: inline-block;
  518 + }
  519 +
  520 + .left_btn {
  521 + width: 330rpx;
  522 + margin: 0 30rpx 0 0;
  523 + }
  524 +
  525 + .right_btn {
  526 + width: 330rpx;
  527 + }
  528 + }
  529 +
  530 + }
  531 +</style>
\ No newline at end of file
... ...
1 1 <template>
2 2 <view class="registration_review">
3   - <view class="search_box">
4   - <view class="check">
5   - <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
6   - <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
7   - v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
8   - activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
9   - </u-checkbox>
10   - </u-checkbox-group>
11   - </view>
12   -
13   - <view class="search">
14   - <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
15   - bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
16   - </u-search>
17   - </view>
18   -
19   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
  3 + <view class="search_box">
  4 + <!-- <view class="check">
  5 + <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
  6 + <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
  7 + v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
  8 + activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
  9 + </u-checkbox>
  10 + </u-checkbox-group>
  11 + </view> -->
  12 +
  13 + <!-- <view class="search">
  14 + <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  15 + bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
  16 + </u-search>
  17 + </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>
20 26 </view>
21 27
22 28 <u-sticky bgColor="#fff">
... ... @@ -68,8 +74,40 @@
68 74 <view v-else class="no_data">
69 75 <c-no-data></c-no-data>
70 76 </view>
71   -
72   - <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  77 +
  78 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  79 + <view class="popup">
  80 + <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
  81 + <view class="title">
  82 + 项目筛选
  83 + </view>
  84 + <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
  85 + </view>
  86 + <view class="search">
  87 + <u-search placeholder="请输入项目关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  88 + bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
  89 + </u-search>
  90 + </view>
  91 + <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
  92 + @scrolltolower="lower()">
  93 + <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
  94 + <view style="display: flex; align-items: center; justify-content: space-between;">
  95 + <view class="item_title">
  96 + {{item.name}}
  97 + </view>
  98 + <image v-if="item.id == projectId" style="width: 20px; height: 20px;" src="/static/img/home/popselect.png" mode=""></image>
  99 + </view>
  100 + </view>
  101 + </scroll-view>
  102 + <view v-else class="no_data" @click="jumpVerified">
  103 + <view class="text_black_28">
  104 + 暂未搜索到该项目
  105 + </view>
  106 + </view>
  107 + </view>
  108 + </u-popup>
  109 +
  110 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
73 111 <view class="popup_search">
74 112 <view class="content">
75 113 <view class="title">按项目筛选</view>
... ... @@ -101,7 +139,7 @@
101 139 </view>
102 140 </view>
103 141 </view>
104   - </u-popup>
  142 + </u-popup> -->
105 143 </view>
106 144 </template>
107 145
... ... @@ -151,8 +189,13 @@
151 189 projectId: '',
152 190 showTime: false,
153 191 timeValue: '',
154   - switchValue: false,
155   -
  192 + switchValue: false,
  193 +
  194 + curNow: 1,
  195 + sxsearch: '',
  196 + works: [],
  197 + workspage: 1,
  198 + workstotal: 0,
156 199 }
157 200 },
158 201
... ... @@ -161,11 +204,13 @@
161 204 this.studentId = option.studentId;
162 205 this.projectId = option.projectId;
163 206
164   - this.$store.dispatch(`home/getProjectList`, {
165   - pageSize: -1,
166   - })
  207 + // this.$store.dispatch(`home/getProjectList`, {
  208 + // pageSize: -1,
  209 + // })
167 210
168   - this.search.keySearch = '';
  211 + // this.search.keySearch = '';
  212 +
  213 + this.worksloadData()
169 214
170 215 if (option && option.category) {
171 216 this.search.category = option.category;
... ... @@ -176,10 +221,17 @@
176 221 '';
177 222 }
178 223
  224 + // if (option && option.status) {
  225 + // this.search.status = 'unread';
  226 + // this.checkboxValue = ['未阅'];
  227 + // this.switchValue = true;
  228 + // }
  229 +
179 230 if (option && option.status) {
180   - this.search.status = 'unread';
181   - this.checkboxValue = ['未阅'];
182   - this.switchValue = true;
  231 + // this.search.status = 'wait';
  232 + this.curNow = 0;
  233 + // this.checkboxValue = ['待处理'];
  234 + // this.switchValue = true;
183 235 }
184 236
185 237 this.finished = false;
... ... @@ -189,6 +241,10 @@
189 241 },
190 242
191 243 onShow() {
  244 + this.finished = false;
  245 + this.loading = "loadmore";
  246 + this.page = 0;
  247 + this.list = [];
192 248 this._getList();
193 249 },
194 250
... ... @@ -201,6 +257,20 @@
201 257
202 258 methods: {
203 259
  260 + searchCli() {
  261 + this.$u.route('/pages/main/home/search/search?type=log&searchkey=' + this.keyword);
  262 + },
  263 +
  264 + sectionChange(index) {
  265 + this.curNow = index;
  266 +
  267 + this.finished = false;
  268 + this.loading = "loadmore";
  269 + this.page = 0;
  270 + this.list = [];
  271 + this._getList();
  272 + },
  273 +
204 274 getCreatedTime(e) {
205 275 let time = this.$u.timeFormat(e.logTime / 1000, 'yyyy/mm/dd');
206 276 if (e.category == "weekly") {
... ... @@ -313,8 +383,12 @@
313 383 params.pageNumber = requestParams.page + 1;
314 384 params.pageSize = 5;
315 385
316   - if (search.status) {
317   - params.status = search.status;
  386 + // if (search.status) {
  387 + // params.status = search.status;
  388 + // }
  389 +
  390 + if (this.curNow == 0) {
  391 + params.status = 'unread';
318 392 }
319 393
320 394 if (search.category) {
... ... @@ -391,7 +465,53 @@
391 465
392 466 this.show = false;
393 467 },
394   -
  468 +
  469 + workSearch() {
  470 + uni.hideKeyboard();
  471 + this.works = []
  472 + this.worksloadData()
  473 + },
  474 +
  475 + lower() {
  476 + setTimeout(() => {
  477 + this.worksloadData(true);
  478 + }, 200)
  479 + },
  480 +
  481 + worksloadData(e) {
  482 + let params = {}
  483 + // this.loading = 'loading'
  484 +
  485 + if (e) {
  486 + if (this.total <= this.works.length) {
  487 + // this.loading = 'nomore'
  488 + return
  489 + }
  490 + this.workspage++
  491 + } else {
  492 + this.workspage = 1
  493 + }
  494 + params['pageNumber'] = this.workspage
  495 + if (this.sxsearch) {
  496 + params['keyWord'] = this.sxsearch
  497 + }
  498 + getProjectListApi(params).then(async res => {
  499 + if (res) {
  500 + this.total = res.total
  501 + // this.loading = 'loadmore'
  502 + this.works = this.works.concat(res.records)
  503 + }
  504 + })
  505 + },
  506 + popupSelItem(item) {
  507 + this.show = false
  508 + this.projectId = item.id;
  509 + this.finished = false;
  510 + this.loading = "loadmore";
  511 + this.page = 0;
  512 + this.list = [];
  513 + this._getList();
  514 + },
395 515 }
396 516 }
397 517 </script>
... ... @@ -610,6 +730,53 @@
610 730 width: 346rpx;
611 731 }
612 732 }
  733 + }
  734 +
  735 + .popup {
  736 + height: 500px;
  737 + padding: 19px 16px;
  738 +
  739 + .title {
  740 + font-size: 18px;
  741 + font-family: PingFangSC-Medium, PingFang SC;
  742 + font-weight: 500;
  743 + color: #000000;
  744 + }
  745 +
  746 + .close {
  747 + width: 22px;
  748 + height: 22px;
  749 + }
  750 +
  751 + .item_box {
  752 + border-radius: 4px;
  753 + margin: 0 0 48rpx;
  754 +
  755 + .item_title {
  756 + height: 20px;
  757 + font-size: 14px;
  758 + font-family: PingFangSC-Regular, PingFang SC;
  759 + font-weight: 400;
  760 + color: rgba(0, 0, 0, 0.65);
  761 + line-height: 20px;
  762 + }
  763 +
  764 + }
  765 +
  766 + .no_data {
  767 + width: 100%;
  768 + margin-top: 310rpx;
  769 +
  770 + .text_black_28 {
  771 + font-size: 14px;
  772 + font-family: PingFangSC-Light, PingFang SC;
  773 + font-weight: 300;
  774 + color: rgba(0,0,0,0.65);
  775 + text-align: center;
  776 + }
  777 +
  778 + }
  779 +
613 780 }
614 781 }
615 782 </style>
... ...
1 1 <template>
2 2 <view class="registration_review">
3   - <view class="search_box">
4   - <view class="check">
5   - <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
6   - <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
7   - v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
8   - activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
9   - </u-checkbox>
10   - </u-checkbox-group>
11   - </view>
12   -
13   - <view class="search">
14   - <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
15   - bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
16   - </u-search>
17   - </view>
18   -
19   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
  3 + <view class="search_box">
  4 + <!-- <view class="check">
  5 + <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
  6 + <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
  7 + v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
  8 + activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
  9 + </u-checkbox>
  10 + </u-checkbox-group>
  11 + </view> -->
  12 +
  13 + <!-- <view class="search">
  14 + <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  15 + bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
  16 + </u-search>
  17 + </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>
20 26 </view>
21 27
22 28 <view class="list_box" v-if="list.length > 0">
... ... @@ -59,9 +65,41 @@
59 65 </view>
60 66 <view v-else class="no_data">
61 67 <c-no-data></c-no-data>
62   - </view>
  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 == projectId" style="width: 20px; height: 20px;" src="/static/img/home/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>
63 101
64   - <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  102 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
65 103 <view class="popup_search">
66 104 <view class="content">
67 105 <view class="title">按项目筛选</view>
... ... @@ -94,7 +132,7 @@
94 132 </view>
95 133
96 134 </view>
97   - </u-popup>
  135 + </u-popup> -->
98 136
99 137 </view>
100 138 </template>
... ... @@ -132,32 +170,44 @@
132 170
133 171 },
134 172 projectId: '',
135   - switchValue: false,
  173 + switchValue: false,
  174 + curNow: 1,
  175 + sxsearch: '',
  176 + works: [],
  177 + workspage: 1,
  178 + workstotal: 0,
136 179 }
137 180 },
138 181
139 182 onLoad(option) {
140 183 console.log(option)
141   - this.$store.dispatch(`home/getProjectList`, {
142   - pageSize: -1,
143   - })
144   -
145   - this.search.keySearch = '';
146   -
  184 + // this.$store.dispatch(`home/getProjectList`, {
  185 + // pageSize: -1,
  186 + // })
  187 +
  188 + // this.search.keySearch = '';
  189 +
  190 + this.worksloadData()
  191 +
147 192 if (option && option.status) {
148   - this.search.status = 'wait';
149   - this.checkboxValue = ['待审核'];
150   - this.switchValue = true;
  193 + // this.search.status = 'wait';
  194 + // this.checkboxValue = ['待审核'];
  195 + // this.switchValue = true;
  196 + this.curNow = 0;
151 197 }
152 198
153   - this.finished = false;
154   - this.loading = "loadmore";
155   - this.page = 0;
156   - this.list = [];
  199 + // this.finished = false;
  200 + // this.loading = "loadmore";
  201 + // this.page = 0;
  202 + // this.list = [];
157 203
158 204 },
159 205
160 206 onShow() {
  207 + this.finished = false;
  208 + this.loading = "loadmore";
  209 + this.page = 0;
  210 + this.list = [];
161 211 this._getList();
162 212 },
163 213
... ... @@ -170,7 +220,21 @@
170 220
171 221 },
172 222
173   - methods: {
  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 + },
174 238
175 239 handelDetail(record) {
176 240 this.$u.route({
... ... @@ -228,8 +292,14 @@
228 292 params.pageNumber = requestParams.page + 1;
229 293 params.pageSize = 5;
230 294
231   - if (search.status) {
232   - params.status = search.status;
  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';
233 303 }
234 304
235 305 if (this.keyword) {
... ... @@ -300,7 +370,53 @@
300 370
301 371 this.show = false;
302 372 },
303   -
  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 + getProjectListApi(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.projectId = item.id;
  414 + this.finished = false;
  415 + this.loading = "loadmore";
  416 + this.page = 0;
  417 + this.list = [];
  418 + this._getList();
  419 + },
304 420 }
305 421 }
306 422 </script>
... ... @@ -480,6 +596,53 @@
480 596 width: 346rpx;
481 597 }
482 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 +
483 646 }
484 647 }
485 648 </style>
... ...
... ... @@ -216,106 +216,54 @@
216 216 })
217 217 },
218 218
219   - openLink(e) {
220   - var _this = this
221   - this.mFileDir = e.filename.substring(0, e.filename.lastIndexOf('.'))
222   - this.mFileType = e.filename.substring(e.filename.lastIndexOf('.'), e.filename.length)
223   - getImgUrlApi({
224   - bucket: e.bucket,
225   - filePath: e.object
226   - }).then(data => {
227   - console.log("data...", data)
228   - if (e.mime_type.indexOf("image") != -1) {
229   - _this.openImage(data.url)
230   - } else {
231   - uni.downloadFile({
232   - url: data.url,
233   - filePath: wx.env.USER_DATA_PATH + '/' + _this.mFileDir + this.mFileType,
234   - success: (res) => {
235   - if (res.statusCode === 200) {
236   - uni.showLoading();
237   - console.log('download succ', res)
238   - let fileMgr = wx.getFileSystemManager();
239   - let filePath = res.filePath
240   - uni.saveFile({
241   - tempFilePath: filePath,
242   - success: function(res) {
243   - var savedFilePath = res.savedFilePath;
244   - /* 删除缓存 */
245   - fileMgr.unlink({
246   - filePath: wx.env.USER_DATA_PATH +
247   - '/' +
248   - _this.mFileDir + _this
249   - .mFileType,
250   - success: function(res) {
251   - console.log(
252   - 'unlink success:',
253   - res);
254   - }
255   - })
256   - _this.openDoc()
257   - },
258   - fail: function(res) {
259   - console.log('save fail', res);
260   - _this.createFile()
261   - }
262   - })
263   - }
264   - }
265   - });
266   - }
267   - })
268   - },
269   -
270   - createFile() {
271   - let fileMgr = wx.getFileSystemManager();
272   - var _this = this
273   - //利用access方法判断文件是否可用
274   - fileMgr.access({
275   - path: wx.env.USER_DATA_PATH + '/' + _this.mFileDir,
276   - success: (res) => {
277   - console.log('check success:', res);
278   - _this.openDoc()
279   - },
280   - fail: (res) => {
281   - console.log('check fail.', res);
282   - fileMgr.mkdir({
283   - dirPath: wx.env.USER_DATA_PATH + '/' + _this.mFileDir,
284   - success: (res) => {
285   - console.log('mk dir success:', res);
286   - _this.openDoc()
287   - },
288   - fail: (res) => {
289   - console.log('mk dir fail:', res);
290   - uni.hideLoading();
291   - }
292   - });
293   - }
294   - });
295   - },
296   -
297   - openDoc() {
298   - uni.openDocument({
299   - filePath: wx.env.USER_DATA_PATH + '/' + this.mFileDir + this.mFileType,
300   - showMenu: true,
301   - success: function(res) {
302   - uni.hideLoading();
303   - console.log('openDoc succ');
304   - }
305   - });
306   - },
307   -
308   - openImage(imgPath) {
309   - let array = new Array(1).fill(imgPath);
310   - uni.previewImage({
311   - urls: array,
312   - success(res) {
313   - console.log('openImage success');
314   - },
315   - fail(res) {
316   - console.log('openImage fail:', res);
317   - }
318   - });
  219 + openLink(e) {
  220 + var _this = this
  221 +
  222 + uni.showLoading({
  223 + title: '努力加载中~',
  224 + mask: true
  225 + })
  226 +
  227 + getImgUrlApi({
  228 + bucket: e.bucket,
  229 + filePath: e.object
  230 + }).then(data => {
  231 + console.log("data...", data)
  232 + if (e.mime_type.indexOf("image") != -1) {
  233 + _this.openImage(data.url)
  234 + } else {
  235 + uni.downloadFile({
  236 + url: data.url,
  237 + success: function(res) {
  238 + var filePath = res.tempFilePath;
  239 + uni.openDocument({
  240 + filePath: filePath,
  241 + showMenu: true,
  242 + success: function(res) {
  243 + console.log('打开文档成功');
  244 + },
  245 + complete: function() {
  246 + uni.hideLoading();
  247 + }
  248 + });
  249 + }
  250 + });
  251 + }
  252 + })
  253 + },
  254 + openImage(imgPath) {
  255 + let array = new Array(1).fill(imgPath);
  256 + uni.previewImage({
  257 + urls: array,
  258 + success(res) {
  259 + uni.hideLoading();
  260 + console.log('openImage success');
  261 + },
  262 + fail(res) {
  263 + uni.hideLoading();
  264 + console.log('openImage fail:', res);
  265 + }
  266 + });
319 267 },
320 268
321 269 deletePic(index) {
... ...
1 1 <template>
2 2 <view class="registration_review">
3   - <view class="search_box" v-if="!studentId">
4   - <view class="top">
5   - <view class="check">
6   - <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
7   - <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
8   - v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
9   - activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
10   - </u-checkbox>
11   - </u-checkbox-group>
12   - </view>
13   -
14   - <view class="search">
15   - <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
16   - bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
17   - </u-search>
18   - </view>
19   -
20   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
21   - </view>
  3 + <view class="search_box">
  4 + <!-- <view class="check">
  5 + <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
  6 + <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
  7 + v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
  8 + activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
  9 + </u-checkbox>
  10 + </u-checkbox-group>
  11 + </view> -->
  12 +
  13 + <!-- <view class="search">
  14 + <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  15 + bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
  16 + </u-search>
  17 + </view> -->
  18 + <view style="width: 148px;">
  19 + <u-subsection :list="['待审核','全部']" :current="curNow" :fontSize="26" :activeColor="'#000'"
  20 + @change="sectionChange"></u-subsection>
  21 + </view>
  22 + <view style="display: flex; justify-content: space-between; align-items: center;">
  23 + <u-icon slot="icon" size="40" :name="'/static/img/home/search.png'" @click="searchCli"></u-icon>
  24 + <view style="width: 16px;"></view>
  25 + <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true"></u-icon>
  26 + </view>
22 27 </view>
23 28
24 29 <view class="list_box" v-if="list.length > 0">
... ... @@ -60,8 +65,41 @@
60 65 <view v-else class="no_data">
61 66 <c-no-data></c-no-data>
62 67 </view>
63   -
64   - <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  68 +
  69 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  70 + <view class="popup">
  71 + <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
  72 + <view class="title">
  73 + 项目筛选
  74 + </view>
  75 + <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
  76 + </view>
  77 + <view class="search">
  78 + <u-search placeholder="请输入项目关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  79 + bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
  80 + </u-search>
  81 + </view>
  82 + <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
  83 + @scrolltolower="lower()">
  84 + <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
  85 + <view style="display: flex; align-items: center; justify-content: space-between;">
  86 + <view class="item_title">
  87 + {{item.name}}
  88 + </view>
  89 + <image v-if="item.id == projectId" style="width: 20px; height: 20px;"
  90 + src="/static/img/home/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">
65 103 <view class="popup_search">
66 104 <view class="content">
67 105 <view class="title">按项目筛选</view>
... ... @@ -94,7 +132,7 @@
94 132 </view>
95 133
96 134 </view>
97   - </u-popup>
  135 + </u-popup> -->
98 136
99 137 </view>
100 138 </template>
... ... @@ -144,7 +182,11 @@
144 182 list: [], //列表必须为key list的数组
145 183 projectId: '',
146 184 switchValue: false,
147   -
  185 + curNow: 1,
  186 + sxsearch: '',
  187 + works: [],
  188 + workspage: 1,
  189 + workstotal: 0,
148 190 }
149 191 },
150 192
... ... @@ -153,16 +195,19 @@
153 195 this.studentId = option.studentId;
154 196 this.projectId = option.projectId;
155 197
156   - this.$store.dispatch(`home/getProjectList`, {
157   - pageSize: -1,
158   - })
  198 + // this.$store.dispatch(`home/getProjectList`, {
  199 + // pageSize: -1,
  200 + // })
  201 +
  202 + this.worksloadData()
159 203
160   - this.search.keySearch = '';
  204 + // this.search.keySearch = '';
161 205
162 206 if (option && option.status) {
163   - this.search.status = 'stay_examine';
164   - this.checkboxValue = ['待批阅'];
165   - this.switchValue = true;
  207 + // this.search.status = 'stay_examine';
  208 + // this.checkboxValue = ['待批阅'];
  209 + // this.switchValue = true;
  210 + this.curNow = 0;
166 211 }
167 212
168 213 this.finished = false;
... ... @@ -172,6 +217,10 @@
172 217 },
173 218
174 219 onShow() {
  220 + this.finished = false;
  221 + this.loading = "loadmore";
  222 + this.page = 0;
  223 + this.list = [];
175 224 this._getList();
176 225 },
177 226
... ... @@ -184,7 +233,22 @@
184 233
185 234 },
186 235
187   - methods: {
  236 + methods: {
  237 +
  238 + searchCli() {
  239 + this.$u.route('/pages/main/home/search/search?type=report&searchkey=' + this.keyword);
  240 + },
  241 +
  242 + sectionChange(index) {
  243 + this.curNow = index;
  244 +
  245 + this.finished = false;
  246 + this.loading = "loadmore";
  247 + this.page = 0;
  248 + this.list = [];
  249 + this._getList();
  250 + },
  251 +
188 252 getNameLastTwo(value) {
189 253 if (value && value.length > 3) {
190 254 return value.substring(value.length - 3)
... ... @@ -262,8 +326,12 @@
262 326 params.pageNumber = requestParams.page + 1;
263 327 params.pageSize = 5;
264 328
265   - if (search.status) {
266   - params.status = search.status;
  329 + // if (search.status) {
  330 + // params.status = search.status;
  331 + // }
  332 +
  333 + if (this.curNow == 0) {
  334 + params.status = 'stay_examine';
267 335 }
268 336
269 337 if (this.keyword) {
... ... @@ -338,7 +406,53 @@
338 406
339 407 this.show = false;
340 408 },
341   -
  409 +
  410 + workSearch() {
  411 + uni.hideKeyboard();
  412 + this.works = []
  413 + this.worksloadData()
  414 + },
  415 +
  416 + lower() {
  417 + setTimeout(() => {
  418 + this.worksloadData(true);
  419 + }, 200)
  420 + },
  421 +
  422 + worksloadData(e) {
  423 + let params = {}
  424 + // this.loading = 'loading'
  425 +
  426 + if (e) {
  427 + if (this.total <= this.works.length) {
  428 + // this.loading = 'nomore'
  429 + return
  430 + }
  431 + this.workspage++
  432 + } else {
  433 + this.workspage = 1
  434 + }
  435 + params['pageNumber'] = this.workspage
  436 + if (this.sxsearch) {
  437 + params['keyWord'] = this.sxsearch
  438 + }
  439 + getProjectListApi(params).then(async res => {
  440 + if (res) {
  441 + this.total = res.total
  442 + // this.loading = 'loadmore'
  443 + this.works = this.works.concat(res.records)
  444 + }
  445 + })
  446 + },
  447 + popupSelItem(item) {
  448 + this.show = false
  449 + this.projectId = item.id;
  450 + this.finished = false;
  451 + this.loading = "loadmore";
  452 + this.page = 0;
  453 + this.list = [];
  454 + this._getList();
  455 + },
342 456 }
343 457 }
344 458 </script>
... ... @@ -350,32 +464,20 @@
350 464 height: auto;
351 465 background-color: #F7F7F7;
352 466
353   - .search_box {
354   - padding: 36rpx 30rpx 0;
355   - background-color: #FFFFFF;
356   -
357   - .top {
358   - display: flex;
359   - flex-flow: row nowrap;
360   - justify-content: space-between;
361   - padding: 0 0 30rpx 0;
362   -
363   - .check {
364   - padding: 20rpx 0 0 0;
365   - }
366   -
367   - .search {
368   - width: 468rpx;
369   - }
370   - }
371   -
372   - .bottom {
373   - .time {
374   - padding: 30rpx 0 30rpx 40rpx;
375   - }
376   - }
377   -
378   -
  467 + .search_box {
  468 + padding: 36rpx 30rpx 12rpx;
  469 + background-color: #FFFFFF;
  470 + display: flex;
  471 + flex-flow: row nowrap;
  472 + justify-content: space-between;
  473 +
  474 + .check {
  475 + padding: 20rpx 0 0 0;
  476 + }
  477 +
  478 + .search {
  479 + width: 468rpx;
  480 + }
379 481 }
380 482
381 483 .list_box {
... ... @@ -545,6 +647,53 @@
545 647 width: 346rpx;
546 648 }
547 649 }
  650 + }
  651 +
  652 + .popup {
  653 + height: 500px;
  654 + padding: 19px 16px;
  655 +
  656 + .title {
  657 + font-size: 18px;
  658 + font-family: PingFangSC-Medium, PingFang SC;
  659 + font-weight: 500;
  660 + color: #000000;
  661 + }
  662 +
  663 + .close {
  664 + width: 22px;
  665 + height: 22px;
  666 + }
  667 +
  668 + .item_box {
  669 + border-radius: 4px;
  670 + margin: 0 0 48rpx;
  671 +
  672 + .item_title {
  673 + height: 20px;
  674 + font-size: 14px;
  675 + font-family: PingFangSC-Regular, PingFang SC;
  676 + font-weight: 400;
  677 + color: rgba(0, 0, 0, 0.65);
  678 + line-height: 20px;
  679 + }
  680 +
  681 + }
  682 +
  683 + .no_data {
  684 + width: 100%;
  685 + margin-top: 310rpx;
  686 +
  687 + .text_black_28 {
  688 + font-size: 14px;
  689 + font-family: PingFangSC-Light, PingFang SC;
  690 + font-weight: 300;
  691 + color: rgba(0, 0, 0, 0.65);
  692 + text-align: center;
  693 + }
  694 +
  695 + }
  696 +
548 697 }
549 698 }
550 699 </style>
... ...
1 1 <template>
2 2 <view class="registration_review">
3   - <view class="search_box">
4   - <view class="top">
5   - <view class="check">
6   - <u-checkbox-group v-model="checkboxValue" placement="column" @change="checkboxChange">
7   - <u-checkbox :customStyle="{marginBottom: '8px'}" shape="circle"
8   - v-for="(item, index) in checkboxList" :key="index" :label="item.name" :name="item.name"
9   - activeColor="#06B079" size="28rpx" labelSize="28rpx" labelColor="#202131">
10   - </u-checkbox>
11   - </u-checkbox-group>
12   - </view>
13   -
14   - <view class="search">
15   - <u-search placeholder="请输入学生姓名/学号/手机号" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
16   - bgColor="#F4F4F4" :showAction="false" shape="square" v-model="keyword" @search="handelSearch">
17   - </u-search>
18   - </view>
19   -
20   - <view class="icon">
21   - <view :style="{position:'relative', top:'14rpx', right:'18rpx'}">
22   - <u-icon slot="icon" size="40" :name="'/static/img/home/dateIcon.png'" @click="showTime = true">
23   - </u-icon>
24   - </view>
25   - <u-icon slot="icon" size="40" :name="'/static/img/home/selectIcon.png'" @click="show = true">
26   - </u-icon>
27   - </view>
28   -
29 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>
30 8 </view>
31   - <view class="bottom" :style="{padding:'0 0 20rpx 0'}">
32   - <u-calendar :minDate="minDate" :maxDate="maxDate" :monthNum="25" :show="showTime"
33   - :defaultDate="defaultDateMultiple" @close="showTime = false" :showSubtitle="false" color="#06B079"
34   - @confirm="confirm">
35   - </u-calendar>
36   - <!-- <view class="time">{{timeValue}}</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>
37 15 </view>
38 16 </view>
39 17
  18 + <u-calendar :minDate="minDate" :maxDate="maxDate" :monthNum="25" :show="showTime" :defaultDate="defaultDateMultiple"
  19 + @close="showTime = false" :showSubtitle="false" color="#06B079" @confirm="confirm">
  20 + </u-calendar>
  21 +
40 22 <view class="list_box" v-if="list.length > 0">
41 23 <view class="item" v-for="(item, i) in list" :key="i">
42 24
... ... @@ -54,10 +36,10 @@
54 36 <view class="avatar">{{getNameLastTwo(item.studentName)}}</view>
55 37 <view class="name">{{overflowHide(item.studentName)}}</view>
56 38 <view class="number">{{item.studentNumber}}</view>
57   - </view>
58   - <view class="company">
59   - <text>实习项目</text>
60   - <text>{{item.projectName || '--'}}</text>
  39 + </view>
  40 + <view class="company">
  41 + <text>实习项目</text>
  42 + <text>{{item.projectName || '--'}}</text>
61 43 </view>
62 44 <view class="company">
63 45 <text>班级</text>
... ... @@ -79,8 +61,41 @@
79 61 <view v-else class="no_data">
80 62 <c-no-data></c-no-data>
81 63 </view>
82   -
83   - <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  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 == projectId" style="width: 20px; height: 20px;"
  86 + src="/static/img/home/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">
84 99 <view class="popup_search">
85 100 <view class="content">
86 101 <view class="title">按项目筛选</view>
... ... @@ -113,7 +128,7 @@
113 128 </view>
114 129
115 130 </view>
116   - </u-popup>
  131 + </u-popup> -->
117 132
118 133 </view>
119 134 </template>
... ... @@ -165,29 +180,46 @@
165 180 defaultDateMultiple: [`${year}-${month}-${date}`],
166 181 list: [], //列表必须为key list的数组
167 182 projectId: '',
168   - switchValue: false,
169   -
  183 + switchValue: false,
  184 +
  185 + curNow: 1,
  186 + sxsearch: '',
  187 + works: [],
  188 + workspage: 1,
  189 + workstotal: 0,
170 190 }
171 191 },
172 192
173 193 onLoad(option) {
174   - this.$store.dispatch(`home/getProjectList`, {
175   - pageSize: -1,
176   - })
177   -
178   - this.search.keySearch = '';
179   -
180   - this.finished = false;
181   - this.loading = "loadmore";
182   - this.page = 0;
183   - this.list = [];
184   -
185   -
  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 +
186 214
187 215 },
188 216
189   - onShow() {
190   - this._getList();
  217 + onShow() {
  218 + this.finished = false;
  219 + this.loading = "loadmore";
  220 + this.page = 0;
  221 + this.list = [];
  222 + this._getList();
191 223 },
192 224
193 225 computed: {
... ... @@ -199,7 +231,22 @@
199 231
200 232 },
201 233
202   - methods: {
  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 +
203 250
204 251 getNameLastTwo(value) {
205 252 if (value && value.length > 3) {
... ... @@ -286,8 +333,12 @@
286 333 params.pageNumber = requestParams.page + 1;
287 334 params.pageSize = 5;
288 335
289   - if (search.waitAttendance) {
290   - params.waitAttendance = search.waitAttendance;
  336 + // if (search.waitAttendance) {
  337 + // params.waitAttendance = search.waitAttendance;
  338 + // }
  339 +
  340 + if (this.curNow == 0) {
  341 + params.waitAttendance = 'not_attendance';
291 342 }
292 343
293 344 if (this.keyword) {
... ... @@ -361,7 +412,54 @@
361 412
362 413 this.show = false;
363 414 },
364   -
  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 + getProjectListApi(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.projectId = item.id;
  456 + this.finished = false;
  457 + this.loading = "loadmore";
  458 + this.page = 0;
  459 + this.list = [];
  460 + this._getList();
  461 + },
  462 +
365 463 }
366 464 }
367 465 </script>
... ... @@ -373,36 +471,52 @@
373 471 height: auto;
374 472 background-color: #F7F7F7;
375 473
376   - .search_box {
377   - padding: 36rpx 30rpx 0;
378   - background-color: #FFFFFF;
379   -
380   - .top {
381   - display: flex;
382   - flex-flow: row nowrap;
383   - justify-content: space-between;
384   -
385   - .check {
386   - padding: 20rpx 0 0 0;
387   - }
388   -
389   - .search {
390   - width: 410rpx;
391   - }
392   -
393   - .icon {
394   - display: flex;
395   - flex-flow: row nowrap;
396   - }
397   - }
398   -
399   - .bottom {
400   - .time {
401   - padding: 30rpx 0 30rpx 40rpx;
402   - }
403   - }
404   -
405   -
  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 + }
406 520 }
407 521
408 522 .list_box {
... ... @@ -469,20 +583,20 @@
469 583 flex-flow: row nowrap;
470 584 margin: 0 0 30rpx 0;
471 585
472   - text {
  586 + text {
473 587 width: 130rpx;
474 588 font-size: 28rpx;
475 589 line-height: 32rpx;
476 590 color: #909097;
477 591 margin: 0 0 0 16rpx;
478   - }
479   -
480   - text:first-child {
481   - text-align: justify;
482   - text-align-last: justify;
483 592 }
484 593
485   - text:last-child {
  594 + text:first-child {
  595 + text-align: justify;
  596 + text-align-last: justify;
  597 + }
  598 +
  599 + text:last-child {
486 600 width: 400rpx;
487 601 color: #202131;
488 602 margin: 0 0 0 30rpx;
... ... @@ -521,32 +635,32 @@
521 635 color: #202131;
522 636 }
523 637
524   - .scroll {
525   - max-height: 60vh;
526   -
527   - .item {
528   -
529   - view {
530   - display: flex;
531   - flex-flow: row wrap;
532   - align-items: center;
533   - width: 500rpx;
534   - height: 74rpx;
535   - border-radius: 4rpx;
536   - border: 2rpx solid #C1C1C9;
537   - margin: 0 10rpx 20rpx;
538   - font-size: 24rpx;
539   - line-height: 32rpx;
540   - color: #C0C0C9;
541   - padding: 16rpx 20rpx;
542   - }
543   -
544   - .selectItem {
545   - background-color: #06B079;
546   - color: #FFFFFF;
547   - border: 2rpx solid #06B079;
548   - }
549   - }
  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: #06B079;
  660 + color: #FFFFFF;
  661 + border: 2rpx solid #06B079;
  662 + }
  663 + }
550 664 }
551 665
552 666 .time {
... ... @@ -593,6 +707,53 @@
593 707 width: 346rpx;
594 708 }
595 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 +
596 757 }
597 758 }
598 759 </style>
... ...
... ... @@ -99,8 +99,12 @@
99 99
100 100 openLink(e) {
101 101 var _this = this
102   - this.mFileDir = e.filename.substring(0, e.filename.lastIndexOf('.'))
103   - this.mFileType = e.filename.substring(e.filename.lastIndexOf('.'), e.filename.length)
  102 +
  103 + uni.showLoading({
  104 + title: '努力加载中~',
  105 + mask: true
  106 + })
  107 +
104 108 getImgUrlApi({
105 109 bucket: e.bucket,
106 110 filePath: e.object
... ... @@ -111,89 +115,34 @@
111 115 } else {
112 116 uni.downloadFile({
113 117 url: data.url,
114   - filePath: wx.env.USER_DATA_PATH + '/' + _this.mFileDir + this.mFileType,
115   - success: (res) => {
116   - if (res.statusCode === 200) {
117   - uni.showLoading();
118   - console.log('download succ', res)
119   - let fileMgr = wx.getFileSystemManager();
120   - let filePath = res.filePath
121   - uni.saveFile({
122   - tempFilePath: filePath,
123   - success: function(res) {
124   - var savedFilePath = res.savedFilePath;
125   - /* 删除缓存 */
126   - fileMgr.unlink({
127   - filePath: wx.env.USER_DATA_PATH +
128   - '/' +
129   - _this.mFileDir + _this
130   - .mFileType,
131   - success: function(res) {
132   - console.log(
133   - 'unlink success:',
134   - res);
135   - }
136   - })
137   - _this.openDoc()
138   - },
139   - fail: function(res) {
140   - console.log('save fail', res);
141   - _this.createFile()
142   - }
143   - })
144   - }
  118 + success: function(res) {
  119 + var filePath = res.tempFilePath;
  120 + uni.openDocument({
  121 + filePath: filePath,
  122 + showMenu: true,
  123 + success: function(res) {
  124 + console.log('打开文档成功');
  125 + },
  126 + complete: function() {
  127 + uni.hideLoading();
  128 + }
  129 + });
145 130 }
146 131 });
147 132 }
148 133 })
149 134 },
150 135
151   - createFile() {
152   - let fileMgr = wx.getFileSystemManager();
153   - var _this = this
154   - //利用access方法判断文件是否可用
155   - fileMgr.access({
156   - path: wx.env.USER_DATA_PATH + '/' + _this.mFileDir,
157   - success: (res) => {
158   - console.log('check success:', res);
159   - _this.openDoc()
160   - },
161   - fail: (res) => {
162   - console.log('check fail.', res);
163   - fileMgr.mkdir({
164   - dirPath: wx.env.USER_DATA_PATH + '/' + _this.mFileDir,
165   - success: (res) => {
166   - console.log('mk dir success:', res);
167   - _this.openDoc()
168   - },
169   - fail: (res) => {
170   - console.log('mk dir fail:', res);
171   - uni.hideLoading();
172   - }
173   - });
174   - }
175   - });
176   - },
177   -
178   - openDoc() {
179   - uni.openDocument({
180   - filePath: wx.env.USER_DATA_PATH + '/' + this.mFileDir + this.mFileType,
181   - showMenu: true,
182   - success: function(res) {
183   - uni.hideLoading();
184   - console.log('openDoc succ');
185   - }
186   - });
187   - },
188   -
189 136 openImage(imgPath) {
190 137 let array = new Array(1).fill(imgPath);
191 138 uni.previewImage({
192 139 urls: array,
193 140 success(res) {
  141 + uni.hideLoading();
194 142 console.log('openImage success');
195 143 },
196 144 fail(res) {
  145 + uni.hideLoading();
197 146 console.log('openImage fail:', res);
198 147 }
199 148 });
... ...
... ... @@ -48,7 +48,7 @@
48 48 <text>实践课程</text>
49 49 <text class="value_type">{{interDetail.courseName}}</text>
50 50 </view>
51   - <view style="margin-top: 32rpx;">
  51 + <!-- <view style="margin-top: 32rpx;">
52 52 <text>实习成绩</text>
53 53 <text v-if="grades" class="value_type">{{grades}}</text>
54 54 <text v-else class="value_type">--</text>
... ... @@ -57,7 +57,7 @@
57 57 <text>实习评价</text>
58 58 <text v-if="interDetail.teacherView" class="value_type">{{interDetail.teacherView}}</text>
59 59 <text v-else class="value_type">--</text>
60   - </view>
  60 + </view> -->
61 61 </view>
62 62 <!-- 项目信息 -->
63 63 <text class="text_title">项目信息</text>
... ...
... ... @@ -129,7 +129,7 @@
129 129 <text class="credit">学分:{{item.credit}}分</text>
130 130 </view>
131 131
132   - <view class="projiect_item" v-for="(ele, index) in item.achievementDataList" :key="index">
  132 + <view class="projiect_item" v-for="(ele, index) in item.entryDataList" :key="index" @click="projiectSel(ele)">
133 133
134 134 <view class="projiect">
135 135 <text>项目名称</text>
... ... @@ -140,33 +140,67 @@
140 140 <text>{{ ele.internshipStartTime>0 ? `${timeFormat(ele.internshipStartTime)}至${timeFormat(ele.internshipEndTime)}` : '--'}}</text>
141 141 </view>
142 142 <view class="projiect">
143   - <text>实习单号</text>
144   - <text @click="handelDetail(ele, 'internship')"
145   - :style="{color:'#06B079',textDecoration:'underline'}">{{ele.formNumber|| '--'}}</text>
  143 + <text>实习形式</text>
  144 + <!-- <text @click="handelDetail(ele, 'internship')"
  145 + :style="{color:'#06B079',textDecoration:'underline'}">{{ele.formNumber|| '--'}}</text> -->
  146 + <text>{{ele.practiceForm=='oneself'?'自主实习':'集中实习'}}</text>
146 147 </view>
147 148 <view class="projiect">
148   - <text>成绩</text>
149   - <text>{{ele.level|| '--'}}</text>
  149 + <text>总成绩</text>
  150 + <text>{{ele.totalScore|| '--'}}</text>
150 151 </view>
151 152
152   - <view class="projiect" v-if="ele.credit">
  153 + <!-- <view class="projiect" v-if="ele.credit">
153 154 <text>学分</text>
154 155 <text @click="handelDetail(ele, 'credit')"
155 156 :style="{color:'#06B079'}">{{ele.credit}}</text>
156   - </view>
  157 + </view> -->
157 158
158   - <view class="projiect" v-else>
  159 + <!-- <view class="projiect" v-else>
159 160 <text>学分</text>
160 161 <text>{{'--'}}</text>
161   - </view>
  162 + </view> -->
162 163 </view>
163 164 </view>
164 165 <c-loading :loading="loading"></c-loading>
165 166 </view>
166 167
167   - </view>
  168 + </view>
  169 +
  170 + <u-popup :show="show" mode="bottom" @close="close" :round="22">
  171 + <view class="popup">
  172 + <view style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 28px;">
  173 + <view class="title">
  174 + 项目筛选
  175 + </view>
  176 + <image class="close" src="/static/img/home/closepop.png" @click="close" mode=""></image>
  177 + </view>
  178 + <view class="search">
  179 + <u-search placeholder="请输入项目关键词搜索" placeholderColor="#C1C1C9" searchIconSize="36" height="64rpx"
  180 + bgColor="#F4F4F4" :showAction="true" shape="round" v-model="sxsearch" @custom="workSearch()" @search="workSearch()">
  181 + </u-search>
  182 + </view>
  183 + <scroll-view v-if="works.length>0" scroll-y="true" style="height: 80%; margin-top: 40rpx;"
  184 + @scrolltolower="lower()">
  185 + <view class="item_box" v-for="(item,index) in works" :key="index" @click="popupSelItem(item)">
  186 + <view style="display: flex; align-items: center; justify-content: space-between;">
  187 + <view class="item_title">
  188 + {{item.name}}
  189 + </view>
  190 + <image v-if="item.id == projectId" style="width: 20px; height: 20px;"
  191 + src="/static/img/home/popselect.png" mode=""></image>
  192 + </view>
  193 + </view>
  194 + </scroll-view>
  195 + <view v-else class="no_data" @click="jumpVerified">
  196 + <view class="text_black_28">
  197 + 暂未搜索到该项目
  198 + </view>
  199 + </view>
  200 + </view>
  201 + </u-popup>
168 202
169   - <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
  203 + <!-- <u-popup :show="show" mode="right" @close="close" @open="open" :closeOnClickOverlay="false">
170 204 <view class="popup_search">
171 205 <view class="content">
172 206 <view class="title">按项目筛选</view>
... ... @@ -193,7 +227,7 @@
193 227 </view>
194 228 </view>
195 229 </view>
196   - </u-popup>
  230 + </u-popup> -->
197 231 </view>
198 232 </template>
199 233
... ... @@ -208,7 +242,8 @@
208 242 import {
209 243 getInternshipProcessDetailApi,
210 244 getInternshipJobListApi,
211   - getPracticalCoursesListApi,
  245 + getPracticalCoursesListApi,
  246 + getProjectListApi,
212 247 } from '@/config/api.js';
213 248
214 249 export default {
... ... @@ -231,14 +266,18 @@
231 266 //搜索对象必须为key search的对象
232 267 status: 'wait,pass,reject',
233 268
234   - },
  269 + },
  270 + works: [],
  271 + workspage: 1,
  272 + workstotal: 0,
235 273 }
236 274 },
237 275
238 276 onLoad(option) {
239   - this.$store.dispatch(`home/getProjectList`, {
240   - pageSize: -1,
241   - })
  277 + // this.$store.dispatch(`home/getProjectList`, {
  278 + // pageSize: -1,
  279 + // })
  280 + this.worksloadData()
242 281
243 282 this.studentId = option.studentId;
244 283 getInternshipProcessDetailApi({
... ... @@ -257,7 +296,13 @@
257 296 }),
258 297 },
259 298
260   - methods: {
  299 + methods: {
  300 +
  301 + projiectSel(e) {
  302 + this.$u.route({
  303 + url: `pages/main/internship/traineeInterList/traineeInterList?&id=${e.entryId}`
  304 + })
  305 + },
261 306
262 307 getNameLastTwo(value) {
263 308 if (value && value.length > 3) {
... ... @@ -457,7 +502,59 @@
457 502 })
458 503 break;
459 504 }
460   - }
  505 + },
  506 +
  507 + workSearch() {
  508 + uni.hideKeyboard();
  509 + this.works = []
  510 + this.worksloadData()
  511 + },
  512 +
  513 + lower() {
  514 + setTimeout(() => {
  515 + this.worksloadData(true);
  516 + }, 200)
  517 + },
  518 +
  519 + worksloadData(e) {
  520 + let params = {}
  521 + // this.loading = 'loading'
  522 +
  523 + if (e) {
  524 + if (this.total <= this.works.length) {
  525 + // this.loading = 'nomore'
  526 + return
  527 + }
  528 + this.workspage++
  529 + } else {
  530 + this.workspage = 1
  531 + }
  532 + params['pageNumber'] = this.workspage
  533 + if (this.sxsearch) {
  534 + params['keyWord'] = this.sxsearch
  535 + }
  536 + getProjectListApi(params).then(async res => {
  537 + if (res) {
  538 + this.total = res.total
  539 + // this.loading = 'loadmore'
  540 + this.works = this.works.concat(res.records)
  541 + }
  542 + })
  543 + },
  544 + popupSelItem(item) {
  545 + this.projectId = item.id;
  546 + this.finished = false;
  547 +
  548 + getInternshipProcessDetailApi({
  549 + studentId: this.studentId,
  550 + projectId: this.projectId,
  551 + }).then(data => {
  552 + if (data) {
  553 + this.detail = data;
  554 + this.show = false
  555 + }
  556 + })
  557 + },
461 558
462 559 }
463 560 }
... ... @@ -645,7 +742,7 @@
645 742 font-size: 32rpx;
646 743 line-height: 44rpx;
647 744 color: #202131;
648   - margin: 0 0 30rpx 0;
  745 + margin: 0 0 20rpx 0;
649 746 font-weight: 500;
650 747 }
651 748
... ... @@ -821,6 +918,53 @@
821 918 width: 346rpx;
822 919 }
823 920 }
  921 + }
  922 +
  923 + .popup {
  924 + height: 500px;
  925 + padding: 19px 16px;
  926 +
  927 + .title {
  928 + font-size: 18px;
  929 + font-family: PingFangSC-Medium, PingFang SC;
  930 + font-weight: 500;
  931 + color: #000000;
  932 + }
  933 +
  934 + .close {
  935 + width: 22px;
  936 + height: 22px;
  937 + }
  938 +
  939 + .item_box {
  940 + border-radius: 4px;
  941 + margin: 0 0 48rpx;
  942 +
  943 + .item_title {
  944 + height: 20px;
  945 + font-size: 14px;
  946 + font-family: PingFangSC-Regular, PingFang SC;
  947 + font-weight: 400;
  948 + color: rgba(0, 0, 0, 0.65);
  949 + line-height: 20px;
  950 + }
  951 +
  952 + }
  953 +
  954 + .no_data {
  955 + width: 100%;
  956 + margin-top: 310rpx;
  957 +
  958 + .text_black_28 {
  959 + font-size: 14px;
  960 + font-family: PingFangSC-Light, PingFang SC;
  961 + font-weight: 300;
  962 + color: rgba(0, 0, 0, 0.65);
  963 + text-align: center;
  964 + }
  965 +
  966 + }
  967 +
824 968 }
825 969 }
826 970 </style>
... ...
  1 +<template>
  2 + <view class="current2">
  3 + <view v-if="list.length > 0" >
  4 + <view class="list">
  5 + <view v-for="(item,index) in list" :key="index" @click="handelClick(item)">
  6 + <view class="list-item">
  7 + <view style="display: flex; align-items: center;">
  8 + <text>实习单号:</text>
  9 + <text class="green">{{item.number}}</text>
  10 + </view>
  11 + <view style="display: flex; align-items: center; margin-top: 15rpx;">
  12 + <text>实习时间: {{`${timeFormat(item.startTime,'yyyy/mm/dd')} - ${timeFormat(item.endTime,'yyyy/mm/dd')}`}}</text>
  13 + </view>
  14 + <view style="display: flex; align-items: center; margin-top: 15rpx;">
  15 + <text>实习企业: {{item.companyName}}</text>
  16 + </view>
  17 + <view style="display: flex; align-items: center; margin-top: 15rpx;">
  18 + <text>实习岗位: {{item.jobName}}</text>
  19 + </view>
  20 + </view>
  21 + </view>
  22 + </view>
  23 + <view style="height: 40rpx;"></view>
  24 + <c-loading :loading="loading"></c-loading>
  25 + <view style="height: 40rpx;"></view>
  26 + </view>
  27 + <view v-else style="width: 100%; height: 100%;">
  28 + <view style="margin: 150px auto 0; width: 187px;height: 110px;">
  29 + <image style="width: 187px;height: 110px;" :src="'/static/img/home/nodata.png'"></image>
  30 + </view>
  31 + <view style="width: 100%; margin-top: 10px; text-align: center; font-size: 13px; color: #121212;">暂无数据</view>
  32 + </view>
  33 + </view>
  34 +</template>
  35 +
  36 +<script>
  37 + import {
  38 + getforminternshipInfoApi
  39 + } from '@/config/api.js';
  40 + import listMixin from "@/common/mixins/list-mixin.js";
  41 +
  42 + export default {
  43 + mixins: [listMixin],
  44 + data() {
  45 + return {
  46 + id: '',
  47 + list: []
  48 + }
  49 + },
  50 +
  51 + onLoad(e) {
  52 + console.log(e)
  53 + this.id = e.id
  54 +
  55 + this.finished = false;
  56 + this.loading = "loadmore";
  57 + this.page = 0;
  58 + this.list = [];
  59 + this._getList();
  60 + },
  61 +
  62 + methods: {
  63 + loadData() {
  64 + scoredetailUrl(this.id).then(res => {
  65 + if (res) {
  66 + this.detailObj = res;
  67 + this.detailObj.form.endTime = this.timeFormat(this.detailObj.form.endTime,'yyyy-mm-dd')
  68 + this.stuhandleDataspdf()
  69 + this.comhandleDataspdf()
  70 + this.schhandleDataspdf()
  71 + }
  72 + })
  73 + },
  74 +
  75 + timeFormat(timestamp, format = 'yyyy-mm-dd hh:MM') {
  76 + return timestamp > 0 ? uni.$u.timeFormat(timestamp, format) : '--'
  77 + },
  78 +
  79 + handelClick(e) {
  80 + // this.$u.route({
  81 + // url: `pages/main/home/achievementDetail/achievementDetail?&id=${e.id}`
  82 + // })
  83 + this.$u.route({
  84 + url: `pages/main/internship/intershipInfo/intershipInfo?id=${e.id}`
  85 + })
  86 + },
  87 +
  88 + // 模拟后端分页
  89 + async getData(requestParams) {
  90 + const {
  91 + search = {}
  92 + } = requestParams;
  93 +
  94 + let params = {};
  95 + params.pageNumber = requestParams.page + 1;
  96 + params.pageSize = 10;
  97 + params.entryId = this.id;
  98 +
  99 + console.log(12312312,params)
  100 + return await getforminternshipInfoApi(params);
  101 + },
  102 +
  103 + // 数据请求(没错就是这么少的代码)
  104 + async _getList() {
  105 + if (this.page == 0) {
  106 + this.list = [];
  107 + }
  108 +
  109 + uni.showLoading({
  110 + title: '数据加载中~',
  111 + mask: true
  112 + })
  113 +
  114 + // 根据实际情况修改自己修改key
  115 + let result = await this.getData({
  116 + page: this.page, // 传入页码
  117 + size: this.size, // 传入每页条数
  118 + search: this.search, // 传入搜索的对象
  119 + });
  120 +
  121 + // console.log(result.records)
  122 +
  123 + this.total = result.total;
  124 +
  125 + result.records.map((item) => {
  126 + this.list.push(item);
  127 + });
  128 +
  129 + if (this.list.length == this.total) {
  130 + this.finished = true;
  131 + this.loading = 'nomore';
  132 + }
  133 +
  134 + uni.hideLoading();
  135 + },
  136 + }
  137 + }
  138 +</script>
  139 +
  140 +<style>
  141 + page {
  142 + background-color: #F7F7F7;
  143 + }
  144 +</style>
  145 +
  146 +<style lang="scss" scoped>
  147 + .current2 {
  148 + padding: 20rpx 20rpx 0;
  149 +
  150 + .list-item {
  151 + // width: 100%;
  152 + // height: 150px;
  153 + padding: 36rpx 40rpx;
  154 + background: #FFFFFF;
  155 + margin-bottom: 10px;
  156 +
  157 + text {
  158 + font-size: 14px;
  159 + font-family: PingFangSC-Light, PingFang SC;
  160 + font-weight: 300;
  161 + color: rgba(0,0,0,0.65);
  162 + max-width: 90%;
  163 + overflow: hidden;
  164 + text-overflow: ellipsis;
  165 + display: -webkit-box;
  166 + -webkit-line-clamp: 2;
  167 + -webkit-box-orient: vertical;
  168 + }
  169 +
  170 + .green {
  171 + margin-left: 5px;
  172 + color: #0CB17A;
  173 + }
  174 + }
  175 + }
  176 +</style>
\ No newline at end of file
... ...
... ... @@ -60,7 +60,7 @@
60 60 <view class="twoCell">
61 61 <view class="item" @click="handelGate(1)">
62 62 <view>
63   - <image src="/static/img/home/newhome1.png"></image>
  63 + <image src="/static/img/home/bmsh_sel.png"></image>
64 64 </view>
65 65 <view style="display: flex; flex-direction: column;">
66 66 <view class="t1">
... ... @@ -71,51 +71,76 @@
71 71 </view>
72 72 </view>
73 73 </view>
74   - <view class="item" @click="handelGate(2)">
  74 + <view class="item" @click="handelGate(8)">
75 75 <view>
76   - <image src="/static/img/home/newhome2.png"></image>
  76 + <image src="/static/img/home/newhome1.png"></image>
77 77 </view>
78 78 <view style="display: flex; flex-direction: column;">
79 79 <view class="t1">
80   - 请假审批
  80 + 实习申请
81 81 </view>
82 82 <view class="t2">
83   - 实习中的请假申请
  83 + 实习开始&结束审批
84 84 </view>
85 85 </view>
86 86 </view>
87 87 </view>
88   - <view class="fiveCell">
89   - <view class="item" @click="handelGate(3)">
90   - <image src="/static/img/home/newhome3.png"></image>
91   - <view class="t1">
92   - 实习变更
93   - </view>
94   - </view>
95   - <view class="item" @click="handelGate(4)">
96   - <image src="/static/img/home/newhome4.png"></image>
97   - <view class="t1">
98   - 日志批阅
99   - </view>
100   - </view>
101   - <view class="item" @click="handelGate(5)">
102   - <image src="/static/img/home/newhome5.png"></image>
103   - <view class="t1">
104   - 报告批阅
105   - </view>
106   - </view>
107   - <view class="item" @click="handelGate(6)">
108   - <image src="/static/img/home/newhome6.png"></image>
109   - <view class="t1">
110   - 学生签到
111   - </view>
112   - </view>
113   - <view class="item" @click="handelGate(7)">
114   - <image src="/static/img/home/newhome7.png"></image>
115   - <view class="t1">
116   - 成绩鉴定
117   - </view>
118   - </view>
  88 + <!-- <view class="fiveCell"> -->
  89 + <scroll-view class="fiveCell" scroll-x="true" @scroll="scrollx">
  90 + <view class="item" @click="handelGate(2)">
  91 + <view class="item-flex">
  92 + <image src="/static/img/home/newhome2.png"></image>
  93 + <view class="t1">
  94 + 请假审批
  95 + </view>
  96 + </view>
  97 + </view>
  98 + <view class="item" @click="handelGate(3)">
  99 + <view class="item-flex">
  100 + <image src="/static/img/home/newhome3.png"></image>
  101 + <view class="t1">
  102 + 实习变更
  103 + </view>
  104 + </view>
  105 + </view>
  106 + <view class="item" @click="handelGate(4)">
  107 + <view class="item-flex">
  108 + <image src="/static/img/home/newhome4.png"></image>
  109 + <view class="t1">
  110 + 日志批阅
  111 + </view>
  112 + </view>
  113 + </view>
  114 + <view class="item" @click="handelGate(5)">
  115 + <view class="item-flex">
  116 + <image src="/static/img/home/newhome5.png"></image>
  117 + <view class="t1">
  118 + 报告批阅
  119 + </view>
  120 + </view>
  121 + </view>
  122 + <view class="item" @click="handelGate(6)">
  123 + <view class="item-flex">
  124 + <image src="/static/img/home/newhome6.png"></image>
  125 + <view class="t1">
  126 + 学生签到
  127 + </view>
  128 + </view>
  129 + </view>
  130 + <view class="item" @click="handelGate(7)">
  131 + <view class="item-flex">
  132 + <image src="/static/img/home/newhome7.png"></image>
  133 + <view class="t1">
  134 + 成绩鉴定
  135 + </view>
  136 + </view>
  137 + </view>
  138 + </scroll-view>
  139 + <!-- </view> -->
  140 + <view class="pro">
  141 + <view class="pro_top" :style="{left: processNum+'px'}">
  142 +
  143 + </view>
119 144 </view>
120 145 </view>
121 146
... ... @@ -199,9 +224,22 @@
199 224 </view>
200 225 <view v-if="hasLogin">
201 226 <view
202   - v-if="statistics && (statistics.formChangeApplyReview > 0 || statistics.leaveRecordReview > 0 || statistics.internshipApply > 0 || statistics.formLogWaitReview > 0 || statistics.reportWaitReview > 0 || statistics.achievementWaitAppraisal > 0 )">
  227 + v-if="statistics && (statistics.formApplyReview > 0 || statistics.formChangeApplyReview > 0 || statistics.leaveRecordReview > 0 || statistics.internshipApply > 0 || statistics.formLogWaitReview > 0 || statistics.reportWaitReview > 0 || statistics.achievementWaitAppraisal > 0 )">
203 228 <view class="cell">
204   - <u-cell-group :border="false">
  229 + <u-cell-group :border="false">
  230 + <u-cell
  231 + v-if="statistics && statistics.formApplyReview && statistics.formApplyReview > 0"
  232 + :isLink="true" url="/pages/main/home/interapply/interapply?status=wait"
  233 + arrow-direction="right" :rightIconStyle="{fontSize:'24rpx'}" :border="false">
  234 + <view slot="title" class="u-slot-title">
  235 + <view class="u-cell-title">实习申请</view>
  236 + <view class="u-cell-text">
  237 + 您有<text>{{statistics.formApplyReview}}</text>个<text>实习申请</text>待审批!</view>
  238 + </view>
  239 + <text slot="value" class="u-slot-value">立即审批</text>
  240 +
  241 + </u-cell>
  242 + <view class="line"></view>
205 243 <u-cell
206 244 v-if="statistics && statistics.leaveRecordReview && statistics.leaveRecordReview > 0"
207 245 :isLink="true" url="/pages/main/home/asklist/asklist?status=wait"
... ... @@ -320,7 +358,6 @@
320 358 </view> -->
321 359 </view>
322 360 </scroll-view>
323   -
324 361 <!-- <view class="content">
325 362 <view class="title">
326 363 <text>选择学校</text>
... ... @@ -371,7 +408,8 @@
371 408 menuHeight: 32,
372 409 menuTop: 32,
373 410 margin: 92,
374   - isNav: false
  411 + isNav: false,
  412 + processNum: 0,
375 413 }
376 414 },
377 415
... ... @@ -447,6 +485,15 @@
447 485
448 486 methods: {
449 487
  488 + scrollx(e) {
  489 + // console.log(e)
  490 + if (e.detail.scrollLeft < 20) {
  491 + this.processNum = 0
  492 + }else {
  493 + this.processNum = 30
  494 + }
  495 + },
  496 +
450 497 getSystemInfo() {
451 498 uni.getSystemInfo({
452 499 success: (res) => {
... ... @@ -585,9 +632,10 @@
585 632 case 7:
586 633 this.$u.route('/pages/main/home/achievementAppraisal/achievementAppraisal');
587 634 break;
588   -
589   -
590   -
  635 +
  636 + case 8:
  637 + this.$u.route('/pages/main/home/interapply/interapply');
  638 + break;
591 639
592 640 }
593 641
... ... @@ -767,17 +815,50 @@
767 815 color: rgba(0, 0, 0, 0.65);
768 816 }
769 817 }
  818 + }
  819 +
  820 + .pro {
  821 + width: 60px;
  822 + height: 5px;
  823 + border-radius: 2.5px;
  824 + background-color: #F4F4F4;
  825 + margin: 0 auto;
  826 + margin-top: 10px;
  827 + position: relative;
  828 +
  829 + .pro_top {
  830 + width: 30px;
  831 + height: 5px;
  832 + border-radius: 2.5px;
  833 + background-color: #06B079;
  834 + position: absolute;
  835 + top: 0px;
  836 + left: 0px;
  837 + }
770 838 }
771 839
772 840 .fiveCell {
773   - margin-top: 30px;
774   - display: flex;
775   -
776   - .item {
777   - flex: 1;
778   - display: flex;
779   - flex-direction: column;
780   - align-items: center;
  841 + margin-top: 30px;
  842 + width: 100%;
  843 + height: 60px;
  844 + white-space: nowrap;
  845 + // display: flex;
  846 + // display: inline-block;
  847 +
  848 + .item {
  849 + // width: 100px;
  850 + // flex: 1;
  851 + display: inline-block;
  852 + margin-right: 16px;
  853 + // display: flex;
  854 + // flex-direction: column;
  855 + // align-items: center;
  856 +
  857 + .item-flex {
  858 + display: flex;
  859 + flex-direction: column;
  860 + align-items: center;
  861 + }
781 862
782 863 image {
783 864 width: 24px;
... ...
注册登录 后发表评论