f9c6474d by 杨炀

no message

1 parent 759d9885
......@@ -321,6 +321,56 @@ function addLevelInfo(data) {
params: data
})
}
function chooseStudentsList(query) {
return request({
url: '/person/info/chooseStudentsList',
method: 'get',
params: query
})
}
function batchChoose(data) {
return request({
url: '/exam/person/batch/choose',
method: 'post',
params: data
})
}
function editLevel(data) {
return request({
url: '/exam/person/editLevel',
method: 'put',
params: data
})
}
function getVerityList(params) {
return request({
url: '/exam/info/verityList',
method: 'get',
params: params
})
}
function getGroupHistoryByRelateId(id) {
return request({
url: `/member/certified/getHistoryByRelateId/${id}`,
method: 'get'
})
}
// 创建自己的团队
function createMyMember(data) {
return request({
url: '/member/info/createMyMember',
method: 'post',
params:data
})
}
function doVerity(data) {
return request({
url: `/exam/info/verity`,
method: 'put',
params: data
})
}
export {
getMessage,
......@@ -357,5 +407,8 @@ export {
getLevelApplyInfo,
getStudentList,getApprovalRecord,submitVerity,
getCoachList,
updateLevelInfo,addLevelInfo
updateLevelInfo,addLevelInfo,
chooseStudentsList,batchChoose,getVerityList,
getGroupHistoryByRelateId,
createMyMember,doVerity
}
\ No newline at end of file
......
......@@ -5,6 +5,7 @@ page {
}
.esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
.flexbox{display: flex;}
.mt30{margin-top: 30rpx;}
.mt40{margin-top: 40rpx;}
.mt50{margin-top: 50rpx;}
.align-forms-item-placeHolder{color: #999;line-height: 2.6;}
......@@ -55,7 +56,11 @@ font-size: 24rpx;}
}
.btn-red-kx{background-color: #fff;
border: 1px solid #AD181F;
color: #AD181F;}
color: #AD181F;
}
.btn-red-kx.mini{font-size: 30rpx; line-height: 2;
border-radius: 30px;}
/* 底部固定按钮 */
.fixedBottom {background: #fff;height: 150rpx;
box-shadow: 0px -2rpx 10rpx 0px #e8e8e8; padding: 30rpx 0 0;
......@@ -325,3 +330,24 @@ color: #7D8592;}
display: block;
font-size: 14px;
}
.bgbg{padding:0 0 60rpx;
color: #fff;
background: #C40F18;
}
.girdBox{display: flex;flex-wrap: wrap;padding: 0 0 40rpx;
background: #FFFFFF;position: relative;top: -30rpx;
border-radius: 20rpx 20rpx 0rpx 0rpx;
view{width: 25%;text-align: center;
font-size: 24rpx;
color: #434343;
image{width: 20vw;height: 20vw;display: block;margin: auto;}
}
}
......
......@@ -3,7 +3,7 @@
// staging
const baseUrl_api = "http://192.168.1.96:8787";
const baseUrl_api = "http://192.168.1.97:8787";
const fileUrl_api = "http://192.168.1.11:8787";
export default {
......
......@@ -288,7 +288,7 @@
}
,{
"path" : "pages/group/applyList",
"path" : "pages/group/apply/applyList",
"style" :
{
"navigationBarTitleText": "团体会员审核",
......@@ -341,6 +341,24 @@
}
}
,{
"path" : "pages/group/apply/applyDetail",
"style" :
{
"navigationBarTitleText": "团体会员审核详情",
"enablePullDownRefresh": false
}
}
,{
"path" : "pages/group/apply/record",
"style" :
{
"navigationBarTitleText": "审核记录",
"enablePullDownRefresh": false
}
}
],
"globalStyle": {
"navigationStyle": "custom",
......
<template>
<view class="hasfixedbottom">
<view class="wBox">
<view class="tt">{{form.name}}</view>
<!-- 成员 -->
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<view class="colorful">{{n.perName?.slice(0,1)}}</view>
</view>
<view>
<view class="name">{{n.perName}}</view>
<view class="date">申请调入一级协会 {{n.sourceShenDeptName||'--'}}</view>
<view class="date">申请调入单位 {{n.targetDeptName||'--'}}</view>
</view>
</view>
</view>
</view>
<view class="h3-padding">审核流程</view>
<view class="wBox">
<view class="stepItem" v-for="(n,index) in auditLog">
<view class="time">{{n.auditTime||'待审批'}}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==1" class="text-success">审核通过</text>
<text v-if="n.auditResult==2" class="text-danger"> 审核拒绝</text>
<text v-if="n.auditResult==0" class="text-primary"> 审核中</text>
</view>
<!-- <view class="name">{{index+1}}</view> -->
<view class="deptName">{{n.auditDeptName}}</view>
<view v-if="n.auditResult==2">
备注:{{n.auditMsg||'/' }}
</view>
</view>
</view>
</view>
<view class="fixedBottom" v-if="(deptType == 1)&&form.ztxRes == 0">
<button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
<button class="btn-red" @click="audit(form.id,'1')">同意</button>
</view>
<view class="fixedBottom" v-if="(deptType == 2 || deptType == 3)&&form.shenRes == 0">
<button class="btn-red-kx" @click="audit(form.id,'2')">拒绝</button>
<button class="btn-red" @click="audit(form.id,'1')">同意</button>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({})
const form = ref({})
const list = ref([])
const auditLog = ref([])
const feelList = ref([])
const total = ref(0)
const totalYear = ref(0)
const deptType = ref()
let rangeId = ''
onLoad((option) => {
rangeId = option.rangeId
if ('auditLog' in option) {
auditLog.value = JSON.parse(decodeURIComponent(option.auditLog))
}
if ('form' in option) {
form.value = JSON.parse(decodeURIComponent(option.form))
}
console.log(form.value)
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getForm()
}
function getForm() {
uni.showLoading({
title: '加载中'
})
api.getTransferList({
rangeId: rangeId
}).then(res => {
uni.hideLoading()
list.value = res.rows
})
}
function audit(rangeId, flag) {
if (flag == '2') {
// 拒绝
// 弹出框填写理由
uni.showModal({
title: '请输入拒绝理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入拒绝理由',
icon: 'none'
})
} else {
doApproval(rangeId, flag, res.content)
}
}
}
})
} else if (flag == '1') {
// 二次确认
uni.showModal({
title: '提示',
content: `确定审批通过吗`,
success: function(res) {
if (res.confirm) {
doApproval(rangeId, flag)
}
}
})
}
}
function doApproval(rangeId, flag, reason) {
var obj = {
flag: flag,
reason: reason || '',
rangeIds: rangeIds
}
console.log(obj)
api.mobilizeAudit(obj).then((res) => {
uni.showToast({
title: '操作成功',
icon: 'none'
})
uni.navigateBack()
})
}
</script>
<style scoped lang="scss">
.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;
.tt {
color: #0A1629;
font-size: 30rpx;
}
}
.userlist {
.item {
border-bottom: 1px dashed #e5e5e5;
position: relative;
.date {
margin-top: 10rpx;
}
.name {
text {
margin-left: 1em;
color: #4C5359;
font-size: 26rpx;
}
}
.nian {
position: absolute;
right: 0;
font-size: 30rpx;
color: #AD181F;
}
}
}
.info {
display: flex;
margin: 30rpx 0 20rpx;
font-size: 28rpx;
view {
color: #7D8592;
margin-right: 20rpx;
}
}
.fixedBottom {
justify-content: center;
button {
margin: 0 20rpx;
width: 286rpx;
}
.btn-red {
width: 286rpx;
}
}
</style>
\ No newline at end of file
......@@ -19,15 +19,19 @@
缴费单位
<view>{{ item.content.memberName }}</view>
</view>
<view>
会员合计
<view>{{item.content.allCount}}</view>
<view v-if="userType = '3'">
所属省份
<view>{{item.content.province}}</view>
</view>
<view>
新会员合计
年限
<view>{{item.content.renewYear}}</view>
</view>
<view>
<view v-if="deptType == 1">
团体会员/新会员
<view>{{item.content.allCount}}/{{item.content.newCount}}</view>
</view>
<view v-if="deptType == 1">
费用合计
<view> {{ (item?.content?.allFee*1).toFixed(2) }}</view>
</view>
......@@ -72,6 +76,7 @@
const list = ref([])
const total = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad(() => {
if (app.globalData.isLogin) {
init()
......@@ -85,6 +90,7 @@
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
......@@ -172,10 +178,21 @@
const auditLog = encodeURIComponent(JSON.stringify(item.auditLog))
const form = encodeURIComponent(JSON.stringify(item))
let path = `/pages/personalVip/mobilizeDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}`
if(userType.value=='1'){
// 查看
let path = `/pages/group/apply/applyDetail?rangeId=${item.id}&auditLog=${auditLog}&form=${form}`
uni.navigateTo({
url: path
});
} else if(userType.value=='3'){
// 审核记录
let path = `/pages/group/apply/record?certId=${item.content.certId}`
uni.navigateTo({
url: path
});
}
}
</script>
......
<template>
<view class="hasfixedbottom">
<view class="h3-padding">审核记录</view>
<view class="wBox">
<view class="stepItem" v-for="(n,index) in list">
<view class="time">{{n.handleDate||'待审批'}}</view>
<view class="content">
<view class="status">
<text v-if="n.auditStatus==0" class="text-primary">审核中</text>
<text v-if="n.auditStatus==1" class="text-success">审核通过</text>
<text v-if="n.auditStatus==2" class="text-danger">审核拒绝</text>
<text v-if="n.auditStatus==3" class="text-warning">已撤回</text>
<text v-if="n.auditStatus==100" class="text-primary">审核中</text>
</view>
<!-- <view class="name">{{index+1}}</view> -->
<view class="deptName">{{n.handlerDeptName}}</view>
<view v-if="n.reason">
备注:{{n.reason}}
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad
} from '@dcloudio/uni-app'
const app = getApp();
const list = ref([])
const total = ref(0)
const deptType = ref()
let certId = ''
onLoad((option) => {
certId = option.certId
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
deptType.value = app.globalData.deptType
getList()
}
function getList() {
uni.showLoading({
title: '加载中'
})
api.getGroupHistoryByRelateId(certId).then(res => {
uni.hideLoading()
list.value = res.data
})
}
</script>
<style scoped lang="scss">
.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;
.tt {
color: #0A1629;
font-size: 30rpx;
}
}
.userlist {
.item {
border-bottom: 1px dashed #e5e5e5;
position: relative;
.date {
margin-top: 10rpx;
}
.name {
text {
margin-left: 1em;
color: #4C5359;
font-size: 26rpx;
}
}
.nian {
position: absolute;
right: 0;
font-size: 30rpx;
color: #AD181F;
}
}
}
.info {
display: flex;
margin: 30rpx 0 20rpx;
font-size: 28rpx;
view {
color: #7D8592;
margin-right: 20rpx;
}
}
.fixedBottom {
justify-content: center;
button {
margin: 0 20rpx;
width: 286rpx;
}
.btn-red {
width: 286rpx;
}
}
</style>
\ No newline at end of file
<template>
<view class="page">
<view>
<view class="welcome">您好!<br />欢迎使用中跆协会员管理系统</view>
<view class="bgbg">
<view class="welcome">您好!
<!-- {{memberInfo.name}} -->
<br />欢迎使用中跆协会员管理系统</view>
<view class="flexbox">
<!-- userType 1:中跆协 2:省 3:市区 4:道馆-->
<!-- 4 -->
......@@ -16,16 +18,27 @@
</view>
</view>
<view>
<view class="girdBox">
<view v-if="userType!='3'" @click="goPath('/pages/personalVip/mobilize')">
<image />
会员调动
</view>
<view v-if="userType!='4'" @click="goPath('/pages/group/list')">团体会员查询</view>
<view v-if="userType!='4'" @click="goPath('/pages/group/applyList')">团体会员审核</view>
<view v-if="userType=='2'" @click="goPath('/pages/group/pay')">团体会员认证</view>
<view v-if="userType!='4'" @click="goPath('/pages/group/list')">
<image />团体会员查询
</view>
<view v-if="userType!='4'" @click="goPath('/pages/group/apply/applyList')">
<image />团体会员审核
</view>
<view v-if="userType=='2'" @click="goPath('/pages/group/pay')">
<image />团体会员认证
</view>
<view v-if="userType=='4'" @click="goPath('/pages/level/apply')">级位考试申请</view>
<view v-if="userType!='4'" @click="goPath('/pages/level/approval')">级位考试审核</view>
<view v-if="userType=='4'" @click="goPath('/pages/level/apply')">
<image />级位考试申请
</view>
<view v-if="userType!='4'" @click="goPath('/pages/level/approval')">
<image />级位考试审核
</view>
</view>
<uni-section title="待办提醒" padding>
......@@ -67,46 +80,27 @@
} = getCurrentInstance()
const app = getApp();
const userType = ref('1')
const memberInfo = ref({})
let proId;
const svId = ref(null);
const list = ref([
{
url: '',
text: '段位考试申请'
},
{
url: '',
text: '段位考试审核'
},
{
url: '',
text: '级位证书发送'
},
{
url: '',
text: '段位证书发送'
}
]);
const messageList = ref([])
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
onLoad(option => {
if (option.scene) {
proId = decodeURIComponent(option.scene);
} else {
proId = option.proId;
}
});
function goPath(path) {
......@@ -148,22 +142,26 @@
uni.showLoading({
title: '加载中'
});
loginServer.getMyOwnMemberInfo().then(res=>{
// loginServer.getMyOwnMemberInfo().then(res=>{
userType.value = app.globalData.userType
if (userType.value!='1' && app.globalData.authenticationStatus != '2' && app.globalData.authenticationStatus != '4'){
memberInfo.value = app.globalData.memberInfo
console.log(userType.value,app.globalData.authenticationStatus)
if (userType.value != '1' && app.globalData.authenticationStatus != '2' && app.globalData.authenticationStatus !=
'4') {
// 注册引导
uni.navigateTo({
url: '/pages/index/perfect'
});
// uni.navigateTo({
// url: '/pages/index/perfect'
// });
} else {
getMes()
}
uni.hideLoading();
})
// })
}
function getMes(){
function getMes() {
api.getMessage({
pageNum: 1,
pageSize: 10
......@@ -173,49 +171,50 @@ function getMes(){
switch (d.type) {
case 30001:
d.name = '你有一条会员缴费等待审批,点击去处理!'
d.path = '/personalVip/audit'
d.path = '/pages/personalVip/audit'
break
case 30002:
d.name = '你有一条级位考试等待审批,点击去处理!'
d.path = '/level/approval'
d.path = '/pages/level/approval'
break
case 30003:
d.name = '你有一条段位考试等待审批,点击去处理!'
d.path = '/rank/approval'
d.path = '/pages/rank/approval'
break
case 30004:
d.name = '你有一条会员调动等待审批,点击去处理!'
d.path = '/personalVip/mobillize'
d.path = '/pages/personalVip/mobillize'
break
case 30005:
d.name = '你有一条团体会员认证等待审批,点击去处理!'
d.path = '/group/authentication'
d.path = '/pages/group/authentication'
break
case 30006:
d.name = '你有一条段位成绩等待审批,点击去处理!'
d.path = '/rank/scoreApproval'
d.path = '/pages/rank/scoreApproval'
break
case 40001:
d.name = '你有一条级位申请待提交,点击去处理!'
d.path = `/level/apply/modify?id=${d.eventId}`
d.path = `/pages/level/apply/modify?id=${d.eventId}`
break
case 40002:
d.name = '你有一条段位申请待提交,点击去处理!'
d.path = `/rank/apply/modify?id=${d.eventId}`
d.path = `/pages/rank/apply/modify?id=${d.eventId}`
break
case 40003:
d.name = '你有一条成绩维护的数据待提交,点击去处理!'
d.path = `/rank/score/modify?id=${d.eventId}`
d.path = `/pages/rank/score/modify?id=${d.eventId}`
break
case 50001:
d.name = '你有一条新的个人会员申请,点击去处理!'
d.path = '/personalVip/approvalList'
d.path = '/pages/personalVip/approvalList'
break
}
}
messageList.value = res.rows
})
}
}
function readMessage(item) {
uni.navigateTo({
url: item.path
......
......@@ -10,6 +10,7 @@
<view class="appItem" v-for="item in list">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-primary':item.status=='1',
'text-success':item.status=='2',
'text-danger':item.status=='3',
'text-warning':item.status=='4'
......
<template>
<view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
<view class="pp esp">考级日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请日期
<view>{{item.applyTime.substring(0, 10)}}</view>
</view>
<view>
申请单位
<view>{{item.memberName}}</view>
</view>
<view>
通过人数
<view>{{item.pass}}</view>
</view>
</view>
<view class="func" v-if="item.auditStatus=='0'">
<button @click="audit(item,'2')">拒绝</button>
<button @click="audit(item,'1')">同意</button>
</view>
</view>
</view>
<view class="nodata" v-if="infoList.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'lodash'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '0',
type: '1'
})
const navs = ref(['审核中', '审核通过', '审核拒绝'])
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
const deptType = ref('')
onLoad(() => {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
uni.showLoading({
title: '加载中'
})
deptType.value = app.globalData.deptType
getList()
}
function getList() {
api.getVerityList(queryParams.value).then(res => {
uni.hideLoading()
const list = []
_.each(res.rows, r => {
const item = JSON.parse(r.content)
item.recordId = r.recordId
item.auditStatus = r.auditStatus
item.submitStatus = r.submitStatus
item.distributeTime = r.distributeTime
item.statusStr = statusArr[r.auditStatus]
item.remark = r.remark
item.isView = r.isView
item.sourceData = r
item.auditProcess = r.auditProcess
list.push(item)
})
infoList.value = list
total.value = res.total
})
}
function onClickItem(e) {
console.log(e)
uni.showLoading({
title: '加载中'
})
queryParams.value.status = e.currentIndex
getList()
}
function goDetail(item) {
if(item.status!='0'){
let path = `/pages/level/applyDetail?examId=${item.examId}`
uni.navigateTo({
url: path
});
} else {
return
}
}
function audit(item, flag) {
console.log(item.sourceData)
var obj = {
flag: flag,
reason: null,
body: [JSON.stringify(item.sourceData)]
}
if (flag == '2') {
// 拒绝
// 弹出框填写理由
uni.showModal({
title: '请输入拒绝理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入拒绝理由',
icon: 'none'
})
} else {
obj.reason = res.content
doApproval(obj)
}
}
}
})
} else if (flag == '1') {
// 二次确认
uni.showModal({
title: '提示',
content: `确定审批通过吗`,
success: function(res) {
if (res.confirm) {
doApproval(obj)
}
}
})
}
}
function doApproval(obj) {
console.log(obj)
api.doVerity(obj).then((res) => {
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
</script>
<style lang="scss">
<style scoped>
.searchbar {
display: flex;
align-items: center;
padding: 25rpx;
box-sizing: border-box;
:deep(.uni-easyinput .uni-easyinput__content) {
border-radius: 35rpx;
border: none;
height: 70rpx;
}
:deep(.uni-easyinput__content-input) {
font-size: 26rpx;
}
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.mt0 {
margin-top: 0 !important;
}
.appList .appItem .name {
width: 80%;
word-break: break-all;
}
</style>
......
......@@ -9,7 +9,7 @@
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name.slice(1,2)}}</view>
</view>
<view>
......
......@@ -10,7 +10,7 @@
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
</view>
<view>
......
......@@ -12,7 +12,7 @@
<view class="content-box" @click="handleInfo(n)">
<view class="flexbox">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
</view>
<view>
......
......@@ -9,7 +9,7 @@
<view class="userlist">
<view class="item" v-for="n in list">
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.personName?.slice(0,1)}}</view>
</view>
<view>
......
......@@ -15,7 +15,7 @@
<image class="icon" v-else src="@/static/member/dx.png" />
</view>
<view class="photobox">
<image class="photo" v-if="n.photo" :src="n.photo" mode='aspectFill'></image>
<image class="photo" v-if="n.photo" :src="config.baseUrl_api+n.photo" mode='aspectFill'></image>
<view class="colorful" v-else>{{n.name.slice(0,1)}}</view>
</view>
<view @click="handleInfo(n)">
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!