3a51a1cd by 张猛

团体支付考点

1 parent dbdf4c4c
......@@ -9,12 +9,14 @@ export function active(data) {
params: data
})
}
export function getBlack() {
return request({
url: '/member/info/check',
method: 'get'
})
}
export function commitPaymentVoucherYJ(data) {
return request({
url: '/person/paymentDocYj/commitPaymentVoucher',
......@@ -30,6 +32,7 @@ export function editMyMemberCertifiedInfo(data) {
params: data
})
}
export function addMergeToRange(params) {
return request({
url: `/person/infoMerge/addMergeToRange/${params.perIds}?perId=${params.perIds}&rangeIdStr=${params.rangeIdStr}`,
......@@ -37,6 +40,7 @@ export function addMergeToRange(params) {
params: params
})
}
export function mergerVipAudit(params) {
console.log(params)
return request({
......@@ -45,6 +49,7 @@ export function mergerVipAudit(params) {
params: params
})
}
export function infoMergeRangeList(params) {
return request({
url: `/person/infoMergeRange/list`,
......@@ -52,12 +57,14 @@ export function infoMergeRangeList(params) {
params: params
})
}
export function infoMergeMod(id) {
return request({
url: `/person/infoMerge/${id}`,
method: 'delete'
})
}
export function commitMergeVip(ids) {
return request({
url: `/person/infoMergeRange/commit/${ids}`,
......@@ -79,6 +86,7 @@ export function infoMergeList(params) {
params: params
})
}
export function editMergeByOldIdc(params) {
return request({
url: `/person/infoMerge/editMergeByOldIdc/${params.mergeId}?mergeId=${params.mergeId}&idcCode=${params.idcCode}`,
......@@ -86,6 +94,7 @@ export function editMergeByOldIdc(params) {
params: params
})
}
export function editMergeByFile(params) {
return request({
url: `/person/infoMerge/editMergeByFile/${params.mergeId}?mergeId=${params.mergeId}&fileUrl=${encodeURIComponent(params.fileUrl)}`,
......@@ -93,6 +102,7 @@ export function editMergeByFile(params) {
params: params
})
}
// 通知公告
export function notice(query) {
return request({
......@@ -101,6 +111,7 @@ export function notice(query) {
params: query
})
}
export function getNewsById(noteId) {
return request({
url: `/system/note/${noteId}`,
......@@ -116,6 +127,7 @@ export function certifiedDeptTree(params) {
params: params
})
}
// 查询部门下拉树结构
export function deptTreeSelect(params) {
return request({
......@@ -127,6 +139,7 @@ export function deptTreeSelect(params) {
return res
})
}
// 注册选择协会树
export function certifiedDeptTreeRegister(params) {
return request({
......@@ -135,6 +148,7 @@ export function certifiedDeptTreeRegister(params) {
params
})
}
const setIdToString = (list) => {
for (var l of list) {
l.id += ''
......@@ -161,6 +175,7 @@ export function updateUserProfile(data) {
params: data
})
}
export function createMyMember(data) {
return request({
url: '/member/info/createMyMember',
......@@ -168,6 +183,7 @@ export function createMyMember(data) {
params: data
})
}
export function updateUserPwd(data) {
return request({
url: `/system/user/profile/updatePwd?oldPassword=${encodeURIComponent(data.oldPassword)}&newPassword=${encodeURIComponent(data.newPassword)}`,
......@@ -175,6 +191,7 @@ export function updateUserPwd(data) {
params: data
})
}
export function getMessage(params) {
return request({
url: '/common/home/getMessage',
......@@ -198,6 +215,7 @@ export function regionsList(params) {
params
})
}
// 添加会员自动录入 上传图片
export function carUrl(data, type) {
return uni.uploadFile({
......@@ -227,6 +245,7 @@ export function addPersonToMyDept(data) {
params: data
})
}
export function insertSinglePay(data) {
return request({
url: '/person/paymentNew/insertSinglePay',
......@@ -234,6 +253,7 @@ export function insertSinglePay(data) {
params: data
})
}
// 提交人工审核
export function addPersonCommit(data) {
return request({
......@@ -249,6 +269,7 @@ export function getZtxFeeConfig() {
method: 'get'
})
}
// 图片上传
export function uploadImg(e) {
const tempFilePaths = e.tempFilePaths;
......@@ -270,6 +291,7 @@ export function uploadImg(e) {
uni.hideLoading();
});
}
// corp
export function uploadImgCorp(tempFilePath) {
const imgUrl = tempFilePath
......@@ -290,6 +312,7 @@ export function uploadImgCorp(tempFilePath) {
uni.hideLoading();
});
}
//only for addVip photoUp
export function uploadImgCorpPhoto(tempFilePath) {
const imgUrl = tempFilePath
......@@ -317,6 +340,7 @@ export function getInfo(perId) {
method: 'get'
})
}
// 查询个人会员信息列表
export function selectPageList(query) {
return request({
......@@ -333,6 +357,7 @@ export function delInfo(perId) {
method: 'POST'
})
}
// 查询个人个人会员缴费列表
// export function getPaymentList(query) {
// return request({
......@@ -348,6 +373,7 @@ export function getPaymentList(query) {
params: query
})
}
// 查询添加个人个人会员缴费列表
export function addSelectPageList(query) {
return request({
......@@ -371,6 +397,7 @@ export function fillAuditLog(ids) {
method: 'get'
})
}
// 审核列表
export function getVerifyList(params) {
return request({
......@@ -379,6 +406,7 @@ export function getVerifyList(params) {
params: params
})
}
// 审核
export function audit(data) {
return request({
......@@ -387,6 +415,7 @@ export function audit(data) {
params: data
})
}
// 审核详情
export function getHistoryByRelateId(rId) {
return request({
......@@ -394,6 +423,7 @@ export function getHistoryByRelateId(rId) {
method: 'get',
})
}
// 查询单位会员信息列表
export function getGroupVipList(query) {
return request({
......@@ -402,6 +432,7 @@ export function getGroupVipList(query) {
params: query
})
}
// 查询单位会员 全部会员数,有效会员数
export function getMemberCountInfo(query) {
return request({
......@@ -433,6 +464,7 @@ export function getFeeBillDetail(payId) {
method: 'get'
})
}
// 获取自己团队成员信息
export function getMyOwnMemberInfo() {
return request({
......@@ -440,6 +472,7 @@ export function getMyOwnMemberInfo() {
method: 'get'
})
}
// 会员调入
export function getMobilizelist(params) {
return request({
......@@ -448,6 +481,7 @@ export function getMobilizelist(params) {
params
})
}
// 调动会员成员
export function getTransferList(data) {
return request({
......@@ -456,6 +490,7 @@ export function getTransferList(data) {
params: data
})
}
// 查询单位会员信息列表
export function getGroupList(params) {
return request({
......@@ -464,6 +499,7 @@ export function getGroupList(params) {
params: params
})
}
// 查询
export function pickUp(data) {
return request({
......@@ -472,6 +508,7 @@ export function pickUp(data) {
params: data
})
}
// 添加调入会员
export function addTransferToRange(data) {
return request({
......@@ -480,18 +517,21 @@ export function addTransferToRange(data) {
params: data
})
}
export function deltransferRange(rids) {
return request({
url: `/person/transfer/${rids}`,
method: 'delete'
})
}
export function commit(rangeIds) {
return request({
url: `/person/transferRange/commit/${rangeIds}`,
method: 'post'
})
}
// 调动审批
export function mobilizeAudit(data) {
return request({
......@@ -500,6 +540,7 @@ export function mobilizeAudit(data) {
params: data
})
}
export function delMobilize(rids) {
return request({
url: `/person/transferRange/${rids}`,
......@@ -528,6 +569,7 @@ export function uploadFile(e) {
uni.hideLoading();
});
}
// muit
export function uploadFileList(path) {
uni.showLoading({
......@@ -547,6 +589,7 @@ export function uploadFileList(path) {
uni.hideLoading();
});
}
// 查询考级信息列表
export function getLevelList(query) {
return request({
......@@ -555,6 +598,7 @@ export function getLevelList(query) {
params: query
})
}
// 查询考级信息详细
export function getLevelApplyInfo(examId) {
return request({
......@@ -598,6 +642,7 @@ export function getCoachList(params) {
params: params
})
}
// 修改考级信息
export function updateLevelInfo(data) {
return request({
......@@ -606,6 +651,7 @@ export function updateLevelInfo(data) {
params: data
})
}
// 新增考级信息
export function addLevelInfo(data) {
return request({
......@@ -646,6 +692,7 @@ export function getVerityList(params) {
params: params
})
}
export function getPerVerityList(params) {
return request({
url: '/person/paymentRange/verifyList',
......@@ -739,6 +786,7 @@ export function groupCommitPaymentVoucher(data) {
params: data
})
}
export function submitPayment(data) {
return request({
url: '/exam/payment',
......@@ -761,6 +809,7 @@ export function personalCommit(id) {
params: id
})
}
export function getNewCountByRangeId(rangeId) {
return request({
url: `/person/paymentNew/getNewCountByRangeId/${rangeId}`,
......@@ -774,6 +823,7 @@ export function delPayment(payIds) {
method: 'DELETE'
})
}
export function paymentDel(payIds) {
return request({
url: `/person/paymentRangeNew/${payIds}`,
......@@ -844,6 +894,7 @@ export function getMergePaymentInfo(mergeId) {
}
})
}
// 一键下发
export function submitCert(data) {
return request({
......@@ -852,6 +903,7 @@ export function submitCert(data) {
params: data
})
}
export function submitCert2(data) {
return request({
url: `/exam/payment/submitCerts/updateCerts`,
......@@ -859,6 +911,7 @@ export function submitCert2(data) {
params: data
})
}
export function getCertsLList(query) {
return request({
url: '/exam/payment/certsList',
......@@ -908,12 +961,14 @@ export function getMySonList(data) {
params: data
})
}
export function getGroupMemberInfoById(memId) {
return request({
url: '/member/info/' + memId,
method: 'get'
})
}
export function addGroupPaymentGroup(data) {
return request({
url: `/member/certifiedRange/addRangeMulti/${data.memIds}/${data.rangeId}`,
......@@ -937,6 +992,7 @@ export function withDraw(data) {
params: data
})
}
export function groupWithDraw(data) {
return request({
url: `/member/paymentRange/withDraw`,
......@@ -944,6 +1000,7 @@ export function groupWithDraw(data) {
params: data
})
}
export function certifiedwithDraw(data) {
return request({
url: `/member/certified/withDraw`,
......@@ -951,6 +1008,7 @@ export function certifiedwithDraw(data) {
params: data
})
}
// 省合并缴费通知单
export function mergePayMentApi(data) {
return request({
......@@ -975,6 +1033,7 @@ export function doMergeFlowsPer(data) {
params: data
})
}
// 省缴费单拆分
export function unMerge(recordId) {
return request({
......@@ -982,6 +1041,7 @@ export function unMerge(recordId) {
method: 'post'
})
}
export function certifiedunMerge(recordId) {
return request({
url: `/member/certified/unMerge/${recordId}`,
......@@ -995,6 +1055,7 @@ export function dellevelPerson(examId) {
method: 'delete'
})
}
export function getExamPersonNum(data) {
return request({
url: `/exam/person/getExamPersonNum`,
......@@ -1002,6 +1063,7 @@ export function getExamPersonNum(data) {
params: data
})
}
export function doVerityBack(data) {
return request({
url: `/exam/info/verity/back`,
......@@ -1009,24 +1071,28 @@ export function doVerityBack(data) {
params: data
})
}
export function delRange(ids) {
return request({
url: `/member/certifiedRange/${ids}`,
method: 'delete'
})
}
export function delLevel(examId) {
return request({
url: '/exam/info/' + examId,
method: 'delete'
})
}
export function cancelMerge(id) {
return request({
url: '/exam/info/cancelMerge/' + id,
method: 'post'
})
}
export function getInfoModRange(params) {
return request({
url: `/person/infoModRange/list`,
......@@ -1034,6 +1100,7 @@ export function getInfoModRange(params) {
params: params
})
}
export function addInfoModeList(data) {
return request({
url: `/person/infoMod/list`,
......@@ -1041,36 +1108,42 @@ export function addInfoModeList(data) {
params: data
})
}
export function infoMod(ids) {
return request({
url: `/person/infoMod/${ids}`,
method: 'delete'
})
}
export function commitPersonalChange(ids) {
return request({
url: `/person/infoModRange/commit/${ids}`,
method: 'post'
})
}
export function delPersonalChange(ids) {
return request({
url: `/person/infoModRange/${ids}`,
method: 'delete'
})
}
export function addInfoModeToRange(data) {
return request({
url: `/person/infoMod/addInfoModeToRange/${data.perIds}?rangeIdStr=${data.rangeIdStr}`,
method: 'post'
})
}
export function addGroupInfoModeToRange(data) {
return request({
url: `/member/infoMod/addInfoModeToRange/${data.memId}?rangeIdStr=${data.rangeIdStr}`,
method: 'post'
})
}
export function personChangeEditMod(data) {
return request({
url: `/person/infoMod/editMod`,
......@@ -1078,6 +1151,7 @@ export function personChangeEditMod(data) {
params: data
})
}
export function groupChangeEditMod(data) {
return request({
url: `/member/infoMod/editMod`,
......@@ -1085,30 +1159,35 @@ export function groupChangeEditMod(data) {
params: data
})
}
export function personChangeWithDraw(ids) {
return request({
url: `/person/infoModRange/withDraw/${ids}`,
method: 'post'
})
}
export function personChangeAudit(data) {
return request({
url: `/person/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
export function groupChangeAudit(data) {
return request({
url: `/member/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
export function pickUpByPersonInfo(form) {
return request({
url: `/person/technology/getPersonTecDetailsByIdc/${form.idcType}/${form.idcCode}`,
method: 'get'
})
}
export function getLevelChangeAddList(params) {
return request({
url: `/person/levelMod/list`,
......@@ -1116,6 +1195,7 @@ export function getLevelChangeAddList(params) {
params: params
})
}
export function getChangelevelList(params) {
return request({
url: `/person/levelModRange/list`,
......@@ -1123,6 +1203,7 @@ export function getChangelevelList(params) {
params: params
})
}
export function addLevelList(data) {
return request({
url: `/person/levelMod/addLevelModToRange`,
......@@ -1130,60 +1211,70 @@ export function addLevelList(data) {
params: data
})
}
export function addLevelModToRange(data) {
return request({
url: `/person/levelMod/editModInfo/${data.modId}?reason=${data.reason}&modId=${data.modId}`,
method: 'post'
})
}
export function addLevelModToRangeFile(data) {
return request({
url: `/person/levelMod/editModInfo/${data.modId}?modId=${data.modId}&fileUrl=${encodeURIComponent(data.fileUrl)}`,
method: 'post'
})
}
export function levelModRangeDelete(ids) {
return request({
url: `/person/levelModRange/${ids}`,
method: 'delete'
})
}
export function commitLevelChange(ids) {
return request({
url: `/person/levelModRange/commit/${ids}`,
method: 'post'
})
}
export function editNewJi(data) {
return request({
url: `/person/levelMod/editNewJi/${data.modId}?newJi=${data.NewJi}`,
method: 'post'
})
}
export function delLevelChangePer(data) {
return request({
url: `/person/levelMod/${data}`,
method: 'delete'
})
}
export function levelModCommit(ids) {
return request({
url: `/person/levelModRange/commit/${ids}`,
method: 'post'
})
}
export function changeLevelAudit(data) {
return request({
url: `/person/levelModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
export function changeLevelWithDraw(data) {
return request({
url: `/person/levelModRange/withDraw/${data}`,
method: 'post'
})
}
export function getMemberInfoModRange(data) {
return request({
url: `/member/infoModRange/list`,
......@@ -1191,18 +1282,21 @@ export function getMemberInfoModRange(data) {
params: data
})
}
export function commitGroupChange(ids) {
return request({
url: `/member/infoModRange/commit/${ids}`,
method: 'post'
})
}
export function delGroupChange(ids) {
return request({
url: `/member/infoModRange/${ids}`,
method: 'delete'
})
}
export function getChangeGroupByRangeId(data) {
return request({
url: `/member/infoMod/list`,
......@@ -1210,12 +1304,14 @@ export function getChangeGroupByRangeId(data) {
params: data
})
}
export function groupInfoMod(ids) {
return request({
url: `/member/infoMod/${ids}`,
method: 'delete'
})
}
export function extractInfoFromChinaIdCard(data) {
return request({
url: '/person/info/extractInfo',
......@@ -1223,6 +1319,7 @@ export function extractInfoFromChinaIdCard(data) {
params: data
})
}
export function getRemindCount(params) {
return request({
url: '/system/remindCount/getCounts',
......@@ -1230,6 +1327,7 @@ export function getRemindCount(params) {
params: params
})
}
export function jiDropDownBox(params) {
return request({
url: '/person/technology/jiDropDownBox',
......@@ -1244,12 +1342,14 @@ export function getUserProfile() {
method: 'get'
})
}
export function getMyCertStage() {
return request({
url: `/member/certified/getMyCertStage`,
method: 'get'
})
}
// 月结列表
export function mentDocList(data) {
return request({
......@@ -1258,12 +1358,14 @@ export function mentDocList(data) {
params: data
})
}
export function wdBack(yjIds) {
return request({
url: `/person/paymentDocYj/wd/${yjIds}`,
method: 'get'
})
}
// 个人会员月结缴费单
export function downJiaoYJFei(arr) {
return request({
......@@ -1278,24 +1380,28 @@ export function queryProcess(id) {
method: 'get'
})
}
export function checkPersonByPayIds(payIds) {
return request({
url: `/exam/person/checkPersonByPayIds/${payIds}`,
method: 'get'
})
}
export function checkPersonByExamIds(examIds) {
return request({
url: `/exam/person/checkPersonByExamIds/${examIds}`,
method: 'get'
})
}
export function checkPersonByPersonId(perId) {
return request({
url: `/exam/person/checkPersonByPersonId/${perId}`,
method: 'get'
})
}
// 获取单位会员优惠政策
export function canUseDiscount(params) {
return request({
......@@ -1304,6 +1410,7 @@ export function canUseDiscount(params) {
params
})
}
// 获取单位会员一年缴费价格
export function getMyMemberCertUnitFee(params) {
return request({
......@@ -1312,6 +1419,7 @@ export function getMyMemberCertUnitFee(params) {
params
})
}
export function checkBusinessLicense(data) {
return request({
url: `/member/info/checkBusinessLicense`,
......@@ -1335,12 +1443,14 @@ export function callBack2(orderId) {
method: 'get',
})
}
export function pcallBack2(orderId) {
return request({
url: `/person/paymentRangeNew/callBack2/${orderId}`,
method: 'get',
})
}
// 优惠政策回显
export function getZtxDiscountPolicy(params) {
return request({
......@@ -1349,6 +1459,7 @@ export function getZtxDiscountPolicy(params) {
params
})
}
// 考官列表
export function listApi(params) {
return request({
......@@ -1358,6 +1469,15 @@ export function listApi(params) {
})
}
// 获取省级信息
export function getShenMemberInfo() {
return request({
url: `/member/info/getShenMemberInfo`,
method: 'get',
})
}
// 考官列表
export function examinerDel(id) {
return request({
......@@ -1374,6 +1494,14 @@ export function otherAdd(memId, ids) {
})
}
// 添加考官
export function selfAdd(memId, ids) {
return request({
url: `/member/examiner/selfAdd/${ids}`,
method: 'post'
})
}
export function commitExamPointApply(params) {
return request({
url: `/member/examPointApply/commit?selfSelect=${params.selfSelect}`,
......@@ -1384,7 +1512,8 @@ export function commitExamPointApply(params) {
export function getMyStatus() {
return request({
url: `/member/examPointApply/getMyStatus`
url: `/member/examPointApply/getMyStatus`,
method: 'get',
})
}
......@@ -1395,6 +1524,7 @@ export function goPay(id) {
method: 'post'
})
}
// 缴费单列表学员
export function listAPI(params) {
return request({
......@@ -1422,6 +1552,7 @@ export function memberInsertPersons(data) {
data
})
}
export function createMemberPayRange(data) {
return request({
url: `/person/paymentRangeNew/createMemberPayRange`,
......@@ -1430,7 +1561,7 @@ export function createMemberPayRange(data) {
})
}
// 获取最近认证记录
// 获取最近认证记录 团体会员
export function getMyRecent() {
return request({
url: '/system/certifiedNew/getMyRecent',
......@@ -1438,6 +1569,16 @@ export function getMyRecent() {
})
}
// 获取最近认证记录 考点
export function getMyRecentExam() {
return request({
url: '/member/examPointApply/getMyRecent',
method: 'get'
})
}
// 获取订单详情
export function getOrderInfo(orderId) {
return request({
......@@ -1461,6 +1602,7 @@ export function unbindUser() {
method: 'post'
})
}
/**
* 订单列表
* @param params
......@@ -1485,6 +1627,7 @@ export function deleteOrder(id) {
method: 'delete'
})
}
/**
* 取消订单
* @param params
......@@ -1511,6 +1654,7 @@ export function getAssoPers(perId) {
method: 'get'
})
}
export function checkMember(data) {
return request({
url: '/member/info/checkMember',
......@@ -1526,13 +1670,15 @@ export function getBusinessLicense(data) {
data: data
})
}
export function getLogs(examId, type) {
return request({
url: `/exam/info/getLogs/${examId}`,
method: 'get',
params: { type } // 1 级位 2 段位 3 段位成绩 4 越段 5 越段成绩
params: {type} // 1 级位 2 段位 3 段位成绩 4 越段 5 越段成绩
})
}
export function newGetLogs(id) {
return request({
url: `/person/paymentRangeNew/getLogs/${id}`,
......@@ -1547,6 +1693,7 @@ export function certifiedNewList(params) {
params
})
}
export function certifiedNewGetLogs(id) {
return request({
url: `/system/certifiedNew/getLogs/${id}`,
......@@ -1684,6 +1831,7 @@ export function editAddressOrder(examId, addressId) {
method: 'put'
})
}
/**
* 查询证书列表
* @param query
......
......@@ -50,6 +50,7 @@ export function submitCert(data) {
params: data
})
}
/**
* 段位考试成绩列表
* @param params
......@@ -165,6 +166,19 @@ export function ztxAudit(params) {
}
/**
* 考点审核
* @param params
* @returns {*}
*/
export function shenAuditExamPointApply(params) {
return request({
url: `/member/examPointApply/shenAudit/${params.ids}`,
method: 'post',
params
})
}
/**
* 获取机构资料
* @param memId
* @returns {*}
......
......@@ -10,6 +10,7 @@ function pcLogin(data) {
params: data
}).then((res) => {
uni.setStorageSync('token', 'Bearer ' + res.data.token)
pcLoginOpenId()
}).then(getInfo)
}
......@@ -150,6 +151,7 @@ function groupMemberRegister(data) {
params: data
})
}
// 获取道馆信息
function getMyOwnMemberInfo() {
return request({
......@@ -163,6 +165,23 @@ function getMyOwnMemberInfo() {
})
}
function pcLoginOpenId() {
uni.login({
provider: 'weixin',
success: (res) => {
if (res.code) {
pcBindOpenId(res.code)
}
},
fail: (res) => {
uni.showToast({
title: '获取用户信息失败',
icon: 'none',
duration: 2000
})
}
})
}
function wxLogin() {
const openId = uni.getStorageSync('openId')
......@@ -209,6 +228,15 @@ function pcLoginByOpenId(openId) {
})
}
function pcBindOpenId(code) {
return request({
url: `/bindOpenId?jsCode=${code}`,
method: "POST",
}).then((res) => {
uni.setStorageSync('openId', res.data.openId);
})
}
export {
pcLogin,
getCodeImg,
......
......@@ -66,6 +66,7 @@ async function minShengPay(orderId, encryptedData) {
}))
if (decryptErr || !decryptResult?.data) {
handlePaymentError(new Error(ERROR_MESSAGES.DECRYPT_FAILED), orderId)
}
......@@ -85,14 +86,14 @@ async function minShengPay(orderId, encryptedData) {
uni.hideLoading()
// 8. 调起微信支付
const [payErr, paySuccess] = await to(invokeWechatPayment(payParams, orderId))
const [payErr] = await to(invokeWechatPayment(payParams, orderId))
if (payErr) {
handlePaymentError(payErr, orderId)
}
if (paySuccess) {
return paySuccess
}
// if (paySuccess) {
// return paySuccess
// }
}
/**
......@@ -194,7 +195,6 @@ function parsePayInfo(payInfoStr) {
* @returns {Promise<Object>} 支付结果
*/
function invokeWechatPayment(payParams, orderId) {
debugger
return new Promise((resolve, reject) => {
// 参数校验
const requiredFields = ['appId', 'nonceStr', 'prepayId', 'timeStamp', 'signType', 'paySign']
......
......@@ -30,7 +30,7 @@ function getHeaders() {
return header
}
const request = function(req) {
const request = function (req) {
req.method = req.method.toUpperCase()
if (!['GET', 'POST', 'PUT', 'DELETE'].includes(req.method)) {
uni.showToast({
......
// dev
// const baseUrl_api = 'http://192.168.1.137:8787'
const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
const baseUrl_api = 'http://192.168.1.137:8787'
// const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
const loginImage_api = 'http://tk001.wxjylt.com/stage-api'
const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
// prod
......@@ -9,5 +10,7 @@ const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
export default {
baseUrl_api,
payUrl
payUrl,
loginImage_api
}
......
......@@ -2,15 +2,15 @@
<view class="audit-page">
<!-- 提示信息 -->
<view class="tips-box">
<uni-icons type="info" size="18" color="#13B5B1"></uni-icons>
<text class="tips-text" v-if="type === 'batch'">批量审核 {{ ids.split(',').length }} 条记录</text>
<text class="tips-text" v-else>单个审核</text>
<uni-icons color="#13B5B1" size="18" type="info"></uni-icons>
<text v-if="type === 'batch'" class="tips-text">批量审核 {{ ids.split(',').length }} 条记录</text>
<text v-else class="tips-text">单个审核</text>
</view>
<!-- 审核表单 -->
<view class="form-section">
<view class="section-header">
<uni-icons type="edit" size="18" color="#AD181F"></uni-icons>
<uni-icons color="#AD181F" size="18" type="edit"></uni-icons>
<text class="section-title">审核信息</text>
</view>
......@@ -19,22 +19,22 @@
<text class="form-label">审批结果</text>
<view class="radio-group">
<view
class="radio-item"
:class="{ selected: form.flag === '1' }"
class="radio-item"
@click="form.flag = '1'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '1'" type="checkmark" size="10" color="#fff"></uni-icons>
<uni-icons v-if="form.flag === '1'" color="#fff" size="10" type="checkmark"></uni-icons>
</view>
<text>审批通过</text>
</view>
<view
class="radio-item"
:class="{ selected: form.flag === '0' }"
class="radio-item"
@click="form.flag = '0'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '0'" type="checkmark" size="10" color="#fff"></uni-icons>
<uni-icons v-if="form.flag === '0'" color="#fff" size="10" type="checkmark"></uni-icons>
</view>
<text>审批拒绝</text>
</view>
......@@ -45,18 +45,37 @@
<text class="form-label">备注</text>
<textarea
v-model="form.reason"
:maxlength="500"
class="textarea"
placeholder="请输入备注信息(拒绝时必填)"
:maxlength="500"
/>
</view>
</view>
</view>
<view v-if="userType==2&&selfSelect==0" class="section">
<view class="section examiner-section">
<button class="add-btn" @click="handelAddExamine">+ 添加考官</button>
</view>
<view class="examiner-list">
<view v-for="(item, index) in list" :key="item.id" class="examiner-item">
<view class="info">
<text class="name">{{ item.perName }} {{ item.perCode }}</text>
<text class="idc">证件号码:{{ item.perIdcCode }}</text>
<text class="reg">注册地:{{ item.memName }}</text>
</view>
<button class="del-btn" @click="handleDel(item)">删除</button>
</view>
</view>
</view>
<!-- 提交按钮 -->
<view class="submit-wrap">
<button class="btn-cancel" @click="goBack">取消</button>
<button class="btn-submit" @click="doSubmit" :disabled="submitting">
<button :disabled="submitting" class="btn-submit" @click="doSubmit">
<text v-if="!submitting">确认提交</text>
<text v-else>提交中...</text>
</button>
......@@ -66,32 +85,63 @@
<script setup>
import * as api from '@/common/api_exam.js'
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import {ref} from 'vue'
import {onLoad} from '@dcloudio/uni-app'
import {listApi} from "@/common/api.js";
const type = ref('single') // single 或 batch
const ids = ref('')
const submitting = ref(false)
const selfSelect = ref('1')
const userType = ref('')
const list = ref([])
const memId = ref('')
const app = getApp();
const form = ref({
flag: '1',
reason: ''
reason: '',
selfSelect: "1"
})
onLoad((options) => {
console.log(options)
if (options.type) {
type.value = options.type
}
if (options.ids) {
ids.value = options.ids
}
if (options.selfSelect) {
selfSelect.value = options.selfSelect
}
if (options.memId) {
memId.value = options.memId
getExaminer()
}
userType.value = app.globalData.userType
console.log(userType.value)
})
function goBack() {
uni.navigateBack()
}
function handelAddExamine() {
const chosenStr = JSON.stringify(list.value)
uni.navigateTo({
url: `/myCenter/chooseExaminer?memId=${memId.value}&isValidity=0&chosen=${chosenStr}&selfSelect=0`
})
}
async function getExaminer() {
const res = await listApi({memId: memId.value})
list.value = res.rows
}
function doSubmit() {
if (form.value.flag === '0' && !form.value.reason) {
uni.showToast({
......@@ -107,9 +157,10 @@ function doSubmit() {
const params = {
ids: ids.value,
flag: form.value.flag,
reason: form.value.reason || ''
reason: form.value.reason || '',
selfSelect: selfSelect.value
}
if (userType.value == '1') {
api.ztxAudit(params).then(res => {
uni.showToast({
title: '操作成功',
......@@ -126,6 +177,24 @@ function doSubmit() {
})
submitting.value = false
})
} else {
api.shenAuditExamPointApply(params).then(res => {
uni.showToast({
title: '操作成功',
icon: 'success'
})
setTimeout(() => {
uni.navigateBack()
}, 1500)
}).catch(err => {
console.error('审核失败', err)
uni.showToast({
title: '操作失败',
icon: 'none'
})
submitting.value = false
})
}
}
</script>
......@@ -269,4 +338,161 @@ function doSubmit() {
}
}
}
.section {
padding: 15rpx 20rpx;
}
/* 考官区域 */
.examiner-section {
background: #fff;
padding: 15rpx;
margin-bottom: 20rpx;
border: none;
border-radius: 0;
}
.add-btn {
background: #fff;
color: #C4121B;
border: 1rpx solid #C4121B;
border-radius: 10rpx;
padding: 10rpx 0;
width: 100%;
font-size: 14px;
}
.examiner-list {
padding: 0 10rpx;
background-color: #fff;
margin-bottom: 20rpx;
overflow-y: auto;
margin-bottom: 70px;
}
examiner-item {
display: flex;
justify-content: space-between;
align-items: flex-start;
padding: 20rpx;
border-bottom: 1rpx solid #eee;
align-items: center;
}
.info {
flex: 1;
}
.name {
font-size: 14px;
font-weight: 500;
color: #333;
display: block;
margin-bottom: 5rpx;
}
.idc, .reg {
font-size: 12px;
color: #666;
display: block;
margin: 10rpx 0;
}
.del-btn {
color: #C4121B;
font-size: 12px;
border: 1rpx solid #C4121B;
border-radius: 50rpx;
padding: 10rpx 25rpx;
line-height: 1.2;
background: #fff;
}
/* 提交按钮 */
.submit-area {
padding: 20rpx 0;
background-color: #fff;
width: 100%;
position: fixed;
bottom: 0;
}
.submit-btn {
width: 80%;
height: 88rpx;
border-radius: 44rpx;
margin: 0 auto;
line-height: 88rpx;
background: #C4121B;
color: #fff;
text-align: center;
font-size: 16px;
border: none;
}
/* 自定义弹窗样式(核心) */
.custom-modal {
width: 600rpx;
background: #fff;
border-radius: 20rpx;
padding: 40rpx 30rpx;
box-sizing: border-box;
text-align: center;
}
.modal-title {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-bottom: 30rpx;
}
.modal-content {
font-size: 30rpx;
color: #666;
line-height: 1.6;
margin-bottom: 30rpx;
}
.modal-tip {
font-size: 28rpx;
color: #FF7A00;
margin-top: 20rpx;
}
.modal-btns {
display: flex;
justify-content: space-between;
gap: 20rpx;
}
.btn-cancel {
flex: 1;
height: 80rpx;
line-height: 80rpx;
background: #f5f5f5;
color: #999;
border-radius: 40rpx;
font-size: 32rpx;
border: none;
}
.btn-confirm {
flex: 1;
height: 80rpx;
line-height: 80rpx;
background: #C4121B;
color: #fff;
border-radius: 40rpx;
font-size: 32rpx;
border: none;
}
.single-btn {
flex: 1;
}
.btn-cancel::after, .btn-confirm::after {
border: none;
}
</style>
......
......@@ -3,7 +3,7 @@
<!-- 基本信息 -->
<view class="section">
<view class="section-header">
<uni-icons type="paperclip" size="18" color="#AD181F"></uni-icons>
<uni-icons color="#AD181F" size="18" type="paperclip"></uni-icons>
<text class="section-title">基本信息</text>
</view>
<view class="info-card">
......@@ -17,7 +17,7 @@
</view>
<view class="info-row">
<text class="label">审核状态</text>
<text class="value" :class="getStatusClass(form.auditStatus)">
<text :class="getStatusClass(form.auditStatus)" class="value">
{{ getStatusText(form.auditStatus) }}
</text>
</view>
......@@ -45,14 +45,14 @@
</view>
<!-- 审核记录 -->
<view class="section" v-if="auditList.length > 0">
<view v-if="auditList.length > 0" class="section">
<view class="section-header">
<uni-icons type="checkmark-circle" size="18" color="#AD181F"></uni-icons>
<uni-icons color="#AD181F" size="18" type="checkmark-circle"></uni-icons>
<text class="section-title">审核记录</text>
</view>
<view class="audit-list">
<view class="audit-item" v-for="(item, index) in auditList" :key="index">
<view class="audit-dot" :class="item.auditResult == 2 ? 'pass' : 'fail'"></view>
<view v-for="(item, index) in auditList" :key="index" class="audit-item">
<view :class="item.auditResult == 2 ? 'pass' : 'fail'" class="audit-dot"></view>
<view class="audit-content">
<view class="audit-row">
<text class="audit-label">审核协会</text>
......@@ -64,11 +64,11 @@
</view>
<view class="audit-row">
<text class="audit-label">审核状态</text>
<text class="audit-value" :class="item.auditResult == 2 ? 'text-success' : 'text-danger'">
<text :class="item.auditResult == 2 ? 'text-success' : 'text-danger'" class="audit-value">
{{ item.auditResult == 2 ? '通过' : '拒绝' }}
</text>
</view>
<view class="audit-row" v-if="item.auditMsg">
<view v-if="item.auditMsg" class="audit-row">
<text class="audit-label">备注</text>
<text class="audit-value">{{ item.auditMsg }}</text>
</view>
......@@ -77,43 +77,43 @@
</view>
</view>
<!-- 考官信息 -->
<view class="section" v-if="examinerList.length > 0">
<view class="section-header">
<uni-icons type="person" size="18" color="#AD181F"></uni-icons>
<text class="section-title">考官信息</text>
</view>
<view class="examiner-table" v-if="examinerList.length > 0">
<view class="table-header">
<view class="th th-name">姓名</view>
<view class="th th-code">会员号</view>
<view class="th th-idcard">证件号码</view>
</view>
<view class="table-body">
<view class="table-row" v-for="(item, index) in examinerList" :key="index">
<view class="td td-name">{{ item.perName }}</view>
<view class="td td-code">{{ item.perCode || '-' }}</view>
<view class="td td-idcard">{{ item.perIdcCode || '-' }}</view>
</view>
</view>
</view>
<view class="no-data" v-else>
<text>暂无考官信息</text>
</view>
</view>
<!-- &lt;!&ndash; 考官信息 &ndash;&gt;-->
<!-- <view class="section" v-if="examinerList.length > 0">-->
<!-- <view class="section-header">-->
<!-- <uni-icons type="person" size="18" color="#AD181F"></uni-icons>-->
<!-- <text class="section-title">考官信息</text>-->
<!-- </view>-->
<!-- <view class="examiner-table" v-if="examinerList.length > 0">-->
<!-- <view class="table-header">-->
<!-- <view class="th th-name">姓名</view>-->
<!-- <view class="th th-code">会员号</view>-->
<!-- <view class="th th-idcard">证件号码</view>-->
<!-- </view>-->
<!-- <view class="table-body">-->
<!-- <view class="table-row" v-for="(item, index) in examinerList" :key="index">-->
<!-- <view class="td td-name">{{ item.perName }}</view>-->
<!-- <view class="td td-code">{{ item.perCode || '-' }}</view>-->
<!-- <view class="td td-idcard">{{ item.perIdcCode || '-' }}</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="no-data" v-else>-->
<!-- <text>暂无考官信息</text>-->
<!-- </view>-->
<!-- </view>-->
</view>
</template>
<script setup>
import * as api from '@/common/api_exam.js'
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import {ref} from 'vue'
import {onLoad} from '@dcloudio/uni-app'
const form = ref({})
const auditList = ref([])
const examinerList = ref([])
const auditStatusMap = { 1: '审核中', 2: '审核通过', 3: '审核拒绝' }
const auditStatusMap = {1: '审核中', 2: '审核通过', 3: '审核拒绝'}
onLoad((options) => {
if (options.item) {
......@@ -133,7 +133,7 @@ onLoad((options) => {
})
function getExaminerList(memId) {
api.listInfo({ memId: memId }).then(res => {
api.listInfo({memId: memId}).then(res => {
if (res.rows) {
examinerList.value = res.rows
}
......@@ -319,9 +319,17 @@ function formatDateTime(dateStr) {
}
}
.th-name { width: 25%; }
.th-code { width: 30%; }
.th-idcard { width: 45%; }
.th-name {
width: 25%;
}
.th-code {
width: 30%;
}
.th-idcard {
width: 45%;
}
.table-body {
.table-row {
......@@ -343,9 +351,17 @@ function formatDateTime(dateStr) {
}
}
.td-name { width: 25%; }
.td-code { width: 30%; }
.td-idcard { width: 45%; }
.td-name {
width: 25%;
}
.td-code {
width: 30%;
}
.td-idcard {
width: 45%;
}
}
}
......
......@@ -38,10 +38,10 @@
<!-- 顶部Tab栏(截图风格) -->
<view class="tab-bar">
<view
class="tab-item"
v-for="(tab, index) in tabList"
:key="index"
:class="{ active: currentTab === index }"
class="tab-item"
@click="switchTab(index)"
>
{{ tab.name }}
......@@ -49,26 +49,26 @@
</view>
<!-- 批量审核按钮(保留原逻辑,仅优化样式) -->
<view class="batch-btn-wrap" v-if="selectedList.length > 0 && currentTab === 0">
<button class="btn-batch" :disabled="selectedList.length === 0" @click="goBatchAudit">
<uni-icons type="checkmark-circle" size="16" color="#fff"></uni-icons>
<view v-if="selectedList.length > 0 && currentTab === 0" class="batch-btn-wrap">
<button :disabled="selectedList.length === 0" class="btn-batch" @click="goBatchAudit">
<uni-icons color="#fff" size="16" type="checkmark-circle"></uni-icons>
批量审核 ({{ selectedList.length }})
</button>
</view>
<!-- 列表区域(保留原字段+截图样式+所有按钮) -->
<scroll-view
:lower-threshold="100"
class="scroll-list"
scroll-y
@scrolltolower="loadMore"
:lower-threshold="100"
>
<view class="appList">
<view
class="appItem"
v-for="(item, index) in infoList"
:key="index"
:class="{ 'item-checked': isSelected(item) }"
class="appItem"
>
<!-- 选择框(保留原逻辑+适配截图样式) -->
<!-- <view class="checkbox-wrap" v-if="item.auditStatus == 1" @click="toggleSelect(item)">
......@@ -78,12 +78,12 @@
</view> -->
<!-- 主内容区(点击跳详情,保留原所有字段) -->
<view @click="goDetail(item)" class="item-content">
<view class="item-content" @click="goDetail(item)">
<!-- 状态标签+提交时间(截图风格顶部) -->
<view class="item-top">
<text class="submit-time">{{ formatDate(item.commitTime) }} 提交</text>
<text class="status-tag" :class="getStatusClass(item.auditStatus)">
<text :class="getStatusClass(item.auditStatus)" class="status-tag">
{{ getStatusText(item.auditStatus) }}
</text>
</view>
......@@ -127,21 +127,22 @@
v-if="item.auditStatus == 1"
class="btn-info"
@click.stop="goAudit(item)"
>审核</button>
>审核
</button>
<button class="btn-info" @click.stop="goInstitution(item)">机构资料</button>
</view>
</view>
</view>
<!-- 加载更多(保留原逻辑) -->
<view class="loading-more" v-if="infoList.length > 0">
<uni-load-more :status="loadMoreStatus" :contentText="loadMoreText"></uni-load-more>
<view v-if="infoList.length > 0" class="loading-more">
<uni-load-more :contentText="loadMoreText" :status="loadMoreStatus"></uni-load-more>
</view>
</scroll-view>
<!-- 空数据(保留原逻辑+适配截图样式) -->
<view class="nodata" v-if="infoList.length == 0 && !loading">
<image mode="aspectFit" :src="config.baseUrl_api + '/fs/static/nodata.png'"></image>
<view v-if="infoList.length == 0 && !loading" class="nodata">
<image :src="config.baseUrl_api + '/fs/static/nodata.png'" mode="aspectFit"></image>
<text>暂无数据</text>
</view>
</view>
......@@ -151,8 +152,8 @@
// 完全保留你原代码的所有JS逻辑、方法、字段,未做任何修改
import * as api from '@/common/api_exam.js'
import config from '@/config.js'
import { ref } from 'vue'
import { onLoad, onShow } from '@dcloudio/uni-app'
import {ref} from 'vue'
import {onLoad, onShow} from '@dcloudio/uni-app'
const app = getApp()
const loading = ref(false)
......@@ -179,12 +180,14 @@ const selectedList = ref([])
// 新增Tab配置(匹配截图,关联原审核状态)
const tabList = ref([
{ name: '全部', auditStatus: '' },
{ name: '审核中', auditStatus: '1' },
{ name: '审核通过', auditStatus: '2' },
{ name: '审核拒绝', auditStatus: '3' }
{name: '全部', auditStatus: ''},
{name: '审核中', auditStatus: '1'},
{name: '审核通过', auditStatus: '2'},
{name: '审核拒绝', auditStatus: '3'}
])
const currentTab = ref(0)
const userType = ref('')
onLoad(() => {
init()
......@@ -198,6 +201,9 @@ onShow(() => {
// init()
}
}
userType.value = app.globalData.userType
init()
})
function init() {
......@@ -208,12 +214,20 @@ function init() {
function switchTab(index) {
if (currentTab.value === index) return
currentTab.value = index
// 同步原审核状态查询参数
queryParams.value.auditStatus = Number(tabList.value[index].auditStatus)
// 重置列表和选择状态
queryParams.value.pageNum = 1
loadMoreStatus.value = 'more'
selectedList.value = []
if (userType.value == 1) {
// 同步原审核状态查询参数
queryParams.value.auditStatus = Number(tabList.value[index].auditStatus)
}
if (userType.value == 2) {
// 同步原审核状态查询参数
queryParams.value.shenAuditStatus = tabList.value[index].auditStatus
}
getList()
}
......@@ -229,9 +243,9 @@ function getList(isLoadMore = false) {
loadMoreStatus.value = 'loading'
}
uni.showLoading({ title: '加载中' })
uni.showLoading({title: '加载中'})
const params = { ...queryParams.value }
const params = {...queryParams.value}
if (commitTimeStart.value) {
params.commitTimeStart = commitTimeStart.value + ' 00:00:00'
}
......@@ -327,15 +341,17 @@ function goDetail(item) {
}
function goAudit(item) {
const itemStr = encodeURIComponent(JSON.stringify(item))
// const itemStr = encodeURIComponent(JSON.stringify(item))
uni.navigateTo({
url: `/level/ztx/examinationAudit?item=${itemStr}&type=single`
url: `/level/ztx/examinationAudit?ids=${item.id}&type=single&selfSelect=${item.selfSelect}&memId=${item.memId}`
})
}
function goBatchAudit() {
if (selectedList.value.length === 0) return
const ids = selectedList.value.map(s => s.id).join(',')
const arr = selectedList.value.filter(s => s.selfSelect == 1)
const ids = arr.map(s => s.id).join(',')
uni.navigateTo({
url: `/level/ztx/examinationAudit?ids=${ids}&type=batch`
})
......@@ -348,7 +364,7 @@ function goInstitution(item) {
}
function getStatusText(status) {
const statusMap = { 1: '审核中', 2: '审核通过', 3: '审核拒绝' }
const statusMap = {1: '审核中', 2: '审核通过', 3: '审核拒绝'}
return statusMap[status] || '-'
}
......@@ -656,14 +672,16 @@ function formatDate(dateStr) {
padding: 30rpx;
margin: 20rpx;
border-radius: 16rpx;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.05);
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05);
}
.search-form {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 24rpx;
}
.form-item {
width: 48%;
display: flex;
......@@ -678,6 +696,7 @@ function formatDate(dateStr) {
font-size: 26rpx;
color: #666;
}
input {
width: 100%;
height: 70rpx;
......@@ -688,6 +707,7 @@ function formatDate(dateStr) {
background-color: #fafafa;
box-sizing: border-box;
}
.picker-value {
width: 100%;
height: 70rpx;
......@@ -702,6 +722,7 @@ function formatDate(dateStr) {
line-height: 70rpx;
box-sizing: border-box;
}
.date-range {
display: flex;
align-items: center;
......@@ -711,11 +732,13 @@ function formatDate(dateStr) {
.picker-value {
flex: 1;
}
.date-separator {
color: #999;
}
}
}
.search-btns {
display: flex;
justify-content: center;
......@@ -730,10 +753,12 @@ function formatDate(dateStr) {
border-radius: 35rpx;
border: none;
}
.btn-search {
background: linear-gradient(135deg, #13B5B1, #15c5c1);
color: #fff;
}
.btn-reset {
background-color: #f5f5f5;
color: #666;
......
<template>
<view class="role-entry-page">
<!-- 全屏背景图 -->
<image class="page-bg" :src="config.baseUrl_api + '/fs/static/bg.png'" mode="aspectFill"></image>
<image :src="config.loginImage_api + '/fs/static/bg.png'" class="page-bg" mode="aspectFill"></image>
<!-- 顶部 Logo 区域 -->
<view class="header-wrapper">
<view class="logo-box">
<image class="logo" :src="config.baseUrl_api + '/fs/static/wx_logo.png'" mode="aspectFit"></image>
<image :src="config.loginImage_api + '/fs/static/wx_logo.png'" class="logo" mode="aspectFit"></image>
</view>
</view>
<!-- 功能按钮区域 -->
<view class="btn-container">
<view @click="goToPage('/personal/addVip_per')">
<image :src="config.baseUrl_api + '/fs/static/btn01.png'" class="btn-item"></image>
<image :src="config.loginImage_api + '/fs/static/btn01.png'" class="btn-item"></image>
</view>
<view @click="goToPage('/personal/home')">
<image :src="config.baseUrl_api + '/fs/static/btn02.png'" class="btn-item"></image>
<image :src="config.loginImage_api + '/fs/static/btn02.png'" class="btn-item"></image>
</view>
<view @click="goToPage('/login/loginC')">
<image :src="config.baseUrl_api + '/fs/static/btn03.png'" class="btn-item"></image>
<image :src="config.loginImage_api + '/fs/static/btn03.png'" class="btn-item"></image>
</view>
</view>
......@@ -29,9 +27,10 @@
</view>
</template>
<script setup>
import { ref } from 'vue'
import {ref} from 'vue'
import {onShow} from '@dcloudio/uni-app'
import config from '@/config.js'
onShow(() => {
uni.hideLoading();
})
......@@ -71,6 +70,7 @@ const goToPage = (url) => {
display: flex;
justify-content: space-between;
padding: 0 40rpx;
img, image {
width: 90px;
}
......
This diff could not be displayed because it is too large.
......@@ -23,15 +23,23 @@
style="margin: 0 20rpx 0 0;" @click="payTheFees">激活
</button>
<view v-else>
<button :disabled="auditStatus==1||auditStatus==2||form.isPoints==0" class="btn-red" size="mini"
<button v-if="form.deptType==6"
:disabled="auditStatus==1||auditStatus==2||form.isPoints==0" class="btn-red"
size="mini"
style="margin: 0 20rpx 0 0;"
@click="showApplyDialog">考点申请
</button>
<button v-if="form.deptType==6"
class="btn-red-kx"
size="mini"
style="margin: 0 20rpx 0 0;"
@click="auditEditFN(2)">考点详情
</button>
<button :disabled="btn" class="btn-red" size="mini" style="margin: 0 20rpx 0 0;"
@click="payTheFees">去缴费
</button>
<button v-if="form.deptType!=1" class="btn-red-kx" size="mini" style="margin: 0 20rpx 0 0;"
@click="auditEditFN">审核详情
@click="auditEditFN(1)">审核详情
</button>
</view>
</view>
......@@ -167,12 +175,15 @@ const applyPopup = ref(null)
const popupShow = ref(false)
// 考点审核状态 0 未提交 1 审核中 2 审核成功 3 审核失败
const auditStatus = ref(0)
const openId = uni.getStorageSync('openId')
onShow(() => {
console.log(openId)
init()
if (form.value.deptType != 1) { // 修复:原代码deptType未定义,改为form.value.deptType
getMyStatusAPI()
}
console.log()
})
// 页面卸载时恢复滚动(防止异常锁死)
......@@ -339,9 +350,9 @@ function goToApplyPage() {
})
}
function auditEditFN() {
function auditEditFN(type) {
uni.navigateTo({
url: `/myCenter/reviewList`
url: `/myCenter/reviewList?type=${type}`
})
}
......@@ -599,4 +610,9 @@ function payTheFees() {
:deep(.uni-popup__mask) {
touch-action: none !important;
}
.btn-red, .btn-red-kx {
padding: 0 !important;
width: 140rpx;
}
</style>
......
......@@ -4,11 +4,11 @@
<view class="search-area">
<view class="search-item">
<text>考官姓名:</text>
<input v-model="queryParams.name" placeholder="请输入考官姓名" class="search-input" />
<input v-model="queryParams.name" class="search-input" placeholder="请输入考官姓名"/>
</view>
<view class="search-item">
<text>考官编号:</text>
<input v-model="queryParams.certCode" placeholder="请输入考官编号" class="search-input" />
<input v-model="queryParams.certCode" class="search-input" placeholder="请输入考官编号"/>
</view>
<view class="search-buttons">
<button class="search-btn" @click="handleQuery">查询</button>
......@@ -16,23 +16,23 @@
</view>
</view>
<view class="list-item" v-for="(item, index) in infoList" :key="item.perId">
<view v-for="(item, index) in infoList" :key="item.perId" class="list-item">
<view class="info">
<view class="name">{{ item.name }} {{ item.perCode }}</view>
<view class="idc">证件号码:{{ item.idcCode }}</view>
<view class="reg">注册地:{{ item.memName }}</view>
</view>
<button
class="choose-btn"
:class="{ disabled: checkChosen(item) }"
@click="handleChoose(item)"
:disabled="checkChosen(item)"
class="choose-btn"
@click="handleChoose(item)"
>
{{ checkChosen(item) ? '已选择' : '选择' }}
</button>
</view>
<uni-popup ref="expirePopup" type="center" background-color="rgba(0,0,0,0.5)">
<uni-popup ref="expirePopup" background-color="rgba(0,0,0,0.5)" type="center">
<view class="custom-modal">
<view class="modal-title">提示</view>
<view class="modal-content">该考官资质已过期,是否继续添加?</view>
......@@ -46,8 +46,8 @@
</template>
<script setup>
import { ref, reactive, toRefs } from 'vue'
import { onLoad } from '@dcloudio/uni-app';
import {ref, reactive, toRefs} from 'vue'
import {onLoad} from '@dcloudio/uni-app';
import * as api from '@/common/api.js'
import _ from 'lodash'
......@@ -63,13 +63,10 @@ const memId = ref('')
const chosen = ref([])
const expirePopup = ref(null)
const currentExpireItem = ref(null)
onLoad((option) => {
isValidity.value = option.isValidity
memId.value = option.memId
chosen.value = JSON.parse(option.chosen)
})
const infoList = ref([])
const loading = ref(false)
const total = ref(0)
const selfSelect = ref('0')
const data = reactive({
queryParams: {
pageNum: 1,
......@@ -80,18 +77,23 @@ const data = reactive({
shenMemId: ''
}
})
const { queryParams } = toRefs(data)
const {queryParams} = toRefs(data)
onLoad((option) => {
console.log(option)
isValidity.value = option.isValidity
memId.value = option.memId
chosen.value = JSON.parse(option.chosen)
selfSelect.value = option.selfSelect ?? '1'
})
const infoList = ref([])
const loading = ref(false)
const total = ref(0)
// 获取考官列表
async function getList() {
if (!queryParams.value.name)
return uni.showToast({ title: '请输入考官姓名', icon: 'none' })
return uni.showToast({title: '请输入考官姓名', icon: 'none'})
if (queryParams.value.type == 1 && !queryParams.value.certCode)
return uni.showToast({ title: '请输入考官编号', icon: 'none' })
return uni.showToast({title: '请输入考官编号', icon: 'none'})
loading.value = true
const res = await api.getCoachList(queryParams.value)
......@@ -100,7 +102,7 @@ async function getList() {
loading.value = false
if (infoList.value.length === 0) {
uni.showToast({ title: '请核实考官编号、有效期及归属地!', icon: 'none' })
uni.showToast({title: '请核实考官编号、有效期及归属地!', icon: 'none'})
}
}
......@@ -126,8 +128,9 @@ function resetQuery() {
}
async function handleChoose(row) {
debugger
if (checkChosen(row)) {
return uni.showToast({ title: '已选择该考官', icon: 'none' })
return uni.showToast({title: '已选择该考官', icon: 'none'})
}
// 资质过期逻辑
......@@ -150,11 +153,19 @@ async function confirmAddExpireExaminer() {
if (!currentExpireItem.value) return
try {
if (selfSelect.value == 1) {
// 自己添加
await api.selfAdd(currentExpireItem.value.perId)
} else {
// 省级添加
await api.otherAdd(memId.value, currentExpireItem.value.perId)
}
await api.otherAdd(memId.value, currentExpireItem.value.perId)
uni.showToast({ title: '添加成功', icon: 'success' })
uni.navigateBack({ delta: 1 })
uni.showToast({title: '添加成功', icon: 'success'})
uni.navigateBack({delta: 1})
} catch (err) {
uni.showToast({ title: '添加失败', icon: 'none' })
uni.showToast({title: '添加失败', icon: 'none'})
} finally {
expirePopup.value.close()
currentExpireItem.value = null
......@@ -184,6 +195,7 @@ async function confirmAddExpireExaminer() {
align-items: center;
margin-bottom: 20rpx;
}
.search-input {
flex: 1;
border: 1rpx solid #ddd;
......@@ -198,6 +210,7 @@ async function confirmAddExpireExaminer() {
margin-top: 30rpx;
margin-left: 80px;
}
.search-btn, .reset-btn {
width: 220rpx;
height: 70rpx;
......@@ -206,10 +219,12 @@ async function confirmAddExpireExaminer() {
text-align: center;
font-size: 28rpx;
}
.search-btn {
background: #C4121B;
color: #fff;
}
.reset-btn {
background: #f7f7f7;
color: #333;
......@@ -230,19 +245,23 @@ async function confirmAddExpireExaminer() {
border-bottom: 1rpx solid #eee;
background-color: #fff;
}
.info {
flex: 1;
}
.name {
font-size: 30rpx;
font-weight: bold;
color: #333;
}
.idc, .reg {
font-size: 26rpx;
color: #666;
margin: 20rpx 0;
}
.choose-btn {
color: #C4121B;
font-size: 26rpx;
......@@ -252,6 +271,7 @@ async function confirmAddExpireExaminer() {
background-color: #fff;
margin: 10rpx auto;
}
.choose-btn.disabled {
color: #ccc;
border-color: #ccc;
......@@ -266,23 +286,27 @@ async function confirmAddExpireExaminer() {
box-sizing: border-box;
text-align: center;
}
.modal-title {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-bottom: 30rpx;
}
.modal-content {
font-size: 30rpx;
color: #666;
line-height: 1.6;
margin-bottom: 30rpx;
}
.modal-btns {
display: flex;
justify-content: space-between;
gap: 20rpx;
}
.btn-cancel {
flex: 1;
height: 80rpx;
......@@ -293,6 +317,7 @@ async function confirmAddExpireExaminer() {
font-size: 32rpx;
border: none;
}
.btn-confirm {
flex: 1;
height: 80rpx;
......@@ -303,6 +328,7 @@ async function confirmAddExpireExaminer() {
font-size: 32rpx;
border: none;
}
/* 去除button默认边框 */
.btn-cancel::after, .btn-confirm::after {
border: none;
......
......@@ -2,25 +2,32 @@
<view class="container">
<!-- 考官选择类型 -->
<view class="radio-section">
<radio-group @change="onSelfSelectChange" class="radio-group">
<radio-group class="radio-group" @change="onSelfSelectChange">
<label class="radio-item">
<radio value="1" :checked="form.selfSelect == '1'" class="custom-radio" />
<radio :checked="form.selfSelect == '1'" class="custom-radio" value="1"/>
<text class="radio-text">自行录入考官(级位考官)</text>
</label>
<label class="radio-item">
<radio value="0" :checked="form.selfSelect == '0'" class="custom-radio" />
<label v-if="shenForm.memberEpAudit==1" class="radio-item">
<radio :checked="form.selfSelect == '0'" class="custom-radio" value="0"/>
<text class="radio-text">省跆协指派考官</text>
</label>
</radio-group>
</view>
<view class="section">
<!-- 自行录入考官区域 -->
<view class="section examiner-section" v-if="showExamine">
<view v-if="form.selfSelect==0" class="section examiner-section">
<view class="modal-title">温馨提示</view>
<view class="modal-content"> 关于考官指派,请联系{{ shenForm.baseName }},联系电话:{{ shenForm.phone }}
</view>
</view>
<!-- 温馨提示 -->
<view v-if="showExamine" class="section examiner-section">
<button class="add-btn" @click="handelAddExamine">+ 添加考官</button>
</view>
<view class="examiner-list" v-if="showExamine">
<view class="examiner-item" v-for="(item, index) in list" :key="item.id">
<view v-if="showExamine" class="examiner-list">
<view v-for="(item, index) in list" :key="item.id" class="examiner-item">
<view class="info">
<text class="name">{{ item.perName }} {{ item.perCode }}</text>
<text class="idc">证件号码:{{ item.perIdcCode }}</text>
......@@ -36,7 +43,7 @@
</view>
<!-- 自定义考点申请弹窗(替换原uni.showModal) -->
<uni-popup ref="applyPopup" type="center" background-color="rgba(0,0,0,0.5)">
<uni-popup ref="applyPopup" background-color="rgba(0,0,0,0.5)" type="center">
<view class="custom-modal">
<view class="modal-title">考点申请</view>
<view class="modal-btns">
......@@ -48,7 +55,7 @@
</uni-popup>
<!-- 自定义删除确认弹窗 -->
<uni-popup ref="delPopup" type="center" background-color="rgba(0,0,0,0.5)">
<uni-popup ref="delPopup" background-color="rgba(0,0,0,0.5)" type="center">
<view class="custom-modal">
<view class="modal-title">提示</view>
<view class="modal-content">确定删除该考官吗?</view>
......@@ -60,10 +67,11 @@
</uni-popup>
<!-- 自定义省跆协指派提示弹窗 -->
<uni-popup ref="assignPopup" type="center" background-color="rgba(0,0,0,0.5)">
<uni-popup ref="assignPopup" background-color="rgba(0,0,0,0.5)" type="center">
<view class="custom-modal">
<view class="modal-title">温馨提示</view>
<view class="modal-content">关于考官指派,请联系河北省跆协,联系电话:XXXX</view>
<view class="modal-content"> 关于考官指派,请联系{{ shenForm.baseName }},联系电话:{{ shenForm.phone }}
</view>
<view class="modal-btns">
<button class="btn-confirm single-btn" @click="closeAssignPopup()">我知道了</button>
</view>
......@@ -71,7 +79,7 @@
</uni-popup>
<!-- 自定义提交成功弹窗 -->
<uni-popup ref="successPopup" type="center" background-color="rgba(0,0,0,0.5)">
<uni-popup ref="successPopup" background-color="rgba(0,0,0,0.5)" type="center">
<view class="custom-modal">
<view class="modal-title">成功</view>
<view class="modal-content">提交成功,请等待审核</view>
......@@ -84,9 +92,10 @@
</template>
<script setup>
import { ref, } from 'vue'
import { onLoad,onShow } from '@dcloudio/uni-app'
import {ref,} from 'vue'
import {onLoad, onShow} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import {getShenMemberInfo} from "@/common/api.js";
const form = ref({
selfSelect: '1' // 1:自行录入 0:省跆协指派
......@@ -95,6 +104,7 @@ const showExamine = ref(true)
const loading = ref(false)
const list = ref([])
const memId = ref(null)
const shenForm = ref({})
// 弹窗引用
const applyPopup = ref(null)
......@@ -112,27 +122,35 @@ onShow(() => {
if (memId.value) {
getExaminer()
}
getShenMemberInfoFn()
})
async function getExaminer() {
loading.value = true
const res = await api.listApi({ memId: memId.value })
const res = await api.listApi({memId: memId.value})
list.value = res.rows
loading.value = false
}
async function getShenMemberInfoFn() {
const res = await api.getShenMemberInfo()
shenForm.value = res.data ?? {}
}
// 删除考官:打开自定义弹窗
function handleDel(row) {
currentDelItem.value = row
delPopup.value.open()
}
// 确认删除
async function confirmDel() {
await api.examinerDel(currentDelItem.value.id)
uni.showToast({ title: '删除成功', icon: 'success' })
getExaminer()
uni.showToast({title: '删除成功', icon: 'success'})
await getExaminer()
closeDelPopup()
}
function closeDelPopup() {
delPopup.value.close()
}
......@@ -141,10 +159,11 @@ function closeDelPopup() {
function onSelfSelectChange(e) {
form.value.selfSelect = e.detail.value
showExamine.value = e.detail.value == '1'
if (e.detail.value == '2') {
if (e.detail.value == '0') {
assignPopup.value.open()
}
}
function closeAssignPopup() {
assignPopup.value.close()
}
......@@ -159,19 +178,20 @@ function handelAddExamine() {
// 提交申请:打开自定义成功弹窗
async function handelSubmit() {
if (!form.value.selfSelect) {
return uni.showToast({ title: '请选择考官类型', icon: 'none' })
return uni.showToast({title: '请选择考官类型', icon: 'none'})
}
if (form.value.selfSelect == '1' && list.value.length == 0) {
return uni.showToast({ title: '请添加考官', icon: 'none' })
return uni.showToast({title: '请添加考官', icon: 'none'})
}
try {
await api.commitExamPointApply(form.value)
successPopup.value.open()
} catch (err) {
uni.showToast({ title: err.data.msg, icon: 'none' })
uni.showToast({title: err.data.msg, icon: 'none'})
}
}
function confirmSuccess() {
successPopup.value.close()
uni.navigateBack()
......@@ -181,9 +201,11 @@ function confirmSuccess() {
function openApplyPopup() {
applyPopup.value.open()
}
function closeApplyPopup() {
applyPopup.value.close()
}
function confirmApply() {
applyPopup.value.close()
// 此处添加考点申请逻辑
......@@ -195,9 +217,11 @@ function confirmApply() {
.container {
min-height: 100vh;
}
.section{
padding:15rpx 20rpx;
.section {
padding: 15rpx 20rpx;
}
/* 单选框区域 */
.radio-section {
background: #fff;
......@@ -332,28 +356,33 @@ function confirmApply() {
box-sizing: border-box;
text-align: center;
}
.modal-title {
font-size: 36rpx;
font-weight: 600;
color: #333;
margin-bottom: 30rpx;
}
.modal-content {
font-size: 30rpx;
color: #666;
line-height: 1.6;
margin-bottom: 30rpx;
}
.modal-tip {
font-size: 28rpx;
color: #FF7A00;
margin-top: 20rpx;
}
.modal-btns {
display: flex;
justify-content: space-between;
gap: 20rpx;
}
.btn-cancel {
flex: 1;
height: 80rpx;
......@@ -364,6 +393,7 @@ function confirmApply() {
font-size: 32rpx;
border: none;
}
.btn-confirm {
flex: 1;
height: 80rpx;
......@@ -374,9 +404,11 @@ function confirmApply() {
font-size: 32rpx;
border: none;
}
.single-btn {
flex: 1;
}
.btn-cancel::after, .btn-confirm::after {
border: none;
}
......
......@@ -5,17 +5,17 @@
审核信息
</view>
<view>
<view class="stepItem" v-for="(n,index) in recordList" :key="index">
<view class="time">{{n.auditTime||'待审批'}}</view>
<view v-for="(n,index) in recordList" :key="index" class="stepItem">
<view class="time">{{ n.auditTime || '待审批' }}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==1" class="text-success">审核通过</text>
<text v-if="n.auditResult==0" class="text-danger"> 审核拒绝</text>
</view>
<!-- <view class="name">{{index+1}}</view> -->
<view class="deptName">{{n.auditDeptName}}</view>
<view class="deptName">{{ n.auditDeptName }}</view>
<view v-if="n.auditResult==0">
备注:{{n.auditMsg||'/' }}
备注:{{ n.auditMsg || '/' }}
</view>
</view>
</view>
......@@ -26,35 +26,46 @@
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'underscore'
import to from 'await-to-js'
import {
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'underscore'
import to from 'await-to-js'
import {
onMounted,
ref
} from 'vue'
import {
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const userType = ref('')
const recordList = ref([])
onLoad(async (option) => {
await getMyRecentFN()
})
} from '@dcloudio/uni-app'
async function getMyRecentFN() {
const app = getApp();
const userType = ref('')
const recordList = ref([])
onLoad(async (option) => {
console.log(option)
if (option.type == 1) await getMyRecentFN()
if (option.type == 2) await getMyRecentExamFn()
})
async function getMyRecentFN() {
const [err, res] = await to(api.getMyRecent())
if (!err && res.data && res.data.auditLogs) {
recordList.value = JSON.parse(res.data.auditLogs)
}
}
async function getMyRecentExamFn() {
const [err, res] = await to(api.getMyRecentExam())
if (!err && res.data && res.data.auditLogs) {
recordList.value = JSON.parse(res.data.auditLogs)
}
}
</script>
<style scoped lang="scss">
.wBox {
<style lang="scss" scoped>
.wBox {
width: 700rpx;
padding: 30rpx;
margin: 20rpx auto;
......@@ -79,5 +90,5 @@
text-align: justify;
}
}
}
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!