c450dde1 by 杨炀

no message

1 parent b4b5f990
Showing 129 changed files with 1971 additions and 753 deletions
......@@ -59,7 +59,10 @@ function uploadImg(e) {
title: '加载中'
});
return uni.uploadFile({
url: config.baseUrl_api + '/upload/uploadImg',
url: config.baseUrl_api + '/upload/uploadImgToLocalServer',
header: {
'Authorization': uni.getStorageSync('token'),
},
filePath: imgUrl,
name: 'image'
}).then(res => {
......@@ -292,6 +295,7 @@ function getLevelApplyInfo(examId) {
method: 'get'
})
}
function getStudentList(query) {
return request({
url: '/exam/person/studentList',
......@@ -299,6 +303,7 @@ function getStudentList(query) {
params: query
})
}
function getApprovalRecord(examId) {
return request({
url: '/exam/info/verity/steps',
......@@ -308,6 +313,7 @@ function getApprovalRecord(examId) {
}
})
}
function submitVerity(examId) {
return request({
url: '/exam/info/submitVerity',
......@@ -317,6 +323,7 @@ function submitVerity(examId) {
}
})
}
function getCoachList(params) {
return request({
url: '/person/info/coachList',
......@@ -340,6 +347,7 @@ function addLevelInfo(data) {
params: data
})
}
function chooseStudentsList(query) {
return request({
url: '/person/info/chooseStudentsList',
......@@ -347,6 +355,7 @@ function chooseStudentsList(query) {
params: query
})
}
function batchChoose(data) {
return request({
url: '/exam/person/batch/choose',
......@@ -354,6 +363,7 @@ function batchChoose(data) {
params: data
})
}
function editLevel(data) {
return request({
url: '/exam/person/editLevel',
......@@ -361,6 +371,7 @@ function editLevel(data) {
params: data
})
}
function getVerityList(params) {
return request({
url: '/exam/info/verityList',
......@@ -368,6 +379,14 @@ function getVerityList(params) {
params: params
})
}
export function getPerVerityList(params) {
return request({
url: '/person/paymentRange/verifyList',
method: 'get',
params: params
})
}
function getGroupHistoryByRelateId(id) {
return request({
url: `/member/certified/getHistoryByRelateId/${id}`,
......@@ -379,9 +398,10 @@ function createMyMember(data) {
return request({
url: '/member/info/createMyMember',
method: 'post',
params:data
params: data
})
}
function doVerity(data) {
return request({
url: `/exam/info/verity`,
......@@ -389,6 +409,7 @@ function doVerity(data) {
params: data
})
}
function mergeRecords(data) {
return request({
url: '/exam/info/mergeRecords',
......@@ -396,6 +417,8 @@ function mergeRecords(data) {
params: data
})
}
function groupAudit(data) {
return request({
url: '/member/certified/audit',
......@@ -403,20 +426,23 @@ function groupAudit(data) {
params: data
})
}
function groupMergeApi(data) {
return request({
url: `/member/certified/merge`,
method: 'post',
params:data
params: data
})
}
function getDetailList(data) {
function getDetailList(data) {
return request({
url: `/member/certified/getDetailList`,
method: 'get',
params: data
})
}
function getPayList(data) {
return request({
url: `/member/certifiedRange/list`,
......@@ -424,18 +450,21 @@ function getPayList(data) {
params: data
})
}
function getFillAuditLog(rangeId) {
return request({
url: `/member/certifiedRange/fillAuditLog/${rangeId}`,
method: 'get'
})
}
function commitGroupPay(rangeId) {
return request({
url: `/member/certifiedRange/commit/${rangeId}`,
method: 'post'
})
}
function getGroupFeeBill(query) {
return request({
url: '/member/certifiedDoc/list',
......@@ -443,6 +472,7 @@ function getGroupFeeBill(query) {
params: query
})
}
function groupCommitPaymentVoucher(data) {
return request({
url: '/member/certifiedDoc/commitPaymentVoucher',
......@@ -450,12 +480,21 @@ function groupCommitPaymentVoucher(data) {
params: data
})
}
function submitPayment(data) {
return request({
url: '/exam/payment',
method: 'put',
params: data
})
}
function getFeeBillById(id) {
return request({
url: `/member/certifiedDoc/${id}`,
method: 'get'
})
}
function personalCommit(id) {
return request({
url: `/person/paymentRange/commit/${id}`,
......@@ -463,12 +502,20 @@ function personalCommit(id) {
params: id
})
}
function delPayment(payIds) {
return request({
url: `/person/payment/${payIds}`,
method: 'DELETE'
})
}
function paymentDel(payIds) {
return request({
url: `/person/paymentRange/${payIds}`,
method: 'DELETE'
})
}
function delcertified(ids) {
return request({
url: `/member/certified/${ids}`,
......@@ -480,14 +527,17 @@ function editYear(id, year) {
return request({
url: `/person/payment/editYear/${id}`,
method: 'get',
params: { year: year }
params: {
year: year
}
})
}
function editGroupYear(data) {
return request({
url: `/member/certified/editCertRenewYear/${data.certId}/${data.renewYear}`,
method: 'post',
params:data
params: data
})
}
......@@ -498,12 +548,14 @@ function addPersonPaymentGroup(data) {
params: data
})
}
function commitRenew(id) {
function commitRenew(id) {
return request({
url: `/person/paymentRange/commit/${id}`,
method: 'post'
})
}
function getVerityMergeList(params) {
return request({
url: '/exam/info/verityMergeList',
......@@ -511,6 +563,7 @@ function getVerityMergeList(params) {
params: params
})
}
function doMergeFlows(params) {
return request({
url: `/exam/info/submit/mergeFlows`,
......@@ -518,6 +571,7 @@ function doMergeFlows(params) {
params: params
})
}
function getMergePaymentInfo(mergeId) {
return request({
url: '/exam/info/mergeDetail/list',
......@@ -535,6 +589,7 @@ function submitCert(data) {
params: data
})
}
function getCertsLList(query) {
return request({
url: '/exam/payment/certsList',
......@@ -542,6 +597,7 @@ function getCertsLList(query) {
params: query
})
}
function getExamListByPayId(params) {
return request({
url: `/exam/payment/examList/${params.payId}`,
......@@ -549,6 +605,7 @@ function getExamListByPayId(params) {
params: params
})
}
function certStudentList(query) {
return request({
url: '/exam/person/cert/studentList',
......@@ -556,6 +613,7 @@ function certStudentList(query) {
params: query
})
}
function paymentList(query) {
return request({
url: '/exam/payment/list',
......@@ -563,6 +621,7 @@ function paymentList(query) {
params: query
})
}
function getPaymentDetailsByPayId(payId) {
return request({
url: '/exam/payment/paymentDetailsByPayId',
......@@ -572,6 +631,7 @@ function getPaymentDetailsByPayId(payId) {
}
})
}
function getMySonList(data) {
return request({
url: '/member/info/getMySonList',
......@@ -579,6 +639,7 @@ function getMySonList(data) {
params: data
})
}
function addGroupPaymentGroup(data) {
return request({
url: `/member/certifiedRange/addRangeMulti/${data.memIds}/${data.rangeId}`,
......@@ -587,8 +648,97 @@ function addGroupPaymentGroup(data) {
})
}
function getDetailPersonList(data) {
return request({
url: `/person/paymentRange/getDetailList`,
method: 'get',
params: data
})
}
function withDraw(data) {
return request({
url: `/person/paymentRange/withDraw`,
method: 'post',
params: data
})
}
function groupWithDraw(data) {
return request({
url: `/member/paymentRange/withDraw`,
method: 'post',
params: data
})
}
// 省合并缴费通知单
function mergePayMentApi(data) {
return request({
url: `/person/paymentRange/merge`,
method: 'post',
params: data
})
}
function getpaymentVerityMergeList(params) {
return request({
url: '/person/paymentRange/verifyList',
method: 'get',
params: params
})
}
function doMergeFlowsPer(data) {
return request({
url: '/person/paymentRange/audit',
method: 'post',
params:data
})
}
// 省缴费单拆分
function unMerge(recordId) {
return request({
url: `/person/paymentRange/unMerge/${recordId}`,
method: 'post'
})
}
function dellevelPerson(examId) {
return request({
url: '/exam/person/' + examId,
method: 'delete'
})
}
function getExamPersonNum(data) {
return request({
url: `/exam/person/getExamPersonNum`,
method: 'get',
params: data
})
}
function doVerityBack(data) {
return request({
url: `/exam/info/verity/back`,
method: 'put',
params: data
})
}
function delRange(ids) {
return request({
url: `/member/certifiedRange/${ids}`,
method: 'delete'
})
}
function delLevel(examId) {
return request({
url: '/exam/info/' + examId,
method: 'delete'
})
}
function cancelMerge(id) {
return request({
url: '/exam/info/cancelMerge/' + id,
method: 'post'
})
}
export {
getMessage,
reader,
......@@ -622,22 +772,53 @@ export {
uploadFile,
getLevelList,
getLevelApplyInfo,
getStudentList,getApprovalRecord,submitVerity,
getStudentList,
getApprovalRecord,
submitVerity,
getCoachList,
updateLevelInfo,addLevelInfo,
chooseStudentsList,batchChoose,getVerityList,
updateLevelInfo,
addLevelInfo,
chooseStudentsList,
batchChoose,
getVerityList,
getGroupHistoryByRelateId,
createMyMember,doVerity,mergeRecords,
groupAudit,groupMergeApi,
getDetailList,getPayList,
getFillAuditLog,commitGroupPay,getGroupFeeBill,
groupCommitPaymentVoucher,getFeeBillById,
createMyMember,
doVerity,
mergeRecords,
groupAudit,
groupMergeApi,
getDetailList,
getPayList,
getFillAuditLog,
commitGroupPay,
getGroupFeeBill,
groupCommitPaymentVoucher,
getFeeBillById,
personalCommit,
delPayment,editYear,editGroupYear,addPersonPaymentGroup,
commitRenew,getVerityMergeList,doMergeFlows,getMergePaymentInfo,
submitCert,getCertsLList,getExamListByPayId,
certStudentList,paymentList,
getPaymentDetailsByPayId,getMySonList,
delPayment,
editYear,
editGroupYear,
addPersonPaymentGroup,
commitRenew,
getVerityMergeList,
doMergeFlows,
getMergePaymentInfo,
submitCert,
getCertsLList,
getExamListByPayId,
certStudentList,
paymentList,
getPaymentDetailsByPayId,
getMySonList,
addGroupPaymentGroup,
delcertified,uploadFileList,editLevel
delcertified,
uploadFileList,
editLevel,
getDetailPersonList, paymentDel, withDraw,
mergePayMentApi,
getpaymentVerityMergeList,
doMergeFlowsPer,
unMerge, dellevelPerson, getExamPersonNum,
doVerityBack,delRange,groupWithDraw,
delLevel,cancelMerge,submitPayment
}
\ No newline at end of file
......
This diff could not be displayed because it is too large.
......@@ -40,13 +40,13 @@ const request = function(req) {
return
}
if (req.method === 'GET') {
if (!req.params) {
req.params = {}
}
req.params.pageNum = req.params.pageNum || 1
req.params.pageSize = req.params.pageSize || 50
}
// if (req.method === 'GET') {
// if (!req.params) {
// req.params = {}
// }
// req.params.pageNum = req.params.pageNum || 1
// req.params.pageSize = req.params.pageSize || 50
// }
// if (req.method == 'POST' && !req.hideLoding) {
// uni.showLoading({
......@@ -64,13 +64,13 @@ const request = function(req) {
switch (res.statusCode) {
case 200:
const data = res.data || {}
if (data.code === 200 || data.pageData?.code === 200) {
if (data.code === 0 || data.code === 200 || data.pageData?.code === 200) {
resolve(data)
} else if (req.url.indexOf('getMemberCountInfo') > -1) {
resolve(data)
} else {
if (!excludeUrls.includes(req.url)) {
if (data.msg) {
// if (!excludeUrls.includes(req.url)) {
// if (data.msg) {
// uni.showModal({
// content: data.msg,
// success: function(res) {
......@@ -80,12 +80,12 @@ const request = function(req) {
uni.showToast({
title: data.msg,
icon: 'none',
duration: 3000
duration: 2000
})
}
uni.hideLoading()
// }
// uni.hideLoading()
}
// }
// 登录超时
if (data.code === 60002 || data.code === 60001) {
......
......@@ -4,8 +4,10 @@
// staging
// const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/";
// const baseUrl_api = "http://182.92.233.247/stage-api/";
const baseUrl_api = 'http://192.168.1.11:8787'
// const baseUrl_api = "http://123.60.96.243//stage-api/";
// const baseUrl_api = 'http://192.168.1.11:8787'
const baseUrl_api = 'https://ztx.itechtop.cn/stage-api'
// const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/'
export default {
baseUrl_api
......
......@@ -50,7 +50,8 @@
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<button class="btn-red" @click="gochose">+ 在线选择</button>
<text>请选择团队</text>
<!-- <button class="btn-red" @click="gochose">+ 在线选择</button> -->
</view>
<view class="fixedBottom">
......@@ -127,18 +128,18 @@
function getList() {
api.getPayList(queryParams.value).then(res => {
list.value = []
res.rows.forEach(item => {
for(var item of res.rows){
if (item.rangeId == queryParams.value.rangeId) {
list.value = item.certList
formData.value = item
return
}
})
}
})
}
function gochose() {
let path = `/pages/group/vipList?rangeId=${queryParams.value.rangeId}`
let path = `/group/vipList?rangeId=${queryParams.value.rangeId}`
uni.redirectTo({
url: path
});
......
<template>
<view>
<view class="text-center" v-if="userType=='2'">
<view class="cardNav">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
</view>
</view>
<!-- 团队会员审核 -->
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
......@@ -10,21 +17,25 @@
</view>
</view>
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.auditStatus == 0" class="text-primary">审核中</text>
<text v-if="item.auditStatus == 1" class="text-success">审核通过</text>
<text v-if="item.auditStatus == 2" class="text-danger">审核拒绝</text>
<text v-if="item.auditStatus == 3" class="text-warning">审核退回</text>
<text v-if="item.auditStatus == 3" class="text-warning">审核撤回</text>
</view>
<view class="date">提交日期:{{item.content.commitTime}}</view>
<view class="date" v-if="item.content.validityTime">原有效期:{{item.content.validityTime}}</view>
<view class="name" @click="goDetail(item)">{{item.content.certName}}</view>
<view class="date">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.content.commitTime}} 提交</view>
<view class="name w100" @click="goDetail(item)">
<!-- <text class="dot"></text> -->
{{item.content.certName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
<!-- <view>
缴费单位
<view>{{ item.content.memberName }}</view>
</view>
</view> -->
<view v-if="userType == '3'">
所属省份
<view>{{item.content.province}}</view>
......@@ -42,8 +53,9 @@
<view>{{item.content.renewYear}}</view>
</view>
<view v-if="deptType == 1">
会员合计/新会员
<view>{{item.content.allCount}}/<text class="text-danger">{{item.content.newCount}}</text></view>
会员/新会员
<view>{{item.content.allCount}}/<text class="text-danger">{{item.content.newCount}}</text>
</view>
</view>
<view v-if="deptType == 1">
费用合计
......@@ -58,6 +70,20 @@
<button @click="audit(item.recordId,'0')">拒绝</button>
<button @click="audit(item.recordId,'1')">同意</button>
</view>
<!-- 中台协 -->
<view class="func" v-if="(userType == '1'&&item.auditStatus == 1&&item.canTui==1)">
<button @click="sendBack(item)">撤回</button>
</view>
<!-- 市 -->
<view class="func"
v-if="(userType == '3'&&item.auditStatus == 1&&item.isView==1&&item.content.allCount > 0)">
<button @click="sendBack(item)">撤回</button>
</view>
<!-- 省 -->
<view class="func"
v-if="(userType == '2'&&item.auditStatus == 1)">
<button @click="sendBack(item)">撤回</button>
</view>
</view>
</view>
......@@ -65,9 +91,9 @@
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
<view v-if="userType=='2'" class="block-btn-box">
<!-- <view v-if="userType=='2'" class="block-btn-box">
<button @click="goMerge" class="btn-red-kx">前往合并 > </button>
</view>
</view> -->
</view>
</template>
......@@ -85,9 +111,9 @@
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
auditStatus:'0'
auditStatus: '0'
})
const navs = ref(['审核中', '审核通过', '审核拒绝', '退回'])
const navs = ref(['审核中', '审核通过', '审核拒绝', '撤回'])
const current = ref()
const list = ref([])
const total = ref(0)
......@@ -120,15 +146,15 @@
function getList() {
uni.showLoading({
title:'加载中'
title: '加载中'
})
if(deptType.value==2||deptType.value==3){
if (deptType.value == 2 || deptType.value == 3) {
// 省
queryParams.value.mergeFlag = 0
}else if(deptType.value==1){
} else if (deptType.value == 1) {
queryParams.value.noEmpty = 1
} else if (deptType.value == 4 || deptType.value == 5) {
queryParams.value.noEmpty = 1
}else if( deptType.value==4||deptType.value==5){
queryParams.value.noEmpty=1
}
totalCost.value = 0
api.getGroupList(queryParams.value).then(res => {
......@@ -198,29 +224,65 @@
const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
const form = encodeURIComponent(JSON.stringify(item))
if(userType.value=='1'){
if (userType.value == '1') {
// 查看
let path = `/pages/group/apply/mergeUpDetail?form=${form}`
let path = `/group/apply/mergeUpDetail?form=${form}`
uni.navigateTo({
url: path
});
} else if(userType.value=='2'||userType.value=='3'){
} else if (userType.value == '2' || userType.value == '3') {
// 审核记录
let path = `/pages/group/apply/record?certId=${item.content.certId}`
let path = `/group/apply/record?certId=${item.content.certId}`
uni.navigateTo({
url: path
});
}
}
function goMerge(){
let path = `/pages/group/apply/merge`
uni.navigateTo({
function goMerge() {
let path = `/group/apply/merge`
uni.redirectTo({
url: path
});
}
function goMergeUp() {
let path = `/group/apply/mergeUp`
uni.redirectTo({
url: path
});
}
function sendBack(row) {
uni.showModal({
title: '提示',
content: `确定撤回${row.content.certName}吗`,
success: function(res) {
if (res.confirm) {
api.groupWithDraw({
recordId: row.recordId,
reason: row.reason
}).then(res => {
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
})
}
</script>
<style scoped>
.mt0{margin-top: 0!important;}
.appList .appItem .name{width: 80%;word-break: break-all;}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
\ No newline at end of file
......
<template>
<view class="hasfixedbottom">
<view class="text-center">
<view class="cardNav">
<view @click="goApply">会员审核</view>
<view class="active">审核合并</view>
<view @click="goMergeUp">合并提交</view>
</view>
</view>
<!-- 审批合并 -->
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="appItem" v-for="(item,index) in infoList" :key="index">
<view @click="checkThis(item)" class="iconbox">
<image class="icon" v-if="item.checked" src="@/static/member/dx_dwn.png" />
<image class="icon" v-else src="@/static/member/dx.png" />
<image class="icon" v-if="item.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'"/>
<image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
</view>
<view class="status" @click="goDetail(item)">
<text v-if="item.auditStatus == 0" class="text-primary">审核中</text>
......@@ -33,9 +40,9 @@
</view>
</view>
<view class="fixedBottom">
<button @click="handleMerge" v-if="infoList.length>0" style="width: 40%;" class="btn-red">合并</button>
<button @click="goMergeUp" class="btn-red-kx" style="width: 40%;">合并提交 > </button>
<view class="fixedBottom" v-if="infoList.length>0">
<button @click="handleMerge" style="width: 40%;" class="btn-red">合并</button>
<!-- <button @click="goMergeUp" class="btn-red-kx" style="width: 40%;">合并提交 > </button> -->
</view>
<view class="nodata" v-if="infoList.length==0">
......@@ -107,7 +114,7 @@
}
function goDetail(item) {
let path = `/pages/group/apply/record?certId=${item.content.certId}`
let path = `/group/apply/record?certId=${item.content.certId}`
uni.navigateTo({
url: path
});
......@@ -115,8 +122,14 @@
}
function goMergeUp(){
// 合并提交
let path = `/pages/group/apply/mergeUp`
uni.navigateTo({
let path = `/group/apply/mergeUp`
uni.redirectTo({
url: path
});
}
function goApply(){
let path = `/group/apply/applyList`
uni.redirectTo({
url: path
});
}
......
<template>
<view>
<view class="text-center">
<view class="cardNav">
<view @click="goApply">会员审核</view>
<view @click="goMerge">审核合并</view>
<view class="active">合并提交</view>
</view>
</view>
<!-- 团队会员审核 -->
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.status == 0" class="text-primary">审核中</text>
<text v-if="item.status == 1" class="text-success">审核通过</text>
......@@ -169,13 +176,24 @@
function goDetail(item) {
const form = encodeURIComponent(JSON.stringify(item))
// 查看
let path = `/pages/group/apply/mergeUpDetail?&form=${form}`
let path = `/group/apply/mergeUpDetail?&form=${form}`
uni.navigateTo({
url: path
});
}
function goMerge(){
let path = `/group/apply/merge`
uni.redirectTo({
url: path
});
}
function goApply(){
let path = `/group/apply/applyList`
uni.redirectTo({
url: path
});
}
</script>
<style scoped>
......
<template>
<view>
<z-paging ref="paging" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png">
<!-- 机构会员 -->
<view class="searchbar">
<view class="searchbar" :slot="top">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="query.name" placeholder="搜索会员名称" @blur="getList" @clear="getList">
v-model="queryParams.name" placeholder="搜索会员名称" @blur="getList" @clear="getList">
</uni-easyinput>
</view>
<view class="wBox">
......@@ -11,35 +13,24 @@
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="index" @click="goDetail(n)">
<view class="photobox">
<view class="colorful">{{n.name?.slice(0,1)}}</view>
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name?.slice(0,1)}}</view>
</view>
<view>
<view class="name">{{n.name}}
<text v-if="n.sex == 1">(女)</text>
<text v-else>(男)</text>
</view>
<!-- <view class="date">
{{n.ancestorNameList[0]}} {{ n.ancestorNameList[1] }}
{{n.ancestorNameList[2]}} {{n.memName}}
</view> -->
<view class="date">
注册时间 {{n.createTime?.slice(0,10) }}
</view>
</view>
<!-- <view class="nian">
<text v-if="n.perType==1"> 个人</text>
<text v-if="n.perType==2"> 教练</text>
<text v-if="n.perType==3"> 考官</text>
<text v-if="n.perType==4"> 裁判</text>
<text v-if="n.perType==5">临时</text>
</view> -->
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无会员</text>
</view>
</view>
</z-paging>
</view>
</template>
......@@ -57,7 +48,9 @@
proxy
} = getCurrentInstance()
const app = getApp();
const query = ref({
const paging = ref(null)
const queryParams = ref({
sonDeptId: 1,
perType: '1'
})
......@@ -69,23 +62,41 @@
const userType = ref('')
const deptType = ref('')
onLoad((option) => {
query.value.sonDeptId = option.deptId
queryParams.value.sonDeptId = option.deptId
getList()
})
function getQuery(pageNum,pageSize) {
queryParams.value.pageNum = pageNum
queryParams.value.pageSize = pageSize
api.selectPageList(queryParams.value).then(res => {
paging.value.complete(res.rows)
list.value = res.rows
for(var l of list.value){
if(l.photo&&l.photo.indexOf('http')==-1){
l.photo = config.baseUrl_api + l.photo
}
}
})
}
function getList() {
uni.showLoading({
title:"加载中"
})
api.selectPageList(query.value).then(res => {
api.selectPageList(queryParams.value).then(res => {
uni.hideLoading()
paging.value.complete(res.rows);
list.value = res.rows
for(var l of list.value){
if(l.photo&&l.photo.indexOf('http')==-1){
l.photo = config.baseUrl_api + l.photo
}
}
total.value = res.total
})
}
function goDetail(n){
uni.navigateTo({
url: `/pages/personalVip/detail?perId=${n.perId}`
url: `/personalVip/detail?perId=${n.perId}`
})
}
</script>
......
......@@ -10,10 +10,10 @@
<text v-if="item.record.auditStatus==0" class="text-primary">审核中</text>
<text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text>
<text v-if="item.record.auditStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已退回</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)" v-if="item.payTime">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text>{{item.payTime}} 缴费</text>
</view>
......@@ -193,7 +193,7 @@
function goDetail(item) {
//详情
console.log(item.docId)
let path = `/pages/group/feeBillDetail?docId=${item.docId}`
let path = `/group/feeBillDetail?docId=${item.docId}`
uni.navigateTo({
url: path
});
......
<template>
<view>
<z-paging ref="paging" v-model="infoList" @query="getQuery" emptyViewImg="/static/nodata.png">
<view :slot="top">
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="searchbar">
......@@ -13,13 +15,21 @@
<view>过期会员 <text>{{ forms?.expired }}</text></view>
<view>即将过期会员 <text>{{ forms?.soon }}</text></view>
</view>
</view>
<view class="indexboxre">
<view class="userlist mt30">
<view class="item" v-for="n in infoList" :key="n.memId" @click="handleInfo(n)">
<view class="item" v-for="n in infoList" :key="n.memId">
<view @click="handleInfo(n)">
<view class="name">{{n.name}}<text v-if="n.memCode"> ({{n.memCode}}) </text></view>
<view class="name">{{n.name}}
<!-- <text v-if="n.memCode"> ({{n.memCode}}) </text> -->
</view>
<view class="date">到期时间:{{n.validityDate?.slice(0,10)||'--'}}</view>
</view>
<view class="status" style="top: 10rpx;">
<text class="text-success" v-if="n.valiStr=='正常'">{{n.valiStr}}</text>
<text class="text-warning" v-if="n.valiStr=='已过期'">{{n.valiStr}}</text>
<text class="text-primary" v-if="n.valiStr=='即将过期'">{{n.valiStr}}</text>
</view>
<view class="status" style="bottom: 20rpx;">
<text class="text-success">{{n.validityMemberCount}}</text>/{{n.allMemberCount}}
</view>
......@@ -30,7 +40,7 @@
<text>暂无数据</text>
</view>
</view>
</z-paging>
</view>
</template>
......@@ -48,11 +58,15 @@
} = getCurrentInstance()
const app = getApp();
const query = ref({
pageNum:1,
pageSize:8,
fromList: 1,
dType: 4,
status: 2
})
const navs = ref(['道馆', '三级协会', '二级协会', '一级协会'])
const list = ref([])
const paging = ref(null)
const forms = ref({})
const infoList = ref([])
const total = ref(0)
......@@ -79,22 +93,39 @@
})
console.log(current.value, currentTabName.value, query.value.dType)
api.getGroupVipList(query.value).then(res => {
infoList.value = res.rows
// infoList.value = res.rows
paging.value.complete(res.rows);
total.value = res.total
uni.hideLoading()
})
}
function getQuery(pageNum,pageSize){
query.value.pageNum = pageNum
query.value.pageSize = pageSize
api.getGroupVipList(query.value).then(res => {
// infoList.value = res.rows
paging.value.complete(res.rows);
total.value = res.total
uni.hideLoading()
})
}
function getGroupInfo() {
uni.showLoading({
title: '加载中'
})
api.getMemberCountInfo({
dType: query.value.dType,
fromList: 1
}).then(res => {
forms.value = res
uni.hideLoading()
})
}
function onClickItem(e) {
uni.showLoading({
title: '加载中'
})
current.value = e.currentIndex
currentTabName.value = navs.value[e.currentIndex]
if (currentTabName.value == '道馆') {
......@@ -112,7 +143,7 @@
function handleInfo(n) {
uni.navigateTo({
url: `/pages/group/detail?deptId=${n.deptId}`
url: `/group/detail?deptId=${n.deptId}`
})
}
</script>
......
......@@ -8,7 +8,7 @@
<view class="invertedbtn-red" v-if="userType=='2'" @click="goAddPay">+ 新建缴费</view>
</view>
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item?.content?.status==0" class="text-primary">待提交</text>
<text v-if="item?.content?.status==1" class="text-primary">审核中</text>
......@@ -33,8 +33,9 @@
</view>
</view>
<view class="func" v-if="item.content?.status==0||item.content?.status==3||item.content?.status==4">
<button @click="handleDelete(item)">删除</button>
<button @click="handleUpdate(item)">编辑</button>
<button v-if="item.content?.status==0" @click="commitFN(item)">提交审核</button>
<button @click="commitFN(item)">提交审核</button>
</view>
</view>
</view>
......@@ -95,31 +96,52 @@
}
function commitFN(row) {
api.commitGroupPay(row.rangeId).then(res=>{
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
api.commitGroupPay(row.rangeId).then(res2=>{
uni.showToast({
title:`提交成功!`
})
getList()
})
}
})
}
function goDetail(item) {
//详情
const form = encodeURIComponent(JSON.stringify(item))
// 查看
let path = `/pages/group/payDetail?&form=${form}`
let path = `/group/payDetail?&form=${form}`
uni.navigateTo({
url: path
});
}
function goAddPay(){
let path = `/pages/group/addGroupMemberPay`
let path = `/group/addGroupMemberPay`
uni.navigateTo({
url: path
});
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定删除${row.rangeName}吗`,
success: function(res) {
api.delRange(row.rangeId).then(res2=>{
uni.showToast({
title:`删除成功!`
})
getList()
})
}
})
}
function handleUpdate(row){
let path = `/pages/group/addGroupMemberPay?rangeId=${row.rangeId}`
let path = `/group/addGroupMemberPay?rangeId=${row.rangeId}`
uni.navigateTo({
url: path
});
......
......@@ -7,19 +7,15 @@
</view>
<view class="indexboxre">
<view class="tt">会员列表</view>
<!-- <uni-indexed-list :options="list" :showSelect="true" @click="bindClick"></uni-indexed-list> -->
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="index">
<view @click="checkThis(n)" v-if="n.canCommit">
<image class="icon" v-if="n.checked" src="@/static/member/dx_dwn.png" />
<image class="icon" v-else src="@/static/member/dx.png" />
<image class="icon" v-if="n.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" />
<image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
</view>
<!-- <view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
</view> -->
<view>
<view class="name">{{n.name}}
<view class="name">
{{n.name}}
</view>
<view class="name">
<text v-if="n.deptType == 2">一级协会</text>
......@@ -27,7 +23,6 @@
<text v-if="n.deptType == 4">二级协会</text>
<text v-if="n.deptType == 5">三级协会</text>
<text v-if="n.deptType == 6">职业性团体会员</text>
</view>
<view class="date">到期时间:{{n.validityDate?.slice(0,10)}}</view>
</view>
......@@ -73,34 +68,43 @@
})
function getList() {
uni.showLoading({
title:'加载中'
})
api.getMySonList(queryParams.value).then(res => {
list.value = res.data
total.value = res.data.length
list.value = res.data.rows
total.value = res.data.total
uni.hideLoading()
})
}
function checkThis(n){
if(n.checked){
function checkThis(n) {
if (n.checked) {
n.checked = false
}else{
} else {
n.checked = true
}
}
function handleImport(){
var arr=[]
for(var n of list.value){
if(n.checked){
function handleImport() {
var arr = []
for (var n of list.value) {
if (n.checked) {
arr.push(n.memId)
}
}
if(arr.length==0){
if (arr.length == 0) {
uni.showToast({
title:"请选择团体",
icon:"none"
title: "请选择团体",
icon: "none"
})
return
}
api.addGroupPaymentGroup({ rangeId: queryParams.value.paymentRangeId, memIds: arr.join(',') }).then(res=>{
let path = `/pages/group/addGroupMemberPay?rangeId=${res.data}`
api.addGroupPaymentGroup({
rangeId: queryParams.value.paymentRangeId,
memIds: arr.join(',')
}).then(res => {
let path = `/group/addGroupMemberPay?rangeId=${res.data}`
uni.redirectTo({
url: path
});
......@@ -109,8 +113,6 @@
</script>
<style scoped lang="scss">
.indexboxre {
padding: 0 30rpx;
......@@ -121,7 +123,8 @@
}
position: relative;
height: calc(100vh - 280rpx);overflow: auto;
height: calc(100vh - 280rpx);
overflow: auto;
}
.searchbar {
......
......@@ -9,7 +9,7 @@
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
</script>
<title></title>
<title>工作台</title>
<!--preload-links-->
<!--app-context-->
<style>
......
......@@ -26,7 +26,8 @@
</uni-forms-item>
<uni-forms-item @updateData="updateData" :label="`考官${ec}`" v-for="ec in examinerForChoose"
:key="ec">
<view @click="selectFN(ec)" class="mask">
<view class="maskbox">
<view class="mask" @click="selectFN(ec)"></view>
<uni-easyinput v-model="form[`examiner_${ec}`]" clearable placeholder="点击选择考官" />
</view>
</uni-forms-item>
......@@ -37,22 +38,23 @@
<view class="wBox" v-if="active == 1">
<!-- 添加考生 -->
<view class="flexbox">
<button class="btn-red-kx mini w45" @click="chooseOnline">
<button class="btn-red-kx mini w100" @click="chooseOnline">
<uni-icons type="personadd" size="16" color="#AD181F"></uni-icons>
在线选择</button>
<button class="btn-red-kx mini w45" @click="handleUpdate">
<!-- <button class="btn-red-kx mini w45" @click="handleUpdate">
<uni-icons type="upload" size="16" color="#AD181F"></uni-icons>
上传成绩单</button>
上传成绩单</button> -->
</view>
<view class="vipData mt30">
<view>共<text>{{tablePersonInfo.total}}</text>人</view>
<view v-for="l in tablePersonInfo.levelArr" :key="l.level">
{{ szToHz(l.level) }}级:<text>{{tablePersonInfo.total}}</text>人
<view class="vipData mt30" style="flex-wrap:wrap">
<view class="w25">合计:<text>{{tablePersonInfo.total}}</text>人</view>
<view class="w25" v-for="l in tablePersonInfo.levelArr" :key="l.level">
{{ szToHz(l.level) }}级:<text>{{l.num}}</text>人
</view>
</view>
<view class="userlist">
<view class="item" v-for="n in infoList" style="background-color: #fffafa;">
<view class="item" v-for="(n,index) in infoList" :key="index" style="background-color: #fffafa;">
<view class="w100">
<view class="del" @click="handleDelete(n)">删除</view>
<view style="display: flex;">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo"
......@@ -71,10 +73,11 @@
</view>
<view style="width: 40%;">
考试级别
<view @click="changeLevelfather(n)">
<text style="padding: 15rpx 0;">{{ szToHz(n.levelNew) }}级</text>
<!-- <view @click="changeLevelfather(n)">
<uni-data-select v-model="n.levelNew" :localdata="levelArr"
@change="changeLevel"></uni-data-select>
</view>
</view> -->
</view>
......@@ -109,11 +112,11 @@
<uni-popup ref="choseStudent" type="bottom" background-color="#fff" animation>
<view class="popBody">
<view class="userlist">
<view class="item" v-for=" n in studentList">
<view class="userlist" style="max-height:80vh;overflow: auto;">
<view class="item" v-for=" (n,index) in studentList" :key="index">
<view @click="checkThis(n)">
<image class="icon" v-if="n.checked" src="@/static/member/dx_dwn.png" />
<image class="icon" v-else src="@/static/member/dx.png" />
<image class="icon" v-if="n.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" />
<image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
</view>
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'>
......@@ -132,8 +135,8 @@
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>无可参加考试会员</text>
</view>
<button class="btn-red-kx" v-if="studentList.length!=0" @click="submitStudents">确定</button>
</view>
<button class="btn-red-kx" v-if="studentList.length!=0" @click="submitStudents">确定</button>
</view>
</uni-popup>
......@@ -302,9 +305,9 @@
}
}
})
const arr = encodeURIComponent(JSON.stringify(chosen))
console.log(ec, chosen, type)
let path = `/pages/level/chooseExaminer?type=${type}&chosen=${chosen}&ec=${ec}`
let path = `/level/chooseExaminer?type=${type}&chosen=${arr}&ec=${ec}`
uni.navigateTo({
url: path
});
......@@ -355,7 +358,7 @@
if (examinerIds.length % 2 === 0) {
uni.showToast({
title: `录入的考官人数必须为单数`,
icon: 'error'
icon: 'none'
})
return
}
......@@ -395,7 +398,10 @@
}
function chooseOnline() {
uni.showLoading({
title:'加载中',
icon:'none'
})
var obj = {
memId: memberInfo.memId,
examId: form.value.examId,
......@@ -410,6 +416,7 @@
}
}
uni.hideLoading()
choseStudent.value.open()
})
}
......@@ -540,13 +547,13 @@
})
return
}
if (!form.value.transcript) {
uni.showToast({
title: '请上传成绩单',
icon: 'none'
})
return
}
// if (!form.value.transcript) {
// uni.showToast({
// title: '请上传成绩单',
// icon: 'none'
// })
// return
// }
uni.showModal({
title: '提示',
......@@ -638,13 +645,35 @@
}))
UpPop.value.close()
}
function handleDelete(row) {
uni.showModal({
title: '提示',
content: `确定删除${row.realName}?`,
success: function(res) {
if (res.confirm) {
api.dellevelPerson(row.id).then(res=>{
uni.showToast({
title:`操作成功`
})
getChosedStudentList()
})
}
}
})
}
</script>
<style lang="scss" scoped>
:deep(.uni-progress-bar) {
display: none;
}
.item{
.del{ color: #AD181F;
position: absolute;
right: 30rpx;
font-size: 28rpx;}
}
.wBox {
width: 700rpx;
padding: 30rpx;
......@@ -661,4 +690,10 @@
.popBody {
padding: 40rpx 30rpx;
}
.maskbox{position:relative;
.mask{position: absolute;width:calc(100% - 34px);height: 100%;z-index: 10;
background-color: red;opacity: 0;
}
}
:deep(.file-picker__progress){opacity:0;}
</style>
\ No newline at end of file
......
......@@ -4,7 +4,7 @@
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" placeholder="搜索考级名称" @blur="getList" @clear="getList">
</uni-easyinput>
<view class="invertedbtn-red" @click="goAdd">+ 添加级位考试</view>
<view class="invertedbtn-red" v-if="isExam=='0'" @click="goAdd">+ 添加级位考试</view>
</view>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="item">
......@@ -28,12 +28,14 @@
考官
<view>{{item.examinerNames}}</view>
</view>
<view>
通过人数
<view>{{item.pass}}</view>
</view>
</view>
<view class="func" v-if="item.status=='0'||item.status=='3'||item.status=='4'">
<button @click="handleDelete(item)">删除</button>
<button @click="editThis(item)">编辑</button>
<button @click="handleSubmit(item)">提交审核</button>
</view>
......@@ -72,9 +74,8 @@
const list = ref([])
const total = ref(0)
const deptType = ref('')
onLoad(() => {
})
const userType = ref('')
const isExam = ref('1')
onShow(() => {
if (app.globalData.isLogin) {
init()
......@@ -91,6 +92,8 @@
title: '加载中'
})
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
isExam.value = app.globalData.isExam
getList()
}
......@@ -104,14 +107,14 @@
}
function goAdd() {
let path = `/pages/level/addApply`
let path = `/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/pages/level/addApply?examId=${item.examId}`
let path = `/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
......@@ -131,6 +134,27 @@
}
})
}
function handleDelete(row) {
uni.showModal({
title: '提示',
content: `确定删除${row.name}吗`,
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: `删除中`
})
api.delLevel(row.examId).then(res=>{
uni.showToast({
title:'操作成功!',
icon:'none'
})
uni.hideLoading()
getList()
})
}
}
})
}
function upApply(id) {
api.submitVerity(id).then(res => {
......@@ -145,7 +169,7 @@
function goDetail(item) {
if (item.status != '0') {
let path = `/pages/level/applyDetail?examId=${item.examId}`
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
......@@ -158,7 +182,7 @@
</script>
<style scoped>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
......
......@@ -23,22 +23,23 @@
<view class="ddd">
<text class="lab">考级地点:</text>{{form.address}}
</view>
<view class="ddd" v-if="app.globalData.showPrice">
<text class="lab">总金额:</text>{{(form.totalAmount*1).toFixed(2) }}
<view class="ddd" v-if="userType=='2'||userType=='1'">
<text class="lab">总金额:</text>
<text class="text-danger">¥{{(form.totalAmount*1).toFixed(2) }}</text>
</view>
</view>
<view class="wBox">
<view class="tt">
考生信息
</view>
<view class="vipData">
<view>共 <text>{{ tablePersonInfo.total }}</text>人</view>
<view v-for="l in tablePersonInfo.levelArr" :key="l.level">
<view class="vipData" style="flex-wrap: wrap;">
<view class="w25">共 <text>{{ tablePersonInfo.total }}</text>人</view>
<view class="w25" v-for="l in tablePersonInfo.levelArr" :key="l.level">
{{ szToHz(l.level) }}级: <text>{{ l.num }} </text>人
</view>
</view>
<view class="userlist">
<view class="item" v-for="n in list" style="background-color: #fffafa;">
<view class="item" v-for="(n,index) in list" :key="index" style="background-color: #fffafa;">
<view class="w100">
<view class="name">{{n.realName}} <text>{{n.memName}}</text></view>
<!-- <view class="date">{{n.idcTypeStr}}:{{n.idcCode}}</view> -->
......@@ -54,10 +55,10 @@
{{ szToHz(n.levelNew) }}级
</text>
</view>
<view v-if="app.globalData.showPrice">
<view v-if="userType=='2'||userType=='1'">
金额
<text>
{{ (n.examFee * 1).toFixed(2) }}
¥{{ (n.examFee * 1).toFixed(2) }}
</text>
</view>
<view>
......@@ -70,14 +71,16 @@
</view>
</view>
<view class="goMore" v-if="totalStudent>6" @click="goMoreList">查看全部
<uni-icons type="forward" size="16"></uni-icons>
</view>
</view>
<view class="wBox">
<view class="tt">
审核信息
</view>
<view>
<view class="stepItem" v-for="(n,index) in recordList">
<view class="stepItem" v-for="(n,index) in recordList" :key="index">
<view class="time">{{n.handleDate||'待审批'}}</view>
<view class="content">
<view class="status">
......@@ -113,14 +116,31 @@
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const deptType = ref('')
const userType = ref('')
const form = ref({})
const tablePersonInfo = ref({})
const recordList = ref([])
const list = ref([])
const totalStudent = ref(0)
const studentquery = ref({
pageNum: 1,
pageSize: 6
})
let examId = ''
let recordId = ''
onLoad((option) => {
examId = option.examId
if ('form' in option) {
form.value = JSON.parse(decodeURIComponent(option.form))
console.log('form',form.value)
recordId = form.value.recordId
studentquery.value.recordId = form.value.recordId
studentquery.value.examId = form.value.examId
} else {
recordId = ''
studentquery.value.examId = option.examId
getForm()
}
})
onShow(() => {
if (app.globalData.isLogin) {
......@@ -136,8 +156,7 @@
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getForm()
userType.value = app.globalData.userType
getRecordList()
getTablePersonInfo()
}
......@@ -152,27 +171,35 @@
function getRecordList() {
api.getApprovalRecord(examId).then(res => {
recordList.value = res.data.levelSteps
uni.hideLoading()
})
}
function getTablePersonInfo() {
api.getStudentList({
examId: examId
}).then(res=>{
api.getStudentList(studentquery.value).then(res=>{
list.value = res.rows
const total = list.value.length
totalStudent.value = res.total
if(!recordId){
var obj = {
examId:examId,
type:'1'
}
}else{
var obj = {
examId:examId,
recordId:recordId,
type:'1'
}
}
const levelArr = []
_.each(list.value, (d) => {
const temp = _.find(levelArr, (l) => {
return l.level == d.levelNew
})
if (temp) {
temp.num++
} else {
let total = 0
api.getExamPersonNum(obj).then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: d.levelNew,
num: 1
level: key,
num: val
})
total += val
}
})
......@@ -183,14 +210,22 @@
})
}
})
})
}
function szToHz(num) {
const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
return hzArr[parseInt(num)]
}
function goMoreList(){
const obj = encodeURIComponent(JSON.stringify(studentquery.value))
let path = `/level/examStudentList?studentquery=${obj}`
uni.navigateTo({
url: path
});
}
</script>
<style scoped>
<style scoped lang="scss">
.wBox {
width: 700rpx;
padding: 30rpx;
......
<template>
<view>
<view class="text-center" v-if="userType=='2'">
<view class="cardNav">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
</view>
</view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="appItem" v-for="(item,index) in infoList" :key="index">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-primary':item.auditStatus=='0',
......@@ -16,25 +23,29 @@
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="pp esp">申请日期:{{item.applyTime.substring(0,10)}}</view>
<view class="pp esp">考级日期:{{item.startTime.substring(0,16)}} 至 {{item.endTime.substring(0,16)}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请日期
<view>{{item.applyTime.substring(0, 10)}}</view>
<view v-if="userType!='1'">
考级考官
<view>{{item.examinerNames}}</view>
</view>
<view>
申请单位
<view>{{item.memberName}}</view>
考级考生数
<view>{{item.totalNum}}</view>
</view>
<view>
通过人数
<view>{{item.pass}}</view>
<view v-if="userType=='1'||userType=='2'">
总金额
<view>¥{{item.totalAmount}}</view>
</view>
</view>
<view class="func" v-if="item.auditStatus=='0'">
<button @click="audit(item,'2')">拒绝</button>
<button @click="audit(item,'1')">同意</button>
</view>
<view class="func" v-if="item.auditStatus=='1'&&item.isView=='1'">
<button @click="handleBack(item)">撤回</button>
</view>
</view>
</view>
......@@ -42,9 +53,6 @@
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
<view v-if="userType=='2'" class="block-btn-box">
<button @click="goMerge" class="btn-red-kx">前往合并 > </button>
</view>
</view>
</template>
......@@ -67,7 +75,7 @@
status: '0',
type: '1'
})
const navs = ref(['审核中', '审核通过', '审核拒绝'])
const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回'])
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
......@@ -130,18 +138,35 @@
}
function goDetail(item) {
console.log(item)
const form = encodeURIComponent(JSON.stringify(item))
if(item.status!='0'){
let path = `/pages/level/applyDetail?examId=${item.examId}`
if(userType.value == '2'){
// 省
let path = `/level/applyDetail?examId=${item.examId}&form=${form}`
uni.navigateTo({
url: path
});
}else{
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
}
} else {
return
}
}
function goMerge(){
let path = `/pages/level/merge`
uni.navigateTo({
let path = `/level/merge`
uni.redirectTo({
url: path
});
}
function goMergeUp(){
let path = `/level/mergeUp`
uni.redirectTo({
url: path
});
}
......@@ -186,7 +211,35 @@
})
}
}
function handleBack(row){
uni.showModal({
title: '请输入撤回理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入撤回理由',
icon: 'none'
})
} else {
var obj = {
flag: '2',
reason: res.content,
recordId: row.recordId
}
api.doVerityBack(obj).then(rr=>{
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
}
})
}
function doApproval(obj) {
console.log(obj)
api.doVerity(obj).then((res) => {
......
......@@ -8,16 +8,16 @@
<view class="indexboxre">
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="index">
<view class="photobox">
<!-- <view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name.slice(1,2)}}</view>
</view>
</view> -->
<view>
<view class="name">{{n.name}}</view>
<view class="date">会员号:{{n.perCode||'-'}}</view>
</view>
<view class="status">
<text v-if="checkChosen(n)">选择</text>
<text v-if="n.disabled">选择</text>
<text v-else class="text-primary" @click="handleChoose(n)">选择</text>
</view>
......@@ -54,11 +54,11 @@
const userType = ref('')
let chosen = []
let ec = null
onLoad((options) => {
console.log(options)
query.value.type = options.type
chosen = options.chosen || []
ec = options.ec
onLoad((option) => {
query.value.type = option.type
chosen = JSON.parse(decodeURIComponent(option.chosen)) || []
ec = option.ec
console.log(chosen)
})
function getList() {
......@@ -74,6 +74,7 @@
title: '未查询到考官信息',
icon: "error"
})
list.value = []
return
}
list.value = res.data
......@@ -81,6 +82,11 @@
if(l.photo&&l.photo.indexOf('http')==-1){
l.photo = config.baseUrl_api + l.photo
}
for(var t of chosen){
if(t.perId == l.perId){
l.disabled = true
}
}
}
uni.hideLoading()
})
......@@ -110,7 +116,7 @@
function handleInfo(n) {
uni.navigateTo({
url: `/pages/personalVip/detail?perId=${n.perId}`
url: `/personalVip/detail?perId=${n.perId}`
})
}
</script>
......
<template>
<view>
<z-paging ref="paging" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png">
<view class="vipData" :slot="top" style="flex-wrap: wrap;">
<view class="w25">共 <text>{{ tablePersonInfo.total }}</text>人</view>
<view class="w25" v-for="l in tablePersonInfo.levelArr" :key="l.level">
{{ szToHz(l.level) }}级: <text>{{ l.num }} </text>人
</view>
</view>
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="index" style="background-color: #fffafa;">
<view class="w100">
<view class="name">{{n.realName}} <text>{{n.memName}}</text></view>
<!-- <view class="date">{{n.idcTypeStr}}:{{n.idcCode}}</view> -->
<view class="flexbox">
<view>
原有级别
<text v-if="n.levelOld">{{ szToHz(n.levelOld) }}级</text>
<text v-else>十级</text>
</view>
<view>
考试级别
<text>
{{ szToHz(n.levelNew) }}级
</text>
</view>
<view v-if="userType=='2'||userType=='1'">
金额
<text>
¥{{ (n.examFee * 1).toFixed(2) }}
</text>
</view>
<view>
是否通过
<text v-if="n.isPass=='1'" class="text-success">通过</text>
<text v-else class="text-danger">未通过</text>
</view>
</view>
</view>
</view>
</view>
</z-paging>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
import _ from 'lodash'
const queryParams = ref({
pageNum: 1,
pageSize: 20
})
const paging = ref(null)
const userType = ref('')
const list = ref([])
const tablePersonInfo = ref({})
const total = ref(0)
const app = getApp();
onLoad((option)=>{
console.log(option)
if ('obj' in option) {
queryParams.value = JSON.parse(decodeURIComponent(option.obj))
}
if (app.globalData.isLogin) {
userType.value = app.globalData.userType
} else {
app.firstLoadCallback = () => {
userType.value = app.globalData.userType
};
}
})
onMounted(() => {
getList()
})
function getList() {
api.getStudentList(queryParams.value).then(res => {
paging.value.complete(res.rows);
const levelArr = []
let total = 0
if(!queryParams.value.recordId){
var obj = {
examId:queryParams.value.examId,
type:'1'
}
}else{
var obj = {
examId:queryParams.value.examId,
recordId:queryParams.value.recordId,
type:'1'
}
}
api.getExamPersonNum(obj).then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: key,
num: val
})
total += val
}
})
tablePersonInfo.value = {
total: total,
levelArr: _.sortBy(levelArr, (l) => {
return l.level
})
}
})
})
}
function getQuery(pageNum,pageSize) {
queryParams.value.pageNum = pageNum
queryParams.value.pageSize = pageSize
api.getStudentList(queryParams.value).then(res=>{
paging.value.complete(res.rows);
// total.value = res.total
const levelArr = []
let total = 0
api.getExamPersonNum(queryParams.value.examId, '1').then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: key,
num: val
})
total += val
}
})
tablePersonInfo.value = {
total: total,
levelArr: _.sortBy(levelArr, (l) => {
return l.level
})
}
})
})
}
function szToHz(num) {
const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
return hzArr[parseInt(num)]
}
</script>
<style scoped lang="scss">
.userlist{ box-sizing: border-box;padding:20rpx 20rpx 0;
.item{border-bottom: 1px dashed #e5e5e5;position: relative;
.date{margin-top: 10rpx;}
.name{
text{margin-left: 1em;
color: #4C5359;
font-size: 26rpx;}
}
.nian{position: absolute;right: 20rpx;
font-size: 30rpx;
color: #AD181F;}
}
}
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
.invertedbtn-red {
margin-left: 15rpx;
font-size: 30rpx;
padding: 16rpx 20rpx;
box-sizing: border-box;
border-radius: 50rpx;
background-color: #fff;
}
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
}
</style>
\ No newline at end of file
<template>
<view class="hasfixedbottom">
<view class="text-center">
<view class="cardNav">
<view @click="goApproval">会员审核</view>
<view class="active">审核合并</view>
<view @click="goMergeUp">合并提交</view>
</view>
</view>
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="appItem" v-for="(item,index) in infoList" :key="index">
<view @click="checkThis(item)" class="iconbox">
<image class="icon" v-if="item.checked" src="@/static/member/dx_dwn.png" />
<image class="icon" v-else src="@/static/member/dx.png" />
<image class="icon" v-if="item.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" />
<image class="icon" v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" />
</view>
<view class="status" @click="goDetail(item)">
<text :class="{
......@@ -35,9 +42,8 @@
</view>
<view class="fixedBottom">
<button @click="handleMerge" v-if="infoList.length>0" style="width: 40%;" class="btn-red">合并</button>
<button @click="goMergeUp" class="btn-red-kx" style="width: 40%;">合并提交 > </button>
<view class="fixedBottom" v-if="infoList.length>0">
<button @click="handleMerge" style="width: 40%;" class="btn-red">合并</button>
</view>
<view class="nodata" v-if="infoList.length==0">
......@@ -125,7 +131,7 @@
function goDetail(item) {
if (item.status != '0') {
let path = `/pages/level/applyDetail?examId=${item.examId}`
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
......@@ -134,10 +140,16 @@
}
}
function goApproval(){
let path = `/level/approval`
uni.redirectTo({
url: path
});
}
function goMergeUp(){
// 合并提交
let path = `/pages/level/mergeUp`
uni.navigateTo({
let path = `/level/mergeUp`
uni.redirectTo({
url: path
});
}
......
<template>
<view>
<view class="text-center">
<view class="cardNav">
<view @click="goApproval">会员审核</view>
<view @click="goMerge">审核合并</view>
<view class="active">合并提交</view>
</view>
</view>
<!-- 级位合并提交 -->
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view v-show="total>0" class="vipData">
<view>费用合计:<text>{{ statistical.totalCost?.toFixed(2) }} 元</text></view>
<view>考试人数合计:<text>{{ statistical.totalNum }} 人</text></view>
</view>
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="appItem" v-for="(item,index) in infoList" :key="index">
<view class="status" @click="goDetail(item)">
<view :class="{
'text-success':item.status=='1',
......@@ -33,14 +44,18 @@
<view class="func" v-if="item.auditStatus == 100">
<button @click="handleAudit(item)">提交</button>
<!-- <button v-if="item.lastIds?.slice(0, 1) != '-'" @click="resolution(item)">取消合并</button> -->
<button @click="handleCancel(item)">取消合并</button>
</view>
<view class="func" v-if="(item.isView=='1' && item.auditStatus=='1') || item.payStatus=='3'">
<button @click="handleBack(item)">撤回</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<button class="btn-red" @click="gohome">回到首页</button>
<text>暂无数据</text>
</view>
</view>
</template>
......@@ -49,16 +64,17 @@
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'lodash'
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import {
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
flowCode: undefined,
mergeName: undefined,
// pageSize: 10,
status: '100',
examCode: undefined,
type: '1'
})
const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝'])
......@@ -66,7 +82,8 @@
const current = ref()
const list = ref([])
const infoList = ref([])
const totalCost = ref(0)
const statistical = ref({})
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad(() => {
......@@ -109,6 +126,10 @@
uni.showLoading({
title: '加载中'
})
statistical.value = {
totalCost: 0,
totalNum: 0
}
api.getVerityMergeList(queryParams.value).then(response => {
uni.hideLoading()
const list = []
......@@ -124,10 +145,57 @@
item.handleDate = r.handleDate
list.push(item)
totalCost.value += (item.totalAmount * 1)
statistical.value.totalCost += (item.totalAmount * 1)
statistical.value.totalNum += (item.totalNum * 1)
})
infoList.value = list
total.value = response.total
})
}
function handleBack(row){
uni.showModal({
title: '请输入撤回理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入撤回理由',
icon: 'none'
})
} else {
var obj = {
flag: '2',
reason: res.content,
recordId: row.recordId
}
api.doVerityBack(obj).then(rr=>{
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
}
})
}
function handleCancel(item) {
uni.showModal({
title: '提示',
content: `确定取消合并${item.mergeName}?`,
success: function(res) {
if (res.confirm) {
api.cancelMerge(item.recordId).then(res => {
uni.showToast({
title: `操作成功!`
})
getList()
})
}
}
})
}
......@@ -153,17 +221,25 @@
}
function goDetail(item) {
const form = encodeURIComponent(JSON.stringify(item))
const form = JSON.stringify(item)
// 查看
let path = `/pages/level/mergeUpDetail?form=${form}&type=1`
let path = `/level/mergeUpDetail?form=${form}&type=1`
uni.navigateTo({
url: path
});
}
function gohome(){
let path = `/pages/index/index`
uni.reLaunch({
function goApproval() {
let path = `/level/approval`
uni.redirectTo({
url: path
});
}
function goMerge() {
let path = `/level/merge`
uni.redirectTo({
url: path
});
}
......
<template>
<view>
<view class="wBox">
<view class="tt">基本信息</view>
<view class="ddd">
<text class="lab">结算编号:</text>{{ form.flowCode }}
</view>
<view class="ddd">
<text class="lab">{{ type=='1'?'考级名称':'考段名称' }}:</text>{{form.mergeName}}
</view>
<view class="ddd">
<text class="lab">申请单位:</text>{{ form.memName }}
</view>
<view class="ddd" v-if="form.mergeTime">
<text class="lab">申请日期:</text>{{form.mergeTime?.slice(0,10)}}
</view>
<view class="ddd">
<text class="lab">{{ type=='1'?'考级人数':'考段人数' }}:</text>{{form.totalNum}}
</view>
<view class="ddd">
<text class="lab">总金额:</text>¥{{ (form.totalAmount*1).toFixed(2) }}
</view>
</view>
<view class="wBox">
<view class="tt">
考试信息
</view>
<view class="userlist">
<view class="item" v-for="(n,index) in infoList" :key="index" @click="goDetail(n)" style="background-color: #fffafa;">
<view class="w100">
<view class="name">{{n.name}}</view>
<!-- <view class="date">{{n.idcTypeStr}}:{{n.idcCode}}</view> -->
<view class="flexbox">
<view>
上报单位
<text>{{n.memberName}}</text>
</view>
<view>
{{type=='1'?'考级考生数':'考段考生数'}}
<text>
{{n.totalNum}}
</text>
</view>
<view>
金额
<text class="text-danger">¥{{ (n.totalAmount*1).toFixed(2) }}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'lodash'
import {
onMounted,
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
recordId: ''
})
const form = ref({})
const list = ref([])
const infoList = ref([])
const deptType = ref()
const type = ref(null)
let rangeId = ''
onLoad((option) => {
if ('form' in option) {
form.value = JSON.parse(option.form)
// console.log(111,form.value)
}
type.value = option.type
// console.log(222,form.value)
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getForm()
}
function getForm() {
uni.showLoading({
title: '加载中'
})
api.getMergePaymentInfo(form.value.recordId).then(res => {
_.each(res.rows, (r) => {
const item = JSON.parse(r.content)
item.recordId = r.recordId
infoList.value.push(item)
})
console.log(infoList.value)
form.value.totalNum = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalNum || 0)))
form.value.totalAmount = Math.floor(_.sumBy(infoList.value, (o) => parseFloat(o.totalAmount || 0)))
uni.hideLoading()
})
}
function goDetail(item){
const form = encodeURIComponent(JSON.stringify(item))
let path = `/level/applyDetail?examId=${item.examId}&form=${form}`
uni.navigateTo({
url: path
});
}
</script>
<style scoped lang="scss">
.wBox {
width: 700rpx;
padding: 30rpx;
margin: 20rpx auto;
background: #FFFFFF;
box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
border-radius: 15rpx;
.tt {
color: #0A1629;margin: 0 0 30rpx;
font-size: 30rpx;
}
.ddd{font-size: 28rpx;color: #333;
.lab{color: #999;display: inline-block;text-align: justify;
text{word-break: break-all;}
}
}
}
</style>
\ No newline at end of file
<template>
<view>
<!-- 查看缴费单+上传凭证 -->
<!-- 缴费审核 -->
<!--级位考试缴费单 查看+上传凭证 -->
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="status" @click="goDetail(item)">
<text v-if="item.record.auditStatus==0" class="text-primary">审核中</text>
<text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text>
<text v-if="item.record.auditStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已退回</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text v-if="item.payTime">{{item.payTime}} 缴费</text>
<text v-else>{{item.payNoticeSendTime}} 下发</text>
</view>
......@@ -86,7 +85,7 @@
url:'',
remark:''
})
onLoad(() => {
onLoad((option) => {
if (app.globalData.isLogin) {
init()
} else {
......@@ -146,7 +145,7 @@
function goDetail(item) {
//详情
console.log(item.docId)
let path = `/pages/personalVip/feeBillDetail?docId=${item.docId}`
let path = `/personalVip/feeBillDetail?docId=${item.docId}`
uni.navigateTo({
url: path
});
......@@ -164,4 +163,7 @@
margin: 50rpx 0 30rpx;
}
}
:deep(.file-picker__progress){
opacity: 0;
}
</style>
\ No newline at end of file
......
......@@ -47,6 +47,9 @@
<button @click="audit(item,'2')">拒绝</button>
<button @click="audit(item,'1')">同意</button>
</view>
<view class="func" v-if="(item.isView=='1' && item.status=='1') || item.payStatus=='3'">
<button @click="handleBack(item)">撤回</button>
</view>
</view>
</view>
......@@ -144,7 +147,7 @@
function goDetail(item) {
const form = encodeURIComponent(JSON.stringify(item))
// 查看
let path = `/pages/level/mergeUpDetail?form=${form}&type=1`
let path = `/level/mergeUpDetail?form=${form}&type=1`
uni.navigateTo({
url: path
});
......@@ -202,6 +205,35 @@
getList()
})
}
function handleBack(row){
uni.showModal({
title: '请输入撤回理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入撤回理由',
icon: 'none'
})
} else {
var obj = {
flag: '2',
reason: res.content,
recordId: row.recordId
}
api.doVerityBack(obj).then(rr=>{
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
}
})
}
</script>
......
......@@ -11,9 +11,11 @@
}">{{ item.certStatusStr }}</text>
</view>
<view class="date">提交日期:{{item.submitTimeStr}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="pp esp" v-if="item.certTime">证书发送时间:{{item.certTimeStr}}</view>
<view class="date">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.submitTimeStr}} 提交</view>
<view class="name mt0 w100" @click="goDetail(item)"><text class="dot"></text>{{item.name}}</view>
<view class="pp esp" v-if="item.certTimeStr">证书发送时间:{{item.certTimeStr}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请单位
......@@ -99,7 +101,7 @@
function goDetail(item) {
// const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/level/ztx/examList?type=${queryParams.value.type}&payId=${item.payId}`
let path = `/level/ztx/examList?type=${queryParams.value.type}&payId=${item.payId}`
uni.navigateTo({
url: path
});
......
......@@ -98,7 +98,7 @@ const statusArr = ['未发放', '部分发放', '已发放']
function goDetail(item) {
// const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}`
let path = `/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}`
uni.navigateTo({
url: path
});
......
<template>
<view class="hasfixedbottom">
<view>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" placeholder="搜索姓名" @blur="getList()" @clear="getList()">
......@@ -87,9 +87,15 @@
function sendCert(row) {
let msg
if(row.isCert==1){
msg = `更新`
}else{
msg = `下发`
}
uni.showModal({
title: '提示',
content: `确定下发 ${row.realName} 的证书吗`,
content: `确定${msg}${row.realName}的证书吗`,
success: function(res) {
if (res.confirm) {
const params = [{
......@@ -130,7 +136,7 @@
rangeId: queryParams.value.paymentRangeId,
personIdArray: arr.join(',')
}).then(res => {
let path = `/pages/personalVip/renew?rangeId=${res.data.rangeId}`
let path = `/personalVip/renew?rangeId=${res.data.rangeId}`
uni.redirectTo({
url: path
});
......
{
"name" : "miniP",
"name" : "ztx_wx_admin",
"appid" : "__UNI__580BCB0",
"description" : "",
"versionName" : "1.0.1",
......@@ -38,7 +38,7 @@
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "wx5d51e8ed31bbdbb7", //J系统
"appid" : "wx70f16625f10de4fe", //J系统
// "appid" : "wx70f16625f10de4fe",//新跆联
// "appid" : "wx5e2471ed6210c3a6",
......
......@@ -5,15 +5,15 @@
<view class="vipData mb30" v-show="totalCost>0">
<view>费用合计:<text>{{ totalCost.toFixed(2) }}元</text></view>
</view>
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.verityStatus==0" class="text-primary">审核中</text>
<text v-if="item.verityStatus==1" class="text-success"> 审核通过</text>
<text v-if="item.verityStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="item.verityStatus==3" class="text-warning">已退回</text>
<text v-if="item.verityStatus==3" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)" v-if="item.submitTime">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text>{{item.submitTime}} 创建</text>
</view>
......@@ -59,7 +59,7 @@
</uni-forms-item>
<uni-forms-item label="缴费凭证" required>
<uni-file-picker limit="1" file-mediatype="all" file-extname="png,jpg,jpeg,pdf,zip"
<uni-file-picker v-model="selectFileValue" limit="1" file-mediatype="all" file-extname="png,jpg,jpeg,pdf,zip"
@select="selectFile" @progress="fileProgress"
@delete="delSupplementFile(index)"></uni-file-picker>
</uni-forms-item>
......@@ -93,15 +93,16 @@
const totalCost = ref(0)
const deptType = ref('')
const UpPop = ref(null)
const selectFileValue = ref({})
const form = ref({
docId: '',
payTime: '',
url: '',
payCert: '',
remark: ''
})
onLoad((option) => {
queryParams.value.type = option.type
console.log(option.type)
if (app.globalData.isLogin) {
init()
} else {
......@@ -130,26 +131,31 @@
})
})
}
function handleUpdate(item) {
form.value.docId = item.docId
if (item.payEvidence) {
form.value.url = item.payEvidence
form.value.payId = item.payId
if (item.payCert) {
form.value.payCert = item.payCert
selectFileValue.value = JSON.parse(item.payCert)[0]
}
if (item.payTime) {
form.value.payTime = item.payTime
}
if (item.remarks) {
form.value.remarks = item.remarks
}
UpPop.value.open()
}
let selectFileValue = {}
function selectFile(e) {
let file = e.tempFiles[0]
api.uploadFile(e).then(data => {
selectFileValue = {
selectFileValue.value = {
url: data.msg,
name: file.name,
extname: file.extname
}
form.value.url = JSON.stringify([selectFileValue])
form.value.payCert = JSON.stringify([selectFileValue.value])
});
}
......@@ -158,7 +164,7 @@
}
function delSupplementFile(index) {
selectFileValue = {}
selectFileValue.value = {}
}
function uploadSure() {
......@@ -170,21 +176,21 @@
})
return
}
if (!form.value.url) {
if (!form.value.payCert) {
uni.showToast({
icon: `none`,
title: '请上传缴费凭证'
})
return
}
api.groupCommitPaymentVoucher(form.value).then(res => {
api.submitPayment(form.value).then(res => {
UpPop.value.close()
form.value = {}
getList()
uni.showToast({
icon: 'none',
title: '操作成功'
})
getList()
})
}
......@@ -209,4 +215,7 @@
margin: 50rpx 0 30rpx;
}
}
:deep(.file-picker__progress){
opacity: 0;
}
</style>
\ No newline at end of file
......
......@@ -116,8 +116,8 @@
function goDetail(item) {
// examId
if(type.value = '1'){
let path = `/pages/level/applyDetail?examId=${item.examId}`
if(type.value == '1'){
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
......@@ -132,7 +132,7 @@
<style scoped lang="scss">
.wBox {
width: 700rpx;
width: 700rpx;box-sizing: border-box;
padding: 30rpx;
margin: 20rpx auto;
background: #FFFFFF;
......
<template>
</template>
<script setup>
import {
ref,getCurrentInstance
} from 'vue';
import {
onLoad,
onShow,onReady
} from '@dcloudio/uni-app';
import * as api from '@/common/api.js';
const { proxy } = getCurrentInstance()
const app = getApp();
</script>
<style scoped>
button{ font-size: 32rpx; background: linear-gradient(90deg, #00C176, #3ed89b);}
.richContent{padding: 40rpx 40rpx 100rpx;
line-height: 1.6;
background: #fff;}
.richContent2{padding: 0 0 40rpx;
line-height: 1.6;
background: #fff;}
.graybg {
background: #f7f8fa;
height: 100vh;
padding: 0 0 100rpx;
width: 100vw;
overflow: auto;
}
.whitebg {
background: #fff;
margin-top: 15rpx;
border-radius: 20rpx;
margin-bottom: 90rpx;
}
.payBtn {
width: 750rpx;
line-height: 90rpx;
height: 120rpx;
text-align: center;
background: #ff8124;
color: #ffffff;
font-size: 36rpx;
border-radius: 20rpx 20rpx 0px 0px;
position: fixed;
bottom: 0;
}
.uni-list-cell::after {
display: none;
}
.formBox{ background: #fff;
padding: 50rpx 40rpx;
margin: 0 30rpx;
border-radius: 20rpx;}
.popBody {
font-size: 28rpx;
line-height: 1.5;
font-family: 华文仿宋;
height: 80vh;
overflow: auto;
padding: 30rpx;
.btn-red {
margin: 50rpx 0 30rpx;
}
}
</style>
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
......@@ -2,37 +2,37 @@
<view>
<view v-if="userType=='1'" class="girdBox f3">
<view @click="goPath('/pages/rank/approval?type=3')">
<image src="@/static/icon/21.png" />越段考试审核
<image :src="config.baseUrl_api+'/fs/static/icon/21.png'" />越段考试审核
</view>
<view @click="goPath('/pages/rank/scoreApproval?type=3')">
<image src="@/static/icon/22.png" />越段成绩审核
<image :src="config.baseUrl_api+'/fs/static/icon/22.png'" />越段成绩审核
</view>
<view @click="goPath('/pages/level/ztx/cert?type=3')">
<image src="@/static/icon/23.png" />越段证书发布
<view @click="goPath('/level/ztx/cert?type=3')">
<image :src="config.baseUrl_api+'/fs/static/icon/23.png'" />越段证书发布
</view>
</view>
<view class="girdBox" v-if="userType=='2'">
<view @click="goPath('/pages/rank/apply?type=2')">
<image src="@/static/icon/11.png" />段位考试申请
<image :src="config.baseUrl_api+'/fs/static/icon/11.png'" />段位考试申请
</view>
<view @click="goPath('/pages/exam/payment?type=2')">
<image src="@/static/icon/13.png" />段位考试<br />缴费单
<image :src="config.baseUrl_api+'/fs/static/icon/13.png'" />段位考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=2')">
<image src="@/static/icon/12.png" />段位考试<br />成绩录入
<image :src="config.baseUrl_api+'/fs/static/icon/12.png'" />段位考试<br />成绩录入
</view>
<view @click="goPath('/pages/rank/apply?type=3')">
<image src="@/static/icon/14.png" />越位考试<br />申请
<image :src="config.baseUrl_api+'/fs/static/icon/14.png'" />越位考试<br />申请
</view>
<view @click="goPath('/pages/exam/payment?type=3')">
<image src="@/static/icon/16.png" />越段考试<br />缴费单
<image :src="config.baseUrl_api+'/fs/static/icon/16.png'" />越段考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=3')">
<image src="@/static/icon/15.png" />越段考试<br />成绩录入
<image :src="config.baseUrl_api+'/fs/static/icon/15.png'" />越段考试<br />成绩录入
</view>
</view>
</view>
......@@ -45,9 +45,11 @@
import {
ref
} from 'vue'
import config from '@/config.js'
const app = getApp()
const userType = ref()
onLoad((option)=>{
console.log(option)
userType.value = option.userType
})
......
......@@ -34,11 +34,11 @@
switch (d.type) {
case 30001:
d.name = '你有一条会员缴费等待审批,点击去处理!'
d.path = '/pages/personalVip/audit'
d.path = '/personalVip/audit'
break
case 30002:
d.name = '你有一条级位考试等待审批,点击去处理!'
d.path = '/pages/level/approval'
d.path = '/level/approval'
break
case 30003:
d.name = '你有一条段位考试等待审批,点击去处理!'
......@@ -46,11 +46,11 @@
break
case 30004:
d.name = '你有一条会员调动等待审批,点击去处理!'
d.path = '/pages/personalVip/mobillize'
d.path = '/personalVip/mobillize'
break
case 30005:
d.name = '你有一条团体会员认证等待审批,点击去处理!'
d.path = '/pages/group/apply/applyList'
d.path = '/group/apply/applyList'
break
case 30006:
d.name = '你有一条段位成绩等待审批,点击去处理!'
......@@ -58,7 +58,7 @@
break
case 40001:
d.name = '你有一条级位申请待提交,点击去处理!'
d.path = `/pages/level/apply?id=${d.eventId}`
d.path = `/level/apply?id=${d.eventId}`
break
case 40002:
d.name = '你有一条段位申请待提交,点击去处理!'
......@@ -70,7 +70,7 @@
break
case 50001:
d.name = '你有一条新的个人会员申请,点击去处理!'
d.path = '/pages/personalVip/list'
d.path = '/personalVip/list'
break
}
}
......
This diff could not be displayed because it is too large.
......@@ -7,7 +7,7 @@
<!-- <view class="invertedbtn-red" @click="goAdd">+ 添加段位考试</view> -->
</view>
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-primary':item.status=='1',
......@@ -35,6 +35,7 @@
</view>
</view>
<view class="func" v-if="item.status=='0'||item.status=='3'||item.status=='4'">
<button @click="handleDelete(item)">删除</button>
<button @click="editThis(item)">编辑</button>
<button @click="handleSubmit(item)">提交审核</button>
</view>
......@@ -105,14 +106,14 @@
}
function goAdd() {
let path = `/pages/level/addApply`
let path = `/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/pages/level/addApply?examId=${item.examId}`
let path = `/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
......@@ -140,7 +141,27 @@
})
})
}
function handleDelete(row) {
uni.showModal({
title: '提示',
content: `确定删除${row.name}吗`,
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: `删除中`
})
api.delLevel(row.examId).then(res=>{
uni.showToast({
title:'操作成功!',
icon:'none'
})
uni.hideLoading()
getList()
})
}
}
})
}
function goDetail(item) {
if(item.status!='0'){
......@@ -156,7 +177,7 @@
</script>
<style scoped>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
......
......@@ -6,7 +6,7 @@
<text class="lab">考段名称:</text>{{ form.name }}
</view>
<view class="ddd">
<text class="lab">申请日期:</text>{{form.applyTime}}
<text class="lab">申请日期:</text>{{form.applyTime?.slice(0,10)}}
</view>
<view class="ddd">
<text class="lab">申请单位:</text>{{ form.memberName }}
......@@ -23,8 +23,9 @@
<view class="ddd">
<text class="lab">考段地点:</text>{{form.address}}
</view>
<view class="ddd" v-if="app.globalData.showPrice">
<text class="lab">总金额:</text>{{(form.totalAmount*1).toFixed(2) }}
<view class="ddd" v-if="userType=='2'||userType=='1'">
<text class="lab">总金额:</text>
<text class="text-danger">¥{{(form.totalAmount*1).toFixed(2) }}</text>
</view>
</view>
<view class="wBox">
......@@ -45,18 +46,18 @@
<view class="flexbox">
<view>
原有段位
<text v-if="n.levelOld">{{ szToHz(n.levelOld) }}段/品</text>
<text v-else>--</text>
<text v-if="!n.levelOld||n.levelOld==0">--</text>
<text v-else>{{ szToHz(n.levelOld) }}段/品</text>
</view>
<view>
考试段位
<text v-if="n.levelNew">{{ szToHz(n.levelNew) }}段/品</text>
<text v-else>--</text>
</view>
<view v-if="app.globalData.showPrice">
<view v-if="userType=='2'||userType=='1'">
金额
<text>
{{ (n.examFee * 1).toFixed(2) }}
<text class="text-danger">
¥{{ (n.examFee * 1).toFixed(2) }}
</text>
</view>
<view>
......@@ -115,7 +116,7 @@ import {szToHz} from '@/common/utils.js'
const app = getApp();
const deptType = ref('')
const userType = ref('')
const form = ref({})
const tablePersonInfo = ref({})
const recordList = ref([])
......@@ -138,7 +139,7 @@ function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getForm()
getRecordList()
getTablePersonInfo()
......@@ -189,7 +190,7 @@ function getTablePersonInfo() {
</script>
<style scoped>
<style scoped lang="scss">
.wBox {
width: 700rpx;
padding: 30rpx;
......
......@@ -35,6 +35,9 @@
<button @click="audit(item,'2')">拒绝</button>
<button @click="audit(item,'1')">同意</button>
</view>
<view class="func" v-if="item.isView=='1' && item.status=='1' && item.rankStatus =='0'">
<button @click="handleBack(item)">撤回</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
......@@ -176,7 +179,35 @@ function goDetail(item) {
url: path
});
}
function handleBack(row){
uni.showModal({
title: '请输入撤回理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入撤回理由',
icon: 'none'
})
} else {
var obj = {
flag: '2',
reason: res.content,
recordId: row.recordId
}
api.doVerityBack(obj).then(rr=>{
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
}
})
}
</script>
<style lang="scss" scoped>
......
......@@ -16,8 +16,10 @@
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="name mt0" >{{item.name}}</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
提交时间:{{item.submitTime}}</view>
<view class="name mt10" ><text class="dot"></text>{{item.name}}</view>
<view class="pp esp">考段日期:{{item.startTime.substring(0,16)}} 至 {{item.endTime.substring(0,16)}}</view>
<view class="flexbox" >
<view>
......@@ -30,7 +32,9 @@
</view>
<view>
总金额
<view>¥{{(item.totalAmount*1).toFixed(2)}}</view>
<view>
<text class="text-danger">¥{{(item.totalAmount*1).toFixed(2)}}</text>
</view>
</view>
</view>
</view>
......
<template>
<view>
<view>请完善您的收件信息</view>
<uni-forms ref="baseForm" :modelValue="baseFormData">
<uni-forms-item label="收件人" required>
<uni-easyinput v-model="baseFormData.name" placeholder="请输入姓名" />
</uni-forms-item>
<uni-forms-item label="联系电话" required>
<uni-easyinput v-model="baseFormData.phone" placeholder="请输入联系电话" />
</uni-forms-item>
<uni-forms-item label="省/市/区/县" required>
<uni-data-picker placeholder="请选择 省/市/区/县" popup-title="请选择所在地区" :localdata="dataTree"
v-model="baseFormData.areaInfo" @change="onchange" @nodeclick="onnodeclick"
@popupopened="onpopupopened" @popupclosed="onpopupclosed">
</uni-data-picker>
</uni-forms-item>
<uni-forms-item label="详细地址" required>
<uni-easyinput v-model="baseFormData.address" placeholder="请输入详细地址" />
</uni-forms-item>
</uni-forms>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
const dataTree = ref([{
text: "江苏",
value: "00",
children: [{
text: "无锡",
value: "001"
}, {
text: "苏州",
value: "002"
}]
}]);
const baseFormData = ref({});
</script>
<style>
</style>
<template>
<view>
</view>
</template>
<template>
</template>
<script setup>
import * as api from '@/common/api.js'
import {
ref,
getCurrentInstance
} from 'vue';
import {
onLoad
} from '@dcloudio/uni-app'
const {
proxy
} = getCurrentInstance()
onLoad((options) => {
})
</script>
<style lang="scss" scoped>
</style>
<template>
</template>
<style scope lang="scss">
.wBox { position: relative;
background: #ffffff;
border-radius: 15px;
box-sizing: border-box;
}
:deep(.fixedbody .uni-group.uni-group--card){overflow:visible;}
:deep(.uni-tag){
padding: 4rpx 6rpx!important;font-size: 20rpx!important;
}
.avatarUrl{width: 200rpx;height:200rpx;}
.avatarUrl button{padding: 0;display: block;line-height: 1;}
.refreshIcon{width: 200rpx;height:200rpx;}
.matchItem{background: #FBFCFD; margin: 30rpx 0 90rpx;padding:20rpx;border: #eee solid 1rpx;
.bottomFunc{background: #FBFCFD;border: #eee solid 1rpx;}
}
.poKxBtn{position: absolute; top: -100rpx;
right: 0;
font-size: 24rpx;
line-height: 2;
}
.pp{display: flex;
.uni-data-tree{font-size: 24rpx;
.selected-list{padding: 0;}
.input-value{line-height:normal;padding: 0;}
}
}
.ttt{color: #2B3133;font-size: 30rpx;margin: 0 0 10rpx;
text{font-size: 24rpx;color: #DC0032;margin-left:10rpx;}
}
.idImgUrl{width: 500rpx;height: 300rpx;margin:20rpx auto 40rpx;
button {padding: 0;display: block;line-height: 1;}
.idImg{width: 500rpx;height: 300rpx;}
}
</style>
<template>
</template>
\ No newline at end of file
<template>
</template>
<style scope lang="scss">
.wBox {position: relative;background: #ffffff;border-radius: 15px;box-sizing: border-box;}
.avatarUrl{width: 200rpx;height:200rpx;}
.avatarUrl button{padding: 0;display: block;line-height: 1;}
.refreshIcon{width: 200rpx;height:200rpx;}
.matchItem{background: #FBFCFD; margin: 0 0 90rpx;padding:20rpx;border: #eee solid 1rpx;
.bottomFunc{background: #FBFCFD;border: #eee solid 1rpx;}
}
.poKxBtn{position: absolute; top: -100rpx;
right: 0;
font-size: 24rpx;
line-height: 2;
}
.pp{display: flex;
.uni-data-tree{font-size: 24rpx;
.selected-list{padding: 0;}
.input-value{line-height:normal;padding: 0;}
}
}
.matchItem .leftImg image{width: 200rpx;height: 150rpx;border-radius: 4px;}
</style>
......@@ -153,6 +153,18 @@
rangeId: baseFormData.value.rangeId || -1,
personIdArray: baseFormData.value.personIdArray
}).then(res => {
if(res.data.result == 0){
uni.showModal({
content: res.data?.list?.[0]?.msg,
success: function(res) {
}
})
} else {
uni.showToast({
title:'新增成功'
})
}
baseFormData.value.rangeId = res.data
queryParams.value.rangeId = res.data
flag.value = true
......@@ -164,9 +176,13 @@
}
function getList() {
uni.showLoading({
title:'加载中'
})
api.getTransferList(queryParams.value).then(res => {
list.value = res.rows
total.value = res.total
uni.hideLoading()
})
}
......
......@@ -20,8 +20,8 @@
<uni-file-picker :class="baseFormData.card?'':'op0'" v-model="baseFormData.cardObj"
@delete="delimgFont" return-type="object" limit="1" @select="upIdCardImgFront"
:image-styles="imageStylesZJ"></uni-file-picker>
<image v-if="!baseFormData.card" class="sfz" src="@/static/login/sfz.png">
</image>
<!-- <image v-if="!baseFormData.card" class="sfz" src="@/static/login/sfz.png">
</image> -->
</view>
</uni-forms-item>
<uni-forms-item label="姓名" required name="name" v-show="current === 1">
......@@ -53,8 +53,8 @@
placeholder="请输入详细地址" /></uni-forms-item>
<uni-forms-item label="头像" required name="photo">
<uni-file-picker v-model="baseFormData.photoObj" @delete="delPhoto" return-type="object"
limit="1" @select="upPhoto" :image-styles="imageStylesTx"></uni-file-picker>
<uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1"
@select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker>
</uni-forms-item>
......@@ -67,8 +67,10 @@
</view>
<view class="agreeline">
<image @click="changeAgree(agree)" v-if="agree" src="@/static/login/xz_dwn@2x.png"></image>
<image @click="changeAgree(agree)" v-else src="@/static/login/xz@2x.png"></image>
<image @click="changeAgree(agree)" v-if="agree"
:src="config.baseUrl_api+'/fs/static/login/xz_dwn@2x.png'"></image>
<image @click="changeAgree(agree)" v-else :src="config.baseUrl_api+'/fs/static/login/xz@2x.png'">
</image>
<view>我已阅读<text @click="openpopup">《入会须知》</text></view>
</view>
</view>
......@@ -108,16 +110,21 @@
<script setup>
import {
onMounted,
ref
} from 'vue'
import * as api from '@/common/api.js'
import {
onLoad
} from '@dcloudio/uni-app'
import config from '@/config.js'
const current = ref(0)
const popup = ref(null)
const agree = ref(false)
const perId = ref()
const photoArr = ref([])
const regionsList = ref([])
const baseFormData = ref({
photo: '',
sex: '0',
idcType: '0',
perType: '1', // (1:个人会员;2:教练;3:考官;4:裁判;5:临时会员;)
......@@ -129,19 +136,26 @@
},
{
value: '1',
text: "港澳台通信身份证"
text: "港澳台通行证"
},
{
value: '3',
text: "外国护照"
},
{
value: '4',
text: "其它"
}, {
value: '5',
text: '户口本'
}
])
const sexs = ref([{
text: '女',
value: '0'
value: '1'
}, {
text: '男',
value: '1'
value: '0'
}])
const placeholderStyle = ref('text-align: right;font-size:30rpx')
const inputstyle = ref({
......@@ -163,8 +177,11 @@
width: '500rpx',
height: '316rpx'
});
onMounted(() => {
onLoad((option) => {
if (option.tab == '1') {
current.value = 1
}
// console.log(current.value,option.tab)
getRegionsList()
})
......@@ -208,7 +225,7 @@
function upPhoto(e) {
api.uploadImg(e).then(data => {
baseFormData.value.photo = data.data;
baseFormData.value.photo = data.msg;
});
}
......@@ -217,6 +234,7 @@
}
function delPhoto(n) {
photoArr.value = [];
baseFormData.value.photo = '';
}
......@@ -243,13 +261,14 @@
}
baseFormData.value.birth = tmpStr
const res = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
if (baseFormData.value.idcCode && res.test(baseFormData.value.idcCode)) {
const sse = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
if (sse.test(baseFormData.value.idcCode)) {
const genderCode = baseFormData.value.idcCode.charAt(16)
if (parseInt(genderCode) % 2 == 0) {
baseFormData.value.sex = '0'
} else {
baseFormData.value.sex = '1'
} else {
baseFormData.value.sex = '0'
}
}
}
......@@ -279,12 +298,33 @@
return
}
// 验证必填项
if (!baseFormData.value.name) {
uni.showToast({
title: `请输入姓名`,
icon: 'none'
})
return
}
if (!baseFormData.value.idcCode) {
uni.showToast({
title: `请输入证件号码`,
icon: 'none'
})
return
}
console.log(baseFormData.value.photo)
if (baseFormData.value.photo == '' || baseFormData.value.photo == undefined || !baseFormData.value.photo) {
uni.showToast({
title: `请上传头像`,
icon: 'none'
})
return
}
//信息确认弹出
uni.showModal({
content: '确认信息正确',
success: function(res) {
if (res.confirm) {
delete baseFormData.value
api.addPersonToMyDept(baseFormData.value).then(res => {
if (res.data == 0) {
let msg = '该成员,实名认证未通过,注册失败!'
......@@ -297,13 +337,21 @@
getUserInfo()
return
}
let msg = '操作成功,您可以去列表中查看'
form.value = { perType: 1, idcType: '0' }
let msg = '保存成功'
uni.showToast({
title: msg,
icon: 'none'
})
uni.redirectTo({
url: `/personalVip/addVip?tab=${current.value}`
});
}).catch(() => {
let msg = '您已注册该会员,请不要重复注册!'
uni.showToast({
title: msg,
icon: 'none'
})
})
}
}
......@@ -312,9 +360,10 @@
}
function getUserInfo() {
api.getInfo(perId.value).then(res=>{
api.getInfo(perId.value).then(res => {
forms.value = res.data
if (forms.areaAssName)forms.ancestorNameList = forms.value.ancestorNameList.join(',').replaceAll(',', '/')
if (forms.areaAssName) forms.ancestorNameList = forms.value.ancestorNameList.join(',').replaceAll(',',
'/')
})
}
</script>
......@@ -377,6 +426,9 @@
.sfz {
width: 500rpx;
position: absolute;
top: 0;
left: 0;
height: 316rpx;
}
}
......
<template>
<view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem" styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="text-center" v-if="userType=='2'">
<view class="cardNav" v-if="userType=='2'">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
</view>
</view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<!-- 缴费审核 -->
<view v-if="total>0" class="vipData" style="flex-wrap: wrap;">
<view class="w50">人数合计 <text>{{ statistical.personCount }} 人</text></view>
<view class="w50">新会员合计 <text>{{ statistical.newPersonCount }} 人</text></view>
<view class="w50">续费合计 <text>{{ statistical.oldPersonCount }} 人</text></view>
<view class="w50">年限合计 <text>{{ statistical.totalYear }} 年</text></view>
</view>
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.auditStatus==0" class="text-primary">审核中</text>
<text v-if="item.auditStatus==1" class="text-success"> 审核通过</text>
<text v-if="item.auditStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="item.auditStatus==3" class="text-warning">已退回</text>
<text v-if="item.auditStatus==3" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.content.commitTime}} 提交
</view>
<view class="name" @click="goDetail(item)">{{item.content.name}}</view>
......@@ -34,6 +48,9 @@
<button @click="audit(item.recordId,'0')">拒绝</button>
<button @click="audit(item.recordId,'1')">同意</button>
</view>
<view class="func" v-if="item.auditStatus==1 && item.isView == 1">
<button @click="handleDelete(item)">撤回</button>
</view>
</view>
</view>
......@@ -43,6 +60,9 @@
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
<!-- <view v-if="userType=='2'" class="block-btn-box">
<button @click="goMerge" class="btn-red-kx">前往合并 > </button>
</view> -->
</view>
</template>
......@@ -54,7 +74,7 @@
ref
} from 'vue'
import {
onLoad
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
......@@ -62,42 +82,78 @@
// pageSize: 10
auditStatus: '0'
})
const navs = ref(['待审核','审核通过','审核拒绝','退回'])
const navs = ref(['待审核', '审核通过', '审核拒绝', '撤回'])
const current = ref(0)
const list = ref([])
const statistical = ref({})
const total = ref(0)
const deptType = ref('')
onLoad(() => {
const userType = ref('')
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init(){
function init() {
userType.value = app.globalData.userType
deptType.value = app.globalData.deptType
getList()
}
function onClickItem(e){
function onClickItem(e) {
console.log(e)
queryParams.value.auditStatus = e.currentIndex
getList()
}
function getList() {
if(deptType.value==2||deptType.value==3){
uni.showLoading({
title: `加载中`
})
statistical.value = {
personCount: 0,
newPersonCount: 0,
oldPersonCount: 0,
totalYear: 0
}
if (deptType.value == 2 || deptType.value == 3) {
queryParams.value.mergeFlag = 0
}
api.getVerifyList(queryParams.value).then(res => {
list.value = res.rows
list.value.forEach(item => {
item.content = JSON.parse(item.content)
statistical.value.personCount += (item.content.personCount * 1)
statistical.value.newPersonCount += (item.content.newPersonCount * 1)
statistical.value.oldPersonCount += (item.content.oldPersonCount * 1)
statistical.value.totalYear += (item.content.totalYear * 1)
})
total.value = res.total
uni.hideLoading()
})
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定撤回 ${row.content.name}?`,
success: function(res) {
if (res.confirm) {
api.withDraw({recordId: row.recordId, reason: row.reason}).then(res=>{
uni.showToast({
title:`操作成功`
})
getList()
})
}
}
})
}
function audit(recordId, flag) {
if (flag == '0') {
// 拒绝
......@@ -150,10 +206,29 @@
}
function goDetail(item) {
let path = `/pages/personalVip/auditDetail?wfId=${item.wfId}&auditStatus=${queryParams.value.auditStatus}`
const form = encodeURIComponent(JSON.stringify(item))
console.log(userType.value)
let path =
`/personalVip/auditDetail?form=${form}`
uni.navigateTo({
url: path
});
}
function goMerge() {
let path = `/personalVip/sheng/merge`
uni.redirectTo({
url: path
});
}
function goMergeUp() {
let path = `/personalVip/sheng/mergeUp`
uni.redirectTo({
url: path
});
}
</script>
......
......@@ -2,43 +2,59 @@
<view class="hasfixedbottom">
<view class="wBox">
<view class="tt">{{form.content?.name}}</view>
<view class="info">
<view>共 <text class="text-danger"> {{ form.content?.personCount }} </text> 人</view>
<view>合计缴费年限 <text class="text-primary"> {{totalYear }} </text> 年</view>
<view class="info" style="flex-wrap: wrap;">
<view class="w45">共 <text class="text-danger"> {{ form.content?.personCount }} </text> 人</view>
<view class="w45">新会员 <text class="text-primary"> {{form.content?.newPersonCount }} </text> 人</view>
<view class="w45">续费合计 <text class="text-primary"> {{form.content?.oldPersonCount }} </text> 人</view>
<view class="w45" v-if="(userType=='2'||userType=='1')&&form.content.allFee ">费用合计
<text class="text-danger">{{ form.content?.allFee }} </text> 元
</view>
</view>
<!-- 成员 -->
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
<view class="item" v-for="(n,index) in list" :key="index" @click="handleInfo(n)">
<view class="w100">
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至 {{n.originValidityDate?.slice(0,10)||'--'}}</view>
<view class="flexbox" v-if="userType=='2'||userType=='1'">
<view>
单价
<text>¥{{n.unitPrice}}</text>
</view>
<view>
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至 {{n.originValidityDate||'--'}}</view>
年限
<text>{{n.payYear}} 年</text>
</view>
<view>
总价
<text class="text-danger">¥{{n.allPrice}}</text>
</view>
<view class="nian">
{{n.payYear}} 年
</view>
</view>
</view>
<view class="goMore" v-if="total>6" @click="goMoreList">查看全部
<uni-icons type="forward" size="16"></uni-icons>
</view>
</view>
</view>
<view class="h3-padding">审核流程</view>
<view class="wBox">
<view class="stepItem" v-for="(n,index) in feelList">
<view class="stepItem" v-for="(n,index) in feelList" :key="index">
<view class="time">{{n.handleDate||'待审批'}}</view>
<view class="content">
<view class="status">
<text v-if="n.auditStatus==1" class="text-success">审核通过</text>
<text v-if="n.auditStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="n.auditStatus==0||n.auditStatus==100" class="text-primary"> 审核中</text>
<text v-if="n.auditStatus==3" class="text-warning"> 已退回</text>
<text v-if="n.auditStatus==3" class="text-warning"> 已撤回</text>
</view>
<!-- <view class="name">第 {{index+1}} 步</view> -->
<view class="deptName">{{n.handlerDeptName||n.auditBy}}</view>
<view v-if="n.auditStatus==2" >
<view v-if="n.auditStatus==2">
备注:{{n.reason||'/' }}
</view>
</view>
......@@ -65,76 +81,67 @@
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
pageNum: 1,
pageSize: 6
// mergeFlag: 0,
auditStatus: ''
// auditStatus: ''
})
const wfId = ref('')
const form = ref([])
const list = ref([])
const id = ref('')
const feelList = ref([])
const total = ref(0)
const totalYear = ref(0)
const deptType = ref()
const userType = ref('')
const statistical = ref({})
onLoad((option) => {
wfId.value = option.wfId
queryParams.value.auditStatus = option.auditStatus
console.log(option)
if (app.globalData.isLogin) {
init()
init(option)
} else {
app.firstLoadCallback = () => {
init()
init(option)
};
}
})
function init(){
deptType.value = app.globalData.deptType
function init(option) {
// wfId.value = option.wfId
// queryParams.value.auditStatus = option.auditStatus
if ('form' in option) {
form.value = JSON.parse(decodeURIComponent(option.form))
queryParams.value.recordId = form.value.recordId
}
console.log(form.value)
userType.value = app.globalData.userType
getForm()
}
function getForm() {
uni.showLoading({
title: '加载中'
})
totalYear.value = 0
if(deptType.value==2||deptType.value==3){
queryParams.value.mergeFlag = 0
}
api.getVerifyList(queryParams.value).then(res => {
uni.hideLoading()
if(res.rows)
for (var n of res.rows) {
if (n.wfId == wfId.value) {
form.value = n
}
}
if(form.value.content){
form.value.content = JSON.parse(form.value.content)
list.value = form.value.content.personList
for (var n of list.value) {
totalYear.value += n.payYear
if(n.photo&&n.photo.indexOf('http')==-1){
n.photo = config.baseUrl_api + n.photo
}
}
}
console.log(userType.value)
api.getDetailPersonList(queryParams.value).then(res => {
uni.hideLoading()
list.value = res.rows
total.value = res.total
getFillList(list.value[0]?.rangeId)
})
}
}
// 审核记录
function getFillList(id) {
if(id)
if (id)
api.getHistoryByRelateId(id).then(res => {
feelList.value = res.data
uni.hideLoading()
})
}
function audit(recordId, flag) {
if (flag == '0') {
// 拒绝
......@@ -172,7 +179,7 @@
function doApproval(recordId, flag, reason) {
var obj = {
flag: flag,
reason: reason||'',
reason: reason || '',
recordIds: []
}
obj.recordIds.push(recordId)
......@@ -185,39 +192,87 @@
uni.navigateBack()
})
}
function changeList() {
}
function goMoreList() {
let path = `/personalVip/payPersonList?recordId=${queryParams.value.recordId}`
uni.navigateTo({
url: path
});
}
function handleInfo(n) {
uni.navigateTo({
url: `/personalVip/detail?perId=${n.perId}`
})
}
</script>
<style scoped lang="scss">
.wBox{
width: 700rpx;padding: 30rpx;margin: 20rpx auto 0;
.wBox {
width: 700rpx;
padding: 30rpx;
margin: 20rpx auto 0;
background: #FFFFFF;
box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196,203,214,0.1);
box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
border-radius: 15rpx;
.tt{
color: #0A1629;
font-size: 30rpx;}
}
.userlist{
.item{border-bottom: 1px dashed #e5e5e5;position: relative;
.date{margin-top: 10rpx;}
.name{
text{margin-left: 1em;
color: #4C5359;
font-size: 26rpx;}
}
.nian{position: absolute;right: 0;
font-size: 30rpx;
color: #AD181F;}
}
}
.info{display: flex;margin: 30rpx 0 20rpx;
font-size: 28rpx;
view{color: #7D8592;margin-right: 20rpx;
}
}
.fixedBottom{justify-content: center;
button{margin: 0 20rpx;width: 286rpx;}
.btn-red{width: 286rpx;}
}
.tt {
color: #0A1629;
font-size: 30rpx;
}
}
.userlist {
.item {
border-bottom: 1px dashed #e5e5e5;
position: relative;
.date {
margin-top: 10rpx;
}
.name {
text {
margin-left: 1em;
color: #4C5359;
font-size: 26rpx;
}
}
.nian {
position: absolute;
right: 0;
font-size: 30rpx;
color: #AD181F;
}
}
}
.info {
display: flex;
margin: 30rpx 0 20rpx;
font-size: 28rpx;
view {
color: #7D8592;
margin-right: 20rpx;
}
}
.fixedBottom {
justify-content: center;
button {
margin: 0 20rpx;
width: 286rpx;
}
.btn-red {
width: 286rpx;
}
}
</style>
\ No newline at end of file
......
......@@ -33,8 +33,10 @@
import {ref } from 'vue'
const cardType = ref([
{ label: '身份证', value: '0' },
{ label: '港澳台通信身份证 ', value: '1' },
{ label: '外国护照', value: '3' }
{ label: '港澳台通行证 ', value: '1' },
{ label: '中国护照', value: '2' },
{ label: '外国护照', value: '3' },
{ label: '其它', value: '4' }
])
const form = ref({})
onLoad((option)=>{
......@@ -48,8 +50,8 @@
if(form.value.cityId){
getRegionsList(form.value.cityId)
}
if(form.photo&&form.photo.indexOf('http')==-1){
form.photo = config.baseUrl_api + form.photo
if(form.value.photo&&form.value.photo.indexOf('http')==-1){
form.value.photo = config.baseUrl_api + form.value.photo
}
})
})
......
<template>
<view>
<!--级位考试缴费单 查看+上传凭证 -->
<!-- 查看缴费单+上传凭证 -->
<!-- 缴费审核 -->
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="status" @click="goDetail(item)">
<text v-if="item.record.auditStatus==0" class="text-primary">审核中</text>
<text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text>
<text v-if="item.record.auditStatus==2" class="text-danger"> 审核拒绝</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已退回</text>
<text v-if="item.record.auditStatus==3" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text v-if="item.payTime">{{item.payTime}} 缴费</text>
<text v-else>{{item.payNoticeSendTime}} 下发</text>
</view>
......@@ -73,7 +74,7 @@
ref
} from 'vue'
import {
onLoad
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const list = ref([])
......@@ -85,11 +86,10 @@
url:'',
remark:''
})
onLoad(() => {
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
......@@ -145,7 +145,7 @@
function goDetail(item) {
//详情
console.log(item.docId)
let path = `/pages/personalVip/feeBillDetail?docId=${item.docId}`
let path = `/personalVip/feeBillDetail?docId=${item.docId}`
uni.navigateTo({
url: path
});
......
......@@ -5,10 +5,11 @@
<view class="subtt" v-if="form.payTime">提交日期:<text>{{ form.payTime }}</text></view>
<view class="subtt" v-if="form.payDeptName">提交单位:<text>{{ form.payDeptName }}</text></view>
<view class="info">
<view>共 <text class="text-danger"> {{ form.allPersonCount}} </text> 人</view>
<view>缴费合计人数 <text class="text-danger"> {{ form.oldPersonCount}} </text> 人</view>
<view>费用合计 <text class="text-primary"> ¥{{ form.allPrice }} </text> </view>
<view class="info" style="flex-wrap: wrap;">
<view class="w45">共 <text class="text-danger"> {{ form.allPersonCount}} </text> 人</view>
<view class="w45">新会员 <text class="text-danger"> {{ form.newPersonCount}} </text> 人</view>
<view class="w45">续费合计 <text class="text-danger"> {{ form.oldPersonCount}} </text> 人</view>
<view class="w45">费用合计 <text class="text-primary"> ¥{{ form.allPrice }} </text> </view>
</view>
<!-- 成员 -->
<view class="userlist">
......@@ -18,10 +19,10 @@
</view>
<view>
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至{{n.originValidityDate||'--'}}</view>
<view class="date">原有效期至{{n.originValidityDate?.slice(0,10)||'--'}}</view>
</view>
<view class="nian">
总价 ¥{{n.payYear}}
总价 ¥{{n.allPrice}}
</view>
</view>
</view>
......
<template>
<view>
<view class="searchbar">
<z-paging ref="paging" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png">
<view class="searchbar" :slot="top">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="query.name" @blur="getList" @clear="getList" placeholder="搜索姓名">
</uni-easyinput>
......@@ -8,7 +9,7 @@
</view>
<uni-swipe-action>
<uni-swipe-action-item class="personitem" v-for="n in list">
<uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index">
<view class="content-box" @click="handleInfo(n)">
<view class="flexbox">
<view class="photobox">
......@@ -38,26 +39,27 @@
</view>
</view>
<!-- <template v-slot:right>
<template v-slot:right>
<view class="slot-button">
<view class="edit-button" @click="handleUpdate(n)">
<!-- <view class="edit-button" @click="handleUpdate(n)">
<uni-icons type="compose" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">编辑</text>
</view>
</view> -->
<view class="danger-button" v-if="n.certStage==0" @click="handleDelete(n)">
<uni-icons type="trash" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">删除</text>
</view>
</view>
</template> -->
</template>
</uni-swipe-action-item>
</uni-swipe-action>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<!-- <image mode="aspectFit" src="/static/nodata.png"></image> -->
<button class="btn-red" v-if="userType=='4'" @click="goVipList">+ 添加会员</button>
<text v-else>暂无数据</text>
<!-- <text v-else>暂无数据</text> -->
</view>
</z-paging>
</view>
</template>
......@@ -79,20 +81,39 @@
perType: 1,
checkPaymentCommit: 1
})
const userType = ref('1')
const paging = ref(null)
const userType = ref('')
const list = ref([])
const total = ref(0)
const app = getApp();
onLoad(()=>{
onLoad(() => {
userType.value = app.globalData.userType
})
onMounted(() => {
getList()
})
function getQuery(pageNum,pageSize){
query.value.pageNum = pageNum
query.value.pageSize = pageSize
if (app.globalData.userType == '4') {
// 道馆
query.value.multiDeptFlag = null
query.value.showMyPersonFlag = 1
}
api.selectPageList(query.value).then(res => {
for (var l of res.rows) {
if (l.photo && l.photo.indexOf('http') == -1) {
l.photo = config.baseUrl_api + l.photo
}
}
list.value = res.rows
paging.value.complete(res.rows)
total.value = res.total
})
}
function getList() {
uni.showLoading({
title:'加载中'
title: '加载中'
})
if (app.globalData.userType == '4') {
// 道馆
......@@ -100,12 +121,13 @@
query.value.showMyPersonFlag = 1
}
api.selectPageList(query.value).then(res => {
list.value = res.rows
for(var l of list.value){
if(l.photo&&l.photo.indexOf('http')==-1){
for (var l of res.rows) {
if (l.photo && l.photo.indexOf('http') == -1) {
l.photo = config.baseUrl_api + l.photo
}
}
list.value = res.rows
paging.value.complete(res.rows)
total.value = res.total
uni.hideLoading()
})
......@@ -127,19 +149,21 @@
}
})
}
function handleUpdate(n) {
function handleUpdate(n) {
uni.navigateTo({
url: `/pages/personalVip/editVip?perId=${n.perId}&perType=${n.perType}`
url: `/personalVip/editVip?perId=${n.perId}&perType=${n.perType}`
})
}
}
function handleInfo(n) {
uni.navigateTo({
url: `/pages/personalVip/detail?perId=${n.perId}`
url: `/personalVip/detail?perId=${n.perId}`
})
}
function goVipList() {
let path = '/pages/personalVip/addVip';
let path = '/personalVip/addVip';
uni.navigateTo({
url: path
});
......@@ -173,6 +197,7 @@ function handleUpdate(n) {
}
}
.content-box {
background: #fff;
}
</style>
\ No newline at end of file
......
......@@ -33,20 +33,28 @@
<text v-if="item.status == 1">审核中</text>
<text v-if="item.status == 2" class="text-warning">审核拒绝</text>
<text v-if="item.status == 3" class="text-success">审核通过</text>
<text v-if="item.status == 4" class="text-danger">已退回</text>
<text v-if="item.status == 4" class="text-danger">已撤回</text>
</view>
</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="name mt0" @click="goDetail(item)">
{{item.name}}
</view>
<view class="pp" v-if="deptType == 1 || deptType == 2 || deptType == 3">
申请调入单位: {{item.targetDeptName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
调动类型
<view>{{ item.type == 1 ? '省外调动' : '省内调动' }}</view>
<view v-if="item.type == 1">
<text class="text-danger">省外调动</text>
</view>
<view v-if="deptType == 1 || deptType == 2 || deptType == 3">
申请调入单位
<view>{{item.targetDeptName}}</view>
<view v-else>
<text class="text-primary">省内调动</text>
</view>
<view>
</view>
<view class="w50">
会员合计
<view>{{item.personCount}}</view>
</view>
......@@ -125,7 +133,7 @@
if (deptType.value == 6) {
queryParams.value.dgId = 1
queryParams.value.status = '0'
navs.value = ['未提交', '审核中', '审核拒绝', '审核通过', '已退回']
navs.value = ['未提交', '审核中', '审核拒绝', '审核通过', '已撤回']
}
getList()
}
......@@ -181,14 +189,14 @@
}
function goAddMobilize() {
let path = `/pages/personalVip/addMobilize`
let path = `/personalVip/addMobilize`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/pages/personalVip/addMobilize?rangId=${item.id}`
let path = `/personalVip/addMobilize?rangId=${item.id}`
uni.navigateTo({
url: path
});
......@@ -248,14 +256,14 @@
const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}`
let path = `/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}`
uni.navigateTo({
url: path
});
}
</script>
<style scoped>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
......
<template>
<view>
<z-paging ref="paging" v-model="list" @query="getQuery" emptyViewImg="/static/nodata.png">
<view class="searchbar" :slot="top">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" @blur="getList" @clear="getList" placeholder="搜索姓名">
</uni-easyinput>
</view>
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="index" @click="handleInfo(n)">
<view class="w100">
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至 {{n.originValidityDate||'--'}}</view>
<view class="flexbox" v-if="userType=='2'||userType=='1'">
<view>
单价
<text>¥{{n.unitPrice}}</text>
</view>
<view>
年限
<text>{{n.payYear}} 年</text>
</view>
<view>
总价
<text class="text-danger">¥{{n.allPrice}}</text>
</view>
</view>
</view>
</view>
</view>
</z-paging>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
const queryParams = ref({
pageNum: 1,
pageSize: 20
})
const paging = ref(null)
const userType = ref('')
const list = ref([])
const total = ref(0)
const app = getApp();
onLoad((option) => {
queryParams.value.recordId = option.recordId
})
onMounted(() => {
if (app.globalData.isLogin) {
userType.value = app.globalData.userType
getList()
} else {
app.firstLoadCallback = () => {
userType.value = app.globalData.userType
getList()
};
}
})
function getQuery(pageNum, pageSize) {
queryParams.value.pageNum = pageNum
queryParams.value.pageSize = pageSize
api.getDetailPersonList(queryParams.value).then(res => {
paging.value.complete(res.rows);
})
}
function getList() {
api.getDetailPersonList(queryParams.value).then(res => {
paging.value.complete(res.rows);
})
}
function handleInfo(n) {
uni.navigateTo({
url: `/personalVip/detail?perId=${n.perId}`
})
}
</script>
<style scoped lang="scss">
.userlist {
box-sizing: border-box;
padding: 20rpx 20rpx 0;
.item {
border-bottom: 1px dashed #e5e5e5;
position: relative;
.date {
margin-top: 10rpx;
}
.name {
text {
margin-left: 1em;
color: #4C5359;
font-size: 26rpx;
}
}
.nian {
position: absolute;
right: 20rpx;
font-size: 30rpx;
color: #AD181F;
}
}
}
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
.invertedbtn-red {
margin-left: 15rpx;
font-size: 30rpx;
padding: 16rpx 20rpx;
box-sizing: border-box;
border-radius: 50rpx;
background-color: #fff;
}
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
}
</style>
\ No newline at end of file
......@@ -11,15 +11,16 @@
<!-- 会员缴费 -->
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.status==0" class="text-primary"></text>
<text v-if="item.status==1" class="text-primary">审核中</text>
<text v-if="item.status==2" class="text-success"> 审核通过</text>
<text v-if="item.status==3" class="text-danger"> 审核拒绝</text>
<text v-if="item.status==4" class="text-warning">已退回</text>
<text v-if="item.status==4" class="text-warning">已撤回</text>
</view>
<view class="date" @click="goDetail(item)" v-if="item.commitTime">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.commitTime}} 提交
</view>
<view class="name" @click="goDetail(item)">{{item.paymentName}}</view>
......@@ -38,6 +39,7 @@
</view>
</view>
<view class="func" v-if="item.status==0||item.status==3||item.status==4">
<button @click="handleDel(item)">删除</button>
<button @click="handleUpdate(item)">编辑</button>
<button @click="commitFN(item)">提交审核</button>
</view>
......@@ -66,14 +68,8 @@
const total = ref(0)
const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝'])
onShow(() => {
if (app.globalData.isLogin) {
console.log('123')
getList()
} else {
app.firstLoadCallback = () => {
getList()
};
}
})
function getList() {
......@@ -85,19 +81,39 @@
function goDetail(item) {
const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/personalVip/paymentDetail?form=${form}`
let path = `/personalVip/paymentDetail?form=${form}`
uni.navigateTo({
url: path
});
}
function handleUpdate(item) {
let path = `/pages/personalVip/renew?rangeId=${item.rangId}`
let path = `/personalVip/renew?rangeId=${item.rangId}`
uni.navigateTo({
url: path
});
}
function handleDel(row){
uni.showModal({
title: '提示',
content: `确定删除${row.paymentName}吗`,
success: function(res) {
if (res.confirm) {
uni.showLoading({
icon: 'none',
title: '请求中'
})
api.paymentDel(row.rangId).then(res => {
uni.hideLoading()
uni.showToast({
title: '操作成功'
})
getList()
})
}
}
})
}
function commitFN(row) {
uni.showModal({
title: '提示',
......@@ -113,8 +129,8 @@
uni.showToast({
title: '提交成功'
})
})
getList()
})
}
}
})
......@@ -123,7 +139,7 @@
}
function goAdd() {
let path = `/pages/personalVip/renew`
let path = `/personalVip/renew`
uni.navigateTo({
url: path
});
......
......@@ -7,11 +7,7 @@
</view>
<!-- 成员 -->
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
</view>
<view class="item" v-for="(n,index) in list" :key="index">
<view>
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至 {{n.originValidityDate?.slice(0,10)||'--'}}</view>
......@@ -26,14 +22,14 @@
<view class="h3-padding" v-if="feelList.length>0">审核流程</view>
<view class="wBox" v-if="feelList.length>0">
<view class="stepItem" v-for="(n,index) in feelList">
<view class="stepItem" v-for="(n,index) in feelList" :key="index">
<view class="time">{{n.auditTime||'待审批'}}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==0" class="text-primary"> 审核中</text>
<text v-if="n.auditResult==1" class="text-success">审核通过</text>
<text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text>
<text v-if="n.auditResult==0" class="text-primary"> 审核中</text>
<text v-if="n.auditResult==3" class="text-warning"> 已退回</text>
<text v-if="n.auditResult==3" class="text-warning"> 已撤回</text>
</view>
<view class="name">第 {{index+1}} 步</view>
<view class="deptName">{{n.auditDeptName||n.auditBy}}</view>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!