94f120e1 by lttnew

中跆协级位审核

1 parent e4a0b6ec
1 { 1 {
2 "permissions": { 2 "permissions": {
3 "allow": [ 3 "allow": [
4 "Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)" 4 "Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)",
5 "WebFetch(domain:minimax-algeng-chat-tts.oss-cn-wulanchabu.aliyuncs.com)"
5 ] 6 ]
6 } 7 }
7 } 8 }
......
...@@ -902,6 +902,24 @@ export function getVerityMergeList(params) { ...@@ -902,6 +902,24 @@ export function getVerityMergeList(params) {
902 }) 902 })
903 } 903 }
904 904
905 // 中跆协审核列表
906 export function auditList(params) {
907 return request({
908 url: '/exam/info/list',
909 method: 'get',
910 params
911 })
912 }
913
914 // 中跆协审核提交
915 export function auditJi(data) {
916 return request({
917 url: `/exam/info/auditJi/${data.ids}?flag=${data.flag}&reason=${data.reason}&ids=${data.ids}`,
918 method: 'post',
919 params: data
920 })
921 }
922
905 export function doMergeFlows(params) { 923 export function doMergeFlows(params) {
906 return request({ 924 return request({
907 url: `/exam/info/submit/mergeFlows`, 925 url: `/exam/info/submit/mergeFlows`,
......
...@@ -3,6 +3,14 @@ page { ...@@ -3,6 +3,14 @@ page {
3 overflow: auto; 3 overflow: auto;
4 background: #ecf0f6; 4 background: #ecf0f6;
5 } 5 }
6 /* uni-data-checkbox 选中色全局覆盖为红色 */
7 uni-data-checkbox .checklist-box.is-checked {
8 border-color: #C4121B !important;
9 background-color: #C4121B !important;
10 }
11 uni-data-checkbox .checklist-box.is-checked .checklist-text {
12 color: #fff !important;
13 }
6 .wBox{box-sizing: border-box;} 14 .wBox{box-sizing: border-box;}
7 .h3 {font-weight: bold;line-height: 2;} 15 .h3 {font-weight: bold;line-height: 2;}
8 .text-center{text-align: center;} 16 .text-center{text-align: center;}
...@@ -480,5 +488,10 @@ background-size: cover;position: relative;} ...@@ -480,5 +488,10 @@ background-size: cover;position: relative;}
480 488
481 489
482 490
483 491 .check-icon {
492 font-size: 20rpx;
493 color: #fff;
494 font-weight: bold;
495 // margin-right: 6rpx;
496 }
484 497
......
1 // dev 1 // dev
2 // const baseUrl_api = 'http://192.168.1.137:8787' 2 const baseUrl_api = 'http://192.168.1.137:8787'
3 const baseUrl_api = 'http://tk001.wxjylt.com/stage-api' 3 // const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
4 const loginImage_api = 'http://tk001.wxjylt.com/stage-api' 4 const loginImage_api = 'http://tk001.wxjylt.com/stage-api'
5 const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do' 5 const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
6 6
......
...@@ -253,6 +253,10 @@ ...@@ -253,6 +253,10 @@
253 253
254 onShow(() => { 254 onShow(() => {
255 uni.$on('chosen', updateData) 255 uni.$on('chosen', updateData)
256 const curExamId = examId || form.value.examId
257 if (curExamId) {
258 getChosedStudentList()
259 }
256 }) 260 })
257 261
258 function updateData(e) { 262 function updateData(e) {
...@@ -406,6 +410,7 @@ ...@@ -406,6 +410,7 @@
406 } 410 }
407 411
408 function getChosedStudentList() { 412 function getChosedStudentList() {
413 if (!form.value.examId) return
409 var obj = { 414 var obj = {
410 examId: form.value.examId 415 examId: form.value.examId
411 } 416 }
...@@ -603,7 +608,7 @@ ...@@ -603,7 +608,7 @@
603 background: #fff; 608 background: #fff;
604 border: 2rpx solid #666; 609 border: 2rpx solid #666;
605 color: #666; 610 color: #666;
606 font-size: 24rpx; 611 font-size: 26rpx;
607 display: flex; 612 display: flex;
608 align-items: center; 613 align-items: center;
609 justify-content: center; 614 justify-content: center;
...@@ -612,7 +617,7 @@ ...@@ -612,7 +617,7 @@
612 } 617 }
613 618
614 .step-text { 619 .step-text {
615 font-size: 24rpx; 620 font-size: 26rpx;
616 color: #666; 621 color: #666;
617 transition: all 0.3s; 622 transition: all 0.3s;
618 } 623 }
...@@ -691,7 +696,7 @@ ...@@ -691,7 +696,7 @@
691 696
692 .info-label { 697 .info-label {
693 display: block; 698 display: block;
694 font-size: 24rpx; 699 font-size: 26rpx;
695 color: #666; 700 color: #666;
696 margin-bottom: 8rpx; 701 margin-bottom: 8rpx;
697 702
...@@ -739,7 +744,7 @@ ...@@ -739,7 +744,7 @@
739 background: #FFF5F5; 744 background: #FFF5F5;
740 border: 1rpx solid #FFDDDD; 745 border: 1rpx solid #FFDDDD;
741 border-radius: 6rpx; 746 border-radius: 6rpx;
742 font-size: 24rpx; 747 font-size: 26rpx;
743 color: #AD181F; 748 color: #AD181F;
744 } 749 }
745 } 750 }
...@@ -810,7 +815,7 @@ ...@@ -810,7 +815,7 @@
810 margin-bottom: 8rpx; 815 margin-bottom: 8rpx;
811 816
812 .per-code { 817 .per-code {
813 font-size: 24rpx; 818 font-size: 26rpx;
814 color: #666; 819 color: #666;
815 font-weight: normal; 820 font-weight: normal;
816 margin-left: 12rpx; 821 margin-left: 12rpx;
...@@ -818,7 +823,7 @@ ...@@ -818,7 +823,7 @@
818 } 823 }
819 824
820 .student-idcard { 825 .student-idcard {
821 font-size: 24rpx; 826 font-size: 26rpx;
822 color: #666; 827 color: #666;
823 } 828 }
824 } 829 }
...@@ -841,7 +846,7 @@ ...@@ -841,7 +846,7 @@
841 align-items: flex-end; 846 align-items: flex-end;
842 847
843 .level-label { 848 .level-label {
844 font-size: 24rpx; 849 font-size: 26rpx;
845 color: #666; 850 color: #666;
846 margin-bottom: 6rpx; 851 margin-bottom: 6rpx;
847 } 852 }
......
...@@ -40,14 +40,9 @@ ...@@ -40,14 +40,9 @@
40 </view> 40 </view>
41 41
42 <view v-if="item.status=='0'||item.status=='3'||item.status=='4'||item.status=='9'" class="func"> 42 <view v-if="item.status=='0'||item.status=='3'||item.status=='4'||item.status=='9'" class="func">
43 <button :disabled="item.status=='1'||item.status=='2'||item.status=='3'" 43 <button v-if="item.status !== '1' && item.status !== '2' && item.status !== '3'" @click="handleDelete(item)">删除</button>
44 @click="handleDelete(item)">删除 44 <button v-if="item.status === '0'" @click="editThis(item)">编辑</button>
45 </button> 45 <button v-if="(item.status === '0' || item.status === '9') && item.totalNum > 0 && item.pass > 0" @click="handleSubmit(item)">提交审核</button>
46 <button :disabled="!(item.status=='0')" @click="editThis(item)">编辑</button>
47 <button :disabled="item.status!='0'&&item.status!='9'||item.totalNum==0||item.pass==0"
48 @click="handleSubmit(item)">
49 提交审核
50 </button>
51 </view> 46 </view>
52 </view> 47 </view>
53 </view> 48 </view>
...@@ -218,8 +213,19 @@ function goDetail(item) { ...@@ -218,8 +213,19 @@ function goDetail(item) {
218 font-size: 30rpx; 213 font-size: 30rpx;
219 padding: 10rpx 20rpx; 214 padding: 10rpx 20rpx;
220 } 215 }
221 }
222 216
217 // .func button[disabled] {
218 // background-color: #f5f5f5;
219 // color: #ccc;
220 // border-color: #eee;
221 // }
222 }
223 :deep(.func button[disabled]) {
224 background-color: #f5f5f5 !important;
225 color: #ccc !important;
226 border-color: #eee !important;
227 opacity: 0.6;
228 }
223 .mt0 { 229 .mt0 {
224 margin-top: 0 !important; 230 margin-top: 0 !important;
225 } 231 }
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
16 </view> 16 </view>
17 17
18 <!-- 已选考生 --> 18 <!-- 已选考生 -->
19 <view class="selected-section" v-if="selectedList.length > 0"> 19 <!-- <view class="selected-section" v-if="selectedList.length > 0">
20 <view class="section-header"> 20 <view class="section-header">
21 <text class="section-title">已选考生</text> 21 <text class="section-title">已选考生</text>
22 <text class="section-count">{{selectedList.length}}</text> 22 <text class="section-count">{{selectedList.length}}</text>
...@@ -33,15 +33,15 @@ ...@@ -33,15 +33,15 @@
33 </view> 33 </view>
34 </view> 34 </view>
35 </scroll-view> 35 </scroll-view>
36 </view> 36 </view> -->
37 37
38 <!-- 考生列表 --> 38 <!-- 考生列表 -->
39 <scroll-view class="student-scroll" scroll-y @scrolltolower="loadMore"> 39 <scroll-view class="student-scroll" scroll-y @scrolltolower="loadMore">
40 <view class="student-list"> 40 <view class="student-list">
41 <view class="student-card" v-for="(item, index) in studentList" :key="index" @click="toggleSelect(item)"> 41 <view class="student-card" v-for="(item, index) in studentList" :key="index">
42 <view class="checkbox"> 42 <view class="checkbox" @click="toggleSelect(item)">
43 <image v-if="item.checked" src="/static/member/dx_dwn.png" mode="aspectFit"></image> 43 <image v-if="item.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" mode="aspectFit"></image>
44 <view v-else class="checkbox-empty"></view> 44 <image v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" mode="aspectFit"></image>
45 </view> 45 </view>
46 <view class="avatar"> 46 <view class="avatar">
47 <image v-if="item.photo" :src="item.photo" mode="aspectFill"></image> 47 <image v-if="item.photo" :src="item.photo" mode="aspectFill"></image>
...@@ -335,7 +335,7 @@ ...@@ -335,7 +335,7 @@
335 335
336 .remove-btn { 336 .remove-btn {
337 position: absolute; 337 position: absolute;
338 top: -6rpx; 338 top: -8rpx;
339 right: -6rpx; 339 right: -6rpx;
340 width: 28rpx; 340 width: 28rpx;
341 height: 28rpx; 341 height: 28rpx;
...@@ -370,13 +370,6 @@ ...@@ -370,13 +370,6 @@
370 .checkbox { 370 .checkbox {
371 margin-right: 20rpx; 371 margin-right: 20rpx;
372 372
373 .checkbox-empty {
374 width: 40rpx;
375 height: 40rpx;
376 border: 2rpx solid #ddd;
377 border-radius: 50%;
378 }
379
380 image { 373 image {
381 width: 40rpx; 374 width: 40rpx;
382 height: 40rpx; 375 height: 40rpx;
......
...@@ -2,55 +2,49 @@ ...@@ -2,55 +2,49 @@
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 <view v-show="totalCost>0" class="vipData"> 5 <view v-show="infoList.length>0" class="stat-row">
6 <view>费用合计: 6 <view class="stat-item">费用合计:<text class="red">{{ totalCost.toFixed(2) }}</text></view>
7 <text>{{ totalCost.toFixed(2) }}</text> 7 <view class="stat-item">考试人数:<text class="red">{{ totalNum }}</text></view>
8 </view>
9 </view> 8 </view>
10 9
11 <view class="appList"> 10 <view class="appList">
12 <view class="appItem" v-for="item in infoList"> 11 <view class="appItem" v-for="item in infoList" :key="item.examId" @click="goDetail(item)">
13 <view class="status" :class="{ 12 <view class="status" :class="{
14 'text-primary-bg':item.status=='0', 13 'text-primary-bg': item.status=='1',
15 'text-success-bg':item.status=='1', 14 'text-success-bg': item.status=='2',
16 'text-danger-bg':item.status=='2', 15 'text-danger-bg': item.status=='3'
17 'text-warning-bg':item.status=='3' 16 }" >
18 }" @click="goDetail(item)"> 17 {{ item.statusStr || '待提交' }}
19 {{ item.statusStr }}
20 </view> 18 </view>
21 19
22 <view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view> 20 <view class="date" v-if="item.commitTime">提交时间:{{ item.commitTime.substring(0,10) }}</view>
23 <view class="text-primary">{{item.flowCode}}</view> 21 <view class="text-primary">{{ item.examCode }}</view>
24 <view class="name mt10" @click="goDetail(item)">{{item.mergeName}}</view> 22 <view class="name mt10" >{{ item.name }}</view>
25 <view class="flexbox" @click="goDetail(item)"> 23 <view class="flexbox" >
26 <view> 24 <view>
27 考试人数 25 考试人数
28 <view>{{item.totalNum}}</view> 26 <view>{{ item.totalNum }}</view>
29 </view> 27 </view>
30
31 <view> 28 <view>
32 缴费状态 29 支付方式
33 <view> 30 <view>
34 <text :class="{ 31 民生付
35 'text-success':item.examPayStatusStr=='已上传', 32 <!-- <text :class="{
36 'text-danger':item.examPayStatusStr=='未上传', 33 'text-success': item.examPayStatusStr=='已上传',
37 'text-warning':item.examPayStatusStr=='已结算' 34 'text-danger': item.examPayStatusStr=='未上传',
38 }">{{ item.examPayStatusStr||'--' }}</text> 35 'text-warning': item.examPayStatusStr=='已结算'
36 }">{{ item.examPayStatusStr || '--' }}</text> -->
39 </view> 37 </view>
40 </view> 38 </view>
41 <view> 39 <view>
42 总金额 40 总金额
43 <view>¥{{item.totalAmount}}</view> 41 <view>¥{{ item.price }}</view>
44 </view> 42 </view>
45 </view> 43 </view>
46 <view class="pp esp">上报单位:{{item.memName}}</view> 44 <view class="pp esp">上报单位:{{ item.memberName }}</view>
47 45
48 <view class="func" v-if="item.status=='0'"> 46 <view class="func" v-if="item.status=='1'">
49 <button @click="audit(item,'2')">拒绝</button> 47 <button @click="goApproval(item)">审批</button>
50 <button @click="audit(item,'1')">同意</button>
51 </view>
52 <view class="func" v-if="(item.isView=='1' && item.status=='1') || item.payStatus=='3'">
53 <button @click="handleBack(item)">撤回</button>
54 </view> 48 </view>
55 </view> 49 </view>
56 </view> 50 </view>
...@@ -65,187 +59,99 @@ ...@@ -65,187 +59,99 @@
65 <script setup> 59 <script setup>
66 import * as api from '@/common/api.js' 60 import * as api from '@/common/api.js'
67 import config from '@/config.js' 61 import config from '@/config.js'
68 import _ from 'underscore'
69 import { 62 import {
70 onMounted,
71 ref 63 ref
72 } from 'vue' 64 } from 'vue'
73 import { 65 import {
74 onLoad,
75 onShow 66 onShow
76 } from '@dcloudio/uni-app' 67 } from '@dcloudio/uni-app'
77 const app = getApp(); 68
69 const app = getApp()
70
71 // 导航栏对应 status 值
72 const statusValues = ['', '1', '2', '3']
73 const navs = ref(['全部', '审批中', '审批通过', '审批拒绝'])
74 const current = ref(0)
75
78 const queryParams = ref({ 76 const queryParams = ref({
79 // pageNum: 1, 77 status: '',
80 // pageSize: 10 78 auditSelectType: '1',
81 status: '0', 79 auditFlag: '1',
82 type: '1' 80 pageNum: 1,
81 pageSize: 50
83 }) 82 })
84 const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回']) 83
85 const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
86 const current = ref()
87 const infoList = ref([]) 84 const infoList = ref([])
88 const total = ref(0) 85 const total = ref(0)
89 const totalCost = ref(0) 86 const totalCost = ref(0)
90 const deptType = ref('') 87 const totalNum = ref(0)
91 const userType = ref('')
92 onLoad(() => {
93 88
94 })
95 onShow(() => { 89 onShow(() => {
96 if (app.globalData.isLogin) { 90 if (app.globalData.isLogin) {
97 init() 91 getList()
98 } else { 92 } else {
99
100 app.firstLoadCallback = () => { 93 app.firstLoadCallback = () => {
101 init()
102 };
103 }
104 })
105
106 function init() {
107 deptType.value = app.globalData.deptType
108 userType.value = app.globalData.userType
109 getList() 94 getList()
110 } 95 }
111 96 }
97 })
112 98
113 function getList() { 99 function getList() {
114 uni.showLoading({ 100 uni.showLoading({ title: '加载中', mask: true })
115 title: '加载中',
116 mask: true
117 })
118 totalCost.value = 0 101 totalCost.value = 0
119 api.getVerityMergeList(queryParams.value).then(response => { 102 totalNum.value = 0
103 api.auditList(queryParams.value).then(response => {
120 uni.hideLoading() 104 uni.hideLoading()
121 const list = [] 105 infoList.value = response.rows || []
122 _.each(response.rows, r => { 106 total.value = response.total || 0
123 const item = JSON.parse(r.remark) 107 infoList.value.forEach(item => {
124 item.recordId = r.recordId 108 totalCost.value += Number(item.price) || 0
125 item.status = r.auditStatus 109 totalNum.value += Number(item.totalNum) || 0
126 item.statusStr = statusArr[r.auditStatus]
127 item.isView = r.isView
128 item.payStatus = r.payStatus
129 item.examPayStatusStr = r.examPayStatusStr
130 item.sourceData = r
131 item.auditProcess = r.auditProcess
132 list.push(item)
133
134 totalCost.value += (item.totalAmount * 1)
135 }) 110 })
136 infoList.value = list 111 }).catch(() => {
137 total.value = response.total 112 uni.hideLoading()
138 }) 113 })
139 } 114 }
140 115
141 function onClickItem(e) { 116 function onClickItem(e) {
142 console.log(e) 117 current.value = e.currentIndex
143 queryParams.value.status = e.currentIndex 118 queryParams.value.status = statusValues[e.currentIndex]
144 getList() 119 getList()
145 } 120 }
146 121
147 function goDetail(item) { 122 function goDetail(item) {
148 const form = encodeURIComponent(JSON.stringify(item))
149 // 查看
150 let path = `/level/mergeUpDetail?form=${form}&type=1`
151 uni.navigateTo({ 123 uni.navigateTo({
152 url: path 124 url: `/pages/rank/applyDetail?examId=${item.examId}&type=1`
153 });
154
155 }
156
157 function audit(item, flag) {
158 var obj = {
159 flag: flag,
160 reason: null,
161 id: item.recordId
162 }
163
164 if (flag == '2') {
165 // 拒绝
166 // 弹出框填写理由
167 uni.showModal({
168 title: '请输入拒绝理由',
169 editable: true,
170 success: function(res) {
171 if (res.confirm) {
172 if (!res.content) {
173 uni.showToast({
174 title: '请输入拒绝理由',
175 icon: 'none'
176 }) 125 })
177 } else {
178 obj.reason = res.content
179 doApproval(obj)
180 }
181 }
182 }
183 })
184 } else if (flag == '1') {
185 // 二次确认
186 uni.showModal({
187 title: '提示',
188 content: `确定审批通过吗`,
189 success: function(res) {
190 if (res.confirm) {
191 doApproval(obj)
192 }
193 }
194 })
195 }
196 } 126 }
197 127
198 function doApproval(obj) { 128 function goApproval(item) {
199 console.log(obj) 129 uni.navigateTo({
200 uni.showLoading({ 130 url: `/level/ztx/memberAuditPage?ids=${item.examId}`
201 title: '加载中'
202 })
203 api.doMergeFlows(obj).then((res) => {
204 uni.hideLoading()
205 uni.showToast({
206 title: '操作成功',
207 icon: 'none'
208 })
209 getList()
210 })
211 }
212 function handleBack(row){
213 uni.showModal({
214 title: '请输入撤回理由',
215 editable: true,
216 success: function(res) {
217 if (res.confirm) {
218 if (!res.content) {
219 uni.showToast({
220 title: '请输入撤回理由',
221 icon: 'none'
222 })
223 } else {
224 var obj = {
225 flag: '2',
226 reason: res.content,
227 recordId: row.recordId
228 }
229 api.doVerityBack(obj).then(rr=>{
230 uni.showToast({
231 title: '操作成功',
232 icon: 'none'
233 })
234 getList()
235 })
236 }
237 }
238 }
239 }) 131 })
240 } 132 }
241 </script> 133 </script>
242 134
243
244 <style scoped lang="scss"> 135 <style scoped lang="scss">
245 .mt0 { 136 .mt0 {
246 margin-top: 0 !important; 137 margin-top: 0 !important;
247 } 138 }
248 139
140 .stat-row {
141 display: flex;
142 gap: 40rpx;
143 padding: 20rpx 30rpx;
144 background: #f3e5e5;
145 font-size: 26rpx;
146 color: #666;
147 // margin-top: 20rpx;
148
149 .red {
150 color: #C4121B;
151 font-weight: 600;
152 }
153 }
154
249 .appList .appItem .name { 155 .appList .appItem .name {
250 width: 100%; 156 width: 100%;
251 word-break: break-all; 157 word-break: break-all;
......
...@@ -19,22 +19,25 @@ ...@@ -19,22 +19,25 @@
19 <text class="form-label">审批结果</text> 19 <text class="form-label">审批结果</text>
20 <view class="radio-group"> 20 <view class="radio-group">
21 <view 21 <view
22 :class="{ selected: form.flag === '1' }" 22 :class="{ selected: form.flag == '1'
23 }"
23 class="radio-item" 24 class="radio-item"
24 @click="form.flag = '1'" 25 @click="form.flag = '1'"
25 > 26 >
26 <view class="radio-circle"> 27 <view class="radio-circle">
27 <uni-icons v-if="form.flag === '1'" color="#fff" size="10" type="checkmark"></uni-icons> 28 <text class="check-icon" v-if="form.flag == '1'"></text>
29 <!-- <uni-icons v-if="form.flag == '1'" color="#fff" size="10" type="checkmark"></uni-icons> -->
28 </view> 30 </view>
29 <text>审批通过</text> 31 <text>审批通过</text>
30 </view> 32 </view>
31 <view 33 <view
32 :class="{ selected: form.flag === '0' }" 34 :class="{ selected: form.flag == '0' }"
33 class="radio-item" 35 class="radio-item"
34 @click="form.flag = '0'" 36 @click="form.flag = '0'"
35 > 37 >
36 <view class="radio-circle"> 38 <view class="radio-circle">
37 <uni-icons v-if="form.flag === '0'" color="#fff" size="10" type="checkmark"></uni-icons> 39 <text v-if="form.flag == '0'" class="check-icon"></text>
40 <!-- <uni-icons v-if="form.flag == '0'" color="#fff" size="10" type="checkmark"></uni-icons> -->
38 </view> 41 </view>
39 <text>审批拒绝</text> 42 <text>审批拒绝</text>
40 </view> 43 </view>
...@@ -164,7 +167,7 @@ async function getExaminer() { ...@@ -164,7 +167,7 @@ async function getExaminer() {
164 167
165 168
166 function doSubmit() { 169 function doSubmit() {
167 if (form.value.flag === '0' && !form.value.reason) { 170 if (form.value.flag == '0' && !form.value.reason) {
168 uni.showToast({ 171 uni.showToast({
169 title: '请输入拒绝理由', 172 title: '请输入拒绝理由',
170 icon: 'none' 173 icon: 'none'
...@@ -285,7 +288,7 @@ async function confirmDel() { ...@@ -285,7 +288,7 @@ async function confirmDel() {
285 font-size: 30rpx; 288 font-size: 30rpx;
286 font-weight: 600; 289 font-weight: 600;
287 color: #333; 290 color: #333;
288 margin-left: 10rpx; 291 // margin-left: 10rpx;
289 } 292 }
290 } 293 }
291 294
...@@ -543,4 +546,12 @@ async function confirmDel() { ...@@ -543,4 +546,12 @@ async function confirmDel() {
543 .btn-cancel::after, .btn-confirm::after { 546 .btn-cancel::after, .btn-confirm::after {
544 border: none; 547 border: none;
545 } 548 }
549
550
551 .check-icon {
552 font-size: 20rpx;
553 color: #fff;
554 font-weight: bold;
555 margin-right: 6rpx;
556 }
546 </style> 557 </style>
......
...@@ -50,28 +50,16 @@ ...@@ -50,28 +50,16 @@
50 <uni-icons color="#AD181F" size="18" type="checkmark-circle"></uni-icons> 50 <uni-icons color="#AD181F" size="18" type="checkmark-circle"></uni-icons>
51 <text class="section-title">审核记录</text> 51 <text class="section-title">审核记录</text>
52 </view> 52 </view>
53 <view class="audit-list"> 53 <view class="wBox">
54 <view v-for="(item, index) in auditList" :key="index" class="audit-item"> 54 <view class="stepItem" v-for="(item, index) in auditList" :key="index">
55 <view :class="item.auditResult == 2 ? 'pass' : 'fail'" class="audit-dot"></view> 55 <view class="time">{{ formatDateTime(item.auditTime) }}</view>
56 <view class="audit-content"> 56 <view class="content">
57 <view class="audit-row"> 57 <view class="status">
58 <text class="audit-label">审核协会</text> 58 <text v-if="item.auditResult==1" class="text-success">审核通过</text>
59 <text class="audit-value">{{ item.auditDeptName || '-' }}</text> 59 <text v-if="item.auditResult==2" class="text-danger">审核拒绝</text>
60 </view>
61 <view class="audit-row">
62 <text class="audit-label">审核时间</text>
63 <text class="audit-value">{{ formatDateTime(item.auditTime) }}</text>
64 </view>
65 <view class="audit-row">
66 <text class="audit-label">审核状态</text>
67 <text :class="item.auditResult == 1 ? 'text-success' : 'text-danger'" class="audit-value">
68 {{ item.auditResult == 1 ? '通过' : '拒绝' }}
69 </text>
70 </view>
71 <view v-if="item.auditMsg" class="audit-row">
72 <text class="audit-label">备注</text>
73 <text class="audit-value">{{ item.auditMsg }}</text>
74 </view> 60 </view>
61 <view class="deptName">{{ item.auditDeptName || '--' }}</view>
62 <view v-if="item.auditMsg">备注:{{ item.auditMsg }}</view>
75 </view> 63 </view>
76 </view> 64 </view>
77 </view> 65 </view>
...@@ -200,108 +188,93 @@ function formatDateTime(dateStr) { ...@@ -200,108 +188,93 @@ function formatDateTime(dateStr) {
200 } 188 }
201 } 189 }
202 190
203 .info-card { 191 .wBox {
204 .info-row { 192 width: 700rpx;
205 display: flex; 193 padding: 30rpx;
206 justify-content: space-between; 194 margin: 20rpx auto 0;
207 padding: 16rpx 0; 195 background: #FFFFFF;
208 border-bottom: 1px solid #f0f0f0; 196 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
197 border-radius: 15rpx;
198 }
199
200 .stepItem {
201 // display: flex;
202 padding: 16rpx;
203 border-bottom: 1rpx dashed #eee;
209 204
210 &:last-child { 205 &:last-child {
211 border-bottom: none; 206 border-bottom: none;
212 } 207 }
213 208
214 .label { 209 .time {
215 font-size: 26rpx; 210 width: 80%;
211 font-size: 22rpx;
216 color: #999; 212 color: #999;
217 flex-shrink: 0; 213 flex-shrink: 0;
214 padding-top: 4rpx;
218 } 215 }
219 216
220 .value { 217 .content {
221 font-size: 26rpx; 218 flex: 1;
222 color: #333;
223 text-align: right;
224 margin-left: 20rpx;
225 219
226 &.text-success { 220 .status {
227 color: #4caf50; 221 font-size: 28rpx;
222 font-weight: 600;
223 margin-bottom: 6rpx;
228 } 224 }
229 225
230 &.text-warning { 226 .deptName {
231 color: #ff9800; 227 font-size: 26rpx;
228 color: #666;
232 } 229 }
233 230
234 &.text-danger { 231 view {
235 color: #f44336; 232 font-size: 24rpx;
236 } 233 color: #999;
234 margin-top: 4rpx;
237 } 235 }
238 } 236 }
239 } 237 }
240 238
241 /* 审核记录 */ 239 .info-card {
242 .audit-list { 240 .info-row {
243 .audit-item {
244 display: flex; 241 display: flex;
245 padding: 20rpx 0; 242 justify-content: space-between;
246 border-bottom: 1px dashed #eee; 243 padding: 16rpx 0;
244 border-bottom: 1px solid #f0f0f0;
247 245
248 &:last-child { 246 &:last-child {
249 border-bottom: none; 247 border-bottom: none;
250 } 248 }
251 249
252 .audit-dot { 250 .label {
253 width: 14rpx; 251 font-size: 26rpx;
254 height: 14rpx;
255 border-radius: 50%;
256 margin-top: 8rpx;
257 margin-right: 20rpx;
258 flex-shrink: 0;
259
260 &.pass {
261 background-color: #4caf50;
262 }
263
264 &.fail {
265 background-color: #f44336;
266 }
267 }
268
269 .audit-content {
270 flex: 1;
271
272 .audit-row {
273 display: flex;
274 margin-bottom: 10rpx;
275
276 &:last-child {
277 margin-bottom: 0;
278 }
279
280 .audit-label {
281 font-size: 24rpx;
282 color: #999; 252 color: #999;
283 width: 140rpx;
284 flex-shrink: 0; 253 flex-shrink: 0;
285 } 254 }
286 255
287 .audit-value { 256 .value {
288 font-size: 26rpx; 257 font-size: 26rpx;
289 color: #333; 258 color: #333;
290 flex: 1; 259 text-align: right;
260 margin-left: 20rpx;
291 261
292 &.text-success { 262 &.text-success {
293 color: #4caf50; 263 color: #4caf50;
294 } 264 }
295 265
266 &.text-warning {
267 color: #ff9800;
268 }
269
296 &.text-danger { 270 &.text-danger {
297 color: #f44336; 271 color: #f44336;
298 } 272 }
299 } 273 }
300 } 274 }
301 }
302 }
303 } 275 }
304 276
277
305 /* 考官表格 */ 278 /* 考官表格 */
306 .examiner-table { 279 .examiner-table {
307 border: 1px solid #eee; 280 border: 1px solid #eee;
......
...@@ -17,28 +17,18 @@ ...@@ -17,28 +17,18 @@
17 <view class="form-card"> 17 <view class="form-card">
18 <view class="form-item"> 18 <view class="form-item">
19 <text class="form-label">审批结果</text> 19 <text class="form-label">审批结果</text>
20 <radio-group @change="onFlagChange">
20 <view class="radio-group"> 21 <view class="radio-group">
21 <view 22 <label class="radio-item" :class="{ selected: form.flag == '1' }">
22 class="radio-item" 23 <radio value="1" :checked="form.flag == '1'" color="#C4121B" />
23 :class="{ selected: form.flag === '1' }"
24 @click="form.flag = '1'"
25 >
26 <view class="radio-circle">
27 <uni-icons v-if="form.flag === '1'" type="checkmark" size="10" color="#fff"></uni-icons>
28 </view>
29 <text>审批通过</text> 24 <text>审批通过</text>
30 </view> 25 </label>
31 <view 26 <label class="radio-item" :class="{ selected: form.flag == '0' }">
32 class="radio-item" 27 <radio value="0" :checked="form.flag == '0'" color="#C4121B" />
33 :class="{ selected: form.flag === '0' }"
34 @click="form.flag = '0'"
35 >
36 <view class="radio-circle">
37 <uni-icons v-if="form.flag === '0'" type="checkmark" size="10" color="#fff"></uni-icons>
38 </view>
39 <text>审批拒绝</text> 28 <text>审批拒绝</text>
29 </label>
40 </view> 30 </view>
41 </view> 31 </radio-group>
42 </view> 32 </view>
43 33
44 <view class="form-item"> 34 <view class="form-item">
...@@ -65,7 +55,7 @@ ...@@ -65,7 +55,7 @@
65 </template> 55 </template>
66 56
67 <script setup> 57 <script setup>
68 import * as api from '@/common/api_exam.js' 58 import * as api from '@/common/api.js'
69 import { ref } from 'vue' 59 import { ref } from 'vue'
70 import { onLoad } from '@dcloudio/uni-app' 60 import { onLoad } from '@dcloudio/uni-app'
71 61
...@@ -78,6 +68,10 @@ const form = ref({ ...@@ -78,6 +68,10 @@ const form = ref({
78 reason: '' 68 reason: ''
79 }) 69 })
80 70
71 function onFlagChange(e) {
72 form.value.flag = e.detail.value
73 }
74
81 onLoad((options) => { 75 onLoad((options) => {
82 if (options.type) { 76 if (options.type) {
83 type.value = options.type 77 type.value = options.type
...@@ -92,7 +86,7 @@ function goBack() { ...@@ -92,7 +86,7 @@ function goBack() {
92 } 86 }
93 87
94 function doSubmit() { 88 function doSubmit() {
95 if (form.value.flag === '0' && !form.value.reason) { 89 if (form.value.flag == '0' && !form.value.reason) {
96 uni.showToast({ 90 uni.showToast({
97 title: '请输入拒绝理由', 91 title: '请输入拒绝理由',
98 icon: 'none' 92 icon: 'none'
...@@ -109,7 +103,7 @@ function doSubmit() { ...@@ -109,7 +103,7 @@ function doSubmit() {
109 reason: form.value.reason || '' 103 reason: form.value.reason || ''
110 } 104 }
111 105
112 api.shenAudit(params).then(res => { 106 api.auditJi(params).then(res => {
113 uni.showToast({ 107 uni.showToast({
114 title: '操作成功', 108 title: '操作成功',
115 icon: 'success' 109 icon: 'success'
...@@ -168,7 +162,7 @@ function doSubmit() { ...@@ -168,7 +162,7 @@ function doSubmit() {
168 font-size: 30rpx; 162 font-size: 30rpx;
169 font-weight: 600; 163 font-weight: 600;
170 color: #333; 164 color: #333;
171 margin-left: 10rpx; 165 // margin-left: 10rpx;
172 } 166 }
173 } 167 }
174 168
...@@ -190,31 +184,31 @@ function doSubmit() { ...@@ -190,31 +184,31 @@ function doSubmit() {
190 184
191 .radio-group { 185 .radio-group {
192 display: flex; 186 display: flex;
193 gap: 40rpx; 187 gap: 24rpx;
194 } 188 }
195 189
196 .radio-item { 190 .radio-item {
191 flex: 1;
197 display: flex; 192 display: flex;
198 align-items: center; 193 align-items: center;
194 justify-content: center;
199 gap: 12rpx; 195 gap: 12rpx;
200 font-size: 28rpx; 196 font-size: 28rpx;
201 color: #333; 197 color: #666;
202 198 padding: 20rpx 0;
203 .radio-circle { 199 border-radius: 12rpx;
204 width: 36rpx; 200 border: 2rpx solid #eee;
205 height: 36rpx; 201 background: #fafafa;
206 border-radius: 50%;
207 border: 2rpx solid #ddd;
208 display: flex;
209 align-items: center;
210 justify-content: center;
211 }
212 202
213 &.selected { 203 &.selected {
214 .radio-circle { 204 color: #C4121B;
215 background-color: #C4121B;
216 border-color: #C4121B; 205 border-color: #C4121B;
206 background: #fff5f5;
207 font-weight: 500;
217 } 208 }
209
210 radio {
211 transform: scale(0.8);
218 } 212 }
219 } 213 }
220 214
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
6 <!-- 考段基本信息 --> 6 <!-- 考段基本信息 -->
7 <view class="card"> 7 <view class="card">
8 <view class="card-header"> 8 <view class="card-header">
9 <view class="header-left">考段基本信息33</view> 9 <view class="header-left">基本信息</view>
10 </view> 10 </view>
11 <view class="card-body"> 11 <view class="card-body">
12 <view class="info-row"> 12 <view class="info-row">
...@@ -122,26 +122,22 @@ ...@@ -122,26 +122,22 @@
122 <!-- <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view> --> 122 <!-- <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view> -->
123 </view> 123 </view>
124 124
125 <!-- 审核信息 --> 125 <!-- 审核记录 -->
126 <view class="card"> 126 <view class="h3-padding">审核记录</view>
127 <view class="card-header"> 127 <view class="wBox">
128 <view class="header-left">审核信息</view>
129 </view>
130
131 <view v-if="loadingAudit" class="state-tip">加载中...</view> 128 <view v-if="loadingAudit" class="state-tip">加载中...</view>
132 <view v-else-if="recordList.length === 0" class="state-tip">暂无审核记录</view> 129 <view v-else-if="recordList.length === 0" class="state-tip">暂无审核记录</view>
133 130 <view class="stepItem" v-else v-for="(n, index) in recordList" :key="index">
134 <view class="audit-list" v-else> 131 <view class="time">{{ n.auditTime || '待审批' }}</view>
135 <view class="audit-item" v-for="(n, index) in recordList" :key="index"> 132 <view class="content">
136 <view class="audit-dot" :class="n.auditResult == 1 ? 'pass' : 'fail'"></view> 133 <view class="status">
137 <view class="audit-content"> 134 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
138 <view class="audit-time">{{ n.auditTime || '待审批' }}</view> 135 <text v-if="n.auditResult==2" class="text-danger">审核拒绝</text>
139 <view class="audit-status" :class="n.auditResult == 1 ? 'text-green' : 'text-red'"> 136 <text v-if="n.auditResult==0" class="text-primary">审核中</text>
140 {{ getAuditResultText(n.auditResult, n.auditStatusStr) }} 137 <text v-if="n.auditResult==3" class="text-warning">已撤回</text>
141 </view>
142 <view class="audit-dept">{{ n.auditDeptName || n.deptName || '--' }}</view>
143 <view class="audit-remark" v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
144 </view> 138 </view>
139 <view class="deptName">{{ n.auditDeptName || n.deptName || '--' }}</view>
140 <view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
145 </view> 141 </view>
146 </view> 142 </view>
147 </view> 143 </view>
...@@ -374,6 +370,61 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -374,6 +370,61 @@ $content-gap: 24rpx; // 统一内容边距
374 box-sizing: border-box; 370 box-sizing: border-box;
375 } 371 }
376 372
373 .h3-padding {
374 padding: 30rpx 30rpx 0;
375 font-size: 30rpx;
376 font-weight: 600;
377 color: #333;
378 }
379
380 .wBox {
381 width: 700rpx;
382 padding: 30rpx;
383 margin: 20rpx auto 0;
384 background: #FFFFFF;
385 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
386 border-radius: 15rpx;
387 }
388
389 .stepItem {
390 // display: flex;
391 padding: 16rpx;
392 border-bottom: 1rpx dashed #eee;
393
394 &:last-child {
395 border-bottom: none;
396 }
397
398 .time {
399 width: 80%;
400 font-size: 22rpx;
401 color: #999;
402 flex-shrink: 0;
403 padding-top: 4rpx;
404 }
405
406 .content {
407 flex: 1;
408
409 .status {
410 font-size: 28rpx;
411 font-weight: 600;
412 margin-bottom: 6rpx;
413 }
414
415 .deptName {
416 font-size: 26rpx;
417 color: #666;
418 }
419
420 view {
421 font-size: 24rpx;
422 color: #999;
423 margin-top: 4rpx;
424 }
425 }
426 }
427
377 .card { 428 .card {
378 background: $card-bg; 429 background: $card-bg;
379 border-radius: 16rpx; 430 border-radius: 16rpx;
...@@ -550,68 +601,6 @@ $content-gap: 24rpx; // 统一内容边距 ...@@ -550,68 +601,6 @@ $content-gap: 24rpx; // 统一内容边距
550 color: $text-placeholder; 601 color: $text-placeholder;
551 } 602 }
552 603
553 .audit-list {
554 padding: 0 $content-gap 24rpx;
555 }
556
557 .audit-item {
558 display: flex;
559 padding: 20rpx 0;
560 border-bottom: 1rpx dashed $border-color;
561
562 &:last-child {
563 border-bottom: none;
564 }
565
566 .audit-dot {
567 width: 14rpx;
568 height: 14rpx;
569 border-radius: 50%;
570 margin-top: 8rpx;
571 margin-right: 20rpx;
572 flex-shrink: 0;
573
574 &.pass {
575 background: $success-color;
576 }
577
578 &.fail {
579 background: $danger-color;
580 }
581 }
582
583 .audit-content {
584 flex: 1;
585 padding-right: 8rpx;
586
587 .audit-time {
588 font-size: 24rpx;
589 color: $text-placeholder;
590 margin-bottom: 6rpx;
591 }
592
593 .audit-status {
594 font-size: 28rpx;
595 font-weight: 600;
596 margin-bottom: 6rpx;
597 }
598
599 .audit-dept {
600 font-size: 26rpx;
601 color: $text-secondary;
602 }
603
604 .audit-remark {
605 font-size: 24rpx;
606 color: $text-placeholder;
607 margin-top: 6rpx;
608 padding: 8rpx 12rpx;
609 background: #f8f8f8;
610 border-radius: 8rpx;
611 }
612 }
613 }
614
615 .text-red { 604 .text-red {
616 color: $danger-color !important; 605 color: $danger-color !important;
617 } 606 }
......
...@@ -45,25 +45,19 @@ ...@@ -45,25 +45,19 @@
45 </view> 45 </view>
46 46
47 <!-- 审核记录 --> 47 <!-- 审核记录 -->
48 <view class="card"> 48 <view class="h3-padding">审核记录</view>
49 <view class="card-header"> 49 <view class="wBox">
50 <view class="header-left">审核记录</view>
51 </view>
52
53 <view v-if="loadingAudit" class="state-tip">加载中...</view> 50 <view v-if="loadingAudit" class="state-tip">加载中...</view>
54 <view v-else-if="auditList.length === 0" class="state-tip">暂无审核记录</view> 51 <view v-else-if="auditList.length === 0" class="state-tip">暂无审核记录</view>
55 52 <view class="stepItem" v-else v-for="(n, index) in auditList" :key="index">
56 <view class="audit-list" v-else> 53 <view class="time">{{ parseDateTime(n.auditTime) }}</view>
57 <view class="audit-item" v-for="(n, index) in auditList" :key="index"> 54 <view class="content">
58 <view class="audit-dot" :class="n.auditResult == 1 ? 'pass' : 'fail'"></view> 55 <view class="status">
59 <view class="audit-content"> 56 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
60 <view class="audit-time">{{ parseDateTime(n.auditTime) }}</view> 57 <text v-if="n.auditResult==0" class="text-danger">审核拒绝</text>
61 <view class="audit-status" :class="n.auditResult == 1 ? 'text-green' : 'text-red'">
62 {{ getAuditResultText(n.auditResult) }}
63 </view>
64 <view class="audit-dept">{{ n.auditDeptName || '——' }}</view>
65 <view class="audit-remark" v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
66 </view> 58 </view>
59 <view class="deptName">{{ n.auditDeptName || '--' }}</view>
60 <view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
67 </view> 61 </view>
68 </view> 62 </view>
69 </view> 63 </view>
...@@ -207,6 +201,61 @@ $content-gap: 24rpx; ...@@ -207,6 +201,61 @@ $content-gap: 24rpx;
207 box-sizing: border-box; 201 box-sizing: border-box;
208 } 202 }
209 203
204 .h3-padding {
205 padding: 30rpx 30rpx 0;
206 font-size: 30rpx;
207 font-weight: 600;
208 color: #333;
209 }
210
211 .wBox {
212 width: 700rpx;
213 padding: 30rpx;
214 margin: 20rpx auto 0;
215 background: #FFFFFF;
216 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
217 border-radius: 15rpx;
218 }
219
220 .stepItem {
221 // display: flex;
222 padding: 16rpx;
223 border-bottom: 1rpx dashed #eee;
224
225 &:last-child {
226 border-bottom: none;
227 }
228
229 .time {
230 width: 80%;
231 font-size: 22rpx;
232 color: #999;
233 flex-shrink: 0;
234 padding-top: 4rpx;
235 }
236
237 .content {
238 flex: 1;
239
240 .status {
241 font-size: 28rpx;
242 font-weight: 600;
243 margin-bottom: 6rpx;
244 }
245
246 .deptName {
247 font-size: 26rpx;
248 color: #666;
249 }
250
251 view {
252 font-size: 24rpx;
253 color: #999;
254 margin-top: 4rpx;
255 }
256 }
257 }
258
210 .card { 259 .card {
211 background: $card-bg; 260 background: $card-bg;
212 border-radius: 16rpx; 261 border-radius: 16rpx;
...@@ -314,73 +363,4 @@ $content-gap: 24rpx; ...@@ -314,73 +363,4 @@ $content-gap: 24rpx;
314 color: $primary-color; 363 color: $primary-color;
315 } 364 }
316 365
317 .audit-list {
318 padding: 0 $content-gap 24rpx;
319 }
320
321 .audit-item {
322 display: flex;
323 padding: 20rpx 0;
324 border-bottom: 1rpx dashed $border-color;
325
326 &:last-child {
327 border-bottom: none;
328 }
329
330 .audit-dot {
331 width: 14rpx;
332 height: 14rpx;
333 border-radius: 50%;
334 margin-top: 8rpx;
335 margin-right: 20rpx;
336 flex-shrink: 0;
337
338 &.pass {
339 background: $success-color;
340 }
341
342 &.fail {
343 background: $danger-color;
344 }
345 }
346
347 .audit-content {
348 flex: 1;
349 padding-right: 8rpx;
350
351 .audit-time {
352 font-size: 24rpx;
353 color: $text-placeholder;
354 margin-bottom: 6rpx;
355 }
356
357 .audit-status {
358 font-size: 28rpx;
359 font-weight: 600;
360 margin-bottom: 6rpx;
361 }
362
363 .audit-dept {
364 font-size: 26rpx;
365 color: $text-secondary;
366 }
367
368 .audit-remark {
369 font-size: 24rpx;
370 color: $text-placeholder;
371 margin-top: 6rpx;
372 padding: 8rpx 12rpx;
373 background: #f8f8f8;
374 border-radius: 8rpx;
375 }
376 }
377 }
378
379 .text-red {
380 color: $danger-color !important;
381 }
382
383 .text-green {
384 color: $success-color !important;
385 }
386 </style> 366 </style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!