2f7e2ea6 by 杨炀

no message

1 parent 937f2316
1 import request from './request.js' 1 import request from './request.js'
2 import config from '@/config.js' 2 import config from '@/config.js'
3 import * as loginServer from '@/common/login.js'; 3 import * as loginServer from '@/common/login.js';
4 import _ from 'lodash'
5 4
6 // 激活 5 // 激活
7 export function active(data) { 6 export function active(data) {
...@@ -10,13 +9,13 @@ export function active(data) { ...@@ -10,13 +9,13 @@ export function active(data) {
10 method: 'post', 9 method: 'post',
11 params: data 10 params: data
12 }) 11 })
13 } 12 }
14 export function getBlack() { 13 export function getBlack() {
15 return request({ 14 return request({
16 url: '/member/info/check', 15 url: '/member/info/check',
17 method: 'get' 16 method: 'get'
18 }) 17 })
19 } 18 }
20 export function commitPaymentVoucherYJ(data) { 19 export function commitPaymentVoucherYJ(data) {
21 return request({ 20 return request({
22 url: '/person/paymentDocYj/commitPaymentVoucher', 21 url: '/person/paymentDocYj/commitPaymentVoucher',
...@@ -130,13 +129,13 @@ export function deptTreeSelect(params) { ...@@ -130,13 +129,13 @@ export function deptTreeSelect(params) {
130 }) 129 })
131 } 130 }
132 const setIdToString = (list) => { 131 const setIdToString = (list) => {
133 _.each(list, (l) => { 132 for (var l of list) {
134 l.id += '' 133 l.id += ''
135 l.parentId += '' 134 l.parentId += ''
136 if (l.children && l.children.length > 0) { 135 if (l.children && l.children.length > 0) {
137 setIdToString(l.children) 136 setIdToString(l.children)
138 } 137 }
139 }) 138 }
140 } 139 }
141 140
142 // 会员认证 141 // 会员认证
...@@ -263,7 +262,7 @@ export function uploadImgCorp(tempFilePath) { ...@@ -263,7 +262,7 @@ export function uploadImgCorp(tempFilePath) {
263 uni.hideLoading(); 262 uni.hideLoading();
264 }); 263 });
265 } 264 }
266 //only for addVip photoUp 265 //only for addVip photoUp
267 export function uploadImgCorpPhoto(tempFilePath) { 266 export function uploadImgCorpPhoto(tempFilePath) {
268 const imgUrl = tempFilePath 267 const imgUrl = tempFilePath
269 uni.showLoading({ 268 uni.showLoading({
...@@ -806,7 +805,13 @@ export function submitCert(data) { ...@@ -806,7 +805,13 @@ export function submitCert(data) {
806 params: data 805 params: data
807 }) 806 })
808 } 807 }
809 808 export function submitCert2(data) {
809 return request({
810 url: `/exam/payment/submitCerts/updateCerts`,
811 method: 'put',
812 params: data
813 })
814 }
810 export function getCertsLList(query) { 815 export function getCertsLList(query) {
811 return request({ 816 return request({
812 url: '/exam/payment/certsList', 817 url: '/exam/payment/certsList',
...@@ -1197,32 +1202,50 @@ export function getMyCertStage() { ...@@ -1197,32 +1202,50 @@ export function getMyCertStage() {
1197 url: `/member/certified/getMyCertStage`, 1202 url: `/member/certified/getMyCertStage`,
1198 method: 'get' 1203 method: 'get'
1199 }) 1204 })
1200 } 1205 }
1201 // 月结列表 1206 // 月结列表
1202 export function mentDocList(data) { 1207 export function mentDocList(data) {
1203 return request({ 1208 return request({
1204 url: '/person/paymentDocYj/list', 1209 url: '/person/paymentDocYj/list',
1205 method: 'get', 1210 method: 'get',
1206 params: data 1211 params: data
1207 }) 1212 })
1208 } 1213 }
1209 export function wdBack(yjIds) { 1214 export function wdBack(yjIds) {
1210 return request({ 1215 return request({
1211 url: `/person/paymentDocYj/wd/${yjIds}`, 1216 url: `/person/paymentDocYj/wd/${yjIds}`,
1212 method: 'get' 1217 method: 'get'
1213 }) 1218 })
1214 } 1219 }
1215 // 个人会员月结缴费单 1220 // 个人会员月结缴费单
1216 export function downJiaoYJFei(arr) { 1221 export function downJiaoYJFei(arr) {
1217 return request({ 1222 return request({
1218 url: `/person/paymentDocYj/downJiaoFei/${arr}`, 1223 url: `/person/paymentDocYj/downJiaoFei/${arr}`,
1219 method: 'post' 1224 method: 'post'
1220 }) 1225 })
1221 } 1226 }
1222 1227
1223 export function queryProcess(id) { 1228 export function queryProcess(id) {
1224 return request({ 1229 return request({
1225 url: `/system/fileInfo/queryProcess/${id}`, 1230 url: `/system/fileInfo/queryProcess/${id}`,
1226 method: 'get' 1231 method: 'get'
1227 }) 1232 })
1233 }
1234 export function checkPersonByPayIds(payIds) {
1235 return request({
1236 url: `/exam/person/checkPersonByPayIds/${payIds}`,
1237 method: 'get'
1238 })
1239 }
1240 export function checkPersonByExamIds(examIds) {
1241 return request({
1242 url: `/exam/person/checkPersonByExamIds/${examIds}`,
1243 method: 'get'
1244 })
1245 }
1246 export function checkPersonByPersonId(perId) {
1247 return request({
1248 url: `/exam/person/checkPersonByPersonId/${perId}`,
1249 method: 'get'
1250 })
1228 } 1251 }
...\ No newline at end of file ...\ No newline at end of file
......
1 import config from '@/config.js' 1 import config from '@/config.js'
2 import _ from 'lodash' 2 import _ from 'underscore'
3 3
4 const excludeUrls = ['getMemberCountInfo', 'getInfo'] 4 const excludeUrls = ['getMemberCountInfo', 'getInfo']
5 5
......
1 import CryptoJS from 'crypto-js'
1 export function szToHz(num) { 2 export function szToHz(num) {
2 const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'] 3 const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
3 return hzArr[parseInt(num)] 4 return hzArr[parseInt(num)]
4 } 5 }
6
7 export function AESEncrypt(data) {
8 const key = CryptoJS.enc.Utf8.parse('abcdefgabcdegf21')
9 // 将数据转换为字符串
10 const parseByte2HexStr = (wordArray) => {
11 const hexStr = wordArray.ciphertext.toString(CryptoJS.enc.Hex)
12 return hexStr
13 }
14 let dataStr
15 if (typeof data === 'object') {
16 dataStr = JSON.stringify(data)
17 } else {
18 dataStr = String(data)
19 }
20 // 加密
21 const encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(dataStr), key, {
22 mode: CryptoJS.mode.ECB,
23 padding: CryptoJS.pad.Pkcs7
24 })
25 return parseByte2HexStr(encrypted)
26 }
27
28
29 export function AESDecrypt(str) {
30 const key = CryptoJS.enc.Utf8.parse('abcdefgabcdegf21')
31 const decrypt = CryptoJS.AES.decrypt(str, key, {
32 mode: CryptoJS.mode.ECB,
33 padding: CryptoJS.pad.Pkcs7
34 })
35 const aesStr = CryptoJS.enc.Utf8.stringify(decrypt).toString()
36 try {
37 return JSON.parse(aesStr)
38 } catch (e) {
39 return aesStr
40 }
41 }
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -6,10 +6,9 @@ ...@@ -6,10 +6,9 @@
6 // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/"; 6 // const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/";
7 // const baseUrl_api = "http://36.153.235.222:7899/stage-api"; 7 // const baseUrl_api = "http://36.153.235.222:7899/stage-api";
8 // const baseUrl_api = 'http://192.168.1.132:8787' 8 // const baseUrl_api = 'http://192.168.1.132:8787'
9 // const baseUrl_api = 'https://ztx.itechtop.cn/stage-api' 9 const baseUrl_api = 'https://tkcn.19wk.cn:8443/stage-api'
10 // const baseUrl_api = 'https://tkcn.19wk.cn:8443/stage-api'
11 10
12 const baseUrl_api = 'https://system.taekwondo.org.cn/stage-api' 11 // const baseUrl_api = 'https://system.taekwondo.org.cn/stage-api'
13 export default { 12 export default {
14 baseUrl_api 13 baseUrl_api
15 } 14 }
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
56 <script setup> 56 <script setup>
57 import * as api from '@/common/api.js' 57 import * as api from '@/common/api.js'
58 import config from '@/config.js' 58 import config from '@/config.js'
59 import _ from 'lodash' 59 import _ from 'underscore'
60 import { 60 import {
61 onMounted, 61 onMounted,
62 ref 62 ref
......
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
175 } from '@dcloudio/uni-app'; 175 } from '@dcloudio/uni-app';
176 import config from '@/config.js' 176 import config from '@/config.js'
177 import dayjs from 'dayjs' 177 import dayjs from 'dayjs'
178 import _ from 'lodash' 178 import _ from 'underscore'
179 const app = getApp(); 179 const app = getApp();
180 const memberInfo = app.globalData.memberInfo 180 const memberInfo = app.globalData.memberInfo
181 const form = ref({ 181 const form = ref({
......
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
106 <script setup> 106 <script setup>
107 import * as api from '@/common/api.js' 107 import * as api from '@/common/api.js'
108 import config from '@/config.js' 108 import config from '@/config.js'
109 import _ from 'lodash' 109 import _ from 'underscore'
110 import { 110 import {
111 onMounted, 111 onMounted,
112 ref 112 ref
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
60 <script setup> 60 <script setup>
61 import * as api from '@/common/api.js' 61 import * as api from '@/common/api.js'
62 import config from '@/config.js' 62 import config from '@/config.js'
63 import _ from 'lodash' 63 import _ from 'underscore'
64 import { 64 import {
65 onMounted, 65 onMounted,
66 ref 66 ref
......
1 <template> 1 <template>
2 <view> 2 <view>
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="query.idcCode" placeholder="证件号码" @blur="getList"> 5 v-model="query.idcCode" placeholder="证件号码" @blur="getList">
6 </uni-easyinput> 6 </uni-easyinput>
7 </view> 7 </view>
8 <view class="indexboxre"> 8 <view class="indexboxre">
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for="(n,index) in list" :key="index"> 10 <view class="item" v-for="(n,index) in list" :key="index">
11 <!-- <view class="photobox"> 11 <!-- <view class="photobox">
12 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image> 12 <image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
13 <view class="colorful" v-else>{{n.name.slice(1,2)}}</view> 13 <view class="colorful" v-else>{{n.name.slice(1,2)}}</view>
14 </view> --> 14 </view> -->
15 <view> 15 <view>
16 <view class="name">{{n.name}}</view> 16 <view class="name">{{n.name}}</view>
17 <view class="date">会员号:{{n.perCode||'-'}}</view> 17 <view class="date">会员号:{{n.perCode||'-'}}</view>
18 </view> 18 </view>
19 <view class="status"> 19 <view class="status">
20 <text v-if="n.disabled">选择</text> 20 <text v-if="n.disabled">选择</text>
21 <text v-else class="text-primary" @click="handleChoose(n)">选择</text> 21 <text v-else class="text-primary" @click="handleChoose(n)">选择</text>
22 22
23 </view> 23 </view>
24 </view> 24 </view>
25 </view> 25 </view>
26 <view class="nodata" v-if="list.length==0"> 26 <view class="nodata" v-if="list.length==0">
27 <image mode="aspectFit" src="/static/nodata.png"></image> 27 <image mode="aspectFit" src="/static/nodata.png"></image>
28 <text>请输入证件号查找</text> 28 <text>请输入证件号查找</text>
29 </view> 29 </view>
30 </view> 30 </view>
31 31
32 </view> 32 </view>
33 </template> 33 </template>
34 34
35 <script setup> 35 <script setup>
36 import * as api from '@/common/api.js' 36 import * as api from '@/common/api.js'
37 import { 37 import {
38 ref, 38 ref,
39 getCurrentInstance 39 getCurrentInstance
40 } from 'vue' 40 } from 'vue'
41 import { 41 import {
42 onLoad 42 onLoad
43 } from '@dcloudio/uni-app' 43 } from '@dcloudio/uni-app'
44 import _ from 'lodash' 44 import _ from 'underscore'
45 const { 45 const {
46 proxy 46 proxy
47 } = getCurrentInstance() 47 } = getCurrentInstance()
48 const app = getApp(); 48 const app = getApp();
49 const query = ref({ 49 const query = ref({
50 50
51 }) 51 })
52 const list = ref([]) 52 const list = ref([])
53 const total = ref(0) 53 const total = ref(0)
54 const userType = ref('') 54 const userType = ref('')
55 let chosen = [] 55 let chosen = []
56 let ec = null 56 let ec = null
57 onLoad((option) => { 57 onLoad((option) => {
58 query.value.type = option.type 58 query.value.type = option.type
59 chosen = JSON.parse(decodeURIComponent(option.chosen)) || [] 59 chosen = JSON.parse(decodeURIComponent(option.chosen)) || []
60 ec = option.ec 60 ec = option.ec
61 console.log(chosen) 61 console.log(chosen)
62 }) 62 })
63 63
64 function getList() { 64 function getList() {
65 if (!query.value.idcCode) { 65 if (!query.value.idcCode) {
66 return 66 return
67 } 67 }
68 uni.showLoading({ 68 uni.showLoading({
69 title: `查找中` 69 title: `查找中`
70 }) 70 })
71 api.getCoachList(query.value).then(res => { 71 api.getCoachList(query.value).then(res => {
72 if (res.data.length == 0) { 72 if (res.data.length == 0) {
73 uni.showToast({ 73 uni.showToast({
74 title: '未查询到考官信息', 74 title: '未查询到考官信息',
75 icon: "error" 75 icon: "error"
76 }) 76 })
77 list.value = [] 77 list.value = []
78 return 78 return
79 } 79 }
80 list.value = res.data 80 list.value = res.data
81 for(var l of list.value){ 81 for(var l of list.value){
82 if(l.photo&&l.photo.indexOf('http')==-1){ 82 if(l.photo&&l.photo.indexOf('http')==-1){
...@@ -88,67 +88,67 @@ ...@@ -88,67 +88,67 @@
88 } 88 }
89 } 89 }
90 } 90 }
91 uni.hideLoading() 91 uni.hideLoading()
92 }) 92 })
93 } 93 }
94 94
95 function checkChosen(n) { 95 function checkChosen(n) {
96 return _.some(chosen, (c) => { 96 return _.some(chosen, (c) => {
97 return c.perId == n.perId 97 return c.perId == n.perId
98 }) 98 })
99 } 99 }
100 100
101 function handleChoose(row) { 101 function handleChoose(row) {
102 var pages = getCurrentPages() 102 var pages = getCurrentPages()
103 var prevPage = pages[pages.length - 2] 103 var prevPage = pages[pages.length - 2]
104 var obj = { 104 var obj = {
105 perId: row.perId, 105 perId: row.perId,
106 name: row.name, 106 name: row.name,
107 } 107 }
108 108
109 // prevPage.onShow(obj) 109 // prevPage.onShow(obj)
110 uni.$emit('chosen',{ 110 uni.$emit('chosen',{
111 obj:obj, 111 obj:obj,
112 ec 112 ec
113 }) 113 })
114 uni.navigateBack({delta:1}) 114 uni.navigateBack({delta:1})
115 } 115 }
116 116
117 function handleInfo(n) { 117 function handleInfo(n) {
118 uni.navigateTo({ 118 uni.navigateTo({
119 url: `/personalVip/detail?perId=${n.perId}` 119 url: `/personalVip/detail?perId=${n.perId}`
120 }) 120 })
121 } 121 }
122 </script> 122 </script>
123 123
124 <style scoped lang="scss"> 124 <style scoped lang="scss">
125 .indexboxre { 125 .indexboxre {
126 padding: 0 30rpx; 126 padding: 0 30rpx;
127 127
128 .tt { 128 .tt {
129 font-size: 30rpx; 129 font-size: 30rpx;
130 margin: 0 0 30rpx; 130 margin: 0 0 30rpx;
131 color: #4C5359; 131 color: #4C5359;
132 } 132 }
133 133
134 position: relative; 134 position: relative;
135 height: calc(100vh - 300rpx); 135 height: calc(100vh - 300rpx);
136 } 136 }
137 137
138 .searchbar { 138 .searchbar {
139 display: flex; 139 display: flex;
140 align-items: center; 140 align-items: center;
141 padding: 25rpx; 141 padding: 25rpx;
142 box-sizing: border-box; 142 box-sizing: border-box;
143 143
144 :deep(.uni-easyinput .uni-easyinput__content) { 144 :deep(.uni-easyinput .uni-easyinput__content) {
145 border-radius: 35rpx; 145 border-radius: 35rpx;
146 border: none; 146 border: none;
147 height: 70rpx; 147 height: 70rpx;
148 } 148 }
149 149
150 :deep(.uni-easyinput__content-input) { 150 :deep(.uni-easyinput__content-input) {
151 font-size: 26rpx; 151 font-size: 26rpx;
152 } 152 }
153 } 153 }
154 </style> 154 </style>
...\ No newline at end of file ...\ No newline at end of file
......
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-model="list" @query="getQuery" emptyViewImg="/static/nodata.png">
4 4
5 <view class="vipData" :slot="top" style="flex-wrap: wrap;"> 5 <view class="vipData" :slot="top" style="flex-wrap: wrap;">
6 <view class="w25"><text>{{ tablePersonInfo.total }}</text></view> 6 <view class="w25"><text>{{ tablePersonInfo.total }}</text></view>
7 <view class="w25" v-for="l in tablePersonInfo.levelArr" :key="l.level"> 7 <view class="w25" v-for="l in tablePersonInfo.levelArr" :key="l.level">
...@@ -39,33 +39,33 @@ ...@@ -39,33 +39,33 @@
39 </view> 39 </view>
40 </view> 40 </view>
41 </view> 41 </view>
42 </view> 42 </view>
43 43
44 </z-paging> 44 </z-paging>
45 </view> 45 </view>
46 </template> 46 </template>
47 47
48 <script setup> 48 <script setup>
49 import * as api from '@/common/api.js' 49 import * as api from '@/common/api.js'
50 import config from '@/config.js' 50 import config from '@/config.js'
51 import {szToHz} from '@/common/utils.js' 51 import {szToHz} from '@/common/utils.js'
52 import { 52 import {
53 onMounted, 53 onMounted,
54 ref 54 ref
55 } from 'vue' 55 } from 'vue'
56 import { 56 import {
57 onLoad 57 onLoad
58 } from '@dcloudio/uni-app' 58 } from '@dcloudio/uni-app'
59 import _ from 'lodash' 59 import _ from 'underscore'
60 const queryParams = ref({ 60 const queryParams = ref({
61 pageNum: 1, 61 pageNum: 1,
62 pageSize: 10 62 pageSize: 10
63 }) 63 })
64 const studentquery = ref({}) 64 const studentquery = ref({})
65 const paging = ref(null) 65 const paging = ref(null)
66 const userType = ref('') 66 const userType = ref('')
67 const list = ref([]) 67 const list = ref([])
68 const tablePersonInfo = ref({}) 68 const tablePersonInfo = ref({})
69 const total = ref(0) 69 const total = ref(0)
70 const app = getApp(); 70 const app = getApp();
71 onLoad((option)=>{ 71 onLoad((option)=>{
...@@ -80,11 +80,11 @@ ...@@ -80,11 +80,11 @@
80 userType.value = app.globalData.userType 80 userType.value = app.globalData.userType
81 }; 81 };
82 } 82 }
83 }) 83 })
84 onMounted(() => { 84 onMounted(() => {
85 // getList() 85 // getList()
86 }) 86 })
87 87
88 function getList() { 88 function getList() {
89 api.getStudentList(queryParams.value).then(res => { 89 api.getStudentList(queryParams.value).then(res => {
90 paging.value.complete(res.rows); 90 paging.value.complete(res.rows);
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
100 type:'1' 100 type:'1'
101 }) 101 })
102 } 102 }
103 }) 103 })
104 } 104 }
105 function getVipData(obj){ 105 function getVipData(obj){
106 const levelArr = [] 106 const levelArr = []
...@@ -140,8 +140,8 @@ ...@@ -140,8 +140,8 @@
140 }) 140 })
141 }) 141 })
142 } 142 }
143 </script> 143 </script>
144 144
145 <style scoped lang="scss"> 145 <style scoped lang="scss">
146 .userlist{ box-sizing: border-box;padding:20rpx 20rpx 0; 146 .userlist{ box-sizing: border-box;padding:20rpx 20rpx 0;
147 .item{border-bottom: 1px dashed #e5e5e5;position: relative; 147 .item{border-bottom: 1px dashed #e5e5e5;position: relative;
...@@ -155,33 +155,33 @@ ...@@ -155,33 +155,33 @@
155 font-size: 30rpx; 155 font-size: 30rpx;
156 color: #AD181F;} 156 color: #AD181F;}
157 } 157 }
158 } 158 }
159 .searchbar { 159 .searchbar {
160 display: flex; 160 display: flex;
161 align-items: center; 161 align-items: center;
162 padding: 25rpx; 162 padding: 25rpx;
163 box-sizing: border-box; 163 box-sizing: border-box;
164 164
165 .invertedbtn-red { 165 .invertedbtn-red {
166 margin-left: 15rpx; 166 margin-left: 15rpx;
167 font-size: 30rpx; 167 font-size: 30rpx;
168 padding: 16rpx 20rpx; 168 padding: 16rpx 20rpx;
169 box-sizing: border-box; 169 box-sizing: border-box;
170 border-radius: 50rpx; 170 border-radius: 50rpx;
171 background-color: #fff; 171 background-color: #fff;
172 } 172 }
173 173
174 :deep(.uni-easyinput .uni-easyinput__content) { 174 :deep(.uni-easyinput .uni-easyinput__content) {
175 border-radius: 35rpx; 175 border-radius: 35rpx;
176 border: none; 176 border: none;
177 height: 70rpx; 177 height: 70rpx;
178 } 178 }
179 179
180 :deep(.uni-easyinput__content-input) { 180 :deep(.uni-easyinput__content-input) {
181 font-size: 26rpx; 181 font-size: 26rpx;
182 } 182 }
183 } 183 }
184 184
185 185
186 186
187 </style> 187 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -57,7 +57,7 @@ ...@@ -57,7 +57,7 @@
57 <script setup> 57 <script setup>
58 import * as api from '@/common/api.js' 58 import * as api from '@/common/api.js'
59 import config from '@/config.js' 59 import config from '@/config.js'
60 import _ from 'lodash' 60 import _ from 'underscore'
61 import { 61 import {
62 onMounted, 62 onMounted,
63 ref 63 ref
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
60 <script setup> 60 <script setup>
61 import * as api from '@/common/api.js' 61 import * as api from '@/common/api.js'
62 import config from '@/config.js' 62 import config from '@/config.js'
63 import _ from 'lodash' 63 import _ from 'underscore'
64 import { 64 import {
65 onMounted, 65 onMounted,
66 ref 66 ref
......
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
64 <script setup> 64 <script setup>
65 import * as api from '@/common/api.js' 65 import * as api from '@/common/api.js'
66 import config from '@/config.js' 66 import config from '@/config.js'
67 import _ from 'lodash' 67 import _ from 'underscore'
68 import { 68 import {
69 onMounted, 69 onMounted,
70 ref 70 ref
......
...@@ -2,42 +2,44 @@ ...@@ -2,42 +2,44 @@
2 <view> 2 <view>
3 <!-- 级位证书发布 --> 3 <!-- 级位证书发布 -->
4 <z-paging ref="paging" v-model="infoList" @query="getQuery" emptyViewImg="/static/nodata.png"> 4 <z-paging ref="paging" v-model="infoList" @query="getQuery" emptyViewImg="/static/nodata.png">
5 5
6 6
7 <view class="appList"> 7 <view class="appList">
8 <view class="appItem" v-for="(item,index) in infoList" :key="index"> 8 <view class="appItem" v-for="(item,index) in infoList" :key="index">
9 <view class="status" @click="goDetail(item)"> 9 <view class="status" @click="goDetail(item)">
10 <text :class="{ 10 <text :class="{
11 'text-warning':item.certStatus=='0', 11 'text-warning':item.certStatus=='0',
12 'text-primary':item.certStatus=='1', 12 'text-primary':item.certStatus=='1',
13 'text-success':item.certStatus=='2' 13 'text-success':item.certStatus=='2'
14 }">{{ item.certStatusStr }}</text> 14 }">{{ item.certStatusStr }}</text>
15 </view> 15 </view>
16 16
17 <view class="date"> 17 <view class="date">
18 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons> 18 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
19 {{item.submitTimeStr}} 提交</view> 19 {{item.submitTimeStr}} 提交
20 <view class="text-primary" v-if="item.payCode" @click="goDetail(item)">{{item.payCode}}</view>
21 <view class="name mt0 w100" @click="goDetail(item)"><text class="dot"></text>{{item.name}}</view>
22 <view class="pp esp" v-if="item.certTimeStr">证书发送时间:{{item.certTimeStr}}</view>
23 <view class="flexbox" @click="goDetail(item)">
24 <view>
25 申请单位
26 <view>{{item.memberName||'--'}}</view>
27 </view> 20 </view>
28 <view> 21 <view class="text-primary" v-if="item.payCode" @click="goDetail(item)">{{item.payCode}}</view>
29 已发/待发 22 <view class="name mt0 w100" @click="goDetail(item)"><text class="dot"></text>{{item.name}}</view>
30 <view>{{item.hasCerts}}/<text class="text-primary">{{item.noCerts}}</text></view> 23 <view class="pp esp" v-if="item.certTimeStr">证书发送时间:{{item.certTimeStr}}</view>
24 <view class="flexbox" @click="goDetail(item)">
25 <view>
26 申请单位
27 <view>{{item.memberName||'--'}}</view>
28 </view>
29 <view>
30 已发/待发
31 <view>{{item.hasCerts}}/<text class="text-primary">{{item.noCerts}}</text></view>
32 </view>
33
34 </view>
35 <!-- v-if="item.certStatus != '2'" -->
36 <view class="func">
37 <button @click="send(item)">更新证书</button>
31 </view> 38 </view>
32
33 </view>
34 <view class="func" v-if="item.certStatus != '2'">
35 <button @click="send(item)">一键生成</button>
36 </view> 39 </view>
37 </view> 40 </view>
38 </view>
39 </z-paging> 41 </z-paging>
40 <!-- <view class="nodata" v-if="infoList.length==0"> 42 <!-- <view class="nodata" v-if="infoList.length==0">
41 <image mode="aspectFit" src="/static/nodata.png"></image> 43 <image mode="aspectFit" src="/static/nodata.png"></image>
42 <text>暂无数据</text> 44 <text>暂无数据</text>
43 </view> --> 45 </view> -->
...@@ -47,7 +49,7 @@ ...@@ -47,7 +49,7 @@
47 <script setup> 49 <script setup>
48 import * as api from '@/common/api.js' 50 import * as api from '@/common/api.js'
49 import config from '@/config.js' 51 import config from '@/config.js'
50 import _ from 'lodash' 52 import _ from 'underscore'
51 import { 53 import {
52 onMounted, 54 onMounted,
53 ref 55 ref
...@@ -72,14 +74,14 @@ ...@@ -72,14 +74,14 @@
72 const paging = ref(null) 74 const paging = ref(null)
73 onLoad((option) => { 75 onLoad((option) => {
74 queryParams.value.type = option.type 76 queryParams.value.type = option.type
75 if(option.type==2){ 77 if (option.type == 2) {
76 uni.setNavigationBarTitle({ 78 uni.setNavigationBarTitle({
77 title:'段位考试详情' 79 title: '段位考试详情'
78 }) 80 })
79 } 81 }
80 if(option.type==3){ 82 if (option.type == 3) {
81 uni.setNavigationBarTitle({ 83 uni.setNavigationBarTitle({
82 title:'越段考试详情' 84 title: '越段考试详情'
83 }) 85 })
84 } 86 }
85 }) 87 })
...@@ -100,14 +102,15 @@ ...@@ -100,14 +102,15 @@
100 getList() 102 getList()
101 } 103 }
102 104
103 function getQuery(pageNum,pageSize){ 105 function getQuery(pageNum, pageSize) {
104 queryParams.value.pageNum = pageNum, 106 queryParams.value.pageNum = pageNum,
105 queryParams.value.pageSize = pageSize 107 queryParams.value.pageSize = pageSize
106 api.getCertsLList(queryParams.value).then(res => { 108 api.getCertsLList(queryParams.value).then(res => {
107 paging.value.complete(res.rows); 109 paging.value.complete(res.rows);
108 total.value = res.total 110 total.value = res.total
109 }) 111 })
110 } 112 }
113
111 function getList() { 114 function getList() {
112 uni.showLoading({ 115 uni.showLoading({
113 title: '加载中' 116 title: '加载中'
...@@ -126,24 +129,45 @@ ...@@ -126,24 +129,45 @@
126 }); 129 });
127 } 130 }
128 131
129 function send(row) { 132 function checkCert(payIds, sureFunc, confirmFunc) {
130 uni.showModal({ 133 return api.checkPersonByPayIds(payIds).then(res => {
131 title: '提示', 134 if (res.data == 1) {
132 content: `确定生成 ${row.name} 的证书吗`, 135 confirmFunc().then((kk)=>{
133 success: function(res) { 136 if(kk.confirm){
134 if (res.confirm) { 137 sureFunc()
135 api.submitCert([{ 138 }
136 id: row.payId 139 })
137 }]).then(res => { 140 } else if (res.data == 2 || res.data == 3) {
138 uni.showToast({ 141 uni.showModal({
139 title: `下发成功` 142 title: '提示',
140 }) 143 content:`存在学员没有照片,是否继续生成?`,
141 getList() 144 success: (rr) => {
142 }) 145 if(rr.confirm){
143 } 146 sureFunc()
147 }
148 }
149 })
144 } 150 }
145 }) 151 })
146 } 152 }
153
154 function send(row) {
155 checkCert(row.payId, () => {
156 api.submitCert2([{
157 id: row.payId
158 }]).then(res => {
159 uni.showToast({
160 title: `下发成功`
161 })
162 getList()
163 })
164 },()=>{
165 return uni.showModal({
166 title: '提示',
167 content:`确定下发 ${row.name} 的证书吗`
168 })
169 })
170 }
147 </script> 171 </script>
148 172
149 173
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <!-- 级位证书发布 --> 3 <!-- 级位证书发布 -->
4 <view class="appList"> 4 <view class="appList">
5 <view class="appItem" v-for="item in infoList" :key="item.examId"> 5 <view class="appItem" v-for="item in infoList" :key="item.examId">
6 <view class="status" @click="goDetail(item)"> 6 <view class="status" @click="goDetail(item)">
7 <text :class="{ 7 <text :class="{
8 'text-warning':item.isCert=='0', 8 'text-warning':item.isCert=='0',
9 'text-primary':item.isCert=='1', 9 'text-primary':item.isCert=='1',
10 'text-success':item.isCert=='2' 10 'text-success':item.isCert=='2'
11 }">{{ statusArr[item.isCert]}}</text> 11 }">{{ statusArr[item.isCert]}}</text>
12 </view> 12 </view>
13 13
14 <view class="date">申请日期: {{item.applyTime?.slice(0,10)}}</view> 14 <view class="date">申请日期: {{item.applyTime?.slice(0,10)}}</view>
15 <view class="name mt0" @click="goDetail(item)">{{item.name}}</view> 15 <view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
16 <view class="pp esp">考级考官:{{item.examinerNames}}</view> 16 <view class="pp esp">考级考官:{{item.examinerNames}}</view>
17 <view class="flexbox" @click="goDetail(item)"> 17 <view class="flexbox" @click="goDetail(item)">
18 <!-- <view> 18 <!-- <view>
19 申请单位 19 申请单位
20 <view>{{item.memberName}}</view> 20 <view>{{item.memberName}}</view>
21 </view> --> 21 </view> -->
22 <view> 22 <view>
23 已发/待发证书 23 已发/待发证书
24 <view>{{item.hasCerts}}/<text class="text-danger">{{item.noCerts}}</text></view> 24 <view>{{item.hasCerts}}/<text class="text-danger">{{item.noCerts}}</text></view>
25 </view> 25 </view>
26 <view class="w50"> 26 <view class="w50">
27 考生数/通过数 27 考生数/通过数
28 <view>{{item.totalNum}}/<text class="text-danger">{{item.pass}}</text></view> 28 <view>{{item.totalNum}}/<text class="text-danger">{{item.pass}}</text></view>
29 </view> 29 </view>
30 </view> 30 </view>
31 <view class="func" v-if="item.isCert != '2'"> 31 <!-- v-if="item.isCert != '2'" -->
32 <button @click="send(item)">一键生成</button> 32 <view class="func">
33 </view> 33 <button @click="send(item)">更新证书</button>
34 </view> 34 </view>
35 </view> 35 </view>
36 36 </view>
37 <view class="nodata" v-if="infoList.length==0"> 37
38 <image mode="aspectFit" src="/static/nodata.png"></image> 38 <view class="nodata" v-if="infoList.length==0">
39 <text>暂无数据</text> 39 <image mode="aspectFit" src="/static/nodata.png"></image>
40 </view> 40 <text>暂无数据</text>
41 </view> 41 </view>
42 </template> 42 </view>
43 43 </template>
44 <script setup> 44
45 import * as api from '@/common/api.js' 45 <script setup>
46 import config from '@/config.js' 46 import * as api from '@/common/api.js'
47 import _ from 'lodash' 47 import config from '@/config.js'
48 import { 48 import _ from 'underscore'
49 onMounted, 49 import {
50 ref 50 onMounted,
51 } from 'vue' 51 ref
52 import { 52 } from 'vue'
53 onLoad, 53 import {
54 onShow 54 onLoad,
55 } from '@dcloudio/uni-app' 55 onShow
56 const app = getApp(); 56 } from '@dcloudio/uni-app'
57 const queryParams = ref({ 57 const app = getApp();
58 // pageNum: 1, 58 const queryParams = ref({
59 // pageSize: 10 59 // pageNum: 1,
60 }) 60 // pageSize: 10
61 const statusArr = ['未发放', '部分发放', '已发放'] 61 })
62 const current = ref() 62 const statusArr = ['未发放', '部分发放', '已发放']
63 const infoList = ref([]) 63 const current = ref()
64 const total = ref(0) 64 const infoList = ref([])
65 const deptType = ref('') 65 const total = ref(0)
66 const userType = ref('') 66 const deptType = ref('')
67 onLoad((option) => { 67 const userType = ref('')
68 queryParams.value.payId = option.payId 68 onLoad((option) => {
69 queryParams.value.type = option.type 69 queryParams.value.payId = option.payId
70 if (option.type == 2) { 70 queryParams.value.type = option.type
71 uni.setNavigationBarTitle({ 71 if (option.type == 2) {
72 title: '段位考试详情' 72 uni.setNavigationBarTitle({
73 }) 73 title: '段位考试详情'
74 } 74 })
75 if (option.type == 3) { 75 }
76 uni.setNavigationBarTitle({ 76 if (option.type == 3) {
77 title: '越段考试详情' 77 uni.setNavigationBarTitle({
78 }) 78 title: '越段考试详情'
79 } 79 })
80 }) 80 }
81 onShow(() => { 81 })
82 if (app.globalData.isLogin) { 82 onShow(() => {
83 init() 83 if (app.globalData.isLogin) {
84 } else { 84 init()
85 85 } else {
86 app.firstLoadCallback = () => { 86
87 init() 87 app.firstLoadCallback = () => {
88 }; 88 init()
89 } 89 };
90 }) 90 }
91 91 })
92 function init() { 92
93 deptType.value = app.globalData.deptType 93 function init() {
94 userType.value = app.globalData.userType 94 deptType.value = app.globalData.deptType
95 getList() 95 userType.value = app.globalData.userType
96 } 96 getList()
97 97 }
98 98
99 function getList() { 99
100 uni.showLoading({ 100 function getList() {
101 title: '加载中' 101 uni.showLoading({
102 }) 102 title: '加载中'
103 api.getExamListByPayId(queryParams.value).then(res => { 103 })
104 infoList.value = res.rows 104 api.getExamListByPayId(queryParams.value).then(res => {
105 uni.hideLoading() 105 infoList.value = res.rows
106 }) 106 uni.hideLoading()
107 } 107 })
108 108 }
109 function goDetail(item) { 109
110 // const form = encodeURIComponent(JSON.stringify(item)) 110 function goDetail(item) {
111 let path = 111 // const form = encodeURIComponent(JSON.stringify(item))
112 `/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}` 112 let path =
113 uni.navigateTo({ 113 `/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}`
114 url: path 114 uni.navigateTo({
115 }); 115 url: path
116 } 116 });
117 117 }
118 function send(row) { 118 function checkCert(examIds,$sureFunc,$confirmFunc){
119 uni.showModal({ 119 return api.checkPersonByExamIds(examIds).then(res=>{
120 title: '提示', 120 if (res.data == 1) {
121 content: `确定一键下发 ${row.name} 的证书`, 121 $confirmFunc().then((kk)=>{
122 success: function(res) { 122 if(kk.confirm){
123 if (res.confirm) { 123 $sureFunc()
124 api.submitCert([{ 124 }
125 id: queryParams.value.payId, 125 })
126 children: [{ 126 } else if (res.data == 2 || res.data == 3) {
127 id: row.examId 127 uni.showModal({
128 }] 128 title: '提示',
129 }]).then(res => { 129 content:`存在学员没有照片,是否继续生成?`,
130 uni.showToast({ 130 success: (rr) => {
131 title: `下发成功` 131 if(rr.confirm){
132 }) 132 $sureFunc()
133 getList() 133 }
134 }) 134 }
135 } 135 })
136 } 136 }
137 }) 137 })
138 } 138 }
139 </script> 139 function send(row) {
140 140 checkCert(row.examId,()=>{
141 141 api.submitCert2([{
142 <style scoped lang="scss"> 142 id: queryParams.value.payId,
143 .mt0 { 143 children: [{
144 margin-top: 0 !important; 144 id: row.examId
145 } 145 }]
146 146 }]).then(res => {
147 .appList .appItem .name { 147 uni.showToast({
148 width: 80%; 148 title: `下发成功`
149 word-break: break-all; 149 })
150 } 150 getList()
151 })
152 },()=>{
153 return uni.showModal({
154 title: '提示',
155 content:`确定下发 ${row.name} 的证书吗`
156 })
157 })
158 }
159 </script>
160
161
162 <style scoped lang="scss">
163 .mt0 {
164 margin-top: 0 !important;
165 }
166
167 .appList .appItem .name {
168 width: 80%;
169 word-break: break-all;
170 }
151 </style> 171 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -8,18 +8,18 @@ ...@@ -8,18 +8,18 @@
8 <view class="indexboxre" style="height: calc(100vh - 180rpx)"> 8 <view class="indexboxre" style="height: calc(100vh - 180rpx)">
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for="n in list" :key="n.id"> 10 <view class="item" v-for="n in list" :key="n.id">
11 <view class="w100"> 11 <view class="w100">
12 <view class="status"> 12 <view class="status">
13 <text class="text-success" v-if="n.isCert == '1' ">已发送</text> 13 <text class="text-success" v-if="n.isCert == '1' ">已发送</text>
14 <text class="text-warning" v-else>未发送</text> 14 <text class="text-warning" v-else>未发送</text>
15 </view> 15 </view>
16 <view class="name">{{n.realName}}</view> 16 <view class="name">{{n.realName}}</view>
17 <view class="date"> 17 <view class="date">
18 所属团体: {{n.memName}} 18 所属团体: {{n.memName}}
19 </view> 19 </view>
20 20
21 <view class="flexbox mtb30"> 21 <view class="flexbox mtb30">
22 <view> 22 <view>
23 会员有效期 23 会员有效期
24 <text>{{n.vaildityDate?.slice(0,10)}}</text> 24 <text>{{n.vaildityDate?.slice(0,10)}}</text>
25 </view> 25 </view>
...@@ -44,8 +44,10 @@ ...@@ -44,8 +44,10 @@
44 44
45 <script setup> 45 <script setup>
46 import * as api from '@/common/api.js' 46 import * as api from '@/common/api.js'
47 import config from '@/config.js' 47 import config from '@/config.js'
48 import {szToHz} from '@/common/utils.js' 48 import {
49 szToHz
50 } from '@/common/utils.js'
49 import { 51 import {
50 ref, 52 ref,
51 getCurrentInstance 53 getCurrentInstance
...@@ -62,53 +64,66 @@ ...@@ -62,53 +64,66 @@
62 const total = ref(0) 64 const total = ref(0)
63 const userType = ref('') 65 const userType = ref('')
64 onLoad((option) => { 66 onLoad((option) => {
65 queryParams.value.examId = option.examId 67 queryParams.value.examId = option.examId
66 queryParams.value.payId = option.payId 68 queryParams.value.payId = option.payId
67 queryParams.value.type = option.type 69 queryParams.value.type = option.type
68 getList() 70 getList()
69 }) 71 })
70 72
71 function getList() { 73 function getList() {
72 uni.showLoading({ 74 uni.showLoading({
73 title: '加载中' 75 title: '加载中'
74 }) 76 })
75 if(queryParams.value.name==''){ 77 if (queryParams.value.name == '') {
76 delete queryParams.value.name 78 delete queryParams.value.name
77 } 79 }
78 api.certStudentList(queryParams.value).then(res => { 80 api.certStudentList(queryParams.value).then(res => {
79 list.value = res.rows 81 list.value = res.rows
80 uni.hideLoading() 82 uni.hideLoading()
81 }) 83 })
82 } 84 }
83 85 function checkCert(row){
84 function sendCert(row) { 86 return api.checkPersonByPersonId(row.perId).then(res => {
85 let msg 87 if (!res.data) {
86 if(row.isCert==1){ 88 uni.showModal({
87 msg = `更新` 89 title: '提示',
88 }else{ 90 content:'该学员没有照片,无法生成证书!',
89 msg = `下发` 91 success: () => {}
92 })
93 return Promise.reject()
94 }
95 })
96 }
97 function sendCert(row) {
98 let msg
99 if (row.isCert == 1) {
100 msg = `更新`
101 } else {
102 msg = `下发`
90 } 103 }
91 uni.showModal({ 104 checkCert(row).then(() => {
92 title: '提示', 105 uni.showModal({
93 content: `确定${msg}${row.realName}的证书吗`, 106 title: '提示',
94 success: function(res) { 107 content: `确定${msg}${row.realName}的证书吗`,
95 if (res.confirm) { 108 success: function(res) {
96 const params = [{ 109 if (res.confirm) {
97 id: queryParams.value.payId, 110 const params = [{
98 children: [{ 111 id: queryParams.value.payId,
99 id: queryParams.value.examId, 112 children: [{
100 children: [row.id] 113 id: queryParams.value.examId,
114 children: [row.id]
115 }]
101 }] 116 }]
102 }]
103 117
104 api.submitCert(params).then(res => { 118 api.submitCert2(params).then(res => {
105 uni.showToast({ 119 uni.showToast({
106 title: `下发成功` 120 title: `下发成功`
121 })
122 getList()
107 }) 123 })
108 getList() 124 }
109 })
110 } 125 }
111 } 126 })
112 }) 127 })
113 } 128 }
114 129
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="wBox"> 3 <view class="wBox">
4 <view class="tt"> 4 <view class="tt">
5 审核信息 5 审核信息
6 </view> 6 </view>
7 <view> 7 <view>
8 <view class="stepItem" v-for="(n,index) in recordList" :key="index"> 8 <view class="stepItem" v-for="(n,index) in recordList" :key="index">
9 <view class="time">{{n.auditTime||'待审批'}}</view> 9 <view class="time">{{n.auditTime||'待审批'}}</view>
10 <view class="content"> 10 <view class="content">
11 <view class="status"> 11 <view class="status">
12 <text v-if="n.auditResult==0"> 审核中</text> 12 <text v-if="n.auditResult==0"> 审核中</text>
13 <text v-if="n.auditResult==1" class="text-success">审核通过</text> 13 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
14 <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text> 14 <text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text>
15 <text v-if="n.auditResult==3" class="text-warning"> 已撤回</text> 15 <text v-if="n.auditResult==3" class="text-warning"> 已撤回</text>
16 </view> 16 </view>
17 <!-- <view class="name">{{index+1}}</view> --> 17 <!-- <view class="name">{{index+1}}</view> -->
18 <view class="deptName">{{n.auditDeptName}}</view> 18 <view class="deptName">{{n.auditDeptName}}</view>
19 <view v-if="n.auditStatus==2"> 19 <view v-if="n.auditStatus==2">
20 备注:{{n.auditMsg||'/' }} 20 备注:{{n.auditMsg||'/' }}
21 </view> 21 </view>
22 </view> 22 </view>
23 </view> 23 </view>
24 </view> 24 </view>
25 </view> 25 </view>
26 26
27 </view> 27 </view>
28 </template> 28 </template>
29 29
30 <script setup> 30 <script setup>
31 import * as api from '@/common/api.js' 31 import * as api from '@/common/api.js'
32 import config from '@/config.js' 32 import config from '@/config.js'
33 import _ from 'lodash' 33 import _ from 'underscore'
34 import { 34 import {
35 onMounted, 35 onMounted,
36 ref 36 ref
37 } from 'vue' 37 } from 'vue'
38 import { 38 import {
39 onLoad, 39 onLoad,
40 onShow 40 onShow
41 } from '@dcloudio/uni-app' 41 } from '@dcloudio/uni-app'
42 const app = getApp(); 42 const app = getApp();
43 const userType = ref('') 43 const userType = ref('')
44 const recordList = ref([]) 44 const recordList = ref([])
45 onLoad((option) => { 45 onLoad((option) => {
46 getMyCertStageFN() 46 getMyCertStageFN()
47 }) 47 })
48 48
49 function getMyCertStageFN() { 49 function getMyCertStageFN() {
50 api.getMyCertStage().then(res => { 50 api.getMyCertStage().then(res => {
51 recordList.value = res.data 51 recordList.value = res.data
52 console.log(res) 52 console.log(res)
53 }) 53 })
54 54
55 } 55 }
56 </script> 56 </script>
57 57
58 <style scoped lang="scss"> 58 <style scoped lang="scss">
59 .wBox { 59 .wBox {
60 width: 700rpx; 60 width: 700rpx;
61 padding: 30rpx; 61 padding: 30rpx;
62 margin: 20rpx auto; 62 margin: 20rpx auto;
63 background: #FFFFFF; 63 background: #FFFFFF;
64 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); 64 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
65 border-radius: 15rpx; 65 border-radius: 15rpx;
66 66
67 .tt { 67 .tt {
68 color: #0A1629; 68 color: #0A1629;
69 margin: 0 0 30rpx; 69 margin: 0 0 30rpx;
70 font-size: 30rpx; 70 font-size: 30rpx;
71 } 71 }
72 72
73 .ddd { 73 .ddd {
74 font-size: 28rpx; 74 font-size: 28rpx;
75 color: #333; 75 color: #333;
76 margin: 0 0 10rpx; 76 margin: 0 0 10rpx;
77 77
78 .lab { 78 .lab {
79 color: #999; 79 color: #999;
80 display: inline-block; 80 display: inline-block;
81 text-align: justify; 81 text-align: justify;
82 } 82 }
83 } 83 }
84 } 84 }
85 </style> 85 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 { 1 {
2 "dependencies": { 2 "dependencies": {
3 "crypto-js": "^4.1.1",
3 "dayjs": "^1.11.6", 4 "dayjs": "^1.11.6",
4 "lodash": "^4.17.21" 5 "lodash": "^4.17.21",
6 "underscore": "^1.13.6"
5 }, 7 },
6 "devDependencies": { 8 "devDependencies": {
7 "@rollup/plugin-commonjs": "^22.0.0" 9 "@rollup/plugin-commonjs": "^22.0.0"
......
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
60 <script setup> 60 <script setup>
61 import * as api from '@/common/api.js' 61 import * as api from '@/common/api.js'
62 import config from '@/config.js' 62 import config from '@/config.js'
63 import _ from 'lodash' 63 import _ from 'underscore'
64 import { 64 import {
65 onMounted, 65 onMounted,
66 ref 66 ref
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <!-- <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" 3 <!-- <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
4 styleType="text" activeColor="#AD181F"></uni-segmented-control> --> 4 styleType="text" activeColor="#AD181F"></uni-segmented-control> -->
5 5
6 <!-- 成绩录入 --> 6 <!-- 成绩录入 -->
7 <view class="appList"> 7 <view class="appList">
8 <view class="appItem" v-for="item in infoList" :key="item.recordId"> 8 <view class="appItem" v-for="item in infoList" :key="item.recordId">
9 <view @click="goDetail(item)"> 9 <view @click="goDetail(item)">
10 <view class="status"> 10 <view class="status">
11 <text :class="{ 11 <text :class="{
12 'text-primary':item.scoreStatus=='0', 12 'text-primary':item.scoreStatus=='0',
13 'text-success':item.scoreStatus=='2', 13 'text-success':item.scoreStatus=='2',
14 'text-danger':item.scoreStatus=='3', 14 'text-danger':item.scoreStatus=='3',
15 'text-warning':item.scoreStatus=='4' 15 'text-warning':item.scoreStatus=='4'
16 }">{{ item.scoreStatusStr }}</text> 16 }">{{ item.scoreStatusStr }}</text>
17 </view> 17 </view>
18 18
19 <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view> 19 <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
20 <view class="name mt0">{{item.name}}</view> 20 <view class="name mt0">{{item.name}}</view>
21 <view class="pp esp">考段日期:{{item.startTime?.substring(0,16)}}{{item.endTime?.substring(0,16)}} 21 <view class="pp esp">考段日期:{{item.startTime?.substring(0,16)}}{{item.endTime?.substring(0,16)}}
22 </view> 22 </view>
23 <view class="flexbox"> 23 <view class="flexbox">
24 <view> 24 <view>
25 申请日期 25 申请日期
26 <view>{{item.applyTime?.substring(0, 10)}}</view> 26 <view>{{item.applyTime?.substring(0, 10)}}</view>
27 </view> 27 </view>
28 <view> 28 <view>
29 考段考生数 29 考段考生数
30 <view>{{item.totalNum||'--'}}</view> 30 <view>{{item.totalNum||'--'}}</view>
31 </view> 31 </view>
32 <view> 32 <view>
33 总金额 33 总金额
34 <view><text class="text-danger">¥{{(item.totalAmount*1).toFixed(2)}}</text></view> 34 <view><text class="text-danger">¥{{(item.totalAmount*1).toFixed(2)}}</text></view>
35 </view> 35 </view>
36 </view> 36 </view>
37 </view> 37 </view>
38 <!-- <view class="func" v-if="(item.scoreStatus=='0'||item.scoreStatus=='3' || item.scoreStatus=='4')&& item.rankStatus == '1'"> 38 <!-- <view class="func" v-if="(item.scoreStatus=='0'||item.scoreStatus=='3' || item.scoreStatus=='4')&& item.rankStatus == '1'">
39 <button @click="scoreEdit(item)">成绩维护</button> 39 <button @click="scoreEdit(item)">成绩维护</button>
40 </view> --> 40 </view> -->
41 </view> 41 </view>
42 </view> 42 </view>
43 <view class="nodata" v-if="infoList.length==0"> 43 <view class="nodata" v-if="infoList.length==0">
44 <image mode="aspectFit" src="/static/nodata.png"></image> 44 <image mode="aspectFit" src="/static/nodata.png"></image>
45 <text>暂无数据</text> 45 <text>暂无数据</text>
46 </view> 46 </view>
47 </view> 47 </view>
48 </template> 48 </template>
49 49
50 <script setup> 50 <script setup>
51 import * as examApi from '@/common/api_exam.js' 51 import * as examApi from '@/common/api_exam.js'
52 import _ from 'lodash' 52 import _ from 'underscore'
53 import { 53 import {
54 ref 54 ref
55 } from 'vue' 55 } from 'vue'
56 import { 56 import {
57 onLoad, 57 onLoad,
58 onShow 58 onShow
59 } from '@dcloudio/uni-app' 59 } from '@dcloudio/uni-app'
60 60
61 const app = getApp(); 61 const app = getApp();
62 const queryParams = ref({ 62 const queryParams = ref({
63 status: '0', 63 status: '0',
64 rankStatus: '1' 64 rankStatus: '1'
65 }) 65 })
66 const current = ref() 66 const current = ref()
67 const navs = ref(['审核中', '审核通过', '审核拒绝']) 67 const navs = ref(['审核中', '审核通过', '审核拒绝'])
68 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] 68 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
69 const deptType = ref('') 69 const deptType = ref('')
70 const infoList = ref([]) 70 const infoList = ref([])
71 const total = ref(0) 71 const total = ref(0)
72 72
73 onLoad((options) => { 73 onLoad((options) => {
74 queryParams.value.type = options.type 74 queryParams.value.type = options.type
75 if (options.type == 2) { 75 if (options.type == 2) {
76 uni.setNavigationBarTitle({ 76 uni.setNavigationBarTitle({
77 title: '段位成绩录入' 77 title: '段位成绩录入'
78 }) 78 })
79 } 79 }
80 if (options.type == 3) { 80 if (options.type == 3) {
81 uni.setNavigationBarTitle({ 81 uni.setNavigationBarTitle({
82 title: '越段成绩录入' 82 title: '越段成绩录入'
83 }) 83 })
84 } 84 }
85 }) 85 })
86 86
87 onShow(() => { 87 onShow(() => {
88 if (app.globalData.isLogin) { 88 if (app.globalData.isLogin) {
89 init() 89 init()
90 } else { 90 } else {
91 app.firstLoadCallback = () => { 91 app.firstLoadCallback = () => {
92 init() 92 init()
93 }; 93 };
94 } 94 }
95 }) 95 })
96 96
97 function init() { 97 function init() {
98 deptType.value = app.globalData.deptType 98 deptType.value = app.globalData.deptType
99 getList() 99 getList()
100 } 100 }
101 101
102 function onClickItem(e) { 102 function onClickItem(e) {
103 queryParams.value.status = e.currentIndex 103 queryParams.value.status = e.currentIndex
104 getList() 104 getList()
105 } 105 }
106 106
107 function getList() { 107 function getList() {
108 uni.showLoading({ 108 uni.showLoading({
109 title: '加载中', 109 title: '加载中',
110 mask: true 110 mask: true
111 }) 111 })
112 examApi.getRankScoreList(queryParams.value).then(res => { 112 examApi.getRankScoreList(queryParams.value).then(res => {
113 113
114 infoList.value = res.rows 114 infoList.value = res.rows
115 total.value = res.total 115 total.value = res.total
116 116
117 uni.hideLoading() 117 uni.hideLoading()
118 }) 118 })
119 } 119 }
120 120
121 function scoreEdit(item) { 121 function scoreEdit(item) {
122 console.log(item.sourceData) 122 console.log(item.sourceData)
123 var obj = { 123 var obj = {
124 flag: flag, 124 flag: flag,
125 reason: null, 125 reason: null,
126 id: item.recordId 126 id: item.recordId
127 } 127 }
128 128
129 if (flag == '2') { 129 if (flag == '2') {
130 // 拒绝 130 // 拒绝
131 // 弹出框填写理由 131 // 弹出框填写理由
132 uni.showModal({ 132 uni.showModal({
133 title: '请输入拒绝理由', 133 title: '请输入拒绝理由',
134 editable: true, 134 editable: true,
135 success: function(res) { 135 success: function(res) {
136 if (res.confirm) { 136 if (res.confirm) {
137 if (!res.content) { 137 if (!res.content) {
138 uni.showToast({ 138 uni.showToast({
139 title: '请输入拒绝理由', 139 title: '请输入拒绝理由',
140 icon: 'none' 140 icon: 'none'
141 }) 141 })
142 } else { 142 } else {
143 obj.reason = res.content 143 obj.reason = res.content
144 doApproval(obj) 144 doApproval(obj)
145 } 145 }
146 } 146 }
147 } 147 }
148 }) 148 })
149 } else if (flag == '1') { 149 } else if (flag == '1') {
150 // 二次确认 150 // 二次确认
151 uni.showModal({ 151 uni.showModal({
152 title: '提示', 152 title: '提示',
153 content: `确定审批通过吗`, 153 content: `确定审批通过吗`,
154 success: function(res) { 154 success: function(res) {
155 if (res.confirm) { 155 if (res.confirm) {
156 doApproval(obj) 156 doApproval(obj)
157 } 157 }
158 } 158 }
159 }) 159 })
160 } 160 }
161 } 161 }
162 162
163 function doApproval(obj) { 163 function doApproval(obj) {
164 uni.showLoading({ 164 uni.showLoading({
165 title: '加载中' 165 title: '加载中'
166 }) 166 })
167 examApi.doMergeFlows(obj).then((res) => { 167 examApi.doMergeFlows(obj).then((res) => {
168 uni.hideLoading() 168 uni.hideLoading()
169 uni.showToast({ 169 uni.showToast({
170 title: '操作成功', 170 title: '操作成功',
171 icon: 'none' 171 icon: 'none'
172 }) 172 })
173 getList() 173 getList()
174 }) 174 })
175 } 175 }
176 176
177 function goDetail(item) { 177 function goDetail(item) {
178 let path = `/pages/rank/applyDetail?examId=${item.examId}` 178 let path = `/pages/rank/applyDetail?examId=${item.examId}`
179 uni.navigateTo({ 179 uni.navigateTo({
180 url: path 180 url: path
181 }); 181 });
182 } 182 }
183 </script> 183 </script>
184 184
185 <style lang="scss" scoped> 185 <style lang="scss" scoped>
186 186
187 </style> 187 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view class="mainbox"> 2 <view class="mainbox">
3 <view class="title">{{form.name}}</view> 3 <view class="title">{{form.name}}</view>
4 <view class="infos"> 4 <view class="infos">
5 <text>{{ form.source }}</text> 5 <text>{{ form.source }}</text>
6 <text>{{ form.belongTime }}</text> 6 <text>{{ form.belongTime }}</text>
7 </view> 7 </view>
8 <view class="content"> 8 <view class="content">
9 9
10 <view v-html="form.content"></view> 10 <view v-html="form.content"></view>
11 11
12 <view v-if="attachmentMp4.length>0"> 12 <view v-if="attachmentMp4.length>0">
13 <video v-for="(f,index) in attachmentMp4" :key="index" controls :src="config.baseUrl_api + f.url"></video> 13 <video v-for="(f,index) in attachmentMp4" :key="index" controls :src="config.baseUrl_api + f.url"></video>
14 </view> 14 </view>
15 <view v-if="attachmentFile.length>0" class="mt20"> 15 <view v-if="attachmentFile.length>0" class="mt20">
16 <!-- 附件--> 16 <!-- 附件-->
17 <view class="fwb mt20">附件下载:</view> 17 <view class="fwb mt20">附件下载:</view>
...@@ -20,34 +20,34 @@ ...@@ -20,34 +20,34 @@
20 {{ index + 1 }}{{ f.name }} 20 {{ index + 1 }}{{ f.name }}
21 </view> 21 </view>
22 22
23 </view> 23 </view>
24 <view> 24 <view>
25 <text v-if=" form.author">发布人:{{ form.author }}</text> 25 <text v-if=" form.author">发布人:{{ form.author }}</text>
26 </view> 26 </view>
27 </view> 27 </view>
28 </view> 28 </view>
29 </template> 29 </template>
30 30
31 <script setup> 31 <script setup>
32 import { 32 import {
33 ref 33 ref
34 } from 'vue' 34 } from 'vue'
35 import * as api from '@/common/api.js'; 35 import * as api from '@/common/api.js';
36 import { 36 import {
37 onLoad 37 onLoad
38 } from '@dcloudio/uni-app'; 38 } from '@dcloudio/uni-app';
39 import _ from 'lodash' 39 import _ from 'underscore'
40 import config from '@/config.js' 40 import config from '@/config.js'
41 const form = ref({}) 41 const form = ref({})
42 const attachmentFile = ref([]) 42 const attachmentFile = ref([])
43 const attachmentMp4 = ref([]) 43 const attachmentMp4 = ref([])
44 44
45 onLoad((option) => { 45 onLoad((option) => {
46 getData(option.noteId) 46 getData(option.noteId)
47 }) 47 })
48 48
49 function getData(noteId) { 49 function getData(noteId) {
50 api.getNewsById(noteId).then(res => { 50 api.getNewsById(noteId).then(res => {
51 form.value = res.data 51 form.value = res.data
52 var html = res.data.content.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1') 52 var html = res.data.content.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1')
53 .replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1') 53 .replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1')
...@@ -55,14 +55,14 @@ const attachmentMp4 = ref([]) ...@@ -55,14 +55,14 @@ const attachmentMp4 = ref([])
55 .replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1') 55 .replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1')
56 .replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1'); 56 .replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1');
57 57
58 58
59 if (form.value.attacthJson) { 59 if (form.value.attacthJson) {
60 const attachment = JSON.parse(form.value.attacthJson) 60 const attachment = JSON.parse(form.value.attacthJson)
61 attachmentFile.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') === -1) || [] 61 attachmentFile.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') === -1) || []
62 attachmentMp4.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') !== -1) || [] 62 attachmentMp4.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') !== -1) || []
63 } 63 }
64 }) 64 })
65 } 65 }
66 function downLoad(url){ 66 function downLoad(url){
67 console.log(url) 67 console.log(url)
68 var str = config.baseUrl_api + url 68 var str = config.baseUrl_api + url
...@@ -131,9 +131,9 @@ const attachmentMp4 = ref([]) ...@@ -131,9 +131,9 @@ const attachmentMp4 = ref([])
131 } 131 }
132 }); 132 });
133 } 133 }
134 </script> 134 </script>
135 135
136 <style scoped lang="scss"> 136 <style scoped lang="scss">
137 .mainbox { 137 .mainbox {
138 box-sizing: border-box; 138 box-sizing: border-box;
139 padding: 50rpx 25rpx 160rpx; 139 padding: 50rpx 25rpx 160rpx;
...@@ -190,5 +190,5 @@ const attachmentMp4 = ref([]) ...@@ -190,5 +190,5 @@ const attachmentMp4 = ref([])
190 190
191 video { 191 video {
192 width: 100%; 192 width: 100%;
193 } 193 }
194 </style> 194 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="wBox"> 3 <view class="wBox">
4 <view class="tt">考段基本信息</view> 4 <view class="tt">考段基本信息</view>
5 <view class="ddd"> 5 <view class="ddd">
6 <text class="lab">考段名称:</text>{{ form.name }} 6 <text class="lab">考段名称:</text>{{ form.name }}
7 </view> 7 </view>
8 <view class="ddd"> 8 <view class="ddd">
9 <text class="lab">申请日期:</text>{{form.applyTime?.slice(0,10)}} 9 <text class="lab">申请日期:</text>{{form.applyTime?.slice(0,10)}}
10 </view> 10 </view>
11 <view class="ddd"> 11 <view class="ddd">
12 <text class="lab">申请单位:</text>{{ form.memberName }} 12 <text class="lab">申请单位:</text>{{ form.memberName }}
13 </view> 13 </view>
14 <view class="ddd"> 14 <view class="ddd">
15 <text class="lab">考官:</text>{{form.examinerNames?.split(',').join('/')}} 15 <text class="lab">考官:</text>{{form.examinerNames?.split(',').join('/')}}
16 </view> 16 </view>
17 <view class="ddd"> 17 <view class="ddd">
18 <text class="lab">考试开始时间:</text>{{form.startTime}} 18 <text class="lab">考试开始时间:</text>{{form.startTime}}
19 </view> 19 </view>
20 <view class="ddd"> 20 <view class="ddd">
21 <text class="lab">考试结束时间:</text>{{form.endTime}} 21 <text class="lab">考试结束时间:</text>{{form.endTime}}
22 </view> 22 </view>
23 <view class="ddd"> 23 <view class="ddd">
24 <text class="lab">考段地点:</text>{{form.address}} 24 <text class="lab">考段地点:</text>{{form.address}}
25 </view> 25 </view>
26 <view class="ddd" v-if="userType=='2'||userType=='1'"> 26 <view class="ddd" v-if="userType=='2'||userType=='1'">
27 <text class="lab">总金额:</text> 27 <text class="lab">总金额:</text>
28 <text class="text-danger">¥{{(form.totalAmount*1).toFixed(2) }}</text> 28 <text class="text-danger">¥{{(form.totalAmount*1).toFixed(2) }}</text>
29 </view> 29 </view>
30 </view> 30 </view>
31 <view class="wBox"> 31 <view class="wBox">
32 <view class="tt"> 32 <view class="tt">
33 考生信息 33 考生信息
34 </view> 34 </view>
35 <view class="vipData"> 35 <view class="vipData">
36 <view><text>{{ tablePersonInfo.total }}</text></view> 36 <view><text>{{ tablePersonInfo.total }}</text></view>
37 <view v-for="l in tablePersonInfo.levelArr" :key="l.level"> 37 <view v-for="l in tablePersonInfo.levelArr" :key="l.level">
38 {{ szToHz(l.level) }}段: <text>{{ l.num }} </text> 38 {{ szToHz(l.level) }}段: <text>{{ l.num }} </text>
39 </view> 39 </view>
40 </view> 40 </view>
41 <view class="userlist"> 41 <view class="userlist">
42 <view class="item" v-for="n in list" :key="n.id" style="background-color: #fffafa;"> 42 <view class="item" v-for="n in list" :key="n.id" style="background-color: #fffafa;">
43 <view class="w100"> 43 <view class="w100">
44 <view class="name">{{n.realName}} <text>{{n.memName}}</text></view> 44 <view class="name">{{n.realName}} <text>{{n.memName}}</text></view>
45 <!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> --> 45 <!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> -->
46 <view class="flexbox"> 46 <view class="flexbox">
47 <view> 47 <view>
48 原有段位 48 原有段位
...@@ -65,97 +65,97 @@ ...@@ -65,97 +65,97 @@
65 <text v-if="n.isPass=='1'" class="text-success">通过</text> 65 <text v-if="n.isPass=='1'" class="text-success">通过</text>
66 <text v-else class="text-danger">未通过</text> 66 <text v-else class="text-danger">未通过</text>
67 </view> 67 </view>
68 </view> 68 </view>
69 </view> 69 </view>
70 70
71 </view> 71 </view>
72 </view> 72 </view>
73 73
74 </view> 74 </view>
75 <view class="wBox"> 75 <view class="wBox">
76 <view class="tt"> 76 <view class="tt">
77 审核信息 77 审核信息
78 </view> 78 </view>
79 <view> 79 <view>
80 <view class="stepItem" v-for="(n,index) in recordList" :key="index"> 80 <view class="stepItem" v-for="(n,index) in recordList" :key="index">
81 <view class="time">{{n.handleDate||'待审批'}}</view> 81 <view class="time">{{n.handleDate||'待审批'}}</view>
82 <view class="content"> 82 <view class="content">
83 <view class="status"> 83 <view class="status">
84 <text :class="{ 84 <text :class="{
85 'text-success':n.auditStatus=='1', 85 'text-success':n.auditStatus=='1',
86 'text-danger':n.auditStatus=='2', 86 'text-danger':n.auditStatus=='2',
87 'text-warning':n.auditStatus=='3' 87 'text-warning':n.auditStatus=='3'
88 }">{{ n.auditStatusStr }}</text> 88 }">{{ n.auditStatusStr }}</text>
89 </view> 89 </view>
90 <!-- <view class="name">{{index+1}}</view> --> 90 <!-- <view class="name">{{index+1}}</view> -->
91 <view class="deptName">{{n.deptName}}</view> 91 <view class="deptName">{{n.deptName}}</view>
92 <view v-if="n.reason"> 92 <view v-if="n.reason">
93 备注:{{n.reason||'' }} 93 备注:{{n.reason||'' }}
94 </view> 94 </view>
95 </view> 95 </view>
96 </view> 96 </view>
97 </view> 97 </view>
98 </view> 98 </view>
99 99
100 </view> 100 </view>
101 </template> 101 </template>
102 102
103 <script setup> 103 <script setup>
104 import * as api from '@/common/api.js' 104 import * as api from '@/common/api.js'
105 import config from '@/config.js' 105 import config from '@/config.js'
106 import _ from 'lodash' 106 import _ from 'underscore'
107 import { 107 import {
108 onMounted, 108 onMounted,
109 ref 109 ref
110 } from 'vue' 110 } from 'vue'
111 import { 111 import {
112 onLoad, 112 onLoad,
113 onShow 113 onShow
114 } from '@dcloudio/uni-app' 114 } from '@dcloudio/uni-app'
115 import {szToHz} from '@/common/utils.js' 115 import {szToHz} from '@/common/utils.js'
116 116
117 117
118 const app = getApp(); 118 const app = getApp();
119 const userType = ref('') 119 const userType = ref('')
120 const form = ref({}) 120 const form = ref({})
121 const tablePersonInfo = ref({}) 121 const tablePersonInfo = ref({})
122 const recordList = ref([]) 122 const recordList = ref([])
123 const list = ref([]) 123 const list = ref([])
124 let examId = '' 124 let examId = ''
125 onLoad((option) => { 125 onLoad((option) => {
126 examId = option.examId 126 examId = option.examId
127 }) 127 })
128 onShow(() => { 128 onShow(() => {
129 if (app.globalData.isLogin) { 129 if (app.globalData.isLogin) {
130 init() 130 init()
131 } else { 131 } else {
132 app.firstLoadCallback = () => { 132 app.firstLoadCallback = () => {
133 init() 133 init()
134 }; 134 };
135 } 135 }
136 }) 136 })
137 137
138 function init() { 138 function init() {
139 uni.showLoading({ 139 uni.showLoading({
140 title: '加载中' 140 title: '加载中'
141 }) 141 })
142 userType.value = app.globalData.userType 142 userType.value = app.globalData.userType
143 getForm() 143 getForm()
144 getRecordList() 144 getRecordList()
145 getTablePersonInfo() 145 getTablePersonInfo()
146 } 146 }
147 147
148 function getForm() { 148 function getForm() {
149 api.getLevelApplyInfo(examId).then(res => { 149 api.getLevelApplyInfo(examId).then(res => {
150 uni.hideLoading() 150 uni.hideLoading()
151 form.value = res.data 151 form.value = res.data
152 }) 152 })
153 } 153 }
154 154
155 function getRecordList() { 155 function getRecordList() {
156 api.getApprovalRecord(examId).then(res => { 156 api.getApprovalRecord(examId).then(res => {
157 recordList.value = res.data.levelSteps 157 recordList.value = res.data.levelSteps
158 }) 158 })
159 } 159 }
160 function getTablePersonInfo() { 160 function getTablePersonInfo() {
161 api.getStudentList({ 161 api.getStudentList({
...@@ -187,26 +187,26 @@ function getTablePersonInfo() { ...@@ -187,26 +187,26 @@ function getTablePersonInfo() {
187 } 187 }
188 }) 188 })
189 } 189 }
190 190
191 </script> 191 </script>
192 192
193 <style scoped lang="scss"> 193 <style scoped lang="scss">
194 .wBox { 194 .wBox {
195 width: 700rpx; 195 width: 700rpx;
196 padding: 30rpx; 196 padding: 30rpx;
197 margin: 20rpx auto; 197 margin: 20rpx auto;
198 background: #FFFFFF; 198 background: #FFFFFF;
199 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1); 199 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
200 border-radius: 15rpx; 200 border-radius: 15rpx;
201 201
202 .tt { 202 .tt {
203 color: #0A1629;margin: 0 0 30rpx; 203 color: #0A1629;margin: 0 0 30rpx;
204 font-size: 30rpx; 204 font-size: 30rpx;
205 } 205 }
206 206
207 .ddd{font-size: 28rpx;color: #333; margin: 0 0 10rpx; 207 .ddd{font-size: 28rpx;color: #333; margin: 0 0 10rpx;
208 .lab{color: #999;display: inline-block;text-align: justify;} 208 .lab{color: #999;display: inline-block;text-align: justify;}
209 } 209 }
210 } 210 }
211 211
212 </style> 212 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -49,10 +49,10 @@ ...@@ -49,10 +49,10 @@
49 </template> 49 </template>
50 50
51 <script setup> 51 <script setup>
52 import * as examApi from '@/common/api_exam.js' 52 import * as examApi from '@/common/api_exam.js'
53 import _ from 'lodash' 53 import _ from 'underscore'
54 import { ref } from 'vue' 54 import { ref } from 'vue'
55 import { onLoad,onShow } from '@dcloudio/uni-app' 55 import { onLoad,onShow } from '@dcloudio/uni-app'
56 56
57 const app = getApp(); 57 const app = getApp();
58 const queryParams = ref({ 58 const queryParams = ref({
...@@ -63,7 +63,7 @@ const current = ref() ...@@ -63,7 +63,7 @@ const current = ref()
63 const navs = ref(['审核中', '审核通过', '审核拒绝']) 63 const navs = ref(['审核中', '审核通过', '审核拒绝'])
64 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] 64 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
65 const deptType = ref('') 65 const deptType = ref('')
66 const infoList = ref([]) 66 const infoList = ref([])
67 const total = ref(0) 67 const total = ref(0)
68 68
69 onLoad((options)=>{ 69 onLoad((options)=>{
...@@ -85,9 +85,9 @@ function init(){ ...@@ -85,9 +85,9 @@ function init(){
85 getList() 85 getList()
86 } 86 }
87 87
88 function onClickItem(e) { 88 function onClickItem(e) {
89 queryParams.value.status = e.currentIndex 89 queryParams.value.status = e.currentIndex
90 getList() 90 getList()
91 } 91 }
92 92
93 function getList() { 93 function getList() {
...@@ -180,7 +180,7 @@ function goDetail(item) { ...@@ -180,7 +180,7 @@ function goDetail(item) {
180 let path = `/pages/rank/applyDetail?examId=${item.examId}` 180 let path = `/pages/rank/applyDetail?examId=${item.examId}`
181 uni.navigateTo({ 181 uni.navigateTo({
182 url: path 182 url: path
183 }); 183 });
184 } 184 }
185 function handleBack(row){ 185 function handleBack(row){
186 uni.showModal({ 186 uni.showModal({
......
...@@ -49,17 +49,17 @@ ...@@ -49,17 +49,17 @@
49 </template> 49 </template>
50 50
51 <script setup> 51 <script setup>
52 import * as examApi from '@/common/api_exam.js' 52 import * as examApi from '@/common/api_exam.js'
53 import _ from 'lodash' 53 import _ from 'underscore'
54 import { ref } from 'vue' 54 import { ref } from 'vue'
55 import { onLoad,onShow } from '@dcloudio/uni-app' 55 import { onLoad,onShow } from '@dcloudio/uni-app'
56 56
57 const app = getApp(); 57 const app = getApp();
58 const queryParams = ref({}) 58 const queryParams = ref({})
59 const current = ref() 59 const current = ref()
60 const navs = ref(['未发放', '部分发放', '已发放']) 60 const navs = ref(['未发放', '部分发放', '已发放'])
61 const deptType = ref('') 61 const deptType = ref('')
62 const infoList = ref([]) 62 const infoList = ref([])
63 const total = ref(0) 63 const total = ref(0)
64 64
65 onLoad((options)=>{ 65 onLoad((options)=>{
...@@ -81,9 +81,9 @@ function init(){ ...@@ -81,9 +81,9 @@ function init(){
81 getList() 81 getList()
82 } 82 }
83 83
84 function onClickItem(e) { 84 function onClickItem(e) {
85 queryParams.value.certStatus = e.currentIndex 85 queryParams.value.certStatus = e.currentIndex
86 getList() 86 getList()
87 } 87 }
88 88
89 function getList() { 89 function getList() {
...@@ -122,7 +122,7 @@ function goDetail(item) { ...@@ -122,7 +122,7 @@ function goDetail(item) {
122 let path = `/pages/rank/applyDetail?examId=${item.examId}` 122 let path = `/pages/rank/applyDetail?examId=${item.examId}`
123 uni.navigateTo({ 123 uni.navigateTo({
124 url: path 124 url: path
125 }); 125 });
126 } 126 }
127 127
128 </script> 128 </script>
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" 3 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
4 styleType="text" activeColor="#AD181F"></uni-segmented-control> 4 styleType="text" activeColor="#AD181F"></uni-segmented-control>
5 5
6 <!-- 段位考试审核 --> 6 <!-- 段位考试审核 -->
7 <view class="appList"> 7 <view class="appList">
8 <view class="appItem" v-for="item in infoList" :key="item.recordId"> 8 <view class="appItem" v-for="item in infoList" :key="item.recordId">
9 <view @click="goDetail(item)"> 9 <view @click="goDetail(item)">
10 <view class="status"> 10 <view class="status">
11 <text :class="{ 11 <text :class="{
12 'text-primary':item.auditStatus=='0', 12 'text-primary':item.auditStatus=='0',
13 'text-success':item.auditStatus=='1', 13 'text-success':item.auditStatus=='1',
14 'text-danger':item.auditStatus=='2', 14 'text-danger':item.auditStatus=='2',
15 'text-warning':item.auditStatus=='3' 15 'text-warning':item.auditStatus=='3'
16 }">{{ item.statusStr }}</text> 16 }">{{ item.statusStr }}</text>
17 </view> 17 </view>
18 18
19 <view class="date" v-if="item.status!='0'&&item.submitTime"> 19 <view class="date" v-if="item.status!='0'&&item.submitTime">
20 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons> 20 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
21 提交时间:{{item.submitTime}} 21 提交时间:{{item.submitTime}}
22 </view> 22 </view>
23 <view class="text-primary">{{item.examCode}}</view> 23 <view class="text-primary">{{item.examCode}}</view>
24 <view class="name mt10"><text class="dot"></text>{{item.name}}</view> 24 <view class="name mt10"><text class="dot"></text>{{item.name}}</view>
25 <view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}} 25 <view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}
26 </view> 26 </view>
27 <view class="flexbox"> 27 <view class="flexbox">
28 <view> 28 <view>
29 申请日期 29 申请日期
30 <view>{{item.applyTime.substring(0, 10)}}</view> 30 <view>{{item.applyTime.substring(0, 10)}}</view>
31 </view> 31 </view>
32 <view> 32 <view>
33 考段考生数 33 考段考生数
34 <view>{{item.totalNum}}</view> 34 <view>{{item.totalNum}}</view>
35 </view> 35 </view>
36 <view> 36 <view>
37 总金额 37 总金额
38 <view> 38 <view>
39 <text class="text-danger">¥{{(item.totalAmount*1).toFixed(2)}}</text> 39 <text class="text-danger">¥{{(item.totalAmount*1).toFixed(2)}}</text>
40 </view> 40 </view>
41 </view> 41 </view>
42 </view> 42 </view>
43 </view> 43 </view>
44 <view class="func" v-if="item.auditStatus=='0'"> 44 <view class="func" v-if="item.auditStatus=='0'">
45 <button @click="audit(item,'2')">拒绝</button> 45 <button @click="audit(item,'2')">拒绝</button>
46 <button @click="audit(item,'1')">同意</button> 46 <button @click="audit(item,'1')">同意</button>
47 </view> 47 </view>
48 </view> 48 </view>
49 </view> 49 </view>
50 <view class="nodata" v-if="infoList.length==0"> 50 <view class="nodata" v-if="infoList.length==0">
51 <image mode="aspectFit" src="/static/nodata.png"></image> 51 <image mode="aspectFit" src="/static/nodata.png"></image>
52 <text>暂无数据</text> 52 <text>暂无数据</text>
53 </view> 53 </view>
54 </view> 54 </view>
55 </template> 55 </template>
56 56
57 <script setup> 57 <script setup>
58 import * as examApi from '@/common/api_exam.js' 58 import * as examApi from '@/common/api_exam.js'
59 import _ from 'lodash' 59 import _ from 'underscore'
60 import { 60 import {
61 ref 61 ref
62 } from 'vue' 62 } from 'vue'
63 import { 63 import {
64 onLoad, 64 onLoad,
65 onShow 65 onShow
66 } from '@dcloudio/uni-app' 66 } from '@dcloudio/uni-app'
67 67
68 const app = getApp(); 68 const app = getApp();
69 const queryParams = ref({ 69 const queryParams = ref({
70 status: '0', 70 status: '0',
71 rankStatus: '1' 71 rankStatus: '1'
72 }) 72 })
73 const current = ref() 73 const current = ref()
74 const navs = ref(['审核中', '审核通过', '审核拒绝']) 74 const navs = ref(['审核中', '审核通过', '审核拒绝'])
75 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] 75 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
76 const deptType = ref('') 76 const deptType = ref('')
77 const infoList = ref([]) 77 const infoList = ref([])
78 const total = ref(0) 78 const total = ref(0)
79 79
80 onLoad((options) => { 80 onLoad((options) => {
81 queryParams.value.type = options.type 81 queryParams.value.type = options.type
82 if (options.type == 2) { 82 if (options.type == 2) {
83 uni.setNavigationBarTitle({ 83 uni.setNavigationBarTitle({
84 title: '段位考试审核' 84 title: '段位考试审核'
85 }) 85 })
86 } 86 }
87 if (options.type == 3) { 87 if (options.type == 3) {
88 uni.setNavigationBarTitle({ 88 uni.setNavigationBarTitle({
89 title: '越段考试审核' 89 title: '越段考试审核'
90 }) 90 })
91 } 91 }
92 }) 92 })
93 93
94 onShow(() => { 94 onShow(() => {
95 if (app.globalData.isLogin) { 95 if (app.globalData.isLogin) {
96 init() 96 init()
97 } else { 97 } else {
98 app.firstLoadCallback = () => { 98 app.firstLoadCallback = () => {
99 init() 99 init()
100 }; 100 };
101 } 101 }
102 }) 102 })
103 103
104 function init() { 104 function init() {
105 uni.showLoading({ 105 uni.showLoading({
106 title: '加载中' 106 title: '加载中'
107 }) 107 })
108 deptType.value = app.globalData.deptType 108 deptType.value = app.globalData.deptType
109 getList() 109 getList()
110 } 110 }
111 111
112 function onClickItem(e) { 112 function onClickItem(e) {
113 uni.showLoading({ 113 uni.showLoading({
114 title: '加载中' 114 title: '加载中'
115 }) 115 })
116 queryParams.value.status = e.currentIndex 116 queryParams.value.status = e.currentIndex
117 getList() 117 getList()
118 } 118 }
119 119
120 function getList() { 120 function getList() {
121 examApi.getVerityList(queryParams.value).then(res => { 121 examApi.getVerityList(queryParams.value).then(res => {
122 uni.hideLoading() 122 uni.hideLoading()
123 const list = [] 123 const list = []
124 _.each(res.rows, r => { 124 _.each(res.rows, r => {
125 const item = JSON.parse(r.content) 125 const item = JSON.parse(r.content)
126 item.recordId = r.recordId 126 item.recordId = r.recordId
127 item.auditStatus = r.auditStatus 127 item.auditStatus = r.auditStatus
128 item.submitStatus = r.submitStatus 128 item.submitStatus = r.submitStatus
129 item.distributeTime = r.distributeTime 129 item.distributeTime = r.distributeTime
130 item.statusStr = statusArr[r.auditStatus] 130 item.statusStr = statusArr[r.auditStatus]
131 item.sourceData = r 131 item.sourceData = r
132 item.scoreStatus = r.scoreStatus 132 item.scoreStatus = r.scoreStatus
133 item.status = r.status 133 item.status = r.status
134 item.isView = r.isView 134 item.isView = r.isView
135 item.payStatus = r.payStatus 135 item.payStatus = r.payStatus
136 item.rankStatus = r.rankStatus 136 item.rankStatus = r.rankStatus
137 item.processCentBar = r.processCentBar 137 item.processCentBar = r.processCentBar
138 list.push(item) 138 list.push(item)
139 }) 139 })
140 140
141 infoList.value = list 141 infoList.value = list
142 total.value = res.total 142 total.value = res.total
143 }) 143 })
144 } 144 }
145 145
146 function audit(item, flag) { 146 function audit(item, flag) {
147 console.log(item.sourceData) 147 console.log(item.sourceData)
148 var obj = { 148 var obj = {
149 flag: flag, 149 flag: flag,
150 reason: null, 150 reason: null,
151 id: item.recordId 151 id: item.recordId
152 } 152 }
153 153
154 if (flag == '2') { 154 if (flag == '2') {
155 // 拒绝 155 // 拒绝
156 // 弹出框填写理由 156 // 弹出框填写理由
157 uni.showModal({ 157 uni.showModal({
158 title: '请输入拒绝理由', 158 title: '请输入拒绝理由',
159 editable: true, 159 editable: true,
160 success: function(res) { 160 success: function(res) {
161 if (res.confirm) { 161 if (res.confirm) {
162 if (!res.content) { 162 if (!res.content) {
163 uni.showToast({ 163 uni.showToast({
164 title: '请输入拒绝理由', 164 title: '请输入拒绝理由',
165 icon: 'none' 165 icon: 'none'
166 }) 166 })
167 } else { 167 } else {
168 obj.reason = res.content 168 obj.reason = res.content
169 doApproval(obj) 169 doApproval(obj)
170 } 170 }
171 } 171 }
172 } 172 }
173 }) 173 })
174 } else if (flag == '1') { 174 } else if (flag == '1') {
175 // 二次确认 175 // 二次确认
176 uni.showModal({ 176 uni.showModal({
177 title: '提示', 177 title: '提示',
178 content: `确定审批通过吗`, 178 content: `确定审批通过吗`,
179 success: function(res) { 179 success: function(res) {
180 if (res.confirm) { 180 if (res.confirm) {
181 doApproval(obj) 181 doApproval(obj)
182 } 182 }
183 } 183 }
184 }) 184 })
185 } 185 }
186 } 186 }
187 187
188 function doApproval(obj) { 188 function doApproval(obj) {
189 uni.showLoading({ 189 uni.showLoading({
190 title: '加载中', 190 title: '加载中',
191 mask: true 191 mask: true
192 }) 192 })
193 examApi.doMergeFlows(obj).then((res) => { 193 examApi.doMergeFlows(obj).then((res) => {
194 uni.hideLoading() 194 uni.hideLoading()
195 uni.showToast({ 195 uni.showToast({
196 title: '操作成功', 196 title: '操作成功',
197 icon: 'none' 197 icon: 'none'
198 }) 198 })
199 getList() 199 getList()
200 }) 200 })
201 } 201 }
202 202
203 function goDetail(item) { 203 function goDetail(item) {
204 let path = `/pages/rank/applyDetail?examId=${item.examId}` 204 let path = `/pages/rank/applyDetail?examId=${item.examId}`
205 uni.navigateTo({ 205 uni.navigateTo({
206 url: path 206 url: path
207 }); 207 });
208 } 208 }
209 </script> 209 </script>
210 210
211 <style lang="scss" scoped> 211 <style lang="scss" scoped>
212 212
213 </style> 213 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -128,7 +128,8 @@ ...@@ -128,7 +128,8 @@
128 import { 128 import {
129 onLoad 129 onLoad
130 } from '@dcloudio/uni-app' 130 } from '@dcloudio/uni-app'
131 import config from '@/config.js' 131 import config from '@/config.js'
132 import * as aes2 from '@/common/utils.js'
132 const current = ref(0) 133 const current = ref(0)
133 const popup = ref(null) 134 const popup = ref(null)
134 const infoConfirm = ref(null) 135 const infoConfirm = ref(null)
...@@ -498,7 +499,12 @@ ...@@ -498,7 +499,12 @@
498 if(baseFormData.value.idcType=='4'){ 499 if(baseFormData.value.idcType=='4'){
499 baseFormData.value.idcType='0' 500 baseFormData.value.idcType='0'
500 } 501 }
501 delete baseFormData.value.card 502 delete baseFormData.value.card
503
504 const time = new Date().valueOf() + ''
505 baseFormData.t = time + Math.floor(Math.random() * 10)
506 baseFormData.signT = aes2.AESEncrypt(baseFormData.idcType + time)
507
502 api.addPersonToMyDept(baseFormData.value).then(Response => { 508 api.addPersonToMyDept(baseFormData.value).then(Response => {
503 if (Response.data == 0) { 509 if (Response.data == 0) {
504 let msg = '该成员,实名认证未通过,注册失败!' 510 let msg = '该成员,实名认证未通过,注册失败!'
......
1 <template> 1 <template>
2 <view class="hasfixedbottom"> 2 <view class="hasfixedbottom">
3 3
4 <view class="searchbar"> 4 <view class="searchbar">
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="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()"> 6 v-model="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()">
7 </uni-easyinput> 7 </uni-easyinput>
8 </view> 8 </view>
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for=" (n,index) in studentList" :key="index"> 10 <view class="item" v-for=" (n,index) in studentList" :key="index">
11 <view @click="checkThis(n)"> 11 <view @click="checkThis(n)">
12 <image class="icon" v-if="n.checked" 12 <image class="icon" v-if="n.checked"
13 :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" /> 13 :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" />
14 <image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" /> 14 <image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
15 </view> 15 </view>
16 <view> 16 <view>
17 <view class="name">{{n.name}} <text>{{n.perCode}}</text></view> 17 <view class="name">{{n.name}} <text>{{n.perCode}}</text></view>
18 <view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view> 18 <view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view>
19 </view> 19 </view>
20 </view> 20 </view>
21 <view class="nodata" v-if="studentList.length==0"> 21 <view class="nodata" v-if="studentList.length==0">
22 <image mode="aspectFit" src="/static/nodata.png"></image> 22 <image mode="aspectFit" src="/static/nodata.png"></image>
23 <text>无可变更会员</text> 23 <text>无可变更会员</text>
24 </view> 24 </view>
25 </view> 25 </view>
26 <uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more> 26 <uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more>
27 27
28 <view class="fixedBottom" v-if="studentList.length!=0"> 28 <view class="fixedBottom" v-if="studentList.length!=0">
29 <button class="btn-red" @click="handleImport">批量添加</button> 29 <button class="btn-red" @click="handleImport">批量添加</button>
30 </view> 30 </view>
31 31
32 </view> 32 </view>
33 </template> 33 </template>
34 34
35 <script setup> 35 <script setup>
36 import { 36 import {
37 ref 37 ref
38 } from 'vue' 38 } from 'vue'
39 import { 39 import {
40 onLoad, 40 onLoad,
41 onShow 41 onShow
42 } from '@dcloudio/uni-app' 42 } from '@dcloudio/uni-app'
43 import * as api from '@/common/api.js' 43 import * as api from '@/common/api.js'
44 import _ from 'lodash' 44 import _ from 'underscore'
45 import config from '/config.js' 45 import config from '/config.js'
46 const queryParams = ref({ 46 const queryParams = ref({
47 paymentRangeId:-1, 47 paymentRangeId:-1,
48 multiDeptFlag: 1, 48 multiDeptFlag: 1,
...@@ -50,52 +50,52 @@ const queryParams = ref({ ...@@ -50,52 +50,52 @@ const queryParams = ref({
50 pageNum:1, 50 pageNum:1,
51 pageSize:10 51 pageSize:10
52 }) 52 })
53 const paging = ref(null) 53 const paging = ref(null)
54 const total = ref(0) 54 const total = ref(0)
55 const status = ref('no-more') 55 const status = ref('no-more')
56 const list = ref([]) 56 const list = ref([])
57 const popup = ref(null) 57 const popup = ref(null)
58 const choseStudent = ref(null) 58 const choseStudent = ref(null)
59 const studentList = ref([]) 59 const studentList = ref([])
60 const type = ref('') 60 const type = ref('')
61 const form = ref({}) 61 const form = ref({})
62 const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"}) 62 const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"})
63 const cardType = ref([{ 63 const cardType = ref([{
64 text: '身份证', 64 text: '身份证',
65 value: '0' 65 value: '0'
66 }, 66 },
67 { 67 {
68 text: '来往大陆(内地)通行证', 68 text: '来往大陆(内地)通行证',
69 value: '1' 69 value: '1'
70 }, 70 },
71 { 71 {
72 text: '中国护照', 72 text: '中国护照',
73 value: '2' 73 value: '2'
74 }, 74 },
75 { 75 {
76 text: '护照', 76 text: '护照',
77 value: '3' 77 value: '3'
78 }, 78 },
79 { 79 {
80 text: '其它', 80 text: '其它',
81 value: '4' 81 value: '4'
82 }, 82 },
83 { 83 {
84 text: '香港身份证', 84 text: '香港身份证',
85 value: '5' 85 value: '5'
86 }, 86 },
87 { 87 {
88 text: '往来港澳台通行证', 88 text: '往来港澳台通行证',
89 value: '6' 89 value: '6'
90 } 90 }
91 ]) 91 ])
92 onLoad((option) => { 92 onLoad((option) => {
93 if (option.rangeId) { 93 if (option.rangeId) {
94 queryParams.value.paymentRangeId = option.rangeId 94 queryParams.value.paymentRangeId = option.rangeId
95 } 95 }
96 getList() 96 getList()
97 }) 97 })
98 onShow(() => {}) 98 onShow(() => {})
99 function clickLoadMore(){ 99 function clickLoadMore(){
100 getList() 100 getList()
101 } 101 }
...@@ -111,7 +111,7 @@ function search(){ ...@@ -111,7 +111,7 @@ function search(){
111 } 111 }
112 uni.hideLoading() 112 uni.hideLoading()
113 }) 113 })
114 } 114 }
115 function getList() { 115 function getList() {
116 if(total.value>0&&total.value>studentList.value.length){ 116 if(total.value>0&&total.value>studentList.value.length){
117 uni.showLoading({ 117 uni.showLoading({
...@@ -133,87 +133,87 @@ function getList() { ...@@ -133,87 +133,87 @@ function getList() {
133 133
134 }else if(total.value==0){ 134 }else if(total.value==0){
135 search() 135 search()
136 } 136 }
137 } 137 }
138 138
139 function checkThis(n) { 139 function checkThis(n) {
140 if (n.checked) { 140 if (n.checked) {
141 n.checked = false 141 n.checked = false
142 } else { 142 } else {
143 n.checked = true 143 n.checked = true
144 } 144 }
145 } 145 }
146 146
147 function handleImport() { 147 function handleImport() {
148 var arr = [] 148 var arr = []
149 for (var n of studentList.value) { 149 for (var n of studentList.value) {
150 if (n.checked) { 150 if (n.checked) {
151 arr.push(n.perId) 151 arr.push(n.perId)
152 } 152 }
153 } 153 }
154 api.addInfoModeToRange({ 154 api.addInfoModeToRange({
155 perIds: arr, 155 perIds: arr,
156 rangeIdStr: queryParams.value.paymentRangeId || '-1' 156 rangeIdStr: queryParams.value.paymentRangeId || '-1'
157 }).then(res => { 157 }).then(res => {
158 var pages = getCurrentPages() 158 var pages = getCurrentPages()
159 var prevPage = pages[pages.length - 2] 159 var prevPage = pages[pages.length - 2]
160 prevPage.onShow(res.data) 160 prevPage.onShow(res.data)
161 uni.navigateBack() 161 uni.navigateBack()
162 }) 162 })
163 } 163 }
164 164
165 165
166 </script> 166 </script>
167 <style scoped lang="scss"> 167 <style scoped lang="scss">
168 .flexbox { 168 .flexbox {
169 padding: 30rpx 30rpx 0 169 padding: 30rpx 30rpx 0
170 } 170 }
171 171
172 .danger-button { 172 .danger-button {
173 display: flex; 173 display: flex;
174 flex-direction: column; 174 flex-direction: column;
175 align-items: center; 175 align-items: center;
176 justify-content: center; 176 justify-content: center;
177 } 177 }
178 .userlist{ 178 .userlist{
179 padding: 0 25rpx; 179 padding: 0 25rpx;
180 } 180 }
181 .searchbar { 181 .searchbar {
182 display: flex; 182 display: flex;
183 align-items: center; 183 align-items: center;
184 padding: 25rpx; 184 padding: 25rpx;
185 box-sizing: border-box; 185 box-sizing: border-box;
186 186
187 .invertedbtn-red { 187 .invertedbtn-red {
188 margin-left: 15rpx; 188 margin-left: 15rpx;
189 font-size: 30rpx; 189 font-size: 30rpx;
190 padding: 16rpx 20rpx; 190 padding: 16rpx 20rpx;
191 box-sizing: border-box; 191 box-sizing: border-box;
192 border-radius: 50rpx; 192 border-radius: 50rpx;
193 background-color: #fff; 193 background-color: #fff;
194 } 194 }
195 195
196 :deep(.uni-easyinput .uni-easyinput__content) { 196 :deep(.uni-easyinput .uni-easyinput__content) {
197 border-radius: 35rpx; 197 border-radius: 35rpx;
198 border: none; 198 border: none;
199 height: 70rpx; 199 height: 70rpx;
200 } 200 }
201 201
202 :deep(.uni-easyinput__content-input) { 202 :deep(.uni-easyinput__content-input) {
203 font-size: 26rpx; 203 font-size: 26rpx;
204 } 204 }
205 } 205 }
206 206
207 .popBody { 207 .popBody {
208 background: #fff; 208 background: #fff;
209 padding: 30rpx; 209 padding: 30rpx;
210 } 210 }
211 211
212 .text-center .btn-red-kx { 212 .text-center .btn-red-kx {
213 border-radius: 50px; 213 border-radius: 50px;
214 font-size: 28rpx; 214 font-size: 28rpx;
215 } 215 }
216 :deep(.file-picker__progress) { 216 :deep(.file-picker__progress) {
217 opacity: 0;background-color: transparent; 217 opacity: 0;background-color: transparent;
218 } 218 }
219 </style> 219 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view class="mainbox"> 2 <view class="mainbox">
3 <view class="topBg"> 3 <view class="topBg">
4 <view class="photobox"> 4 <view class="photobox">
5 <image class="photo" v-if="form.photo" :src="form.photo" mode='aspectFit'></image> 5 <image class="photo" v-if="form.photo" :src="form.photo" mode='aspectFit'></image>
6 <view class="colorful" v-else>{{form.name?.slice(0,1)}}</view> 6 <view class="colorful" v-else>{{form.name?.slice(0,1)}}</view>
7 </view> 7 </view>
8 <view class="infoBox"> 8 <view class="infoBox">
9 <view class="name"> 9 <view class="name">
10 {{form.name}} 10 {{form.name}}
11 </view> 11 </view>
12 <view class="flexbox"> 12 <view class="flexbox">
13 <label>证件号:</label> 13 <label>证件号:</label>
14 <text>{{ form.idcCode}}</text> 14 <text>{{ form.idcCode}}</text>
15 </view> 15 </view>
16 <view class="flexbox"> 16 <view class="flexbox">
17 <label>会员编号:</label> 17 <label>会员编号:</label>
18 <text>{{ form.perCode}}</text> 18 <text>{{ form.perCode}}</text>
19 </view> 19 </view>
20 <view class="flexbox"> 20 <view class="flexbox">
21 <label>有效期:</label> 21 <label>有效期:</label>
22 <text>{{ form.idcType==3?'--': form.validityDate?.slice(0,10)||'--' }}</text> 22 <text>{{ form.idcType==3?'--': form.validityDate?.slice(0,10)||'--' }}</text>
23 </view> 23 </view>
24 </view> 24 </view>
25 </view>
26
27 <!-- 会员证 -->
28 <view style="margin: 30rpx 0 0;" v-if="form.certStage!=0&&form.idcType!=3&&form.certStage!=2&&form.certStage!=1">
29 <view class="zhengBox">
30 <image v-if="form.certStage == 4" style="width: 600rpx; height: 380rpx;position: relative" :src="config.baseUrl_api+'/fs/static/icon/memberCardU.png'" :fit="fit" />
31 <image v-else style="width: 600rpx; height: 380rpx;position: relative" :src="config.baseUrl_api+'/fs/static/icon/memberCard.png'" :fit="fit" />
32 <view class="zhengbody" @contextmenu.prevent="youji">
33 <image mode="aspectFill" :src="(form.photo)" class="head"/>
34 <view class="memberNumber">{{ form.perCode }}</view>
35 <view class="birthday">{{ fileData(form.birth) }}</view>
36 <view class="phone">010-87188971</view>
37 <view class="service">https://www.taekwondo.org.cn/</view>
38 <view class="validity">{{ fileData(form.beginTime) +'-'+fileData(form.validityDate) }}</view>
39 <view class="nameC">
40 <view ref="content" class="content">{{ form.name }} </view>
41 </view>
42 </view>
43 </view>
25 </view> 44 </view>
45
26 <uni-list> 46 <uni-list>
27 <uni-list-item title="姓名" :rightText="form.name" /> 47 <uni-list-item title="姓名" :rightText="form.name" />
28 <uni-list-item title="证件类型" :rightText="cardType?.[form?.idcType]?.label" /> 48 <uni-list-item title="证件类型" :rightText="cardType?.[form?.idcType]?.label" />
...@@ -72,14 +92,15 @@ ...@@ -72,14 +92,15 @@
72 label: '其它', 92 label: '其它',
73 value: '4' 93 value: '4'
74 }, { 94 }, {
75 label: '香港身份证', 95 label: '香港身份证',
76 value: '5' 96 value: '5'
77 }, { 97 }, {
78 label: '往来港澳台通行证', 98 label: '往来港澳台通行证',
79 value: '6' 99 value: '6'
80 } 100 }
81 ]) 101 ])
82 const form = ref({}) 102 const form = ref({})
103 const urlHref = ref()
83 onLoad((option) => { 104 onLoad((option) => {
84 console.log(option) 105 console.log(option)
85 api.getInfo(option.perId).then(res => { 106 api.getInfo(option.perId).then(res => {
...@@ -108,34 +129,65 @@ ...@@ -108,34 +129,65 @@
108 } 129 }
109 } 130 }
110 }) 131 })
111 }
112 </script>
113
114 <style scoped lang="scss">
115 .flexbox{width: 60%;margin:10rpx auto;font-size: 28rpx;align-items: center;
116 label{color: #7b7f83;width: 5em;font-size: 24rpx;}
117 } 132 }
118 .topBg{background: #f5f5f5;} 133 function fileData(time) {
119 .infoBox{padding: 1rpx 1rpx 30rpx; 134 if (!time) return
120 .name{font-size: 34rpx;text-align: center;} 135 const data = new Date(time.replace(/-/g, '/'))
136 const year = data.getFullYear()
137 const month = data.getMonth() + 1
138 const dates = data.getDate()
139 return year + '年' + month + '月' + dates + '日'
121 } 140 }
122 .photobox { 141
123 position: relative; 142 </script>
124 padding: 30rpx 0 30rpx; 143
125 144 <style scoped lang="scss">
126 .photo { 145 .flexbox {
127 width: 255rpx; 146 width: 60%;
128 height: 318rpx; 147 margin: 10rpx auto;
129 background-color: #f4f4f4; 148 font-size: 28rpx;
130 display: block; 149 align-items: center;
131 margin: auto; 150
132 } 151 label {
152 color: #7b7f83;
153 width: 5em;
154 font-size: 24rpx;
155 }
133 } 156 }
157
158 .topBg {
159 background: #f5f5f5;
160 }
161
162 .infoBox {
163 padding: 1rpx 1rpx 30rpx;
164
165 .name {
166 font-size: 34rpx;
167 text-align: center;
168 }
169 }
170
171 .photobox {
172 position: relative;
173 padding: 30rpx 0 30rpx;
174
175 .photo {
176 width: 255rpx;
177 height: 318rpx;
178 background-color: #f4f4f4;
179 display: block;
180 margin: auto;
181 }
182 }
183
134 .height1 { 184 .height1 {
135 height: 1rpx 185 height: 1rpx
136 } 186 }
187
137 .mainbox { 188 .mainbox {
138 margin: 30rpx 25rpx 60rpx;box-shadow:0 0 8rpx #ddd; 189 margin: 30rpx 25rpx 60rpx;
190 box-shadow: 0 0 8rpx #ddd;
139 background: #FFFFFF; 191 background: #FFFFFF;
140 border-radius: 15rpx; 192 border-radius: 15rpx;
141 193
...@@ -163,5 +215,63 @@ ...@@ -163,5 +215,63 @@
163 color: #fff; 215 color: #fff;
164 text-align: center; 216 text-align: center;
165 border-radius: 50%; 217 border-radius: 50%;
218 }
219 .zhengBox{
220 position: relative;width: 600rpx; height: 380rpx;margin:0 auto 30rpx;
221 .zhengbody{
222 .head{width: 114rpx;height: 114rpx;border-radius: 50%;position: absolute;left: 65rpx;top: 132rpx;}
223 .birthday{
224 position: absolute; top: 158rpx;left: 434rpx;
225 font-size: 16rpx;
226 color: #9f6a44;
227 }
228 .memberNumber{
229 position: absolute;top: 182rpx;left: 290rpx;
230 font-size: 19rpx;
231 color: #9f6a44;
232 font-weight: 600;
233 letter-spacing: 1px;
234 }
235 .phone{
236 position: absolute; top: 292rpx;left: 340rpx;
237 font-size: 16rpx;
238 color: #bc9060;
239 }
240 .service{
241 position: absolute;
242 top: 313rpx;
243 left: 340rpx;
244 font-size: 16rpx;
245 color: #bc9060;
246
247 }
248 .validity{
249 position: absolute;
250 top: 336rpx;
251 left: 340rpx;
252 font-size: 16rpx;
253 color: #bc9060;
254
255 }
256 .nameC{
257 position: absolute;
258 top: 146rpx;
259 left: 240rpx;
260 color: #9f6a44;
261 font-weight: 600;
262 line-height: 1;
263 }
264 .content{
265 width: 120rpx;
266 box-sizing: border-box;
267 display: flex;
268 align-items: center;
269 //white-space: nowrap;
270 overflow: hidden;
271 overflow-x: auto;
272 transform-origin: 0 55%;
273 white-space: nowrap;
274 }
275 }
166 } 276 }
167 </style> 277 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view class="hasfixedbottom"> 2 <view class="hasfixedbottom">
3 3
4 <view class="searchbar"> 4 <view class="searchbar">
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="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()"> 6 v-model="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()">
7 </uni-easyinput> 7 </uni-easyinput>
8 </view> 8 </view>
9 <view class="userlist"> 9 <view class="userlist">
10 <view class="item" v-for=" (n,index) in studentList" :key="index"> 10 <view class="item" v-for=" (n,index) in studentList" :key="index">
11 <view @click="checkThis(n)"> 11 <view @click="checkThis(n)">
12 <image class="icon" v-if="n.checked" 12 <image class="icon" v-if="n.checked"
13 :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" /> 13 :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" />
14 <image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" /> 14 <image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
15 </view> 15 </view>
16 <view> 16 <view>
17 <view class="name">{{n.name}} <text>{{n.perCode}}</text></view> 17 <view class="name">{{n.name}} <text>{{n.perCode}}</text></view>
18 <view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view> 18 <view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view>
19 </view> 19 </view>
20 </view> 20 </view>
21 <view class="nodata" v-if="studentList.length==0"> 21 <view class="nodata" v-if="studentList.length==0">
22 <image mode="aspectFit" src="/static/nodata.png"></image> 22 <image mode="aspectFit" src="/static/nodata.png"></image>
23 <text>无可变更会员</text> 23 <text>无可变更会员</text>
24 </view> 24 </view>
25 </view> 25 </view>
26 <uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more> 26 <uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more>
27 27
28 <view class="fixedBottom" v-if="studentList.length!=0"> 28 <view class="fixedBottom" v-if="studentList.length!=0">
29 <button class="btn-red" @click="handleImport">批量添加</button> 29 <button class="btn-red" @click="handleImport">批量添加</button>
30 </view> 30 </view>
31 31
32 </view> 32 </view>
33 </template> 33 </template>
34 34
35 <script setup> 35 <script setup>
36 import { 36 import {
37 ref 37 ref
38 } from 'vue' 38 } from 'vue'
39 import { 39 import {
40 onLoad, 40 onLoad,
41 onShow 41 onShow
42 } from '@dcloudio/uni-app' 42 } from '@dcloudio/uni-app'
43 import * as api from '@/common/api.js' 43 import * as api from '@/common/api.js'
44 import _ from 'lodash' 44 import _ from 'underscore'
45 import config from '/config.js' 45 import config from '/config.js'
46 const queryParams = ref({ 46 const queryParams = ref({
47 paymentRangeId:-1, 47 paymentRangeId:-1,
48 multiDeptFlag: 1, 48 multiDeptFlag: 1,
...@@ -50,53 +50,53 @@ const queryParams = ref({ ...@@ -50,53 +50,53 @@ const queryParams = ref({
50 pageNum:1, 50 pageNum:1,
51 pageSize:10 51 pageSize:10
52 }) 52 })
53 const paging = ref(null) 53 const paging = ref(null)
54 const total = ref(0) 54 const total = ref(0)
55 const status = ref('no-more') 55 const status = ref('no-more')
56 const list = ref([]) 56 const list = ref([])
57 const popup = ref(null) 57 const popup = ref(null)
58 const choseStudent = ref(null) 58 const choseStudent = ref(null)
59 const studentList = ref([]) 59 const studentList = ref([])
60 const type = ref('') 60 const type = ref('')
61 const form = ref({}) 61 const form = ref({})
62 const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"}) 62 const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"})
63 const cardType = ref([{ 63 const cardType = ref([{
64 text: '身份证', 64 text: '身份证',
65 value: '0' 65 value: '0'
66 }, 66 },
67 { 67 {
68 text: '来往大陆(内地)通行证', 68 text: '来往大陆(内地)通行证',
69 value: '1' 69 value: '1'
70 }, 70 },
71 { 71 {
72 text: '中国护照', 72 text: '中国护照',
73 value: '2' 73 value: '2'
74 }, 74 },
75 { 75 {
76 text: '护照', 76 text: '护照',
77 value: '3' 77 value: '3'
78 }, 78 },
79 { 79 {
80 text: '其它', 80 text: '其它',
81 value: '4' 81 value: '4'
82 }, 82 },
83 { 83 {
84 text: '香港身份证', 84 text: '香港身份证',
85 value: '5' 85 value: '5'
86 }, 86 },
87 { 87 {
88 text: '往来港澳台通行证', 88 text: '往来港澳台通行证',
89 value: '6' 89 value: '6'
90 } 90 }
91 ]) 91 ])
92 onLoad((option) => { 92 onLoad((option) => {
93 if (option.rangeId) { 93 if (option.rangeId) {
94 queryParams.value.paymentRangeId = option.rangeId 94 queryParams.value.paymentRangeId = option.rangeId
95 } 95 }
96 console.log(option.rangeId) 96 console.log(option.rangeId)
97 getList() 97 getList()
98 }) 98 })
99 onShow(() => {}) 99 onShow(() => {})
100 function clickLoadMore(){ 100 function clickLoadMore(){
101 getList() 101 getList()
102 } 102 }
...@@ -112,7 +112,7 @@ function search(){ ...@@ -112,7 +112,7 @@ function search(){
112 } 112 }
113 uni.hideLoading() 113 uni.hideLoading()
114 }) 114 })
115 } 115 }
116 function getList() { 116 function getList() {
117 if(total.value>0&&total.value>studentList.value.length){ 117 if(total.value>0&&total.value>studentList.value.length){
118 uni.showLoading({ 118 uni.showLoading({
...@@ -134,87 +134,87 @@ function getList() { ...@@ -134,87 +134,87 @@ function getList() {
134 134
135 }else if(total.value==0){ 135 }else if(total.value==0){
136 search() 136 search()
137 } 137 }
138 } 138 }
139 139
140 function checkThis(n) { 140 function checkThis(n) {
141 if (n.checked) { 141 if (n.checked) {
142 n.checked = false 142 n.checked = false
143 } else { 143 } else {
144 n.checked = true 144 n.checked = true
145 } 145 }
146 } 146 }
147 147
148 function handleImport() { 148 function handleImport() {
149 var arr = [] 149 var arr = []
150 for (var n of studentList.value) { 150 for (var n of studentList.value) {
151 if (n.checked) { 151 if (n.checked) {
152 arr.push(n.perId) 152 arr.push(n.perId)
153 } 153 }
154 } 154 }
155 api.addMergeToRange({ 155 api.addMergeToRange({
156 perIds: arr, 156 perIds: arr,
157 rangeIdStr: queryParams.value.paymentRangeId || '-1' 157 rangeIdStr: queryParams.value.paymentRangeId || '-1'
158 }).then(res => { 158 }).then(res => {
159 var pages = getCurrentPages() 159 var pages = getCurrentPages()
160 var prevPage = pages[pages.length - 2] 160 var prevPage = pages[pages.length - 2]
161 prevPage.onShow(res.data) 161 prevPage.onShow(res.data)
162 uni.navigateBack() 162 uni.navigateBack()
163 }) 163 })
164 } 164 }
165 165
166 166
167 </script> 167 </script>
168 <style scoped lang="scss"> 168 <style scoped lang="scss">
169 .flexbox { 169 .flexbox {
170 padding: 30rpx 30rpx 0 170 padding: 30rpx 30rpx 0
171 } 171 }
172 172
173 .danger-button { 173 .danger-button {
174 display: flex; 174 display: flex;
175 flex-direction: column; 175 flex-direction: column;
176 align-items: center; 176 align-items: center;
177 justify-content: center; 177 justify-content: center;
178 } 178 }
179 .userlist{ 179 .userlist{
180 padding: 0 25rpx; 180 padding: 0 25rpx;
181 } 181 }
182 .searchbar { 182 .searchbar {
183 display: flex; 183 display: flex;
184 align-items: center; 184 align-items: center;
185 padding: 25rpx; 185 padding: 25rpx;
186 box-sizing: border-box; 186 box-sizing: border-box;
187 187
188 .invertedbtn-red { 188 .invertedbtn-red {
189 margin-left: 15rpx; 189 margin-left: 15rpx;
190 font-size: 30rpx; 190 font-size: 30rpx;
191 padding: 16rpx 20rpx; 191 padding: 16rpx 20rpx;
192 box-sizing: border-box; 192 box-sizing: border-box;
193 border-radius: 50rpx; 193 border-radius: 50rpx;
194 background-color: #fff; 194 background-color: #fff;
195 } 195 }
196 196
197 :deep(.uni-easyinput .uni-easyinput__content) { 197 :deep(.uni-easyinput .uni-easyinput__content) {
198 border-radius: 35rpx; 198 border-radius: 35rpx;
199 border: none; 199 border: none;
200 height: 70rpx; 200 height: 70rpx;
201 } 201 }
202 202
203 :deep(.uni-easyinput__content-input) { 203 :deep(.uni-easyinput__content-input) {
204 font-size: 26rpx; 204 font-size: 26rpx;
205 } 205 }
206 } 206 }
207 207
208 .popBody { 208 .popBody {
209 background: #fff; 209 background: #fff;
210 padding: 30rpx; 210 padding: 30rpx;
211 } 211 }
212 212
213 .text-center .btn-red-kx { 213 .text-center .btn-red-kx {
214 border-radius: 50px; 214 border-radius: 50px;
215 font-size: 28rpx; 215 font-size: 28rpx;
216 } 216 }
217 :deep(.file-picker__progress) { 217 :deep(.file-picker__progress) {
218 opacity: 0;background-color: transparent; 218 opacity: 0;background-color: transparent;
219 } 219 }
220 </style> 220 </style>
...\ No newline at end of file ...\ No newline at end of file
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="text-center whitebg"> 3 <view class="text-center whitebg">
4 <view class="cardNav"> 4 <view class="cardNav">
...@@ -6,9 +6,9 @@ ...@@ -6,9 +6,9 @@
6 <view @click="goMerge">合并</view> 6 <view @click="goMerge">合并</view>
7 <view class="active">提交</view> 7 <view class="active">提交</view>
8 </view> 8 </view>
9 </view> 9 </view>
10 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" 10 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
11 styleType="text" activeColor="#AD181F"></uni-segmented-control> 11 styleType="text" activeColor="#AD181F"></uni-segmented-control>
12 <view class="vipData" v-show="total>0" style="flex-wrap: wrap;"> 12 <view class="vipData" v-show="total>0" style="flex-wrap: wrap;">
13 <view class="w50">费用合计:<text>{{ statistical.totalCost?.toFixed(2)}}</text></view> 13 <view class="w50">费用合计:<text>{{ statistical.totalCost?.toFixed(2)}}</text></view>
14 <view class="w50">人数合计:<text>{{ statistical.personCount }}</text></view> 14 <view class="w50">人数合计:<text>{{ statistical.personCount }}</text></view>
...@@ -16,125 +16,125 @@ ...@@ -16,125 +16,125 @@
16 <view class="w50">续费合计:<text>{{ statistical.oldPersonCount }}</text></view> 16 <view class="w50">续费合计:<text>{{ statistical.oldPersonCount }}</text></view>
17 <view class="w50">年限合计:<text>{{ statistical.totalYear }}</text></view> 17 <view class="w50">年限合计:<text>{{ statistical.totalYear }}</text></view>
18 </view> 18 </view>
19 <view class="appList"> 19 <view class="appList">
20 <view class="appItem" v-for="(item,index) in infoList" :key="index"> 20 <view class="appItem" v-for="(item,index) in infoList" :key="index">
21 <view class="status" @click="goDetail(item)"> 21 <view class="status" @click="goDetail(item)">
22 <view :class="{ 22 <view :class="{
23 'text-primary':item.status=='0', 23 'text-primary':item.status=='0',
24 'text-success':item.status=='1', 24 'text-success':item.status=='1',
25 'text-danger':item.status=='2', 25 'text-danger':item.status=='2',
26 'text-warning':item.status=='3' 26 'text-warning':item.status=='3'
27 }"> 27 }">
28 {{ item.auditStatus=='100'?'待提交':statusArr[item.status] }} 28 {{ item.auditStatus=='100'?'待提交':statusArr[item.status] }}
29 </view> 29 </view>
30 </view> 30 </view>
31 <view class="date" v-if="item.content?.commitTime">{{item.content.commitTime}}</view> 31 <view class="date" v-if="item.content?.commitTime">{{item.content.commitTime}}</view>
32 <view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}}</view> 32 <view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}}</view>
33 <view class="name" style="width: 100%;" @click="goDetail(item)">{{item.content?.name}}</view> 33 <view class="name" style="width: 100%;" @click="goDetail(item)">{{item.content?.name}}</view>
34 <view class="flexbox" @click="goDetail(item)"> 34 <view class="flexbox" @click="goDetail(item)">
35 <view> 35 <view>
36 人数合计 36 人数合计
37 <view>{{item.content.personCount}}</view> 37 <view>{{item.content.personCount}}</view>
38 </view> 38 </view>
39 <view> 39 <view>
40 续费 40 续费
41 <view>{{item.content.oldPersonCount}}</view> 41 <view>{{item.content.oldPersonCount}}</view>
42 </view> 42 </view>
43 <view> 43 <view>
44 年限 44 年限
45 <view>{{item.content.totalYear}}</view> 45 <view>{{item.content.totalYear}}</view>
46 </view> 46 </view>
47 <view> 47 <view>
48 费用合计 48 费用合计
49 <view>{{item.content.allFee}}</view> 49 <view>{{item.content.allFee}}</view>
50 </view> 50 </view>
51 </view> 51 </view>
52 52
53 <view class="func" v-if="item.auditStatus == 100"> 53 <view class="func" v-if="item.auditStatus == 100">
54 <button @click="resolution(item)">取消合并</button> 54 <button @click="resolution(item)">取消合并</button>
55 <button @click="handleAudit(item)">提交</button> 55 <button @click="handleAudit(item)">提交</button>
56 <!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> --> 56 <!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> -->
57 </view> 57 </view>
58 <view class="func" v-if="item.auditStatus == 1&& item.isView == 1"> 58 <view class="func" v-if="item.auditStatus == 1&& item.isView == 1">
59 <button @click="handleDelete(item)">撤回</button> 59 <button @click="handleDelete(item)">撤回</button>
60 </view> 60 </view>
61 </view> 61 </view>
62 </view> 62 </view>
63 63
64 <view class="nodata" v-if="infoList.length==0"> 64 <view class="nodata" v-if="infoList.length==0">
65 <image mode="aspectFit" src="/static/nodata.png"></image> 65 <image mode="aspectFit" src="/static/nodata.png"></image>
66 <text>暂无数据</text> 66 <text>暂无数据</text>
67 </view> 67 </view>
68 </view> 68 </view>
69 </template> 69 </template>
70 70
71 <script setup> 71 <script setup>
72 import * as api from '@/common/api.js' 72 import * as api from '@/common/api.js'
73 import config from '@/config.js' 73 import config from '@/config.js'
74 import _ from 'lodash' 74 import _ from 'underscore'
75 import { ref } from 'vue' 75 import { ref } from 'vue'
76 import { onLoad } from '@dcloudio/uni-app' 76 import { onLoad } from '@dcloudio/uni-app'
77 const app = getApp(); 77 const app = getApp();
78 const queryParams = ref({ 78 const queryParams = ref({
79 // pageNum: 1, 79 // pageNum: 1,
80 // pageSize: 10, 80 // pageSize: 10,
81 mergeFlag: 101, 81 mergeFlag: 101,
82 statusFlag: 101 82 statusFlag: 101
83 }) 83 })
84 const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝']) 84 const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝'])
85 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回'] 85 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
86 const current = ref() 86 const current = ref()
87 const list = ref([]) 87 const list = ref([])
88 const infoList = ref([]) 88 const infoList = ref([])
89 const statistical = ref({}) 89 const statistical = ref({})
90 const total = ref(0) 90 const total = ref(0)
91 const deptType = ref('') 91 const deptType = ref('')
92 const userType = ref('') 92 const userType = ref('')
93 onLoad(() => { 93 onLoad(() => {
94 if (app.globalData.isLogin) { 94 if (app.globalData.isLogin) {
95 init() 95 init()
96 } else { 96 } else {
97 app.firstLoadCallback = () => { 97 app.firstLoadCallback = () => {
98 init() 98 init()
99 }; 99 };
100 } 100 }
101 }) 101 })
102 102
103 function init() { 103 function init() {
104 deptType.value = app.globalData.deptType 104 deptType.value = app.globalData.deptType
105 userType.value = app.globalData.userType 105 userType.value = app.globalData.userType
106 getList() 106 getList()
107 } 107 }
108 108
109 function onClickItem(e) { 109 function onClickItem(e) {
110 console.log(e) 110 console.log(e)
111 switch (e.currentIndex) { 111 switch (e.currentIndex) {
112 case 0: 112 case 0:
113 queryParams.value.mergeFlag = 101 113 queryParams.value.mergeFlag = 101
114 queryParams.value.statusFlag = 101 114 queryParams.value.statusFlag = 101
115 break; 115 break;
116 case 1: 116 case 1:
117 queryParams.value.mergeFlag = 1 117 queryParams.value.mergeFlag = 1
118 queryParams.value.status = 0 118 queryParams.value.status = 0
119 queryParams.value.statusFlag = 102 119 queryParams.value.statusFlag = 102
120 break; 120 break;
121 case 2: 121 case 2:
122 queryParams.value.mergeFlag = 1 122 queryParams.value.mergeFlag = 1
123 queryParams.value.status = 1 123 queryParams.value.status = 1
124 queryParams.value.statusFlag = 103 124 queryParams.value.statusFlag = 103
125 break; 125 break;
126 case 3: 126 case 3:
127 queryParams.value.mergeFlag = 1 127 queryParams.value.mergeFlag = 1
128 queryParams.value.status = 2 128 queryParams.value.status = 2
129 queryParams.value.statusFlag = 104 129 queryParams.value.statusFlag = 104
130 break; 130 break;
131 } 131 }
132 getList() 132 getList()
133 } 133 }
134 134
135 function getList() { 135 function getList() {
136 uni.showLoading({ 136 uni.showLoading({
137 title: '加载中' 137 title: '加载中'
138 }) 138 })
139 statistical.value = { 139 statistical.value = {
140 totalCost: 0, 140 totalCost: 0,
...@@ -142,46 +142,46 @@ ...@@ -142,46 +142,46 @@
142 newPersonCount: 0, 142 newPersonCount: 0,
143 oldPersonCount: 0, 143 oldPersonCount: 0,
144 totalYear: 0 144 totalYear: 0
145 } 145 }
146 api.getpaymentVerityMergeList(queryParams.value).then(response => { 146 api.getpaymentVerityMergeList(queryParams.value).then(response => {
147 infoList.value = response.rows 147 infoList.value = response.rows
148 _.each(infoList.value, item => { 148 _.each(infoList.value, item => {
149 item.content = JSON.parse(item.content) 149 item.content = JSON.parse(item.content)
150 150
151 statistical.value.totalCost += (item.content.allFee * 1) 151 statistical.value.totalCost += (item.content.allFee * 1)
152 statistical.value.personCount += (item.content.personCount * 1) 152 statistical.value.personCount += (item.content.personCount * 1)
153 statistical.value.newPersonCount += (item.content.newPersonCount * 1) 153 statistical.value.newPersonCount += (item.content.newPersonCount * 1)
154 statistical.value.oldPersonCount += (item.content.oldPersonCount * 1) 154 statistical.value.oldPersonCount += (item.content.oldPersonCount * 1)
155 statistical.value.totalYear += (item.content.totalYear * 1) 155 statistical.value.totalYear += (item.content.totalYear * 1)
156 }) 156 })
157 total.value = response.total 157 total.value = response.total
158 uni.hideLoading() 158 uni.hideLoading()
159 }) 159 })
160 } 160 }
161 161
162 function handleAudit(item) { 162 function handleAudit(item) {
163 uni.showModal({ 163 uni.showModal({
164 title: '提示', 164 title: '提示',
165 content: `确定提交${item.content.name}?`, 165 content: `确定提交${item.content.name}?`,
166 success: function(res) { 166 success: function(res) {
167 if (res.confirm) { 167 if (res.confirm) {
168 uni.showLoading({ 168 uni.showLoading({
169 title: '加载中' 169 title: '加载中'
170 }) 170 })
171 api.doMergeFlowsPer({ 171 api.doMergeFlowsPer({
172 recordIds: [item.recordId], 172 recordIds: [item.recordId],
173 flag: '1', 173 flag: '1',
174 reason: null 174 reason: null
175 }).then(res => { 175 }).then(res => {
176 uni.hideToast() 176 uni.hideToast()
177 uni.showToast({ 177 uni.showToast({
178 title: `操作成功!` 178 title: `操作成功!`
179 }) 179 })
180 getList() 180 getList()
181 }) 181 })
182 } 182 }
183 } 183 }
184 }) 184 })
185 } 185 }
186 function handleDelete(row) { 186 function handleDelete(row) {
187 uni.showModal({ 187 uni.showModal({
...@@ -198,7 +198,7 @@ ...@@ -198,7 +198,7 @@
198 } 198 }
199 } 199 }
200 }) 200 })
201 } 201 }
202 function resolution(row) { 202 function resolution(row) {
203 uni.showModal({ 203 uni.showModal({
204 title: '提示', 204 title: '提示',
...@@ -214,15 +214,15 @@ ...@@ -214,15 +214,15 @@
214 } 214 }
215 } 215 }
216 }) 216 })
217 } 217 }
218 function goDetail(item) { 218 function goDetail(item) {
219 const form = encodeURIComponent(JSON.stringify(item)) 219 const form = encodeURIComponent(JSON.stringify(item))
220 // 查看 220 // 查看
221 let path = `/personalVip/auditDetail?form=${form}` 221 let path = `/personalVip/auditDetail?form=${form}`
222 uni.navigateTo({ 222 uni.navigateTo({
223 url: path 223 url: path
224 }); 224 });
225 225
226 } 226 }
227 function goAudit(){ 227 function goAudit(){
228 let path = `/personalVip/audit` 228 let path = `/personalVip/audit`
...@@ -235,16 +235,16 @@ ...@@ -235,16 +235,16 @@
235 uni.redirectTo({ 235 uni.redirectTo({
236 url: path 236 url: path
237 }); 237 });
238 } 238 }
239 </script> 239 </script>
240 240
241 <style scoped> 241 <style scoped>
242 .mt0 { 242 .mt0 {
243 margin-top: 0 !important; 243 margin-top: 0 !important;
244 } 244 }
245 245
246 .appList .appItem .name { 246 .appList .appItem .name {
247 width: 80%; 247 width: 80%;
248 word-break: break-all; 248 word-break: break-all;
249 } 249 }
250 </style> 250 </style>
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -59,7 +59,7 @@ ...@@ -59,7 +59,7 @@
59 <script setup> 59 <script setup>
60 import * as api from '@/common/api.js' 60 import * as api from '@/common/api.js'
61 import config from '@/config.js' 61 import config from '@/config.js'
62 import _ from 'lodash' 62 import _ from 'underscore'
63 import { 63 import {
64 onMounted, 64 onMounted,
65 ref 65 ref
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!