c450dde1 by 杨炀

no message

1 parent b4b5f990
Showing 129 changed files with 2332 additions and 1660 deletions
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
......
......@@ -49,8 +49,9 @@
</uni-swipe-action>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<button class="btn-red" @click="gochose">+ 在线选择</button>
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>请选择团队</text>
<!-- <button class="btn-red" @click="gochose">+ 在线选择</button> -->
</view>
<view class="fixedBottom">
......@@ -126,19 +127,19 @@
function getList() {
api.getPayList(queryParams.value).then(res => {
list.value = []
res.rows.forEach(item => {
if (item.rangeId == queryParams.value.rangeId) {
list.value = item.certList
formData.value = item
return
}
})
list.value = []
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>
<view class="appList">
<view class="vipData" v-if="userType == '1'" v-show="totalCost>0">
<view>费用合计:
<text>¥{{ totalCost.toFixed(2) }}</text>
</view>
</view>
<view class="appItem" v-for="item in list">
<view class="appList">
<view class="vipData" v-if="userType == '1'" v-show="totalCost>0">
<view>费用合计:
<text>¥{{ totalCost.toFixed(2) }}</text>
</view>
</view>
<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>
</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>
<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>
</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">
费用合计
......@@ -53,10 +65,24 @@
<view class="func" v-if="(userType == '3'||userType == '2') && item.auditStatus == 0">
<button @click="audit(item.recordId,'0')">拒绝</button>
<button @click="audit(item.recordId,'1')">同意</button>
</view>
</view>
<view class="func" v-if="(userType == '1'&&item.auditStatus == 0)">
<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>
......@@ -64,10 +90,10 @@
<view class="nodata" v-if="list.length==0">
<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 v-if="userType=='2'" class="block-btn-box">
<button @click="goMerge" class="btn-red-kx">前往合并 > </button>
</view> -->
</view>
</template>
......@@ -84,15 +110,15 @@
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
auditStatus:'0'
// pageSize: 10
auditStatus: '0'
})
const navs = ref(['审核中', '审核通过', '审核拒绝', '退回'])
const current = ref()
const navs = ref(['审核中', '审核通过', '审核拒绝', '回'])
const current = ref()
const list = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
const deptType = ref('')
const userType = ref('')
const totalCost = ref(0)
onLoad(() => {
if (app.globalData.isLogin) {
......@@ -106,8 +132,8 @@
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
console.log(userType.value)
getList()
}
......@@ -118,26 +144,26 @@
getList()
}
function getList() {
uni.showLoading({
title:'加载中'
})
if(deptType.value==2||deptType.value==3){
// 省
queryParams.value.mergeFlag = 0
}else if(deptType.value==1){
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 => {
function getList() {
uni.showLoading({
title: '加载中'
})
if (deptType.value == 2 || deptType.value == 3) {
// 省
queryParams.value.mergeFlag = 0
} else if (deptType.value == 1) {
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 => {
uni.hideLoading()
list.value = res.rows
list.value.forEach(item => {
item.content = JSON.parse(item.content)
// item.doc = JSON.parse(item.doc)
totalCost.value = totalCost.value + (item.content.allFee * 1)
item.content = JSON.parse(item.content)
// item.doc = JSON.parse(item.doc)
totalCost.value = totalCost.value + (item.content.allFee * 1)
})
total.value = res.total
})
......@@ -194,33 +220,69 @@
})
}
function goDetail(item) {
const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
const form = encodeURIComponent(JSON.stringify(item))
if(userType.value=='1'){
// 查看
let path = `/pages/group/apply/mergeUpDetail?form=${form}`
uni.navigateTo({
url: path
});
} else if(userType.value=='2'||userType.value=='3'){
// 审核记录
let path = `/pages/group/apply/record?certId=${item.content.certId}`
uni.navigateTo({
url: path
});
function goDetail(item) {
const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
const form = encodeURIComponent(JSON.stringify(item))
if (userType.value == '1') {
// 查看
let path = `/group/apply/mergeUpDetail?form=${form}`
uni.navigateTo({
url: path
});
} else if (userType.value == '2' || userType.value == '3') {
// 审核记录
let path = `/group/apply/record?certId=${item.content.certId}`
uni.navigateTo({
url: path
});
}
}
function goMerge(){
let path = `/pages/group/apply/merge`
uni.navigateTo({
url: path
});
}
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>
<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>
<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">
<!-- 成员 -->
<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>
<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}}
<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>
......@@ -56,8 +47,10 @@
const {
proxy
} = getCurrentInstance()
const app = getApp();
const query = ref({
const app = getApp();
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()
list.value = res.rows
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>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="query.name" placeholder="搜索团队会员名称" @blur="getList" @clear="getList">
</uni-easyinput>
</view>
<view class="vipData">
<view>共计 <text>{{ forms?.total }}</text></view>
<view>有效会员 <text>{{ forms?.effective }}</text></view>
<view>过期会员 <text>{{ forms?.expired }}</text></view>
<view>即将过期会员 <text>{{ forms?.soon }}</text></view>
<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">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="query.name" placeholder="搜索团队会员名称" @blur="getList" @clear="getList">
</uni-easyinput>
</view>
<view class="vipData">
<view>共计 <text>{{ forms?.total }}</text></view>
<view>有效会员 <text>{{ forms?.effective }}</text></view>
<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}}
......@@ -30,7 +40,7 @@
<text>暂无数据</text>
</view>
</view>
</z-paging>
</view>
</template>
......@@ -47,12 +57,16 @@
proxy
} = getCurrentInstance()
const app = getApp();
const query = ref({
const query = ref({
pageNum:1,
pageSize:8,
fromList: 1,
dType: 4,
dType: 4,
status: 2
})
const navs = ref(['道馆', '三级协会', '二级协会', '一级协会'])
const list = ref([])
const list = ref([])
const paging = ref(null)
const forms = ref({})
const infoList = ref([])
const total = ref(0)
......@@ -78,23 +92,40 @@
title: '加载中'
})
console.log(current.value, currentTabName.value, query.value.dType)
api.getGroupVipList(query.value).then(res => {
infoList.value = res.rows
api.getGroupVipList(query.value).then(res => {
// infoList.value = res.rows
paging.value.complete(res.rows);
total.value = res.total
uni.hideLoading()
})
}
function getGroupInfo() {
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
forms.value = res
uni.hideLoading()
})
}
function onClickItem(e) {
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.showToast({
title:`提交成功!`
})
getList()
})
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,27 +7,22 @@
</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" />
<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="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>
<view>
<view class="name">
<text v-if="n.deptType == 2">一级协会</text>
<text v-if="n.deptType == 3">直属协会</text>
<text v-if="n.deptType == 4">二级协会</text>
<text v-if="n.deptType == 5">三级协会</text>
<text v-if="n.deptType == 6">职业性团体会员</text>
{{n.name}}
</view>
<view class="name">
<text v-if="n.deptType == 2">一级协会</text>
<text v-if="n.deptType == 3">直属协会</text>
<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>
......@@ -45,7 +40,7 @@
</template>
<script setup>
import * as api from '@/common/api.js'
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
ref,
......@@ -59,58 +54,65 @@
} = getCurrentInstance()
const app = getApp();
const queryParams = ref({
showMyPersonFlag: 1,
checkPaymentCommit: 1,
queryParams: 1
showMyPersonFlag: 1,
checkPaymentCommit: 1,
queryParams: 1
})
const list = ref([])
const total = ref(0)
const userType = ref('')
onLoad((option) => {
userType.value = app.globalData.userType
userType.value = app.globalData.userType
queryParams.value.paymentRangeId = option.rangeId
getList()
})
function getList() {
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){
n.checked = false
}else{
n.checked = true
}
}
function handleImport(){
var arr=[]
for(var n of list.value){
if(n.checked){
arr.push(n.memId)
}
}
if(arr.length==0){
uni.showToast({
title:"请选择团体",
icon:"none"
})
return
}
api.addGroupPaymentGroup({ rangeId: queryParams.value.paymentRangeId, memIds: arr.join(',') }).then(res=>{
let path = `/pages/group/addGroupMemberPay?rangeId=${res.data}`
uni.redirectTo({
url: path
});
})
function checkThis(n) {
if (n.checked) {
n.checked = false
} else {
n.checked = true
}
}
function handleImport() {
var arr = []
for (var n of list.value) {
if (n.checked) {
arr.push(n.memId)
}
}
if (arr.length == 0) {
uni.showToast({
title: "请选择团体",
icon: "none"
})
return
}
api.addGroupPaymentGroup({
rangeId: queryParams.value.paymentRangeId,
memIds: arr.join(',')
}).then(res => {
let path = `/group/addGroupMemberPay?rangeId=${res.data}`
uni.redirectTo({
url: path
});
})
}
</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="w100">
<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"
......@@ -70,11 +72,12 @@
<text style="padding: 15rpx 0;">{{ szToHz(n.levelOld) }}</text>
</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>
</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,
......@@ -409,7 +415,8 @@
s.photo = config.baseUrl_api + s.photo
}
}
}
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: '提示',
......@@ -637,14 +644,36 @@
}
}))
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;
......@@ -660,5 +689,11 @@
.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
......
<template>
<view>
<view class="searchbar">
<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>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="item">
<view class="status" @click="goDetail(item)">
<text v-if="item.status=='0'" class="text-primary">{{ item.statusStr }}</text>
<text v-if="item.status=='1'" class="text-primary">{{ item.statusStr }}</text>
<text v-if="item.status=='2'" class="text-success">{{ item.statusStr }}</text>
<text v-if="item.status=='3'" class="text-danger">{{ item.statusStr }}</text>
<text v-if="item.status=='4'" class="text-warning">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<template>
<view>
<view class="searchbar">
<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" v-if="isExam=='0'" @click="goAdd">+ 添加级位考试</view>
</view>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="item">
<view class="status" @click="goDetail(item)">
<text v-if="item.status=='0'" class="text-primary">{{ item.statusStr }}</text>
<text v-if="item.status=='1'" class="text-primary">{{ item.statusStr }}</text>
<text v-if="item.status=='2'" class="text-success">{{ item.statusStr }}</text>
<text v-if="item.status=='3'" class="text-danger">{{ item.statusStr }}</text>
<text v-if="item.status=='4'" class="text-warning">{{ item.statusStr }}</text>
</view>
<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.memberName}}</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>
<view>
考官
<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="editThis(item)">编辑</button>
<button @click="handleSubmit(item)">提交审核</button>
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
type: '1',
rankStatus: '0'
})
const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝'])
const current = ref()
const list = ref([])
const total = ref(0)
const deptType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getLevelList(queryParams.value).then(res => {
uni.hideLoading()
list.value = res.rows
total.value = res.total
})
}
function goAdd() {
let path = `/pages/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/pages/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
}
function handleSubmit(item) {
uni.showModal({
title: '提示',
content: `确定提交${item.name}进行审核吗`,
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: `提交中`
})
upApply(item.examId)
}
}
})
}
function upApply(id) {
api.submitVerity(id).then(res => {
uni.hideLoading()
getList()
uni.showToast({
title: `提交成功`
})
})
}
function goDetail(item) {
if (item.status != '0') {
let path = `/pages/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
} else {
// 去编辑
editThis(item)
}
}
</script>
<style scoped>
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
<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>
<view>
考官
<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>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
type: '1',
rankStatus: '0'
})
const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝'])
const current = ref()
const list = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
const isExam = ref('1')
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
isExam.value = app.globalData.isExam
getList()
}
function getList() {
api.getLevelList(queryParams.value).then(res => {
uni.hideLoading()
list.value = res.rows
total.value = res.total
})
}
function goAdd() {
let path = `/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
}
function handleSubmit(item) {
uni.showModal({
title: '提示',
content: `确定提交${item.name}进行审核吗`,
success: function(res) {
if (res.confirm) {
uni.showLoading({
title: `提交中`
})
upApply(item.examId)
}
}
})
}
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 => {
uni.hideLoading()
getList()
uni.showToast({
title: `提交成功`
})
})
}
function goDetail(item) {
if (item.status != '0') {
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
} else {
// 去编辑
editThis(item)
}
}
</script>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
\ No newline at end of file
......
<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,65 +53,62 @@
<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>
<script setup>
import * as api from '@/common/api.js'
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'lodash'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
import _ from 'lodash'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '0',
type: '1'
})
const navs = ref(['审核中', '审核通过', '审核拒绝'])
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
type: '1'
})
const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回'])
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
const userType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
api.getVerityList(queryParams.value).then(res => {
uni.hideLoading()
userType.value = app.globalData.userType
getList()
}
function getList() {
api.getVerityList(queryParams.value).then(res => {
uni.hideLoading()
const list = []
_.each(res.rows, r => {
const item = JSON.parse(r.content)
......@@ -116,32 +124,49 @@
list.push(item)
})
infoList.value = list
total.value = res.total
})
}
function onClickItem(e) {
console.log(e)
uni.showLoading({
title: '加载中'
})
queryParams.value.status = e.currentIndex
getList()
}
total.value = res.total
})
}
function onClickItem(e) {
console.log(e)
uni.showLoading({
title: '加载中'
})
queryParams.value.status = e.currentIndex
getList()
}
function goDetail(item) {
console.log(item)
const form = encodeURIComponent(JSON.stringify(item))
if(item.status!='0'){
let path = `/pages/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
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) => {
......@@ -196,18 +249,18 @@
})
getList()
})
}
</script>
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
......
......@@ -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() {
......@@ -73,7 +73,8 @@
uni.showToast({
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="appList">
<view class="appItem" v-for="item in infoList">
<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" />
</view>
<view class="status" @click="goDetail(item)">
<text :class="{
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.applyTime">上报日期:{{item.applyTime}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</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.memberName}}</view>
</view>
<view>
考级考官
<view>{{item.examinerNames}}</view>
</view>
<view>
考级考生数
<view>{{item.totalNum}}</view>
</view>
</view>
</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>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '1',
mergeFlag: '0',
type: '1'
})
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
<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,index) in infoList" :key="index">
<view @click="checkThis(item)" class="iconbox">
<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="{
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.applyTime">上报日期:{{item.applyTime}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</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.memberName}}</view>
</view>
<view>
考级考官
<view>{{item.examinerNames}}</view>
</view>
<view>
考级考生数
<view>{{item.totalNum}}</view>
</view>
</view>
</view>
</view>
<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">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '1',
mergeFlag: '0',
type: '1'
})
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const infoList = ref([])
const batchList = ref([])
const total = ref(0)
const totalCost = ref(0)
const deptType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
totalCost.value = 0
api.getVerityList(queryParams.value).then(res => {
const list = []
_.each(res.rows, r => {
const item = JSON.parse(r.content)
item.recordId = r.recordId
item.auditStatus = r.auditStatus
item.isView = r.isView
item.submitStatus = r.submitStatus
item.distributeTime = r.distributeTime
item.statusStr = statusArr[r.auditStatus]
item.remark = r.remark
item.cuLevels = r.cuLevels
item.sourceData = r
item.auditProcess = r.auditProcess
item.checked = false
console.log(item)
list.push(item)
totalCost.value += (item.totalAmount * 1)
})
infoList.value = list
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item) {
if (item.status != '0') {
let path = `/pages/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
} else {
return
}
}
const batchList = ref([])
const total = ref(0)
const totalCost = ref(0)
const deptType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
totalCost.value = 0
api.getVerityList(queryParams.value).then(res => {
const list = []
_.each(res.rows, r => {
const item = JSON.parse(r.content)
item.recordId = r.recordId
item.auditStatus = r.auditStatus
item.isView = r.isView
item.submitStatus = r.submitStatus
item.distributeTime = r.distributeTime
item.statusStr = statusArr[r.auditStatus]
item.remark = r.remark
item.cuLevels = r.cuLevels
item.sourceData = r
item.auditProcess = r.auditProcess
item.checked = false
console.log(item)
list.push(item)
totalCost.value += (item.totalAmount * 1)
})
infoList.value = list
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item) {
if (item.status != '0') {
let path = `/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
} else {
return
}
}
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
});
}
function checkThis(item) {
if (item.checked) {
item.checked = false
} else {
item.checked = true
}
}
var ids = []
function handleMerge() {
batchList.value = []
ids = []
for (var n of infoList.value) {
if (n.checked) {
}
function checkThis(item) {
if (item.checked) {
item.checked = false
} else {
item.checked = true
}
}
var ids = []
function handleMerge() {
batchList.value = []
ids = []
for (var n of infoList.value) {
if (n.checked) {
batchList.value.push(n)
ids.push(n.recordId)
}
}
ids.push(n.recordId)
}
}
if (batchList.value.length == 0) {
uni.showToast({
title: `请选择至少一条数据`,
icon: 'none'
})
return
}
const mergeFlag = batchList.value.some(item => {
if (item.auditStatus != '1') {
return uni.showToast({
title: `${item.examCode}审核未通过,无法合并`,
icon: 'none'
})
}
})
uni.showModal({
title: '提示',
content: `确认合并已选中的数据?`,
success: function(res) {
if (res.confirm) {
api.mergeRecords({
body: ids.join(),
type: queryParams.value.type
}).then(res => {
uni.showToast({
title: `操作成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem{padding: 30rpx 30rpx 30rpx 120rpx;}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
.icon {
width: 60rpx;
height: 60rpx;
margin-right: 16rpx;
}
})
return
}
const mergeFlag = batchList.value.some(item => {
if (item.auditStatus != '1') {
return uni.showToast({
title: `${item.examCode}审核未通过,无法合并`,
icon: 'none'
})
}
})
uni.showModal({
title: '提示',
content: `确认合并已选中的数据?`,
success: function(res) {
if (res.confirm) {
api.mergeRecords({
body: ids.join(),
type: queryParams.value.type
}).then(res => {
uni.showToast({
title: `操作成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem{padding: 30rpx 30rpx 30rpx 120rpx;}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
.icon {
width: 60rpx;
height: 60rpx;
margin-right: 16rpx;
}
</style>
\ No newline at end of file
......
<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',
'text-danger':item.status=='2',
'text-warning':item.status=='3'
}">
{{ item.auditStatus=='100'?'待提交':statusArr[item.status] }}
}">
{{ item.auditStatus=='100'?'待提交':statusArr[item.status] }}
</view>
</view>
<view class="date" v-if="item.handleDate">{{item.handleDate}}</view>
......@@ -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>
<image mode="aspectFit" src="/static/nodata.png"></image>
<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()
})
}
}
})
}
......@@ -138,13 +206,13 @@
success: function(res) {
if (res.confirm) {
api.doMergeFlows({
id: item.recordId,
flag: '1',
type: queryParams.value.type
id: item.recordId,
flag: '1',
type: queryParams.value.type
}).then(res => {
uni.showToast({
title: `操作成功!`
})
})
getList()
})
}
......@@ -153,19 +221,27 @@
}
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({
url: path
});
}
function goApproval() {
let path = `/level/approval`
uni.redirectTo({
url: path
});
}
function goMerge() {
let path = `/level/merge`
uni.redirectTo({
url: path
});
}
</script>
......
<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>
</view>
<view class="date" @click="goDetail(item)">
<uni-icons type="calendar" size="16" color="#7D8592"></uni-icons>
<text v-if="item.payTime">{{item.payTime}} 缴费</text>
<text v-else>{{item.payNoticeSendTime}} 下发</text>
</view>
<view class="name" @click="goDetail(item)">{{item.finalDocName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
人数合计
<view>{{item.personCount}}</view>
</view>
<view>
年限合计
<view>{{item.yearCount}}</view>
</view>
<view>
费用合计
<view>¥{{item.allPrice}}</view>
</view>
</view>
<view class="func">
<button
v-if="(deptType == 2 || deptType == 3)&&item?.record?.auditStatus != 2 && item?.record?.auditStatus != 3"
@click="handleUpdate(item)">上传凭证</button>
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
<!-- 上传凭证 -->
<uni-popup ref="UpPop" type="bottom" background-color="#fff" animation>
<view class="popBody">
<uni-forms v-model="form">
<uni-forms-item label="缴费日期" required>
<uni-datetime-picker v-model="form.payTime"></uni-datetime-picker>
</uni-forms-item>
<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>
</view>
<view class="date" @click="goDetail(item)">
<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>
<view class="name" @click="goDetail(item)">{{item.finalDocName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
人数合计
<view>{{item.personCount}}</view>
</view>
<view>
年限合计
<view>{{item.yearCount}}</view>
</view>
<view>
费用合计
<view>¥{{item.allPrice}}</view>
</view>
</view>
<view class="func">
<button
v-if="(deptType == 2 || deptType == 3)&&item?.record?.auditStatus != 2 && item?.record?.auditStatus != 3"
@click="handleUpdate(item)">上传凭证</button>
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
<!-- 上传凭证 -->
<uni-popup ref="UpPop" type="bottom" background-color="#fff" animation>
<view class="popBody">
<uni-forms v-model="form">
<uni-forms-item label="缴费日期" required>
<uni-datetime-picker v-model="form.payTime"></uni-datetime-picker>
</uni-forms-item>
<uni-forms-item label="缴费凭证" required>
<uni-file-picker 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>
<uni-forms-item label="备注">
<uni-easyinput v-model="form.remark" type="textarea"></uni-easyinput>
</uni-forms-item>
<uni-file-picker 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>
<uni-forms-item label="备注">
<uni-easyinput v-model="form.remark" type="textarea"></uni-easyinput>
</uni-forms-item>
</uni-forms>
<button class="btn-red" @click="uploadSure">确定</button>
</view>
</uni-popup>
</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 app = getApp();
const list = ref([])
const deptType = ref('')
<button class="btn-red" @click="uploadSure">确定</button>
</view>
</uni-popup>
</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 app = getApp();
const list = ref([])
const deptType = ref('')
const UpPop = ref(null)
const form = ref({
docId:'',
payTime:'',
url:'',
remark:''
})
onLoad(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getFeeBillList().then(res => {
list.value = res.rows
})
}
})
onLoad((option) => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getFeeBillList().then(res => {
list.value = res.rows
})
}
function handleUpdate(item) {
form.value.docId = item.docId
UpPop.value.open()
form.value.docId = item.docId
UpPop.value.open()
}
let selectFileValue = {}
function selectFile(e) {
......@@ -130,7 +129,7 @@
}
function delSupplementFile(index) {
selectFileValue = {}
}
}
function uploadSure(){
console.log(form.value)
api.commitPaymentVoucher(form.value).then(res=>{
......@@ -142,26 +141,29 @@
})
getList()
})
}
function goDetail(item) {
}
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
});
}
</script>
<style scoped lang="scss">
.popBody {
font-size: 28rpx;
line-height: 1.5;
overflow: auto;
padding: 30rpx;
.btn-red {
margin: 50rpx 0 30rpx;
}
}
});
}
</script>
<style scoped lang="scss">
.popBody {
font-size: 28rpx;
line-height: 1.5;
overflow: auto;
padding: 30rpx;
.btn-red {
margin: 50rpx 0 30rpx;
}
}
:deep(.file-picker__progress){
opacity: 0;
}
</style>
\ No newline at end of file
......
<template>
<view>
<!-- 级位证书发布 -->
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-warning':item.certStatus=='0',
<template>
<view>
<!-- 级位证书发布 -->
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-warning':item.certStatus=='0',
'text-primary':item.certStatus=='1',
'text-success':item.certStatus=='2'
}">{{ 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="flexbox" @click="goDetail(item)">
<view>
申请单位
<view>{{item.memberName||'--'}}</view>
</view>
<view>
已发证书
<view>{{item.hasCerts}}</view>
</view>
<view>
待发证书
<view>{{item.noCerts}}</view>
</view>
</view>
<view class="func" v-if="item.certStatus != '2'">
<button @click="send(item)">一键生成</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '0',
type: '1'
})
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad((option) => {
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getCertsLList(queryParams.value).then(res => {
infoList.value = res.rows
uni.hideLoading()
})
}
'text-success':item.certStatus=='2'
}">{{ item.certStatusStr }}</text>
</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>
申请单位
<view>{{item.memberName||'--'}}</view>
</view>
<view>
已发证书
<view>{{item.hasCerts}}</view>
</view>
<view>
待发证书
<view>{{item.noCerts}}</view>
</view>
</view>
<view class="func" v-if="item.certStatus != '2'">
<button @click="send(item)">一键生成</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '0',
type: '1'
})
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad((option) => {
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getCertsLList(queryParams.value).then(res => {
infoList.value = res.rows
uni.hideLoading()
})
}
function goDetail(item) {
// const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/level/ztx/examList?type=${queryParams.value.type}&payId=${item.payId}`
uni.navigateTo({
url: path
});
}
function send(row) {
uni.showModal({
title: '提示',
content: `确定生成 ${row.name} 的证书吗`,
success: function(res) {
if (res.confirm) {
api.submitCert([{
id: row.payId
}]).then(res => {
uni.showToast({
title: `下发成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
// const form = encodeURIComponent(JSON.stringify(item))
let path = `/level/ztx/examList?type=${queryParams.value.type}&payId=${item.payId}`
uni.navigateTo({
url: path
});
}
function send(row) {
uni.showModal({
title: '提示',
content: `确定生成 ${row.name} 的证书吗`,
success: function(res) {
if (res.confirm) {
api.submitCert([{
id: row.payId
}]).then(res => {
uni.showToast({
title: `下发成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
\ No newline at end of file
......
<template>
<view>
<!-- 级位证书发布 -->
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-warning':item.isCert=='0',
<template>
<view>
<!-- 级位证书发布 -->
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-warning':item.isCert=='0',
'text-primary':item.isCert=='1',
'text-success':item.isCert=='2'
}">{{ statusArr[item.isCert]}}</text>
</view>
<view class="date">申请日期: {{item.applyTime?.slice(0,10)}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="pp esp">考级考官:{{item.examinerNames}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请单位
<view>{{item.memberName}}</view>
</view>
<view>
已发/待发证书
<view>{{item.hasCerts}}/<text class="text-danger">{{item.noCerts}}</text></view>
</view>
<view>
考生数/通过数
<view>{{item.totalNum}}/<text class="text-danger">{{item.pass}}</text></view>
</view>
</view>
<view class="func" v-if="item.certStatus != '2'">
<button @click="send(item)">一键生成</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
})
'text-success':item.isCert=='2'
}">{{ statusArr[item.isCert]}}</text>
</view>
<view class="date">申请日期: {{item.applyTime?.slice(0,10)}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="pp esp">考级考官:{{item.examinerNames}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请单位
<view>{{item.memberName}}</view>
</view>
<view>
已发/待发证书
<view>{{item.hasCerts}}/<text class="text-danger">{{item.noCerts}}</text></view>
</view>
<view>
考生数/通过数
<view>{{item.totalNum}}/<text class="text-danger">{{item.pass}}</text></view>
</view>
</view>
<view class="func" v-if="item.certStatus != '2'">
<button @click="send(item)">一键生成</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
})
const statusArr = ['未发放', '部分发放', '已发放']
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad((option) => {
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad((option) => {
queryParams.value.payId = option.payId
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getExamListByPayId(queryParams.value).then(res => {
infoList.value = res.rows
uni.hideLoading()
})
}
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getExamListByPayId(queryParams.value).then(res => {
infoList.value = res.rows
uni.hideLoading()
})
}
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}`
uni.navigateTo({
url: path
});
}
function send(row) {
uni.showModal({
title: '提示',
content: `确定生成 ${row.name} 的证书吗`,
success: function(res) {
if (res.confirm) {
api.submitCert([{
id: row.payId
}]).then(res => {
uni.showToast({
title: `下发成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
// const form = encodeURIComponent(JSON.stringify(item))
let path = `/level/ztx/studentList?type=${queryParams.value.type}&examId=${item.examId}&payId=${queryParams.value.payId}`
uni.navigateTo({
url: path
});
}
function send(row) {
uni.showModal({
title: '提示',
content: `确定生成 ${row.name} 的证书吗`,
success: function(res) {
if (res.confirm) {
api.submitCert([{
id: row.payId
}]).then(res => {
uni.showToast({
title: `下发成功`
})
getList()
})
}
}
})
}
</script>
<style scoped lang="scss">
.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>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" placeholder="搜索姓名" @blur="getList()" @clear="getList()">
......@@ -86,10 +86,16 @@
}
function sendCert(row) {
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",
......
<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 in infoList" @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 payId = ref('')
<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 in infoList" @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 payId = ref('')
const list = ref([])
const form = ref({})
const infoList = ref([])
const deptType = ref()
const type = ref(null)
let rangeId = ''
onLoad((option) => {
type.value = option.type
if ('form' in option) {
const form = ref({})
const infoList = ref([])
const deptType = ref()
const type = ref(null)
let rangeId = ''
onLoad((option) => {
type.value = option.type
if ('form' in option) {
var obj = JSON.parse(decodeURIComponent(option.form))
form.value.flowCode = obj.payCode
form.value.mergeName = obj.name
......@@ -88,36 +88,36 @@
form.value.mergeTime = obj.submitTime
form.value.totalNum = Math.floor(obj.totalNum)
form.value.totalAmount = Math.floor(obj.totalAmount)
payId.value = obj.payId
}
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getForm()
}
function getForm() {
uni.showLoading({
title: '加载中'
})
api.getPaymentDetailsByPayId(payId.value).then(res => {
payId.value = obj.payId
}
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getForm()
}
function getForm() {
uni.showLoading({
title: '加载中'
})
api.getPaymentDetailsByPayId(payId.value).then(res => {
infoList.value = res.data
uni.hideLoading()
})
}
function goDetail(item) {
uni.hideLoading()
})
}
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
});
......@@ -126,38 +126,38 @@
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;
}
}
}
}
}
}
</script>
<style scoped lang="scss">
.wBox {
width: 700rpx;box-sizing: border-box;
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>
</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.
<template>
<template>
<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" />段位考试申请
</view>
<view @click="goPath('/pages/exam/payment?type=2')">
<image src="@/static/icon/13.png" />段位考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=2')">
<image src="@/static/icon/12.png" />段位考试<br />成绩录入
</view>
<view @click="goPath('/pages/rank/apply?type=3')">
<image src="@/static/icon/14.png" />越位考试<br />申请
</view>
<view @click="goPath('/pages/exam/payment?type=3')">
<image src="@/static/icon/16.png" />越段考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=3')">
<image src="@/static/icon/15.png" />越段考试<br />成绩录入
</view>
</view>
</view>
</template>
<script setup>
import {
onShow,onLoad
} from '@dcloudio/uni-app'
import {
ref
} from 'vue'
const app = getApp()
</view>
<view class="girdBox" v-if="userType=='2'">
<view @click="goPath('/pages/rank/apply?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/11.png'" />段位考试申请
</view>
<view @click="goPath('/pages/exam/payment?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/13.png'" />段位考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/12.png'" />段位考试<br />成绩录入
</view>
<view @click="goPath('/pages/rank/apply?type=3')">
<image :src="config.baseUrl_api+'/fs/static/icon/14.png'" />越位考试<br />申请
</view>
<view @click="goPath('/pages/exam/payment?type=3')">
<image :src="config.baseUrl_api+'/fs/static/icon/16.png'" />越段考试<br />缴费单
</view>
<view @click="goPath('/pages/exam/score?type=3')">
<image :src="config.baseUrl_api+'/fs/static/icon/15.png'" />越段考试<br />成绩录入
</view>
</view>
</view>
</template>
<script setup>
import {
onShow,onLoad
} from '@dcloudio/uni-app'
import {
ref
} from 'vue'
import config from '@/config.js'
const app = getApp()
const userType = ref()
onLoad((option)=>{
console.log(option)
userType.value = option.userType
})
function goPath(path) {
uni.navigateTo({
url: path
});
}
</script>
})
function goPath(path) {
uni.navigateTo({
url: path
});
}
</script>
<style scoped lang="scss">
.girdBox {
display: flex;
flex-wrap: wrap;
padding: 30rpx 0;
background: #FFFFFF;
margin: 50rpx;
border-radius: 20rpx;
view {
width: 25%;
text-align: center;
padding: 2% 0;
font-size: 24rpx;
color: #434343;
image {
width: 80rpx;
height: 80rpx;
display: block;
margin: auto;
}
}
.girdBox {
display: flex;
flex-wrap: wrap;
padding: 30rpx 0;
background: #FFFFFF;
margin: 50rpx;
border-radius: 20rpx;
view {
width: 25%;
text-align: center;
padding: 2% 0;
font-size: 24rpx;
color: #434343;
image {
width: 80rpx;
height: 80rpx;
display: block;
margin: auto;
}
}
}
.f3{
view {
width:33%;}
}
}
</style>
\ No newline at end of file
......
......@@ -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>
......@@ -50,73 +51,73 @@
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
type: '1',
rankStatus: '0'
})
const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝'])
const current = ref()
const list = ref([])
const total = ref(0)
const deptType = ref('')
onLoad((option) => {
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getLevelList(queryParams.value).then(res => {
uni.hideLoading()
list.value = res.rows
total.value = res.total
})
}
function goAdd() {
let path = `/pages/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/pages/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
}
rankStatus: '0'
})
const navs = ref(['未提交', '审核中', '审核通过', '审核拒绝'])
const current = ref()
const list = ref([])
const total = ref(0)
const deptType = ref('')
onLoad((option) => {
queryParams.value.type = option.type
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getLevelList(queryParams.value).then(res => {
uni.hideLoading()
list.value = res.rows
total.value = res.total
})
}
function goAdd() {
let path = `/level/addApply`
uni.navigateTo({
url: path
});
}
function editThis(item) {
let path = `/level/addApply?examId=${item.examId}`
uni.navigateTo({
url: path
});
}
function handleSubmit(item){
uni.showModal({
title: '提示',
......@@ -130,7 +131,7 @@
}
}
})
}
}
function upApply(id){
api.submitVerity(id).then(res=>{
uni.hideLoading()
......@@ -139,9 +140,29 @@
title:`提交成功`
})
})
}
}
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'){
let path = `/pages/rank/applyDetail?examId=${item.examId}&type=${queryParams.value.type}`
......@@ -150,44 +171,44 @@
});
} else {
return
}
}
</script>
<style scoped>
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
}
}
</script>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
......
......@@ -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>
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!