37a8c626 by 张猛

团体审核

1 parent 584ddc04
...@@ -500,6 +500,15 @@ export function getGroupList(params) { ...@@ -500,6 +500,15 @@ export function getGroupList(params) {
500 }) 500 })
501 } 501 }
502 502
503 // 会员审核列表
504 export function listNewAPI(params) {
505 return request({
506 url: `/system/certifiedNew/list`,
507 method: 'get',
508 params
509 })
510 }
511
503 // 查询 512 // 查询
504 export function pickUp(data) { 513 export function pickUp(data) {
505 return request({ 514 return request({
...@@ -733,6 +742,22 @@ export function groupAudit(data) { ...@@ -733,6 +742,22 @@ export function groupAudit(data) {
733 }) 742 })
734 } 743 }
735 744
745 export function ztxAudit(params) {
746 return request({
747 url: `/system/certifiedNew/audit/${params.ids}?flag=${params.flag}&reason=${params.reason}`,
748 method: 'post',
749 params
750 })
751 }
752
753 export function shenAudit(params) {
754 return request({
755 url: `/system/certifiedNew/shenAudit/${params.ids}?flag=${params.flag}&reason=${params.reason}`,
756 method: 'post',
757 params
758 })
759 }
760
736 export function groupMergeApi(data) { 761 export function groupMergeApi(data) {
737 return request({ 762 return request({
738 url: `/member/certified/merge`, 763 url: `/member/certified/merge`,
...@@ -1894,3 +1919,16 @@ export function getExamInfo(examId) { ...@@ -1894,3 +1919,16 @@ export function getExamInfo(examId) {
1894 }) 1919 })
1895 } 1920 }
1896 1921
1922
1923 /**
1924 * 团体考试记录
1925 * @param id
1926 * @returns {*}
1927 */
1928 export function GroupGetLogs(id) {
1929 return request({
1930 url: `/system/certifiedNew/getLogs/${id}`,
1931 method: 'get'
1932 })
1933 }
1934
......
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
......
1 <template> 1 <template>
2 <view> 2 <view>
3 <view class="text-center whitebg" v-if="userType=='2'"> 3 <!-- 团队会员审核 -->
4 <view class="cardNav"> 4 <uni-segmented-control :current="current" :values="navs" activeColor="#AD181F" class="whitebg" styleType="text"
5 <view class="active">审核</view> 5 @clickItem="onClickItem"></uni-segmented-control>
6 <view @click="goMerge">合并</view> 6 <view class="appList">
7 <view @click="goMergeUp">提交</view> 7 <view v-show="statistical.totalCost>0" class="vipData">
8 </view> 8 <view>费用合计:
9 </view> 9 <text>¥{{ statistical.totalCost.toFixed(2) }}</text>
10 <!-- 团队会员审核 --> 10 </view>
11 <uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" 11 </view>
12 styleType="text" activeColor="#AD181F"></uni-segmented-control> 12
13 <view class="appList"> 13 <view v-for="(item,index) in list" :key="index" class="appItem">
14 <view class="vipData" v-if="userType == '1'" v-show="totalCost>0"> 14 <view class="status" @click="goDetail(item)">
15 <view>费用合计: 15 <text v-if="item.auditStatus == 1" class="text-primary">审核中</text>
16 <text>¥{{ totalCost.toFixed(2) }}</text> 16 <text v-if="item.auditStatus == 2" class="text-success">审核通过</text>
17 </view> 17 <text v-if="item.auditStatus == 3" class="text-danger">审核拒绝</text>
18 </view> 18 </view>
19 19 <view class="date">
20 <view class="appItem" v-for="(item,index) in list" :key="index"> 20 <uni-icons color="#AD181F" size="16" type="calendar-filled"></uni-icons>
21 <view class="status" @click="goDetail(item)"> 21 {{ item.commitTime }} 提交
22 <text v-if="item.auditStatus == 0" class="text-primary">审核中</text> 22 </view>
23 <text v-if="item.auditStatus == 1" class="text-success">审核通过</text> 23 <view v-if="item.wfCode">{{ item?.wfCode }}
24 <text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text> 24 </view>
25 <text v-if="item.auditStatus == 3" class="text-warning">审核撤回</text> 25 <view class="name w100 mt0" @click="goDetail(item)">
26 </view> 26 {{ item.memName }}
27 <view class="date"> 27 </view>
28 <uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons> 28 <view class="text" @click="goDetail(item)">
29 {{item.content.commitTime}} 提交 29 {{ item.shenMemName }}
30 </view> 30 </view>
31 <view class="text-primary" @click="goDetail(item)" v-if="item.content?.wfCode">{{item.content?.wfCode}} 31 <view class="flexbox" @click="goDetail(item)">
32 </view> 32 <view>
33 <view class="name w100 mt0" @click="goDetail(item)"> 33 新会员/年限
34 <!-- <text class="dot"></text> --> 34 <view>{{ item.isNew == 1 ? '是' : "否" }}
35 {{item.content.certName}} 35 /{{ item.renewYear }}
36 </view> 36 </view>
37 <view class="flexbox" @click="goDetail(item)"> 37 </view>
38 <view v-if="userType == '3'"> 38 <view>
39 所属省份 39 费用合计
40 <view>{{item.content.province}}</view> 40 <view> {{ (item.allPrice * 1).toFixed(2) }}</view>
41 </view> 41 </view>
42 <view v-if="userType == '2'"> 42 <view>
43 所属一级 43 政策优惠
44 <view>{{item.content.firstDeptName}}</view> 44 <view>
45 </view> 45 <text class="text-danger"> {{ item.discount ? item.discount : '--' }}</text>
46 <view v-if="userType == '2'"> 46 </view>
47 所属二级 47 </view>
48 <view>{{item.content.secondDeptName}}</view> 48 <view>
49 </view> 49 付款费用
50 50 <view>
51 <view v-if="deptType == 1"> 51 <text class="text-warning"> ¥{{ item.finalPrice }}</text>
52 会员/新会员/年限 52 </view>
53 <view>{{item.content.allCount}}/<text 53 </view>
54 class="text-danger">{{item.content.newCount}}</text>/{{item.content.renewYear}} 54 <view>
55 </view> 55 协会信息
56 </view> 56 <view>
57 <view v-else> 57 <text :class="{'text-danger':item.checkPass == 0 }"> {{ item.checkPass == 0 ? '异常' : '正常' }}</text>
58 年限 58 </view>
59 <view>{{item.content.renewYear}}</view> 59 </view>
60 </view> 60 </view>
61 <view v-if="deptType == 1"> 61 <view class="func">
62 费用合计 62 <button @click="goGroupInfo(item)">机构资料</button>
63 <view> ¥{{ (item?.content?.allFee*1).toFixed(2) }}</view> 63 <button v-if="queryParams.auditStatus==1" @click="audit(item.id,'0')">拒绝</button>
64 </view> 64 <button v-if="queryParams.auditStatus==1" @click="audit(item.id,'1')">同意</button>
65 <view v-if="deptType == 1" @click.stop="viewSettleFile(item.doc)"> 65 </view>
66 缴费状态 66 <!-- 省 -->
67 <view> 67 </view>
68 <text v-if="item.doc?.settleFlag==0" class="text-warning">已结算</text> 68 </view>
69 <text v-if="item.doc?.settleFlag==1&&item.doc.payFlag==0" class="text-success">已上传</text> 69
70 <text v-if="item.doc?.settleFlag==1&&item.doc.payFlag==1" class="text-danger">未上传</text> 70 <view v-if="list.length==0" class="nodata">
71 </view> 71 <image :src="config.baseUrl_api + '/fs/static/nodata.png'" mode="aspectFit"></image>
72 </view> 72 <text>暂无数据</text>
73 </view> 73 </view>
74 <view class="func" v-if="(userType == '1'&&item.auditStatus == 0)"> 74 <!-- <view v-if="userType=='2'" class="block-btn-box">
75 <button @click="audit(item.recordId,'0')">拒绝</button> 75 <button @click="goMerge" class="btn-red-kx">前往合并 > </button>
76 <button @click="audit(item.recordId,'1')">同意</button> 76 </view> -->
77 </view> 77 </view>
78 <!-- 中跆协 -->
79 <view class="func" v-if="(userType == '1'&&item.auditStatus == 1&&item.canTui==1)">
80 <button @click="sendBack(item)">撤回</button>
81 </view>
82 <!-- 市 -->
83 <view class="func" v-if="userType == '3'">
84 <button @click="goGroupInfo(item)">机构资料</button>
85 <button v-if="item.auditStatus == 1&&item.isView==1&&item.content.allCount > 0"
86 @click="sendBack(item)">撤回</button>
87 <button v-if="item.auditStatus == 0" @click="audit(item.recordId,'0')">拒绝</button>
88 <button v-if="item.auditStatus == 0" @click="audit(item.recordId,'1')">同意</button>
89
90 </view>
91 <!-- 省 -->
92 <view class="func" v-if="userType == '2'">
93 <button @click="goGroupInfo(item)">机构资料</button>
94 <button v-if="item.auditStatus == 1" @click="sendBack(item)">撤回</button>
95 <button v-if="item.auditStatus == 0" @click="audit(item.recordId,'0')">拒绝</button>
96 <button v-if="item.auditStatus == 0" @click="audit(item.recordId,'1')">同意</button>
97 </view>
98 </view>
99 </view>
100
101 <view class="nodata" v-if="list.length==0">
102 <image mode="aspectFit" :src="config.baseUrl_api + '/fs/static/nodata.png'"></image>
103 <text>暂无数据</text>
104 </view>
105 <!-- <view v-if="userType=='2'" class="block-btn-box">
106 <button @click="goMerge" class="btn-red-kx">前往合并 > </button>
107 </view> -->
108 </view>
109 </template> 78 </template>
110 79
111 <script setup> 80 <script setup>
112 import * as api from '@/common/api.js' 81 import * as api from '@/common/api.js'
113 import config from '@/config.js' 82 import config from '@/config.js'
114 import { 83 import {
115 onMounted, 84 onMounted,
116 ref 85 ref
117 } from 'vue' 86 } from 'vue'
118 import { 87 import {
119 onLoad 88 onLoad
120 } from '@dcloudio/uni-app' 89 } from '@dcloudio/uni-app'
121 const app = getApp();
122 const queryParams = ref({
123 // pageNum: 1,
124 // pageSize: 10
125 auditStatus: '0'
126 })
127 const navs = ref(['审核中', '审核通过', '审核拒绝', '撤回'])
128 const current = ref()
129 const list = ref([])
130 const total = ref(0)
131 const deptType = ref('')
132 const userType = ref('')
133 const totalCost = ref(0)
134 onLoad(() => {
135 if (app.globalData.isLogin) {
136 init()
137 } else {
138 90
139 app.firstLoadCallback = () => { 91 const app = getApp();
140 init() 92 const queryParams = ref({
141 }; 93 auditStatus: '1'
142 } 94 })
143 }) 95 const navs = ref(['审核中', '审核通过', '审核拒绝'])
96 const current = ref()
97 const list = ref([])
98 const total = ref(0)
99 const deptType = ref('')
100 const userType = ref('')
101 const totalCost = ref(0)
102 const statistical = ref({})
103 onLoad(() => {
104 if (app.globalData.isLogin) {
105 init()
106 } else {
107
108 app.firstLoadCallback = () => {
109 init()
110 };
111 }
112 })
144 113
145 function init() { 114 function init() {
146 deptType.value = app.globalData.deptType 115 deptType.value = app.globalData.deptType
147 userType.value = app.globalData.userType 116 userType.value = app.globalData.userType
148 // console.log(userType.value) 117 // console.log(userType.value)
149 getList() 118 getList()
150 } 119 }
151 120
152 function onClickItem(e) { 121 function onClickItem(e) {
153 console.log(e) 122 queryParams.value.auditStatus = e.currentIndex + 1
154 queryParams.value.auditStatus = e.currentIndex 123 getList()
155 getList() 124 }
156 }
157 125
158 function getList() { 126 async function getList() {
159 uni.showLoading({ 127 uni.showLoading({
160 title: '加载中', 128 title: '加载中',
161 mask: true 129 mask: true
162 }) 130 })
163 if (deptType.value == 2 || deptType.value == 3) { 131 statistical.value = {
164 // 省 132 allCount: 0,
165 queryParams.value.mergeFlag = 0 133 totalCost: 0,
166 } else if (deptType.value == 1) { 134 renewYear: 0,
167 queryParams.value.noEmpty = 1 135 newCount: 0
168 } else if (deptType.value == 4 || deptType.value == 5) { 136 }
169 queryParams.value.noEmpty = 1 137 const res = await api.listNewAPI(queryParams.value)
170 } 138 list.value = res.rows
171 totalCost.value = 0 139 for (const val of list.value) {
172 api.getGroupList(queryParams.value).then(res => { 140 statistical.value.renewYear += val.renewYear
173 uni.hideLoading() 141 statistical.value.totalCost += val.finalPrice * 1
174 list.value = res.rows 142 if (val.isNew == 1) {
175 list.value.forEach(item => { 143 statistical.value.newCount += 1
176 item.content = JSON.parse(item.content) 144 }
177 if(item.doc){ 145 statistical.value.allCount += 1
178 item.doc = JSON.parse(item.doc) 146 }
179 } 147 total.value = res.total
180 totalCost.value = totalCost.value + (item.content.allFee * 1) 148 }
181 })
182 total.value = res.total
183 })
184 }
185 149
186 function audit(recordId, flag) { 150 function audit(recordId, flag) {
187 if (flag == '0') { 151 if (flag == '0') {
188 // 拒绝 152 // 拒绝
189 // 弹出框填写理由 153 // 弹出框填写理由
190 uni.showModal({ 154 uni.showModal({
191 title: '请输入拒绝理由', 155 title: '请输入拒绝理由',
192 editable: true, 156 editable: true,
193 success: function(res) { 157 success: function (res) {
194 if (res.confirm) { 158 if (res.confirm) {
195 if (!res.content) { 159 if (!res.content) {
196 uni.showToast({ 160 uni.showToast({
197 title: '请输入拒绝理由', 161 title: '请输入拒绝理由',
198 icon: 'none' 162 icon: 'none'
199 }) 163 })
200 } else { 164 } else {
201 doApproval(recordId, flag, res.content) 165 doApproval(recordId, flag, res.content)
202 } 166 }
203 } 167 }
204 } 168 }
205 }) 169 })
206 } else if (flag == '1') { 170 } else if (flag == '1') {
207 // 二次确认 171 // 二次确认
208 uni.showModal({ 172 uni.showModal({
209 title: '提示', 173 title: '提示',
210 content: `确定审批通过吗`, 174 content: `确定审批通过吗`,
211 success: function(res) { 175 success: function (res) {
212 if (res.confirm) { 176 if (res.confirm) {
213 doApproval(recordId, flag) 177 doApproval(recordId, flag)
214 } 178 }
215 } 179 }
216 }) 180 })
217 } 181 }
218 } 182 }
219 183
220 function doApproval(recordId, flag, reason) { 184 function doApproval(recordId, flag, reason) {
221 var obj = { 185 let obj = {
222 flag: flag, 186 flag: flag,
223 reason: reason || '', 187 reason: reason || '',
224 recordIds: [] 188 ids: []
225 } 189 }
226 obj.recordIds.push(recordId) 190 obj.ids.push(recordId)
227 console.log(obj) 191 console.log(obj)
228 uni.showLoading({ 192 uni.showLoading({
229 title: '加载中', 193 title: '加载中',
230 mask: true 194 mask: true
231 }) 195 })
232 api.groupAudit(obj).then((res) => { 196 api.ztxAudit(obj).then((res) => {
233 uni.hideLoading() 197 uni.hideLoading()
234 uni.showToast({ 198 uni.showToast({
235 title: '操作成功', 199 title: '操作成功',
236 icon: 'none' 200 icon: 'none'
237 }) 201 })
238 getList() 202 getList()
239 }) 203 })
240 } 204 }
241 205
242 function goDetail(item) { 206 function goDetail(item) {
243 const auditLog = encodeURIComponent(JSON.stringify(item.auditLog)) 207 const form = encodeURIComponent(JSON.stringify(item))
244 const form = encodeURIComponent(JSON.stringify(item)) 208 if (userType.value == '1') {
209 // 查看
210 let path = `/group/apply/mergeUpDetail?form=${form}`
211 uni.navigateTo({
212 url: path
213 });
214 }
215
216 if (userType.value == '2' || userType.value == '3') {
217 // 审核记录
218 let path = `/group/apply/record?certId=${item.content.certId}`
219 uni.navigateTo({
220 url: path
221 });
222 }
223 }
245 224
246 if (userType.value == '1') { 225 function goMerge() {
247 // 查看 226 let path = `/group/apply/merge`
248 let path = `/group/apply/mergeUpDetail?form=${form}` 227 uni.redirectTo({
249 uni.navigateTo({ 228 url: path
250 url: path 229 });
251 }); 230 }
252 } else if (userType.value == '2' || userType.value == '3') {
253 // 审核记录
254 let path = `/group/apply/record?certId=${item.content.certId}`
255 uni.navigateTo({
256 url: path
257 });
258 }
259 }
260 231
261 function goMerge() { 232 function goMergeUp() {
262 let path = `/group/apply/merge` 233 let path = `/group/apply/mergeUp`
263 uni.redirectTo({ 234 uni.redirectTo({
264 url: path 235 url: path
265 }); 236 });
266 } 237 }
267 238
268 function goMergeUp() { 239 function sendBack(row) {
269 let path = `/group/apply/mergeUp` 240 uni.showModal({
270 uni.redirectTo({ 241 title: '提示',
271 url: path 242 content: `确定撤回${row.content.certName}吗`,
272 }); 243 success: function (res) {
273 } 244 if (res.confirm) {
245 api.certifiedwithDraw({
246 recordId: row.recordId,
247 reason: row.reason
248 }).then(res => {
249 uni.showToast({
250 title: '操作成功',
251 icon: 'none'
252 })
253 getList()
254 })
255
256 }
257 }
258 })
259 }
274 260
275 function sendBack(row) { 261 function goGroupInfo(row) {
276 uni.showModal({ 262 uni.navigateTo({
277 title: '提示', 263 url: `/group/groupInfo?memId=${row.memId}`
278 content: `确定撤回${row.content.certName}吗`, 264 })
279 success: function(res) { 265 }
280 if (res.confirm) {
281 api.certifiedwithDraw({
282 recordId: row.recordId,
283 reason: row.reason
284 }).then(res => {
285 uni.showToast({
286 title: '操作成功',
287 icon: 'none'
288 })
289 getList()
290 })
291 266
292 } 267 function viewSettleFile(doc) {
293 } 268 let url
294 }) 269 if (doc.payEvidence) {
295 } 270 url = JSON.parse(doc.payEvidence)[0].url || null
271 console.log(url)
272 if (url) {
273 showImg(url)
274 }
275 }
276 }
296 277
297 function goGroupInfo(row) { 278 function showImg(n) {
298 uni.navigateTo({ 279 var str = ''
299 url: `/group/groupInfo?memId=${row.content?.memId}` 280 if (n.indexOf('http') == -1) {
300 }) 281 str = config.baseUrl_api + n
301 } 282 } else {
302 283 str = n
303 function viewSettleFile(doc){ 284 }
304 let url 285
305 if(doc.payEvidence){ 286 if (n.indexOf('png') > -1 || n.indexOf('jpg') > -1 || n.indexOf(
306 url = JSON.parse(doc.payEvidence)[0].url || null 287 'jpeg') > -1) {
307 console.log(url) 288 uni.previewImage({
308 if(url){showImg(url)} 289 urls: [str],
309 } 290 success: function (res) {
310 } 291 console.log('success', res)
311 function showImg(n) { 292 },
312 var str = '' 293 fail: function (res) {
313 if(n.indexOf('http')==-1){ 294 console.log('fail', res)
314 str = config.baseUrl_api + n 295 },
315 } else { 296 complete: function (res) {
316 str = n 297 console.log('complete', res)
317 } 298 }
318 299 })
319 if (n.indexOf('png') > -1 || n.indexOf('jpg') > -1 || n.indexOf( 300 } else {
320 'jpeg') > -1) { 301 goWebView(str)
321 uni.previewImage({ 302 }
322 urls: [str], 303 }
323 success: function(res) { 304
324 console.log('success', res) 305 function goWebView(url) {
325 }, 306 url = url.replace("http://", "https://")
326 fail: function(res) { 307 uni.showLoading({
327 console.log('fail', res) 308 title: '下载中'
328 }, 309 });
329 complete: function(res) { 310 uni.downloadFile({
330 console.log('complete', res) 311 url: url,
331 } 312 success: function (res) {
332 }) 313 uni.hideLoading();
333 } else { 314 var filePath = res.tempFilePath;
334 goWebView(str) 315 uni.showLoading({
335 } 316 title: '正在打开'
336 } 317 });
337 function goWebView(url) { 318 uni.openDocument({
338 url = url.replace("http://", "https://") 319 filePath: filePath,
339 uni.showLoading({ 320 showMenu: true,
340 title: '下载中' 321 success: function (res) {
341 }); 322 uni.hideLoading();
342 uni.downloadFile({ 323 },
343 url: url, 324 fail: function (err) {
344 success: function(res) { 325 uni.hideLoading();
345 uni.hideLoading(); 326 uni.showToast({
346 var filePath = res.tempFilePath; 327 title: err,
347 uni.showLoading({ 328 icon: 'none',
348 title: '正在打开' 329 duration: 2000
349 }); 330 });
350 uni.openDocument({ 331 }
351 filePath: filePath, 332 });
352 showMenu: true, 333 },
353 success: function(res) { 334 fail: function (error) {
354 uni.hideLoading(); 335 uni.hideLoading();
355 }, 336 uni.showToast({
356 fail: function(err) { 337 title: `下载失败`,
357 uni.hideLoading(); 338 icon: 'none',
358 uni.showToast({ 339 duration: 2000
359 title: err, 340 });
360 icon: 'none', 341 }
361 duration: 2000 342 });
362 }); 343 }
363 }
364 });
365 },
366 fail: function(error) {
367 uni.hideLoading();
368 uni.showToast({
369 title: `下载失败`,
370 icon: 'none',
371 duration: 2000
372 });
373 }
374 });
375 }
376 </script> 344 </script>
377 345
378 <style scoped> 346 <style scoped>
379 .mt0 { 347 .mt0 {
380 margin-top: 0 !important; 348 margin-top: 0 !important;
381 } 349 }
350
351 .appList .appItem .name {
352 width: 80%;
353 word-break: break-all;
354 }
355
356 .name {
357 margin-bottom: 10rpx !important;
358 }
382 359
383 .appList .appItem .name {
384 width: 80%;
385 word-break: break-all;
386 }
387 </style>
...\ No newline at end of file ...\ No newline at end of file
360 .text {
361 font-size: 26rpx;
362 color: #999;
363 margin-bottom: 10rpx;
364 }
365 </style>
......
1 <template> 1 <template>
2 <view class="hasfixedbottom"> 2 <view class="hasfixedbottom">
3 <view class="wBox"> 3 <view class="wBox">
4 <view class="tt">{{form.content?.certName}}</view> 4 <view class="tt">{{ form?.certName }}</view>
5 <view> 5 <view>
6 <view class="date" v-if="form.content?.commitTime">提交日期:<text>{{ form.content?.commitTime }}</text> 6 <view v-if="form.commitTime" class="date">提交日期:
7 </view> 7 <text>{{ form?.commitTime }}</text>
8 <view class="date">提交单位:<text>{{ form.content?.memberName }}</text> </view> 8 </view>
9 </view> 9 <view class="date">提交单位:
10 <view class="vipData mt30" style="flex-wrap: wrap;padding: 20rpx;"> 10 <text>{{ form?.memName }}</text>
11 <view class="w50"> 11 </view>
12 团队会员合计: 12 </view>
13 <text>{{ form.content?.allCount }}</text> 13 <view class="vipData mt30" style="flex-wrap: wrap;padding: 20rpx;">
14 </view> 14 <view class="w50">
15 <view class="w50"> 15 年限合计:
16 新会员合计: 16 <text>{{ form?.renewYear }}</text>
17 <text>{{ form.content?.newCount }}</text> 17 </view>
18 </view> 18 <view class="w50">
19 <view class="w50"> 19 费用合计:
20 年限合计: 20 <text>{{ form?.allPrice }}</text>
21 <text>{{ form.content?.renewYear }}</text> 21 </view>
22 </view> 22 <view class="w50">
23 <view class="w50"> 23 政策优惠:
24 费用合计: 24 <text>{{ form?.discount }}</text>
25 <text>{{ (form.content?.allFee*1).toFixed(2) }}</text> 25 </view>
26 </view> 26 <view class="w50">
27 </view> 27 付款费用:
28 28 <text>{{ (form?.finalPrice * 1).toFixed(2) }}</text>
29 <!-- 成员 --> 29 </view>
30 <view class="userlist"> 30 </view>
31 <view class="item" style="padding: 20rpx 0 0;" v-for="(n,index) in list" :key="index" @click="goGroupInfo(n)"> 31
32 <view style="width: 100%"> 32 <!-- 成员 -->
33 <view class="name text-primary underLine">{{n.memberName}}</view> 33 <view class="userlist">
34 <view class="date">单位类型: 34 <view v-for="(n,index) in list" :key="index" class="item" style="padding: 20rpx 0 0;" @click="goGroupInfo(n)">
35 <text v-if="n.deptType==2">一级协会</text> 35 <view style="width: 100%">
36 <text v-if="n.deptType==3">直属协会</text> 36 <view class="name text-primary underLine">{{ n.memberName }}</view>
37 <text v-if="n.deptType==4">二级协会</text> 37 <!-- <view class="date">单位类型:-->
38 <text v-if="n.deptType==5">三级协会</text> 38 <!-- <text v-if="n.deptType==2">一级协会</text>-->
39 <text v-if="n.deptType==6">职业性单位会员</text> 39 <!-- <text v-if="n.deptType==3">直属协会</text>-->
40 </view> 40 <!-- <text v-if="n.deptType==4">二级协会</text>-->
41 <view class="flexbox" style="background-color: rgba(244, 249, 253, 1);padding:10rpx;"> 41 <!-- <text v-if="n.deptType==5">三级协会</text>-->
42 <view> 42 <!-- <text v-if="n.deptType==6">职业性单位会员</text>-->
43 <view> 43 <!-- </view>-->
44 原有效期 44 <view class="flexbox" style="background-color: rgba(244, 249, 253, 1);padding:10rpx;">
45 <text>{{n.validityTime?.slice(0,10)||'-'}}</text> 45 <view>
46 </view> 46 <view>
47 <view> 47 原有效期
48 提交日期 48 <text>{{ n.originValidityTime?.slice(0, 10) || '-' }}</text>
49 <text>{{n.commitTime?.slice(0,10)||'-'}}</text> 49 </view>
50 </view> 50 <view>
51 </view> 51 提交日期
52 <view> 52 <text>{{ n.commitTime?.slice(0, 10) || '-' }}</text>
53 年限 53 </view>
54 <text>{{n.renewYear}}</text> 54 </view>
55 <view v-if="deptType==1"> 55 <view>
56 会员证 56 年限
57 <text v-if="form.content?.sendJiaoFeiFlag==1" class="text-success">已下发</text> 57 <text>{{ n.renewYear }}</text>
58 <text v-else class="text-warning">未下发</text> 58 </view>
59 </view> 59 <view>
60 </view> 60 费用
61 <view> 61 <text>¥{{ n.unitPrice }}</text>
62 单价 62 <view>总价
63 <text>¥{{n.unitPrice}}</text> 63 <text>¥{{ n.finalPrice }}</text>
64 <view>总价 64 </view>
65 <text>¥{{n.allFee}}</text> 65 </view>
66 </view> 66 </view>
67 </view> 67 </view>
68 </view> 68 </view>
69 </view> 69 </view>
70 </view> 70
71 </view> 71 </view>
72 72
73 </view> 73 <view class="h3-padding">审核记录</view>
74 74 <view class="wBox">
75 <view class="h3-padding">审核记录</view> 75 <view v-for="(n,index) in auditList" :key="index" class="stepItem">
76 <view class="wBox"> 76 <view class="time">{{ form.auditTime || '待审批' }}</view>
77 <view class="stepItem" v-for="(n,index) in auditList" :key="index"> 77 <view class="content">
78 <view class="time">{{n.handleDate||'待审批'}}</view> 78 <view class="status">
79 <view class="content"> 79 <text v-if="n.auditResult==1" class="text-success">审核通过</text>
80 <view class="status"> 80 <text v-if="n.auditResult!=1" class="text-danger"> 审核拒绝</text>
81 <text v-if="n.auditStatus==1" class="text-success">审核通过</text> 81 </view>
82 <text v-if="n.auditStatus==2" class="text-danger"> 审核拒绝</text> 82 <view class="name">{{ n.auditDeptName }}</view>
83 <text v-if="n.auditStatus==0" class="text-primary"> 审核中</text> 83 <!-- <view class="name">{{ index + 1 }}</view>-->
84 <text v-if="n.auditStatus==3" class="text-warning">已撤回</text> 84 <view class="deptName">{{ n.index }}</view>
85 <text v-if="n.auditStatus==100" class="text-primary">审核中</text> 85 <view v-if="n.auditMsg">
86 86 备注:{{ n.auditMsg || '/' }}
87 </view> 87 </view>
88 <!-- <view class="name">{{index+1}}</view> --> 88 </view>
89 <view class="deptName">{{n.handlerDeptName}}</view> 89 </view>
90 <view v-if="n.reason"> 90 </view>
91 备注:{{n.reason||'/' }} 91 </view>
92 </view>
93 </view>
94 </view>
95 </view>
96
97 <!-- <view class="fixedBottom" v-if="(deptType == 1)&&form.auditStatus == 0">
98 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
99 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
100 </view>
101
102 <view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.auditStatus == 0">
103 <button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
104 <button class="btn-red" @click="audit(form.id,'1')">同意</button>
105 </view> -->
106
107 </view>
108 </template> 92 </template>
109 93
110 <script setup> 94 <script setup>
111 import * as api from '@/common/api.js' 95 import * as api from '@/common/api.js'
112 import config from '@/config.js' 96 import {
113 import { 97 onMounted,
114 onMounted, 98 ref
115 ref 99 } from 'vue'
116 } from 'vue' 100 import {
117 import { 101 onLoad
118 onLoad 102 } from '@dcloudio/uni-app'
119 } from '@dcloudio/uni-app' 103 import {GroupGetLogs} from "@/common/api.js";
120 const app = getApp();
121 const queryParams = ref({
122 recordId: ''
123 })
124 104
125 const form = ref({}) 105 const app = getApp();
126 const list = ref([]) 106 const queryParams = ref({
127 const listArr = ref([]) 107 recordId: ''
128 const id = ref() 108 })
129 const auditList = ref([])
130 109
131 const feelList = ref([]) 110 const form = ref({})
132 const total = ref(0) 111 const list = ref([])
133 const totalYear = ref(0) 112 const listArr = ref([])
134 const deptType = ref() 113 const id = ref()
135 let rangeId = '' 114 const auditList = ref([])
136 onLoad((option) => {
137 if ('form' in option) {
138 form.value = JSON.parse(decodeURIComponent(option.form))
139 }
140 list.value = form.content?.certifiedSimpleList || []
141 listArr.value = form.content?.certifiedSimpleList || []
142 queryParams.value.recordId = form.value.recordId
143 console.log(form.value)
144 if (app.globalData.isLogin) {
145 init()
146 } else {
147 115
148 app.firstLoadCallback = () => { 116 const feelList = ref([])
149 init() 117 const total = ref(0)
150 }; 118 const totalYear = ref(0)
151 } 119 const deptType = ref()
120 let rangeId = ''
121 onLoad((option) => {
122 if ('form' in option) {
123 form.value = JSON.parse(decodeURIComponent(option.form))
124 list.value = [form.value]
125 GetLogs()
126
127 }
128
129 console.log(form.value)
130 //
131 // list.value = form.content?.certifiedSimpleList || []
132 // listArr.value = form.content?.certifiedSimpleList || []
133 // queryParams.value.recordId = form.value.recordId
134 // console.log(form.value)
135 // if (app.globalData.isLogin) {
136 // init()
137 // } else {
138 //
139 // app.firstLoadCallback = () => {
140 // init()
141 // };
142 // }
143
144 })
152 145
153 }) 146 async function GetLogs() {
147 const res = await api.GroupGetLogs(form.value.id)
148 auditList.value = res.data
149 }
154 150
155 function init() { 151 function init() {
156 deptType.value = app.globalData.deptType 152 deptType.value = app.globalData.deptType
157 getForm() 153 getForm()
158 } 154 }
159 155
160 function getForm() { 156 function getForm() {
161 uni.showLoading({ 157 uni.showLoading({
162 title: '加载中' 158 title: '加载中'
163 }) 159 })
164 api.getDetailList(queryParams.value).then(res => { 160 api.getDetailList(queryParams.value).then(res => {
165 uni.hideLoading() 161 uni.hideLoading()
166 list.value = res.rows 162 list.value = res.rows
167 list.value[0].rangeId == 0 ? id.value = list.value[0].certId : id.value = list.value[0].rangeId 163 list.value[0].rangeId == 0 ? id.value = list.value[0].certId : id.value = list.value[0].rangeId
168 if (id.value) { 164 if (id.value) {
169 auditFN() 165 auditFN()
170 } 166 }
171 }) 167 })
172 } 168 }
173 169
174 function auditFN() { 170 function auditFN() {
175 api.getGroupHistoryByRelateId(id.value).then(res => { 171 api.getGroupHistoryByRelateId(id.value).then(res => {
176 auditList.value = res.data 172 auditList.value = res.data
177 }) 173 })
178 } 174 }
179 175
180 function audit(rangeId, flag) { 176 function audit(rangeId, flag) {
181 if (flag == '2') { 177 if (flag == '2') {
182 // 拒绝 178 // 拒绝
183 // 弹出框填写理由 179 // 弹出框填写理由
184 uni.showModal({ 180 uni.showModal({
185 title: '请输入拒绝理由', 181 title: '请输入拒绝理由',
186 editable: true, 182 editable: true,
187 success: function(res) { 183 success: function (res) {
188 if (res.confirm) { 184 if (res.confirm) {
189 if (!res.content) { 185 if (!res.content) {
190 uni.showToast({ 186 uni.showToast({
191 title: '请输入拒绝理由', 187 title: '请输入拒绝理由',
192 icon: 'none' 188 icon: 'none'
193 }) 189 })
194 } else { 190 } else {
195 doApproval(rangeId, flag, res.content) 191 doApproval(rangeId, flag, res.content)
196 } 192 }
197 } 193 }
198 } 194 }
199 }) 195 })
200 } else if (flag == '1') { 196 } else if (flag == '1') {
201 // 二次确认 197 // 二次确认
202 uni.showModal({ 198 uni.showModal({
203 title: '提示', 199 title: '提示',
204 content: `确定审批通过吗`, 200 content: `确定审批通过吗`,
205 success: function(res) { 201 success: function (res) {
206 if (res.confirm) { 202 if (res.confirm) {
207 doApproval(rangeId, flag) 203 doApproval(rangeId, flag)
208 } 204 }
209 } 205 }
210 }) 206 })
211 } 207 }
212 } 208 }
213 209
214 function doApproval(rangeId, flag, reason) { 210 function doApproval(rangeId, flag, reason) {
215 var obj = { 211 var obj = {
216 flag: flag, 212 flag: flag,
217 reason: reason || '', 213 reason: reason || '',
218 rangeIds: rangeIds 214 rangeIds: rangeIds
219 } 215 }
220 console.log(obj) 216 console.log(obj)
221 uni.showLoading({ 217 uni.showLoading({
222 title: '加载中' 218 title: '加载中'
223 }) 219 })
224 api.mobilizeAudit(obj).then((res) => { 220 api.mobilizeAudit(obj).then((res) => {
225 uni.hideLoading() 221 uni.hideLoading()
226 uni.showToast({ 222 uni.showToast({
227 title: '操作成功', 223 title: '操作成功',
228 icon: 'none' 224 icon: 'none'
229 }) 225 })
230 uni.navigateBack() 226 uni.navigateBack()
231 }) 227 })
232 } 228 }
233 function goGroupInfo(row){
234 uni.navigateTo({
235 url: `/group/groupInfo?memId=${row.memId}`
236 })
237 }
238 </script>
239 229
240 <style scoped lang="scss"> 230 function goGroupInfo(row) {
241 .date { 231 uni.navigateTo({
242 margin-top: 10rpx; 232 url: `/group/groupInfo?memId=${row.memId}`
243 font-size: 26rpx; 233 })
244 color: #999; 234 }
245 } 235 </script>
246
247 .wBox {
248 width: 700rpx;
249 padding: 30rpx;
250 margin: 20rpx auto 0;
251 background: #FFFFFF;
252 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
253 border-radius: 15rpx;
254
255 .tt {
256 color: #0A1629;
257 font-size: 30rpx;
258 }
259 }
260
261 .userlist {
262 .item {
263 border-bottom: 1px dashed #e5e5e5;
264 position: relative;
265
266 .date {
267 margin-top: 10rpx;
268 }
269
270 .name {
271 text {
272 margin-left: 1em;
273 color: #4C5359;
274 font-size: 26rpx;
275 }
276 }
277
278 .nian {
279 position: absolute;
280 right: 0;
281 font-size: 30rpx;
282 color: #AD181F;
283 }
284 }
285 }
286 236
287 .info { 237 <style lang="scss" scoped>
288 display: flex; 238 .date {
289 margin: 30rpx 0 20rpx; 239 margin-top: 10rpx;
290 font-size: 28rpx; 240 font-size: 26rpx;
241 color: #999;
242 }
291 243
292 view { 244 .wBox {
293 color: #7D8592; 245 width: 700rpx;
294 margin-right: 20rpx; 246 padding: 30rpx;
295 } 247 margin: 20rpx auto 0;
296 } 248 background: #FFFFFF;
249 box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
250 border-radius: 15rpx;
251
252 .tt {
253 color: #0A1629;
254 font-size: 30rpx;
255 }
256 }
297 257
298 .fixedBottom { 258 .userlist {
299 justify-content: center; 259 .item {
260 border-bottom: 1px dashed #e5e5e5;
261 position: relative;
262
263 .date {
264 margin-top: 10rpx;
265 }
266
267 .name {
268 text {
269 margin-left: 1em;
270 color: #4C5359;
271 font-size: 26rpx;
272 }
273 }
274
275 .nian {
276 position: absolute;
277 right: 0;
278 font-size: 30rpx;
279 color: #AD181F;
280 }
281 }
282 }
300 283
301 button { 284 .info {
302 margin: 0 20rpx; 285 display: flex;
303 width: 286rpx; 286 margin: 30rpx 0 20rpx;
304 } 287 font-size: 28rpx;
288
289 view {
290 color: #7D8592;
291 margin-right: 20rpx;
292 }
293 }
305 294
306 .btn-red {
307 width: 286rpx;
308 }
309 }
310 </style>
...\ No newline at end of file ...\ No newline at end of file
295 .fixedBottom {
296 justify-content: center;
297
298 button {
299 margin: 0 20rpx;
300 width: 286rpx;
301 }
302
303 .btn-red {
304 width: 286rpx;
305 }
306 }
307 </style>
......
1 <template> 1 <template>
2 <view class="audit-page"> 2 <view>
3 <!-- 顶部标签栏 --> 3 <!-- 团队会员审核 -->
4 <view class="tab-bar"> 4 <uni-segmented-control :current="current" :values="navs" activeColor="#AD181F" class="whitebg" styleType="text"
5 <view 5 @clickItem="onClickItem">
6 v-for="tab in tabs" 6
7 :key="tab.value" 7 </uni-segmented-control>
8 class="tab-item" 8 <view class="appList">
9 :class="{ active: currentTab === tab.value }" 9 <view v-show="statistical.totalCost>0" class="vipData">
10 @click="onTabChange(tab.value)" 10 <view>费用合计:
11 > 11 <text>¥{{ statistical.totalCost.toFixed(2) }}</text>
12 <text class="tab-text">{{ tab.label }}</text> 12 </view>
13 <view class="tab-indicator" v-if="currentTab === tab.value"></view>
14 </view>
15 </view>
16
17 <!-- 列表内容 -->
18 <scroll-view
19 scroll-y
20 class="list-content"
21 @scrolltolower="onLoadMore"
22 >
23 <view class="loading-wrap" v-if="loading && list.length === 0">
24 <uni-load-more status="loading"></uni-load-more>
25 </view>
26
27 <view class="empty-wrap" v-else-if="!loading && list.length === 0">
28 <uni-load-more status="noMore"></uni-load-more>
29 </view> 13 </view>
30 14
31 <view class="card-list" v-else> 15 <view v-for="(item,index) in list" :key="index" class="appItem">
32 <view 16 <view class="status" @click="goDetail(item)">
33 class="card-item" 17 <text v-if="item.shenAuditStatus == 1" class="text-primary">审核中</text>
34 v-for="item in list" 18 <text v-if="item.shenAuditStatus == 2" class="text-success">审核通过</text>
35 :key="item.recordId || item.id" 19 <text v-if="item.shenAuditStatus == 3" class="text-danger">审核拒绝</text>
36 @click="goDetail(item)" 20 </view>
37 > 21 <view class="date">
38 <view class="card-header"> 22 <uni-icons color="#AD181F" size="16" type="calendar-filled"></uni-icons>
39 <text class="company-name">{{ item.memName || '-' }}</text> 23 {{ item.commitTime }} 提交
40 <text class="status-badge" :class="getStatusClass(item.shenAuditStatus)"> 24 </view>
41 {{ getStatusText(item.shenAuditStatus) }} 25 <view v-if="item.wfCode">{{ item?.wfCode }}
42 </text> 26 </view>
43 </view> 27 <view class="name w100 mt0" @click="goDetail(item)">
44 28 {{ item.memName }}
45 <view class="card-body"> 29 </view>
46 <view class="info-row"> 30 <view class="text" @click="goDetail(item)">
47 <text class="label">所属协会</text> 31 {{ item.shenMemName }}
48 <text class="value">{{ item.shenMemName || '-' }}</text> 32 </view>
49 </view> 33 <view class="flexbox" @click="goDetail(item)">
50 <view class="info-row"> 34 <view>
51 <text class="label">会员编号</text> 35 新会员/年限
52 <text class="value">{{ item.wfCode || '-' }}</text> 36 <view>{{ item.isNew == 1 ? '是' : "否" }}
53 </view> 37 /{{ item.renewYear }}
54 <view class="info-row">
55 <text class="label">认证年限</text>
56 <text class="value">{{ item.renewYear ? item.renewYear + '年' : '-' }}</text>
57 </view>
58 <view class="info-row">
59 <text class="label">付款费用</text>
60 <text class="value text-red">¥{{ Number(item.finalPrice || 0).toFixed(2) }}</text>
61 </view> 38 </view>
62 <view class="info-row"> 39 </view>
63 <text class="label">提交日期</text> 40 <view>
64 <text class="value">{{ formatDate(item.commitTime) }}</text> 41 费用合计
42 <view> {{ (item.allPrice * 1).toFixed(2) }}</view>
43 </view>
44 <view>
45 政策优惠
46 <view>
47 <text class="text-danger"> {{ item.discount ? item.discount : '--' }}</text>
65 </view> 48 </view>
66 </view> 49 </view>
67 50 <view>
68 <view class="card-footer"> 51 付款费用
69 <view class="tag-row"> 52 <view>
70 <view class="tag" :class="item.isNew == 1 ? 'tag-new' : 'tag-renew'"> 53 <text class="text-warning"> ¥{{ item.finalPrice }}</text>
71 {{ item.isNew == 1 ? '新会员' : '续费' }}
72 </view>
73 </view> 54 </view>
74 <view class="btn-row"> 55 </view>
75 <view class="btn btn-default" @click.stop="goInstitutionInfo(item)">机构资料</view> 56 <view>
76 <view class="btn btn-primary" @click.stop="goAudit(item)" v-if="item.shenAuditStatus == 1">审核</view> 57 协会信息
58 <view>
59 <text :class="{'text-danger':item.checkPass == 0 }"> {{ item.checkPass == 0 ? '异常' : '正常' }}</text>
77 </view> 60 </view>
78 </view> 61 </view>
79 </view> 62 </view>
63 <view class="func">
64 <button @click="goGroupInfo(item)">机构资料</button>
65 <button v-if="queryParams.shenAuditStatus==1" @click="audit(item.id,'0')">拒绝</button>
66 <button v-if="queryParams.shenAuditStatus==1" @click="audit(item.id,'1')">同意</button>
67 </view>
80 </view> 68 </view>
81 69 </view>
82 <view class="load-more-wrap" v-if="list.length > 0"> 70
83 <uni-load-more :status="loadStatus"></uni-load-more> 71 <view v-if="list.length==0" class="nodata">
84 </view> 72 <image :src="config.baseUrl_api + '/fs/static/nodata.png'" mode="aspectFit"></image>
85 </scroll-view> 73 <text>暂无数据</text>
74 </view>
75 <!-- <view v-if="userType=='2'" class="block-btn-box">
76 <button @click="goMerge" class="btn-red-kx">前往合并 > </button>
77 </view> -->
86 </view> 78 </view>
87 </template> 79 </template>
88 80
89 <script setup> 81 <script setup>
90 import * as api from '@/common/api_exam.js' 82 import * as api from '@/common/api.js'
91 import { ref } from 'vue' 83 import config from '@/config.js'
92 import { onLoad } from '@dcloudio/uni-app' 84 import {
93 85 onMounted,
94 const tabs = [ 86 ref
95 { label: '全部', value: '' }, 87 } from 'vue'
96 { label: '审核中', value: '1' }, 88 import {
97 { label: '审核通过', value: '2' }, 89 onLoad
98 { label: '审核拒绝', value: '3' } 90 } from '@dcloudio/uni-app'
99 ] 91
100 92 const app = getApp();
101 const currentTab = ref('')
102 const list = ref([])
103 const loading = ref(false)
104 const loadStatus = ref('more')
105 const queryParams = ref({ 93 const queryParams = ref({
106 pageNum: 1, 94 shenAuditStatus: '1',
107 pageSize: 10, 95 mergeFlag: '0',
108 auditFlag:'1', 96 auditFlag: '1'
109
110 }) 97 })
111 98 const navs = ref(['审核中', '审核通过', '审核拒绝'])
99 const current = ref()
100 const list = ref([])
101 const total = ref(0)
102 const userType = ref('')
103 const totalCost = ref(0)
104 const statistical = ref({})
112 onLoad(() => { 105 onLoad(() => {
113 getList() 106 if (app.globalData.isLogin) {
107 init()
108 } else {
109
110 app.firstLoadCallback = () => {
111 init()
112 };
113 }
114 }) 114 })
115 115
116 function onTabChange(value) { 116 function init() {
117 currentTab.value = value 117 userType.value = app.globalData.userType
118 list.value = [] 118 // console.log(userType.value)
119 queryParams.value.pageNum = 1
120 getList() 119 getList()
121 } 120 }
122 121
123 function getList() { 122 function onClickItem(e) {
124 if (loading.value) return 123 queryParams.value.shenAuditStatus = e.currentIndex + 1
125 loading.value = true
126 loadStatus.value = 'loading'
127
128 const params = {
129 ...queryParams.value,
130 shenAuditStatus: currentTab.value
131 }
132
133 api.certifiedNewList(params).then(res => {
134 if (res.rows) {
135 if (queryParams.value.pageNum === 1) {
136 list.value = res.rows
137 } else {
138 list.value = [...list.value, ...res.rows]
139 }
140 loadStatus.value = res.rows.length >= queryParams.value.pageSize ? 'more' : 'noMore'
141 } else {
142 list.value = []
143 loadStatus.value = 'noMore'
144 }
145 }).catch(err => {
146 console.error('获取会员审核列表失败', err)
147 loadStatus.value = 'noMore'
148 }).finally(() => {
149 loading.value = false
150 })
151 }
152
153 function onLoadMore() {
154 if (loadStatus.value === 'noMore' || loading.value) return
155 queryParams.value.pageNum++
156 getList() 124 getList()
157 } 125 }
158 126
159 function getStatusText(status) { 127 async function getList() {
160 const map = { 1: '审核中', 2: '审核通过', 3: '审核拒绝', 4: '已撤回' } 128 uni.showLoading({
161 return map[status] || '-' 129 title: '加载中',
130 mask: true
131 })
132 statistical.value = {
133 allCount: 0,
134 totalCost: 0,
135 renewYear: 0,
136 newCount: 0
137 }
138 const res = await api.listNewAPI(queryParams.value)
139 list.value = res.rows
140 for (const val of list.value) {
141 statistical.value.renewYear += val.renewYear
142 statistical.value.totalCost += val.finalPrice * 1
143 if (val.isNew == 1) {
144 statistical.value.newCount += 1
145 }
146 statistical.value.allCount += 1
147 }
148 total.value = res.total
162 } 149 }
163 150
164 function getStatusClass(status) { 151 function audit(recordId, flag) {
165 const map = { 152 if (flag == '0') {
166 1: 'status-warning', 153 // 拒绝
167 2: 'status-success', 154 // 弹出框填写理由
168 3: 'status-danger', 155 uni.showModal({
169 4: 'status-gray' 156 title: '请输入拒绝理由',
157 editable: true,
158 success: function (res) {
159 if (res.confirm) {
160 if (!res.content) {
161 uni.showToast({
162 title: '请输入拒绝理由',
163 icon: 'none'
164 })
165 } else {
166 doApproval(recordId, flag, res.content)
167 }
168 }
169 }
170 })
171 } else if (flag == '1') {
172 // 二次确认
173 uni.showModal({
174 title: '提示',
175 content: `确定审批通过吗`,
176 success: function (res) {
177 if (res.confirm) {
178 doApproval(recordId, flag)
179 }
180 }
181 })
170 } 182 }
171 return map[status] || ''
172 } 183 }
173 184
174 function formatDate(dateStr) { 185 function doApproval(recordId, flag, reason) {
175 if (!dateStr) return '-' 186 let obj = {
176 if (typeof dateStr === 'string' && dateStr.indexOf('T') > -1) { 187 flag: flag,
177 return dateStr.slice(0, 10) 188 reason: reason || '',
189 ids: []
178 } 190 }
179 return dateStr 191 obj.ids.push(recordId)
192 console.log(obj)
193 uni.showLoading({
194 title: '加载中',
195 mask: true
196 })
197 api.shenAudit(obj).then((res) => {
198 uni.hideLoading()
199 uni.showToast({
200 title: '操作成功',
201 icon: 'none'
202 })
203 getList()
204 })
180 } 205 }
181 206
182 function goDetail(item) { 207 function goDetail(item) {
208 const form = encodeURIComponent(JSON.stringify(item))
209 let path = `/group/apply/mergeUpDetail?form=${form}`
183 uni.navigateTo({ 210 uni.navigateTo({
184 url: `/group/groupOrderDetail?form=${encodeURIComponent(JSON.stringify(item))}` 211 url: path
185 }) 212 });
186 } 213 }
187 214
188 function goInstitutionInfo(item) { 215 function goGroupInfo(row) {
189 uni.navigateTo({ 216 uni.navigateTo({
190 url: `/level/ztx/institutionInfo?memId=${item.memId}` 217 url: `/group/groupInfo?memId=${row.memId}`
191 }) 218 })
192 } 219 }
193 220
194 function goAudit(item) { 221 function showImg(n) {
195 uni.navigateTo({ 222 var str = ''
196 url: `/level/ztx/memberAuditPage?type=single&ids=${item.recordId || item.id}` 223 if (n.indexOf('http') == -1) {
197 }) 224 str = config.baseUrl_api + n
198 } 225 } else {
199 </script> 226 str = n
200 227 }
201 <style lang="scss" scoped> 228
202 .audit-page { 229 if (n.indexOf('png') > -1 || n.indexOf('jpg') > -1 || n.indexOf(
203 min-height: 100vh; 230 'jpeg') > -1) {
204 background-color: #f5f5f5; 231 uni.previewImage({
205 } 232 urls: [str],
206 233 success: function (res) {
207 .tab-bar { 234 console.log('success', res)
208 display: flex; 235 },
209 background-color: #fff; 236 fail: function (res) {
210 padding: 0 20rpx; 237 console.log('fail', res)
211 position: sticky; 238 },
212 top: 0; 239 complete: function (res) {
213 z-index: 100; 240 console.log('complete', res)
214
215 .tab-item {
216 flex: 1;
217 display: flex;
218 flex-direction: column;
219 align-items: center;
220 padding: 24rpx 0;
221 position: relative;
222
223 .tab-text {
224 font-size: 28rpx;
225 color: #666;
226 }
227
228 .tab-indicator {
229 position: absolute;
230 bottom: 0;
231 left: 50%;
232 transform: translateX(-50%);
233 width: 80rpx;
234 height: 6rpx;
235 background-color: #AD181F;
236 border-radius: 3rpx;
237 }
238
239 &.active {
240 .tab-text {
241 color: #AD181F;
242 font-weight: 600;
243 } 241 }
244 } 242 })
243 } else {
244 goWebView(str)
245 } 245 }
246 } 246 }
247 247
248 .list-content { 248 function goWebView(url) {
249 height: calc(100vh - 100rpx); 249 url = url.replace("http://", "https://")
250 padding: 20rpx; 250 uni.showLoading({
251 box-sizing: border-box; 251 title: '下载中'
252 } 252 });
253 253 uni.downloadFile({
254 .loading-wrap, 254 url: url,
255 .empty-wrap { 255 success: function (res) {
256 padding: 100rpx 0; 256 uni.hideLoading();
257 text-align: center; 257 var filePath = res.tempFilePath;
258 } 258 uni.showLoading({
259 259 title: '正在打开'
260 .card-list { 260 });
261 .card-item { 261 uni.openDocument({
262 background-color: #fff; 262 filePath: filePath,
263 border-radius: 16rpx; 263 showMenu: true,
264 padding: 30rpx; 264 success: function (res) {
265 margin-bottom: 20rpx; 265 uni.hideLoading();
266 box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.05); 266 },
267 267 fail: function (err) {
268 .card-header { 268 uni.hideLoading();
269 display: flex; 269 uni.showToast({
270 justify-content: space-between; 270 title: err,
271 align-items: center; 271 icon: 'none',
272 margin-bottom: 24rpx; 272 duration: 2000
273 padding-bottom: 20rpx; 273 });
274 border-bottom: 1rpx solid #f0f0f0;
275
276 .company-name {
277 font-size: 32rpx;
278 font-weight: 600;
279 color: #333;
280 flex: 1;
281 margin-right: 20rpx;
282 }
283
284 .status-badge {
285 font-size: 24rpx;
286 padding: 6rpx 16rpx;
287 border-radius: 20rpx;
288 flex-shrink: 0;
289
290 &.status-warning {
291 background-color: #fff7e6;
292 color: #fa8c16;
293 }
294
295 &.status-success {
296 background-color: #f6ffed;
297 color: #52c41a;
298 }
299
300 &.status-danger {
301 background-color: #fff1f0;
302 color: #f5222d;
303 } 274 }
304 275 });
305 &.status-gray { 276 },
306 background-color: #f5f5f5; 277 fail: function (error) {
307 color: #999; 278 uni.hideLoading();
308 } 279 uni.showToast({
309 } 280 title: `下载失败`,
281 icon: 'none',
282 duration: 2000
283 });
310 } 284 }
285 });
286 }
287 </script>
311 288
312 .card-body { 289 <style scoped>
313 .info-row { 290 .mt0 {
314 display: flex; 291 margin-top: 0 !important;
315 justify-content: space-between; 292 }
316 padding: 12rpx 0;
317
318 .label {
319 font-size: 26rpx;
320 color: #999;
321 flex-shrink: 0;
322 }
323
324 .value {
325 font-size: 26rpx;
326 color: #333;
327 text-align: right;
328 flex: 1;
329 margin-left: 20rpx;
330 }
331
332 .text-red {
333 color: #AD181F;
334 }
335 }
336 }
337
338 .card-footer {
339 display: flex;
340 justify-content: space-between;
341 align-items: center;
342 margin-top: 20rpx;
343 padding-top: 20rpx;
344 border-top: 1rpx solid #f0f0f0;
345
346 .tag-row {
347 display: flex;
348 gap: 12rpx;
349
350 .tag {
351 font-size: 24rpx;
352 padding: 6rpx 16rpx;
353 border-radius: 20rpx;
354 font-weight: 500;
355
356 &.tag-new {
357 background-color: rgba(#AD181F, 0.1);
358 color: #AD181F;
359 }
360
361 &.tag-renew {
362 background-color: rgba(#999, 0.1);
363 color: #666;
364 }
365 }
366 }
367
368 .btn-row {
369 display: flex;
370 gap: 16rpx;
371
372 .btn {
373 font-size: 26rpx;
374 padding: 12rpx 24rpx;
375 border-radius: 8rpx;
376 }
377 293
378 .btn-default { 294 .appList .appItem .name {
379 background-color: #f5f5f5; 295 width: 80%;
380 color: #666; 296 word-break: break-all;
381 } 297 }
382 298
383 .btn-primary { 299 .name {
384 background-color: #AD181F; 300 margin-bottom: 10rpx !important;
385 color: #fff;
386 }
387 }
388 }
389 }
390 } 301 }
391 302
392 .load-more-wrap { 303 .text {
393 padding: 20rpx 0; 304 font-size: 26rpx;
394 text-align: center; 305 color: #999;
306 margin-bottom: 10rpx;
395 } 307 }
396 </style> 308 </style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!