9da759d0 by 杨炀

no message

1 parent c450dde1
......@@ -5,7 +5,7 @@ import {
import * as api from '@/common/api.js';
import config from '@/config.js';
let loginUrl=['pages/index/login', 'pages/index/register']
let loginUrl=['login/login', 'login/register']
let firstload = false
export default {
onLaunch: function(options) {
......@@ -27,13 +27,13 @@ export default {
})
.catch(() => {
uni.redirectTo({
url: '/pages/index/login'
url: '/login/login'
})
})
} else {
this.globalData.isLogin = false;
uni.redirectTo({
url: '/pages/index/login'
url: '/login/login'
})
}
}
......
......@@ -738,7 +738,204 @@ function cancelMerge(id) {
url: '/exam/info/cancelMerge/' + id,
method: 'post'
})
}
}
function getInfoModRange(params) {
return request({
url: `/person/infoModRange/list`,
method: 'get',
params:params
})
}
function addInfoModeList(data) {
return request({
url: `/person/infoMod/list`,
method: 'get',
params: data
})
}
function infoMod(ids) {
return request({
url: `/person/infoMod/${ids}`,
method: 'delete'
})
}
function commitPersonalChange(ids) {
return request({
url: `/person/infoModRange/commit/${ids}`,
method: 'post'
})
}
function delPersonalChange(ids) {
return request({
url: `/person/infoModRange/${ids}`,
method: 'delete'
})
}
function addInfoModeToRange(data) {
return request({
url: `/person/infoMod/addInfoModeToRange/${data.perIds}?rangeIdStr=${data.rangeIdStr}`,
method: 'post'
})
}
function addGroupInfoModeToRange(data) {
return request({
url: `/member/infoMod/addInfoModeToRange/${data.memId}?rangeIdStr=${data.rangeIdStr}`,
method: 'post'
})
}
function personChangeEditMod(data) {
return request({
url: `/person/infoMod/editMod`,
method: 'post',
params: data
})
}
function groupChangeEditMod(data) {
return request({
url: `/member/infoMod/editMod`,
method: 'post',
params: data
})
}
function personChangeWithDraw(ids) {
return request({
url: `/person/infoModRange/withDraw/${ids}`,
method: 'post'
})
}
function personChangeAudit(data) {
return request({
url: `/person/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
function groupChangeAudit(data) {
return request({
url: `/member/infoModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
function pickUpByPersonInfo(form) {
return request({
url: `/person/technology/getPersonTecDetailsByIdc/${form.idcType}/${form.idcCode}`,
method: 'get'
})
}
function getLevelChangeAddList(params) {
return request({
url: `/person/levelMod/list`,
method: 'get',
params: params
})
}
function getChangelevelList(params) {
return request({
url: `/person/levelModRange/list`,
method: 'get',
params: params
})
}
function addLevelList(data) {
return request({
url: `/person/levelMod/addLevelModToRange`,
method: 'post',
params:data
})
}
function addLevelModToRange(data) {
return request({
url: `/person/levelMod/editModInfo/${data.modId}?reason=${data.reason}&modId=${data.modId}`,
method: 'post'
})
}
function addLevelModToRangeFile(data) {
return request({
url: `/person/levelMod/editModInfo/${data.modId}?modId=${data.modId}&fileUrl=${encodeURIComponent(data.fileUrl)}`,
method: 'post'
})
}
function levelModRangeDelete(ids) {
return request({
url: `/person/levelModRange/${ids}`,
method: 'delete'
})
}
function commitLevelChange(ids) {
return request({
url: `/person/levelModRange/commit/${ids}`,
method: 'post'
})
}
function editNewJi(data) {
return request({
url: `/person/levelMod/editNewJi/${data.modId}?newJi=${data.NewJi}`,
method: 'post'
})
}
function delLevelChangePer(data) {
return request({
url: `/person/levelMod/${data}`,
method: 'delete'
})
}
function levelModCommit(ids) {
return request({
url: `/person/levelModRange/commit/${ids}`,
method: 'post'
})
}
function changeLevelAudit(data) {
return request({
url: `/person/levelModRange/audit/${data.ids}?flag=${data.flag}&reason=${data.reason}`,
method: 'post'
})
}
function changeLevelWithDraw(data) {
return request({
url: `/person/levelModRange/withDraw/${data}`,
method: 'post'
})
}
function getMemberInfoModRange(data) {
return request({
url: `/member/infoModRange/list`,
method: 'get',
params: data
})
}
function commitGroupChange(ids) {
return request({
url: `/member/infoModRange/commit/${ids}`,
method: 'post'
})
}
function delGroupChange(ids) {
return request({
url: `/member/infoModRange/${ids}`,
method: 'delete'
})
}
function getChangeGroupByRangeId(data) {
return request({
url: `/member/infoMod/list`,
method: 'get',
params: data
})
}
function groupInfoMod(ids) {
return request({
url: `/member/infoMod/${ids}`,
method: 'delete'
})
}
function extractInfoFromChinaIdCard(data) {
return request({
url: '/person/info/extractInfo',
method: 'post',
params: data
})
}
export {
getMessage,
reader,
......@@ -820,5 +1017,18 @@ export {
doMergeFlowsPer,
unMerge, dellevelPerson, getExamPersonNum,
doVerityBack,delRange,groupWithDraw,
delLevel,cancelMerge,submitPayment
delLevel,cancelMerge,submitPayment,
getInfoModRange,addInfoModeList,infoMod,
commitPersonalChange,delPersonalChange,
addInfoModeToRange,
personChangeEditMod,personChangeWithDraw,
personChangeAudit,pickUpByPersonInfo,
getLevelChangeAddList,getChangelevelList,addLevelList,
addLevelModToRange,levelModRangeDelete,commitLevelChange,
editNewJi,delLevelChangePer,levelModCommit,addLevelModToRangeFile,
changeLevelAudit,changeLevelWithDraw,
getMemberInfoModRange,commitGroupChange,delGroupChange,
getChangeGroupByRangeId,groupInfoMod,addGroupInfoModeToRange,
groupChangeEditMod,groupChangeAudit,extractInfoFromChinaIdCard
}
\ No newline at end of file
......
......@@ -29,7 +29,7 @@ function h5LoginAuto() {
return h5Login(userName)
} else {
uni.redirectTo({
url: '/pages/index/login'
url: '/login/login'
})
}
}
......@@ -81,8 +81,10 @@ function getInfo() {
method: 'get'
}).then(res => {
const app = getApp()
const user = res.data.user
uni.setStorageSync('userName', user.userName)
const user = res.data.user
// const personInfo = res.data.personInfo
uni.setStorageSync('userName', user.userName)
// uni.setStorageSync('perId', personInfo.perId||-1)
app.globalData.deptType = user.dept.deptType
switch (user.dept.deptType) {
case '1': // 中跆协
......
This diff could not be displayed because it is too large.
......@@ -24,8 +24,9 @@ function getHeaders() {
const token = getToken()
const header = {
'Authorization': token,
'Content-Type': 'application/json' // 根据自己的数据类型
'Content-Type': 'application/json', // 根据自己的数据类型
// "Content-Type":"application/x-www-form-urlencoded",
'Ztx-Per-Id': uni.getStorageSync('perId') || '-1'
}
return header
}
......@@ -41,11 +42,11 @@ const request = function(req) {
}
// if (req.method === 'GET') {
// if (!req.params) {
// req.params = {}
// }
// req.params.pageNum = req.params.pageNum || 1
// req.params.pageSize = req.params.pageSize || 50
// if (!req.params) {
// req.params = {}
// }
// req.params.pageNum = req.params.pageNum || 1
// req.params.pageSize = req.params.pageSize || 50
// }
// if (req.method == 'POST' && !req.hideLoding) {
......@@ -70,27 +71,27 @@ const request = function(req) {
resolve(data)
} else {
// if (!excludeUrls.includes(req.url)) {
// if (data.msg) {
// uni.showModal({
// content: data.msg,
// success: function(res) {
// if (data.msg) {
// uni.showModal({
// content: data.msg,
// success: function(res) {
// }
// })
uni.showToast({
title: data.msg,
icon: 'none',
duration: 2000
})
// }
// uni.hideLoading()
// }
// })
uni.showToast({
title: data.msg,
icon: 'none',
duration: 2000
})
// }
// uni.hideLoading()
// }
// 登录超时
if (data.code === 60002 || data.code === 60001) {
uni.redirectTo({
url: '/pages/index/login'
url: '/login/login'
})
} else if (data.code === 401) {
h5LoginAuto()
......
......@@ -2,12 +2,15 @@
// const baseUrl_api = 'https://research.wtwuxicenter.com/';
// staging
// staging 会员系统
// const baseUrl_api = "http://22yidpjzjifv.ngrok.xiaomiqiu123.top/stage-api/";
// const baseUrl_api = "http://123.60.96.243//stage-api/";
// const baseUrl_api = 'http://192.168.1.11:8787'
const baseUrl_api = 'https://ztx.itechtop.cn/stage-api'
// const baseUrl_api = "http://123.60.96.243/stage-api/";
const baseUrl_api = 'http://192.168.1.11:8787'
// const baseUrl_api = 'https://ztx.itechtop.cn/stage-api'
// const baseUrl_api = 'https://newsystem.taekwondo.org.cn/stage-api/'
// train
// const baseUrl_api = 'http://192.168.1.25:8686'
export default {
baseUrl_api
......
......@@ -4,7 +4,7 @@
<view class="invertedbtn-red" @click="gochose">+ 在线选择</view>
</view>
<uni-swipe-action>
<uni-swipe-action-item class="personitem" v-for="n in list">
<uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index">
<view class="content-box">
<view style="width: 70%;">
<view>{{n.memberName}}
......@@ -60,7 +60,7 @@
<uni-popup ref="pickView" type="bottom">
<view class="pickViewBox">
<view v-for="n in yearlist" @click="bindyear(n)">
<view v-for="(n,index) in yearlist" :key="index" @click="bindyear(n)">
{{n.text}}<uni-icons v-show="n.value == (nowYear)" type="checkmarkempty" size="20"
color="green"></uni-icons>
</view>
......@@ -255,7 +255,7 @@
box-sizing: border-box;
margin-bottom: 30rpx;
.content-box {
.content-box {background: #fff;
display: flex;
align-items: center;
padding: 16rpx;
......
<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>{{statistical.personCount}}</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)">
{{item.code}}-{{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==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:'',
ztxFlag: '1'
})
const list = ref([])
const statistical = ref({
personCount: 0
})
const total = ref(0)
onShow(()=>{
getList()
})
function getList(){
uni.showLoading({
title:'加载中'
})
statistical.value.personCount = 0
api.getMemberInfoModRange(queryParams.value).then(res=>{
list.value = res.rows
list.value.forEach(item => {
statistical.value.personCount += (item.count * 1)
})
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/group/changeGroupDetail?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.groupChangeAudit(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>
<uni-collapse>
<uni-collapse-item :title="n.newName" v-for="n in list" :key="n.id" open>
<view class="collapseBody">
<view>
<label>会员编号:</label>
<text>{{n.memCode}}</text>
</view>
<view>
<label>团体会员名称:</label>
<view>
{{n.oldName}}
<text class="text-primary" v-if="n.oldName!=n.newName">变更为 </text>
<text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text>
</view>
</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 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.getChangeGroupByRangeId(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 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 {
padding: 0 30rpx;
box-sizing: border-box;
font-size: 28rpx;
&>view {
margin: 0 0 20rpx;display: flex;
label {
width: 7em;
color: #999;
display: inline-block;
text-align: right;flex:0 0 auto;
}
view{flex:1 1 auto;}
}
}
.popBody {
background: #fff;
padding: 30rpx;
}
</style>
\ No newline at end of file
<template>
<view>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.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)">
{{item.code}}-{{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 @click="handleUpdate(item)">编辑</button>
<button @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 = `/group/newChange`
uni.navigateTo({
url: path
});
}
function getList(){
uni.showLoading({
title:'加载中'
})
queryParams.value.memId = app.globalData.memberInfo.memId
api.getMemberInfoModRange(queryParams.value).then(res=>{
list.value = res.rows
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/group/changeGroupDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleUpdate(item){
// 编辑
let path = `/group/newChange?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function commitFN(row){
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
if (res.confirm) {
api.commitGroupChange(row.id).then(Response=>{
uni.showToast({
icon:"none",
title:'提交成功!'
})
getList()
})
}
}
})
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定删除吗`,
success: function(res) {
if (res.confirm) {
api.delGroupChange([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 class="hasfixedbottom">
<view class="flexbox mb30">
<button class="btn-red-kx mini w100" @click="chooseOnline">
<uni-icons type="personadd" size="16" color="#AD181F"></uni-icons>
在线选择</button>
</view>
<uni-swipe-action>
<uni-swipe-action-item class="personitem" v-for="n in list" :key="n.id">
<uni-collapse>
<uni-collapse-item :title="n.oldName" open>
<view class="collapseBody">
<view v-if="n.memCode">
<label>会员编号:</label>
{{n.memCode}}
</view>
<view>
<label>团体会员名称:</label>
{{n.oldName}}
<text class="text-primary" @click="handleChange(n,'newName')">变更 </text>
<text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text>
</view>
<view style="display: flex;">
<label><text class="text-danger">*</text>附件:</label>
<view class="content">
<uni-file-picker limit="1" v-model="n.fileUrl" file-extname="png,jpg,jpeg,pdf,zip"
file-mediatype="all" @select="selectFile(n,$event)"
@delete="delSupplementFile(n)"></uni-file-picker>
<text class="text-danger">*需上传有效资料</text>
</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
<template v-slot:right>
<view class="slot-button">
<view class="danger-button" @click="handleDelete(n)">
<uni-icons type="trash" color="#fff" size="20"></uni-icons>
<text class="slot-button-text">删除</text>
</view>
</view>
</template>
</uni-swipe-action-item>
</uni-swipe-action>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>请选择变更会员</text>
</view>
<view class="fixedBottom">
<button class="btn-red" :disabled="list?.length <= 0" @click="commitFN">保存并提交</button>
</view>
<uni-popup ref="popup" type="bottom" background-color="#fff">
<view class="popBody">
<view class="h3 text-center mb30">信息变更</view>
<uni-forms class="mt30" label-width="100">
<view style="min-height: 30vh">
<uni-forms-item label="团体会员名称:" v-show="type=='newName'">
<uni-easyinput v-model="form.newName" placeholder="请输入" />
</uni-forms-item>
</view>
</uni-forms>
<view class="text-center">
<button class="btn-red-kx" @click="submitForm(type)">保存</button>
</view>
</view>
</uni-popup>
<uni-popup ref="choseStudent" type="bottom" background-color="#fff" animation>
<view class="popBody">
<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" style="height:70vh;overflow: auto;">
<view class="item" v-for=" (n,index) in studentList" :key="index">
<view @click="checkThis(n)">
<image class="icon" v-if="n.checked"
:src="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>
<button class="btn-red-kx" v-if="studentList.length!=0" @click="handleImport">批量添加</button>
</view>
</uni-popup>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import config from '/config.js'
const queryParams = ref({})
const query = ref({})
const total = ref(0)
const list = ref([])
const popup = ref(null)
const choseStudent = ref(null)
const studentList = ref([])
const type = ref('')
const form = ref({})
onLoad((option) => {
if (option.rangeId) {
queryParams.value.rangeId = option.rangeId
getList()
}
})
onShow(() => {})
function getList() {
uni.showLoading({
title: '加载中'
})
api.getChangeGroupByRangeId(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.groupInfoMod([row.id]).then(Response => {
uni.showToast({
title: '操作成功'
})
getList()
})
}
}
})
}
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()
})
}
function getSonList(){
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()
})
}
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: queryParams.value.rangeId || '-1'
}).then(res => {
queryParams.value.rangeId = res.data
choseStudent.value.close()
getList()
})
}
function submitForm(type) {
api.groupChangeEditMod({
id: form.value.id,
newName: form.value.newName
}).then(res => {
popup.value.close()
uni.showToast({
title: '操作成功!'
})
getList()
})
}
function commitFN() {
const flag = list.value.some(item => {
if (!item.fileUrl) {
uni.showToast({
title: `请上传${item.newName}的附件`,
icon: 'none'
})
return !item.fileUrl
}
})
if (flag) return
if (form.value.rangeId == '') return
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
if (res.confirm) {
api.commitGroupChange([queryParams.value.rangeId]).then(Response => {
uni.showToast({
icon: "none",
title: '提交成功!'
})
uni.navigateBack()
})
}
}
})
}
let selectFileValue = {}
function selectFile(row, e) {
console.log(row, e)
form.value = row
let file = e.tempFiles[0]
api.uploadFile(e).then(data => {
selectFileValue = {
url: data.msg,
name: file.name,
extname: file.extname
}
console.log(selectFileValue, row.fileUrl)
uni.showLoading({
title: '上传中'
})
api.groupChangeEditMod({
id: form.value.id,
newName: form.value.newName,
fileUrl: JSON.stringify([selectFileValue])
}).then(Response => {
uni.hideLoading()
getList()
})
});
}
function delSupplementFile(row) {
selectFileValue = {}
row.fileUrl = []
}
</script>
<style scoped lang="scss">
.searchbar {
display: flex;
align-items: center;
padding:0 0 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 .item{background-color: #f4f4f4;}
.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
......@@ -47,7 +47,8 @@
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import config from '@/config.js'
import {szToHz} from '@/common/utils.js'
import {
onMounted,
ref
......@@ -58,8 +59,9 @@
import _ from 'lodash'
const queryParams = ref({
pageNum: 1,
pageSize: 20
pageSize: 10
})
const studentquery = ref({})
const paging = ref(null)
const userType = ref('')
const list = ref([])
......@@ -67,94 +69,76 @@
const total = ref(0)
const app = getApp();
onLoad((option)=>{
console.log(option)
if ('obj' in option) {
queryParams.value = JSON.parse(decodeURIComponent(option.obj))
if ('studentquery' in option) {
studentquery.value = JSON.parse(decodeURIComponent(option.studentquery))
queryParams.value.examId = studentquery.value.examId
}
if (app.globalData.isLogin) {
userType.value = app.globalData.userType
} else {
app.firstLoadCallback = () => {
userType.value = app.globalData.userType
};
}
})
onMounted(() => {
getList()
// getList()
})
function getList() {
api.getStudentList(queryParams.value).then(res => {
paging.value.complete(res.rows);
const levelArr = []
let total = 0
if(!queryParams.value.recordId){
var obj = {
if(!studentquery.value.recordId){
getVipData({
examId:queryParams.value.examId,
type:'1'
}
})
}else{
var obj = {
getVipData({
examId:queryParams.value.examId,
recordId:queryParams.value.recordId,
recordId:studentquery.value.recordId,
type:'1'
}
})
}
api.getExamPersonNum(obj).then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: key,
num: val
})
total += val
}
})
tablePersonInfo.value = {
total: total,
levelArr: _.sortBy(levelArr, (l) => {
return l.level
})
}
})
})
}
function getVipData(obj){
const levelArr = []
let total = 0
if(!queryParams.value.examId) return
api.getExamPersonNum(obj).then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: key,
num: val
})
total += val
}
})
tablePersonInfo.value = {
total: total,
levelArr: _.sortBy(levelArr, (l) => {
return l.level
})
}
})
}
function getQuery(pageNum,pageSize) {
queryParams.value.pageNum = pageNum
// if(total.value>0&&list.value.length>=total.value){
// return
// }
queryParams.value.pageNum = pageNum,
queryParams.value.pageSize = pageSize
api.getStudentList(queryParams.value).then(res=>{
paging.value.complete(res.rows);
// total.value = res.total
const levelArr = []
let total = 0
api.getExamPersonNum(queryParams.value.examId, '1').then(res=>{
_.each(res.data, (val, key) => {
if (val > 0) {
levelArr.push({
level: key,
num: val
})
total += val
}
})
tablePersonInfo.value = {
total: total,
levelArr: _.sortBy(levelArr, (l) => {
return l.level
})
}
total.value = res.total
getVipData({
examId:queryParams.value.examId,
type:'1'
})
})
}
function szToHz(num) {
const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
return hzArr[parseInt(num)]
}
</script>
......
......@@ -44,7 +44,8 @@
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import config from '@/config.js'
import {szToHz} from '@/common/utils.js'
import {
ref,
getCurrentInstance
......@@ -80,12 +81,6 @@
})
}
function szToHz(num) {
const hzArr = ['〇', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十']
return hzArr[parseInt(num)]
}
function sendCert(row) {
let msg
if(row.isCert==1){
......
......@@ -139,7 +139,7 @@ function register() {
}
function goLogin() {
let path = '/pages/index/login';
let path = '/login/login';
uni.navigateTo({
url: path
});
......@@ -225,7 +225,7 @@ function timeup() {
}
.formbox {
background: #fff;
background: #fff;box-sizing: border-box;
width: 700rpx;
padding: 30rpx 50rpx;
margin: auto;
......
......@@ -38,10 +38,7 @@
"quickapp" : {},
/* 小程序特有相关 */
"mp-weixin" : {
"appid" : "wx70f16625f10de4fe", //J系统
// "appid" : "wx70f16625f10de4fe",//新跆联
// "appid" : "wx5e2471ed6210c3a6",
"appid" : "wx523ee37fff4fea9d",
"setting" : {
"urlCheck" : false,
"minified" : false,
......
......@@ -11,20 +11,6 @@
}
},
{
"path": "pages/index/login",
"style": {
"navigationBarTitleText": "登录",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/index/register",
"style": {
"navigationBarTitleText": "注册",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "pages/index/msgList",
"style": {
"navigationBarTitleText": "待办列表",
......@@ -114,7 +100,25 @@
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTitleText": "中跆协-工作台"
},
"subPackages": [{
"subPackages": [
{
"root": "login",
"pages": [{
"path": "login",
"style": {
"navigationBarTitleText": "登录",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}, {
"path": "register",
"style": {
"navigationBarTitleText": "注册",
"enablePullDownRefresh": false,
"navigationStyle": "custom"
}
}]
},{
"root": "personalVip",
"pages": [{
"path": "addVip",
......@@ -230,6 +234,70 @@
"navigationBarTitleText": "会员缴费人员列表",
"enablePullDownRefresh": false
}
},
{
"path" : "changeVip",
"style" :
{
"navigationBarTitleText" : "会员信息变更",
"enablePullDownRefresh" : false
}
},
{
"path" : "addChange",
"style" :
{
"navigationBarTitleText" : "新增变更",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeVipDetail",
"style" :
{
"navigationBarTitleText" : "详情",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeVipAudit",
"style" :
{
"navigationBarTitleText" : "会员信息变更审核",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeLevel",
"style" :
{
"navigationBarTitleText" : "级位变更审核",
"enablePullDownRefresh" : false
}
},
{
"path" : "addChangeLevel",
"style" :
{
"navigationBarTitleText" : "新建级位变更",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeLevelDetail",
"style" :
{
"navigationBarTitleText" : "级位变更详情",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeLevelAudit",
"style" :
{
"navigationBarTitleText" : "级位变更审批",
"enablePullDownRefresh" : false
}
}]
}, {
"root": "group",
......@@ -327,6 +395,38 @@
"navigationBarTitleText": "会员列表",
"enablePullDownRefresh": false
}
},
{
"path" : "changeGroupInfo",
"style" :
{
"navigationBarTitleText" : "团体会员信息修改",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeGroupAudit",
"style" :
{
"navigationBarTitleText" : "团体信息变更审核",
"enablePullDownRefresh" : false
}
},
{
"path" : "changeGroupDetail",
"style" :
{
"navigationBarTitleText" : "团体信息变更详情",
"enablePullDownRefresh" : false
}
},
{
"path" : "newChange",
"style" :
{
"navigationBarTitleText" : "新建团体信息变更",
"enablePullDownRefresh" : false
}
}]
},{
"root": "level",
......@@ -429,11 +529,29 @@
"enablePullDownRefresh": false
}
}]
},{
"root": "training",
"pages":[{
"path" : "trainList",
"style" :
{
"navigationBarTitleText" : "培训列表",
"enablePullDownRefresh" : false
}
},
{
"path" : "detailPage",
"style" :
{
"navigationBarTitleText" : "培训详情",
"enablePullDownRefresh" : false
}
}]
}],
"preloadRule": {
"pages/index/index": {
"network": "all",
"packages": ["personalVip", "group","level"]
"packages": ["login","personalVip", "group","level","training"]
}
}
}
\ No newline at end of file
......
This diff could not be displayed because it is too large.
<template>
<view>
<view v-if="userType=='1'" class="girdBox f3">
<view @click="goPath('/pages/rank/approval?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/19.png'" />段位考试审核
</view>
<view @click="goPath('/pages/rank/scoreApproval?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/19.png'" />考段成绩审核
</view>
<view @click="goPath('/level/ztx/cert?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/20.png'" />考段证书发布
</view>
<view @click="goPath('/pages/rank/approval?type=3')">
<image :src="config.baseUrl_api+'/fs/static/icon/21.png'" />越段考试审核
</view>
......@@ -12,6 +21,16 @@
</view>
</view>
<view class="girdBox" v-if="userType=='2'">
<view @click="goPath('/group/feeBill')">
<image :src="config.baseUrl_api+'/fs/static/icon/17.png'" />团体会员缴费单
</view>
<view @click="goPath('/level/approval')">
<image :src="config.baseUrl_api+'/fs/static/icon/3.png'" />级位考试审核
</view>
<view @click="goPath('/pages/exam/payment?type=1')">
<image :src="config.baseUrl_api+'/fs/static/icon/10.png'" />级位考试缴费单
</view>
<view @click="goPath('/pages/rank/apply?type=2')">
<image :src="config.baseUrl_api+'/fs/static/icon/11.png'" />段位考试申请
</view>
......
......@@ -2,10 +2,10 @@
<view class="hasfixedbottom">
<view class="nolineform">
<uni-forms :border="true" :modelValue="baseFormData" label-width="120">
<uni-forms-item label="姓名" required name="name">
<!-- <uni-forms-item label="姓名" required name="name">
<uni-easyinput :styles="inputstyle" :clearable='false' :placeholderStyle="placeholderStyle"
v-model="baseFormData.name" placeholder="请输入姓名" />
</uni-forms-item>
</uni-forms-item> -->
<uni-forms-item label="证件类型" required name="idcType">
<uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList"
:clear="false"></uni-data-select>
......@@ -25,7 +25,7 @@
<view>人数合计 <text class="text-danger"> {{ total}} </text></view>
</view>
<uni-swipe-action>
<uni-swipe-action-item class="personitem" v-for="n in list">
<uni-swipe-action-item class="personitem" v-for="(n,index) in list" :key="index">
<view class="content-box" @click="handleInfo(n)">
<view class="flexbox">
<view class="photobox">
......@@ -84,6 +84,10 @@
{
value: '3',
text: "外国护照"
},
{
value: '4',
text: "其他"
}
])
const baseFormData = ref({
......@@ -104,13 +108,13 @@
})
// 查询会员
function selectMember() {
if (!baseFormData.value.name) {
uni.showToast({
title: '请输入姓名',
icon: 'none'
})
return
}
// if (!baseFormData.value.name) {
// uni.showToast({
// title: '请输入姓名',
// icon: 'none'
// })
// return
// }
if (!baseFormData.value.idcCode) {
uni.showToast({
......@@ -120,7 +124,7 @@
return
}
baseFormData.value.fromTransfer = '1'
api.pickUp(baseFormData.value).then(res => {
baseFormData.value.perId = res.data.perId
baseFormData.value.ancestorNameList = res.data.ancestorNameList
......@@ -134,13 +138,13 @@
}
function submitForm() {
if (!baseFormData.value.name) {
uni.showToast({
title: '请输入姓名',
icon: 'none'
})
return
}
// if (!baseFormData.value.name) {
// uni.showToast({
// title: '请输入姓名',
// icon: 'none'
// })
// return
// }
if (!baseFormData.value.idcCode) {
uni.showToast({
......@@ -165,8 +169,8 @@
title:'新增成功'
})
}
baseFormData.value.rangeId = res.data
queryParams.value.rangeId = res.data
baseFormData.value.rangeId = res.data.rangeId
queryParams.value.rangeId = res.data.rangeId
flag.value = true
baseFormData.value.idcType = '0'
baseFormData.value.idcCode = ''
......
......@@ -13,7 +13,7 @@
v-model="baseFormData.name" placeholder="请输入姓名" />
</uni-forms-item>
<uni-forms-item label="证件类型" required name="idcType">
<uni-data-select v-model="baseFormData.idcType" :localdata="idcTypeList"></uni-data-select>
<uni-data-select v-model="baseFormData.idcType" :clearable="false" :disabled="current === 0" :localdata="idcTypeList"></uni-data-select>
</uni-forms-item>
<uni-forms-item label="证件照" required name="picUrl" v-show="current === 1">
<view class="upCard">
......@@ -54,11 +54,8 @@
<uni-forms-item label="头像" required name="photo">
<uni-file-picker v-model="photoArr" @delete="delPhoto" return-type="object" limit="1"
@select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker>
@select="upPhoto" :del-ico="false" :image-styles="imageStylesTx"></uni-file-picker>
</uni-forms-item>
</view>
......@@ -105,6 +102,18 @@
<button @click="closepopup" class="btn-red">我已阅读</button>
</view>
</uni-popup>
<uni-popup ref="infoConfirm" type="center">
<view class="tt">确认信息</view>
<view class="popBody">
<view>
</view>
<button @click="closepopup" class="btn-red">已确认</button>
</view>
</uni-popup>
</view>
</template>
......@@ -118,7 +127,8 @@
} from '@dcloudio/uni-app'
import config from '@/config.js'
const current = ref(0)
const popup = ref(null)
const popup = ref(null)
const infoConfirm = ref(null)
const agree = ref(false)
const perId = ref()
const photoArr = ref([])
......@@ -141,11 +151,7 @@
{
value: '3',
text: "外国护照"
},
{
value: '4',
text: "其它"
}, {
},{
value: '5',
text: '户口本'
}
......@@ -194,6 +200,9 @@
function onClickItem(e) {
if (current.value != e.currentIndex) {
current.value = e.currentIndex
}
if(current.value==0){
baseFormData.value.idcType = '0'
}
}
......@@ -248,31 +257,71 @@
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'
}
}
// 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'
// }
// }
//如果老会员
api.extractInfoFromChinaIdCard({
idcCode:baseFormData.value.idcCode,
idcType:baseFormData.value.idcType,
perType:baseFormData.value.perType,
}).then(res=>{
perId.value = res.data.perId
baseFormData.value.sex = res.data.sex
baseFormData.value.birth = res.data.birth
baseFormData.value.phone = res.data.phone
baseFormData.value.cityId = res.data.cityId
baseFormData.value.address = res.data.address
photoArr.value = []
if(res.data.photo){
baseFormData.value.photo = res.data.photo
let obj = {
url: config.baseUrl_api + res.data.photo,
name:'头像',
extname:'jpg'
}
photoArr.value.push(obj)
}
baseFormData.value.name = res.data.name
baseFormData.value.perId = res.data.perId
})
}
}
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
}
}
}
function changeSex(e) {
......@@ -320,9 +369,22 @@
})
return
}
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
}
}
//信息确认弹出
uni.showModal({
content: '确认信息正确',
content: '确认信息正确',
success: function(res) {
if (res.confirm) {
api.addPersonToMyDept(baseFormData.value).then(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)">
{{item.code}}-{{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 @click="handleUpdate(item)">编辑</button>
<button @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/addChangeLevel`
uni.navigateTo({
url: path
});
}
function getList(){
uni.showLoading({
title:'加载中'
})
api.getChangelevelList(queryParams.value).then(res=>{
list.value = res.rows
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/personalVip/changeLevelDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleUpdate(item){
// 编辑
let path = `/personalVip/addChangeLevel?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function commitFN(row){
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
if (res.confirm) {
api.commitLevelChange(row.id).then(Response=>{
uni.showToast({
icon:"none",
title:'提交成功!'
})
getList()
})
}
}
})
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定删除吗`,
success: function(res) {
if (res.confirm) {
api.levelModRangeDelete([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>{{statistical.personCount}}</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)">
{{item.code}}-{{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==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 statistical = ref({
personCount: 0
})
const total = ref(0)
onShow(() => {
getList()
})
function getList() {
uni.showLoading({
title: '加载中'
})
statistical.value.personCount = 0
api.getChangelevelList(queryParams.value).then(res => {
list.value = res.rows
list.value.forEach(item => {
statistical.value.personCount += (item.count * 1)
})
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item) {
let path = `/personalVip/changeLevelDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleDelete(row) {
uni.showModal({
title: '提示',
content: `确定撤回吗`,
success: function(res) {
if (res.confirm) {
api.changeLevelWithDraw([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.changeLevelAudit(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>
\ No newline at end of file
<template>
<view>
<view class="wBox">
<uni-collapse>
<uni-collapse-item v-for="n in list" :key="n.id" :border="false"
:title="n.perName+' - '+ szToHz(n.oldJi)+'级'" title-border="none" open>
<view class="collapseBody">
<view>
<label>变更后级别: </label>
<view class="content">
{{szToHz(n.newJi)}}
</view>
</view>
<view>
<label>变更理由: </label>
<view class="content">
{{reasonArr[Number(n.reason)-1]?.text}}
</view>
</view>
<view>
<label>附件: </label>
<view class="content">
<view class="text-primary" @click="showImg(n)">
查看附件
</view>
</view>
</view>
<view>
<label>级位编号: </label>
<view class="content">
{{n.examPersonData.certCode}}
</view>
</view>
<view>
<label>证件类型: </label>
<view class="content">{{idcTypeList[n.idcType]?.text}}</view>
</view>
<view>
<label>证件编号: </label>
<view class="content">{{n.idcCode}}</view>
</view>
<view>
<label>通过日期: </label>
<view class="content">{{n.examPersonData.certTime.slice(0,10)}}</view>
</view>
</view>
</uni-collapse-item>
</uni-collapse>
</view>
</view>
</template>
<script setup>
import {
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
import {
szToHz
} from '@/common/utils.js'
import * as api from '@/common/api.js'
import config from '../config';
const inputstyle = ref({
borderColor: '#fff',
fontSize: '30rpx'
})
const placeholderStyle = ref('text-align: right;font-size:30rpx')
const levelArr = ref([{
text: '九级',
value: '9'
},
{
text: '八级',
value: '8'
},
{
text: '七级',
value: '7'
},
{
text: '六级',
value: '6'
},
{
text: '五级',
value: '5'
},
{
text: '四级',
value: '4'
},
{
text: '三级',
value: '3'
},
{
text: '二级',
value: '2'
},
{
text: '一级',
value: '1'
}
])
const reasonArr = ref([{
text: '报错级位',
value: '1'
},
{
text: '以前有级位无法报下一级',
value: '2'
},
{
text: '其它',
value: '3'
}
])
const idcTypeList = ref([{
value: '0',
text: "身份证"
},
{
value: '1',
text: "港澳台通信身份证"
},
{
value: '2',
text: "中国护照"
},
{
value: '3',
text: "外国护照"
},
{
value: '4',
text: "其它"
},
{
value: '5',
text: "户口本"
}
])
const baseFormData = ref({
idcType: '0'
})
const list = ref([])
const levelList = ref([])
const total = ref(0)
const flag = ref(true)
const popup = ref(null)
const queryParams = ref({
rangeId: ''
})
onLoad((option) => {
if (option.rangeId) {
baseFormData.value.rangeId = option.rangeId
queryParams.value.rangeId = option.rangeId
}
})
onShow(() => {
if (queryParams.value.rangeId != '') {
getList()
}
})
// 查询会员
function selectMember() {
if (!baseFormData.value.idcCode) {
uni.showToast({
title: '请输入证件号',
icon: 'none'
})
return
}
api.pickUpByPersonInfo(baseFormData.value).then(res => {
if (res.data.length == 0) {
uni.showModal({
title: '提示',
content: '该会员无级位考试记录',
success: function(res) {}
})
return
}
levelList.value = res.data
popup.value.open()
})
}
function submitForm() {
if (!baseFormData.value.name) {
uni.showToast({
title: '请输入姓名',
icon: 'none'
})
return
}
if (!baseFormData.value.idcCode) {
uni.showToast({
title: '请输入证件号',
icon: 'none'
})
return
}
api.addTransferToRange({
rangeId: baseFormData.value.rangeId || -1,
personIdArray: baseFormData.value.personIdArray
}).then(res => {
if (res.data.result == 0) {
uni.showModal({
content: res.data?.list?.[0]?.msg,
success: function(res) {
}
})
} else {
uni.showToast({
title: '新增成功'
})
}
baseFormData.value.rangeId = res.data
queryParams.value.rangeId = res.data
flag.value = true
baseFormData.value.idcType = '0'
baseFormData.value.idcCode = ''
baseFormData.value.name = ''
getList()
})
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getLevelChangeAddList(queryParams.value).then(Response => {
list.value = Response.rows
for (var item of list.value) {
item.examPersonData = JSON.parse(item.examPersonData)
if (item.fileUrl) {
item.fileUrl = JSON.parse(item.fileUrl)
}
}
total.value = Response.total
uni.hideLoading()
})
}
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">
.wBox {
width: 700rpx;
margin: 20rpx auto 0;
background: #FFFFFF;
box-shadow: 0rpx 12rpx 116rpx 0rpx rgba(196, 203, 214, 0.1);
border-radius: 15rpx;
.tt {
color: #0A1629;
font-size: 30rpx;
}
}
.danger-button {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.collapseBody {
padding: 0 30rpx 50rpx;
box-sizing: border-box;
font-size: 28rpx;
}
.collapseBody>view {
margin: 0 0 20rpx;
display: flex;
align-items: baseline;
label {
width: 6em;
color: #999;
display: inline-block;
// text-align: right;
flex: 0 0 auto;
}
.content {
flex: 1 1 auto;
padding-left: 10rpx;
}
}
.button-group {
text-align: right;
button {
margin-left: 30rpx;
}
}
.h3 {
padding: 20rpx 0;
}
:deep(.uni-list-item__extra-text) {
color: #1561CB;
}
.popBody {
max-height: 60vh;
overflow: auto;
}
:deep(.uni-forms-item__inner) {
padding-bottom: 20rpx;
align-items: baseline;
}
// :deep(.uni-forms-item__label){
// padding: 0;height: auto;
// }
// :deep(.uni-forms-item__content){
// min-height: auto;
// }
.collapseTitle {
padding: 20rpx;
.name {
font-size: 30rpx;
}
.date {
color: #999;
font-size: 28rpx;
}
}
:deep(.file-picker__progress) {
opacity: 0;
}
</style>
\ No newline at end of file
<template>
<view>
<view class="searchbar">
<uni-easyinput placeholderStyle="font-size:30rpx" :input-border="false" prefixIcon="search"
v-model="queryParams.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)">
{{item.code}}-{{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 @click="handleUpdate(item)">编辑</button>
<button @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/addChange`
uni.navigateTo({
url: path
});
}
function getList(){
uni.showLoading({
title:'加载中'
})
api.getInfoModRange(queryParams.value).then(res=>{
list.value = res.rows
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/personalVip/changeVipDetail?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function handleUpdate(item){
// 编辑
let path = `/personalVip/addChange?rangeId=${item.id}`
uni.navigateTo({
url: path
});
}
function commitFN(row){
uni.showModal({
title: '提示',
content: `确定提交吗`,
success: function(res) {
if (res.confirm) {
api.commitPersonalChange(row.id).then(Response=>{
uni.showToast({
icon:"none",
title:'提交成功!'
})
getList()
})
}
}
})
}
function handleDelete(row){
uni.showModal({
title: '提示',
content: `确定删除吗`,
success: function(res) {
if (res.confirm) {
api.delPersonalChange([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>{{statistical.personCount}}</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)">
{{item.code}}-{{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==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 statistical = ref({
personCount: 0
})
const total = ref(0)
onShow(()=>{
getList()
})
function getList(){
uni.showLoading({
title:'加载中'
})
api.getInfoModRange(queryParams.value).then(res=>{
list.value = res.rows
list.value.forEach(item => {
statistical.value.personCount += (item.count * 1)
})
total.value = res.total
uni.hideLoading()
})
}
function goDetail(item){
let path = `/personalVip/changeVipDetail?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.personChangeAudit(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>
<uni-collapse>
<uni-collapse-item :title="n.personCode+' - '+n.oldName" v-for="n in list" :key="n.id" open>
<view class="collapseBody">
<view>
<label>姓名:</label>
{{n.oldName}}
<text class="text-primary" v-if="n.oldName!=n.newName">变更为 </text>
<text class="text-danger" v-if="n.oldName!=n.newName">{{ n.newName }}</text>
</view>
<view>
<label>性别:</label>
{{ n.oldSex==0?'男':'女' }}
<text class="text-primary" v-if="n.oldSex!=n.newSex">变更为 </text>
<text class="text-danger" v-if="n.oldSex!=n.newSex">{{ n.newSex==0?'男':'女' }}</text>
</view>
<view>
<label>证件类型:</label>
{{ cardType[n.oldIdcType].label }}
<text class="text-primary" v-if="n.oldIdcType!=n.newIdcType">变更为 </text>
<text class="text-danger" v-if="n.oldIdcType!=n.newIdcType">{{ cardType[n.newIdcType].label }}
</text>
</view>
<view>
<label>证件号:</label>
{{ n.oldIdcCode }}
<text class="text-primary" v-if="n.oldIdcCode!=n.newIdcCode">变更为 </text>
<text class="text-danger" v-if="n.oldIdcCode!=n.newIdcCode">{{ n.newIdcCode }}</text>
</view>
<view>
<label>出生日期:</label>
{{ n.oldBirth?.slice(0,10) }}
<text v-if="n.oldBirth!=n.newBirth" class="text-gray">变更为 </text>
<text class="text-danger" v-if="n.oldBirth!=n.newBirth">{{ n.newBirth?.slice(0,10) }}</text>
</view>
<view v-if="n.fileUrl">
<label>附件: </label>
<text class="text-primary" @click="showImg(n)">
查看附件
</text>
</view>
<view>
<label>会员状态:</label>
<text class="text-primary" v-if="n.personCertStage==0">
新会员
</text>
<text class="text-primary" v-if="n.personCertStage==1">
待提交
</text>
<text class="text-warning" v-if="n.personCertStage==2">
缴费中
</text>
<text class="text-success" v-if="n.personCertStage==3">
正常
</text>
<text class="text-danger" v-if="n.personCertStage==4">
过期
</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 config from '@/config.js'
const queryParams = ref({})
const total = ref(0)
const list = ref([])
const popup = ref(null)
const type = ref('')
const form = ref({})
const cardType = ref([{
label: '身份证',
value: '0'
},
{
label: '港澳台通行证 ',
value: '1'
},
{
label: '中国护照',
value: '2'
},
{
label: '外国护照',
value: '3'
},
{
label: '其它',
value: '4'
},
{
label: '户口本',
value: '5'
}
])
onLoad((option) => {
if (option.rangeId) {
queryParams.value.rangeId = option.rangeId
getList()
}
})
function getList() {
uni.showLoading({
title: '加载中'
})
api.addInfoModeList(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 {
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
......@@ -3,7 +3,7 @@
<!-- 查看缴费单+上传凭证 -->
<!-- 缴费审核 -->
<view class="appList">
<view class="appItem" v-for="item in list">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item.record.auditStatus==0" class="text-primary">审核中</text>
<text v-if="item.record.auditStatus==1" class="text-success"> 审核通过</text>
......
......@@ -45,7 +45,10 @@
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
......@@ -68,7 +71,6 @@
const total = ref(0)
const navs = ref(['待提交', '审核中', '审核通过', '审核拒绝'])
onShow(() => {
console.log('123')
getList()
})
......
<template>
<view class="box">
<view class="box1">
<view class="title">
<view class="title-left">{{ porps.title }}</view>
<view class="title-icon" @click="changFN">
<uni-icons type="top" color="#95a1a6" v-if="show"></uni-icons>
<uni-icons type="bottom" color="#95a1a6" v-else></uni-icons>
</view>
</view>
<view class="conter-liner-cost">
<view class="liner-left">{{ porps.text }}&nbsp;&nbsp; 合计:</view>
<view class="liner-right">{{ porps.cost }}</view>
</view>
</view>
<view class="box2" v-show="show"><slot></slot></view>
</view>
</template>
<script setup>
import { ref } from 'vue';
const porps = defineProps({
title: String,
text: String,
cost: String
});
const show = ref(false);
function changFN() {
show.value = !show.value;
}
</script>
<style lang="scss" scoped>
.box {
margin: 0;
padding: 0 25rpx;
.box1 {
margin-bottom: 23rpx;
margin-top: 35rpx;
.title {
display: flex;
justify-content: space-between;
margin-bottom: 10rpx;
.title-left {
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 500;
color: #2b3133;
}
}
.conter-liner-cost {
display: flex;
.liner-left {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
color: #7b7f83;
}
.liner-right {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
color: #ff8124;
}
}
}
.box2 {
border-top: 1rpx solid #e6e6e6;
}
}
</style>
<template>
<view class=" conter-box">
<view class="box" v-if="props.trainProjectsList.length != 0">
<view class="text">培训科目</view>
<view class="box2">
<checkbox-group>
<view class="box-check" v-for="item in props.trainProjectsList" :key="item.id">
<view class="">
<view class="title">{{ item.projectName }}</view>
<view class="content">
{{ item.isNecessary == 1 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
<view class="span">{{ item.cost }}</view>
</view>
</view>
<view class="checkbox">
<checkbox
:disabled="item.isNecessary == 1"
:value="item.id"
@click="checkTrain(item)"
:checked="item.check"
/>
</view>
</view>
</checkbox-group>
</view>
</view>
<view class="box" v-if="props.examProjectsList.length != 0">
<view class="text">考试科目</view>
<view class="box2">
<checkbox-group>
<view class="box-check" v-for="item in props.examProjectsList" :key="item.id">
<view class="">
<view class="title">{{ item.projectName }}</view>
<view class="content">
{{ item.isNecessary == 1 ? '必选' : '非必选' }}&nbsp;&nbsp;合计:
<view class="span">{{ item.cost }}</view>
</view>
</view>
<view class="checkbox">
<checkbox
:disabled="item.isNecessary == 1"
:value="item.id"
@click="checkTrain(item)"
:checked="item.check"
/>
</view>
</view>
</checkbox-group>
</view>
</view>
</view>
<view class="foot">
<view class="button1" @click="upFN">上一步</view>
<view class="button" @click="nextFN">下一步</view>
</view>
<view class="nodata " v-if="props.examProjectsList.length == 0 && props.trainProjectsList.length == 0">
没有培训科目
</view>
</template>
<script setup>
import { forEach } from 'lodash';
import { ref, getCurrentInstance, reactive, toRefs } from 'vue';
const props = defineProps({
trainProjectsList: {},
examProjectsList: {},
hotelList: {},
id: {}
});
const data = reactive({
projectIdsArray: []
});
const examIdsArry = ref([]);
const { projectIdsArray } = toRefs(data);
const emit = defineEmits(['nextFN']);
const checkbox1 = ref([0]);
function checkTrain(item) {
if (item.isNecessary == 1) {
item.check = true;
} else {
item.check = !item.check;
}
}
// 上一步
function upFN() {
emit('nextFN', 0);
}
// 下一步
function nextFN() {
let falg = true;
let arr1 = [];
let arr2 = [];
props.examProjectsList.forEach(item => {
if (item.check) {
arr1.push(item.id);
}
});
props.trainProjectsList.forEach(item => {
if (item.check) {
arr2.push(item.id);
}
});
let examList = JSON.parse(JSON.stringify(props.examProjectsList));
let trainList = JSON.parse(JSON.stringify(props.trainProjectsList));
examList.concat(trainList).forEach(item => {
if (item.isNecessary == 1 && item.check == false) {
falg = false;
}
});
if (falg) {
examIdsArry.value = arr1;
projectIdsArray.value = arr2;
if (props.hotelList.length == 0) {
// 没有酒店直接报名
// 页面跳转
let path = `/pages/train/costBreakdown/costBreakdown?id=` + props.id;
wx.navigateTo({
url: path
});
} else {
emit('nextFN', 2, projectIdsArray.value, examIdsArry.value);
}
} else {
uni.showToast({
title: '请选择必选科目!',
duration: 2000,
icon: 'error'
});
return false;
}
}
</script>
<style scoped lang="scss">
.nodata {
background: url(/static/nodata.png) no-repeat;
background-size: 100%;
width: 100%;
height: 835rpx;
color: #aaa59f;
font-size: 50rpx;
}
.conter-box {
padding-bottom: 100rpx;
}
.box {
padding: 34rpx 25rpx;
background-color: #f4f6fa;
padding-bottom: 0;
.box2 {
background-color: #fff;
border-radius: 15rpx;
margin-top: 20rpx;
}
.text {
height: 29px;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 500;
color: #000000;
line-height: 62rpx;
}
.box-check {
padding: 40rpx;
display: flex;
justify-content: space-between;
border-bottom: 1rpx solid #e6e6e6;
padding-bottom: 20rpx;
:deep(.checkbox__inner) {
background-color: #d9d9d9 !important;
border-color: #d9d9d9 !important;
border-radius: 50% !important;
width: 45rpx !important;
height: 45rpx !important;
line-height: 40rpx;
}
.text {
font-size: 12px;
color: #666;
margin-top: 5px;
}
.title {
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #2b3133;
margin-bottom: 10rpx;
}
.content {
display: flex;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #2b3133;
.span {
color: #ff8124;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
}
}
}
:deep(.checkbox__inner-icon) {
position: absolute !important;
top: 4px !important;
left: 7px !important;
color: #000 !important;
}
:deep(.uni-data-checklist .checklist-group .checklist-box) {
margin-right: 0;
}
}
.conter-button {
position: absolute;
left: 0;
bottom: 10rpx;
width: 100%;
display: flex;
justify-content: center;
.button {
height: 80rpx;
width: 500rpx;
text-align: center;
font-size: 32rpx;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
line-height: 80rpx;
background: linear-gradient(270deg, #54e1b9, #00caa6);
border-radius: 40rpx;
}
}
.foot {
display: flex;
background-color: #ffffff;
padding: 20rpx 0;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
.button {
margin: 0 auto;
height: 80rpx;
width: 300rpx;
text-align: center;
font-size: 32rpx;
font-family: PingFang SC;
font-weight: 500;
color: #ffffff;
line-height: 80rpx;
background: linear-gradient(270deg, #54e1b9, #00caa6);
border-radius: 40rpx;
}
.button1 {
margin: 0 auto;
height: 80rpx;
width: 300rpx;
text-align: center;
font-size: 32rpx;
font-family: PingFang SC;
font-weight: 500;
line-height: 80rpx;
background: #fff;
border-radius: 40rpx;
border: 1px solid #2ed981;
color: #2ed981;
}
}
</style>
<template>
<view class="box">
<view class="liner" v-for="item in props.scheduleList" :key="item.id">
<view class="timer">
<uni-icons custom-prefix="iconfont" type="icon-ai253" color="#1ec886" size="20"></uni-icons>
&nbsp; {{ item.dayStr }} 10:00-12:00
</view>
<view class="conetr">{{ item.event }}</view>
<view class="data">
<uni-icons custom-prefix="iconfont" type="icon-loufangfangzi"></uni-icons>
{{ item.place }}
</view>
</view>
<view class="nodata" v-if="props?.scheduleList?.length == 0">你还没有日程安排</view>
</view>
</template>
<script setup>
import { ref, getCurrentInstance, reactive, toRefs } from 'vue';
const props = defineProps({
scheduleList: {}
});
</script>
<style scoped lang="scss">
.nodata {
background: url(/static/nodata.png) no-repeat;
background-size: 100%;
width: 100%;
height: 835rpx;
color: #aaa59f;
font-size: 50rpx;
}
.box {
padding-top: 25rpx;
.liner {
margin-bottom: 20rpx;
background-color: #fff;
border-radius: 15rpx;
padding: 20rpx;
}
.timer {
display: flex;
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
color: #1ec886;
}
.conetr {
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #2b3133;
margin: 25rpx 0;
}
.data {
font-size: 28rpx;
font-family: PingFang SC;
font-weight: 400;
color: #7b7f83;
}
}
</style>
<template>
<view class="big-box">
<view class="list-box">
<view class="image">
<image class="img" referrer="no-referrer|origin|unsafe-url" :src="porps.pic" mode="aspectFill"></image>
</view>
<view class="text">
<view class="text-title">{{ porps.title }}</view>
<view class="text-card color" v-if="porps.card == '报名中'">{{ porps.card }}</view>
<view class="text-card color1" v-if="porps.card == '进行中'">{{ porps.card }}</view>
<view class="text-card color2" v-if="porps.card == '即将开始'">{{ porps.card }}</view>
<view class="text-card color3" v-if="porps.card == '已结束'">{{ porps.card }}</view>
<view class="text-card color4" v-if="porps.card == '培训未开始'">{{ porps.card }}</view>
<view class="text-card color4" v-if="porps.card == '报名未开始'">{{ porps.card }}</view>
<view class="text-timer ">报名时间:{{ porps.timer }}</view>
</view>
</view>
<view class="hr"></view>
</view>
</template>
<script setup>
const porps = defineProps({
pic: {
type: String
},
title: {
type: String
},
card: {
type: String
},
timer: {
type: String
}
});
</script>
<style lang="scss">
.big-box {
width: 100%;
padding: 25rpx 0;
.hr {
width: 100%;
border-bottom: 1rpx solid #e5e5e5;
padding-top: 25rpx;
}
.list-box {
width: 100%;
height: 180rpx;
display: flex;
.image {
width: 270rpx;
height: 180rpx;
padding-right: 25rpx;
.img {
width: 270rpx;
height: 180rpx;
border-radius: 15rpx;
}
}
.text {
margin-left: 20rpx;
.text-title {
text-align: left;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #000000;
}
.text-card {
font-size: 20rpx;
width: 110rpx;
height: 32rpx;
margin-top: 57rpx;
text-align: center;
font-family: PingFang SC;
font-weight: 400;
color: #ffffff;
border-radius: 16px 16px 16px 0px;
}
.color {
background: linear-gradient(270deg, #54e1b9, #00caa6);
}
.color1 {
background: linear-gradient(270deg, #be8efb, #a76df4);
}
.color2 {
background: linear-gradient(270deg, #fea449, #ffb95f);
}
.color3 {
background: linear-gradient(270deg, #d9d9d9, #bcbcbc);
}
.color4 {
background: linear-gradient(270deg, #40d8ee, #53a7f6);
}
.text-timer {
margin-top: 20rpx;
height: 23rpx;
font-size: 24rpx;
font-family: PingFang SC;
font-weight: 400;
color: #7b7f83;
}
}
}
}
</style>
\ No newline at end of file
<template>
<view class="big-box">
<view class="list-box">
<view class="image">
<image
class="img"
referrer="no-referrer|origin|unsafe-url"
:src="porps.item.cover"
mode="aspectFill"
></image>
</view>
<view class="text">
<view class="text-title">{{ porps.item.trainName }}</view>
<view class="text-card color1" v-if="porps.item.statusStr == '审核通过'">
{{ porps.item.statusStr }}
</view>
<view class="text-card color2" v-if="porps.item.statusStr == '待审核'">
{{
porps.item.status == '0' && porps.item.payStatus == '0'
? porps.item.payStatusStr
: porps.item.statusStr
}}
</view>
<view class="text-card color3" v-if="porps.item.statusStr == '报名失败'">
{{ porps.item.statusStr }}
</view>
<view class="text-card color3" v-if="porps.item.statusStr == '审核拒绝'">
{{ porps.item.statusStr }}
</view>
<view class="text-card color4" v-if="porps.item.statusStr == '待支付'">{{ porps.item.statusStr }}</view>
<view class="text-card color4" v-if="porps.item.statusStr == '待提交'">{{ porps.item.statusStr }}</view>
<view class="text-card color5" v-if="porps.item.statusStr == '已取消'">{{ porps.item.statusStr }}</view>
</view>
</view>
<view class="hr"></view>
</view>
</template>
<script setup>
const porps = defineProps({
pic: {
type: String
},
title: {
type: String
},
card: {
type: String
},
timer: {
type: String
},
item: {}
});
</script>
<style lang="scss">
.big-box {
width: 100%;
padding: 25rpx 0;
.hr {
width: 100%;
border-bottom: 1rpx solid #e5e5e5;
padding-top: 25rpx;
}
.list-box {
width: 100%;
height: 180rpx;
display: flex;
.image {
width: 270rpx;
height: 180rpx;
padding-right: 25rpx;
.img {
width: 270rpx;
height: 180rpx;
border-radius: 15rpx;
}
}
.text {
margin-left: 20rpx;
.text-title {
text-align: left;
font-size: 30rpx;
font-family: PingFang SC;
font-weight: 400;
color: #000000;
}
.text-card {
font-size: 20rpx;
width: 94rpx;
height: 32rpx;
margin-top: 57rpx;
text-align: center;
font-family: PingFang SC;
font-weight: 400;
color: #ffffff;
border-radius: 16px 16px 16px 0px;
}
.color1 {
background: linear-gradient(270deg, #54e1b9, #00caa6);
}
.color2 {
background: linear-gradient(270deg, #be8efb, #a76df4);
}
.color3 {
background: linear-gradient(90deg, #f83841, #f76d74);
}
.color4 {
background: linear-gradient(90deg, #fea449, #ffb95f);
}
.color5 {
background: linear-gradient(270deg, #d9d9d9, #bcbcbc);
}
}
}
}
</style>
import request from '@/common/request.js'
const accountInfo = uni.getAccountInfoSync()
const appId = accountInfo.miniProgram.appId;
// 获取培训列表
export function getTrainList(params) {
return request({
url: `/webPc/getTrains`,
method: 'get',
params: params
})
}
// 查看培训项目
export function getTrainDetail(id) {
return request({
url: '/webPc/getTrainDetails',
method: 'get',
params: {id}
})
}
// 查看培训项目
export function trainProjectList(params) {
return request({
url: '/systemj/information/projectList',
method: 'get',
params: params
})
}
// 查看报名费用(未支付前)
export function searchTrainCost(params) {
return request({
url: '/systemj/signer/getEnrollBill',
method: 'get',
params: params
})
}
// 提交 用户资料
export function trainNext(params) {
return request({
url: `/systemj/signer/signUp`,
method: 'post',
params,
})
}
// 生成订单
export function createOrder(params) {
return request({
url: `/systemj/order/saveOrder`,
method: 'post',
params,
})
}
//会员支付
export function pay(params) {
return request({
url: `/systemj/order/pay`,
method: 'post',
params,
})
}
// 线下支付银行信息
export function bankSlip(params) {
return request({
url: `/systemj/order/bankInfo`,
method: 'get',
params,
})
}
export function trainOrder(params) {
return request({
url: `/systemj/order/getMyOrders`,
method: 'get',
params,
})
}
// 修改报名
export function trainUpdata(params) {
return request({
url: `/systemj/signer/updateSign`,
method: 'put',
params,
})
}
// 取消订单
export function cancelOrder(params) {
return request({
url: `/systemj/order/cancelOrder`,
method: 'put',
params,
})
}
// 报项列表
export function signList(params) {
return request({
url: `/systemj/signer/applets/signList`,
method: 'get',
params,
})
}
// 报项详情
export function signDetail(params) {
return request({
url: `/systemj/signer/applets/signDetail`,
method: 'get',
params,
})
}
// 订单列表
export function orderList(params) {
return request({
url: `/systemj/order/applets/orderList`,
method: 'get',
params,
})
}
// 订单详情
export function getOrderDetail(params) {
return request({
url: `/systemj/order/getOrderDetail`,
method: 'get',
params,
})
}
<template>
<view class="box">
<view class="title">
<view class="navSerch">
<view class="serch">
<uni-search-bar class="uni-mt-10" radius="30" placeholder="搜索" clearButton="auto" Button="none"
cancelText="" v-model="name" bgColor="#F4F6FA" @confirm="search" @blur="blur" @clear="clear" />
</view>
</view>
<view class="searchLeft">
</view>
</view>
<view>
<view class="nav-box">
<view class="nav-ul">
<view class="nva-li" @click="nvaText(index)" :class="{nt:Nindex==index}"
v-for="(item,index) in items" :key="index">
{{item}}
</view>
</view>
</view>
<view class="content">
<view class="taber">
<view v-for="item in list" :key="item.trainId" @click="detail(item)">
<uniList :pic="config.baseUrl_api + item.cover" :title="item.name" :card="item.trainStatusStr"
:timer="filterTime(item.signTimeRange) "></uniList>
</view>
</view>
</view>
<view><uni-load-more :status="status" :content-text="contentText" /></view>
</view>
</view>
</template>
<script setup>
import config from '@/config.js'
import uniList from '@/training/components/ulist/ulist';
import * as train from '@/training/train.js';
import {
onLoad,
onReady,
onShareAppMessage,
onShareTimeline,
onPullDownRefresh,
onReachBottom
} from '@dcloudio/uni-app';
import {
ref,
getCurrentInstance,
reactive,
toRefs
} from 'vue';
const searchValue = ref();
const items = ref(['全部', '报名中', '培训进行中', '已结束']);
const current = ref(0);
const name = ref();
const Nindex = ref(0)
const range = ref([{
value: 1,
text: '全部'
},
{
value: 2,
text: '报名中'
},
{
value: 3,
text: '进行中'
},
{
value: 4,
text: '即将开始'
},
{
value: 5,
text: '报名未开始'
},
{
value: 6,
text: '培训未开始'
},
{
value: 7,
text: '已结束'
}
]);
const list = ref();
const total = ref();
// noMore没有更多了
// loading加载中
// more下来加载
const status = ref('more');
const flag = ref();
const data = reactive({
query: {
flag: '',
pageSize: 10,
pageNum: 1
},
contentText: {
contentdown: '',
contentrefresh: '加载中',
contentnomore: '没有更多'
}
});
const {
query,
contentText
} = toRefs(data);
// 加载培训列表数据
onLoad(option => {
initData();
});
function initData() {
query.value.flag = current.value;
train.getTrainList(query.value).then(res=>{
list.value = res.rows;
total.value = res.rows;
})
}
// 详情页
function detail(item) {
let path = `/training/detailPage?trainId=${item.id}`;
uni.navigateTo({
url: path
});
}
function nvaText(index) {
Nindex.value = index
current.value = index
initData()
console.log(index);
}
function filterTime(num) {
if (num) return num.slice(0, 16)
}
// 下拉框
function change(e) {
if (e) {
addForm.value.flag = e - 1;
current.value = e - 1;
Nindex.value = e - 1
console.log(e);
initData();
}
}
// 搜索
function search(res) {
if (res.value != '') {
addForm.value.trainName = res.value;
initData();
}
}
// 搜索清空按钮
function clear(res) {
addForm.value.trainName = '';
initData();
}
// 下来刷新
onPullDownRefresh(() => {
addForm.value.flag = 0;
initData();
wx.stopPullDownRefresh();
});
// 上拉加载
onReachBottom(async () => {
if (list.value.length == total.value) {
status.value = 'noMore';
return false;
} else {
status.value = 'loading';
addForm.value.pageNum += 1;
let res = await train.getTrainList(addForm.value);
let arr = res.rows;
list.value = list.value.concat(arr);
total.value = res.total;
status.value = 'noMore';
}
});
</script>
<style lang="scss">
.uni-section-header {
display: none !important;
}
.box {
background-color: #fff;
}
.nav-box {
overflow-x: scroll;
}
.nav-ul {
display: flex;
justify-content: space-around;
width: 100%;
}
.nva-li {
font-size: 26rpx;
padding: 10rpx 0rpx;
margin: 0 15rpx;
}
.nt {
font-size: 30rpx;
font-weight: 400;
border-bottom: 4rpx solid #AD181F;
}
.taber {
width: 100%;
padding: 25rpx 30rpx;
padding-bottom: 0;
}
.segmented-control__text {
font-size: 26rpx !important;
font-family: PingFang SC !important;
font-weight: 400 !important;
color: #4c5359 !important;
}
.segmented-control__item--text {
border-bottom: 4rpx solid #54e1b9;
font-size: 30rpx !important;
font-family: PingFang SC !important;
font-weight: 500 !important;
color: #2b3133 !important;
}
.title {
display: flex;
justify-content: space-between;
.navSerch {
width:100%;height:100rpx;flex:1 1 auto;
position: relative;
.serch {
width:100%;
}
}
.searchLeft {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 400;
color: #000000;
margin-top: 25rpx;
display: flex;
}
.uni-searchbar__cancel {
display: none;
}
:deep(.uni-select) {
border: 0;
// padding-left: 20rpx;
}
:deep(.uni-select__input-text) {
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 400;
color: #000000;
margin-right: 14rpx;
width: 110rpx;
text-align: right;
}
:deep(.uni-select__selector-item) {
// padding: 0 auto;
text-align: center;
font-size: 26rpx;
font-family: PingFang SC;
font-weight: 400;
color: #000000;
}
}
// 搜索框
.search-result {
padding-top: 10rpx;
padding-bottom: 20rpx;
text-align: center;
}
.search-result-text {
text-align: center;
font-size: 14rpx;
color: #666;
}
:deep(.uni-searchbar) {box-sizing: border-box;
}
.uni-searchbar__box {
padding-right: 0rpx !important;
}
.example-body {
/* #ifndef APP-NVUE */
display: block;
/* #endif */
padding: 0px;
}
.uni-mt-10 {
width: 600rpx;
}
// 分段器
.example-body {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: row;
padding: 0;
}
.uni-common-mt {
margin-top: 30rpx;
}
.uni-padding-wrap {
// width: 750rpx;
padding: 0rpx 30rpx;
}
.content {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
justify-content: center;
// height: 1235rpx;
text-align: center;
}
.content-text {
font-size: 14rpx;
color: #666;
}
.color-tag {
width: 25rpx;
height: 25rpx;
}
.uni-list {
flex: 1;
}
.uni-list-item {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex: 1;
flex-direction: row;
background-color: #ffffff;
}
.uni-list-item__container {
padding: 12rpx 15rpx;
width: 100%;
flex: 1;
position: relative;
/* #ifndef APP-NVUE */
display: flex;
box-sizing: border-box;
/* #endif */
flex-direction: row;
justify-content: space-between;
align-items: center;
border-bottom-style: solid;
border-bottom-width: 1rpx;
border-bottom-color: #eee;
}
.uni-list-item__content-title {
font-size: 14rpx;
}
.chat-custom-right {
flex: 1;
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
flex-direction: column;
justify-content: space-between;
align-items: flex-end;
}
.chat-custom-text {
font-size: 12rpx;
color: #999;
}
</style>
\ No newline at end of file
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!