677c988b by lttnew

样式优化

1 parent cccdbc00
......@@ -20,7 +20,7 @@ page {
.mt20{margin-top: 20px !important;}
.must{color: #AD181F;font-size: 24rpx;}
.vipData .w50{width: 45%;}
.esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;}
.esp{text-overflow: ellipsis;overflow: hidden;white-space: nowrap;margin-top: 16rpx;}
.flex{display: flex;}
.flexbox{display: flex;}
.mt30{margin-top: 30rpx;}
......@@ -148,7 +148,7 @@ page {
}
.name{margin: 30rpx 0 20rpx;color: #0A1629;font-size: 30rpx;}
.flexbox{justify-content: space-between;padding:10rpx;
.flexbox{justify-content: space-between;padding:15rpx 30rpx;
background-color: rgba(244, 249, 253, 1);border-radius: 4px;
font-size: 28rpx;color: #91929E;box-sizing: border-box;
view{font-size: 26rpx;
......@@ -209,11 +209,55 @@ page {
}
}
}
.text-gray{color: #919191;}
.text-gray{color: #919191; }
.text-primary{color: #1561CB;}
.text-success{color: #32B16C;}
.text-danger{color: #d51515;}
.text-warning{color: #e6a23c;}
.text-gray-bg {
color: #919191;
background: linear-gradient(135deg, #f5f5f5, #eeeeee);
padding: 2rpx 15rpx;
font-size: 22rpx;
border-radius: 20rpx;
border: 1rpx solid rgba(145, 145, 145, 0.25);
}
.text-success-bg {
background: linear-gradient(135deg, #e6f7ef, #d4f5e2);
color: #1db024;
font-size: 22rpx;
padding: 2rpx 10rpx;
border-radius: 20rpx;
border: 1rpx solid rgba(82, 196, 26, 0.3);
}
.text-danger-bg {
padding: 2rpx 15rpx;
border-radius: 20rpx;
background: linear-gradient(135deg, #fff1f0, #ffe5e5);
color: #e8341d;
font-size: 22rpx;
border: 1rpx solid rgba(232, 52, 29, 0.3);
}
.text-primary-bg {
background: linear-gradient(135deg, #e6f3ff, #d4e9ff);
color: #1890ff;
font-size: 22rpx;
padding: 2rpx 15rpx;
border-radius: 20rpx;
border: 1rpx solid rgba(24, 144, 255, 0.3);
}
.text-warning-bg{
background: linear-gradient(135deg, #fff7e6, #fff1cc);
color: #faad14;
font-size: 22rpx;
padding: 2rpx 15rpx;
border-radius: 20rpx;
border: 1rpx solid rgba(250, 173, 20, 0.3);
}
.h3-padding{
padding:50rpx 30rpx 0;font-size: 36rpx;box-sizing: border-box;
font-weight: 500;color: #0A1629;
......@@ -295,10 +339,10 @@ page {
font-size: 28rpx;color: #91929E;
view{font-size: 26rpx;
text{color: #0A1629;font-size: 28rpx;display: block;}
.text-primary{color: #1561CB;}
.text-success{color: #13B5B1;}
.text-danger{color: #d51515;}
.text-warning{color: #e6a23c;}
.text-primary{color: #1561CB;background: linear-gradient(135deg, #e6f3ff, #d4e9ff);}
.text-success{color: #32B16C;background: linear-gradient(135deg, #e6f7ef, #d4f5e2);}
.text-danger{color: #d51515;background: linear-gradient(135deg, #fff1f0, #ffe5e5);}
.text-warning{color: #e6a23c;background: linear-gradient(135deg, #fff7e6, #fff1cc);}
}
}
......
// dev
const baseUrl_api = 'http://192.168.1.137:8787'
// const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
// const baseUrl_api = 'http://192.168.1.137:8787'
const baseUrl_api = 'http://tk001.wxjylt.com/stage-api'
const loginImage_api = 'http://tk001.wxjylt.com/stage-api'
const payUrl = 'https://wxpay.cmbc.com.cn/mobilePlatform/appserver/lcbpPay.do'
......
......@@ -12,9 +12,9 @@
<view v-for="(item,index) in list" :key="index" class="appItem">
<view class="status" @click="goDetail(item)">
<text v-if="item.auditStatus == 1" class="text-primary">审核中</text>
<text v-if="item.auditStatus == 2" class="text-success">审核通过</text>
<text v-if="item.auditStatus == 3" class="text-danger">审核拒绝</text>
<text v-if="item.auditStatus == 1" class="text-primary-bg">审核中</text>
<text v-if="item.auditStatus == 2" class="text-success-bg">审核通过</text>
<text v-if="item.auditStatus == 3" class="text-danger-bg">审核拒绝</text>
</view>
<view class="date">
<uni-icons color="#AD181F" size="16" type="calendar-filled"></uni-icons>
......
......@@ -11,18 +11,17 @@
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="status" :class="{
'text-primary':item.status=='0',
'text-success':item.status=='1',
'text-danger':item.status=='2',
'text-warning':item.status=='3'
'text-primary-bg':item.status=='0',
'text-success-bg':item.status=='1',
'text-danger-bg':item.status=='2',
'text-warning-bg':item.status=='3'
}" @click="goDetail(item)">
{{ item.statusStr }}
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="text-primary">{{item.flowCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="pp esp">上报单位:{{item.memName}}</view>
<view class="name mt10" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
考试人数
......@@ -44,6 +43,8 @@
<view>¥{{item.totalAmount}}</view>
</view>
</view>
<view class="pp esp">上报单位:{{item.memName}}</view>
<view class="func" v-if="item.status=='0'">
<button @click="audit(item,'2')">拒绝</button>
<button @click="audit(item,'1')">同意</button>
......
......@@ -8,9 +8,9 @@
<view class="appItem" v-for="(item,index) in infoList" :key="index">
<view class="status" @click="goDetail(item)">
<text :class="{
'text-warning':item.certStatus=='0',
'text-primary':item.certStatus=='1',
'text-success':item.certStatus=='2'
'text-warning-bg':item.certStatus=='0',
'text-primary-bg':item.certStatus=='1',
'text-success-bg':item.certStatus=='2'
}">{{ item.certStatusStr }}</text>
</view>
......@@ -19,8 +19,7 @@
{{item.submitTimeStr}} 提交
</view>
<view class="text-primary" v-if="item.payCode" @click="goDetail(item)">{{item.payCode}}</view>
<view class="name mt0 w100" @click="goDetail(item)"><text class="dot"></text>{{item.name}}</view>
<view class="pp esp" v-if="item.certTimeStr">证书发送时间:{{item.certTimeStr}}</view>
<view class="name mt10 w100" @click="goDetail(item)"><text class="dot"></text>{{item.name}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
申请单位
......@@ -32,6 +31,8 @@
</view>
</view>
<view class="pp esp" v-if="item.certTimeStr">证书发送时间:{{item.certTimeStr}}</view>
<!-- v-if="item.certStatus != '2'" -->
<view class="func">
<button @click="send(item)">更新证书</button>
......
......@@ -6,8 +6,8 @@
v-for="(tab, index) in tabs"
:key="index"
class="tab-item"
:class="{ active: currentTab === index }"
@click="switchTab(index)"
:class="{ active: currentTab === tab.type }"
@click="switchTab(tab.type)"
>
{{ tab.name }}
</view>
......@@ -29,16 +29,17 @@
v-for="(item, index) in list"
:key="index"
class="order-card"
@click="goToDetail(item)"
>
<!-- 订单头部:日期 + 状态 -->
<view class="card-header">
<view class="date">
<image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/>
<!-- <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" style="width:30rpx;height:30rpx;"/> -->
<!-- -->
<text class="value code-text" @click="goToDetail(item)">{{ item.wfCode || '——' }}</text>
<text class="value text-primary" >{{ item.wfCode || '——' }}</text>
</view>
<view class="status-tags">
<view
<!-- <view
class="status-tag"
:class="{
success: item.payStatus == 1,
......@@ -47,11 +48,12 @@
}"
>
{{ getStatusText(item.payStatus) }}
</view>
</view> -->
<view
class="status-tag ml-10"
:class="{
'status-pending': item.auditStatus == 0 || item.auditStatus == 1,
'status-wait': item.auditStatus == 0,
'status-pending': item.auditStatus == 1,
'status-success': item.auditStatus == 2,
'status-danger': item.auditStatus == 3
}"
......@@ -74,17 +76,17 @@
<!-- 核心:前2tab仅展示缴费年限,后2tab仅展示人数合计 -->
<view class="info-section flex f-j-s" v-if="item.content">
<!-- 个人/单位会员(仅缴费年限) -->
<view v-if="currentTab === 0 || currentTab === 1" class="single-info">
<view v-if="currentTab === '0' || currentTab === '1'" class="single-info">
<view class="label">缴费年限:</view>
<view class="value">{{ item.content.yearCount || 0 }}</view>
</view>
<view class="line" v-if="currentTab === 0 || currentTab === 1"></view>
<view class="line" v-if="currentTab === '0' || currentTab === '1'"></view>
<!-- 级位/段位考试(仅人数合计) -->
<view v-if="currentTab === 2 || currentTab === 3" class="single-info">
<view v-if="currentTab === '2' || currentTab === '3' || currentTab === '4'" class="single-info">
<view class="label">人数合计</view>
<view class="value">{{ item.content.allPersonCount || 0 }}</view>
</view>
<view class="line" v-if="currentTab === 2 || currentTab === 3"></view>
<view class="line" v-if="currentTab === '2' || currentTab === '3' || currentTab === '4'"></view>
<view class="single-info">
<view class="label">订单状态</view>
<view class="value" :class="item.effect == 1 ? 'text-success' : 'text-warning'">
......@@ -204,7 +206,7 @@ const tabs = computed(() => {
];
}
});
const currentTab = ref(0);
const currentTab = ref('0');
// 数据与分页配置
const list = ref([]);
......@@ -242,6 +244,9 @@ onMounted(() => {
console.log('onMounted - app.globalData:', app.globalData);
deptType.value = Number(app.globalData?.deptType || 0);
console.log('onMounted - deptType.value:', deptType.value, typeof deptType.value);
const firstType = tabs.value[0]?.type ?? '0';
currentTab.value = firstType;
queryParams.type = firstType;
initData();
});
......@@ -269,9 +274,9 @@ const loadMore = () => {
};
// 切换标签
const switchTab = (index) => {
currentTab.value = index;
queryParams.type = tabs.value[index].type;
const switchTab = (type) => {
currentTab.value = type;
queryParams.type = type;
pageNum.value = 1;
list.value = [];
hasMore.value = true;
......@@ -489,10 +494,11 @@ const closeCancelPopup = () => {
margin-bottom: 20rpx;
padding: 20rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
border-top: 6rpx solid transparent;
background-clip: padding-box, border-box;
background-origin: padding-box, border-box;
background-image: linear-gradient(#fff, #fff), linear-gradient(90deg, #FF755A, #F51722);
border-radius: 12rpx;
// border-top: 6rpx solid transparent;
// background-clip: padding-box, border-box;
// background-origin: padding-box, border-box;
// background-image: linear-gradient(#fff, #fff), linear-gradient(90deg, #FF755A, #F51722);
}
}
......@@ -502,8 +508,8 @@ const closeCancelPopup = () => {
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
margin-bottom: 20rpx;
border-bottom: 1rpx dashed #eee;
// margin-bottom: 20rpx;
// border-bottom: 1rpx dashed #eee;
.date {
display: flex;
......@@ -545,19 +551,28 @@ const closeCancelPopup = () => {
margin-left: 10rpx;
}
&.status-wait {
background: #f0f5ff;
color: #597ef7;
border: 1rpx solid rgba(89, 126, 247, 0.3);
}
&.status-pending {
background: #fff7e6;
color: #faad14;
border: 1rpx solid rgba(250, 173, 20, 0.3);
}
&.status-success {
background: #e6f7ef;
color: #52c41a;
border: 1rpx solid rgba(82, 196, 26, 0.3);
}
&.status-danger {
background: #fff1f0;
color: #ff4d4f;
border: 1rpx solid rgba(232, 52, 29, 0.3);
}
}
}
......@@ -622,8 +637,8 @@ const closeCancelPopup = () => {
// 费用合计
.price-section {
border-top: 1rpx dashed #eee;
padding-top: 16rpx;
// border-top: 1rpx dashed #eee;
// padding-top: 16rpx;
margin-top: 8rpx;
.price-row {
......
......@@ -9,10 +9,10 @@
<view @click="goDetail(item)">
<view class="status">
<text :class="{
'text-primary':item.scoreStatus=='0',
'text-success':item.scoreStatus=='2',
'text-danger':item.scoreStatus=='3',
'text-warning':item.scoreStatus=='4'
'text-primary-bg':item.scoreStatus=='0',
'text-success-bg':item.scoreStatus=='2',
'text-danger-bg':item.scoreStatus=='3',
'text-warning-bg':item.scoreStatus=='4'
}">{{ item.scoreStatusStr }}</text>
</view>
......
......@@ -9,18 +9,16 @@
<view @click="goDetail(item)">
<view class="status" >
<text :class="{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
'text-primary-bg':item.auditStatus=='0',
'text-success-bg':item.auditStatus=='1',
'text-danger-bg':item.auditStatus=='2',
'text-warning-bg':item.auditStatus=='3'
}">{{ item.statusStr }}</text>
</view>
<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
<view class="text-primary">{{item.examCode}}</view>
<view class="name mt0" >{{item.name}}</view>
<view class="pp esp">申请单位:{{item.memberName}}</view>
<view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}</view>
<view class="flexbox" >
<view>
申请日期
......@@ -31,6 +29,9 @@
<view>{{item.totalNum||'--'}}</view>
</view>
</view>
<view class="pp esp">申请单位:{{item.memberName}}</view>
<view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}</view>
</view>
<view class="func" v-if="item.auditStatus=='0'">
<button @click="audit(item,'2')">拒绝</button>
......
......@@ -8,15 +8,14 @@
<view @click="goDetail(item)">
<view class="status" >
<text :class="{
'text-primary':item.certStatus=='0',
'text-warning':item.certStatus=='1',
'text-success':item.certStatus=='2',
'text-primary-bg':item.certStatus=='0',
'text-warning-bg':item.certStatus=='1',
'text-success-bg':item.certStatus=='2',
}">{{ item.certStatusStr }}</text>
</view>
<view class="date">结算编号:{{item.payCode}}</view>
<view class="name mt0" >{{item.name}}</view>
<view class="pp esp">考试时间:{{item.startTime?.substring(0,16)}}{{item.endTime?.substring(0,16)}}</view>
<view class="flexbox" >
<view>
申请日期
......@@ -35,6 +34,8 @@
<view>{{item.noCerts}}</view>
</view>
</view>
<view class="pp esp">考试时间:{{item.startTime?.substring(0,16)}}{{item.endTime?.substring(0,16)}}</view>
</view>
<view class="func">
<button @click="send(item)">一键生成</button>
......
......@@ -9,10 +9,10 @@
<view @click="goDetail(item)">
<view class="status">
<text :class="{
'text-primary':item.auditStatus=='0',
'text-success':item.auditStatus=='1',
'text-danger':item.auditStatus=='2',
'text-warning':item.auditStatus=='3'
'text-primary-bg':item.auditStatus=='0',
'text-success-bg':item.auditStatus=='1',
'text-danger-bg':item.auditStatus=='2',
'text-warning-bg':item.auditStatus=='3'
}">{{ item.statusStr }}</text>
</view>
......@@ -22,8 +22,6 @@
</view>
<view class="text-primary">{{item.examCode}}</view>
<view class="name mt10"><text class="dot"></text>{{item.name}}</view>
<view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}
</view>
<view class="flexbox">
<view>
申请日期
......@@ -40,6 +38,9 @@
</view>
</view>
</view>
<view class="pp esp">考段日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}
</view>
</view>
<view class="func" v-if="item.auditStatus=='0'">
<button @click="audit(item,'2')">拒绝</button>
......
......@@ -19,9 +19,10 @@
<!-- 订单头部:日期 + 状态 -->
<view class="card-header">
<view class="date">
<image v-if="item.payTime" :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix"
style="width:30rpx;height:30rpx;"/>
<text v-if="item.payTime" class="date-text">{{ item.payTime }}</text>
<!-- <image v-if="item.payTime" :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" mode="widthFix" -->
<!-- style="width:30rpx;height:30rpx;"/> -->
<!-- <text v-if="item.payTime" class="date-text">{{ item.payTime }}</text> -->
<text class="value text-primary" >{{ item.wfCode || '——' }}</text>
</view>
<view
:class="{
......@@ -41,8 +42,8 @@
<text class="value">{{ item.tradeNo || '——' }}</text>
</view>
<view class="info-row">
<text class="label">缴费编号</text>
<text class="value">{{ item.wfCode || '——' }}</text>
<text class="label">支付时间</text>
<text class="value">{{ item.payTime || '' }}</text>
</view>
<!-- 核心:个人会员仅展示缴费年限 -->
......@@ -305,7 +306,7 @@ const closeCancelPopup = () => {
<style lang="scss" scoped>
.order-page {
background: #f5f7fa;
min-height: 100vh;
height: 100vh;
display: flex;
flex-direction: column;
......@@ -318,7 +319,8 @@ const closeCancelPopup = () => {
// 滚动列表容器
.order-list-scroll {
flex: 1;
height: 0;
height: auto;
overflow: auto;
}
// 订单列表
......@@ -330,10 +332,7 @@ const closeCancelPopup = () => {
margin-bottom: 20rpx;
padding: 20rpx;
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
border-top: 6rpx solid transparent;
background-clip: padding-box, border-box;
background-origin: padding-box, border-box;
background-image: linear-gradient(#fff, #fff), linear-gradient(90deg, #FF755A, #F51722);
border-radius: 12rpx;
}
}
......@@ -343,8 +342,6 @@ const closeCancelPopup = () => {
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
margin-bottom: 20rpx;
border-bottom: 1rpx dashed #eee;
.date {
display: flex;
......@@ -358,23 +355,26 @@ const closeCancelPopup = () => {
}
.status-tag {
font-size: 24rpx;
font-size: 22rpx;
padding: 6rpx 16rpx;
border-radius: 20rpx;
&.success {
background: #e6f7ef;
color: #52c41a;
border: 1rpx solid rgba(82, 196, 26, 0.3);
}
&.danger {
background: #fff1f0;
color: #ff4d4f;
border: 1rpx solid rgba(232, 52, 29, 0.3);
}
&.pending {
background: #f5f5f5;
color: #999;
background: #fff7e6;
color: #faad14;
border: 1rpx solid rgba(250, 173, 20, 0.3);
}
}
}
......@@ -436,10 +436,9 @@ const closeCancelPopup = () => {
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 0 30rpx;
padding: 15rpx 0;
font-size: 28rpx;
border-bottom: 1rpx dashed #eee;
margin: 0 0 16rpx;
padding: 8rpx 0;
font-size: 26rpx;
.label {
color: #333;
......@@ -448,7 +447,7 @@ const closeCancelPopup = () => {
.amount {
color: #EB6100;
font-weight: 600;
font-size: 32rpx;
font-size: 28rpx;
}
}
......@@ -507,9 +506,6 @@ const closeCancelPopup = () => {
}
}
// 空状态
// 加载/无更多提示
.loading-tip, .no-more {
text-align: center;
......
......@@ -12,11 +12,11 @@
<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>
<text v-if="item.status == 0" class="text-warning-bg">待提交</text>
<text v-if="item.status == 1" class="text-primary-bg">审核中</text>
<text v-if="item.status == 2" class="text-success-bg">审核通过</text>
<text v-if="item.status == 3" class="text-danger-bg">审核拒绝</text>
<text v-if="item.status == 4" class="text-warning-bg">已撤回</text>
</view>
</view>
......
......@@ -22,88 +22,64 @@
:scroll-enabled="!isPopupOpen"
>
<view class="order-list">
<!-- 有数据才循环 -->
<view v-if="list.length > 0">
<view
v-for="(item, index) in list"
:key="index"
class="order-card"
class="order-card" @click="goToDetail(item)"
>
<!-- 订单头部:日期 + 状态 -->
<!-- 订单头部:日期 + 审核状态 -->
<view class="card-header">
<view class="date">
<image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" v-if="item.payTime" mode="widthFix" style="width:30rpx;height:30rpx;"/>
<text class="date-text" v-if="item.payTime">{{ item.payTime }}</text>
<text class="value order-no text-primary">{{ item.wfCode || '' }}</text>
<!-- <image :src="config.baseUrl_api + '/fs/static/calendar@2x.png'" v-if="item.payTime" mode="widthFix" style="width:30rpx;height:30rpx;"/>
<text class="date-text" v-if="item.payTime">{{ item.payTime }}</text> -->
</view>
<view
class="status-tag"
:class="getStatusClass(item.payStatus)"
class="audit-status-tag"
:class="getAuditStatusClass(item.auditStatus)"
>
{{ getStatusText(item.payStatus) }}
{{ getAuditStatusText(item.auditStatus) }}
</view>
</view>
<!-- 订单编号、缴费编号 -->
<!-- 订单编号 -->
<view class="info-row">
<text class="label">订单编号</text>
<text class="value order-no">{{ item.tradeNo || '——' }}</text>
</view>
<view class="flex f-j-s">
<view class="info-row">
<text class="label">缴费编号:</text>
<view class="payment-code" @click="goToDetail(item)">
<text class="code-text">{{ item.wfCode || '——' }}</text>
<!-- <text class="code-arrow"></text> -->
</view>
</view>
<view class="audit-row">
<!-- <text class="label">审核状态:</text> -->
<text class="audit-status" :class="getAuditStatusClass(item.auditStatus)">{{ getAuditStatusText(item.auditStatus) }}</text>
</view>
<!-- 缴费编号 -->
<view class="info-row payment-code-row" v-if="item.payTime">
<text class="label">缴费时间</text>
<text class="value order-no">{{ item.payTime || '' }}</text>
<!-- <view class="payment-code" >
<text class="code-text">{{ item.payTime || '——' }}</text>
</view> -->
</view>
<!-- 核心:根据tab类型展示不同内容 -->
<view class="info-section flex f-j-s" v-if="item.content">
<!-- 个人/单位会员(缴费年限) -->
<!-- 核心信息区:缴费年限/人数 + 缴费方式 -->
<view class="info-section flex f-j-s">
<view v-if="currentTab === 0 || currentTab === 1" class="single-info">
<view class="label">缴费年限</view>
<view class="value">{{ item.content.yearCount || 0 }}</view>
<view class="label">缴费年限</view>
<view class="value">{{ item.content?.yearCount || 0 }}</view>
</view>
<!-- 级位/段位/越段考试(人数合计) -->
<view v-if="currentTab === 2 || currentTab === 3 || currentTab === 4" class="single-info">
<view class="label">人数合计</view>
<view class="value">{{ item.content.allPersonCount || 0 }}</view>
<view class="value">{{ item.content?.allPersonCount || 0 }}</view>
</view>
<view class="line"></view>
<view class="divider"></view>
<view class="single-info">
<view class="label">缴费方式</view>
<view class="value">民生付</view>
<view class="value">{{ item.payWay || '民生付' }}</view>
</view>
</view>
<!-- 费用合计 -->
<view class="total-row">
<text class="label">费用合计</text>
<text class="label">费用合计</text>
<text class="amount">¥{{ (Number(item.price) || 0).toFixed(2) }}</text>
</view>
<!-- 审核状态 -->
<!-- <view class="btn-group">
<button class="btn btn-delete" @click="handleDelete(item)">删除</button>
<template v-if="item.payStatus == 1">
<button class="btn btn-invoice" @click="makeInvoiceFN(item)" :disabled="item.invoiceStatus === 1">
{{ item.invoiceStatus === 1 ? '已开票' : '申请开票' }}
</button>
</template>
<template v-if="item.payStatus == 0">
<button class="btn btn-cancel" @click="handleCancel(item)">取消订单</button>
<button class="btn btn-pay" @click="handlePay(item)">去缴费</button>
</template>
</view> -->
</view>
</view>
......@@ -149,6 +125,7 @@ import { ref, reactive, onMounted, computed } from 'vue';
import { onReachBottom, onLoad } from '@dcloudio/uni-app'
import * as api from '@/common/api.js'
import config from '@/config.js'
// 标签栏配置
const tabs = ref([
{ name: '个人会员', type: '0' },
......@@ -188,7 +165,6 @@ const currentOrder = ref(null);
// 页面加载
onLoad(option => {
// 根据传入的type参数设置当前tab
if (option.type) {
const type = option.type;
const tabIndex = tabs.value.findIndex(tab => tab.type === type);
......@@ -218,33 +194,8 @@ const switchTab = (index) => {
initData();
};
// 状态文本映射
const getStatusText = (status) => {
// 确保status是字符串类型
const statusStr = String(status);
const map = {
'0': '待缴费',
'1': '缴费成功',
'2': '订单取消'
};
return map[statusStr] || '未知状态';
};
// 缴费状态样式类
const getStatusClass = (status) => {
// 确保status是字符串类型
const statusStr = String(status);
const map = {
'0': 'status-pending',
'1': 'status-success',
'2': 'status-danger'
};
return map[statusStr] || '';
};
// 审核状态文本
const getAuditStatusText = (status) => {
// 确保status是字符串类型
const statusStr = String(status);
const map = {
'0': '待提交',
......@@ -257,7 +208,6 @@ const getAuditStatusText = (status) => {
// 审核状态样式类
const getAuditStatusClass = (status) => {
// 确保status是字符串类型
const statusStr = String(status);
const map = {
'0': 'audit-pending',
......@@ -280,7 +230,6 @@ const initData = async () => {
hasMore.value = false;
return;
}
// 安全解析content字段
res.rows.forEach(item => {
if (item.content) {
try {
......@@ -290,13 +239,11 @@ const initData = async () => {
}
}
});
// 分页拼接数据
if (pageNum.value === 1) {
list.value = res.rows;
} else {
list.value.push(...res.rows);
}
// 判断是否还有更多数据
hasMore.value = list.value.length < (res.total || 0);
} catch (e) {
console.error('订单加载异常:', e);
......@@ -385,21 +332,17 @@ const closeCancelPopup = () => {
// 跳转到详情页
const goToDetail = (item) => {
const form = encodeURIComponent(JSON.stringify(item))
// 根据订单类型跳转到不同页面
switch (queryParams.type) {
case '1': // 单位会员
// 跳转到新的单位会员订单详情页
case '1':
uni.navigateTo({ url: `/group/groupOrderDetail?form=${form}` });
break;
case '2': // 级位考试
case '3': // 段位考试
case '4': // 越段考试
// 考试类型使用 sourceId 作为 examId,传递 type 参数用于获取审核记录
case '2':
case '3':
case '4':
uni.navigateTo({ url: `/pages/rank/applyDetail?examId=${item.sourceId || item.id}&type=${queryParams.type}` });
break;
case '0': // 个人会员
case '0':
default:
// 个人会员使用 sourceId 作为 rangeId
uni.navigateTo({ url: `/personalVip/orderDetail?rangeId=${item.sourceId || item.id}&type=${queryParams.type}` });
break;
}
......@@ -466,14 +409,11 @@ const goToDetail = (item) => {
.order-card {
background: #fff;
margin-bottom: 20rpx;
padding: 20rpx;
padding: 24rpx;
border-radius: 16rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.06);
// border-left: 6rpx solid #e8341d;
position: relative;
overflow: hidden;
}
}
......@@ -483,42 +423,48 @@ const goToDetail = (item) => {
justify-content: space-between;
align-items: center;
padding-bottom: 20rpx;
margin-bottom: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
// margin-bottom: 20rpx;
// border-bottom: 1rpx solid #f0f0f0;
.date {
display: flex;
align-items: center;
gap: 8rpx;
font-size: 26rpx;
// gap: 8rpx;
font-size: 28rpx;
.date-text {
color: #666;
}
}
.status-tag {
font-size: 22rpx;
.audit-status-tag {
font-size: 24rpx;
padding: 6rpx 18rpx;
border-radius: 22rpx;
font-weight: 500;
&.status-success {
&.audit-success {
background: linear-gradient(135deg, #e6f7ef, #d4f5e2);
color: #1db024;
border: 1rpx solid rgba(#52c41a, 0.3);
border: 1rpx solid rgba(82, 196, 26, 0.3);
}
&.status-danger {
&.audit-danger {
background: linear-gradient(135deg, #fff1f0, #ffe5e5);
color: #e8341d;
border: 1rpx solid rgba(#e8341c, 0.3);
border: 1rpx solid rgba(232, 52, 29, 0.3);
}
&.status-pending {
background: linear-gradient(135deg, #f5f5f5, #ebebeb);
color: #666;
border: 1rpx solid rgba(#999, 0.3);
&.audit-processing {
background: linear-gradient(135deg, #e6f3ff, #d4e9ff);
color: #1890ff;
border: 1rpx solid rgba(24, 144, 255, 0.3);
}
&.audit-pending {
background: linear-gradient(135deg, #fff7e6, #fff1cc);
color: #faad14;
border: 1rpx solid rgba(250, 173, 20, 0.3);
}
}
}
......@@ -527,13 +473,14 @@ const goToDetail = (item) => {
.info-row {
display: flex;
align-items: center;
margin-bottom: 20rpx;
font-size: 26rpx;
margin-bottom: 16rpx;
font-size: 28rpx;
.label {
color: #999;
color: #666;
flex-shrink: 0;
margin-right: 20rpx;
width: 120rpx;
margin-right: 10rpx;
}
.value {
......@@ -541,72 +488,65 @@ const goToDetail = (item) => {
word-break: break-all;
&.order-no {
font-size: 24rpx;
color: #999;
letter-spacing: 1rpx;
font-size: 26rpx;
}
}
}
// 缴费编号行
.payment-code-row {
margin-bottom: 20rpx;
}
// 缴费编号 - 醒目可点击
.payment-code {
display: inline-flex;
align-items: center;
gap: 6rpx;
// background: linear-gradient(135deg, #fff5f5, #ffeaea);
padding: 8rpx 20rpx 8rpx 16rpx;
border-radius: 24rpx;
// border: 1rpx solid rgba(#e8341d, 0.2);
transition: all 0.2s ease;
// transition: all 0.2s ease;
&:active {
background: linear-gradient(135deg, #ffeaea, #ffd5d5);
opacity: 0.8;
transform: scale(0.98);
}
.code-text {
font-size: 28rpx;
font-weight: 600;
color: #e8341d;
letter-spacing: 1rpx;
}
.code-arrow {
font-size: 32rpx;
color: #e8341d;
font-weight: bold;
line-height: 1;
font-size: 30rpx;
// font-weight: 600;
color: #1890ff;
// letter-spacing: 1rpx;
}
}
// 核心信息区
.info-section {
background: linear-gradient(135deg, #f8f9fc, #f0f4fa);
background: #f4f9fd;
display: flex;
align-items: center;
padding: 0 40rpx;
justify-content: space-around;
margin: 20rpx 0;
border-radius: 12rpx;
padding: 16rpx 0;
}
.line{
.divider {
width: 1rpx;
height: 90%;
background: #eee;
height: 60rpx;
background: #e5e5e5;
}
.single-info {
padding: 16rpx 20rpx;
border-radius: 8rpx;
font-size: 26rpx;
.label {
color: #999;
flex: 1;
text-align: center;
font-size: 28rpx;
.label {
color: #666;
margin-bottom: 8rpx;
}
.value {
color: #333;
font-weight: 500;
text-align: center;
margin-top: 10rpx;
}
}
......@@ -615,10 +555,9 @@ const goToDetail = (item) => {
display: flex;
justify-content: space-between;
align-items: center;
// margin: 0 0 30rpx;
padding: 15rpx 0;
padding-top: 10rpx;
// border-top: 1rpx solid #f0f0f0;
font-size: 28rpx;
// border-bottom: 1rpx dashed #eee;
.label {
color: #333;
......@@ -633,96 +572,6 @@ const goToDetail = (item) => {
}
}
// 审核状态
.audit-row {
display: flex;
align-items: center;
// margin: 0 0 30rpx;
// padding: 15rpx 0;
font-size: 26rpx;
.label {
color: #999;
flex-shrink: 0;
width: 140rpx;
}
.audit-status {
font-weight: 500;
&.audit-success {
color: #52c41a;
}
&.audit-danger {
color: #ff4d4f;
}
&.audit-processing {
color: #1890ff;
}
&.audit-pending {
color: #faad14;
}
}
}
// 按钮组
.btn-group {
display: flex;
justify-content: flex-end;
align-items: center;
gap: 16rpx;
width: 100%;
.btn {
padding: 12rpx 32rpx;
border-radius: 40rpx;
font-size: 24rpx;
line-height: 1.5;
white-space: nowrap;
display: inline-block;
margin: 0;
border: none;
width: 80px;
background: transparent;
&::after {
border: none;
}
&.btn-delete {
background: #fff;
color: #e4393c;
border: 1rpx solid #e4393c;
}
&.btn-invoice {
background: #fff;
color: #e4393c;
border: 1rpx solid #e4393c;
}
&.btn-cancel {
background: #fff;
color: #666;
border: 1rpx solid #ccc;
}
&.btn-pay {
background: linear-gradient(90deg, #FF755A, #F51722);
color: #fff;
border: none;
}
&:disabled {
opacity: 0.6;
pointer-events: none;
}
}
}
// 空状态
.empty {
display: flex;
......@@ -731,7 +580,7 @@ const goToDetail = (item) => {
padding: 120rpx 0;
.empty-text {
color: #999;
color: #666;
font-size: 28rpx;
}
}
......@@ -740,7 +589,7 @@ const goToDetail = (item) => {
.loading-tip, .no-more {
text-align: center;
padding: 20rpx 0;
color: #999;
color: #666;
font-size: 26rpx;
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!