bb678af5 by 杨炀

no message

1 parent 9da759d0
...@@ -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
......
...@@ -181,10 +181,6 @@ ...@@ -181,10 +181,6 @@
181 text: "外国护照" 181 text: "外国护照"
182 }, 182 },
183 { 183 {
184 value: '4',
185 text: "其它"
186 },
187 {
188 value: '5', 184 value: '5',
189 text: "户口本" 185 text: "户口本"
190 } 186 }
......
...@@ -504,7 +504,4 @@ ...@@ -504,7 +504,4 @@
504 text-align: left; 504 text-align: left;
505 } 505 }
506 506
507 :deep(.selected-list) {
508 justify-content: flex-end;
509 }
510 </style> 507 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -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){
......
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 }
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 }}&nbsp;&nbsp; 合计:</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=" 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 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
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 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
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 &nbsp; {{ 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>
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
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>
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
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
...@@ -347,6 +347,7 @@ ...@@ -347,6 +347,7 @@
347 flex-direction: row; 347 flex-direction: row;
348 flex-wrap: nowrap; 348 flex-wrap: nowrap;
349 padding: 0 5px; 349 padding: 0 5px;
350 justify-content: flex-end;
350 } 351 }
351 352
352 .selected-item { 353 .selected-item {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!