no message
Showing
23 changed files
with
141 additions
and
2545 deletions
| ... | @@ -51,5 +51,4 @@ export default { | ... | @@ -51,5 +51,4 @@ export default { |
| 51 | /*每个页面公共css */ | 51 | /*每个页面公共css */ |
| 52 | @import '/common/uni.css'; | 52 | @import '/common/uni.css'; |
| 53 | @import '/common/mystyle.scss'; | 53 | @import '/common/mystyle.scss'; |
| 54 | @import '@/static/font/iconfont.css'; | ||
| 55 | </style> | 54 | </style> |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -669,6 +669,13 @@ function groupWithDraw(data) { | ... | @@ -669,6 +669,13 @@ function groupWithDraw(data) { |
| 669 | method: 'post', | 669 | method: 'post', |
| 670 | params: data | 670 | params: data |
| 671 | }) | 671 | }) |
| 672 | } | ||
| 673 | function certifiedwithDraw(data) { | ||
| 674 | return request({ | ||
| 675 | url: `/member/certified/withDraw`, | ||
| 676 | method: 'post', | ||
| 677 | params:data | ||
| 678 | }) | ||
| 672 | } | 679 | } |
| 673 | // 省合并缴费通知单 | 680 | // 省合并缴费通知单 |
| 674 | function mergePayMentApi(data) { | 681 | function mergePayMentApi(data) { |
| ... | @@ -701,6 +708,13 @@ function unMerge(recordId) { | ... | @@ -701,6 +708,13 @@ function unMerge(recordId) { |
| 701 | method: 'post' | 708 | method: 'post' |
| 702 | }) | 709 | }) |
| 703 | } | 710 | } |
| 711 | function certifiedunMerge(recordId) { | ||
| 712 | return request({ | ||
| 713 | url: `/member/certified/unMerge/${recordId}`, | ||
| 714 | method: 'post' | ||
| 715 | }) | ||
| 716 | } | ||
| 717 | |||
| 704 | function dellevelPerson(examId) { | 718 | function dellevelPerson(examId) { |
| 705 | return request({ | 719 | return request({ |
| 706 | url: '/exam/person/' + examId, | 720 | url: '/exam/person/' + examId, |
| ... | @@ -1030,5 +1044,6 @@ export { | ... | @@ -1030,5 +1044,6 @@ export { |
| 1030 | 1044 | ||
| 1031 | getMemberInfoModRange,commitGroupChange,delGroupChange, | 1045 | getMemberInfoModRange,commitGroupChange,delGroupChange, |
| 1032 | getChangeGroupByRangeId,groupInfoMod,addGroupInfoModeToRange, | 1046 | getChangeGroupByRangeId,groupInfoMod,addGroupInfoModeToRange, |
| 1033 | groupChangeEditMod,groupChangeAudit,extractInfoFromChinaIdCard | 1047 | groupChangeEditMod,groupChangeAudit,extractInfoFromChinaIdCard |
| 1048 | ,certifiedwithDraw,certifiedunMerge | ||
| 1034 | } | 1049 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -95,7 +95,7 @@ page { | ... | @@ -95,7 +95,7 @@ page { |
| 95 | .uni-forms-item__content{text-align: right;} | 95 | .uni-forms-item__content{text-align: right;} |
| 96 | .uni-date-x .icon-calendar{display: none;} | 96 | .uni-date-x .icon-calendar{display: none;} |
| 97 | .uni-date__x-input{font-size: 30rpx!important;} | 97 | .uni-date__x-input{font-size: 30rpx!important;} |
| 98 | .selected-area{justify-content: right;font-size: 30rpx;} | 98 | .selected-area{justify-content: flex-end;font-size: 30rpx;} |
| 99 | .input-value{padding: 0!important;} | 99 | .input-value{padding: 0!important;} |
| 100 | .input-value-border{padding: 0;} | 100 | .input-value-border{padding: 0;} |
| 101 | .uni-forms-item__label{ flex-direction: row-reverse!important; justify-content: start!important;} | 101 | .uni-forms-item__label{ flex-direction: row-reverse!important; justify-content: start!important;} | ... | ... |
| ... | @@ -7,6 +7,7 @@ | ... | @@ -7,6 +7,7 @@ |
| 7 | // const baseUrl_api = "http://123.60.96.243/stage-api/"; | 7 | // const baseUrl_api = "http://123.60.96.243/stage-api/"; |
| 8 | const baseUrl_api = 'http://192.168.1.11:8787' | 8 | const baseUrl_api = 'http://192.168.1.11:8787' |
| 9 | // const baseUrl_api = 'https://ztx.itechtop.cn/stage-api' | 9 | // const baseUrl_api = 'https://ztx.itechtop.cn/stage-api' |
| 10 | // const baseUrl_api = 'https://tkcn.19wk.cn:8001/stage-api' | ||
| 10 | // const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/' | 11 | // const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/' |
| 11 | 12 | ||
| 12 | // train | 13 | // train | ... | ... |
| ... | @@ -38,7 +38,10 @@ | ... | @@ -38,7 +38,10 @@ |
| 38 | 38 | ||
| 39 | <view class="func" v-if="item.auditStatus == 100"> | 39 | <view class="func" v-if="item.auditStatus == 100"> |
| 40 | <button @click="handleAudit(item)">提交</button> | 40 | <button @click="handleAudit(item)">提交</button> |
| 41 | <!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> --> | 41 | <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> |
| 42 | </view> | ||
| 43 | <view class="func" v-if="item.auditStatus == 1 && item.isView == 1"> | ||
| 44 | <button @click="sendBack(item)">撤回</button> | ||
| 42 | </view> | 45 | </view> |
| 43 | </view> | 46 | </view> |
| 44 | </view> | 47 | </view> |
| ... | @@ -193,6 +196,45 @@ | ... | @@ -193,6 +196,45 @@ |
| 193 | uni.redirectTo({ | 196 | uni.redirectTo({ |
| 194 | url: path | 197 | url: path |
| 195 | }); | 198 | }); |
| 199 | } | ||
| 200 | function sendBack(row){ | ||
| 201 | uni.showModal({ | ||
| 202 | title: '提示', | ||
| 203 | content: `确定撤回${row.content.certName}吗`, | ||
| 204 | success: function(res) { | ||
| 205 | if (res.confirm) { | ||
| 206 | api.certifiedwithDraw({ | ||
| 207 | recordId: row.recordId, | ||
| 208 | reason: row.reason | ||
| 209 | }).then(res => { | ||
| 210 | uni.showToast({ | ||
| 211 | title: '操作成功', | ||
| 212 | icon: 'none' | ||
| 213 | }) | ||
| 214 | getList() | ||
| 215 | }) | ||
| 216 | |||
| 217 | } | ||
| 218 | } | ||
| 219 | }) | ||
| 220 | } | ||
| 221 | function resolution(row){ | ||
| 222 | uni.showModal({ | ||
| 223 | title: '提示', | ||
| 224 | content: `确定拆分${row.content.certName}吗`, | ||
| 225 | success: function(res) { | ||
| 226 | if (res.confirm) { | ||
| 227 | api.certifiedunMerge(row.recordId).then(res => { | ||
| 228 | uni.showToast({ | ||
| 229 | title: '已拆分', | ||
| 230 | icon: 'none' | ||
| 231 | }) | ||
| 232 | getList() | ||
| 233 | }) | ||
| 234 | |||
| 235 | } | ||
| 236 | } | ||
| 237 | }) | ||
| 196 | } | 238 | } |
| 197 | </script> | 239 | </script> |
| 198 | 240 | ... | ... |
| ... | @@ -531,27 +531,12 @@ | ... | @@ -531,27 +531,12 @@ |
| 531 | }] | 531 | }] |
| 532 | },{ | 532 | },{ |
| 533 | "root": "training", | 533 | "root": "training", |
| 534 | "pages":[{ | 534 | "pages":[] |
| 535 | "path" : "trainList", | ||
| 536 | "style" : | ||
| 537 | { | ||
| 538 | "navigationBarTitleText" : "培训列表", | ||
| 539 | "enablePullDownRefresh" : false | ||
| 540 | } | ||
| 541 | }, | ||
| 542 | { | ||
| 543 | "path" : "detailPage", | ||
| 544 | "style" : | ||
| 545 | { | ||
| 546 | "navigationBarTitleText" : "培训详情", | ||
| 547 | "enablePullDownRefresh" : false | ||
| 548 | } | ||
| 549 | }] | ||
| 550 | }], | 535 | }], |
| 551 | "preloadRule": { | 536 | "preloadRule": { |
| 552 | "pages/index/index": { | 537 | "pages/index/index": { |
| 553 | "network": "all", | 538 | "network": "all", |
| 554 | "packages": ["login","personalVip", "group","level","training"] | 539 | "packages": ["login","personalVip", "group","level"] |
| 555 | } | 540 | } |
| 556 | } | 541 | } |
| 557 | } | 542 | } |
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
| ... | @@ -108,7 +108,7 @@ | ... | @@ -108,7 +108,7 @@ |
| 108 | <uni-data-checkbox v-model="form.newSex" :localdata="sexs" /> | 108 | <uni-data-checkbox v-model="form.newSex" :localdata="sexs" /> |
| 109 | </uni-forms-item> | 109 | </uni-forms-item> |
| 110 | <uni-forms-item label="证件类型:" v-show="type=='newIdcType'"> | 110 | <uni-forms-item label="证件类型:" v-show="type=='newIdcType'"> |
| 111 | <uni-data-select v-model="form.newIdcType" :localdata="cardType" | 111 | <uni-data-select v-model="form.newIdcType" :localdata="cardType1" |
| 112 | :clear='false'></uni-data-select> | 112 | :clear='false'></uni-data-select> |
| 113 | </uni-forms-item> | 113 | </uni-forms-item> |
| 114 | <uni-forms-item label="证件号码:" v-show="type=='newIdcCode'"> | 114 | <uni-forms-item label="证件号码:" v-show="type=='newIdcCode'"> |
| ... | @@ -212,6 +212,23 @@ | ... | @@ -212,6 +212,23 @@ |
| 212 | value: '5' | 212 | value: '5' |
| 213 | } | 213 | } |
| 214 | ]) | 214 | ]) |
| 215 | const cardType1 = ref([{ | ||
| 216 | text: '身份证', | ||
| 217 | value: '0' | ||
| 218 | }, | ||
| 219 | { | ||
| 220 | text: '港澳台通行证 ', | ||
| 221 | value: '1' | ||
| 222 | }, | ||
| 223 | { | ||
| 224 | text: '外国护照', | ||
| 225 | value: '3' | ||
| 226 | }, | ||
| 227 | { | ||
| 228 | text: '户口本', | ||
| 229 | value: '5' | ||
| 230 | } | ||
| 231 | ]) | ||
| 215 | onLoad((option) => { | 232 | onLoad((option) => { |
| 216 | if (option.rangeId) { | 233 | if (option.rangeId) { |
| 217 | queryParams.value.rangeId = option.rangeId | 234 | queryParams.value.rangeId = option.rangeId | ... | ... |
| ... | @@ -21,7 +21,8 @@ | ... | @@ -21,7 +21,8 @@ |
| 21 | <uni-list-item title="详细地址" :rightText="form.address||'--'"/> | 21 | <uni-list-item title="详细地址" :rightText="form.address||'--'"/> |
| 22 | </uni-list> | 22 | </uni-list> |
| 23 | 23 | ||
| 24 | </view> | 24 | </view> |
| 25 | <view class="height1"></view> | ||
| 25 | </template> | 26 | </template> |
| 26 | 27 | ||
| 27 | <script setup> | 28 | <script setup> |
| ... | @@ -72,7 +73,8 @@ | ... | @@ -72,7 +73,8 @@ |
| 72 | </script> | 73 | </script> |
| 73 | 74 | ||
| 74 | <style scoped lang="scss"> | 75 | <style scoped lang="scss"> |
| 75 | .mainbox{margin: 30rpx 25rpx;padding: 1px; | 76 | .height1{height:1rpx} |
| 77 | .mainbox{margin: 30rpx 25rpx 60rpx;padding: 1px; | ||
| 76 | background: #FFFFFF; | 78 | background: #FFFFFF; |
| 77 | border-radius: 15rpx; | 79 | border-radius: 15rpx; |
| 78 | :deep(.uni-list-item__content-title){color: #4C5359;font-size: 30rpx; | 80 | :deep(.uni-list-item__content-title){color: #4C5359;font-size: 30rpx; | ... | ... |
| 1 | <template> | 1 | <template> |
| 2 | <view> | 2 | <view> |
| 3 | <z-paging ref="paging" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png"> | 3 | <z-paging ref="paging" v-show="total>0" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png"> |
| 4 | <view class="searchbar" :slot="top"> | 4 | <view class="searchbar" :slot="top"> |
| 5 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" | 5 | <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" |
| 6 | v-model="query.name" @blur="getList" @clear="getList" placeholder="搜索姓名"> | 6 | v-model="query.name" @blur="getList" @clear="getList" placeholder="搜索姓名"> |
| 7 | </uni-easyinput> | 7 | </uni-easyinput> |
| 8 | 8 | ||
| 9 | </view> | 9 | </view> |
| 10 | 10 | <uni-swipe-action> | |
| 11 | <uni-swipe-action> | 11 | <uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index"> |
| 12 | <uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index"> | 12 | <view class="content-box" @click="handleInfo(n)"> |
| 13 | <view class="content-box" @click="handleInfo(n)"> | 13 | <view class="flexbox"> |
| 14 | <view class="flexbox"> | 14 | <view class="photobox"> |
| 15 | <view class="photobox"> | 15 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> |
| 16 | <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> | 16 | <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> |
| 17 | <view class="colorful" v-else>{{n.name.slice(0,1)}}</view> | 17 | </view> |
| 18 | <view> | ||
| 19 | {{n.name}} ({{n.perCode}}) | ||
| 20 | </view> | ||
| 18 | </view> | 21 | </view> |
| 19 | <view> | 22 | <view class="flexbox"> |
| 20 | {{n.name}} ({{n.perCode}}) | 23 | <text v-if="n.certStage==0" class="text-primary"> |
| 24 | 新会员 | ||
| 25 | </text> | ||
| 26 | <text v-if="n.certStage==1" class="text-warning"> | ||
| 27 | 待提交 | ||
| 28 | </text> | ||
| 29 | <text v-if="n.certStage==2" class="text-red"> | ||
| 30 | 缴费中 | ||
| 31 | </text> | ||
| 32 | <text v-if="n.certStage==3" class="text-success"> | ||
| 33 | 正常 | ||
| 34 | </text> | ||
| 35 | <text v-if="n.certStage==4" class="text-gray"> | ||
| 36 | 过期 | ||
| 37 | </text> | ||
| 21 | </view> | 38 | </view> |
| 22 | </view> | ||
| 23 | <view class="flexbox"> | ||
| 24 | <text v-if="n.certStage==0" class="text-primary"> | ||
| 25 | 新会员 | ||
| 26 | </text> | ||
| 27 | <text v-if="n.certStage==1" class="text-warning"> | ||
| 28 | 待提交 | ||
| 29 | </text> | ||
| 30 | <text v-if="n.certStage==2" class="text-red"> | ||
| 31 | 缴费中 | ||
| 32 | </text> | ||
| 33 | <text v-if="n.certStage==3" class="text-success"> | ||
| 34 | 正常 | ||
| 35 | </text> | ||
| 36 | <text v-if="n.certStage==4" class="text-gray"> | ||
| 37 | 过期 | ||
| 38 | </text> | ||
| 39 | </view> | ||
| 40 | 39 | ||
| 41 | </view> | ||
| 42 | <template v-slot:right> | ||
| 43 | <view class="slot-button"> | ||
| 44 | <!-- <view class="edit-button" @click="handleUpdate(n)"> | ||
| 45 | <uni-icons type="compose" color="#fff" size="20"></uni-icons> | ||
| 46 | <text class="slot-button-text">编辑</text> | ||
| 47 | </view> --> | ||
| 48 | <view class="danger-button" v-if="n.certStage==0" @click="handleDelete(n)"> | ||
| 49 | <uni-icons type="trash" color="#fff" size="20"></uni-icons> | ||
| 50 | <text class="slot-button-text">删除</text> | ||
| 51 | </view> | ||
| 52 | </view> | 40 | </view> |
| 53 | </template> | 41 | <template v-slot:right> |
| 54 | </uni-swipe-action-item> | 42 | <view class="slot-button"> |
| 55 | </uni-swipe-action> | 43 | <!-- <view class="edit-button" @click="handleUpdate(n)"> |
| 56 | 44 | <uni-icons type="compose" color="#fff" size="20"></uni-icons> | |
| 57 | <view class="nodata" v-if="list.length==0"> | 45 | <text class="slot-button-text">编辑</text> |
| 58 | <!-- <image mode="aspectFit" src="/static/nodata.png"></image> --> | 46 | </view> --> |
| 59 | <button class="btn-red" v-if="userType=='4'" @click="goVipList">+ 添加会员</button> | 47 | <view class="danger-button" v-if="n.certStage==0" @click="handleDelete(n)"> |
| 60 | <!-- <text v-else>暂无数据</text> --> | 48 | <uni-icons type="trash" color="#fff" size="20"></uni-icons> |
| 61 | </view> | 49 | <text class="slot-button-text">删除</text> |
| 62 | </z-paging> | 50 | </view> |
| 51 | </view> | ||
| 52 | </template> | ||
| 53 | </uni-swipe-action-item> | ||
| 54 | </uni-swipe-action> | ||
| 55 | </z-paging> | ||
| 56 | <view class="nodata" v-if="list.length==0"> | ||
| 57 | <!-- <image mode="aspectFit" src="/static/nodata.png"></image> --> | ||
| 58 | <button class="btn-red" v-if="userType=='4'" @click="goVipList">+ 添加会员</button> | ||
| 59 | <!-- <text v-else>暂无数据</text> --> | ||
| 60 | </view> | ||
| 63 | </view> | 61 | </view> |
| 64 | </template> | 62 | </template> |
| 65 | 63 | ||
| ... | @@ -71,7 +69,7 @@ | ... | @@ -71,7 +69,7 @@ |
| 71 | ref | 69 | ref |
| 72 | } from 'vue' | 70 | } from 'vue' |
| 73 | import { | 71 | import { |
| 74 | onLoad | 72 | onLoad,onShow |
| 75 | } from '@dcloudio/uni-app' | 73 | } from '@dcloudio/uni-app' |
| 76 | const query = ref({ | 74 | const query = ref({ |
| 77 | pageNum: 1, | 75 | pageNum: 1, |
| ... | @@ -89,7 +87,7 @@ | ... | @@ -89,7 +87,7 @@ |
| 89 | onLoad(() => { | 87 | onLoad(() => { |
| 90 | userType.value = app.globalData.userType | 88 | userType.value = app.globalData.userType |
| 91 | }) | 89 | }) |
| 92 | onMounted(() => { | 90 | onShow(() => { |
| 93 | getList() | 91 | getList() |
| 94 | }) | 92 | }) |
| 95 | function getQuery(pageNum,pageSize){ | 93 | function getQuery(pageNum,pageSize){ | ... | ... |
static/font/iconfont.css
deleted
100644 → 0
| 1 | @font-face { | ||
| 2 | font-family: "iconfont"; | ||
| 3 | /* Project id 3873999 */ | ||
| 4 | src: url('/static/font/iconfont.ttf') format('woff2'), | ||
| 5 | url('/static/font/iconfont.ttf') format('woff'), | ||
| 6 | url('/static/font/iconfont.ttf') format('truetype'); | ||
| 7 | } | ||
| 8 | |||
| 9 | .iconfont { | ||
| 10 | font-family: "iconfont" !important; | ||
| 11 | font-size: 16px; | ||
| 12 | font-style: normal; | ||
| 13 | -webkit-font-smoothing: antialiased; | ||
| 14 | -moz-osx-font-smoothing: grayscale; | ||
| 15 | } | ||
| 16 | |||
| 17 | .icon-31dingwei:before { | ||
| 18 | content: "\e600"; | ||
| 19 | } | ||
| 20 | |||
| 21 | .icon-ai253:before { | ||
| 22 | content: "\e6f1"; | ||
| 23 | } | ||
| 24 | |||
| 25 | .icon-loufangfangzi:before { | ||
| 26 | content: "\e729"; | ||
| 27 | } |
static/font/iconfont.ttf
deleted
100644 → 0
No preview for this file type
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="box1"> | ||
| 4 | <view class="title"> | ||
| 5 | <view class="title-left">{{ porps.title }}</view> | ||
| 6 | <view class="title-icon" @click="changFN"> | ||
| 7 | <uni-icons type="top" color="#95a1a6" v-if="show"></uni-icons> | ||
| 8 | <uni-icons type="bottom" color="#95a1a6" v-else></uni-icons> | ||
| 9 | </view> | ||
| 10 | </view> | ||
| 11 | <view class="conter-liner-cost"> | ||
| 12 | <view class="liner-left">{{ porps.text }} 合计:</view> | ||
| 13 | <view class="liner-right">{{ porps.cost }}元</view> | ||
| 14 | </view> | ||
| 15 | </view> | ||
| 16 | <view class="box2" v-show="show"><slot></slot></view> | ||
| 17 | </view> | ||
| 18 | </template> | ||
| 19 | |||
| 20 | <script setup> | ||
| 21 | import { ref } from 'vue'; | ||
| 22 | const porps = defineProps({ | ||
| 23 | title: String, | ||
| 24 | text: String, | ||
| 25 | cost: String | ||
| 26 | }); | ||
| 27 | const show = ref(false); | ||
| 28 | |||
| 29 | function changFN() { | ||
| 30 | show.value = !show.value; | ||
| 31 | } | ||
| 32 | </script> | ||
| 33 | |||
| 34 | <style lang="scss" scoped> | ||
| 35 | .box { | ||
| 36 | margin: 0; | ||
| 37 | padding: 0 25rpx; | ||
| 38 | .box1 { | ||
| 39 | margin-bottom: 23rpx; | ||
| 40 | margin-top: 35rpx; | ||
| 41 | .title { | ||
| 42 | display: flex; | ||
| 43 | justify-content: space-between; | ||
| 44 | margin-bottom: 10rpx; | ||
| 45 | |||
| 46 | .title-left { | ||
| 47 | font-size: 30rpx; | ||
| 48 | font-family: PingFang SC; | ||
| 49 | font-weight: 500; | ||
| 50 | color: #2b3133; | ||
| 51 | } | ||
| 52 | } | ||
| 53 | .conter-liner-cost { | ||
| 54 | display: flex; | ||
| 55 | .liner-left { | ||
| 56 | font-size: 28rpx; | ||
| 57 | font-family: PingFang SC; | ||
| 58 | font-weight: 400; | ||
| 59 | color: #7b7f83; | ||
| 60 | } | ||
| 61 | .liner-right { | ||
| 62 | font-size: 28rpx; | ||
| 63 | font-family: PingFang SC; | ||
| 64 | font-weight: 400; | ||
| 65 | color: #ff8124; | ||
| 66 | } | ||
| 67 | } | ||
| 68 | } | ||
| 69 | .box2 { | ||
| 70 | border-top: 1rpx solid #e6e6e6; | ||
| 71 | } | ||
| 72 | } | ||
| 73 | </style> |
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="box-title"> | ||
| 4 | <view class="title-left">是否住宿</view> | ||
| 5 | <view class="title-right "> | ||
| 6 | <radio-group name="radio" @change="radio"> | ||
| 7 | <label> | ||
| 8 | <radio value="1" :checked="flag" /> | ||
| 9 | <text>是</text> | ||
| 10 | </label> | ||
| 11 | <label> | ||
| 12 | <radio value="0" :checked="!flag" /> | ||
| 13 | <text>否</text> | ||
| 14 | </label> | ||
| 15 | </radio-group> | ||
| 16 | </view> | ||
| 17 | </view> | ||
| 18 | |||
| 19 | <!-- 酒店信息 --> | ||
| 20 | <view class="box-conter" v-if="flag"> | ||
| 21 | <checkbox-group @change="change"> | ||
| 22 | <view class="conter-conter" v-for="item in range" :key="item.id"> | ||
| 23 | <view class="bgcColor"> | ||
| 24 | <view class="conter-top"> | ||
| 25 | <view class="text">{{ item.name }}</view> | ||
| 26 | <checkbox :value="item.hotelFlag" @click="checkedFN(item)" :disabled="disabled" /> | ||
| 27 | </view> | ||
| 28 | <view class="box-dress"> | ||
| 29 | <uni-icons custom-prefix="iconfont" type="icon-31dingwei" color="#95A1A6"></uni-icons> | ||
| 30 | {{ item.address }} | ||
| 31 | </view> | ||
| 32 | <view class="conter-text"> | ||
| 33 | <view class="conter-liner"> | ||
| 34 | <view class="liner-left">房型:</view> | ||
| 35 | <view class="liner-right">{{ item.houseType }}</view> | ||
| 36 | </view> | ||
| 37 | |||
| 38 | <view class="conter-liner"> | ||
| 39 | <view class="liner-left">价格:</view> | ||
| 40 | <view class="liner-right">{{ item.spend }}元</view> | ||
| 41 | </view> | ||
| 42 | |||
| 43 | <view class="conter-liner"> | ||
| 44 | <view class="liner-left">餐食:</view> | ||
| 45 | <view class="liner-right">{{ item.haveDinner == 1 ? '含早' : '不含早参' }}</view> | ||
| 46 | </view> | ||
| 47 | |||
| 48 | <view class="conter-liner"> | ||
| 49 | <view class="liner-left">入住时间:</view> | ||
| 50 | <view class="liner-right liner-move"> | ||
| 51 | <view class="liner-right-hotl" v-for="val in item.move" :key="val.id"> | ||
| 52 | <uni-datetime-picker | ||
| 53 | :start="val.moveIntoTime" | ||
| 54 | :end="val.leaveTime" | ||
| 55 | type="daterange" | ||
| 56 | v-model="val.move" | ||
| 57 | return-type="yyyy/MM/dd" | ||
| 58 | @change="maskClick(val)" | ||
| 59 | /> | ||
| 60 | <uni-icons | ||
| 61 | class="liner-del" | ||
| 62 | @click="delHot(item, val)" | ||
| 63 | v-if="item.move.length > 1" | ||
| 64 | custom-prefix="custom-icon" | ||
| 65 | type="trash" | ||
| 66 | size="20" | ||
| 67 | /> | ||
| 68 | </view> | ||
| 69 | <uni-icons | ||
| 70 | @click="addHot(item)" | ||
| 71 | custom-prefix="custom-icon" | ||
| 72 | type="plusempty" | ||
| 73 | size="20" | ||
| 74 | /> | ||
| 75 | </view> | ||
| 76 | </view> | ||
| 77 | </view> | ||
| 78 | </view> | ||
| 79 | </view> | ||
| 80 | </checkbox-group> | ||
| 81 | <view class="remark" v-if="hotelList"> | ||
| 82 | <view class="liner-left">备注:</view> | ||
| 83 | <input class="uni-input" v-model="remark" placeholder="请输入你的内容" /> | ||
| 84 | </view> | ||
| 85 | </view> | ||
| 86 | <view class="foot "> | ||
| 87 | <view class="button1" @click="upFN">上一步</view> | ||
| 88 | <view class="button" @click="nextFN">下一步</view> | ||
| 89 | </view> | ||
| 90 | </view> | ||
| 91 | </template> | ||
| 92 | |||
| 93 | <script setup> | ||
| 94 | import * as train from '@/common/train.js'; | ||
| 95 | import { | ||
| 96 | onLoad, | ||
| 97 | onReady, | ||
| 98 | onShareAppMessage, | ||
| 99 | onShareTimeline, | ||
| 100 | onPullDownRefresh, | ||
| 101 | onReachBottom, | ||
| 102 | onShow | ||
| 103 | } from '@dcloudio/uni-app'; | ||
| 104 | import { ref, getCurrentInstance, reactive, watch, toRefs } from 'vue'; | ||
| 105 | |||
| 106 | const emit = defineEmits(['nextFN']); | ||
| 107 | const props = defineProps({ | ||
| 108 | projectIdsArray: {}, | ||
| 109 | id: {}, | ||
| 110 | signId: {}, | ||
| 111 | examIdsArry: {} | ||
| 112 | }); | ||
| 113 | const moveList = ref([ | ||
| 114 | { | ||
| 115 | id: 1, | ||
| 116 | move: null | ||
| 117 | } | ||
| 118 | ]); | ||
| 119 | const hotShow = ref(true); | ||
| 120 | const popup = ref(); | ||
| 121 | const hotlList = ref(); | ||
| 122 | const omve = ref(); | ||
| 123 | const arr = ref([]); | ||
| 124 | const range = ref(); | ||
| 125 | const id = ref(props.id); | ||
| 126 | const hotelIdsArray = ref(); | ||
| 127 | const state = ref(); //是否住宿 | ||
| 128 | const remark = ref(); | ||
| 129 | const flag = ref(true); | ||
| 130 | const disabled = ref(false); | ||
| 131 | const costID = ref(); | ||
| 132 | const code = ref(); | ||
| 133 | const status = ref(); | ||
| 134 | const signId = ref(); | ||
| 135 | const data = reactive({ | ||
| 136 | addForm: {} | ||
| 137 | }); | ||
| 138 | const { addForm } = toRefs(data); | ||
| 139 | |||
| 140 | onShow(() => { | ||
| 141 | status.value = 3; | ||
| 142 | }); | ||
| 143 | getList(); | ||
| 144 | async function getList() { | ||
| 145 | addForm.value.id = id.value; | ||
| 146 | let res = await train.trainParticulars(addForm.value); | ||
| 147 | status.value = res.data.signStatus; | ||
| 148 | range.value = res.data.hotelList; | ||
| 149 | range.value.forEach(item => { | ||
| 150 | let tId = uuid(); | ||
| 151 | item.move = [ | ||
| 152 | { | ||
| 153 | moveIntoTime: item.moveIntoTime.replace(/-/g, '/'), | ||
| 154 | leaveTime: item.leaveTime.replace(/-/g, '/'), | ||
| 155 | id: tId, | ||
| 156 | hotlId: item.id, | ||
| 157 | move: [item.moveIntoTime.replace(/-/g, '/'), item.leaveTime.replace(/-/g, '/')] | ||
| 158 | } | ||
| 159 | ]; | ||
| 160 | }); | ||
| 161 | // 数据加工 | ||
| 162 | |||
| 163 | if (res.data.signId) signId.value = res.data.signId; | ||
| 164 | console.log(range.value); | ||
| 165 | } | ||
| 166 | |||
| 167 | function uuid() { | ||
| 168 | var s = []; | ||
| 169 | var hexDigits = '0123456789abcdef'; | ||
| 170 | for (var i = 0; i < 36; i++) { | ||
| 171 | s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1); | ||
| 172 | } | ||
| 173 | s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010 | ||
| 174 | s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01 | ||
| 175 | s[8] = s[13] = s[18] = s[23] = '-'; | ||
| 176 | var uuid = s.join(''); | ||
| 177 | return uuid; | ||
| 178 | } | ||
| 179 | |||
| 180 | // 是否住宿 | ||
| 181 | function changeRadio(e) { | ||
| 182 | console.log(e); | ||
| 183 | if (e.target.value == 0) { | ||
| 184 | hotShow.value = false; | ||
| 185 | } else { | ||
| 186 | hotShow.value = true; | ||
| 187 | } | ||
| 188 | } | ||
| 189 | |||
| 190 | // 获取用酒店信息 | ||
| 191 | function change(e) { | ||
| 192 | hotelIdsArray.value = e.target; | ||
| 193 | } | ||
| 194 | |||
| 195 | // 封装数据处理 | ||
| 196 | function changeKey(arr) { | ||
| 197 | let newArr = []; | ||
| 198 | arr.forEach(item => { | ||
| 199 | newArr.push({ | ||
| 200 | text: item.moveIntoTimeStr, | ||
| 201 | value: item.id | ||
| 202 | }); | ||
| 203 | }); | ||
| 204 | return newArr; | ||
| 205 | } | ||
| 206 | |||
| 207 | // 下一步 | ||
| 208 | async function nextFN() { | ||
| 209 | await initData(); | ||
| 210 | } | ||
| 211 | |||
| 212 | // 上一步 | ||
| 213 | function upFN() { | ||
| 214 | console.log(111); | ||
| 215 | emit('nextFN', 1); | ||
| 216 | } | ||
| 217 | |||
| 218 | // 是否住宿 | ||
| 219 | function radio(e) { | ||
| 220 | console.log(e); | ||
| 221 | e.target.value == 1 ? (flag.value = true) : (flag.value = false); | ||
| 222 | console.log(flag.value); | ||
| 223 | } | ||
| 224 | |||
| 225 | // 页面跳转 | ||
| 226 | async function goRenew() { | ||
| 227 | let path = `/pages/train/costBreakdown/costBreakdown?id=` + id.value; | ||
| 228 | await wx.navigateTo({ | ||
| 229 | url: path | ||
| 230 | }); | ||
| 231 | } | ||
| 232 | |||
| 233 | function checkedFN(item) { | ||
| 234 | item.hotelFlag = !item.hotelFlag; | ||
| 235 | } | ||
| 236 | |||
| 237 | // 日期确定时处发 | ||
| 238 | // function maskClick(item) { | ||
| 239 | // item.move.forEach(val => { | ||
| 240 | // val = val.replace(/-/g, '/'); | ||
| 241 | // }); | ||
| 242 | // console.log(item.move); | ||
| 243 | // console.log(item); | ||
| 244 | // } | ||
| 245 | |||
| 246 | // 添加住宿 | ||
| 247 | function addHot(item) { | ||
| 248 | let tId = uuid; | ||
| 249 | item.move.push({ | ||
| 250 | moveIntoTime: item.moveIntoTime.replace(/-/g, '/'), | ||
| 251 | leaveTime: item.leaveTime.replace(/-/g, '/'), | ||
| 252 | id: tId, | ||
| 253 | move: [item.moveIntoTime.replace(/-/g, '/'), item.leaveTime.replace(/-/g, '/')], | ||
| 254 | hotlId: item.id | ||
| 255 | }); | ||
| 256 | } | ||
| 257 | |||
| 258 | function delHot(item, val) { | ||
| 259 | item.move = item.move.filter(obj => { | ||
| 260 | return obj.id != val.id; | ||
| 261 | }); | ||
| 262 | } | ||
| 263 | |||
| 264 | // 提交 | ||
| 265 | async function initData() { | ||
| 266 | let list = null; | ||
| 267 | list = JSON.parse(JSON.stringify(range.value)); | ||
| 268 | // 1.过滤没有选中的酒店 | ||
| 269 | list = list.filter(item => { | ||
| 270 | return item.hotelFlag == true; | ||
| 271 | }); | ||
| 272 | // 2.过滤没有选择日期的 | ||
| 273 | let arr = []; | ||
| 274 | list.forEach((item, index) => { | ||
| 275 | arr[index] = item; | ||
| 276 | arr[index].move = item.move.filter(val => { | ||
| 277 | return val.move.length != 0; | ||
| 278 | }); | ||
| 279 | }); | ||
| 280 | |||
| 281 | // 3.过滤酒店日期相同 | ||
| 282 | let arr1 = []; | ||
| 283 | arr.forEach((item, index) => { | ||
| 284 | item.move.forEach(val => { | ||
| 285 | arr1.push(val); | ||
| 286 | }); | ||
| 287 | }); | ||
| 288 | let arr2 = []; | ||
| 289 | arr1.forEach(item => { | ||
| 290 | item.move = item.move.join(); | ||
| 291 | arr2.push({ | ||
| 292 | hotlId: item.hotlId, | ||
| 293 | move: item.move | ||
| 294 | }); | ||
| 295 | }); | ||
| 296 | // // 去重 | ||
| 297 | // for (var i = 0; i < arr2.length - 1; i++) { | ||
| 298 | // for (var j = i + 1; j < arr2.length; j++) { | ||
| 299 | // if (arr2[i].move == arr2[j].move) { | ||
| 300 | // arr2.splice(j, 1); | ||
| 301 | // j--; | ||
| 302 | // } | ||
| 303 | // } | ||
| 304 | // } | ||
| 305 | |||
| 306 | if (flag.value) { | ||
| 307 | if (arr2.length == 0) { | ||
| 308 | uni.showToast({ | ||
| 309 | title: '请选择入住酒店!', | ||
| 310 | duration: 2000, | ||
| 311 | icon: 'error' | ||
| 312 | }); | ||
| 313 | return false; | ||
| 314 | } | ||
| 315 | addForm.value.hotelIdsArray = arr2; | ||
| 316 | } else { | ||
| 317 | addForm.value.hotelIdsArray = []; | ||
| 318 | } | ||
| 319 | addForm.value.projectIdsArray = props.projectIdsArray; | ||
| 320 | addForm.value.examIdsArray = props.examIdsArry; | ||
| 321 | addForm.value.trainId = id.value; | ||
| 322 | addForm.value.remark = remark.value; | ||
| 323 | let res = null; | ||
| 324 | // if (status.value == null || status.value == 4) { | ||
| 325 | // 添加 | ||
| 326 | // addForm.value.id = null | ||
| 327 | addForm.value.id = signId.value; | ||
| 328 | res = await train.trainNext(addForm.value); | ||
| 329 | signId.value = res.data; | ||
| 330 | // } else { | ||
| 331 | // // 修改 | ||
| 332 | // addForm.value.id = signId.value | ||
| 333 | // res = await train.trainUpdata(addForm.value); | ||
| 334 | // } | ||
| 335 | costID.value = res.data; | ||
| 336 | // 报名成功才跳转 | ||
| 337 | if (res.code == 200) { | ||
| 338 | // 酒店是否已住满 | ||
| 339 | |||
| 340 | goRenew(); | ||
| 341 | } | ||
| 342 | } | ||
| 343 | </script> | ||
| 344 | |||
| 345 | <style scoped lang="scss"> | ||
| 346 | .box { | ||
| 347 | margin-top: 5rpx; | ||
| 348 | padding: 25rpx; | ||
| 349 | |||
| 350 | .bgcColor { | ||
| 351 | background-color: #fff; | ||
| 352 | border-radius: 15rpx; | ||
| 353 | padding: 25rpx; | ||
| 354 | } | ||
| 355 | |||
| 356 | .box-title { | ||
| 357 | padding: 25rpx; | ||
| 358 | display: flex; | ||
| 359 | justify-content: space-between; | ||
| 360 | margin-bottom: 30rpx; | ||
| 361 | background-color: #fff; | ||
| 362 | border-radius: 15rpx; | ||
| 363 | } | ||
| 364 | |||
| 365 | .title-left { | ||
| 366 | text { | ||
| 367 | font-size: 30rpx; | ||
| 368 | font-family: PingFang SC; | ||
| 369 | font-weight: 400; | ||
| 370 | color: #000000; | ||
| 371 | } | ||
| 372 | } | ||
| 373 | |||
| 374 | .box-conter { | ||
| 375 | padding: 25rpx 0; | ||
| 376 | display: block; | ||
| 377 | |||
| 378 | .conter-conter { | ||
| 379 | margin-bottom: 20rpx; | ||
| 380 | |||
| 381 | .conter-top { | ||
| 382 | display: flex; | ||
| 383 | justify-content: space-between; | ||
| 384 | margin-bottom: 10rpx; | ||
| 385 | |||
| 386 | .text { | ||
| 387 | font-size: 33rpx; | ||
| 388 | font-family: PingFang SC; | ||
| 389 | font-weight: 500; | ||
| 390 | color: #2b3133; | ||
| 391 | } | ||
| 392 | |||
| 393 | .checkbox { | ||
| 394 | } | ||
| 395 | } | ||
| 396 | |||
| 397 | .box-dress { | ||
| 398 | font-family: PingFang SC; | ||
| 399 | font-weight: 400; | ||
| 400 | color: #2b3133; | ||
| 401 | font-size: 24rpx; | ||
| 402 | border-bottom: 1px solid #e6e6e6; | ||
| 403 | padding-bottom: 32rpx; | ||
| 404 | } | ||
| 405 | |||
| 406 | .conter-text { | ||
| 407 | .conter-liner { | ||
| 408 | display: flex; | ||
| 409 | justify-content: space-between; | ||
| 410 | margin-top: 20rpx; | ||
| 411 | padding: 0 10rpx; | ||
| 412 | |||
| 413 | .liner-left { | ||
| 414 | font-size: 28rpx; | ||
| 415 | font-family: PingFang SC; | ||
| 416 | font-weight: 400; | ||
| 417 | color: #7b7f83; | ||
| 418 | padding-top: 10rpx; | ||
| 419 | } | ||
| 420 | |||
| 421 | .liner-right { | ||
| 422 | font-size: 28rpx; | ||
| 423 | font-family: PingFang SC; | ||
| 424 | font-weight: 400; | ||
| 425 | color: #2b3133; | ||
| 426 | width: 80%; | ||
| 427 | text-align: right; | ||
| 428 | } | ||
| 429 | } | ||
| 430 | } | ||
| 431 | } | ||
| 432 | } | ||
| 433 | |||
| 434 | .remark { | ||
| 435 | margin-top: 35rpx; | ||
| 436 | display: flex; | ||
| 437 | justify-content: space-between; | ||
| 438 | margin-bottom: 120rpx; | ||
| 439 | background-color: #fff; | ||
| 440 | border-radius: 15rpx; | ||
| 441 | padding: 10rpx 25rpx; | ||
| 442 | |||
| 443 | .liner-left { | ||
| 444 | font-size: 28rpx; | ||
| 445 | font-family: PingFang SC; | ||
| 446 | font-weight: 400; | ||
| 447 | color: #7b7f83; | ||
| 448 | padding-top: 18rpx; | ||
| 449 | } | ||
| 450 | } | ||
| 451 | |||
| 452 | .foot { | ||
| 453 | background-color: #ffffff; | ||
| 454 | padding: 20rpx 0; | ||
| 455 | position: absolute; | ||
| 456 | left: 0; | ||
| 457 | bottom: 0; | ||
| 458 | width: 100%; | ||
| 459 | display: flex; | ||
| 460 | |||
| 461 | .button { | ||
| 462 | margin: 0 auto; | ||
| 463 | height: 80rpx; | ||
| 464 | width: 300rpx; | ||
| 465 | text-align: center; | ||
| 466 | font-size: 32rpx; | ||
| 467 | font-family: PingFang SC; | ||
| 468 | font-weight: 500; | ||
| 469 | color: #ffffff; | ||
| 470 | line-height: 80rpx; | ||
| 471 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 472 | border-radius: 40rpx; | ||
| 473 | } | ||
| 474 | |||
| 475 | .button1 { | ||
| 476 | margin: 0 auto; | ||
| 477 | height: 80rpx; | ||
| 478 | width: 300rpx; | ||
| 479 | text-align: center; | ||
| 480 | font-size: 32rpx; | ||
| 481 | font-family: PingFang SC; | ||
| 482 | font-weight: 500; | ||
| 483 | line-height: 80rpx; | ||
| 484 | background: #fff; | ||
| 485 | border-radius: 40rpx; | ||
| 486 | border: 1px solid #2ed981; | ||
| 487 | color: #2ed981; | ||
| 488 | } | ||
| 489 | } | ||
| 490 | |||
| 491 | .select { | ||
| 492 | width: 300rpx; | ||
| 493 | } | ||
| 494 | } | ||
| 495 | |||
| 496 | .uni-date { | ||
| 497 | flex: 0; | ||
| 498 | width: 65%; | ||
| 499 | } | ||
| 500 | |||
| 501 | .popup-center { | ||
| 502 | display: flex; | ||
| 503 | justify-content: space-between; | ||
| 504 | } | ||
| 505 | |||
| 506 | .popup-title { | ||
| 507 | display: flex; | ||
| 508 | justify-content: space-between; | ||
| 509 | border-bottom: 1px solid #e6e6e6; | ||
| 510 | padding: 30rpx 50rpx; | ||
| 511 | } | ||
| 512 | |||
| 513 | .popup-title-left { | ||
| 514 | font-size: 30rpx; | ||
| 515 | font-weight: 400; | ||
| 516 | color: 000; | ||
| 517 | font-family: PingFangSC-Medium; | ||
| 518 | } | ||
| 519 | |||
| 520 | .popup-body { | ||
| 521 | border-bottom: 1px solid #e6e6e6; | ||
| 522 | padding: 15rpx 50rpx; | ||
| 523 | color: #4c5359; | ||
| 524 | font-size: 30rpx; | ||
| 525 | } | ||
| 526 | |||
| 527 | .popup-box { | ||
| 528 | height: 500rpx; | ||
| 529 | overflow-y: scroll; | ||
| 530 | } | ||
| 531 | |||
| 532 | .liner-right-hotl { | ||
| 533 | display: flex; | ||
| 534 | } | ||
| 535 | |||
| 536 | .liner-del { | ||
| 537 | margin-top: 19rpx; | ||
| 538 | } | ||
| 539 | </style> |
| 1 | <template> | ||
| 2 | <view class=" conter-box"> | ||
| 3 | <view class="box" v-if="props.trainProjectsList.length != 0"> | ||
| 4 | <view class="text">培训科目</view> | ||
| 5 | <view class="box2"> | ||
| 6 | <checkbox-group> | ||
| 7 | <view class="box-check" v-for="item in props.trainProjectsList" :key="item.id"> | ||
| 8 | <view class=""> | ||
| 9 | <view class="title">{{ item.projectName }}</view> | ||
| 10 | <view class="content"> | ||
| 11 | {{ item.isNecessary == 1 ? '必选' : '非必选' }} 合计: | ||
| 12 | <view class="span">{{ item.cost }}元</view> | ||
| 13 | </view> | ||
| 14 | </view> | ||
| 15 | <view class="checkbox"> | ||
| 16 | <checkbox | ||
| 17 | :disabled="item.isNecessary == 1" | ||
| 18 | :value="item.id" | ||
| 19 | @click="checkTrain(item)" | ||
| 20 | :checked="item.check" | ||
| 21 | /> | ||
| 22 | </view> | ||
| 23 | </view> | ||
| 24 | </checkbox-group> | ||
| 25 | </view> | ||
| 26 | </view> | ||
| 27 | <view class="box" v-if="props.examProjectsList.length != 0"> | ||
| 28 | <view class="text">考试科目</view> | ||
| 29 | <view class="box2"> | ||
| 30 | <checkbox-group> | ||
| 31 | <view class="box-check" v-for="item in props.examProjectsList" :key="item.id"> | ||
| 32 | <view class=""> | ||
| 33 | <view class="title">{{ item.projectName }}</view> | ||
| 34 | <view class="content"> | ||
| 35 | {{ item.isNecessary == 1 ? '必选' : '非必选' }} 合计: | ||
| 36 | <view class="span">{{ item.cost }}元</view> | ||
| 37 | </view> | ||
| 38 | </view> | ||
| 39 | <view class="checkbox"> | ||
| 40 | <checkbox | ||
| 41 | :disabled="item.isNecessary == 1" | ||
| 42 | :value="item.id" | ||
| 43 | @click="checkTrain(item)" | ||
| 44 | :checked="item.check" | ||
| 45 | /> | ||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | </checkbox-group> | ||
| 49 | </view> | ||
| 50 | </view> | ||
| 51 | </view> | ||
| 52 | <view class="foot"> | ||
| 53 | <view class="button1" @click="upFN">上一步</view> | ||
| 54 | <view class="button" @click="nextFN">下一步</view> | ||
| 55 | </view> | ||
| 56 | <view class="nodata " v-if="props.examProjectsList.length == 0 && props.trainProjectsList.length == 0"> | ||
| 57 | 没有培训科目 | ||
| 58 | </view> | ||
| 59 | </template> | ||
| 60 | |||
| 61 | <script setup> | ||
| 62 | import { forEach } from 'lodash'; | ||
| 63 | import { ref, getCurrentInstance, reactive, toRefs } from 'vue'; | ||
| 64 | const props = defineProps({ | ||
| 65 | trainProjectsList: {}, | ||
| 66 | examProjectsList: {}, | ||
| 67 | hotelList: {}, | ||
| 68 | id: {} | ||
| 69 | }); | ||
| 70 | const data = reactive({ | ||
| 71 | projectIdsArray: [] | ||
| 72 | }); | ||
| 73 | |||
| 74 | const examIdsArry = ref([]); | ||
| 75 | const { projectIdsArray } = toRefs(data); | ||
| 76 | const emit = defineEmits(['nextFN']); | ||
| 77 | const checkbox1 = ref([0]); | ||
| 78 | |||
| 79 | function checkTrain(item) { | ||
| 80 | if (item.isNecessary == 1) { | ||
| 81 | item.check = true; | ||
| 82 | } else { | ||
| 83 | item.check = !item.check; | ||
| 84 | } | ||
| 85 | } | ||
| 86 | |||
| 87 | // 上一步 | ||
| 88 | function upFN() { | ||
| 89 | emit('nextFN', 0); | ||
| 90 | } | ||
| 91 | |||
| 92 | // 下一步 | ||
| 93 | function nextFN() { | ||
| 94 | let falg = true; | ||
| 95 | let arr1 = []; | ||
| 96 | let arr2 = []; | ||
| 97 | props.examProjectsList.forEach(item => { | ||
| 98 | if (item.check) { | ||
| 99 | arr1.push(item.id); | ||
| 100 | } | ||
| 101 | }); | ||
| 102 | props.trainProjectsList.forEach(item => { | ||
| 103 | if (item.check) { | ||
| 104 | arr2.push(item.id); | ||
| 105 | } | ||
| 106 | }); | ||
| 107 | let examList = JSON.parse(JSON.stringify(props.examProjectsList)); | ||
| 108 | let trainList = JSON.parse(JSON.stringify(props.trainProjectsList)); | ||
| 109 | examList.concat(trainList).forEach(item => { | ||
| 110 | if (item.isNecessary == 1 && item.check == false) { | ||
| 111 | falg = false; | ||
| 112 | } | ||
| 113 | }); | ||
| 114 | |||
| 115 | if (falg) { | ||
| 116 | examIdsArry.value = arr1; | ||
| 117 | projectIdsArray.value = arr2; | ||
| 118 | if (props.hotelList.length == 0) { | ||
| 119 | // 没有酒店直接报名 | ||
| 120 | // 页面跳转 | ||
| 121 | let path = `/pages/train/costBreakdown/costBreakdown?id=` + props.id; | ||
| 122 | wx.navigateTo({ | ||
| 123 | url: path | ||
| 124 | }); | ||
| 125 | } else { | ||
| 126 | emit('nextFN', 2, projectIdsArray.value, examIdsArry.value); | ||
| 127 | } | ||
| 128 | } else { | ||
| 129 | uni.showToast({ | ||
| 130 | title: '请选择必选科目!', | ||
| 131 | duration: 2000, | ||
| 132 | icon: 'error' | ||
| 133 | }); | ||
| 134 | return false; | ||
| 135 | } | ||
| 136 | } | ||
| 137 | </script> | ||
| 138 | |||
| 139 | <style scoped lang="scss"> | ||
| 140 | .nodata { | ||
| 141 | background: url(/static/nodata.png) no-repeat; | ||
| 142 | background-size: 100%; | ||
| 143 | width: 100%; | ||
| 144 | height: 835rpx; | ||
| 145 | color: #aaa59f; | ||
| 146 | font-size: 50rpx; | ||
| 147 | } | ||
| 148 | |||
| 149 | .conter-box { | ||
| 150 | padding-bottom: 100rpx; | ||
| 151 | } | ||
| 152 | |||
| 153 | .box { | ||
| 154 | padding: 34rpx 25rpx; | ||
| 155 | background-color: #f4f6fa; | ||
| 156 | padding-bottom: 0; | ||
| 157 | |||
| 158 | .box2 { | ||
| 159 | background-color: #fff; | ||
| 160 | border-radius: 15rpx; | ||
| 161 | margin-top: 20rpx; | ||
| 162 | } | ||
| 163 | |||
| 164 | .text { | ||
| 165 | height: 29px; | ||
| 166 | font-size: 30rpx; | ||
| 167 | font-family: PingFang SC; | ||
| 168 | font-weight: 500; | ||
| 169 | color: #000000; | ||
| 170 | line-height: 62rpx; | ||
| 171 | } | ||
| 172 | |||
| 173 | .box-check { | ||
| 174 | padding: 40rpx; | ||
| 175 | display: flex; | ||
| 176 | justify-content: space-between; | ||
| 177 | border-bottom: 1rpx solid #e6e6e6; | ||
| 178 | padding-bottom: 20rpx; | ||
| 179 | |||
| 180 | :deep(.checkbox__inner) { | ||
| 181 | background-color: #d9d9d9 !important; | ||
| 182 | border-color: #d9d9d9 !important; | ||
| 183 | border-radius: 50% !important; | ||
| 184 | width: 45rpx !important; | ||
| 185 | height: 45rpx !important; | ||
| 186 | line-height: 40rpx; | ||
| 187 | } | ||
| 188 | |||
| 189 | .text { | ||
| 190 | font-size: 12px; | ||
| 191 | color: #666; | ||
| 192 | margin-top: 5px; | ||
| 193 | } | ||
| 194 | |||
| 195 | .title { | ||
| 196 | font-size: 30rpx; | ||
| 197 | font-family: PingFang SC; | ||
| 198 | font-weight: 400; | ||
| 199 | color: #2b3133; | ||
| 200 | margin-bottom: 10rpx; | ||
| 201 | } | ||
| 202 | |||
| 203 | .content { | ||
| 204 | display: flex; | ||
| 205 | font-size: 30rpx; | ||
| 206 | font-family: PingFang SC; | ||
| 207 | font-weight: 400; | ||
| 208 | color: #2b3133; | ||
| 209 | |||
| 210 | .span { | ||
| 211 | color: #ff8124; | ||
| 212 | font-size: 28rpx; | ||
| 213 | font-family: PingFang SC; | ||
| 214 | font-weight: 400; | ||
| 215 | } | ||
| 216 | } | ||
| 217 | } | ||
| 218 | |||
| 219 | :deep(.checkbox__inner-icon) { | ||
| 220 | position: absolute !important; | ||
| 221 | top: 4px !important; | ||
| 222 | left: 7px !important; | ||
| 223 | color: #000 !important; | ||
| 224 | } | ||
| 225 | |||
| 226 | :deep(.uni-data-checklist .checklist-group .checklist-box) { | ||
| 227 | margin-right: 0; | ||
| 228 | } | ||
| 229 | } | ||
| 230 | |||
| 231 | .conter-button { | ||
| 232 | position: absolute; | ||
| 233 | left: 0; | ||
| 234 | bottom: 10rpx; | ||
| 235 | width: 100%; | ||
| 236 | display: flex; | ||
| 237 | justify-content: center; | ||
| 238 | |||
| 239 | .button { | ||
| 240 | height: 80rpx; | ||
| 241 | width: 500rpx; | ||
| 242 | text-align: center; | ||
| 243 | font-size: 32rpx; | ||
| 244 | font-family: PingFang SC; | ||
| 245 | font-weight: 500; | ||
| 246 | color: #ffffff; | ||
| 247 | line-height: 80rpx; | ||
| 248 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 249 | border-radius: 40rpx; | ||
| 250 | } | ||
| 251 | } | ||
| 252 | |||
| 253 | .foot { | ||
| 254 | display: flex; | ||
| 255 | background-color: #ffffff; | ||
| 256 | padding: 20rpx 0; | ||
| 257 | position: absolute; | ||
| 258 | left: 0; | ||
| 259 | bottom: 0; | ||
| 260 | width: 100%; | ||
| 261 | |||
| 262 | .button { | ||
| 263 | margin: 0 auto; | ||
| 264 | height: 80rpx; | ||
| 265 | width: 300rpx; | ||
| 266 | text-align: center; | ||
| 267 | font-size: 32rpx; | ||
| 268 | font-family: PingFang SC; | ||
| 269 | font-weight: 500; | ||
| 270 | color: #ffffff; | ||
| 271 | line-height: 80rpx; | ||
| 272 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 273 | border-radius: 40rpx; | ||
| 274 | } | ||
| 275 | |||
| 276 | .button1 { | ||
| 277 | margin: 0 auto; | ||
| 278 | height: 80rpx; | ||
| 279 | width: 300rpx; | ||
| 280 | text-align: center; | ||
| 281 | font-size: 32rpx; | ||
| 282 | font-family: PingFang SC; | ||
| 283 | font-weight: 500; | ||
| 284 | line-height: 80rpx; | ||
| 285 | background: #fff; | ||
| 286 | border-radius: 40rpx; | ||
| 287 | border: 1px solid #2ed981; | ||
| 288 | color: #2ed981; | ||
| 289 | } | ||
| 290 | } | ||
| 291 | </style> |
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="liner" v-for="item in props.scheduleList" :key="item.id"> | ||
| 4 | <view class="timer"> | ||
| 5 | <uni-icons custom-prefix="iconfont" type="icon-ai253" color="#1ec886" size="20"></uni-icons> | ||
| 6 | {{ item.dayStr }} 10:00-12:00 | ||
| 7 | </view> | ||
| 8 | <view class="conetr">{{ item.event }}</view> | ||
| 9 | <view class="data"> | ||
| 10 | <uni-icons custom-prefix="iconfont" type="icon-loufangfangzi"></uni-icons> | ||
| 11 | {{ item.place }} | ||
| 12 | </view> | ||
| 13 | </view> | ||
| 14 | <view class="nodata" v-if="props?.scheduleList?.length == 0">你还没有日程安排</view> | ||
| 15 | </view> | ||
| 16 | </template> | ||
| 17 | |||
| 18 | <script setup> | ||
| 19 | import { ref, getCurrentInstance, reactive, toRefs } from 'vue'; | ||
| 20 | const props = defineProps({ | ||
| 21 | scheduleList: {} | ||
| 22 | }); | ||
| 23 | </script> | ||
| 24 | |||
| 25 | <style scoped lang="scss"> | ||
| 26 | .nodata { | ||
| 27 | background: url(/static/nodata.png) no-repeat; | ||
| 28 | background-size: 100%; | ||
| 29 | width: 100%; | ||
| 30 | height: 835rpx; | ||
| 31 | color: #aaa59f; | ||
| 32 | font-size: 50rpx; | ||
| 33 | } | ||
| 34 | |||
| 35 | .box { | ||
| 36 | padding-top: 25rpx; | ||
| 37 | |||
| 38 | .liner { | ||
| 39 | margin-bottom: 20rpx; | ||
| 40 | background-color: #fff; | ||
| 41 | border-radius: 15rpx; | ||
| 42 | padding: 20rpx; | ||
| 43 | } | ||
| 44 | |||
| 45 | .timer { | ||
| 46 | display: flex; | ||
| 47 | font-size: 28rpx; | ||
| 48 | font-family: PingFang SC; | ||
| 49 | font-weight: 400; | ||
| 50 | color: #1ec886; | ||
| 51 | } | ||
| 52 | |||
| 53 | .conetr { | ||
| 54 | font-size: 30rpx; | ||
| 55 | font-family: PingFang SC; | ||
| 56 | font-weight: 400; | ||
| 57 | color: #2b3133; | ||
| 58 | margin: 25rpx 0; | ||
| 59 | } | ||
| 60 | |||
| 61 | .data { | ||
| 62 | font-size: 28rpx; | ||
| 63 | font-family: PingFang SC; | ||
| 64 | font-weight: 400; | ||
| 65 | color: #7b7f83; | ||
| 66 | } | ||
| 67 | } | ||
| 68 | </style> |
training/components/ulist/ulist.vue
deleted
100644 → 0
| 1 | <template> | ||
| 2 | <view class="big-box"> | ||
| 3 | <view class="list-box"> | ||
| 4 | <view class="image"> | ||
| 5 | <image class="img" referrer="no-referrer|origin|unsafe-url" :src="porps.pic" mode="aspectFill"></image> | ||
| 6 | </view> | ||
| 7 | <view class="text"> | ||
| 8 | <view class="text-title">{{ porps.title }}</view> | ||
| 9 | <view class="text-card color" v-if="porps.card == '报名中'">{{ porps.card }}</view> | ||
| 10 | <view class="text-card color1" v-if="porps.card == '进行中'">{{ porps.card }}</view> | ||
| 11 | <view class="text-card color2" v-if="porps.card == '即将开始'">{{ porps.card }}</view> | ||
| 12 | <view class="text-card color3" v-if="porps.card == '已结束'">{{ porps.card }}</view> | ||
| 13 | <view class="text-card color4" v-if="porps.card == '培训未开始'">{{ porps.card }}</view> | ||
| 14 | <view class="text-card color4" v-if="porps.card == '报名未开始'">{{ porps.card }}</view> | ||
| 15 | <view class="text-timer ">报名时间:{{ porps.timer }}</view> | ||
| 16 | </view> | ||
| 17 | </view> | ||
| 18 | <view class="hr"></view> | ||
| 19 | </view> | ||
| 20 | </template> | ||
| 21 | |||
| 22 | <script setup> | ||
| 23 | const porps = defineProps({ | ||
| 24 | pic: { | ||
| 25 | type: String | ||
| 26 | }, | ||
| 27 | title: { | ||
| 28 | type: String | ||
| 29 | }, | ||
| 30 | card: { | ||
| 31 | type: String | ||
| 32 | }, | ||
| 33 | timer: { | ||
| 34 | type: String | ||
| 35 | } | ||
| 36 | }); | ||
| 37 | </script> | ||
| 38 | |||
| 39 | <style lang="scss"> | ||
| 40 | .big-box { | ||
| 41 | width: 100%; | ||
| 42 | padding: 25rpx 0; | ||
| 43 | |||
| 44 | .hr { | ||
| 45 | width: 100%; | ||
| 46 | border-bottom: 1rpx solid #e5e5e5; | ||
| 47 | padding-top: 25rpx; | ||
| 48 | } | ||
| 49 | |||
| 50 | .list-box { | ||
| 51 | width: 100%; | ||
| 52 | height: 180rpx; | ||
| 53 | display: flex; | ||
| 54 | |||
| 55 | .image { | ||
| 56 | width: 270rpx; | ||
| 57 | height: 180rpx; | ||
| 58 | padding-right: 25rpx; | ||
| 59 | |||
| 60 | .img { | ||
| 61 | width: 270rpx; | ||
| 62 | height: 180rpx; | ||
| 63 | border-radius: 15rpx; | ||
| 64 | } | ||
| 65 | } | ||
| 66 | |||
| 67 | .text { | ||
| 68 | margin-left: 20rpx; | ||
| 69 | |||
| 70 | .text-title { | ||
| 71 | text-align: left; | ||
| 72 | font-size: 30rpx; | ||
| 73 | font-family: PingFang SC; | ||
| 74 | font-weight: 400; | ||
| 75 | color: #000000; | ||
| 76 | } | ||
| 77 | |||
| 78 | .text-card { | ||
| 79 | font-size: 20rpx; | ||
| 80 | width: 110rpx; | ||
| 81 | height: 32rpx; | ||
| 82 | margin-top: 57rpx; | ||
| 83 | text-align: center; | ||
| 84 | font-family: PingFang SC; | ||
| 85 | font-weight: 400; | ||
| 86 | color: #ffffff; | ||
| 87 | border-radius: 16px 16px 16px 0px; | ||
| 88 | } | ||
| 89 | |||
| 90 | .color { | ||
| 91 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 92 | } | ||
| 93 | |||
| 94 | .color1 { | ||
| 95 | background: linear-gradient(270deg, #be8efb, #a76df4); | ||
| 96 | } | ||
| 97 | |||
| 98 | .color2 { | ||
| 99 | background: linear-gradient(270deg, #fea449, #ffb95f); | ||
| 100 | } | ||
| 101 | |||
| 102 | .color3 { | ||
| 103 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 104 | } | ||
| 105 | |||
| 106 | .color4 { | ||
| 107 | background: linear-gradient(270deg, #40d8ee, #53a7f6); | ||
| 108 | } | ||
| 109 | |||
| 110 | .text-timer { | ||
| 111 | margin-top: 20rpx; | ||
| 112 | height: 23rpx; | ||
| 113 | font-size: 24rpx; | ||
| 114 | font-family: PingFang SC; | ||
| 115 | font-weight: 400; | ||
| 116 | color: #7b7f83; | ||
| 117 | } | ||
| 118 | } | ||
| 119 | } | ||
| 120 | } | ||
| 121 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
training/components/ulist/ulist1.vue
deleted
100644 → 0
| 1 | <template> | ||
| 2 | <view class="big-box"> | ||
| 3 | <view class="list-box"> | ||
| 4 | <view class="image"> | ||
| 5 | <image | ||
| 6 | class="img" | ||
| 7 | referrer="no-referrer|origin|unsafe-url" | ||
| 8 | :src="porps.item.cover" | ||
| 9 | mode="aspectFill" | ||
| 10 | ></image> | ||
| 11 | </view> | ||
| 12 | <view class="text"> | ||
| 13 | <view class="text-title">{{ porps.item.trainName }}</view> | ||
| 14 | <view class="text-card color1" v-if="porps.item.statusStr == '审核通过'"> | ||
| 15 | {{ porps.item.statusStr }} | ||
| 16 | </view> | ||
| 17 | <view class="text-card color2" v-if="porps.item.statusStr == '待审核'"> | ||
| 18 | {{ | ||
| 19 | porps.item.status == '0' && porps.item.payStatus == '0' | ||
| 20 | ? porps.item.payStatusStr | ||
| 21 | : porps.item.statusStr | ||
| 22 | }} | ||
| 23 | </view> | ||
| 24 | <view class="text-card color3" v-if="porps.item.statusStr == '报名失败'"> | ||
| 25 | {{ porps.item.statusStr }} | ||
| 26 | </view> | ||
| 27 | <view class="text-card color3" v-if="porps.item.statusStr == '审核拒绝'"> | ||
| 28 | {{ porps.item.statusStr }} | ||
| 29 | </view> | ||
| 30 | <view class="text-card color4" v-if="porps.item.statusStr == '待支付'">{{ porps.item.statusStr }}</view> | ||
| 31 | <view class="text-card color4" v-if="porps.item.statusStr == '待提交'">{{ porps.item.statusStr }}</view> | ||
| 32 | <view class="text-card color5" v-if="porps.item.statusStr == '已取消'">{{ porps.item.statusStr }}</view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | <view class="hr"></view> | ||
| 36 | </view> | ||
| 37 | </template> | ||
| 38 | |||
| 39 | <script setup> | ||
| 40 | const porps = defineProps({ | ||
| 41 | pic: { | ||
| 42 | type: String | ||
| 43 | }, | ||
| 44 | title: { | ||
| 45 | type: String | ||
| 46 | }, | ||
| 47 | card: { | ||
| 48 | type: String | ||
| 49 | }, | ||
| 50 | timer: { | ||
| 51 | type: String | ||
| 52 | }, | ||
| 53 | item: {} | ||
| 54 | }); | ||
| 55 | </script> | ||
| 56 | |||
| 57 | <style lang="scss"> | ||
| 58 | .big-box { | ||
| 59 | width: 100%; | ||
| 60 | padding: 25rpx 0; | ||
| 61 | |||
| 62 | .hr { | ||
| 63 | width: 100%; | ||
| 64 | border-bottom: 1rpx solid #e5e5e5; | ||
| 65 | padding-top: 25rpx; | ||
| 66 | } | ||
| 67 | |||
| 68 | .list-box { | ||
| 69 | width: 100%; | ||
| 70 | height: 180rpx; | ||
| 71 | display: flex; | ||
| 72 | |||
| 73 | .image { | ||
| 74 | width: 270rpx; | ||
| 75 | height: 180rpx; | ||
| 76 | padding-right: 25rpx; | ||
| 77 | |||
| 78 | .img { | ||
| 79 | width: 270rpx; | ||
| 80 | height: 180rpx; | ||
| 81 | border-radius: 15rpx; | ||
| 82 | } | ||
| 83 | } | ||
| 84 | |||
| 85 | .text { | ||
| 86 | margin-left: 20rpx; | ||
| 87 | |||
| 88 | .text-title { | ||
| 89 | text-align: left; | ||
| 90 | font-size: 30rpx; | ||
| 91 | font-family: PingFang SC; | ||
| 92 | font-weight: 400; | ||
| 93 | color: #000000; | ||
| 94 | } | ||
| 95 | |||
| 96 | .text-card { | ||
| 97 | font-size: 20rpx; | ||
| 98 | width: 94rpx; | ||
| 99 | height: 32rpx; | ||
| 100 | margin-top: 57rpx; | ||
| 101 | text-align: center; | ||
| 102 | font-family: PingFang SC; | ||
| 103 | font-weight: 400; | ||
| 104 | color: #ffffff; | ||
| 105 | border-radius: 16px 16px 16px 0px; | ||
| 106 | } | ||
| 107 | |||
| 108 | .color1 { | ||
| 109 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 110 | } | ||
| 111 | |||
| 112 | .color2 { | ||
| 113 | background: linear-gradient(270deg, #be8efb, #a76df4); | ||
| 114 | } | ||
| 115 | |||
| 116 | .color3 { | ||
| 117 | background: linear-gradient(90deg, #f83841, #f76d74); | ||
| 118 | } | ||
| 119 | |||
| 120 | .color4 { | ||
| 121 | background: linear-gradient(90deg, #fea449, #ffb95f); | ||
| 122 | } | ||
| 123 | |||
| 124 | .color5 { | ||
| 125 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 126 | } | ||
| 127 | } | ||
| 128 | } | ||
| 129 | } | ||
| 130 | </style> |
training/detailPage.vue
deleted
100644 → 0
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="image"><img class="img" :src="form.activity.cover" mode="aspectFill" /></view> | ||
| 4 | <view class="nav"> | ||
| 5 | <view class="nav-title">{{ form.activity.name }}</view> | ||
| 6 | <view class="nva-center"> | ||
| 7 | <view class="nav-card color" v-if="state == '报名中'">{{ state }}</view> | ||
| 8 | <view class="nav-card color1" v-if="state == '进行中'">{{ state }}</view> | ||
| 9 | <view class="nav-card color2" v-if="state == '即将开始'">{{ state }}</view> | ||
| 10 | <view class="nav-card color3" v-if="form.activity.signStatus=='2'">报名已结束</view> | ||
| 11 | <view class="nav-card color4" v-if="form.activity.signStatus=='0'">报名未开始</view> | ||
| 12 | <view class="nav-card color4" v-if="state == '培训未开始'">{{ state }}</view> | ||
| 13 | |||
| 14 | </view> | ||
| 15 | <view class="date"> 培训时间:{{ form.activity.trainTimeRange }}</view> | ||
| 16 | <view class="date"> 联系人:{{ form.activity.personInCharge }}</view> | ||
| 17 | <view class="date"> 联系电话:{{ form.activity.contact }}</view> | ||
| 18 | <view class="date">培训相关条例<text class="text-primary" @click="downLoad(activity.signNoticeAttachmentUrl)">《报名须知》</text></view> | ||
| 19 | </view> | ||
| 20 | <view class="conter"> | ||
| 21 | <!-- <uni-segmented-control | ||
| 22 | activeColor="#C5161E" | ||
| 23 | :current="current" | ||
| 24 | :values="items" | ||
| 25 | @clickItem="onClickItem" | ||
| 26 | styleType="text" | ||
| 27 | ></uni-segmented-control> --> | ||
| 28 | <view class="content"> | ||
| 29 | <view v-show="current === 0"> | ||
| 30 | <view class="conter-middle"> | ||
| 31 | <view class="text">组委会</view> | ||
| 32 | <view class="text-group"> | ||
| 33 | <view class="date" v-html="form.activity.orgInfo"></view> | ||
| 34 | </view> | ||
| 35 | </view> | ||
| 36 | <view class="conter-bottom"> | ||
| 37 | <view class="text">培训考试内容</view> | ||
| 38 | <view class="nav-bar" @click="trainFN('bottom')"> | ||
| 39 | <view class="nav-bar-text">培训</view> | ||
| 40 | <view class="nav-bar-icon"><uni-icons type="forward"></uni-icons></view> | ||
| 41 | </view> | ||
| 42 | <view class="nav-bar" @click="examinationFN('bottom')"> | ||
| 43 | <view class="nav-bar-text">考试</view> | ||
| 44 | <view class="nav-bar-icon"><uni-icons type="forward"></uni-icons></view> | ||
| 45 | </view> | ||
| 46 | </view> | ||
| 47 | </view> | ||
| 48 | <view v-show="current === 1"><trainnSchedule :scheduleList="scheduleList" /></view> | ||
| 49 | </view> | ||
| 50 | </view> | ||
| 51 | <view class="buttonBox" v-if="current == 0"> | ||
| 52 | <view class="conter-button"> | ||
| 53 | <view class="button" v-if="false" @click="registered()">已报名</view> | ||
| 54 | <view | ||
| 55 | class="button" | ||
| 56 | v-if=" | ||
| 57 | state != 0 && | ||
| 58 | state != 1 && | ||
| 59 | state != 5 && | ||
| 60 | signStatusStr != '报名结束' && | ||
| 61 | signStatusStr != '报名未开始' | ||
| 62 | " | ||
| 63 | @click="applyFN()" | ||
| 64 | > | ||
| 65 | 培训报名 | ||
| 66 | </view> | ||
| 67 | <view class="info" v-if="signStatusStr == '报名结束'">报名结束</view> | ||
| 68 | <view class="info" v-if="signStatusStr == '等待审核'">已报名</view> | ||
| 69 | <view class="blue" v-if="signStatusStr == '报名未开始'">报名未开始</view> | ||
| 70 | </view> | ||
| 71 | </view> | ||
| 72 | <uni-popup ref="popup" background-color="#fff" @change="change"> | ||
| 73 | <view class="popup-content" :class="{ 'popup-height': type === 'left' || type === 'right' }"> | ||
| 74 | <view class="title"> | ||
| 75 | <view class="titel-left">{{ text }}</view> | ||
| 76 | <view class="title-right" @click="shut"> | ||
| 77 | <uni-icons class="icons" type="closeempty"></uni-icons> | ||
| 78 | </view> | ||
| 79 | </view> | ||
| 80 | <view class="popup-check" v-for="item in trainList" :key="item.id"> | ||
| 81 | {{ item.name }} | ||
| 82 | </view> | ||
| 83 | </view> | ||
| 84 | </uni-popup> | ||
| 85 | </view> | ||
| 86 | </template> | ||
| 87 | |||
| 88 | <script setup> | ||
| 89 | import trainnSchedule from '@/training/components/trainSchedule/trainSchedule.vue'; | ||
| 90 | import { onLoad, onReady, onShareAppMessage, onShareTimeline, onPullDownRefresh } from '@dcloudio/uni-app'; | ||
| 91 | import { ref, getCurrentInstance, reactive, toRefs } from 'vue'; | ||
| 92 | import * as train from '@/training/train.js'; | ||
| 93 | |||
| 94 | const items = ref(['详情', '日程']); | ||
| 95 | const current = ref(0); | ||
| 96 | const show = ref(true); | ||
| 97 | const showMore = ref(false); | ||
| 98 | const popup = ref(); | ||
| 99 | const state = ref(); | ||
| 100 | const signStatusStr = ref(); | ||
| 101 | const id = ref(); | ||
| 102 | const userList = ref(); | ||
| 103 | const type = ref('center'); | ||
| 104 | const trainList = ref(); | ||
| 105 | const text = ref(); | ||
| 106 | const scheduleList = ref(); | ||
| 107 | const height = ref(); | ||
| 108 | const flag = ref(true); | ||
| 109 | const status = ref(); | ||
| 110 | const tiem = ref(new Date().getTime()); | ||
| 111 | const newTime = ref(); | ||
| 112 | const data = reactive({ | ||
| 113 | form: {} | ||
| 114 | }); | ||
| 115 | const { form } = toRefs(data); | ||
| 116 | |||
| 117 | onLoad(option => { | ||
| 118 | id.value = option.trainId; | ||
| 119 | initData(); | ||
| 120 | }); | ||
| 121 | |||
| 122 | function filterTime(num) { | ||
| 123 | if (num) return num.slice(0, 16); | ||
| 124 | } | ||
| 125 | |||
| 126 | // 获取详情数据 | ||
| 127 | function initData() { | ||
| 128 | train.getTrainDetail(id.value).then(res=>{ | ||
| 129 | form.value = res.data; | ||
| 130 | signStatusStr.value = res.data.signStatusStr; | ||
| 131 | state.value = res.data.signStatus; | ||
| 132 | newTime.value = new Date(res.data.enrollEndTime).getTime(); | ||
| 133 | userList.value = res.data.userList[0]; | ||
| 134 | scheduleList.value = res.data.scheduleList; | ||
| 135 | setTimeout(() => { | ||
| 136 | getbox(); | ||
| 137 | }, 50); | ||
| 138 | }) | ||
| 139 | } | ||
| 140 | |||
| 141 | function change(e) { | ||
| 142 | show.value = e.show; | ||
| 143 | } | ||
| 144 | |||
| 145 | // 培训 | ||
| 146 | function trainFN(val) { | ||
| 147 | text.value = '培训'; | ||
| 148 | popup.value.open(val); | ||
| 149 | trainList.value = form.value.subjectTrainList; | ||
| 150 | } | ||
| 151 | |||
| 152 | // 考试 | ||
| 153 | function examinationFN(val) { | ||
| 154 | text.value = '考试'; | ||
| 155 | popup.value.open(val); | ||
| 156 | trainList.value = form.value.examVoList; | ||
| 157 | } | ||
| 158 | |||
| 159 | // 分段器 | ||
| 160 | function onClickItem(e) { | ||
| 161 | if (current.values != e.currentIndex) { | ||
| 162 | current.value = e.currentIndex; | ||
| 163 | } | ||
| 164 | } | ||
| 165 | // 已报名 | ||
| 166 | function registered() { | ||
| 167 | uni.showToast({ | ||
| 168 | title: '已报名,请不要重复报名!', | ||
| 169 | duration: 2000, | ||
| 170 | icon: 'error' | ||
| 171 | }); | ||
| 172 | return false; | ||
| 173 | } | ||
| 174 | |||
| 175 | // 获取容器高度 | ||
| 176 | function getbox() { | ||
| 177 | const query = wx.createSelectorQuery(); | ||
| 178 | query | ||
| 179 | .select('.text-content') | ||
| 180 | .boundingClientRect(function(rect) { | ||
| 181 | height.value = rect.height; | ||
| 182 | if (rect.height > 60) { | ||
| 183 | showMore.value = true; | ||
| 184 | } else { | ||
| 185 | showMore.value = false; | ||
| 186 | } | ||
| 187 | }) | ||
| 188 | .exec(); | ||
| 189 | } | ||
| 190 | |||
| 191 | // 查看更多与收起 | ||
| 192 | function getShow() { | ||
| 193 | if (height.value > 60) { | ||
| 194 | // 显示查看更多 | ||
| 195 | showMore.value = true; | ||
| 196 | // 固定容器高度 | ||
| 197 | } else { | ||
| 198 | // 隐藏查看更多 | ||
| 199 | showMore.value = false; | ||
| 200 | } | ||
| 201 | } | ||
| 202 | |||
| 203 | // 点击查看更多 | ||
| 204 | const move = () => { | ||
| 205 | // 1.文字 icon 转换 | ||
| 206 | // 2.容器高度自适应 | ||
| 207 | flag.value = !flag.value; | ||
| 208 | if (!flag.value) { | ||
| 209 | height.value = undefined; | ||
| 210 | } else { | ||
| 211 | height.value = 60; | ||
| 212 | } | ||
| 213 | }; | ||
| 214 | |||
| 215 | function applyFN() { | ||
| 216 | let path = '/pages/train/apply/apply?data=' + [id.value, status.value]; | ||
| 217 | wx.redirectTo({ | ||
| 218 | url: path | ||
| 219 | }); | ||
| 220 | } | ||
| 221 | |||
| 222 | // 关闭弹框 | ||
| 223 | function shut() { | ||
| 224 | popup.value.close(); | ||
| 225 | } | ||
| 226 | function downLoad(url){ | ||
| 227 | |||
| 228 | } | ||
| 229 | </script> | ||
| 230 | |||
| 231 | <style lang="scss" scoped> | ||
| 232 | .date{font-size: 26rpx;color: #999;} | ||
| 233 | .box { | ||
| 234 | background-color: #f7f8fa; | ||
| 235 | |||
| 236 | .image { | ||
| 237 | padding: 25rpx; | ||
| 238 | height: 320rpx; | ||
| 239 | background: #fff; | ||
| 240 | border-radius: 15rpx; | ||
| 241 | |||
| 242 | .img { | ||
| 243 | width: 100%; | ||
| 244 | height: 320rpx; | ||
| 245 | border-radius: 15rpx; | ||
| 246 | } | ||
| 247 | } | ||
| 248 | |||
| 249 | .nav { | ||
| 250 | padding: 30rpx 25rpx; | ||
| 251 | background-color: #fff; | ||
| 252 | |||
| 253 | .nav-title { | ||
| 254 | font-size: 32rpx; | ||
| 255 | font-family: PingFang SC; | ||
| 256 | font-weight: 500; | ||
| 257 | color: #000000; | ||
| 258 | } | ||
| 259 | |||
| 260 | .nva-center { | ||
| 261 | display: flex; | ||
| 262 | margin-top: 25rpx; | ||
| 263 | margin-bottom: 25rpx; | ||
| 264 | |||
| 265 | .nav-card { | ||
| 266 | font-size: 20rpx; | ||
| 267 | font-family: PingFang SC; | ||
| 268 | font-weight: 400; | ||
| 269 | color: #ffffff; | ||
| 270 | text-align: center; | ||
| 271 | height: 32rpx; | ||
| 272 | width: 94rpx; | ||
| 273 | line-height: 32rpx; | ||
| 274 | border-radius: 16rpx 16rpx 16rpx 0rpx; | ||
| 275 | } | ||
| 276 | |||
| 277 | .color { | ||
| 278 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 279 | } | ||
| 280 | |||
| 281 | .color1 { | ||
| 282 | background: linear-gradient(270deg, #be8efb, #a76df4); | ||
| 283 | } | ||
| 284 | |||
| 285 | .color2 { | ||
| 286 | background: linear-gradient(270deg, #fea449, #ffb95f); | ||
| 287 | } | ||
| 288 | |||
| 289 | .color3 { | ||
| 290 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 291 | } | ||
| 292 | |||
| 293 | .color4 { | ||
| 294 | background: linear-gradient(270deg, #40d8ee, #53a7f6); | ||
| 295 | } | ||
| 296 | |||
| 297 | .nav-timer { | ||
| 298 | margin-left: 13rpx; | ||
| 299 | height: 23rpx; | ||
| 300 | font-size: 24rpx; | ||
| 301 | font-family: PingFang SC; | ||
| 302 | font-weight: 400; | ||
| 303 | color: #7b7f83; | ||
| 304 | line-height: 56rpx; | ||
| 305 | } | ||
| 306 | } | ||
| 307 | } | ||
| 308 | |||
| 309 | .buttonBox { | ||
| 310 | background-color: #fff; | ||
| 311 | width: 100%; | ||
| 312 | |||
| 313 | .conter-button { | ||
| 314 | width: 100%; | ||
| 315 | background-color: #fff; | ||
| 316 | margin-top: 30rpx; | ||
| 317 | padding: 10rpx 0; | ||
| 318 | |||
| 319 | .button { | ||
| 320 | margin: 0 auto; | ||
| 321 | height: 80rpx; | ||
| 322 | width: 500rpx; | ||
| 323 | text-align: center; | ||
| 324 | font-size: 32rpx; | ||
| 325 | font-family: PingFang SC; | ||
| 326 | font-weight: 500; | ||
| 327 | color: #ffffff; | ||
| 328 | line-height: 80rpx; | ||
| 329 | background: linear-gradient(270deg, #54e1b9, #00caa6); | ||
| 330 | border-radius: 40rpx; | ||
| 331 | } | ||
| 332 | |||
| 333 | .info { | ||
| 334 | margin: 0 auto; | ||
| 335 | height: 80rpx; | ||
| 336 | width: 500rpx; | ||
| 337 | text-align: center; | ||
| 338 | font-size: 32rpx; | ||
| 339 | font-family: PingFang SC; | ||
| 340 | font-weight: 500; | ||
| 341 | color: #ffffff; | ||
| 342 | line-height: 80rpx; | ||
| 343 | background: linear-gradient(270deg, #d9d9d9, #bcbcbc); | ||
| 344 | border-radius: 40rpx; | ||
| 345 | } | ||
| 346 | .blue { | ||
| 347 | margin: 0 auto; | ||
| 348 | height: 80rpx; | ||
| 349 | width: 500rpx; | ||
| 350 | text-align: center; | ||
| 351 | font-size: 32rpx; | ||
| 352 | font-family: PingFang SC; | ||
| 353 | font-weight: 500; | ||
| 354 | color: #ffffff; | ||
| 355 | line-height: 80rpx; | ||
| 356 | background: linear-gradient(270deg, #40d8ee, #53a7f6); | ||
| 357 | border-radius: 40rpx; | ||
| 358 | } | ||
| 359 | } | ||
| 360 | } | ||
| 361 | |||
| 362 | // 分段器 | ||
| 363 | .conter { | ||
| 364 | .conter-top { | ||
| 365 | margin-top: 14rpx; | ||
| 366 | min-height: 250rpx; | ||
| 367 | padding: 25rpx; | ||
| 368 | background-color: #fff; | ||
| 369 | border-radius: 15rpx; | ||
| 370 | |||
| 371 | .more { | ||
| 372 | height: 200rpx !important; | ||
| 373 | overflow: hidden; | ||
| 374 | } | ||
| 375 | |||
| 376 | .examine { | ||
| 377 | display: flex; | ||
| 378 | justify-content: center; | ||
| 379 | font-size: 24rpx; | ||
| 380 | font-family: PingFang SC; | ||
| 381 | font-weight: 400; | ||
| 382 | color: #1ec886; | ||
| 383 | } | ||
| 384 | |||
| 385 | // 点击加载更多 | ||
| 386 | .text { | ||
| 387 | height: 29rpx; | ||
| 388 | font-size: 30rpx; | ||
| 389 | font-family: PingFang SC; | ||
| 390 | font-weight: 500; | ||
| 391 | color: #000000; | ||
| 392 | line-height: 36rpx; | ||
| 393 | text-align: left; | ||
| 394 | padding-bottom: 30rpx; | ||
| 395 | border-bottom: 1rpx solid #eee; | ||
| 396 | margin-bottom: 20rpx; | ||
| 397 | } | ||
| 398 | |||
| 399 | // 超出3行将隐藏 | ||
| 400 | .hidden { | ||
| 401 | overflow: hidden; | ||
| 402 | text-overflow: ellipsis; | ||
| 403 | display: -webkit-box; | ||
| 404 | -webkit-line-clamp: 3; | ||
| 405 | -webkit-box-orient: vertical; | ||
| 406 | line-height: 40rpx; //行高方便计算 | ||
| 407 | } | ||
| 408 | |||
| 409 | .text-content { | ||
| 410 | overflow: hidden; | ||
| 411 | font-size: 28rpx; | ||
| 412 | font-family: PingFang SC; | ||
| 413 | font-weight: 400; | ||
| 414 | color: #4c5359; | ||
| 415 | word-break: break-all; | ||
| 416 | line-height: 40rpx; | ||
| 417 | text-align: left; | ||
| 418 | } | ||
| 419 | |||
| 420 | .uni-list-item { | ||
| 421 | border-bottom-style: solid; | ||
| 422 | border-bottom-width: 1px; | ||
| 423 | border-bottom-color: #eee; | ||
| 424 | font-size: 14px; | ||
| 425 | } | ||
| 426 | |||
| 427 | .uni-list-item__container { | ||
| 428 | /* #ifndef APP-NVUE */ | ||
| 429 | display: flex; | ||
| 430 | width: 100%; | ||
| 431 | box-sizing: border-box; | ||
| 432 | /* #endif */ | ||
| 433 | padding: 12px 15px; | ||
| 434 | flex: 1; | ||
| 435 | position: relative; | ||
| 436 | flex-direction: row; | ||
| 437 | justify-content: space-between; | ||
| 438 | align-items: center; | ||
| 439 | } | ||
| 440 | |||
| 441 | .uni-list-item__content-title { | ||
| 442 | font-size: 14px; | ||
| 443 | color: #666; | ||
| 444 | } | ||
| 445 | } | ||
| 446 | |||
| 447 | .conter-middle { | ||
| 448 | padding: 25rpx; | ||
| 449 | background-color: #fff; | ||
| 450 | border-radius: 15rpx; | ||
| 451 | margin-top: 25rpx; | ||
| 452 | |||
| 453 | .text { | ||
| 454 | height: 29rpx; | ||
| 455 | font-size: 30rpx; | ||
| 456 | font-family: PingFang SC; | ||
| 457 | font-weight: 500; | ||
| 458 | color: #000000; | ||
| 459 | line-height: 36rpx; | ||
| 460 | text-align: left; | ||
| 461 | padding-bottom: 30rpx; | ||
| 462 | border-bottom: 1rpx solid #eee; | ||
| 463 | margin-bottom: 20rpx; | ||
| 464 | } | ||
| 465 | |||
| 466 | .text-group { | ||
| 467 | display: flex; | ||
| 468 | |||
| 469 | .text-g-left { | ||
| 470 | height: 48rpx; | ||
| 471 | font-size: 28rpx; | ||
| 472 | font-family: PingFang SC; | ||
| 473 | font-weight: 400; | ||
| 474 | color: #4c5359; | ||
| 475 | line-height: 48rpx; | ||
| 476 | } | ||
| 477 | |||
| 478 | .text-g-right { | ||
| 479 | height: 48rpx; | ||
| 480 | font-size: 28rpx; | ||
| 481 | font-family: PingFang SC; | ||
| 482 | font-weight: 400; | ||
| 483 | color: #2b3133; | ||
| 484 | line-height: 48rpx; | ||
| 485 | } | ||
| 486 | } | ||
| 487 | } | ||
| 488 | |||
| 489 | .conter-bottom { | ||
| 490 | height: 217rpx; | ||
| 491 | padding: 25rpx; | ||
| 492 | background-color: #fff; | ||
| 493 | border-radius: 15rpx; | ||
| 494 | margin-top: 25rpx; | ||
| 495 | |||
| 496 | .text { | ||
| 497 | height: 29rpx; | ||
| 498 | font-size: 30rpx; | ||
| 499 | font-family: PingFang SC; | ||
| 500 | font-weight: 500; | ||
| 501 | color: #000000; | ||
| 502 | line-height: 36rpx; | ||
| 503 | text-align: left; | ||
| 504 | padding-bottom: 30rpx; | ||
| 505 | border-bottom: 1rpx solid #eee; | ||
| 506 | } | ||
| 507 | |||
| 508 | .nav-bar { | ||
| 509 | display: flex; | ||
| 510 | justify-content: space-between; | ||
| 511 | padding-bottom: 30rpx; | ||
| 512 | padding-top: 20rpx; | ||
| 513 | border-bottom: 1rpx solid #eee; | ||
| 514 | |||
| 515 | .nav-bar-text { | ||
| 516 | font-size: 28rpx; | ||
| 517 | font-family: PingFang SC; | ||
| 518 | font-weight: 400; | ||
| 519 | color: #2b3133; | ||
| 520 | } | ||
| 521 | |||
| 522 | .nav-bar-icon { | ||
| 523 | font-size: 28rpx; | ||
| 524 | color: #95a1a6; | ||
| 525 | } | ||
| 526 | } | ||
| 527 | } | ||
| 528 | |||
| 529 | .segmented-control__text { | ||
| 530 | font-size: 26rpx !important; | ||
| 531 | font-family: PingFang SC !important; | ||
| 532 | font-weight: 400 !important; | ||
| 533 | color: #4c5359 !important; | ||
| 534 | } | ||
| 535 | |||
| 536 | .segmented-control__item--text { | ||
| 537 | border-bottom: 4rpx solid #54e1b9; | ||
| 538 | font-size: 30rpx !important; | ||
| 539 | font-family: PingFang SC !important; | ||
| 540 | font-weight: 500 !important; | ||
| 541 | color: #2b3133 !important; | ||
| 542 | } | ||
| 543 | |||
| 544 | width: 100%; | ||
| 545 | |||
| 546 | .example-body { | ||
| 547 | /* #ifndef APP-NVUE */ | ||
| 548 | display: flex; | ||
| 549 | /* #endif */ | ||
| 550 | flex-direction: row; | ||
| 551 | padding: 0; | ||
| 552 | } | ||
| 553 | |||
| 554 | .uni-common-mt { | ||
| 555 | margin-top: 30rpx; | ||
| 556 | } | ||
| 557 | |||
| 558 | .uni-padding-wrap { | ||
| 559 | padding: 0px 30rpx; | ||
| 560 | } | ||
| 561 | |||
| 562 | .content { | ||
| 563 | padding: 0 30rpx; | ||
| 564 | } | ||
| 565 | |||
| 566 | .content-text { | ||
| 567 | font-size: 14rpx; | ||
| 568 | color: #666; | ||
| 569 | } | ||
| 570 | |||
| 571 | .color-tag { | ||
| 572 | width: 25rpx; | ||
| 573 | height: 25rpx; | ||
| 574 | } | ||
| 575 | |||
| 576 | .uni-list { | ||
| 577 | flex: 1; | ||
| 578 | } | ||
| 579 | |||
| 580 | .uni-list-item { | ||
| 581 | /* #ifndef APP-NVUE */ | ||
| 582 | display: flex; | ||
| 583 | /* #endif */ | ||
| 584 | flex: 1; | ||
| 585 | flex-direction: row; | ||
| 586 | background-color: #ffffff; | ||
| 587 | } | ||
| 588 | |||
| 589 | .uni-list-item__container { | ||
| 590 | padding: 12px 15px; | ||
| 591 | width: 100%; | ||
| 592 | flex: 1; | ||
| 593 | position: relative; | ||
| 594 | /* #ifndef APP-NVUE */ | ||
| 595 | display: flex; | ||
| 596 | box-sizing: border-box; | ||
| 597 | /* #endif */ | ||
| 598 | flex-direction: row; | ||
| 599 | justify-content: space-between; | ||
| 600 | align-items: center; | ||
| 601 | border-bottom-style: solid; | ||
| 602 | border-bottom-width: 1px; | ||
| 603 | border-bottom-color: #eee; | ||
| 604 | } | ||
| 605 | |||
| 606 | .uni-list-item__content-title { | ||
| 607 | font-size: 14px; | ||
| 608 | } | ||
| 609 | } | ||
| 610 | |||
| 611 | .popup-content { | ||
| 612 | padding: 50rpx !important; | ||
| 613 | min-height: 500rpx; | ||
| 614 | border-top-left-radius: 30rpx; | ||
| 615 | border-top-right-radius: 30rpx; | ||
| 616 | |||
| 617 | .title { | ||
| 618 | display: flex; | ||
| 619 | justify-content: space-between; | ||
| 620 | |||
| 621 | .titel-left { | ||
| 622 | font-size: 30rpx; | ||
| 623 | font-family: PingFang SC; | ||
| 624 | font-weight: 500; | ||
| 625 | color: #000000; | ||
| 626 | } | ||
| 627 | |||
| 628 | .title-right { | ||
| 629 | .uni-icons { | ||
| 630 | font-size: 60rpx !important; | ||
| 631 | color: #5a5a5a !important; | ||
| 632 | } | ||
| 633 | } | ||
| 634 | } | ||
| 635 | |||
| 636 | .popup-check { | ||
| 637 | font-size: 30rpx; | ||
| 638 | font-family: PingFang SC; | ||
| 639 | font-weight: 400; | ||
| 640 | color: #4c5359; | ||
| 641 | border-top: 1rpx solid #e6e6e6; | ||
| 642 | padding-top: 35rpx; | ||
| 643 | padding-bottom: 35rpx; | ||
| 644 | } | ||
| 645 | } | ||
| 646 | } | ||
| 647 | </style> |
training/train.js
deleted
100644 → 0
| 1 | import request from '@/common/request.js' | ||
| 2 | const accountInfo = uni.getAccountInfoSync() | ||
| 3 | const appId = accountInfo.miniProgram.appId; | ||
| 4 | |||
| 5 | // 获取培训列表 | ||
| 6 | export function getTrainList(params) { | ||
| 7 | return request({ | ||
| 8 | url: `/webPc/getTrains`, | ||
| 9 | method: 'get', | ||
| 10 | params: params | ||
| 11 | }) | ||
| 12 | } | ||
| 13 | |||
| 14 | // 查看培训项目 | ||
| 15 | export function getTrainDetail(id) { | ||
| 16 | return request({ | ||
| 17 | url: '/webPc/getTrainDetails', | ||
| 18 | method: 'get', | ||
| 19 | params: {id} | ||
| 20 | }) | ||
| 21 | } | ||
| 22 | |||
| 23 | // 查看培训项目 | ||
| 24 | export function trainProjectList(params) { | ||
| 25 | return request({ | ||
| 26 | url: '/systemj/information/projectList', | ||
| 27 | method: 'get', | ||
| 28 | params: params | ||
| 29 | }) | ||
| 30 | } | ||
| 31 | |||
| 32 | // 查看报名费用(未支付前) | ||
| 33 | export function searchTrainCost(params) { | ||
| 34 | return request({ | ||
| 35 | url: '/systemj/signer/getEnrollBill', | ||
| 36 | method: 'get', | ||
| 37 | params: params | ||
| 38 | }) | ||
| 39 | } | ||
| 40 | |||
| 41 | // 提交 用户资料 | ||
| 42 | export function trainNext(params) { | ||
| 43 | return request({ | ||
| 44 | url: `/systemj/signer/signUp`, | ||
| 45 | method: 'post', | ||
| 46 | params, | ||
| 47 | }) | ||
| 48 | } | ||
| 49 | |||
| 50 | // 生成订单 | ||
| 51 | export function createOrder(params) { | ||
| 52 | return request({ | ||
| 53 | url: `/systemj/order/saveOrder`, | ||
| 54 | method: 'post', | ||
| 55 | params, | ||
| 56 | }) | ||
| 57 | } | ||
| 58 | |||
| 59 | //会员支付 | ||
| 60 | export function pay(params) { | ||
| 61 | return request({ | ||
| 62 | url: `/systemj/order/pay`, | ||
| 63 | method: 'post', | ||
| 64 | params, | ||
| 65 | }) | ||
| 66 | } | ||
| 67 | |||
| 68 | // 线下支付银行信息 | ||
| 69 | export function bankSlip(params) { | ||
| 70 | return request({ | ||
| 71 | url: `/systemj/order/bankInfo`, | ||
| 72 | method: 'get', | ||
| 73 | params, | ||
| 74 | }) | ||
| 75 | } | ||
| 76 | |||
| 77 | export function trainOrder(params) { | ||
| 78 | return request({ | ||
| 79 | url: `/systemj/order/getMyOrders`, | ||
| 80 | method: 'get', | ||
| 81 | params, | ||
| 82 | }) | ||
| 83 | } | ||
| 84 | |||
| 85 | // 修改报名 | ||
| 86 | export function trainUpdata(params) { | ||
| 87 | return request({ | ||
| 88 | url: `/systemj/signer/updateSign`, | ||
| 89 | method: 'put', | ||
| 90 | params, | ||
| 91 | }) | ||
| 92 | } | ||
| 93 | |||
| 94 | // 取消订单 | ||
| 95 | export function cancelOrder(params) { | ||
| 96 | return request({ | ||
| 97 | url: `/systemj/order/cancelOrder`, | ||
| 98 | method: 'put', | ||
| 99 | params, | ||
| 100 | }) | ||
| 101 | } | ||
| 102 | |||
| 103 | // 报项列表 | ||
| 104 | export function signList(params) { | ||
| 105 | return request({ | ||
| 106 | url: `/systemj/signer/applets/signList`, | ||
| 107 | method: 'get', | ||
| 108 | params, | ||
| 109 | }) | ||
| 110 | } | ||
| 111 | |||
| 112 | // 报项详情 | ||
| 113 | export function signDetail(params) { | ||
| 114 | return request({ | ||
| 115 | url: `/systemj/signer/applets/signDetail`, | ||
| 116 | method: 'get', | ||
| 117 | params, | ||
| 118 | }) | ||
| 119 | } | ||
| 120 | |||
| 121 | // 订单列表 | ||
| 122 | export function orderList(params) { | ||
| 123 | return request({ | ||
| 124 | url: `/systemj/order/applets/orderList`, | ||
| 125 | method: 'get', | ||
| 126 | params, | ||
| 127 | }) | ||
| 128 | } | ||
| 129 | |||
| 130 | |||
| 131 | // 订单详情 | ||
| 132 | export function getOrderDetail(params) { | ||
| 133 | return request({ | ||
| 134 | url: `/systemj/order/getOrderDetail`, | ||
| 135 | method: 'get', | ||
| 136 | params, | ||
| 137 | }) | ||
| 138 | } | ||
| 139 | |||
| 140 |
training/trainList.vue
deleted
100644 → 0
| 1 | <template> | ||
| 2 | <view class="box"> | ||
| 3 | <view class="title"> | ||
| 4 | <view class="navSerch"> | ||
| 5 | <view class="serch"> | ||
| 6 | <uni-search-bar class="uni-mt-10" radius="30" placeholder="搜索" clearButton="auto" Button="none" | ||
| 7 | cancelText="" v-model="name" bgColor="#F4F6FA" @confirm="search" @blur="blur" @clear="clear" /> | ||
| 8 | </view> | ||
| 9 | </view> | ||
| 10 | <view class="searchLeft"> | ||
| 11 | </view> | ||
| 12 | </view> | ||
| 13 | <view> | ||
| 14 | |||
| 15 | <view class="nav-box"> | ||
| 16 | <view class="nav-ul"> | ||
| 17 | <view class="nva-li" @click="nvaText(index)" :class="{nt:Nindex==index}" | ||
| 18 | v-for="(item,index) in items" :key="index"> | ||
| 19 | {{item}} | ||
| 20 | </view> | ||
| 21 | </view> | ||
| 22 | </view> | ||
| 23 | |||
| 24 | <view class="content"> | ||
| 25 | <view class="taber"> | ||
| 26 | <view v-for="item in list" :key="item.trainId" @click="detail(item)"> | ||
| 27 | <uniList :pic="config.baseUrl_api + item.cover" :title="item.name" :card="item.trainStatusStr" | ||
| 28 | :timer="filterTime(item.signTimeRange) "></uniList> | ||
| 29 | </view> | ||
| 30 | </view> | ||
| 31 | </view> | ||
| 32 | <view><uni-load-more :status="status" :content-text="contentText" /></view> | ||
| 33 | </view> | ||
| 34 | </view> | ||
| 35 | </template> | ||
| 36 | |||
| 37 | <script setup> | ||
| 38 | import config from '@/config.js' | ||
| 39 | import uniList from '@/training/components/ulist/ulist'; | ||
| 40 | import * as train from '@/training/train.js'; | ||
| 41 | import { | ||
| 42 | onLoad, | ||
| 43 | onReady, | ||
| 44 | onShareAppMessage, | ||
| 45 | onShareTimeline, | ||
| 46 | onPullDownRefresh, | ||
| 47 | onReachBottom | ||
| 48 | } from '@dcloudio/uni-app'; | ||
| 49 | import { | ||
| 50 | ref, | ||
| 51 | getCurrentInstance, | ||
| 52 | reactive, | ||
| 53 | toRefs | ||
| 54 | } from 'vue'; | ||
| 55 | |||
| 56 | const searchValue = ref(); | ||
| 57 | const items = ref(['全部', '报名中', '培训进行中', '已结束']); | ||
| 58 | const current = ref(0); | ||
| 59 | const name = ref(); | ||
| 60 | const Nindex = ref(0) | ||
| 61 | const range = ref([{ | ||
| 62 | value: 1, | ||
| 63 | text: '全部' | ||
| 64 | }, | ||
| 65 | { | ||
| 66 | value: 2, | ||
| 67 | text: '报名中' | ||
| 68 | }, | ||
| 69 | { | ||
| 70 | value: 3, | ||
| 71 | text: '进行中' | ||
| 72 | }, | ||
| 73 | { | ||
| 74 | value: 4, | ||
| 75 | text: '即将开始' | ||
| 76 | }, | ||
| 77 | { | ||
| 78 | value: 5, | ||
| 79 | text: '报名未开始' | ||
| 80 | }, | ||
| 81 | { | ||
| 82 | value: 6, | ||
| 83 | text: '培训未开始' | ||
| 84 | }, | ||
| 85 | { | ||
| 86 | value: 7, | ||
| 87 | text: '已结束' | ||
| 88 | } | ||
| 89 | ]); | ||
| 90 | const list = ref(); | ||
| 91 | const total = ref(); | ||
| 92 | // noMore没有更多了 | ||
| 93 | // loading加载中 | ||
| 94 | // more下来加载 | ||
| 95 | const status = ref('more'); | ||
| 96 | const flag = ref(); | ||
| 97 | const data = reactive({ | ||
| 98 | query: { | ||
| 99 | flag: '', | ||
| 100 | pageSize: 10, | ||
| 101 | pageNum: 1 | ||
| 102 | }, | ||
| 103 | contentText: { | ||
| 104 | contentdown: '', | ||
| 105 | contentrefresh: '加载中', | ||
| 106 | contentnomore: '没有更多' | ||
| 107 | } | ||
| 108 | }); | ||
| 109 | const { | ||
| 110 | query, | ||
| 111 | contentText | ||
| 112 | } = toRefs(data); | ||
| 113 | |||
| 114 | // 加载培训列表数据 | ||
| 115 | onLoad(option => { | ||
| 116 | initData(); | ||
| 117 | |||
| 118 | }); | ||
| 119 | |||
| 120 | function initData() { | ||
| 121 | query.value.flag = current.value; | ||
| 122 | train.getTrainList(query.value).then(res=>{ | ||
| 123 | list.value = res.rows; | ||
| 124 | total.value = res.rows; | ||
| 125 | }) | ||
| 126 | } | ||
| 127 | |||
| 128 | // 详情页 | ||
| 129 | function detail(item) { | ||
| 130 | let path = `/training/detailPage?trainId=${item.id}`; | ||
| 131 | uni.navigateTo({ | ||
| 132 | url: path | ||
| 133 | }); | ||
| 134 | } | ||
| 135 | |||
| 136 | function nvaText(index) { | ||
| 137 | Nindex.value = index | ||
| 138 | current.value = index | ||
| 139 | initData() | ||
| 140 | console.log(index); | ||
| 141 | } | ||
| 142 | |||
| 143 | |||
| 144 | function filterTime(num) { | ||
| 145 | if (num) return num.slice(0, 16) | ||
| 146 | } | ||
| 147 | |||
| 148 | |||
| 149 | // 下拉框 | ||
| 150 | function change(e) { | ||
| 151 | if (e) { | ||
| 152 | addForm.value.flag = e - 1; | ||
| 153 | current.value = e - 1; | ||
| 154 | Nindex.value = e - 1 | ||
| 155 | console.log(e); | ||
| 156 | initData(); | ||
| 157 | } | ||
| 158 | } | ||
| 159 | |||
| 160 | // 搜索 | ||
| 161 | function search(res) { | ||
| 162 | if (res.value != '') { | ||
| 163 | addForm.value.trainName = res.value; | ||
| 164 | initData(); | ||
| 165 | } | ||
| 166 | |||
| 167 | } | ||
| 168 | |||
| 169 | // 搜索清空按钮 | ||
| 170 | function clear(res) { | ||
| 171 | addForm.value.trainName = ''; | ||
| 172 | initData(); | ||
| 173 | } | ||
| 174 | |||
| 175 | // 下来刷新 | ||
| 176 | onPullDownRefresh(() => { | ||
| 177 | addForm.value.flag = 0; | ||
| 178 | initData(); | ||
| 179 | wx.stopPullDownRefresh(); | ||
| 180 | }); | ||
| 181 | |||
| 182 | // 上拉加载 | ||
| 183 | onReachBottom(async () => { | ||
| 184 | if (list.value.length == total.value) { | ||
| 185 | status.value = 'noMore'; | ||
| 186 | return false; | ||
| 187 | } else { | ||
| 188 | status.value = 'loading'; | ||
| 189 | addForm.value.pageNum += 1; | ||
| 190 | let res = await train.getTrainList(addForm.value); | ||
| 191 | let arr = res.rows; | ||
| 192 | list.value = list.value.concat(arr); | ||
| 193 | total.value = res.total; | ||
| 194 | status.value = 'noMore'; | ||
| 195 | } | ||
| 196 | }); | ||
| 197 | </script> | ||
| 198 | |||
| 199 | <style lang="scss"> | ||
| 200 | .uni-section-header { | ||
| 201 | display: none !important; | ||
| 202 | } | ||
| 203 | |||
| 204 | .box { | ||
| 205 | background-color: #fff; | ||
| 206 | } | ||
| 207 | |||
| 208 | .nav-box { | ||
| 209 | overflow-x: scroll; | ||
| 210 | } | ||
| 211 | |||
| 212 | .nav-ul { | ||
| 213 | display: flex; | ||
| 214 | justify-content: space-around; | ||
| 215 | width: 100%; | ||
| 216 | |||
| 217 | } | ||
| 218 | |||
| 219 | .nva-li { | ||
| 220 | font-size: 26rpx; | ||
| 221 | padding: 10rpx 0rpx; | ||
| 222 | margin: 0 15rpx; | ||
| 223 | |||
| 224 | } | ||
| 225 | |||
| 226 | .nt { | ||
| 227 | font-size: 30rpx; | ||
| 228 | font-weight: 400; | ||
| 229 | border-bottom: 4rpx solid #AD181F; | ||
| 230 | } | ||
| 231 | |||
| 232 | |||
| 233 | .taber { | ||
| 234 | width: 100%; | ||
| 235 | padding: 25rpx 30rpx; | ||
| 236 | padding-bottom: 0; | ||
| 237 | } | ||
| 238 | |||
| 239 | .segmented-control__text { | ||
| 240 | font-size: 26rpx !important; | ||
| 241 | font-family: PingFang SC !important; | ||
| 242 | font-weight: 400 !important; | ||
| 243 | color: #4c5359 !important; | ||
| 244 | } | ||
| 245 | |||
| 246 | .segmented-control__item--text { | ||
| 247 | border-bottom: 4rpx solid #54e1b9; | ||
| 248 | font-size: 30rpx !important; | ||
| 249 | font-family: PingFang SC !important; | ||
| 250 | font-weight: 500 !important; | ||
| 251 | color: #2b3133 !important; | ||
| 252 | } | ||
| 253 | |||
| 254 | .title { | ||
| 255 | display: flex; | ||
| 256 | justify-content: space-between; | ||
| 257 | |||
| 258 | .navSerch { | ||
| 259 | width:100%;height:100rpx;flex:1 1 auto; | ||
| 260 | position: relative; | ||
| 261 | |||
| 262 | .serch { | ||
| 263 | width:100%; | ||
| 264 | } | ||
| 265 | } | ||
| 266 | |||
| 267 | .searchLeft { | ||
| 268 | font-size: 26rpx; | ||
| 269 | font-family: PingFang SC; | ||
| 270 | font-weight: 400; | ||
| 271 | color: #000000; | ||
| 272 | margin-top: 25rpx; | ||
| 273 | display: flex; | ||
| 274 | } | ||
| 275 | |||
| 276 | .uni-searchbar__cancel { | ||
| 277 | display: none; | ||
| 278 | } | ||
| 279 | |||
| 280 | :deep(.uni-select) { | ||
| 281 | border: 0; | ||
| 282 | // padding-left: 20rpx; | ||
| 283 | } | ||
| 284 | |||
| 285 | :deep(.uni-select__input-text) { | ||
| 286 | font-size: 26rpx; | ||
| 287 | font-family: PingFang SC; | ||
| 288 | font-weight: 400; | ||
| 289 | color: #000000; | ||
| 290 | margin-right: 14rpx; | ||
| 291 | width: 110rpx; | ||
| 292 | text-align: right; | ||
| 293 | } | ||
| 294 | |||
| 295 | :deep(.uni-select__selector-item) { | ||
| 296 | // padding: 0 auto; | ||
| 297 | text-align: center; | ||
| 298 | font-size: 26rpx; | ||
| 299 | font-family: PingFang SC; | ||
| 300 | font-weight: 400; | ||
| 301 | color: #000000; | ||
| 302 | } | ||
| 303 | } | ||
| 304 | |||
| 305 | // 搜索框 | ||
| 306 | .search-result { | ||
| 307 | padding-top: 10rpx; | ||
| 308 | padding-bottom: 20rpx; | ||
| 309 | text-align: center; | ||
| 310 | } | ||
| 311 | |||
| 312 | .search-result-text { | ||
| 313 | text-align: center; | ||
| 314 | font-size: 14rpx; | ||
| 315 | color: #666; | ||
| 316 | } | ||
| 317 | |||
| 318 | :deep(.uni-searchbar) {box-sizing: border-box; | ||
| 319 | } | ||
| 320 | |||
| 321 | .uni-searchbar__box { | ||
| 322 | padding-right: 0rpx !important; | ||
| 323 | } | ||
| 324 | |||
| 325 | .example-body { | ||
| 326 | /* #ifndef APP-NVUE */ | ||
| 327 | display: block; | ||
| 328 | /* #endif */ | ||
| 329 | padding: 0px; | ||
| 330 | } | ||
| 331 | |||
| 332 | .uni-mt-10 { | ||
| 333 | width: 600rpx; | ||
| 334 | } | ||
| 335 | |||
| 336 | // 分段器 | ||
| 337 | .example-body { | ||
| 338 | /* #ifndef APP-NVUE */ | ||
| 339 | display: flex; | ||
| 340 | /* #endif */ | ||
| 341 | flex-direction: row; | ||
| 342 | padding: 0; | ||
| 343 | } | ||
| 344 | |||
| 345 | .uni-common-mt { | ||
| 346 | margin-top: 30rpx; | ||
| 347 | } | ||
| 348 | |||
| 349 | .uni-padding-wrap { | ||
| 350 | // width: 750rpx; | ||
| 351 | padding: 0rpx 30rpx; | ||
| 352 | } | ||
| 353 | |||
| 354 | .content { | ||
| 355 | /* #ifndef APP-NVUE */ | ||
| 356 | display: flex; | ||
| 357 | /* #endif */ | ||
| 358 | justify-content: center; | ||
| 359 | // height: 1235rpx; | ||
| 360 | text-align: center; | ||
| 361 | } | ||
| 362 | |||
| 363 | .content-text { | ||
| 364 | font-size: 14rpx; | ||
| 365 | color: #666; | ||
| 366 | } | ||
| 367 | |||
| 368 | .color-tag { | ||
| 369 | width: 25rpx; | ||
| 370 | height: 25rpx; | ||
| 371 | } | ||
| 372 | |||
| 373 | .uni-list { | ||
| 374 | flex: 1; | ||
| 375 | } | ||
| 376 | |||
| 377 | .uni-list-item { | ||
| 378 | /* #ifndef APP-NVUE */ | ||
| 379 | display: flex; | ||
| 380 | /* #endif */ | ||
| 381 | flex: 1; | ||
| 382 | flex-direction: row; | ||
| 383 | background-color: #ffffff; | ||
| 384 | } | ||
| 385 | |||
| 386 | .uni-list-item__container { | ||
| 387 | padding: 12rpx 15rpx; | ||
| 388 | width: 100%; | ||
| 389 | flex: 1; | ||
| 390 | position: relative; | ||
| 391 | /* #ifndef APP-NVUE */ | ||
| 392 | display: flex; | ||
| 393 | box-sizing: border-box; | ||
| 394 | /* #endif */ | ||
| 395 | flex-direction: row; | ||
| 396 | justify-content: space-between; | ||
| 397 | align-items: center; | ||
| 398 | border-bottom-style: solid; | ||
| 399 | border-bottom-width: 1rpx; | ||
| 400 | border-bottom-color: #eee; | ||
| 401 | } | ||
| 402 | |||
| 403 | .uni-list-item__content-title { | ||
| 404 | font-size: 14rpx; | ||
| 405 | } | ||
| 406 | |||
| 407 | .chat-custom-right { | ||
| 408 | flex: 1; | ||
| 409 | /* #ifndef APP-NVUE */ | ||
| 410 | display: flex; | ||
| 411 | /* #endif */ | ||
| 412 | flex-direction: column; | ||
| 413 | justify-content: space-between; | ||
| 414 | align-items: flex-end; | ||
| 415 | } | ||
| 416 | |||
| 417 | .chat-custom-text { | ||
| 418 | font-size: 12rpx; | ||
| 419 | color: #999; | ||
| 420 | } | ||
| 421 | </style> | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file |
-
Please register or sign in to post a comment