f0ab4214 by 杨炀

no message

1 parent 4c57b42c
Showing 65 changed files with 795 additions and 1585 deletions
...@@ -493,6 +493,36 @@ function getMergePaymentInfo(mergeId) { ...@@ -493,6 +493,36 @@ function getMergePaymentInfo(mergeId) {
493 } 493 }
494 }) 494 })
495 } 495 }
496 // 一键下发
497 function submitCert(data) {
498 return request({
499 url: `/exam/payment/submitCerts/nesting`,
500 method: 'put',
501 params: data
502 })
503 }
504 function getCertsLList(query) {
505 return request({
506 url: '/exam/payment/certsList',
507 method: 'get',
508 params: query
509 })
510 }
511 function getExamListByPayId(params) {
512 return request({
513 url: `/exam/payment/examList/${params.payId}`,
514 method: 'get',
515 params: params
516 })
517 }
518 function certStudentList(query) {
519 return request({
520 url: '/exam/person/cert/studentList',
521 method: 'get',
522 params: query
523 })
524 }
525
496 526
497 export { 527 export {
498 getMessage, 528 getMessage,
...@@ -539,5 +569,7 @@ export { ...@@ -539,5 +569,7 @@ export {
539 groupCommitPaymentVoucher,getFeeBillById, 569 groupCommitPaymentVoucher,getFeeBillById,
540 personalCommit, 570 personalCommit,
541 delPayment,editYear,addPersonPaymentGroup, 571 delPayment,editYear,addPersonPaymentGroup,
542 commitRenew,getVerityMergeList,doMergeFlows,getMergePaymentInfo 572 commitRenew,getVerityMergeList,doMergeFlows,getMergePaymentInfo,
573 submitCert,getCertsLList,getExamListByPayId,
574 certStudentList
543 } 575 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -148,6 +148,15 @@ color: #7D8592;} ...@@ -148,6 +148,15 @@ color: #7D8592;}
148 } 148 }
149 .mt30{margin-top: 30rpx;} 149 .mt30{margin-top: 30rpx;}
150 .userlist { 150 .userlist {
151 .func{display: flex;justify-content: flex-end;
152 border-top: 1px dashed #e5e5e5;padding-top: 20rpx;
153 button{border: 1px solid #AD181F;
154 border-radius: 30rpx;height: 60rpx;line-height: 60rpx;
155 font-size: 30rpx;color: #AD181F;background: #fff;
156 margin: 0 0 0 30rpx;padding: 0 60rpx;
157 }
158 text{font-size: 30rpx;padding:30rpx 0 0;}
159 }
151 .colorful { 160 .colorful {
152 width: 100rpx; 161 width: 100rpx;
153 margin-right: 14rpx; 162 margin-right: 14rpx;
......
1 <template>
2 <view class="content">
3 <swiper class="swiper"
4 :autoplay="autoplay"
5 :duration="duration">
6 <swiper-item>
7 <view class="swiper-item">
8 <view class="swiper-item-img"><image src="../../static/guide/title_01.png" mode="aspectFit"></image></view>
9 <view class="swiper-item-img"><image src="../../static/guide/icon_01.png" mode="aspectFit"></image></view>
10 </view>
11 <view class="jump-over" @tap="launchFlag()">{{jumpover}}</view>
12 </swiper-item>
13 <swiper-item>
14 <view class="swiper-item">
15 <view class="swiper-item-img"><image src="../../static/guide/title_02.png" mode="aspectFit"></image></view>
16 <view class="swiper-item-img"><image src="../../static/guide/icon_02.png" mode="aspectFit"></image></view>
17 </view>
18 <view class="jump-over" @tap="launchFlag()">{{jumpover}}</view>
19 </swiper-item>
20 <swiper-item>
21 <view class="swiper-item">
22 <view class="swiper-item-img"><image src="../../static/guide/title_03.png" mode="aspectFit"></image></view>
23 <view class="swiper-item-img"><image src="../../static/guide/icon_03.png" mode="aspectFit"></image></view>
24 </view>
25 <view class="jump-over" @tap="launchFlag()">{{jumpover}}</view>
26 </swiper-item>
27 <swiper-item>
28 <view class="swiper-item">
29 <view class="swiper-item-img"><image src="../../static/guide/title_04.png" mode="aspectFit"></image></view>
30 <view class="swiper-item-img"><image src="../../static/guide/icon_04.png" mode="aspectFit"></image></view>
31 </view>
32 <view class="experience" @tap="launchFlag()">{{experience}}</view>
33 </swiper-item>
34 </swiper>
35 <view class="uniapp-img"><image src="../../static/guide/uniapp4@2x.png" mode="aspectFit"></image></view>
36 </view>
37 </template>
38
39 <script>
40 export default {
41 data() {
42 return {
43 background: ['color1', 'color2', 'color3'],
44 autoplay: false,
45 duration: 500,
46 jumpover: '跳过',
47 experience: '立即体验'
48 }
49 },
50 methods: {
51 launchFlag: function(){
52 /**
53 * 向本地存储中设置launchFlag的值,即启动标识;
54 */
55 uni.setStorage({
56 key: 'launchFlag',
57 data: true,
58 });
59 uni.switchTab({
60 url: '/pages/tabBar/component/component'
61 });
62
63 }
64 }
65 }
66 </script>
67 <style>
68 page,
69 .content{
70 width: 100%;
71 height: 100%;
72 background-size: 100% auto ;
73 padding: 0;
74 }
75 .swiper{
76 width: 100%;
77 height: 80%;
78 background: #FFFFFF;
79 }
80 .swiper-item {
81 width: 100%;
82 height: 100%;
83 text-align: center;
84 position: relative;
85 display: flex;
86 /* justify-content: center; */
87 align-items:flex-end;
88 flex-direction:column-reverse
89 }
90 .swiper-item-img{
91 width: 100%;
92 height: auto;
93 margin: 0 auto;
94 }
95 .swiper-item-img image{
96 width: 80%;
97 }
98 .uniapp-img{
99 height: 20%;
100 background: #FFFFFF;
101 display: flex;
102 justify-content: center;
103 align-items:center;
104 overflow: hidden;
105 }
106 .uniapp-img image{
107 width: 40%;
108 }
109
110 .jump-over,.experience{
111 position: absolute;
112 height: 60upx;
113 line-height: 60upx;
114 padding: 0 40upx;
115 border-radius: 30upx;
116 font-size: 32upx;
117 color: #454343;
118 border: 1px solid #454343;
119 z-index: 999;
120 }
121 .jump-over{
122 right: 45upx;
123 top: 125upx;
124 }
125 .experience{
126 right: 50%;
127 margin-right: -105upx;
128 bottom: 0;
129 }
130 </style>
1 # 引导页
2
3 ### 基于uni-app框架的swiper组件打开的时候启动。
4
5 > 首次启动展示引导页,之后启动不再展示。那么就意味着,我们需要一个标识来确定,App是否已经启动过。
6
7 > 我们可以在本地存储一个key来做为已经启动过App的标识。那么,我们在入口这里,就可以读取这个key,来决定是否展示引导页。
8
9 > 因工作繁忙目前该程序金对安卓做了适配,IOS可根据环境自己适配。谢谢
10
11 ## 目录结构
12 * /pages/index/index.vue //入口页
13 ### 存储key
14 * 向本地存储中设置launchFlag的值,即启动标识;
15 ### 获取key
16 * 向本地存储中设置launchFlag的值,即启动标识;
17 * 获取本地存储中launchFlag的值
18 * 若存在,说明不是首次启动,直接进入首页;
19 * 若不存在,说明是首次启动,进入引导页;
20
21 ```html
22 <view class="main">
23 <code-elf-guide v-if="guidePages"></code-elf-guide>
24 </view>
25
26 ```
27
28 ```javascript
29 import codeElfGuide from '@/components/code-elf-guide/code-elf-guide.vue'
30 export default {
31 components: {
32 codeElfGuide
33 },
34 data() {
35 return {
36 guidePages:true
37 }
38 },
39 onLoad(){
40 this.loadExecution()
41 },
42 methods: {
43 loadExecution: function(){
44 /**
45 * 获取本地存储中launchFlag的值
46 * 若存在,说明不是首次启动,直接进入首页;
47 * 若不存在,说明是首次启动,进入引导页;
48 */
49 try {
50 // 获取本地存储中launchFlag标识
51 const value = uni.getStorageSync('launchFlag');
52 if (value) {
53 // launchFlag=true直接跳转到首页
54 uni.switchTab({
55 url: '/pages/tabBar/component/component'
56 });
57 } else {
58 // launchFlag!=true显示引导页
59 this.guidePages = true
60 }
61 } catch(e) {
62 // error
63 uni.setStorage({
64 key: 'launchFlag',
65 data: true,
66 success: function () {
67 console.log('error时存储launchFlag');
68 }
69 });
70 this.guidePages = true
71 }
72 }
73 }
74 }
75 ```
76 ```css
77 page,.main{
78 width: 100%;
79 height: 100%;
80 }
81
82 ```
83
84 ### 首页清除key,进行测试
85 * 清除本地存储中设置launchFlag的值,即启动标识;
86 * 两秒后重启APP,进行测试
87 ```javascript
88 uni.showModal({
89 title: '清除launchFlag值',
90 content: '确定要清除launchFlag值,进行重启测试?',
91 success: function (res) {
92 if (res.confirm) {
93 console.log('用户点击确定');
94 // 清除缓存
95 uni.clearStorage();
96 uni.showToast({
97 icon: 'none',
98 duration:3000,
99 title: '清除成功2秒后重启'
100 });
101 // 两秒后重启
102 setTimeout(function() {
103 uni.hideToast();
104 plus.runtime.restart();
105 }, 2000);
106 } else if (res.cancel) {
107 console.log('用户点击取消');
108 }
109 }
110 });
111 ```
...\ No newline at end of file ...\ No newline at end of file
1 # 日历组件 lx-calendar可选择周与月支持左右滑动切换
2
3
4 ```
5 <template>
6 <view class="content">
7
8 <lxCalendar @change="change"></lxCalendar>
9 </view>
10 </template>
11
12 <script>
13 import lxCalendar from '../../components/lx-calendar/lx-calendar.vue'
14 export default {
15 components:{
16 lxCalendar,
17 },
18 data() {
19 return {
20 title: 'Hello'
21 }
22 },
23
24 onLoad() {
25
26 },
27 methods: {
28 change(e){
29 console.log(e);
30 }
31
32 }
33 }
34 </script>
35 ```
36
37
38 事件 | 说明
39 ---|---
40 change | 日期改变时执行
41
42 参数 | 类型 | 说明
43 ---|---|---
44 value | 字符串 | 选中的日期
45 dot_lists | 数组 | 显示点的日期
46
47
48
49
50
1 # slider-range
2 uni-app 滑块区间选择组件
3
4 可根据具体需求,修改、自定义其他内容。
5
6 ## 属性说明
7
8 |属性名|类型|默认值|说明|
9 | -- | -- | --|--|
10 | value | Array<Number, Number> | [0,100] |滑块已选中区间的值|
11 | min | Number| 0 | 滑块区间最小值 |
12 | max | Number | 100 | 滑块区间最大值 |
13 | step | Number | 1 | 拖动时的步长 |
14 | disabled | Boolean | false | 是否为禁用状态 |
15 | height | Number | 50 | 滑块容器高度 |
16 | barHeight | Number | 5 | 滑块进度条高度 |
17 | backgroundColor | String | #e9e9e9| 滑块进度条背景色|
18 | activeColor | String | #1aad19 | 已选中区间进度条颜色|
19 | blockSize | Number | 20 | 滑块大小 |
20 | blockColor | String | #fff | 滑块颜色 |
21 | decorationVisible | Boolean | false | 是否显示滑块内装饰元素|
22 | tipVisible | Boolean | true | 是否显示滑块值提示文本 |
23 | fomat| Function | | 滑块值提示文本格式化函数,**注意**:小程序中此属性必传,否则会报错,如果无需格式化,可以简单返回原始值: `format(val) { return val }`;H5中可以不传。|
24
25
26 ## 使用示例
27
28 ```html
29
30 <slider-range
31 :value="rangeValue"
32 :min="rangeMin"
33 :max="rangMax"
34 :step="5"
35 :bar-height="3"
36 :block-size="26"
37 background-color="#EEEEF6"
38 active-color="#FF6B00"
39 :format="format"
40 :decorationVisible="true"
41 @change="handleRangeChange"
42 ></slider-range>
43
44
45 ```
46
47 ```javascript
48
49 import SliderRange from '../components/slider-range/index.vue'
50 export default {
51 components: {
52 SliderRange
53 },
54 data() {
55 return {
56 rangeMin: 5,
57 rangMax: 200,
58 rangeValue: [10, 50]
59 }
60 },
61 methods: {
62 format(val) {
63 return val + '%'
64 },
65 handleRangeChange(e) {
66 this.rangeValue = e
67 }
68 }
69 }
70 ```
71
72 效果图
73
74 ![](http://images.alisali.cn/img_20190715175325.png)
1 <template>
2 <view
3 class="slider-range"
4 :class="{ disabled: disabled }"
5 :style="{ paddingLeft: blockSize / 2 + 'px', paddingRight: blockSize / 2 + 'px' }"
6 >
7 <view class="slider-range-inner" :style="{ height: height + 'px' }">
8 <view
9 class="slider-bar"
10 :style="{
11 height: barHeight + 'px',
12 }"
13 >
14 <!-- 背景条 -->
15 <view
16 class="slider-bar-bg"
17 :style="{
18 backgroundColor: backgroundColor,
19 }"
20 ></view>
21
22 <!-- 滑块实际区间 -->
23 <view
24 class="slider-bar-inner"
25 :style="{
26 width: ((values[1] - values[0]) / (max - min)) * 100 + '%',
27 left: lowerHandlePosition + '%',
28 backgroundColor: activeColor,
29 }"
30 ></view>
31 </view>
32
33 <!-- 滑动块-左 -->
34 <view
35 class="slider-handle-block"
36 :class="{ decoration: decorationVisible }"
37 :style="{
38 backgroundColor: blockColor,
39 width: blockSize + 'px',
40 height: blockSize + 'px',
41 left: lowerHandlePosition + '%',
42 }"
43 @touchstart="_onTouchStart"
44 @touchmove="_onBlockTouchMove"
45 @touchend="_onBlockTouchEnd"
46 data-tag="lowerBlock"
47 ></view>
48
49 <!-- 滑动块-右 -->
50 <view
51 class="slider-handle-block"
52 :class="{ decoration: decorationVisible }"
53 :style="{
54 backgroundColor: blockColor,
55 width: blockSize + 'px',
56 height: blockSize + 'px',
57 left: higherHandlePosition + '%',
58 }"
59 @touchstart="_onTouchStart"
60 @touchmove="_onBlockTouchMove"
61 @touchend="_onBlockTouchEnd"
62 data-tag="higherBlock"
63 ></view>
64
65 <!-- 滑块值提示 -->
66 <view v-if="tipVisible" class="range-tip" :style="lowerTipStyle">{{ format(values[0]) }}</view>
67 <view v-if="tipVisible" class="range-tip" :style="higherTipStyle">{{ format(values[1]) }}</view>
68 </view>
69 </view>
70 </template>
71 <script>
72 export default {
73 components: {},
74 props: {
75 //滑块区间当前取值
76 value: {
77 type: Array,
78 default: function() {
79 return [0, 100]
80 },
81 },
82 //最小值
83 min: {
84 type: Number,
85 default: 0,
86 },
87 //最大值
88 max: {
89 type: Number,
90 default: 100,
91 },
92 step: {
93 type: Number,
94 default: 1,
95 },
96 format: {
97 type: Function,
98 default: function(val) {
99 return val
100 },
101 },
102 disabled: {
103 type: Boolean,
104 default: false,
105 },
106 //滑块容器高度
107 height: {
108 height: Number,
109 default: 50,
110 },
111 //区间进度条高度
112 barHeight: {
113 type: Number,
114 default: 5,
115 },
116 //背景条颜色
117 backgroundColor: {
118 type: String,
119 default: '#e9e9e9',
120 },
121 //已选择的颜色
122 activeColor: {
123 type: String,
124 default: '#1aad19',
125 },
126 //滑块大小
127 blockSize: {
128 type: Number,
129 default: 20,
130 },
131 blockColor: {
132 type: String,
133 default: '#fff',
134 },
135 tipVisible: {
136 type: Boolean,
137 default: true,
138 },
139 decorationVisible: {
140 type: Boolean,
141 default: false,
142 },
143 },
144 data() {
145 return {
146 values: [this.min, this.max],
147 startDragPos: 0, // 开始拖动时的坐标位置
148 startVal: 0, //开始拖动时较小点的值
149 }
150 },
151 computed: {
152 // 较小点滑块的坐标
153 lowerHandlePosition() {
154 return ((this.values[0] - this.min) / (this.max - this.min)) * 100
155 },
156 // 较大点滑块的坐标
157 higherHandlePosition() {
158 return ((this.values[1] - this.min) / (this.max - this.min)) * 100
159 },
160 lowerTipStyle() {
161 if (this.lowerHandlePosition < 90) {
162 return `left: ${this.lowerHandlePosition}%;`
163 }
164 return `right: ${100 - this.lowerHandlePosition}%;transform: translate(50%, -100%);`
165 },
166 higherTipStyle() {
167 if (this.higherHandlePosition < 90) {
168 return `left: ${this.higherHandlePosition}%;`
169 }
170 return `right: ${100 - this.higherHandlePosition}%;transform: translate(50%, -100%);`
171 },
172 },
173 created: function() {},
174 onLoad: function(option) {},
175 watch: {
176 //滑块当前值
177 value: {
178 immediate: true,
179 handler(newVal, oldVal) {
180 if (this._isValuesValid(newVal) && (newVal[0] !== this.values[0] || newVal[1] !== this.values[1])) {
181 this._updateValue(newVal)
182 }
183 },
184 },
185 },
186 methods: {
187 _updateValue(newVal) {
188 // 步长大于区间差,或者区间最大值和最小值相等情况
189 if (this.step >= this.max - this.min) {
190 throw new RangeError('Invalid slider step or slider range')
191 }
192
193 let newValues = []
194 if (Array.isArray(newVal)) {
195 newValues = [newVal[0], newVal[1]]
196 }
197 if (typeof newValues[0] !== 'number') {
198 newValues[0] = this.values[0]
199 } else {
200 newValues[0] = Math.round((newValues[0] - this.min) / this.step) * this.step + this.min
201 }
202 if (typeof newValues[1] !== 'number') {
203 newValues[1] = this.values[1]
204 } else {
205 newValues[1] = Math.round((newValues[1] - this.min) / this.step) * this.step + this.min
206 }
207
208 // 新值与原值相等,不做处理
209 if (this.values[0] === newValues[0] && this.values[1] === newValues[1]) {
210 return
211 }
212 // 左侧滑块值小于最小值时,设置为最小值
213 if (newValues[0] < this.min) {
214 newValues[0] = this.min
215 }
216 // 右侧滑块值大于最大值时,设置为最大值
217 if (newValues[1] > this.max) {
218 newValues[1] = this.max
219 }
220 // 两个滑块重叠或左右交错,使两个滑块保持最小步长的间距
221 if (newValues[0] >= newValues[1]) {
222 // 左侧未动,右侧滑块滑到左侧滑块之左
223 if (newValues[0] === this.values[0]) {
224 newValues[1] = newValues[0] + this.step
225 } else {
226 // 右侧未动, 左侧滑块滑到右侧之右
227 newValues[0] = newValues[1] - this.step
228 }
229 }
230
231 this.values = newValues
232 this.$emit('change', this.values)
233 },
234 _onTouchStart: function(event) {
235 if (this.disabled) {
236 return
237 }
238
239 this.isDragging = true
240 let tag = event.target.dataset.tag
241
242 //兼容h5平台及某版本微信
243 let e = event.changedTouches ? event.changedTouches[0] : event
244 this.startDragPos = e.pageX
245
246 this.startVal = tag === 'lowerBlock' ? this.values[0] : this.values[1]
247 },
248 _onBlockTouchMove: function(e) {
249 if (this.disabled) {
250 return
251 }
252 this._onDrag(e)
253 },
254 _onBlockTouchEnd: function(e) {
255 if (this.disabled) {
256 return
257 }
258 this.isDragging = false
259 this._onDrag(e)
260 },
261 _onDrag(event) {
262 if (!this.isDragging) {
263 return
264 }
265 let view = uni
266 .createSelectorQuery()
267 .in(this)
268 .select('.slider-range-inner')
269
270 view
271 .boundingClientRect(data => {
272 let sliderWidth = data.width
273 const tag = event.target.dataset.tag
274 let e = event.changedTouches ? event.changedTouches[0] : event
275 let diff = ((e.pageX - this.startDragPos) / sliderWidth) * (this.max - this.min)
276 let nextVal = this.startVal + diff
277
278 if (tag === 'lowerBlock') {
279 this._updateValue([nextVal, null])
280 } else {
281 this._updateValue([null, nextVal])
282 }
283 })
284 .exec()
285 },
286 _isValuesValid: function(values) {
287 return Array.isArray(values) && values.length == 2
288 },
289 },
290 }
291 </script>
292
293 <style scoped>
294 .slider-range {
295 position: relative;
296 padding-top: 40rpx;
297 }
298
299 .slider-range-inner {
300 position: relative;
301 width: 100%;
302 }
303
304 .slider-range.disabled .slider-bar-inner {
305 opacity: 0.35;
306 }
307
308 .slider-range.disabled .slider-handle-block {
309 cursor: not-allowed;
310 }
311
312 .slider-bar {
313 position: absolute;
314 top: 50%;
315 left: 0;
316 right: 0;
317 transform: translateY(-50%);
318 }
319
320 .slider-bar-bg {
321 position: absolute;
322 width: 100%;
323 height: 100%;
324 border-radius: 10000px;
325 z-index: 10;
326 }
327
328 .slider-bar-inner {
329 position: absolute;
330 width: 100%;
331 height: 100%;
332 border-radius: 10000px;
333 z-index: 11;
334 }
335
336 .slider-handle-block {
337 position: absolute;
338 top: 50%;
339 transform: translate(-50%, -50%);
340 border-radius: 50%;
341 box-shadow: 0 0 3px 2px rgba(227, 229, 241, 0.5);
342 z-index: 12;
343 }
344
345 .slider-handle-block.decoration::before {
346 position: absolute;
347 content: '';
348 width: 6upx;
349 height: 24upx;
350 top: 50%;
351 left: 29%;
352 transform: translateY(-50%);
353 background: #eeedf2;
354 border-radius: 3upx;
355 z-index: 13;
356 }
357
358 .slider-handle-block.decoration::after {
359 position: absolute;
360 content: '';
361 width: 6upx;
362 height: 24upx;
363 top: 50%;
364 right: 29%;
365 transform: translateY(-50%);
366 background: #eeedf2;
367 border-radius: 3upx;
368 z-index: 13;
369 }
370
371 .range-tip {
372 position: absolute;
373 top: 0;
374 font-size: 24upx;
375 color: #666;
376 transform: translate(-50%, -100%);
377 }
378 </style>
1 <template>
2 <view class="demo-slider-range">
3 <view class="section-title">普通用法</view>
4 <view class="slider-item">
5 <slider-range
6 :value="slider1.rangeValue"
7 :min="slider1.min"
8 :max="slider1.max"
9 :step="slider1.step"
10 :bar-height="barHeight"
11 :block-size="blockSize"
12 :background-color="backgroundColor"
13 :format="format1"
14 @change="handleRangeChange"
15 ></slider-range>
16 </view>
17 <view class="section-title">自定义</view>
18 <view class="slider-item">
19 <slider-range
20 :value="slider2.rangeValue"
21 :min="slider2.min"
22 :max="slider2.max"
23 :step="slider2.step"
24 :bar-height="barHeight"
25 :block-size="blockSize"
26 :background-color="backgroundColor"
27 :active-color="slider2.activeColor"
28 :format="format2"
29 :decorationVisible="slider2.decorationVisible"
30 @change="handleRangeChange"
31 ></slider-range>
32 </view>
33 </view>
34 </template>
35
36 <script>
37 import SliderRange from '../../components/slider-range/index.vue'
38 export default {
39 components: {
40 SliderRange,
41 },
42 data() {
43 return {
44 barHeight: 3,
45 blockSize: 26,
46 backgroundColor: '#EEEEF6',
47 slider1: {
48 min: 50,
49 max: 200,
50 step: 10,
51 rangeValue: [50, 150],
52 },
53 slider2: {
54 rangeMin: 0,
55 rangMax: 100,
56 rangeValue: [8, 80],
57 step: 1,
58 activeColor: '#FF6B00',
59 decorationVisible: true,
60 },
61 }
62 },
63 methods: {
64 format1(val) {
65 return val
66 },
67 format2(val) {
68 return `${val}%`
69 },
70 handleRangeChange(e) {
71 this.rangeValue = e
72 },
73 },
74 }
75 </script>
76 <style>
77 .demo-slider-range {
78 background-color: #fff;
79 padding: 100rpx 40rpx 0;
80 }
81
82 .section-title {
83 padding: 0 0 20rpx;
84 color: #666;
85 }
86
87 .slider-item:not(:last-child) {
88 margin-bottom: 100rpx;
89 }
90 </style>
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>
...@@ -181,6 +181,20 @@ ...@@ -181,6 +181,20 @@
181 } 181 }
182 182
183 }, { 183 }, {
184 "path": "pages/level/ztx/approval",
185 "style": {
186 "navigationBarTitleText": "级位考试审批",
187 "enablePullDownRefresh": false
188 }
189
190 }, {
191 "path": "pages/level/ztx/cert",
192 "style": {
193 "navigationBarTitleText": "级位证书发布",
194 "enablePullDownRefresh": false
195 }
196
197 }, {
184 "path": "pages/rank/approval", 198 "path": "pages/rank/approval",
185 "style": { 199 "style": {
186 "navigationBarTitleText": "段位考试审批", 200 "navigationBarTitleText": "段位考试审批",
...@@ -422,6 +436,24 @@ ...@@ -422,6 +436,24 @@
422 "enablePullDownRefresh": false 436 "enablePullDownRefresh": false
423 } 437 }
424 } 438 }
439 ,{
440 "path" : "pages/level/ztx/examList",
441 "style" :
442 {
443 "navigationBarTitleText": "级位考试详情",
444 "enablePullDownRefresh": false
445 }
446
447 }
448 ,{
449 "path" : "pages/level/ztx/studentList",
450 "style" :
451 {
452 "navigationBarTitleText": "考生列表",
453 "enablePullDownRefresh": false
454 }
455
456 }
425 ], 457 ],
426 "globalStyle": { 458 "globalStyle": {
427 "navigationStyle": "custom", 459 "navigationStyle": "custom",
......
...@@ -4,6 +4,12 @@ ...@@ -4,6 +4,12 @@
4 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" 4 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
5 styleType="text" activeColor="#AD181F"></uni-segmented-control> 5 styleType="text" activeColor="#AD181F"></uni-segmented-control>
6 <view class="appList"> 6 <view class="appList">
7 <view class="vipData" v-if="userType == '1'" v-show="totalCost>0">
8 <view>费用合计:
9 <text>¥{{ totalCost.toFixed(2) }}</text>
10 </view>
11 </view>
12
7 <view class="appItem" v-for="item in list"> 13 <view class="appItem" v-for="item in list">
8 <view class="status" @click="goDetail(item)"> 14 <view class="status" @click="goDetail(item)">
9 <text v-if="item.auditStatus == 0" class="text-primary">审核中</text> 15 <text v-if="item.auditStatus == 0" class="text-primary">审核中</text>
...@@ -36,25 +42,22 @@ ...@@ -36,25 +42,22 @@
36 <view>{{item.content.renewYear}}</view> 42 <view>{{item.content.renewYear}}</view>
37 </view> 43 </view>
38 <view v-if="deptType == 1"> 44 <view v-if="deptType == 1">
39 团体会员/新会员 45 会员合计/新会员
40 <view>{{item.content.allCount}}/{{item.content.newCount}}</view> 46 <view>{{item.content.allCount}}/<text class="text-danger">{{item.content.newCount}}</text></view>
41 </view> 47 </view>
42 <view v-if="deptType == 1"> 48 <view v-if="deptType == 1">
43 费用合计 49 费用合计
44 <view> {{ (item?.content?.allFee*1).toFixed(2) }}</view> 50 <view> ¥{{ (item?.content?.allFee*1).toFixed(2) }}</view>
45 </view> 51 </view>
46 </view> 52 </view>
47 <view class="func" v-if="(userType == '3'||userType == '2') && item.auditStatus == 0"> 53 <view class="func" v-if="(userType == '3'||userType == '2') && item.auditStatus == 0">
48 <button @click="audit(item.recordId,'0')">拒绝</button> 54 <button @click="audit(item.recordId,'0')">拒绝</button>
49 <button @click="audit(item.recordId,'1')">同意</button> 55 <button @click="audit(item.recordId,'1')">同意</button>
50 </view> 56 </view>
51 <view class="func" v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)"> 57 <view class="func" v-if="(userType == '1'&&item.auditStatus == 0)">
52 <button @click="audit(item.recordId,'0')">拒绝</button> 58 <button @click="audit(item.recordId,'0')">拒绝</button>
53 <button @click="audit(item.recordId,'1')">同意</button> 59 <button @click="audit(item.recordId,'1')">同意</button>
54 </view> 60 </view>
55 <view class="func" v-if="(deptType == 6&&(item.status == 0 || item.status == 2))">
56 <button>提交审核</button>
57 </view>
58 </view> 61 </view>
59 </view> 62 </view>
60 63
...@@ -90,6 +93,7 @@ ...@@ -90,6 +93,7 @@
90 const total = ref(0) 93 const total = ref(0)
91 const deptType = ref('') 94 const deptType = ref('')
92 const userType = ref('') 95 const userType = ref('')
96 const totalCost = ref(0)
93 onLoad(() => { 97 onLoad(() => {
94 if (app.globalData.isLogin) { 98 if (app.globalData.isLogin) {
95 init() 99 init()
...@@ -126,12 +130,14 @@ ...@@ -126,12 +130,14 @@
126 }else if( deptType.value==4||deptType.value==5){ 130 }else if( deptType.value==4||deptType.value==5){
127 queryParams.value.noEmpty=1 131 queryParams.value.noEmpty=1
128 } 132 }
133 totalCost.value = 0
129 api.getGroupList(queryParams.value).then(res => { 134 api.getGroupList(queryParams.value).then(res => {
130 uni.hideLoading() 135 uni.hideLoading()
131 list.value = res.rows 136 list.value = res.rows
132 list.value.forEach(item => { 137 list.value.forEach(item => {
133 item.content = JSON.parse(item.content) 138 item.content = JSON.parse(item.content)
134 // item.doc = JSON.parse(item.doc) 139 // item.doc = JSON.parse(item.doc)
140 totalCost.value = totalCost.value + (item.content.allFee * 1)
135 }) 141 })
136 total.value = res.total 142 total.value = res.total
137 }) 143 })
...@@ -194,7 +200,7 @@ ...@@ -194,7 +200,7 @@
194 200
195 if(userType.value=='1'){ 201 if(userType.value=='1'){
196 // 查看 202 // 查看
197 let path = `/pages/group/apply/applyDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}` 203 let path = `/pages/group/apply/mergeUpDetail?form=${form}`
198 uni.navigateTo({ 204 uni.navigateTo({
199 url: path 205 url: path
200 }); 206 });
......
...@@ -40,21 +40,35 @@ ...@@ -40,21 +40,35 @@
40 </view> 40 </view>
41 <view class="flexbox"> 41 <view class="flexbox">
42 <view> 42 <view>
43 单价 43 <view>
44 <text>¥{{n.unitPrice}}</text> 44 原有效期
45 <text>{{n.validityTime?.slice(0,10)}}</text>
46 </view>
47 <view>
48 提交日期
49 <text>{{n.commitTime?.slice(0,10)}}</text>
50 </view>
45 </view> 51 </view>
46 <view> 52 <view>
47 年限 53 年限
48 <text>{{n.renewYear}}</text> 54 <text>{{n.renewYear}}</text>
55 <view v-if="deptType==1">
56 会员证
57 <text v-if="form.content.sendJiaoFeiFlag==1" class="text-success">已下发</text>
58 <text v-else class="text-warning">未下发</text>
59 </view>
49 </view> 60 </view>
50 <view> 61 <view>
51 总价 62 单价
63 <text>¥{{n.unitPrice}}</text>
64 <view>总价
52 <text>¥{{n.allFee}}</text> 65 <text>¥{{n.allFee}}</text>
53 </view> 66 </view>
54 </view> 67 </view>
55 </view> 68 </view>
56 </view> 69 </view>
57 </view> 70 </view>
71 </view>
58 72
59 </view> 73 </view>
60 74
...@@ -80,15 +94,15 @@ ...@@ -80,15 +94,15 @@
80 </view> 94 </view>
81 </view> 95 </view>
82 96
83 <view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0"> 97 <!-- <view class="fixedBottom" v-if="(deptType == 1)&&form.auditStatus == 0">
84 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> 98 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
85 <button class="btn-red" @click="audit(form.id,'1')">同意</button> 99 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
86 </view> 100 </view>
87 101
88 <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0"> 102 <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.auditStatus == 0">
89 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button> 103 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
90 <button class="btn-red" @click="audit(form.id,'1')">同意</button> 104 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
91 </view> 105 </view> -->
92 106
93 </view> 107 </view>
94 </template> 108 </template>
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
15 <view class="item" v-for="n in list"> 15 <view class="item" v-for="n in list">
16 <view class="w100"> 16 <view class="w100">
17 <view class="name">{{n.certName}}</view> 17 <view class="name">{{n.certName}}</view>
18 <view class="date" v-if="n.validityTime">{{n.validityTime?.silce(0,10)}}</view> 18 <view class="date" v-if="n.validityTime">{{n.validityTime?.slice(0,10)}}</view>
19 <view class="flexbox"> 19 <view class="flexbox">
20 <view>单价 20 <view>单价
21 <text>¥{{ (n.unitPrice*1).toFixed(2) }}</text> 21 <text>¥{{ (n.unitPrice*1).toFixed(2) }}</text>
......
1 <template> 1 <template>
2 <view class="page"> 2 <view class="page">
3 <view class="bgbg"> 3 <view class="bgbg">
4 <view class="loginOutIcon" @click="loginOut">
5 <image src="@/static/switch.png"></image>
6 </view>
4 <view class="welcome">您好! 7 <view class="welcome">您好!
5 {{memberInfo.name}} 8 {{memberInfo.name}}
6 <br />欢迎使用中跆协会员管理系统 9 <br />欢迎使用中跆协会员管理系统
...@@ -42,7 +45,7 @@ ...@@ -42,7 +45,7 @@
42 <view v-if="userType=='4'" @click="goPath('/pages/level/apply')"> 45 <view v-if="userType=='4'" @click="goPath('/pages/level/apply')">
43 <image />级位考试申请 46 <image />级位考试申请
44 </view> 47 </view>
45 <view v-if="userType!='4'" @click="goPath('/pages/level/approval')"> 48 <view v-if="userType!='4'&&userType!='1'" @click="goPath('/pages/level/approval')">
46 <image />级位考试审核 49 <image />级位考试审核
47 </view> 50 </view>
48 <view v-if="userType=='2'" @click="goPath('/pages/level/apply')"> 51 <view v-if="userType=='2'" @click="goPath('/pages/level/apply')">
...@@ -52,6 +55,12 @@ ...@@ -52,6 +55,12 @@
52 55
53 </view> 56 </view>
54 <view v-if="userType=='1'" class="girdBox"> 57 <view v-if="userType=='1'" class="girdBox">
58 <view @click="goPath('/pages/level/ztx/approval')">
59 <image />级位考试审核
60 </view>
61 <view @click="goPath('/pages/level/ztx/cert')">
62 <image />级位证书发布
63 </view>
55 <view @click="goPath('/pages/rank/approval')"> 64 <view @click="goPath('/pages/rank/approval')">
56 <image />段位考试审核 65 <image />段位考试审核
57 </view> 66 </view>
...@@ -132,7 +141,9 @@ ...@@ -132,7 +141,9 @@
132 proId = option.proId; 141 proId = option.proId;
133 } 142 }
134 }); 143 });
144 function loginOut(){
135 145
146 }
136 function goPath(path) { 147 function goPath(path) {
137 uni.navigateTo({ 148 uni.navigateTo({
138 url: path 149 url: path
...@@ -282,6 +293,9 @@ ...@@ -282,6 +293,9 @@
282 } 293 }
283 </script> 294 </script>
284 <style scope lang="scss"> 295 <style scope lang="scss">
296 .loginOutIcon{
297 image{}
298 }
285 .welcome { 299 .welcome {
286 padding: 55rpx; 300 padding: 55rpx;
287 line-height: 55rpx; 301 line-height: 55rpx;
......
...@@ -42,6 +42,9 @@ ...@@ -42,6 +42,9 @@
42 <image mode="aspectFit" src="/static/nodata.png"></image> 42 <image mode="aspectFit" src="/static/nodata.png"></image>
43 <text>暂无数据</text> 43 <text>暂无数据</text>
44 </view> 44 </view>
45 <view v-if="userType=='2'" class="block-btn-box">
46 <button @click="goMerge" class="btn-red-kx">前往合并 > </button>
47 </view>
45 </view> 48 </view>
46 </template> 49 </template>
47 50
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
40 40
41 <view class="nodata" v-if="infoList.length==0"> 41 <view class="nodata" v-if="infoList.length==0">
42 <image mode="aspectFit" src="/static/nodata.png"></image> 42 <image mode="aspectFit" src="/static/nodata.png"></image>
43 <text>暂无数据</text> 43 <button class="btn-red" @click="gohome">回到首页</button>
44 </view> 44 </view>
45 </view> 45 </view>
46 </template> 46 </template>
...@@ -161,6 +161,12 @@ ...@@ -161,6 +161,12 @@
161 }); 161 });
162 162
163 } 163 }
164 function gohome(){
165 let path = `/pages/index/index`
166 uni.reLaunch({
167 url: path
168 });
169 }
164 </script> 170 </script>
165 171
166 <style scoped> 172 <style scoped>
......
1 <template>
2 <view>
3 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
4 styleType="text" activeColor="#AD181F"></uni-segmented-control>
5 <view v-show="totalCost>0" class="vipData">
6 <view>费用合计:
7 <text>{{ totalCost.toFixed(2) }}</text>
8 </view>
9 </view>
10
11 <view class="appList">
12 <view class="appItem" v-for="item in infoList">
13 <view class="status" :class="{
14 'text-primary':item.status=='0',
15 'text-success':item.status=='1',
16 'text-danger':item.status=='2',
17 'text-warning':item.status=='3'
18 }" @click="goDetail(item)">
19 {{ item.statusStr }}
20 </view>
21
22 <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
23 <view class="name mt0" @click="goDetail(item)">{{item.mergeName}}</view>
24 <view class="pp esp">上报单位:{{item.memName}}</view>
25 <view class="flexbox" @click="goDetail(item)">
26 <view>
27 考试人数
28 <view>{{item.totalNum}}</view>
29 </view>
30
31 <view>
32 缴费状态
33 <view>
34 <text :class="{
35 'text-success':item.examPayStatusStr=='已上传凭证',
36 'text-danger':item.examPayStatusStr=='未上传凭证',
37 'text-warning':item.examPayStatusStr=='已结算'
38 }">{{ item.examPayStatusStr||'--' }}</text>
39 </view>
40 </view>
41 <view>
42 总金额
43 <view>¥{{item.totalAmount}}</view>
44 </view>
45 </view>
46 <view class="func" v-if="item.status=='0'">
47 <button @click="audit(item,'2')">拒绝</button>
48 <button @click="audit(item,'1')">同意</button>
49 </view>
50 </view>
51 </view>
52
53 <view class="nodata" v-if="infoList.length==0">
54 <image mode="aspectFit" src="/static/nodata.png"></image>
55 <text>暂无数据</text>
56 </view>
57 </view>
58 </template>
59
60 <script setup>
61 import * as api from '@/common/api.js'
62 import config from '@/config.js'
63 import _ from 'lodash'
64 import {
65 onMounted,
66 ref
67 } from 'vue'
68 import {
69 onLoad,
70 onShow
71 } from '@dcloudio/uni-app'
72 const app = getApp();
73 const queryParams = ref({
74 // pageNum: 1,
75 // pageSize: 10
76 status: '0',
77 type: '1'
78 })
79 const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回'])
80 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
81 const current = ref()
82 const infoList = ref([])
83 const total = ref(0)
84 const totalCost = ref(0)
85 const deptType = ref('')
86 const userType = ref('')
87 onLoad(() => {
88
89 })
90 onShow(() => {
91 if (app.globalData.isLogin) {
92 init()
93 } else {
94
95 app.firstLoadCallback = () => {
96 init()
97 };
98 }
99 })
100
101 function init() {
102 deptType.value = app.globalData.deptType
103 userType.value = app.globalData.userType
104 getList()
105 }
106
107
108 function getList() {
109 uni.showLoading({
110 title: '加载中'
111 })
112 totalCost.value = 0
113 api.getVerityMergeList(queryParams.value).then(response => {
114 uni.hideLoading()
115 const list = []
116 _.each(response.rows, r => {
117 const item = JSON.parse(r.remark)
118 item.recordId = r.recordId
119 item.status = r.auditStatus
120 item.statusStr = statusArr[r.auditStatus]
121 item.isView = r.isView
122 item.payStatus = r.payStatus
123 item.examPayStatusStr = r.examPayStatusStr
124 item.sourceData = r
125 item.auditProcess = r.auditProcess
126 list.push(item)
127
128 totalCost.value += (item.totalAmount * 1)
129 })
130 infoList.value = list
131 total.value = response.total
132 })
133 }
134
135 function onClickItem(e) {
136 console.log(e)
137 uni.showLoading({
138 title: '加载中'
139 })
140 queryParams.value.status = e.currentIndex
141 getList()
142 }
143
144 function goDetail(item) {
145 const form = encodeURIComponent(JSON.stringify(item))
146 // 查看
147 let path = `/pages/level/mergeUpDetail?form=${form}&type=1`
148 uni.navigateTo({
149 url: path
150 });
151
152 }
153
154 function audit(item, flag) {
155 var obj = {
156 flag: flag,
157 reason: null,
158 id: item.recordId
159 }
160
161 if (flag == '2') {
162 // 拒绝
163 // 弹出框填写理由
164 uni.showModal({
165 title: '请输入拒绝理由',
166 editable: true,
167 success: function(res) {
168 if (res.confirm) {
169 if (!res.content) {
170 uni.showToast({
171 title: '请输入拒绝理由',
172 icon: 'none'
173 })
174 } else {
175 obj.reason = res.content
176 doApproval(obj)
177 }
178 }
179 }
180 })
181 } else if (flag == '1') {
182 // 二次确认
183 uni.showModal({
184 title: '提示',
185 content: `确定审批通过吗`,
186 success: function(res) {
187 if (res.confirm) {
188 doApproval(obj)
189 }
190 }
191 })
192 }
193 }
194
195 function doApproval(obj) {
196 console.log(obj)
197 api.doMergeFlows(obj).then((res) => {
198 uni.showToast({
199 title: '操作成功',
200 icon: 'none'
201 })
202 getList()
203 })
204 }
205 </script>
206
207
208 <style scoped lang="scss">
209 .mt0 {
210 margin-top: 0 !important;
211 }
212
213 .appList .appItem .name {
214 width: 80%;
215 word-break: break-all;
216 }
217 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view>
3 <!-- 级位证书发布 -->
4 <view class="appList">
5 <view class="appItem" v-for="item in infoList">
6 <view class="status" @click="goDetail(item)">
7 <text :class="{
8 'text-warning':item.certStatus=='0',
9 'text-success':item.certStatus=='1'
10 }">{{ item.certStatusStr }}</text>
11 </view>
12
13 <view class="date">提交日期:{{item.submitTimeStr}}</view>
14 <view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
15 <view class="pp esp" v-if="item.certTime">证书发送时间:{{item.certTimeStr}}</view>
16 <view class="flexbox" @click="goDetail(item)">
17 <view>
18 申请单位
19 <view>{{item.memberName}}</view>
20 </view>
21 <view>
22 已发证书
23 <view>{{item.hasCerts}}</view>
24 </view>
25 <view>
26 待发证书
27 <view>{{item.noCerts}}</view>
28 </view>
29 </view>
30 <view class="func" v-if="item.certStatus != '2'">
31 <button @click="send(item)">一键生成</button>
32 </view>
33 </view>
34 </view>
35
36 <view class="nodata" v-if="infoList.length==0">
37 <image mode="aspectFit" src="/static/nodata.png"></image>
38 <text>暂无数据</text>
39 </view>
40 </view>
41 </template>
42
43 <script setup>
44 import * as api from '@/common/api.js'
45 import config from '@/config.js'
46 import _ from 'lodash'
47 import {
48 onMounted,
49 ref
50 } from 'vue'
51 import {
52 onLoad,
53 onShow
54 } from '@dcloudio/uni-app'
55 const app = getApp();
56 const queryParams = ref({
57 // pageNum: 1,
58 // pageSize: 10
59 status: '0',
60 type: '1'
61 })
62 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
63 const current = ref()
64 const infoList = ref([])
65 const total = ref(0)
66 const deptType = ref('')
67 const userType = ref('')
68 onLoad((option) => {
69
70 })
71 onShow(() => {
72 if (app.globalData.isLogin) {
73 init()
74 } else {
75
76 app.firstLoadCallback = () => {
77 init()
78 };
79 }
80 })
81
82 function init() {
83 deptType.value = app.globalData.deptType
84 userType.value = app.globalData.userType
85 getList()
86 }
87
88
89 function getList() {
90 uni.showLoading({
91 title: '加载中'
92 })
93 api.getCertsLList(queryParams.value).then(res => {
94 infoList.value = res.rows
95 uni.hideLoading()
96 })
97 }
98
99 function goDetail(item) {
100 // const form = encodeURIComponent(JSON.stringify(item))
101 let path = `/pages/level/ztx/examList?type=1&payId=${item.payId}`
102 uni.navigateTo({
103 url: path
104 });
105 }
106
107 function send(row) {
108 uni.showModal({
109 title: '提示',
110 content: `确定生成 ${row.name} 的证书吗`,
111 success: function(res) {
112 if (res.confirm) {
113 api.submitCert([{
114 id: row.payId
115 }]).then(res => {
116 uni.showToast({
117 title: `下发成功`
118 })
119 getList()
120 })
121 }
122 }
123 })
124 }
125 </script>
126
127
128 <style scoped lang="scss">
129 .mt0 {
130 margin-top: 0 !important;
131 }
132
133 .appList .appItem .name {
134 width: 80%;
135 word-break: break-all;
136 }
137 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view>
3 <!-- 级位证书发布 -->
4 <view class="appList">
5 <view class="appItem" v-for="item in infoList">
6 <view class="status" @click="goDetail(item)">
7 <text :class="{
8 'text-warning':item.isCert=='0',
9 'text-primary':item.isCert=='1',
10 'text-success':item.isCert=='2'
11 }">{{ statusArr[item.isCert]}}</text>
12 </view>
13
14 <view class="date">申请日期: {{item.applyTime?.slice(0,10)}}</view>
15 <view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
16 <view class="pp esp">考级考官:{{item.examinerNames}}</view>
17 <view class="flexbox" @click="goDetail(item)">
18 <view>
19 申请单位
20 <view>{{item.memberName}}</view>
21 </view>
22 <view>
23 已发/待发证书
24 <view>{{item.hasCerts}}/<text class="text-danger">{{item.noCerts}}</text></view>
25 </view>
26 <view>
27 考生数/通过数
28 <view>{{item.totalNum}}/<text class="text-danger">{{item.pass}}</text></view>
29 </view>
30 </view>
31 <view class="func" v-if="item.certStatus != '2'">
32 <button @click="send(item)">一键生成</button>
33 </view>
34 </view>
35 </view>
36
37 <view class="nodata" v-if="infoList.length==0">
38 <image mode="aspectFit" src="/static/nodata.png"></image>
39 <text>暂无数据</text>
40 </view>
41 </view>
42 </template>
43
44 <script setup>
45 import * as api from '@/common/api.js'
46 import config from '@/config.js'
47 import _ from 'lodash'
48 import {
49 onMounted,
50 ref
51 } from 'vue'
52 import {
53 onLoad,
54 onShow
55 } from '@dcloudio/uni-app'
56 const app = getApp();
57 const queryParams = ref({
58 // pageNum: 1,
59 // pageSize: 10
60 })
61 const statusArr = ['未发放', '部分发放', '已发放']
62 const current = ref()
63 const infoList = ref([])
64 const total = ref(0)
65 const deptType = ref('')
66 const userType = ref('')
67 onLoad((option) => {
68 queryParams.value.payId = option.payId
69 queryParams.value.type = option.type
70 })
71 onShow(() => {
72 if (app.globalData.isLogin) {
73 init()
74 } else {
75
76 app.firstLoadCallback = () => {
77 init()
78 };
79 }
80 })
81
82 function init() {
83 deptType.value = app.globalData.deptType
84 userType.value = app.globalData.userType
85 getList()
86 }
87
88
89 function getList() {
90 uni.showLoading({
91 title: '加载中'
92 })
93 api.getExamListByPayId(queryParams.value).then(res => {
94 infoList.value = res.rows
95 uni.hideLoading()
96 })
97 }
98
99 function goDetail(item) {
100 // const form = encodeURIComponent(JSON.stringify(item))
101 let path = `/pages/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}`
102 uni.navigateTo({
103 url: path
104 });
105 }
106
107 function send(row) {
108 uni.showModal({
109 title: '提示',
110 content: `确定生成 ${row.name} 的证书吗`,
111 success: function(res) {
112 if (res.confirm) {
113 api.submitCert([{
114 id: row.payId
115 }]).then(res => {
116 uni.showToast({
117 title: `下发成功`
118 })
119 getList()
120 })
121 }
122 }
123 })
124 }
125 </script>
126
127
128 <style scoped lang="scss">
129 .mt0 {
130 margin-top: 0 !important;
131 }
132
133 .appList .appItem .name {
134 width: 80%;
135 word-break: break-all;
136 }
137 </style>
...\ No newline at end of file ...\ No newline at end of file
1 <template>
2 <view class="hasfixedbottom">
3 <view class="searchbar">
4 <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
5 v-model="queryParams.name" placeholder="搜索姓名" @blur="getList()" @clear="getList()">
6 </uni-easyinput>
7 </view>
8 <view class="indexboxre">
9 <view class="userlist">
10 <view class="item" v-for="n in list">
11 <view class="w100">
12 <view class="status">
13 <text class="text-success" v-if="n.isCert == '1' ">已发送</text>
14 <text class="text-warning" v-else>未发送</text>
15 </view>
16 <view class="name">{{n.realName}}</view>
17
18
19 <view class="flexbox mtb30">
20 <view>所属团体
21 <text>{{n.memName}}</text>
22 </view>
23 <view>会员有效期
24 <text>{{n.vaildityDate?.slice(0,10)}}</text>
25 </view>
26 <view>级位
27 <text>
28 {{ szToHz(n.levelNew) }}
29 </text>
30 </view>
31 </view>
32
33 <div class="func">
34 <button @click="sendCert(n)">{{ ['发送证书','更新证书'][n.isCert] }}</button>
35 </div>
36 </view>
37 </view>
38 </view>
39
40 </view>
41
42 </view>
43 </template>
44
45 <script setup>
46 import * as api from '@/common/api.js'
47 import config from '@/config.js'
48 import {
49 ref,
50 getCurrentInstance
51 } from 'vue'
52 import {
53 onLoad
54 } from '@dcloudio/uni-app'
55 const {
56 proxy
57 } = getCurrentInstance()
58 const app = getApp();
59 const queryParams = ref({})
60 const list = ref([])
61 const total = ref(0)
62 const userType = ref('')
63 onLoad((option) => {
64 queryParams.value.examId = option.examId
65 queryParams.value.payId = option.payId
66 queryParams.value.type = option.type
67 getList()
68 })
69
70 function getList() {
71 uni.showLoading({
72 title: '加载中'
73 })
74 api.certStudentList(queryParams.value).then(res => {
75 list.value = res.rows
76 uni.hideLoading()
77 })
78 }
79
80 function szToHz(num) {
81 const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
82 return hzArr[parseInt(num)]
83 }
84
85
86 function sendCert(row) {
87 uni.showModal({
88 title: '提示',
89 content: `确定下发 ${row.realName} 的证书吗`,
90 success: function(res) {
91 if (res.confirm) {
92 const params = [{
93 id: queryParams.value.payId,
94 children: [{
95 id: queryParams.value.examId,
96 children: [row.id]
97 }]
98 }]
99
100 api.submitCert(params).then(res => {
101 uni.showToast({
102 title: `下发成功`
103 })
104 getList()
105 })
106 }
107 }
108 })
109 }
110
111
112 function handleImport() {
113 var arr = []
114 for (var n of list.value) {
115 if (n.checked) {
116 arr.push(n.perId)
117 }
118 }
119 if (arr.length == 0) {
120 uni.showToast({
121 title: "请选择会员",
122 icon: "none"
123 })
124 return
125 }
126 api.addPersonPaymentGroup({
127 rangeId: queryParams.value.paymentRangeId,
128 personIdArray: arr.join(',')
129 }).then(res => {
130 let path = `/pages/personalVip/renew?rangeId=${res.data.rangeId}`
131 uni.redirectTo({
132 url: path
133 });
134 })
135 }
136 </script>
137
138 <style scoped lang="scss">
139 .indexboxre {
140 padding: 0 30rpx;
141
142 .tt {
143 font-size: 30rpx;
144 margin: 0 0 30rpx;
145 color: #4C5359;
146 }
147
148 position: relative;
149 height: calc(100vh - 280rpx);
150 overflow: auto;
151 }
152
153 .searchbar {
154 display: flex;
155 align-items: center;
156 padding: 25rpx;
157 box-sizing: border-box;
158
159 :deep(.uni-easyinput .uni-easyinput__content) {
160 border-radius: 35rpx;
161 border: none;
162 height: 70rpx;
163 }
164
165 :deep(.uni-easyinput__content-input) {
166 font-size: 26rpx;
167 }
168 }
169 </style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 <view class="hasfixedbottom"> 2 <view class="hasfixedbottom">
3 <view class="searchbar"> 3 <view class="searchbar">
4 <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search" 4 <uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
5 v-model="queryParams.name" placeholder="搜索姓名或证件号码" @blur="getList()" @clear="getList()"> 5 v-model="queryParams.name" placeholder="搜索姓名" @blur="getList()" @clear="getList()">
6 </uni-easyinput> 6 </uni-easyinput>
7 </view> 7 </view>
8 <view class="indexboxre"> 8 <view class="indexboxre">
......
1 @font-face {font-family: "iconfont";
2 src: url('iconfont.eot?t=1587304858380'); /* IE9 */
3 src: url('iconfont.eot?t=1587304858380#iefix') format('embedded-opentype'), /* IE6-IE8 */
4 url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAKYAAsAAAAABkQAAAJOAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCCcApQZAE2AiQDCAsGAAQgBYRtBzAbigXIrrApw69IkQJyuEPQxl76g4HoIYL6/dje+w8TiUTRZBoiHqpVEmRaIRRCYrpn8t//uczdiITNQB7LUyNSaIv5v7/lNAN0rMlIMv6eHwo3dzBnwGQPk3M8ZxtLDRi4CKu4hFtT9xqbz3M5vQl0IPMDneNqDtrDFk3qBXQvDqQA98IosjJJvGHsApfwmECtQTWVzdXtPRiWWasCcWu0A8O5tCyzWrVQWXMwixcVqtNTegeew+/Hn04Mk1QUrJaD8xUf5j/ZxeKxhE/IENDxChSYBzJxUlve0ycY16e23G8U7Ksx+FSWfkjs1S/YX2fV14N+qN6T5uq3WktwWxN1AL2jriQ6LvSLqs8PXI9IP2WWb82rj+Ho6f7KTwh8/vG/+MEqQLlFX3EFFQR3W5dz1tTif3VdBh/nNUyWm/WLguq9RIK/ofUcyLphBVNWtVpz0nGWtlq1KAnHW/2N9XSc2hyqR0SrDKQoVBsnMzuPCnUWUKnaCmrNWTtepw3rE7kGs64BQrNXJI3eUGjWIzP7iwqd/lGpOfpQ6yzaLqwzGWZ0g8kR8tE9ReNlqXLCMho17pA+jB3OGiF/QFyaHLYbrWJtjVLiObaUR7ojolBxluAqeI7iOMOcs5A8aQQiebfZVHVvanhZAqM2MOIQxIdcp5DhyaSUP1qMlj6/g2iHYg5u6aspDxBWMtOjtoZWD3LNkfbqu5dXSke0DiEUpLBMAq2CeSQWy6C8fl6IeERDMKKY62raw1RfR2N9V/J1x6CW5U1hzypUnjtpcGgAAA==') format('woff2'),
5 url('iconfont.woff?t=1587304858380') format('woff'),
6 url('iconfont.ttf?t=1587304858380') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
7 url('iconfont.svg?t=1587304858380#iconfont') format('svg'); /* iOS 4.1- */
8 }
9
10 .iconfont {
11 font-family: "iconfont" !important;
12 font-size: 16px;
13 font-style: normal;
14 -webkit-font-smoothing: antialiased;
15 -moz-osx-font-smoothing: grayscale;
16 }
17
18 .icon-fanhui:before {
19 content: "\e65c";
20 }
21
No preview for this file type
1 <?xml version="1.0" standalone="no"?>
2 <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3 <!--
4 2013-9-30: Created.
5 -->
6 <svg>
7 <metadata>
8 Created by iconfont
9 </metadata>
10 <defs>
11
12 <font id="iconfont" horiz-adv-x="1024" >
13 <font-face
14 font-family="iconfont"
15 font-weight="500"
16 font-stretch="normal"
17 units-per-em="1024"
18 ascent="896"
19 descent="-128"
20 />
21 <missing-glyph />
22
23 <glyph glyph-name="fanhui" unicode="&#58972;" d="M349.184 382.976l435.2 432.64c13.824 13.824 13.824 39.424 0 53.76l-13.824 13.824c-13.824 13.824-39.424 13.824-53.76 0L239.616 410.624c-13.824-13.824-13.824-39.424 0-53.76l474.624-472.576c13.824-13.824 39.424-13.824 53.76 0l13.824 13.824c13.824 13.824 13.824 39.424 0 53.76l-432.64 431.104z" horiz-adv-x="1024" />
24
25
26
27
28 </font>
29 </defs></svg>
No preview for this file type
No preview for this file type
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!