78423ea5 by 杨炀

no message

1 parent 13130ef0
Showing 70 changed files with 3085 additions and 387 deletions
......@@ -85,6 +85,7 @@ function getInfo() {
// const personInfo = res.data.personInfo
uni.setStorageSync('userName', user.userName)
// uni.setStorageSync('perId', personInfo.perId||-1)
app.globalData.user = res.data.user
app.globalData.deptType = user.dept.deptType
app.globalData.genFlag = user.dept.genFlag
// user.dept.deptType = '3'
......
......@@ -6,15 +6,18 @@ page {
.wBox{box-sizing: border-box;}
.h3 {font-weight: bold;line-height: 2;}
.text-center{text-align: center;}
.underLine{text-decoration: underline;}
.fr{float:right}
.w25{width: 25%;}
.w33{width: 33%;}
.w66{width: 66%;}
.w50{width: 50%;}
.w45{width: 45%;}
.w80{width: 80%!important;}
.w100{width: 100%!important;}
.mt0{margin-top: 0 !important;}
.mt10{margin-top: 10px !important;}
.mt20{margin-top: 20px !important;}
.must{color: #AD181F;font-size: 24rpx;}
.vipData .w50{width: 45%;}
.esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
......@@ -29,12 +32,12 @@ page {
.align-forms-item{line-height: 2.6;}
.more{color: #929AA0;font-size: 24rpx;}
.msglist{
.msgitem{background: #FFFFFF;border-radius: 10rpx;margin-bottom: 25rpx;padding: 30rpx 20rpx 30rpx 50rpx;
.msgitem{background: #FFFFFF;border-radius: 10rpx;margin-bottom: 25rpx;padding: 20rpx;
position: relative;
.dot{width: 12rpx;display: block;position: absolute;left: 20rpx;top: 40rpx;
height: 12rpx;background: #C40F18;border-radius: 50%;}
.dot.done{background: #C7C7CD;}
.tt{font-size: 28rpx;color: #29343C;}
.tt{font-size: 28rpx;color: #000;}
.date{color: #929AA0;font-size: 24rpx;
.text-primary{text-decoration: underline;}}
}
......@@ -219,7 +222,7 @@ page {
padding:20rpx;position: relative;
.date{color: #999;font-size: 24rpx;}
.status{font-size: 28rpx;position: absolute;right: 30rpx;}
.name{font-size: 30rpx;margin-bottom: 10rpx;
.name{font-size: 30rpx;margin-bottom: 10rpx;word-wrap: break-all;
text{font-size: 28rpx;color: #666;}
}
.icon {
......
......@@ -2,9 +2,9 @@
<view>
<view class="text-center whitebg" v-if="userType=='2'">
<view class="cardNav">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<view class="active">审核</view>
<view @click="goMerge">合并</view>
<view @click="goMergeUp">提交</view>
</view>
</view>
<!-- 团队会员审核 -->
......@@ -27,15 +27,11 @@
<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)">
<view class="text-primary" @click="goDetail(item)" v-if="item.content?.wfCode">{{item.content?.wfCode}}</view>
<view class="name w100 mt0" @click="goDetail(item)">
<!-- <text class="dot"></text> -->
{{item.content.certName}}</view>
<view class="flexbox" @click="goDetail(item)">
<!-- <view>
缴费单位
<view>{{ item.content.memberName }}</view>
</view> -->
<view v-if="userType == '3'">
所属省份
<view>{{item.content.province}}</view>
......@@ -62,27 +58,28 @@
<view> ¥{{ (item?.content?.allFee*1).toFixed(2) }}</view>
</view>
</view>
<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 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 == '3'">
<button @click="goGroupInfo(item)">机构资料</button>
<button v-if="item.auditStatus == 1&&item.isView==1&&item.content.allCount > 0" @click="sendBack(item)">撤回</button>
<button v-if="item.auditStatus == 0" @click="audit(item.recordId,'0')">拒绝</button>
<button v-if="item.auditStatus == 0" @click="audit(item.recordId,'1')">同意</button>
</view>
<!-- 省 -->
<view class="func"
v-if="(userType == '2'&&item.auditStatus == 1)">
<button @click="sendBack(item)">撤回</button>
<view class="func" v-if="userType == '2'">
<button @click="goGroupInfo(item)">机构资料</button>
<button v-if="item.auditStatus == 1" @click="sendBack(item)">撤回</button>
<button v-if="item.auditStatus == 0" @click="audit(item.recordId,'0')">拒绝</button>
<button v-if="item.auditStatus == 0" @click="audit(item.recordId,'1')">同意</button>
</view>
</view>
</view>
......@@ -259,7 +256,7 @@ function sendBack(row) {
content: `确定撤回${row.content.certName}吗`,
success: function(res) {
if (res.confirm) {
api.groupWithDraw({
api.certifiedwithDraw({
recordId: row.recordId,
reason: row.reason
}).then(res => {
......@@ -273,7 +270,13 @@ function sendBack(row) {
}
}
})
}
}
function goGroupInfo(row){
uni.navigateTo({
url: `/group/groupInfo?memId=${row.content?.memId}`
})
}
</script>
<style scoped>
......
......@@ -2,9 +2,9 @@
<view class="hasfixedbottom">
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goApply">会员审核</view>
<view class="active">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<view @click="goApply">审核</view>
<view class="active">合并</view>
<view @click="goMergeUp">提交</view>
</view>
</view>
<!-- 审批合并 -->
......@@ -22,6 +22,7 @@
</view>
<view class="date" v-if="item.content.commitTime">提交日期:{{item.content.commitTime}}</view>
<view class="text-primary" v-if="item.content?.wfCode">{{item.content?.wfCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.content.certName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......@@ -30,7 +31,7 @@
</view>
<view v-if="item.content.validityTime">
原有效期
<view>{{item.content.validityTime}}</view>
<view>{{item.content?.validityTime.slice(0,10)}}</view>
</view>
<view>
年限
......
......@@ -2,9 +2,9 @@
<view>
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goApply">会员审核</view>
<view @click="goMerge">审核合并</view>
<view class="active">合并提交</view>
<view @click="goApply">审核</view>
<view @click="goMerge">合并</view>
<view class="active">提交</view>
</view>
</view>
<!-- 团队会员审核 -->
......@@ -20,14 +20,15 @@
</view>
<view class="date">提交日期:{{item.content.commitTime}}</view>
<view class="date" v-if="item.content.validityTime">原有效期:{{item.content.validityTime}}</view>
<view class="name" @click="goDetail(item)">{{item.content.certName}}</view>
<view class="text-primary" v-if="item.content?.wfCode">{{item.content?.wfCode}}</view>
<view class="name mt0" style="width: 100%;" @click="goDetail(item)">{{item.content?.certName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
年限
<view>{{item.content.renewYear}}</view>
</view>
<view>
会员合计/新会员
会员/新会员
<view>{{item.content.allCount}}/<text class="text-danger">{{item.content.newCount}}</text></view>
</view>
<view>
......
......@@ -7,7 +7,7 @@
</view>
<view class="date">提交单位:<text>{{ form.content?.memberName }}</text> </view>
</view>
<view class="vipData mt30" style="flex-wrap: wrap;">
<view class="vipData mt30" style="flex-wrap: wrap;padding: 20rpx;">
<view class="w50">
团队会员合计:
<text>{{ form.content?.allCount }}</text>
......@@ -28,9 +28,9 @@
<!-- 成员 -->
<view class="userlist">
<view class="item" v-for="(n,index) in list" :key="n.index" @click="goGroupInfo(n)">
<view class="item" style="padding: 20rpx 0 0;" v-for="(n,index) in list" :key="n.index" @click="goGroupInfo(n)">
<view style="width: 100%">
<view class="name">{{n.memberName}}</view>
<view class="name text-primary underLine">{{n.memberName}}</view>
<view class="date">单位类型:
<text v-if="n.deptType==2">一级协会</text>
<text v-if="n.deptType==3">直属协会</text>
......@@ -38,7 +38,7 @@
<text v-if="n.deptType==5">三级协会</text>
<text v-if="n.deptType==6">职业性团体会员</text>
</view>
<view class="flexbox">
<view class="flexbox" style="background-color: rgba(244, 249, 253, 1);padding:10rpx;">
<view>
<view>
原有效期
......
......@@ -21,7 +21,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
<template>
<view class="hasfixedbottom">
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="query.name" placeholder="搜索团体会员名称" @blur="getSonList" @clear="getSonList">
</uni-easyinput>
<view class="invertedbtn-red" @click="getSonList">搜索</view>
</view>
<view class="userlist">
<view class="item" v-for=" (n,index) in studentList" :key="index">
<view @click="checkThis(n)">
<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="w100">
<view class="name">{{n.name}} </view>
<view class="flexbox" style="padding: 0">
<view v-if="n.memCode">会员号
<text>{{n.memCode}}</text>
</view>
<view class="date" v-if="n.validityDate">到期时间
<text>{{n.validityDate?.slice(0,10)}}</text>
</view>
<view class="date">团体类型
<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>
</view>
</view>
<view class="nodata" v-if="studentList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>无可变更会员</text>
</view>
</view>
<uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more>
<view class="fixedBottom" v-if="studentList.length!=0">
<button class="btn-red" @click="handleImport">批量添加</button>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import _ from 'lodash'
import config from '/config.js'
const query = ref({
pageNum:1,
pageSize:10,
paymentRangeId:-1,
})
const total = ref(0)
const list = ref([])
const studentList = ref([])
const type = ref('')
const form = ref({})
const status = ref('no-more')
const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"})
onLoad((option) => {
if (option.rangeId) {
query.value.paymentRangeId = option.rangeId
}
getList()
})
onShow(() => {})
function clickLoadMore(){
getList()
}
function getList() {
if(total.value>0&&total.value>studentList.value.length){
uni.showLoading({
title: '加载中',
icon: 'none'
})
status.value = 'loading'
query.value.pageNum += 1
api.getMySonList(query.value).then(res => {
studentList.value = _.concat(studentList.value,res.data.rows)
total.value = res.data.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
uni.hideLoading()
})
}else if(total.value==0){
getSonList()
}
}
function getSonList(){
query.value.pageNum = 1
api.getMySonList(query.value).then(res => {
studentList.value = res.data.rows
total.value = res.data.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
})
}
function checkThis(n) {
if (n.checked) {
n.checked = false
} else {
n.checked = true
}
}
function handleImport() {
var arr = []
for (var n of studentList.value) {
if (n.checked) {
arr.push(n.memId)
}
}
api.addGroupInfoModeToRange({
memId: arr,
rangeIdStr: query.value.paymentRangeId
}).then(res => {
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2]
prevPage.onShow(res.data)
uni.navigateBack()
})
}
</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;
height: 66rpx; border: 1px solid #AD181F!important;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px; margin-left: 20rpx;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.userlist {padding: 0 25rpx;}
.flexbox {
padding: 30rpx 30rpx 0
}
.danger-button {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.collapseBody {
padding: 0 30rpx;
box-sizing: border-box;
font-size: 28rpx;
view {
margin: 0 0 20rpx;
label {
width: 7em;
color: #999;
display: inline-block;
text-align: right;
}
}
}
.popBody {
background: #fff;
padding: 30rpx;
}
.text-center .btn-red-kx {
border-radius: 50px;
font-size: 28rpx;
}
:deep(.file-picker__progress){opacity: 0;}
</style>
\ No newline at end of file
......@@ -20,7 +20,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -16,8 +16,8 @@
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text>{{item.payTime}} 缴费</text>
</view>
<view class="name" @click="goDetail(item)">{{item.finalDocName}}</view>
<view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.finalDocName}}</view>
<view v-if="deptType==1" class="date">
<text>{{item.payNoticeSendTime}} 下发</text>
</view>
......@@ -28,10 +28,10 @@
<text class="text-primary">已结算</text>
</view>
<view v-if="item.settleFlag == 1 && item?.payFlag == 0">
<text class="text-success">已上传凭证</text>
<text class="text-success">已上传</text>
</view>
<view v-if="item.settleFlag == 1 && item?.payFlag == 1">
<text class="text-danger">未上传凭证</text>
<text class="text-danger">未上传</text>
</view>
</view>
<view>
......
......@@ -148,7 +148,13 @@ onLoad((option) => {
getList()
}
})
onShow(() => {})
onShow((option) => {
console.log(option)
if(option){
queryParams.value.rangeId = option
getList()
}
})
function getList() {
uni.showLoading({
......@@ -188,17 +194,19 @@ function handleDelete(row) {
}
function chooseOnline() {
uni.showLoading({
title: '加载中',
icon: 'none'
})
query.value.paymentRangeId = queryParams.value.rangeId || '-1'
api.getMySonList(query.value).then(res => {
studentList.value = res.data.rows
uni.hideLoading()
choseStudent.value.open()
})
// uni.showLoading({
// title: '加载中',
// icon: 'none'
// })
// query.value.paymentRangeId = queryParams.value.rangeId || '-1'
// api.getMySonList(query.value).then(res => {
// studentList.value = res.data.rows
// uni.hideLoading()
// choseStudent.value.open()
// })
uni.navigateTo({
url:`/group/changeGroupChoseList?rangeId=${queryParams.value.rangeId || '-1'}`
})
}
function getSonList(){
uni.showLoading({
......
......@@ -16,8 +16,9 @@
<text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text>
<text v-if="item?.content?.status==4" class="text-warning">已撤回</text>
</view>
<view class="date">{{item?.content?.commitTime}} 提交</view>
<view class="name" @click="goDetail(item)">{{item.rangeName}}</view>
<view class="date">{{item?.content?.commitTime}} 提交</view>
<view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.rangeName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
会员合计
......
......@@ -22,7 +22,7 @@
撤回
</view>
</view>
<view class="name">{{n.memberName}}</view>
<view class="name text-primary underLine">{{n.memberName}}</view>
<view class="date">提交日期:{{n.commitTime}}
</view>
<view class="flexbox">
......
......@@ -57,10 +57,11 @@
<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" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.realName?.slice(0,1)}}</view>
</view>
</view> -->
<view>
<view class="name">{{n.realName}} <text>{{n.perCode}}</text></view>
<view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view>
......@@ -549,10 +550,12 @@
if (e !== nowRow.levelRecommend) {
uni.showModal({
title: '提示',
content: `建议考试级别为 "${szToHz(nowRow.levelRecommend)}级" ,确定要修改吗?`,
content: `建议考试级别为 "${szToHz(nowRow.levelRecommend)}级" ,确定要修改${szToHz(e)}吗?`,
success: function(res) {
if (res.confirm) {
getTablePersonInfo()
}else{
nowRow.levelNew = nowRow.levelRecommend
}
},
fail: function(res) {
......@@ -583,12 +586,18 @@
title: '提示',
content: `确定提交审核?`,
success: function(res) {
saveStep2(flag).then(res => {
uni.showToast({
title: `操作成功`
if (res.confirm) {
console.log('用户点击确定');
saveStep2(flag).then(Response => {
uni.showToast({
title: `操作成功`
})
uni.navigateBack()
})
uni.navigateBack()
})
} else if (res.cancel) {
console.log('用户点击取消');
}
}
})
} else {
......
......@@ -16,6 +16,7 @@
<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="mt0" @click="goDetail(item)"><text class="text-primary">{{item.examCode}}</text></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>
......
......@@ -3,29 +3,29 @@
<view class="wBox">
<view class="tt">考级基本信息</view>
<view class="ddd">
<text class="lab">考级名称:</text>{{ form.name }}
<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 }}
<text class="lab">申请单位:</text>{{ form?.memberName }}
</view>
<view class="ddd">
<text class="lab">考官:</text>{{form.examinerNames?.split(',').join('/')}}
<text class="lab">考官:</text>{{form?.examinerNames?.split(',').join('/')}}
</view>
<view class="ddd">
<text class="lab">考试开始时间:</text>{{form.startTime}}
<text class="lab">考试开始时间:</text>{{form?.startTime}}
</view>
<view class="ddd">
<text class="lab">考试结束时间:</text>{{form.endTime}}
<text class="lab">考试结束时间:</text>{{form?.endTime}}
</view>
<view class="ddd">
<text class="lab">考级地点:</text>{{form.address}}
<text class="lab">考级地点:</text>{{form?.address}}
</view>
<view class="ddd" v-if="userType=='2'||userType=='1'">
<text class="lab">总金额:</text>
<text class="text-danger">¥{{(form.totalAmount*1).toFixed(2) }}</text>
<text class="text-danger">¥{{(form?.totalAmount*1).toFixed(2) }}</text>
</view>
</view>
<view class="wBox">
......@@ -130,6 +130,7 @@
let recordId = ''
onLoad((option) => {
examId = option.examId
console.log(option)
if ('form' in option) {
form.value = JSON.parse(decodeURIComponent(option.form))
console.log('form',form.value)
......@@ -165,6 +166,7 @@
api.getLevelApplyInfo(examId).then(res => {
uni.hideLoading()
form.value = res.data
console.log(form.value)
})
}
......
......@@ -2,9 +2,9 @@
<view>
<view class="text-center whitebg" v-if="userType=='2'">
<view class="cardNav">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<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"
......@@ -22,6 +22,7 @@
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="text-primary" v-if="item.examCode">{{item.examCode}}</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>
......@@ -241,8 +242,12 @@
})
}
function doApproval(obj) {
uni.showLoading({
title: '加载中'
})
console.log(obj)
api.doVerity(obj).then((res) => {
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none'
......
......@@ -2,9 +2,9 @@
<view class="hasfixedbottom">
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goApproval">会员审核</view>
<view class="active">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<view @click="goApproval">审核</view>
<view class="active">合并</view>
<view @click="goMergeUp">提交</view>
</view>
</view>
<view class="appList">
......@@ -21,7 +21,8 @@
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.applyTime">上报日期:{{item.applyTime}}</view>
<view class="date" v-if="item.applyTime">上报日期:{{item.applyTime?.slice(0,10)}}</view>
<view class="text-primary" v-if="item.examCode">{{item.examCode}}</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)">
......
......@@ -2,9 +2,9 @@
<view>
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goApproval">会员审核</view>
<view @click="goMerge">审核合并</view>
<view class="active">合并提交</view>
<view @click="goApproval">审核</view>
<view @click="goMerge">合并</view>
<view class="active">提交</view>
</view>
</view>
<!-- 级位合并提交 -->
......@@ -25,8 +25,9 @@
{{ item.auditStatus=='100'?'待提交':statusArr[item.status] }}
</view>
</view>
<view class="date" v-if="item.handleDate">{{item.handleDate}}</view>
<view class="name" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="date" v-if="item.handleDate">{{item.handleDate}}</view>
<view v-if="item.flowCode" class="text-primary">{{item.flowCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
考试人数
......@@ -142,7 +143,7 @@
item.payStatus = r.payStatus
item.sourceData = r
item.auditProcess = r.auditProcess
item.handleDate = r.handleDate
item.handleDate = r.handleDate
list.push(item)
statistical.value.totalCost += (item.totalAmount * 1)
......@@ -150,7 +151,7 @@
})
infoList.value = list
total.value = response.total
total.value = response.total
})
}
function handleBack(row){
......
......@@ -28,6 +28,7 @@
<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="text-primary">{{n.examCode}}</view>
<view class="name">{{n.name}}</view>
<!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> -->
<view class="flexbox">
......
......@@ -14,6 +14,7 @@
<text v-if="item.payTime">{{item.payTime}} 缴费</text>
<text v-else>{{item.payNoticeSendTime}} 下发</text>
</view>
<view class="text-primary" v-if="item.payCode">{{item.payCode}}</view>
<view class="name" @click="goDetail(item)">{{item.finalDocName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -20,6 +20,7 @@
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="text-primary">{{item.flowCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="pp esp">上报单位:{{item.memName}}</view>
<view class="flexbox" @click="goDetail(item)">
......@@ -32,8 +33,8 @@
缴费状态
<view>
<text :class="{
'text-success':item.examPayStatusStr=='已上传凭证',
'text-danger':item.examPayStatusStr=='未上传凭证',
'text-success':item.examPayStatusStr=='已上传',
'text-danger':item.examPayStatusStr=='未上传',
'text-warning':item.examPayStatusStr=='已结算'
}">{{ item.examPayStatusStr||'--' }}</text>
</view>
......
......@@ -14,6 +14,7 @@
<view class="date">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.submitTimeStr}} 提交</view>
<view class="text-primary" v-if="item.payCode" @click="goDetail(item)">{{item.payCode}}</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)">
......
<template>
<view class="page">
<view class="bgbg">
<view class="flex">
<view class="imgbox">
<image v-if="state.user.avatar" :src="state.user.avatar"/>
<image v-else src="@/static/nodata.png"/>
</view>
<text class="name">{{ state.user.userName }}</text>
</view>
</view>
<view class="rMainBox">
<uni-list :border="false" class="myList">
<uni-list-item thumb="/static/user_icon01.png" title="团体信息" showArrow clickable @click="goPath('/myCenter/teamInfo')">
</uni-list-item>
<uni-list-item thumb="/static/user_icon02.png" title="会员认证" showArrow clickable @click="goPath('/myCenter/auth')">
</uni-list-item>
<!-- <uni-list-item thumb="/static/user_icon03.png" v-show="userType==2" title="账户信息" showArrow clickable>
</uni-list-item> -->
<uni-list-item thumb="/static/user_icon03.png" title="账号安全" showArrow clickable @click="goPath('/myCenter/safe')">
</uni-list-item>
</uni-list>
</view>
<view class="fixedBottom" style="background: transparent;box-shadow: none;">
<button @click="loginOut" class="btn btn-red" style="border-radius: 50px;">退出登录</button>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js';
import * as loginServer from '@/common/login.js';
import config from '@/config.js'
import {
onLoad,
onShow,
onReady,
onPullDownRefresh
} from '@dcloudio/uni-app';
import {
ref,reactive,
getCurrentInstance
} from 'vue';
const {
proxy
} = getCurrentInstance()
const app = getApp();
const userType = ref('1')
const memberInfo = ref({})
let proId;
const svId = ref(null);
const numData = ref({});
const messageList = ref([])
const state = reactive({
user: {},
roleGroup: {},
postGroup: {}
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
onLoad(option => {
if (option.scene) {
proId = decodeURIComponent(option.scene);
} else {
proId = option.proId;
}
if(uni.showShareMenu){
uni.showShareMenu({
withShareTicket: true,
menus: ['shareAppMessage', 'shareTimeline']
});
}
});
function loginOut() {
uni.showModal({
content: `确认退出吗?`,
success: function(res) {
if (res.confirm) {
loginServer.logout().finally(() => {
let path = '/login/login';
uni.reLaunch({
url: path
});
})
}
}
})
}
function getUser() {
api.getUserProfile().then((response) => {
state.user = response.data.user
if(state.user.avatar&&state.user.avatar.indexOf('http')==-1){
state.user.avatar = config.baseUrl_api+state.user.avatar
}
state.roleGroup = response.data.roleGroup
state.postGroup = response.data.postGroup
uni.hideLoading();
})
}
function init() {
uni.showLoading({
title: '加载中'
});
getUser()
loginServer.getMyOwnMemberInfo().then(res => {
userType.value = app.globalData.userType
memberInfo.value = app.globalData.memberInfo
uni.hideLoading();
})
}
function goPath(url){
uni.navigateTo({
url:url
})
}
</script>
<style scope lang="scss">
.uni-list:after{display: none;}
.page {
width: 100vw;
overflow: hidden;
}
.bgbg{
.flex{align-items: center;}
height: 280rpx;padding:30rpx;
.name{margin-left: 20rpx;
font-size: 36rpx;}
.imgbox{width: 120rpx;
height: 120rpx;overflow: hidden;
background: #C7C7CD;
border: 4rpx solid #FFFFFF;
border-radius: 50%;
image{height: 120rpx;width: 120rpx;object-fit: cover;}
}
}
.loginOutIcon {
position: relative;
left: 60rpx;
// top: 180rpx;
image {
width: 50rpx;
height: 50rpx;
}
}
.flexbox {
display: flex;
justify-content: space-around;
text-align: center;
image {
width: 90rpx;
height: 90rpx;
display: block;
margin: auto;
}
}
.image {
width: 25px;
height: 25px;
}
:deep(.uni-section) {
background-color: transparent;
}
:deep(.uni-section .uni-section-header__content) {
font-size: 44rpx;
font-weight: bold;
color: #29343C;
}
:deep(.uni-section .uni-section-header) {
padding: 0 30rpx;
}
.potag {
position: absolute;
right: 60rpx;
top: 0;
}
.girdFather {
background: #fff;
position: relative;
top: -15rpx;
padding: 1rpx 0 0;
border-radius: 20rpx 20rpx 0rpx 0rpx;
box-sizing: border-box;
.girdBox {
top: 0;
padding: 0 0 15rpx;
border-bottom: 20rpx solid #ecf0f6
}
.ttt {
margin: 30rpx 0 20rpx;
padding: 0 20rpx 0;
}
}
.rMainBox {position: relative;top:-120rpx;
box-sizing: border-box;padding: 20rpx 20rpx;
background-color: #fff;
border-radius: 15rpx;
margin: 25rpx;overflow: hidden;
}
</style>
\ No newline at end of file
<template>
<view>
<view class="pd30" style="padding: 30rpx 30rpx 180rpx;">
<view class="wBox">
<uni-forms ref="baseForm" :modelValue="form" label-width="100">
<uni-forms-item label="所属协会" required>
<uni-data-picker style="width: 82%;" v-model="form.parentId"
:localdata="tree"
:readonly="type&&parentId!=-1&&parentId!=0"
:clear-icon="false" :map="{text:'label',value:'id'}"
popup-title="请选择" @change="onchange"
@nodeclick="onnodeclick"></uni-data-picker>
</uni-forms-item>
<uni-forms-item v-if="form.memCode" label="会员编号" required>
<uni-easyinput v-model="form.memCode" disabled />
</uni-forms-item>
<uni-forms-item label="机构名称" required>
<uni-easyinput v-model="form.name" :disabled="type" placeholder="机构名称" /></uni-forms-item>
<uni-forms-item label="所属省份" required>
<uni-data-select :clear="false" :disabled="type&&(belongProvinceId||belongProvinceId==0)"
v-model="form.belongProvinceId" :localdata="regionsList"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="社会信用代码" required>
<uni-easyinput v-model="form.creditCode" :disabled="type&&!!creditCode&&newResult" />
</uni-forms-item>
<uni-forms-item label="联系人" required>
<uni-easyinput v-model="form.siteContact" />
</uni-forms-item>
<uni-forms-item label="联系方式" required>
<uni-easyinput v-model="form.siteTel" />
</uni-forms-item>
<uni-forms-item label="认证地址" required>
<uni-data-picker v-model="form.coordinates1"
:localdata="regionsList"></uni-data-picker>
</uni-forms-item>
<uni-forms-item label="详细地址" required>
<uni-easyinput v-model="form.adress" placeholder="请输入详细地址" type='textarea' /></uni-forms-item>
<uni-forms-item label="法人姓名" required>
<uni-easyinput v-model="form.legal" />
</uni-forms-item>
<uni-forms-item v-if="form.deptType==6&&activeStatus!= 0" label="是否申请考点" required>
<uni-data-checkbox v-model="form.applyPoints" :localdata="yesno" />
</uni-forms-item>
<uni-forms-item label="法人身份证" required>
<view class="imgArea">
<uni-file-picker v-model="imgfront" @delete="delimgFont" return-type="object" limit="1"
@select="upIdCardImgFront" :image-styles="imageStylesZJ">
<view>国徽面</view>
</uni-file-picker>
<uni-file-picker style="margin-top: 30px;" v-model="imgBack" @delete="delimgBack"
return-type="object" limit="1" @select="upIdCardImgBack" :image-styles="imageStylesZJ">
<view>头像面</view>
</uni-file-picker>
</view>
</uni-forms-item>
<uni-forms-item label="营业执照" required>
<uni-file-picker limit="1" v-model="form.businessLicense" file-extname="png,jpg,jpeg,pdf,zip"
file-mediatype="all" @select="selectFile(form,$event)"
@delete="delSupplementFile(form)"></uni-file-picker>
</uni-forms-item>
<uni-forms-item label="机构照片" required>
<uni-file-picker v-model="picArr" @delete="delpicArr" limit="3" @select="upPicArr">
</uni-file-picker>
</uni-forms-item>
</uni-forms>
<view class="fixedBottom">
<button class="btn-red" @click="submit()">确定</button>
</view>
</view>
</view>
</view>
<uni-popup ref="popup" type="bottom">
<view class="popBody">
<view class="tt">选择缴费年限</view>
<view class="pickitem" v-for="(item,index) in years" :key="index" @click="bindChange(item)">
{{item}}
<uni-icons v-if="form.renewYear == item" type="checkmarkempty" size="20"
color="green"></uni-icons>
<uni-icons v-else type="checkmarkempty" size="20"
color="white"></uni-icons>
</view>
<button class="btn-red" @click="submitForm">确定</button>
</view>
</uni-popup>
</template>
<script setup>
import {
ref
} from 'vue';
import * as api from '@/common/api.js';
import {
onLoad,
onShow
} from '@dcloudio/uni-app';
import config from '@/config.js'
const app = getApp();
const form = ref({
type: '1'
});
const typeList = ref([{
value: '1',
text: '企业'
}, {
value: '2',
text: '国家组织'
}, {
value: '3',
text: '社会组织'
}, {
value: '4',
text: '其他'
}])
const years = ref(['1', '2', '3', '4', '5'])
const yesno = ref([{
value: '0',
text: '否'
}, {
value: '1',
text: '是'
}, ])
const regionArr = ref();
const regionsList = ref([]);
const tree = ref([]);
const showDirectly = ref(true)
const directUnderFlag = ref(0)
const current = ref(0);
const groupId = ref(0);
const currIndex = ref(null);
const signType = ref();
const editIng = ref(true);
const isSign = ref(false);
const type = ref(false) // 第一次选择认证认证类型
const flag = ref(false)
const result = ref(false)
const query = ref({
type: 0
});
const activeStatus = ref(0)
const active = ref(0)
const memberInfo = ref({})
const authenticationStatus = ref()
const authenticationStatusa = ref()
const newResult = ref(false)
const popup = ref(null)
const belongProvinceId = ref()
const list1 = ref([{
title: '完善信息'
}, {
title: '会员认证'
}])
const imageStylesZJ = ref({
width: '400rpx',
height: '253rpx'
});
const indicatorStyle=ref(`height: 50px;`)
onLoad(option => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
});
function init() {
getRegionsList()
getTree()
getForm()
}
function getForm() {
api.getMyOwnMemberInfo().then(res => {
newResult.value = res.data.newResult //
result.value = res.data.result // 认证缴费状态
authenticationStatusa.value = res.data.authenticationStatus
showDirectly.value = !res.data.memberInfo.associateId
activeStatus.value = res.data.memberInfo.activeStatus
directUnderFlag.value = res.data.memberInfo.directUnderFlag
// 认证信息
if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3) {
type.value = false
} else {
type.value = true
}
// 至少审核通过一次
if (authenticationStatusa.value != 0) {
if (newResult.value) {
// 至少认证过一次
flag.value = true
} else {
// 没有认证
flag.value = false
}
}
form.value = {
...res.data.dept,
...res.data.memberInfo
}
form.value.parentId = form.value.parentId.toString()
belongProvinceId.value = form.value.belongProvinceId
})
}
function getTree() {
if (authenticationStatusa.value == 0 || authenticationStatusa.value == 3 || authenticationStatusa.value == 1) {
var obj = {
selfDeptId: '-1',
webSiteShow: 1,
showDisabled: 1
}
api.certifiedDeptTree(obj).then(res => {
tree.value = res.data
})
} else {
var obj = {
selfDeptId: '-1',
showDisabled: 1,
showDirect: authenticationStatusa.value == 2 || authenticationStatusa.value == 5 ||
authenticationStatusa.value == 4 ? 1 : null
}
api.deptTreeSelect(obj).then(res => {
tree.value = res.data
})
}
}
function getRegionsList() {
api.regionsList().then(res => {
regionsList.value = res.data;
});
}
function submit() {
// 验证必填项
if (form.value.name == '') {
uni.showToast({
title: '请填写机构名称',
icon: 'none'
})
return
}
//
popup.value.open()
}
function submitForm(){
if(!form.value.renewYear){
uni.showToast({
title: '请选择缴费年限',
icon: 'none'
})
return
}
api.centerCommit({ renewYear: form.value.renewYear }).then(res=>{
uni.showModal({
content:`缴费等待审核中!`,
success:function(res){
if(res.confirm){
uni.navigateBack()
}
}
})
})
}
function upIdCardImgFront(e) {
let file = e.tempFiles[0]
if (!file) {
return
}
uni.showLoading({
title: '加载中'
});
}
function bindChange(e){
console.log(e)
form.value.renewYear = e
}
</script>
<style lang="scss" scoped>
.pickitem{height:40px;text-align: center;
line-height: 40px;}
.picker-view {
width: 750rpx;
height: 600rpx;
margin-top: 20rpx;
}
.item {
line-height: 100rpx;
text-align: center;
}
.popBody {
background: #fff;
padding: 30rpx;
}
:deep(.uni-data-tree) {
border: 1px solid #dcdfe6;
border-radius: 4px;
.selected-list {
justify-content: start;
}
}
:deep(.uni-select__input-placeholder) {
font-size: 30rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 30rpx;
}
:deep(.uni-easyinput__placeholder-class) {
font-size: 30rpx;
color: grey;
}
.wBox {
width: 700rpx;
padding: 30rpx;
margin: 20rpx auto 0;
background: #FFFFFF;
box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
border-radius: 15rpx;
}
.imgArea {
padding: 1px;
display: flex;
flex-wrap: wrap;
flex-direction: column;
}
</style>
\ No newline at end of file
<template>
<view>
<view class="wBox">
<view class="tt">
审核信息
</view>
<view>
<view class="stepItem" v-for="(n,index) in recordList" :key="index">
<view class="time">{{n.auditTime||'待审批'}}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==0"> 审核中</text>
<text v-if="n.auditResult==1" class="text-success">审核通过</text>
<text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text>
<text v-if="n.auditResult==3" class="text-warning"> 已撤回</text>
</view>
<!-- <view class="name">{{index+1}}</view> -->
<view class="deptName">{{n.auditDeptName}}</view>
<view v-if="n.auditStatus==2">
备注:{{n.auditMsg||'/' }}
</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,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const userType = ref('')
const recordList = ref([])
onLoad((option) => {
getMyCertStageFN()
})
function getMyCertStageFN() {
api.getMyCertStage().then(res => {
recordList.value = res.data
console.log(res)
})
}
</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;
margin: 0 0 10rpx;
.lab {
color: #999;
display: inline-block;
text-align: justify;
}
}
}
</style>
\ No newline at end of file
<template>
<view>
<uni-segmented-control :current="current" @clickItem="changeNav" activeColor="#AD181F" styleType="text" :values="items"></uni-segmented-control>
<view v-if="current==0" class="mainbox">
<uni-forms label-width="80">
<uni-forms-item label="用户昵称" required>
<uni-easyinput v-model="user.nickName" :disabled="!edit" />
</uni-forms-item>
<uni-forms-item label="手机号码" required>
<uni-easyinput v-model="user.phonenumber" :disabled="!edit" />
</uni-forms-item>
<uni-forms-item label="邮箱" required>
<uni-easyinput v-model="user.email" :disabled="!edit" />
</uni-forms-item>
<uni-forms-item label="性别" required>
<uni-data-checkbox :disabled="!edit" v-model="user.sex" @change="changeSex" :localdata="sexs" />
</uni-forms-item>
</uni-forms>
<view class="fixedBottom" v-if="edit">
<button class="btn-red-kx" @click="cancel">取消</button>
<button class="btn-red" style="width: 50%;" @click="submit">保存</button>
</view>
<view class="fixedBottom" v-else>
<button class="btn-red" @click="editForm">编辑</button>
</view>
</view>
<view v-if="current==1" class="mainbox">
<uni-forms label-width="80">
<uni-forms-item label="旧密码" name="oldPassword" required>
<uni-easyinput type="password" v-model="form.oldPassword" placeholder="请输入旧密码" />
</uni-forms-item>
<uni-forms-item label="新密码" name="newPassword" required>
<uni-easyinput type="password" v-model="form.newPassword" placeholder="请输入新密码" />
<view class="text-danger" v-show="form.newPassword?.length<8">不足8位</view>
<text class="text-warning">*注: 8~18位大小写字母加数字加特殊符号组合(!@#$%^&*()_+)</text>
</uni-forms-item>
<uni-forms-item label="确认密码" name="confirmPassword" required>
<uni-easyinput type="password" v-model="form.confirmPassword" placeholder="请确认新密码" />
<text class="text-danger" v-show="form.newPassword!==form.confirmPassword">与新密码不一致</text>
</uni-forms-item>
</uni-forms>
<view class="fixedBottom">
<button class="btn-red" @click="handleClick">修改密码</button>
</view>
</view>
</view>
</template>
<script setup>
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
import * as api from '@/common/api.js';
const items = ref(['基本资料','修改密码'])
const user = ref({
sex:'0'
})
const current = ref(0)
const form = ref({})
const edit = ref(false)
const sexs = ref([
{text:'男',value: '0'},{text:'女',value: '1'}
])
onLoad((option)=>{
if(option.current){
current.value = 1
}
getUser()
})
function changeNav(e){
if (current.value != e.currentIndex) {
current.value = e.currentIndex
}
}
function getUser() {
api.getUserProfile().then((response) => {
user.value = response.data.user
if(!user.value.sex){
user.value.sex = '0'
}
})
}
function editForm(){
edit.value = true
}
function submit(){
if(!user.value.email){
uni.showToast({
icon:'none',
title:`请输入邮箱`
})
return
}
if(!user.value.nickName){
uni.showToast({
icon:'none',title:`请输入昵称`
})
return
}
if(!user.value.phoneNumber){
uni.showToast({
icon:'none',title:`请输入手机号码`
})
return
}
if(!user.value.sex){
uni.showToast({
icon:'none',title:`请选择性别`
})
return
}
api.updateUserProfile(user.value).then(res=>{
uni.showToast({
icon:'none',title:`修改成功`
})
})
}
function changeSex(e){
console.log(e)
}
function cancel(){
edit.value = false
getUser()
}
function validPassword(pwd) {
if (!pwd || pwd.length < 8 || pwd.length > 18) {
return false
}
const lowerRegex = /[a-z]+/
const upperRegex = /[A-Z]+/
const digitRegex = /[0-9]+/
const symbolRegex = /[\W_]+/
const specific = /.*[~!@#$%^&*()_+`\-={}:";'<>?,.\/].*/
return (lowerRegex.test(pwd) && upperRegex.test(pwd) && digitRegex.test(pwd) && symbolRegex.test(pwd) && specific.test(pwd))
}
function handleClick() {
if(!form.value.oldPassword){
uni.showToast({
icon:'none',title:`请输入旧密码`
})
return
}
if(!form.value.newPassword){
uni.showToast({
icon:'none',title:`请输入新密码`
})
return
}
if(form.value.newPassword!==form.value.confirmPassword){
uni.showToast({
icon:'none',title:`新密码需与确认密码一致`
})
return
}
if (!validPassword(form.value.newPassword)) {
uni.showModal({
content:`密码需满足8~18位大小写字母加数字加特殊符号组合(!@#$%^&*()_+)`,
success:function(res){
}
})
return
}
api.updateUserPwd(form.oldPassword, form.newPassword).then(res=>{
uni.showModal({
title:"提示",
content:`修改成功,重新登录生效`,
success: function(res) {
if (res.confirm) {
//确定
}
}
})
})
}
</script>
<style scoped lang="scss">
.mainbox{background: #fff;padding: 30rpx;margin: 30rpx;}
</style>
<template>
<view class="hasfixedbottom">
<view class="mainbox">
<uni-forms>
<uni-forms-item label="单位名称">
<view class="lh35 noborder">{{form.baseName}}</view>
</uni-forms-item>
<uni-forms-item label="单位类型">
<uni-data-select v-if="!type&&edit" v-model="form.type" :localdata="range"></uni-data-select>
<view class="lh35 noborder" v-else>
<text v-if="form.type==1">企业 </text>
<text v-if="form.type==2">国家组织 </text>
<text v-if="form.type==3">社会组织 </text>
<text v-if="form.type==4">其他 </text>
</view>
</uni-forms-item>
<uni-forms-item label="联系人">
<uni-easyinput v-if="edit" v-model="form.contact"></uni-easyinput>
<view v-else class="lh35">{{form.contact}}</view>
</uni-forms-item>
<uni-forms-item label="联系电话">
<uni-easyinput v-if="edit" v-model="form.phone"></uni-easyinput>
<view v-else class="lh35">{{form.phone}}</view>
</uni-forms-item>
<uni-forms-item label="地址">
<uni-data-picker :readonly="!edit" :clear-icon="false" v-if="form.siteRegionId"
v-model="form.siteRegionId" :localdata="options" @change="onchangeRegionId">
</uni-data-picker>
<uni-data-picker :readonly="!edit" :clear-icon="false" v-else-if="form.siteCityId"
v-model="form.siteCityId" :localdata="options" @change="onchangeRegionId">
</uni-data-picker>
<uni-data-picker :readonly="!edit" :clear-icon="false" v-else-if="form.siteProvinceId"
v-model="form.siteProvinceId" :localdata="options" @change="onchangeRegionId">
</uni-data-picker>
</uni-forms-item>
<uni-forms-item label="详细地址">
<uni-easyinput v-if="edit" type="textarea" v-model="form.siteAddress"></uni-easyinput>
<view v-else class="lh35">{{form.siteAddress}}</view>
</uni-forms-item>
<uni-forms-item label="机构介绍">
<uni-easyinput v-if="edit" type="textarea" v-model="form.introduce"></uni-easyinput>
<view v-else class="lh35">{{form.introduce}}</view>
</uni-forms-item>
</uni-forms>
</view>
<view class="height1"></view>
<view class="fixedBottom" v-if="edit">
<button class="btn-red-kx" @click="cancel">取消</button>
<button class="btn-red" style="width: 50%;" @click="save">保存</button>
</view>
<view class="fixedBottom" v-else>
<button class="btn-red" @click="edit=true">编辑</button>
</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 form = ref({
})
const options = ref([])
const range = ref([{
text: '企业',
value: '1'
}, {
text: '国家组织',
value: '2'
}, {
text: '社会组织',
value: '3'
}, {
text: '其他',
value: '4'
}])
const edit = ref(false)
const type = ref()
const authenticationStatusa = ref()
onLoad(option => {
console.log(option)
init()
})
function init() {
api.getMyOwnMemberInfo().then(res => {
form.value = res.data.memberInfo
authenticationStatusa.value = res.data.authenticationStatus
if (res.data.authenticationStatus != 0 && res.data.authenticationStatus != 3) {
type.value = true
} else {
type.value = false
}
})
getRegionsList()
}
function cancel(){
edit.value = false
init()
}
function save() {
api.createMyMember(form.value).then(res=>{
uni.showToast({
icon:'none',title:`保存成功`
})
edit.value = false
})
}
function getRegionsList() {
api.regionsList().then(res => {
options.value = res.data;
});
}
function onchangeRegionId(e) {
form.value.regionId = regionArr.value
}
</script>
<style scoped lang="scss">
.lh35 {
line-height: 35px; min-height: 35px;
border: 1px solid #dcdfe6;
border-radius: 4px;
padding: 0 30rpx;
&.noborder {
border: none;
}
}
:deep(.uni-data-tree) {
border: 1px solid #dcdfe6;
border-radius: 4px;
.selected-list {
justify-content: start;
font-size: 28rpx;
}
}
.height1 {
height: 1rpx
}
.ylImage {
width: 300rpx;
height: 200rpx;
display: block;
box-shadow: 0 0 10rpx #ddd;
border-radius: 8rpx;
}
.mainbox {
margin: 30rpx 25rpx 60rpx;
padding: 20rpx;
background: #FFFFFF;
border-radius: 15rpx;
:deep(.uni-forms-item__content-title) {
color: #4C5359;
font-size: 30rpx;
font-weight: 300;
}
:deep(.uni-forms-item__extra-text) {
color: #000;
font-size: 30rpx;
}
}
.photobox {
position: relative;
margin: 30rpx auto;
.photo {
width: 210rpx;
height: 280rpx;
background-color: #f4f4f4;
display: block;
margin: auto;
}
}
.colorful {
background-color: #007BDA;
width: 200rpx;
margin: auto;
height: 200rpx;
line-height: 200rpx;
font-size: 44rpx;
color: #fff;
text-align: center;
border-radius: 50%;
}
:deep(.uni-forms-item__extra) {
width: 60%;
}
.photoBook {
position: relative;
border-radius: 10rpx;
overflow: hidden;
&::after {
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(180deg, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.7));
}
text {
position: absolute;
z-index: 1;
font-size: 24rpx;
color: #fff;
bottom: 4rpx;
right: 8rpx;
}
}
</style>
\ No newline at end of file
......@@ -92,6 +92,14 @@
"enablePullDownRefresh": false
}
},
{
"path" : "pages/index/newsDetail",
"style" :
{
"navigationBarTitleText" : "通知详情",
"enablePullDownRefresh" : false
}
}
],
"globalStyle": {
......@@ -213,19 +221,19 @@
}, {
"path": "sheng/merge",
"style": {
"navigationBarTitleText": "审核合并",
"navigationBarTitleText": "合并",
"enablePullDownRefresh": false
}
}, {
"path": "sheng/mergeUp",
"style": {
"navigationBarTitleText": "合并提交",
"navigationBarTitleText": "提交",
"enablePullDownRefresh": false
}
}, {
"path": "sheng/mergeUpDetail",
"style": {
"navigationBarTitleText": "合并提交详情",
"navigationBarTitleText": "提交详情",
"enablePullDownRefresh": false
}
}, {
......@@ -298,6 +306,54 @@
"navigationBarTitleText" : "级位变更审批",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeVipChoseList",
"style" :
{
"navigationBarTitleText" : "在线选择",
"enablePullDownRefresh" : false
}
},
{
"path" : "mergeVip",
"style" :
{
"navigationBarTitleText" : "信息合并",
"enablePullDownRefresh" : false
}
},
{
"path" : "addMerge",
"style" :
{
"navigationBarTitleText" : "新建信息合并",
"enablePullDownRefresh" : false
}
},
{
"path" : "mergeVipDetail",
"style" :
{
"navigationBarTitleText" : "合并信息详情",
"enablePullDownRefresh" : false
}
},
{
"path" : "mergeVipChoseList",
"style" :
{
"navigationBarTitleText" : "在线选择",
"enablePullDownRefresh" : false
}
},
{
"path" : "mergeVipAudit",
"style" :
{
"navigationBarTitleText" : "合并审核",
"enablePullDownRefresh" : false
}
}]
}, {
"root": "group",
......@@ -330,14 +386,14 @@
}, {
"path": "apply/merge",
"style": {
"navigationBarTitleText": "审核合并",
"navigationBarTitleText": "合并",
"enablePullDownRefresh": false
}
}, {
"path": "apply/mergeUp",
"style": {
"navigationBarTitleText": "审核合并提交",
"navigationBarTitleText": "提交",
"enablePullDownRefresh": false
}
......@@ -435,6 +491,14 @@
"navigationBarTitleText" : "机构资料",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeGroupChoseList",
"style" :
{
"navigationBarTitleText" : "在线选择",
"enablePullDownRefresh" : false
}
}]
},{
"root": "level",
......@@ -490,14 +554,14 @@
}, {
"path": "merge",
"style": {
"navigationBarTitleText": "审核合并",
"navigationBarTitleText": "合并",
"enablePullDownRefresh": false
}
}, {
"path": "mergeUp",
"style": {
"navigationBarTitleText": "合并提交",
"navigationBarTitleText": "提交",
"enablePullDownRefresh": false
}
......@@ -537,11 +601,63 @@
"enablePullDownRefresh": false
}
}]
},{
"root": "myCenter",
"pages": [
{
"path" : "index",
"style" :
{
"navigationBarTitleText" : "个人中心",
"enablePullDownRefresh" : false
}
},
{
"path" : "teamInfo",
"style" :
{
"navigationBarTitleText" : "团体信息",
"enablePullDownRefresh" : false
}
},
{
"path" : "auth",
"style" :
{
"navigationBarTitleText" : "会员认证",
"enablePullDownRefresh" : false
}
},
{
"path" : "safe",
"style" :
{
"navigationBarTitleText" : "账号与安全",
"enablePullDownRefresh" : false
}
},
{
"path" : "reviewList",
"style" :
{
"navigationBarTitleText" : "审核详情",
"enablePullDownRefresh" : false
}
},
{
"path" : "perfect",
"style" :
{
"navigationBarTitleText" : "团体会员缴费",
"enablePullDownRefresh" : false
}
}
]
}],
"preloadRule": {
"pages/index/index": {
"network": "all",
"packages": ["login","personalVip", "group","level"]
"packages": ["login","personalVip", "group","level","myCenter"]
}
}
}
\ No newline at end of file
......
......@@ -16,16 +16,16 @@
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text>{{item.submitTime}} 创建</text>
</view>
<view class="name" @click="goDetail(item)">{{item.name}}</view>
<view class="text-primary" v-if="item.payCode">{{item.payCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
缴费状态
<view>
<text :class="{
'text-success':item.payStatusStr=='已上传凭证',
'text-danger':item.payStatusStr=='未上传凭证',
'text-success':item.payStatusStr=='已上传',
'text-danger':item.payStatusStr=='未上传',
'text-warning':item.payStatusStr=='已结算'
}">{{item.payStatusStr}}</text>
</view>
......
......@@ -18,7 +18,8 @@
<text class="lab">{{ type=='1'?'考级人数':'考段人数' }}</text>{{form.totalNum}}
</view>
<view class="ddd">
<text class="lab">总金额:</text>¥{{ (form.totalAmount*1).toFixed(2) }}
<text class="lab">总金额:</text>
<text class="text-danger">¥{{ (form.totalAmount*1).toFixed(2) }}</text>
</view>
</view>
<view class="wBox">
......@@ -28,20 +29,21 @@
<view class="userlist">
<view class="item" v-for="n in infoList" @click="goDetail(n)" style="background-color: #fffafa;">
<view class="w100">
<view class="text-primary">{{n.examCode}}</view>
<view class="name">{{n.name}}</view>
<!-- <view class="date">{{n.idcTypeStr}}{{n.idcCode}}</view> -->
<view class="flexbox">
<view>
<!-- <view>
上报单位
<text>{{n.memberName}}</text>
</view>
</view> -->
<view>
{{type=='1'?'考级考生数':'考段考生数'}}
<text>
{{n.totalNum}}
</text>
</view>
<view>
<view class="w50">
金额
<text class="text-danger">¥{{ (n.totalAmount*1).toFixed(2) }}</text>
</view>
......@@ -117,7 +119,8 @@
function goDetail(item) {
// examId
if(type.value == '1'){
let path = `/level/applyDetail?examId=${item.examId}`
const form = encodeURIComponent(JSON.stringify(item))
let path = `/level/applyDetail?examId=${item.examId}&form=${form}`
uni.navigateTo({
url: path
});
......
This diff could not be displayed because it is too large.
......@@ -3,12 +3,12 @@
<z-paging ref="paging" v-model="dataList" @query="queryList" emptyViewImg="/static/nodata.png">
<!-- z-paging默认铺满全屏,此时页面所有view都应放在z-paging标签内,否则会被盖住 -->
<!-- 需要固定在页面顶部的view请通过slot="top"插入,包括自定义的导航栏 -->
<uni-section title="待办提醒" padding>
<uni-section title="通知公告" padding>
<view class="msglist">
<view class="msgitem" v-for="n in dataList" :key="n.id" @click="readMessage(n)">
<text class="dot" :class="{'done':n.readFlag=='1'}"></text>
<view class="msgitem" v-for="n in dataList" :key="n.id" @click="goDetail(n)">
<!-- <text class="dot" :class="{'done':n.readFlag=='1'}"></text> -->
<view class="tt esp">{{n.name}}</view>
<view class="date">{{ n.createTime }}</view>
<view class="date">{{ n.belongTime }}</view>
</view>
</view>
</uni-section>
......@@ -20,65 +20,28 @@
import {
ref
} from 'vue'
import * as api from '@/common/api.js';
import * as api from '@/common/api.js';
import {
onLoad
} from '@dcloudio/uni-app';
const dataList = ref([])
const paging = ref(null)
const current = ref(2)
function queryList(pageNum, pageSize) {
api.getMessage({
api.notice({
pageNum,
pageSize
}).then(res => {
for (var d of res.rows) {
switch (d.type) {
case 30001:
d.name = '你有一条会员缴费等待审批,点击去处理!'
d.path = '/personalVip/audit'
break
case 30002:
d.name = '你有一条级位考试等待审批,点击去处理!'
d.path = '/level/approval'
break
case 30003:
d.name = '你有一条段位考试等待审批,点击去处理!'
d.path = '/pages/rank/approval'
break
case 30004:
d.name = '你有一条会员调动等待审批,点击去处理!'
d.path = '/personalVip/mobillize'
break
case 30005:
d.name = '你有一条团体会员认证等待审批,点击去处理!'
d.path = '/group/apply/applyList'
break
case 30006:
d.name = '你有一条段位成绩等待审批,点击去处理!'
d.path = '/pages/rank/scoreApproval'
break
case 40001:
d.name = '你有一条级位申请待提交,点击去处理!'
d.path = `/level/apply?id=${d.eventId}`
break
case 40002:
d.name = '你有一条段位申请待提交,点击去处理!'
d.path = `/pages/rank/apply?id=${d.eventId}`
break
case 40003:
d.name = '你有一条成绩维护的数据待提交,点击去处理!'
d.path = `/pages/rank/score/modify?id=${d.eventId}`
break
case 50001:
d.name = '你有一条新的个人会员申请,点击去处理!'
d.path = '/personalVip/list'
break
}
}
paging.value.complete(res.rows);
})
}
function goDetail(n){
uni.navigateTo({
url: `/pages/index/newsDetail?noteId=${n.noteId}`
});
}
function readMessage(item) {
uni.navigateTo({
url: item.path
......
<template>
<view class="mainbox">
<view class="title">{{form.name}}</view>
<view class="infos">
<text>{{ form.source }}</text>
<text>{{ form.belongTime }}</text>
</view>
<view class="content">
<view v-html="form.content"></view>
<view v-if="attachmentMp4.length>0">
<video v-for="(f,index) in attachmentMp4" :key="index" controls :src="config.baseUrl_api + f.url"></video>
</view>
<view v-if="attachmentFile.length>0" class="mt20">
<!-- 附件-->
<view class="fwb mt20">附件下载:</view>
<view v-for="(f,index) in attachmentFile" :key="index" class="text-primary underLine"
@click="downLoad(f.url)">
{{ index + 1 }}{{ f.name }}
</view>
</view>
<view>
<text v-if=" form.author">发布人:{{ form.author }}</text>
</view>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import * as api from '@/common/api.js';
import {
onLoad
} from '@dcloudio/uni-app';
import _ from 'lodash'
import config from '@/config.js'
const form = ref({})
const attachmentFile = ref([])
const attachmentMp4 = ref([])
onLoad((option) => {
getData(option.noteId)
})
function getData(noteId) {
api.getNewsById(noteId).then(res => {
form.value = res.data
var html = res.data.content.replace(/<img([\s\w"-=\/\.:;]+)((?:(height="[^"]+")))/ig, '<img$1')
.replace(/<img([\s\w"-=\/\.:;]+)((?:(width="[^"]+")))/ig, '<img$1')
.replace(/<img([\s\w"-=\/\.:;]+)((?:(style="[^"]+")))/ig, '<img$1')
.replace(/<img([\s\w"-=\/\.:;]+)((?:(alt="[^"]+")))/ig, '<img$1')
.replace(/<img([\s\w"-=\/\.:;]+)/ig, '<img style="width: 100%;" $1');
if (form.value.attacthJson) {
const attachment = JSON.parse(form.value.attacthJson)
attachmentFile.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') === -1) || []
attachmentMp4.value = _.filter(attachment, (a) => a.url.toLowerCase().indexOf('.mp4') !== -1) || []
}
})
}
function downLoad(url){
console.log(url)
var str = config.baseUrl_api + url
if (url.indexOf('png') > -1 ||url.indexOf('jpg') > -1 ||url.indexOf('jpeg') > -1) {
uni.previewImage({
urls: [str],
success: function(res) {
console.log('success', res)
},
fail: function(res) {
console.log('fail', res)
},
complete: function(res) {
console.log('complete', res)
}
})
} else {
goWebView(str)
}
}
function goWebView(url) {
url = url.replace("http://", "https://")
uni.showLoading({
title: '下载中'
});
uni.downloadFile({
url: url,
success: function(res) {
console.log('111')
uni.hideLoading();
var filePath = res.tempFilePath;
uni.showLoading({
title: '正在打开'
});
uni.openDocument({
filePath: filePath,
showMenu: true,
success: function(res) {
console.log('222')
uni.hideLoading();
},
fail: function(err) {
console.log(err.errMsg)
uni.hideLoading();
let msg
if(err.errMsg.indexOf('not supported')>-1){
msg = '不支持该文件类型'
} else {
msg = err.errMsg
}
uni.showToast({
title: msg,
icon: 'none',
duration: 2000
});
}
});
},
fail: function(error) {
uni.hideLoading();
uni.showToast({
title: `下载失败`,
icon: 'none',
duration: 2000
});
}
});
}
</script>
<style scoped lang="scss">
.mainbox {
box-sizing: border-box;
padding: 50rpx 25rpx 160rpx;
background: #fff;
min-height: 100vh;
}
.title {
font-size: 36rpx;
font-weight: 500;
color: #29343C;
margin-bottom: 34rpx;
}
.infos {
border-bottom: 1px solid #DCDCDC;
padding-bottom: 40rpx;
overflow: hidden;
}
.infos>text {
margin-right: 18rpx;
color: #7B7F83;
font-size: 22rpx;
}
.content {
line-height: 1.6;
color: #4C5359;
font-size: 30rpx;
padding-top: 40rpx;
width: 100%;
word-wrap: break-word !important;
white-space: normal !important;
}
.content rich-text {
word-wrap: break-word !important;
white-space: normal !important;
}
.content span,
.content p {
word-wrap: break-word !important;
white-space: normal !important;
}
.content rich-text img{max-width: 100%;}
image {
max-width: 100%;
}
audio {
width: 100%;
}
video {
width: 100%;
}
</style>
\ No newline at end of file
......@@ -17,7 +17,8 @@
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="name mt0" >{{item.name}}</view>
<view class="text-primary">{{item.examCode}}</view>
<view class="name mt0" >{{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" >
......
......@@ -20,6 +20,7 @@
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
提交时间:{{item.submitTime}}
</view>
<view class="text-primary">{{item.examCode}}</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>
......
......@@ -235,7 +235,13 @@ onLoad((option) => {
getList()
}
})
onShow(() => {})
onShow((option) => {
console.log(option)
if(option){
queryParams.value.rangeId = option
getList()
}
})
function getList() {
uni.showLoading({
......@@ -266,7 +272,10 @@ function handleDelete(row) {
api.infoMod([row.id]).then(Response => {
uni.showToast({
title: '操作成功'
})
})
if(list.value.length==1){
queryParams.value.rangeId = ''
}
getList()
})
}
......@@ -275,20 +284,24 @@ function handleDelete(row) {
}
function chooseOnline() {
uni.showLoading({
title: '加载中',
icon: 'none'
})
var obj = {
paymentRangeId: queryParams.value.rangeId || '-1',
multiDeptFlag: 1,
perType: 1
}
api.selectPageList(obj).then(res => {
studentList.value = res.rows
uni.hideLoading()
choseStudent.value.open()
})
// uni.showLoading({
// title: '加载中',
// icon: 'none'
// })
// var obj = {
// paymentRangeId: queryParams.value.rangeId || '-1',
// multiDeptFlag: 1,
// perType: 1
// }
// api.selectPageList(obj).then(res => {
// studentList.value = res.rows
// uni.hideLoading()
// choseStudent.value.open()
// })
uni.navigateTo({
url:`/personalVip/changeVipChoseList?rangeId=${queryParams.value.rangeId || '-1'}`
})
}
function checkThis(n) {
......
......@@ -12,7 +12,7 @@
</uni-forms-item>
<uni-forms-item label="证件类型" required name="idcType">
<uni-data-select v-model="baseFormData.idcType" style="width: 300rpx;"
@change="changeIdcType" :clearable="false" :disabled="current === 0"
@change="changeIdcType" :clear="false" :disabled="current === 0"
:localdata="idcTypeList"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="证件照" required v-show="current === 1">
......@@ -143,7 +143,7 @@
const photoArr = ref({})
const regionsList = ref([])
const cardObj = ref({})
const disabledName = ref(false)
const disabledName = ref(true)
const baseFormData = ref({
photo: '',
sex: '',
......@@ -329,7 +329,14 @@
}
function getExtractInfo(obj) {
function getExtractInfo(obj) {
photoArr.value = {}
// baseFormData.value = {
// photo: '',
// idcType: baseFormData.value.idcType,
// idcCode: baseFormData.value.idcCode,
// perType: '1'
// };
//如果老会员
uni.showLoading({
title: '加载中'
......@@ -345,7 +352,6 @@
baseFormData.value.phone = res.data.phone
baseFormData.value.cityId = res.data.cityId
baseFormData.value.address = res.data.address
photoArr.value = {}
if (res.data.photo) {
console.log(res.data.photo)
if (res.data.photo.indexOf('http') == -1) {
......@@ -367,17 +373,17 @@
}
}
baseFormData.value.name = res.data.name
// baseFormData.value.name = res.data.name
baseFormData.value.perId = res.data.perId
console.log(res.data.photo, baseFormData.value.photo)
uni.hideLoading()
} else {
uni.hideLoading()
// 新会员
if (res.data.sex) {
baseFormData.value.sex = res.data.sex
baseFormData.value.birth = res.data.birth
}
// if (res.data.sex) {
// baseFormData.value.sex = res.data.sex
// baseFormData.value.birth = res.data.birth
// }
if (baseFormData.value.idcType != 3 && current.value == 1) {
disabledName.value = true
} else {
......@@ -399,29 +405,6 @@
icon: 'none'
})
} else {
// let tmpStr = "";
// if (baseFormData.value.idcCode.length == 15) {
// tmpStr = baseFormData.value.idcCode.substring(6, 12);
// tmpStr = "19" + tmpStr;
// tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6)
// } else {
// tmpStr = baseFormData.value.idcCode.substring(6, 14);
// tmpStr = tmpStr.substring(0, 4) + "-" + tmpStr.substring(4, 6) + "-" + tmpStr.substring(6)
// }
// baseFormData.value.birth = tmpStr
// const sse = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
// if (sse.test(baseFormData.value.idcCode)) {
// const genderCode = baseFormData.value.idcCode.charAt(16)
// if (parseInt(genderCode) % 2 == 0) {
// baseFormData.value.sex = '1'
// } else {
// baseFormData.value.sex = '0'
// }
// }
getExtractInfo({
idcCode: baseFormData.value.idcCode,
idcType: baseFormData.value.idcType,
......@@ -429,19 +412,19 @@
})
}
}
if (baseFormData.value.idcType == 1 || baseFormData.value.idcType == 3 || baseFormData.value.idcType == 4) {
//转换为大写并判断位数12
baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase()
// var regex = /^[a-zA-Z]/
if (baseFormData.value.idcCode.length > 12) {
uni.showToast({
icon: 'none',
title: '请输入正确的证件号',
duration: 2000
})
return
}
}
// if (baseFormData.value.idcType == 1 || baseFormData.value.idcType == 3) {
// //转换为大写并判断位数12
// baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase()
// // var regex = /^[a-zA-Z]/
// if (baseFormData.value.idcCode.length > 12) {
// uni.showToast({
// icon: 'none',
// title: '请输入正确的证件号',
// duration: 2000
// })
// return
// }
// }
}
......@@ -502,28 +485,22 @@
})
return
}
if (baseFormData.value.idcType == 3) {
//转换为大写并判断位数12
baseFormData.value.idcCode = baseFormData.value.idcCode.toUpperCase()
// var regex = /^[a-zA-Z]/
if (baseFormData.value.idcCode.length > 12) {
uni.showToast({
icon: 'none',
title: '请输入正确的证件号',
duration: 2000
})
return
}
}
//信息确认弹出
uni.showModal({
content: '请确认信息正确',
success: function(res) {
if (res.confirm) {
if (res.confirm) {
if(baseFormData.value.idcType=='4'){
baseFormData.value.idcType='0'
}
api.addPersonToMyDept(baseFormData.value).then(res => {
if (res.data == 0) {
let msg = '该成员,实名认证未通过,注册失败!'
resultDialog.value = true
let msg = '该成员,实名认证未通过,注册失败!'
uni.showModal({
content: msg,
title: '提示',
success: function(res) {}
})
return
}
if (res.data * 1 < 0) {
......@@ -535,14 +512,23 @@
})
return
}
let msg = '保存成功'
uni.showToast({
title: msg,
icon: 'none'
// let msg = '保存成功'
uni.showModal({
content: '保存成功',
title: '提示',
confirmText:'继续添加',
cancelColor:'返回首页',
success: function(res) {
uni.redirectTo({
url: `/personalVip/addVip?tab=${current.value}&idcType=${baseFormData.value.idcType}`
});
},
fail:function(){
uni.reLaunch({
url:`/pages/index/index`
})
}
})
uni.redirectTo({
url: `/personalVip/addVip?tab=${current.value}&idcType=${baseFormData.value.idcType}`
});
})
}
......
<template>
<view>
<view class="text-center" v-if="userType=='2'">
<view class="text-center whitebg" v-if="userType=='2'">
<view class="cardNav" v-if="userType=='2'">
<view class="active">会员审核</view>
<view @click="goMerge">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<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"
......@@ -29,6 +29,7 @@
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.content.commitTime}} 提交
</view>
<view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}}</view>
<view class="name" @click="goDetail(item)">{{item.content.name}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -20,7 +20,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -21,7 +21,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -20,7 +20,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
......@@ -21,7 +21,7 @@
</view>
<view class="name mt0" @click="goDetail(item)">
{{item.code}}-{{item.shenMemName}}
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......
<template>
<view class="hasfixedbottom">
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()">
</uni-easyinput>
</view>
<view class="userlist">
<view class="item" v-for=" (n,index) in studentList" :key="index">
<view @click="checkThis(n)">
<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>
<view class="name">{{n.name}} <text>{{n.perCode}}</text></view>
<view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view>
</view>
</view>
<view class="nodata" v-if="studentList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>无可变更会员</text>
</view>
</view>
<uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more>
<view class="fixedBottom" v-if="studentList.length!=0">
<button class="btn-red" @click="handleImport">批量添加</button>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import _ from 'lodash'
import config from '/config.js'
const queryParams = ref({
paymentRangeId:-1,
multiDeptFlag: 1,
perType: 1,
pageNum:1,
pageSize:10
})
const paging = ref(null)
const total = ref(0)
const status = ref('no-more')
const list = ref([])
const popup = ref(null)
const choseStudent = ref(null)
const studentList = ref([])
const type = ref('')
const form = ref({})
const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"})
const cardType = ref([{
text: '身份证',
value: '0'
},
{
text: '港澳台通行证 ',
value: '1'
},
{
text: '中国护照',
value: '2'
},
{
text: '外国护照',
value: '3'
},
{
text: '其它',
value: '4'
},
{
text: '户口本',
value: '5'
}
])
onLoad((option) => {
if (option.rangeId) {
queryParams.value.paymentRangeId = option.rangeId
}
getList()
})
onShow(() => {})
function clickLoadMore(){
getList()
}
function search(){
queryParams.value.pageNum = 1
api.selectPageList(queryParams.value).then(res => {
studentList.value = res.rows
total.value = res.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
uni.hideLoading()
})
}
function getList() {
if(total.value>0&&total.value>studentList.value.length){
uni.showLoading({
title: '加载中',
icon: 'none'
})
status.value = 'loading'
queryParams.value.pageNum += 1
api.selectPageList(queryParams.value).then(res => {
studentList.value = _.concat(studentList.value,res.rows)
total.value = res.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
uni.hideLoading()
})
}else if(total.value==0){
search()
}
}
function checkThis(n) {
if (n.checked) {
n.checked = false
} else {
n.checked = true
}
}
function handleImport() {
var arr = []
for (var n of studentList.value) {
if (n.checked) {
arr.push(n.perId)
}
}
api.addInfoModeToRange({
perIds: arr,
rangeIdStr: queryParams.value.paymentRangeId || '-1'
}).then(res => {
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2]
prevPage.onShow(res.data)
uni.navigateBack()
})
}
</script>
<style scoped lang="scss">
.flexbox {
padding: 30rpx 30rpx 0
}
.danger-button {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.userlist{
padding: 0 25rpx;
}
.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;
}
}
.popBody {
background: #fff;
padding: 30rpx;
}
.text-center .btn-red-kx {
border-radius: 50px;
font-size: 28rpx;
}
:deep(.file-picker__progress) {
opacity: 0;background-color: transparent;
}
</style>
\ No newline at end of file
......@@ -15,20 +15,30 @@
<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="text-primary" @click="goDetail(item)">{{item.wfCode}}</view>
<view class="name mt0" @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>
<text v-if="item.settleFlag == 0" class="text-warning">已结算</text>
<text v-if="item.settleFlag == 1 && item.payFlag == 0" class="text-success">已上传</text>
<text v-if="item.settleFlag == 1 && item.payFlag == 1" class="text-danger">未上传</text>
</view>
</view>
<view>
人数合计
<view>{{item.personCount}}</view>
</view>
<view>
年限合计
<view>{{item.yearCount}}</view>
</view>
<view>
费用合计
<view>¥{{item.allPrice}}</view>
</view>
</view>
<view class="func">
<button
......
......@@ -21,7 +21,7 @@
<view class="name">{{n.personName}}<text>({{n.memberInfoName}})</text></view>
<view class="date">原有效期至{{n.originValidityDate?.slice(0,10)||'--'}}</view>
</view>
<view class="nian">
<view class="nian" style="bottom:28rpx">
¥{{n.allPrice}}
</view>
</view>
......
......@@ -47,11 +47,7 @@
<uni-icons type="compose" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">编辑</text>
</view> -->
<view class="danger-button" v-if="n.certStage==0" @click="handleDelete(n)">
<uni-icons type="trash" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">删除</text>
</view>
<view class="danger-button" v-else @click="handleDelete(n)" style="opacity: 0.5;">
<view class="danger-button" @click="handleDelete(n)">
<uni-icons type="trash" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">删除</text>
</view>
......@@ -141,10 +137,7 @@
})
}
function handleDelete(item) {
if(item.certStage!=0){
return
}
function handleDelete(item) {
uni.showModal({
content: `是否确认删除${item.name}`,
success: function(res) {
......
<template>
<view>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.code" 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="index">
<view class="status" @click="goDetail(item)">
<view>
<text v-if="item.status == 0" class="text-warning">待提交</text>
<text v-if="item.status == 1" class="text-primary">审核中</text>
<text v-if="item.status == 2" class="text-success">审核通过</text>
<text v-if="item.status == 3" class="text-danger">审核拒绝</text>
<text v-if="item.status == 4" class="text-warning">已撤回</text>
</view>
</view>
<view class="name mt0" @click="goDetail(item)">
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
合并人数
<view>
<text class="text-danger">{{item.count}}</text>
</view>
</view>
<view class="w50">
提交时间
<view>{{item.commitTime||'--'}}</view>
</view>
</view>
<view class="func" v-if="(item.status==0||item.status==3||item.status==4)">
<button v-if="item.status==0||item.status==4" @click="handleUpdate(item)">编辑</button>
<button v-if="item.status==0||item.status==4" @click="commitFN(item)">提交审核</button>
<button @click="handleDelete(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 {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
code:''
})
const list = ref([])
const total = ref(0)
onShow(()=>{
getList()
})
function goAdd(){
let path = `/personalVip/addMerge`
uni.navigateTo({
url: path
});
}
function getList(){
uni.showLoading({
title:'加载中'
})
api.infoMergeRangeList(queryParams.value).then(res=>{
list.value = res.rows
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/personalVip/mergeVipDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleUpdate(item){
// 编辑
let path = `/personalVip/addMerge?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function commitFN(row){
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
if (res.confirm) {
api.commitMergeVip(row.id).then(Response=>{
uni.showToast({
icon:"none",
title:'提交成功!'
})
getList()
})
}
}
})
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定删除吗`,
success: function(res) {
if (res.confirm) {
api.delPersonalMerge([row.id]).then(Response=>{
uni.showToast({
icon:"none",
title:'删除成功!'
})
getList()
})
}
}
})
}
</script>
<style lang='scss' 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;
}
}
</style>
<template>
<view>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.code" placeholder="搜索单号" @blur="getList" @clear="getList">
</uni-easyinput>
</view>
<view class="vipData">
<view>合并人数合计: <text>{{count}}</text></view>
</view>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<view>
<text v-if="item.status == 0" class="text-warning">待提交</text>
<text v-if="item.status == 1" class="text-primary">审核中</text>
<text v-if="item.status == 2" class="text-success">审核通过</text>
<text v-if="item.status == 3" class="text-danger">审核拒绝</text>
<text v-if="item.status == 4" class="text-warning">已撤回</text>
</view>
</view>
<view class="name mt0" @click="goDetail(item)">
<text class="text-primary">{{item.code}}</text>-{{item.shenMemName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view>
合并人数
<view>
<text class="text-danger">{{item.count}}</text>
</view>
</view>
<view class="w50">
提交时间
<view>{{item.commitTime?.slice(0,10)||'--'}}</view>
</view>
</view>
<view class="func" v-if="item.status==1">
<button @click="audit(item.id,0)">拒绝</button>
<button @click="audit(item.id,1)">同意</button>
</view>
<!-- <view class="func" v-if="item.status==2">
<button @click="handleDelete(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 {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
code:'',
ztxList: '0'
})
const list = ref([])
const count = ref(0)
const total = ref(0)
onShow(()=>{
getList()
})
function getList(){
uni.showLoading({
title:'加载中'
})
api.infoMergeRangeList(queryParams.value).then(res=>{
list.value = res.rows
list.value.forEach(item => {
count.value += item.count
})
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/personalVip/mergeVipDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定撤回吗`,
success: function(res) {
if (res.confirm) {
api.personChangeWithDraw([row.id]).then(Response=>{
uni.showToast({
icon:"none",
title:'撤回成功!'
})
getList()
})
}
}
})
}
function audit(id, flag) {
if (flag == 0) {
// 拒绝
// 弹出框填写理由
uni.showModal({
title: '请输入拒绝理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入拒绝理由',
icon: 'none'
})
} else {
doApproval(id, flag, res.content)
}
}
}
})
} else if (flag == 1) {
// 二次确认
uni.showModal({
title: '提示',
content: `确定审批通过吗`,
success: function(res) {
if (res.confirm) {
doApproval(id, flag)
}
}
})
}
}
function doApproval(id, flag, reason) {
var obj = {
flag: flag,
reason: reason || '',
ids: [id]
}
console.log(obj)
api.mergerVipAudit(obj).then((res) => {
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
</script>
<style lang='scss' 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;
}
}
</style>
<template>
<view class="hasfixedbottom">
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.name" placeholder="搜索姓名" @blur="search()" @clear="search()">
</uni-easyinput>
</view>
<view class="userlist">
<view class="item" v-for=" (n,index) in studentList" :key="index">
<view @click="checkThis(n)">
<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>
<view class="name">{{n.name}} <text>{{n.perCode}}</text></view>
<view class="date">{{ cardType[n.idcType]?.text }}{{n.idcCode}}</view>
</view>
</view>
<view class="nodata" v-if="studentList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>无可变更会员</text>
</view>
</view>
<uni-load-more @clickLoadMore="clickLoadMore" :contentText="contentText" :status="status"></uni-load-more>
<view class="fixedBottom" v-if="studentList.length!=0">
<button class="btn-red" @click="handleImport">批量添加</button>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import _ from 'lodash'
import config from '/config.js'
const queryParams = ref({
paymentRangeId:-1,
multiDeptFlag: 1,
perType: 1,
pageNum:1,
pageSize:10
})
const paging = ref(null)
const total = ref(0)
const status = ref('no-more')
const list = ref([])
const popup = ref(null)
const choseStudent = ref(null)
const studentList = ref([])
const type = ref('')
const form = ref({})
const contentText = ref({contentdown: "点击加载更多",contentrefresh: "正在加载...",contentnomore: "没有更多数据了"})
const cardType = ref([{
text: '身份证',
value: '0'
},
{
text: '港澳台通行证 ',
value: '1'
},
{
text: '中国护照',
value: '2'
},
{
text: '外国护照',
value: '3'
},
{
text: '其它',
value: '4'
},
{
text: '户口本',
value: '5'
}
])
onLoad((option) => {
if (option.rangeId) {
queryParams.value.paymentRangeId = option.rangeId
}
console.log(option.rangeId)
getList()
})
onShow(() => {})
function clickLoadMore(){
getList()
}
function search(){
queryParams.value.pageNum = 1
api.selectPageList(queryParams.value).then(res => {
studentList.value = res.rows
total.value = res.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
uni.hideLoading()
})
}
function getList() {
if(total.value>0&&total.value>studentList.value.length){
uni.showLoading({
title: '加载中',
icon: 'none'
})
status.value = 'loading'
queryParams.value.pageNum += 1
api.selectPageList(queryParams.value).then(res => {
studentList.value = _.concat(studentList.value,res.rows)
total.value = res.total
if(total.value>studentList.value.length){
status.value = 'more'
} else {
status.value = 'no-more'
}
uni.hideLoading()
})
}else if(total.value==0){
search()
}
}
function checkThis(n) {
if (n.checked) {
n.checked = false
} else {
n.checked = true
}
}
function handleImport() {
var arr = []
for (var n of studentList.value) {
if (n.checked) {
arr.push(n.perId)
}
}
api.addMergeToRange({
perIds: arr,
rangeIdStr: queryParams.value.paymentRangeId || '-1'
}).then(res => {
var pages = getCurrentPages()
var prevPage = pages[pages.length - 2]
prevPage.onShow(res.data)
uni.navigateBack()
})
}
</script>
<style scoped lang="scss">
.flexbox {
padding: 30rpx 30rpx 0
}
.danger-button {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.userlist{
padding: 0 25rpx;
}
.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;
}
}
.popBody {
background: #fff;
padding: 30rpx;
}
.text-center .btn-red-kx {
border-radius: 50px;
font-size: 28rpx;
}
:deep(.file-picker__progress) {
opacity: 0;background-color: transparent;
}
</style>
\ No newline at end of file
<template>
<view>
<uni-collapse>
<uni-collapse-item :title="n.personInfo?.name" open v-for="n in list" :key="n.id">
<view class="collapseBody">
<!-- n.oldIdcCode -->
<view>
<label>姓名:</label>
{{n.personInfo?.name}}
<text class="text-danger">{{ n.oldPersonInfo?.name }}</text>
</view>
<view>
<label>会员编号:</label>
{{n.personInfo?.perCode}}
<text class="text-danger">{{ n.oldPersonInfo?.perCode }}</text>
</view>
<view style="display: flex;">
<label>有效期:</label>
<view>
<view v-if="n.personInfo?.valiDateTime">
<text v-if="n.personInfo?.beginTime">{{n.personInfo?.beginTime?.slice(0,10)}}</text>
<text v-if="n.personInfo?.beginTime"></text>
<text>{{n.personInfo?.valiDateTime?.slice(0,10)}}</text>
</view>
<view class="text-danger" v-if="n.oldPersonInfo?.valiDateTime">
<text v-if="n.oldPersonInfo?.beginTime">{{ n.oldPersonInfo?.beginTime?.slice(0,10)}}</text>
<text v-if="n.oldPersonInfo?.beginTime"></text>
<text v-if="n.oldPersonInfo?.valiDateTime">{{n.oldPersonInfo?.valiDateTime?.slice(0,10)}}</text>
</view>
<view class="text-danger" v-else>--</view>
</view>
</view>
<view style="display: flex;">
<label>证件号:</label>
<view>
{{ n.originIdcCode }}
<view class="text-danger">{{ n.oldIdcCode }}</view>
</view>
</view>
<view>
<label>级位详情:</label>
<view v-if="n.personInfo?.jiList.length>0" class="mt10">
<uni-table border stripe>
<uni-tr>
<uni-th width="50">序号</uni-th>
<uni-th >级位</uni-th>
<uni-th>证书编号</uni-th>
</uni-tr>
<uni-tr v-for="(tr,index) in n.personInfo.jiList" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>{{szToHz(tr.level)}}</uni-td>
<uni-td>{{tr.certCode}}</uni-td>
</uni-tr>
</uni-table>
</view>
<text v-else class="text-primary">无级位记录</text>
<view v-if="n.oldPersonInfo?.jiList.length>0" class="mt10">
<uni-table border stripe>
<uni-tr>
<uni-th width="50"><text class="text-danger">序号</text></uni-th>
<uni-th><text class="text-danger">级位</text></uni-th>
<uni-th><text class="text-danger">证书编号</text></uni-th>
</uni-tr>
<uni-tr v-for="(tr,index) in n.oldPersonInfo.jiList" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>{{szToHz(tr.level)}}</uni-td>
<uni-td>{{tr.certCode}}</uni-td>
</uni-tr>
</uni-table>
</view>
<text v-else class="text-danger">无级位记录</text>
</view>
<view>
<label>段位详情:</label>
<view v-if="n.personInfo?.duanList.length>0" class="mt10">
<uni-table border stripe>
<uni-tr>
<uni-th width="50">序号</uni-th>
<uni-th>段位</uni-th>
<uni-th>证书编号</uni-th>
</uni-tr>
<uni-tr v-for="(tr,index) in n.personInfo.duanList" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>{{szToHz(tr.level)}}</uni-td>
<uni-td>{{tr.certCode}}</uni-td>
</uni-tr>
</uni-table>
</view>
<text v-else class="text-primary">无段位记录</text>
<view v-if="n.oldPersonInfo?.duanList.length>0" class="mt10">
<uni-table border stripe>
<uni-tr>
<uni-th width="50"><text class="text-danger">序号</text></uni-th>
<uni-th><text class="text-danger">段位</text></uni-th>
<uni-th><text class="text-danger">证书编号</text></uni-th>
</uni-tr>
<uni-tr v-for="(tr,index) in n.oldPersonInfo.duanList" :key="index">
<uni-td>{{index+1}}</uni-td>
<uni-td>{{szToHz(tr.level)}}</uni-td>
<uni-td>{{tr.certCode}}</uni-td>
</uni-tr>
</uni-table>
</view>
<text v-else class="text-danger">无段位记录</text>
</view>
<view v-if="n.fileUrl">
<label>证明材料:</label>
<text class="text-primary" @click="showImg(n)">
下载
</text>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import {
szToHz
} from '@/common/utils.js'
import config from '@/config.js'
const queryParams = ref({})
const total = ref(0)
const list = ref([])
const popup = ref(null)
const type = ref('')
const form = ref({})
onLoad((option) => {
if (option.rangeId) {
queryParams.value.rangeId = option.rangeId
getList()
}
})
function getList() {
uni.showLoading({
title: '加载中'
})
api.infoMergeList(queryParams.value).then(res => {
list.value = res.rows
list.value.forEach(item => {
item.fileUrl = JSON.parse(item.fileUrl)
})
total.value = res.total
uni.hideLoading()
})
}
function handleChange(a, b) {
type.value = b
form.value = a
console.log(form.value.newName)
popup.value.open()
}
function handleDelete(row) {
uni.showModal({
content: `确认删除会员${row.newName}`,
success: function(res) {
if (res.confirm) {
api.infoMod([row.id]).then(res => {
uni.showToast({
title: '操作成功'
})
getList()
})
}
}
})
}
function showImg(n) {
var str = config.baseUrl_api + n.fileUrl[0]?.url
if (n.fileUrl[0]?.url.indexOf('png') > -1 || n.fileUrl[0]?.url.indexOf('jpg') > -1 || n.fileUrl[0]?.url.indexOf(
'jpeg') > -1) {
uni.previewImage({
urls: [str],
success: function(res) {
console.log('success', res)
},
fail: function(res) {
console.log('fail', res)
},
complete: function(res) {
console.log('complete', res)
}
})
} else {
goWebView(str)
}
}
function goWebView(url) {
url = url.replace("http://", "https://")
uni.showLoading({
title: '下载中'
});
uni.downloadFile({
url: url,
success: function(res) {
uni.hideLoading();
var filePath = res.tempFilePath;
uni.showLoading({
title: '正在打开'
});
uni.openDocument({
filePath: filePath,
showMenu: true,
success: function(res) {
uni.hideLoading();
},
fail: function(err) {
uni.hideLoading();
uni.showToast({
title: err,
icon: 'none',
duration: 2000
});
}
});
},
fail: function(error) {
uni.hideLoading();
uni.showToast({
title: `下载失败`,
icon: 'none',
duration: 2000
});
}
});
}
</script>
<style scoped lang="scss">
.flexbox {
padding: 30rpx 30rpx 0
}
.danger-button {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.collapseBody {
background: #fff;
padding:0 30rpx;
box-sizing: border-box;
font-size: 28rpx;
view {
margin: 0 0 20rpx;
label {
width: 5em;
color: #999;
display: inline-block;
text-align: right;
}
}
}
.popBody {
background: #fff;
padding: 30rpx;
}
</style>
\ No newline at end of file
......@@ -22,7 +22,7 @@
</view>
<view v-if="deptType == 2 || deptType == 3">
<text v-if="item.shenRes == 0">审核中</text>
<text v-if="item.shenRes == 0" class="text-primary">审核中</text>
<text v-if="item.shenRes == 1" class="text-success">审核通过</text>
<text v-if="item.shenRes == 2" class="text-danger">审核拒绝</text>
<text v-if="item.shenRes == 3" class="text-warning">撤销申请</text>
......@@ -30,7 +30,7 @@
<view v-if="deptType == 6">
<text v-if="item.status == 0">待提交</text>
<text v-if="item.status == 1">审核中</text>
<text v-if="item.status == 1" class="text-primary">审核中</text>
<text v-if="item.status == 2" class="text-warning">审核拒绝</text>
<text v-if="item.status == 3" class="text-success">审核通过</text>
<text v-if="item.status == 4" class="text-danger">已撤回</text>
......@@ -40,10 +40,12 @@
<view class="name mt0" @click="goDetail(item)">
{{item.name}}
</view>
<view class="pp" v-if="deptType == 1 || deptType == 2 || deptType == 3">
申请调入单位: {{item.targetDeptName}}
</view>
<view class="flexbox" @click="goDetail(item)">
<view class="flexbox" @click="goDetail(item)" v-if="deptType == 1 || deptType == 2 || deptType == 3">
<view class="w50">
申请调入单位
<view><text>{{item.targetDeptName}}</text></view>
</view>
<!--
<view>
调动类型
<view v-if="item.type == 1">
......@@ -52,13 +54,17 @@
<view v-else>
<text class="text-primary">省内调动</text>
</view>
</view>
</view> -->
<view class="w50">
会员合计
<view>{{item.personCount}}</view>
</view>
</view>
<view v-else class="pp">
会员合计:
<text class="text-primary">{{item.personCount}}</text>
</view>
<view class="func"
v-if="(deptType == 1&&item.ztxRes == 0)||((deptType == 2 || deptType == 3)&&item.shenRes == 0)">
<button @click="audit(item.id,'2')">拒绝</button>
......
......@@ -23,7 +23,8 @@
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
{{item.commitTime}} 提交
</view>
<view class="name" @click="goDetail(item)">{{item.paymentName}}</view>
<view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
<view class="date" @click="goDetail(item)">{{item.paymentName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
人数合计
......
<template>
<view class="text-center">
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goBack">会员审核</view>
<view class="active">审核合并</view>
<view @click="goMergeUp">合并提交</view>
<view @click="goBack">审核</view>
<view class="active">合并</view>
<view @click="goMergeUp">提交</view>
</view>
</view>
<view class="hasfixedbottom">
......@@ -35,6 +35,7 @@
</view>
<view class="date" v-if="item.content.commitTime">提交日期:{{item.content.commitTime}}</view>
<view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}}</view>
<view class="name" @click="goDetail(item)">{{item.content.name}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
......@@ -209,7 +210,7 @@
}
function goBack() {
let path = `/personalVip/sheng/merge`
let path = `/personalVip/audit`
uni.redirectTo({
url: path
});
......
<template>
<view>
<view class="text-center">
<view class="text-center whitebg">
<view class="cardNav">
<view @click="goAudit">会员审核</view>
<view @click="goMerge">审核合并</view>
<view class="active">合并提交</view>
<view @click="goAudit">审核</view>
<view @click="goMerge">合并</view>
<view class="active">提交</view>
</view>
</view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
......@@ -28,8 +28,9 @@
{{ item.auditStatus=='100'?'待提交':statusArr[item.status] }}
</view>
</view>
<view class="date" v-if="item.content.commitTime">{{item.content.commitTime}}</view>
<view class="name" @click="goDetail(item)">{{item.content.name}}</view>
<view class="date" v-if="item.content?.commitTime">{{item.content.commitTime}}</view>
<view class="text-primary" v-if="item.content?.wfCode" @click="goDetail(item)">{{item.content?.wfCode}}</view>
<view class="name" style="width: 100%;" @click="goDetail(item)">{{item.content?.name}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
人数合计
......
## 1.0.6(2023-04-12)
- 修复 微信小程序点击时会改变背景颜色的 bug
## 1.0.5(2023-02-03)
- 修复 禁用时会显示清空按钮
## 1.0.4(2023-02-02)
......
{
"id": "uni-data-select",
"displayName": "uni-data-select 下拉框选择器",
"version": "1.0.5",
"description": "通过数据驱动的下拉框选择器",
"keywords": [
"uni-ui",
"select",
"uni-data-select",
"下拉框",
"下拉选"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": "^3.1.1"
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
},
"uni_modules": {
"dependencies": ["uni-load-more"],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "u",
"app-nvue": "n"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}
{
"id": "uni-data-select",
"displayName": "uni-data-select 下拉框选择器",
"version": "1.0.6",
"description": "通过数据驱动的下拉框选择器",
"keywords": [
"uni-ui",
"select",
"uni-data-select",
"下拉框",
"下拉选"
],
"repository": "https://github.com/dcloudio/uni-ui",
"engines": {
"HBuilderX": "^3.1.1"
},
"directories": {
"example": "../../temps/example_temps"
},
"dcloudext": {
"sale": {
"regular": {
"price": "0.00"
},
"sourcecode": {
"price": "0.00"
}
},
"contact": {
"qq": ""
},
"declaration": {
"ads": "无",
"data": "无",
"permissions": "无"
},
"npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
"type": "component-vue"
},
"uni_modules": {
"dependencies": ["uni-load-more"],
"encrypt": [],
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
},
"client": {
"App": {
"app-vue": "u",
"app-nvue": "n"
},
"H5-mobile": {
"Safari": "y",
"Android Browser": "y",
"微信浏览器(Android)": "y",
"QQ浏览器(Android)": "y"
},
"H5-pc": {
"Chrome": "y",
"IE": "y",
"Edge": "y",
"Firefox": "y",
"Safari": "y"
},
"小程序": {
"微信": "y",
"阿里": "u",
"百度": "u",
"字节跳动": "u",
"QQ": "u",
"京东": "u"
},
"快应用": {
"华为": "u",
"联盟": "u"
},
"Vue": {
"vue2": "y",
"vue3": "y"
}
}
}
}
}
......
{
{
"uni-load-more.contentdown": "Pull up to show more",
"uni-load-more.contentrefresh": "loading...",
"uni-load-more.contentnomore": "No more data"
......
import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
export default {
en,
'zh-Hans': zhHans,
'zh-Hant': zhHant
import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
export default {
en,
'zh-Hans': zhHans,
'zh-Hant': zhHant
}
......
{
{
"uni-load-more.contentdown": "上拉显示更多",
"uni-load-more.contentrefresh": "正在加载...",
"uni-load-more.contentnomore": "没有更多数据了"
......
{
{
"uni-load-more.contentdown": "上拉顯示更多",
"uni-load-more.contentrefresh": "正在加載...",
"uni-load-more.contentnomore": "沒有更多數據了"
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!