3dd81aba by lttnew

接口修改

1 parent 58412f8a
......@@ -747,7 +747,7 @@ export function delPayment(payIds) {
}
export function paymentDel(payIds) {
return request({
url: `/person/paymentRange/${payIds}`,
url: `/person/paymentRangeNew/${payIds}`,
method: 'DELETE'
})
}
......@@ -1303,7 +1303,14 @@ export function certifiedNew(params) {
// 模拟回调
export function callBack2(orderId) {
return request({
url: `/system/certifiedNew/callBack2/${orderId}`
url: `/system/certifiedNew/callBack2/${orderId}`,
method: 'get',
})
}
export function pcallBack2(orderId) {
return request({
url: `/person/paymentRangeNew/callBack2/${orderId}`,
method: 'get',
})
}
// 优惠政策回显
......
<template>
<template>
<view>
<!-- 会员认证 -->
<view class="searchbar">
......@@ -6,96 +6,96 @@
v-model="queryParams.rangeName" placeholder="缴费名称" @blur="getList" @clear="getList">
</uni-easyinput>
<view class="invertedbtn-red" v-if="userType=='2'" @click="goAddPay">+ 新建缴费</view>
</view>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
</view>
<view class="appList">
<view class="appItem" v-for="(item,index) in list" :key="index">
<view class="status" @click="goDetail(item)">
<text v-if="item?.content?.status==0" class="text-primary">待提交</text>
<text v-if="item?.content?.status==1" class="text-primary">审核中</text>
<text v-if="item?.content?.status==2" class="text-success"> 审核通过</text>
<text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text>
<text v-if="item?.content?.status==4" class="text-warning">已撤回</text>
<text v-if="item?.content?.status==1" class="text-primary">审核中</text>
<text v-if="item?.content?.status==2" class="text-success"> 审核通过</text>
<text v-if="item?.content?.status==3" class="text-danger"> 审核拒绝</text>
<text v-if="item?.content?.status==4" class="text-warning">已撤回</text>
</view>
<view class="date">{{item?.content?.commitTime}} 提交</view>
<view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
<view class="text-primary" v-if="item.wfCode">{{item.wfCode}}</view>
<view class="name mt0" @click="goDetail(item)">{{item.rangeName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view>
会员合计
<view>{{item.allCount}}</view>
</view>
<view v-if="userType!='2'">
续费年限
<view>{{item.content?.renewYear}}</view>
</view>
<view :class="userType=='2'?'w50':''">
年限合计
<view>{{item.totalRenewYear}}</view>
</view>
</view>
<view class="func" v-if="item.content?.status==0||item.content?.status==3||item.content?.status==4">
<view class="flexbox" @click="goDetail(item)">
<view>
会员合计
<view>{{item.allCount}}</view>
</view>
<view v-if="userType!='2'">
续费年限
<view>{{item.content?.renewYear}}</view>
</view>
<view :class="userType=='2'?'w50':''">
年限合计
<view>{{item.totalRenewYear}}</view>
</view>
</view>
<view class="func" v-if="item.content?.status==0||item.content?.status==3||item.content?.status==4">
<button @click="handleDelete(item)">删除</button>
<button @click="handleUpdate(item)">编辑</button>
<button @click="commitFN(item)">提交审核</button>
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,onShow
} from '@dcloudio/uni-app'
const app = getApp();
</view>
</view>
</view>
<view class="nodata" v-if="list.length==0">
<image mode="aspectFit" src="/static/nodata.png"></image>
<text>暂无数据</text>
</view>
</view>
</template>
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,onShow
} from '@dcloudio/uni-app'
const app = getApp();
const list = ref([])
const queryParams = ref({})
const userType = ref('')
const queryParams = ref({})
const userType = ref('')
const UpPop = ref(null)
const form = ref({
docId:'',
payTime:'',
url:'',
remark:''
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
userType.value = app.globalData.userType
getList()
}
function getList() {
})
onShow(() => {
if (app.globalData.isLogin) {
init()
} else {
app.firstLoadCallback = () => {
init()
};
}
})
function init() {
userType.value = app.globalData.userType
getList()
}
function getList() {
api.getPayList(queryParams.value).then(res => {
for (const item of res.rows) {
item.content = null
if (item.certList?.length > 0) {
item.content = item.certList[0]
}
}
list.value = res.rows
})
}
}
list.value = res.rows
})
}
function commitFN(row) {
uni.showModal({
title: '提示',
......@@ -109,16 +109,16 @@
})
}
})
}
function goDetail(item) {
}
function goDetail(item) {
//详情
const form = encodeURIComponent(JSON.stringify(item))
// 查看
let path = `/group/payDetail?&form=${form}`
uni.navigateTo({
url: path
});
});
}
function goAddPay(){
......@@ -147,9 +147,9 @@
url: path
});
}
</script>
</script>
<style scoped lang="scss">
.searchbar {
display: flex;
......@@ -174,15 +174,15 @@
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
.popBody {
font-size: 28rpx;
line-height: 1.5;
overflow: auto;
padding: 30rpx;
.btn-red {
margin: 50rpx 0 30rpx;
}
}
}
.popBody {
font-size: 28rpx;
line-height: 1.5;
overflow: auto;
padding: 30rpx;
.btn-red {
margin: 50rpx 0 30rpx;
}
}
</style>
\ No newline at end of file
......
......@@ -195,10 +195,11 @@ async function confirmAddExpireExaminer() {
.search-buttons {
display: flex;
justify-content: space-between;
margin-top: 10rpx;
margin-top: 30rpx;
margin-left: 80px;
}
.search-btn, .reset-btn {
width: 200rpx;
width: 220rpx;
height: 70rpx;
line-height: 70rpx;
border-radius: 8rpx;
......
<template>
<view class="container">
<!-- 主内容区域 -->
<view class="content">
<!-- 缴费年限 + 费用卡片 -->
<view class="card">
<!-- 缴费年限 -->
<view class="yearRow">
<view class="label">缴费年限</view>
<view class="control">
......@@ -112,9 +109,9 @@ const handelPay = async () => {
})
} else {
if (data.orderId) {
await callBack2(data.orderId)
api.callBack2(data.orderId)
uni.navigateTo({
url: `/myCenter/goPay`
url: `/myCenter/sucPay`
})
}
......
......@@ -93,18 +93,18 @@ async function handlePay() {
payLoading.value = true
const res = await api.goPay(rangeId.value)
// 订单ID存在则调用回调接口
if (res.data?.orderId) {
await api.callBack2(res.data.orderId)
api.pcallBack2(res.data.orderId)
uni.navigateTo({
url: `/myCenter/sucPay?rangeId=${rangeId.value}from=payOrder`
})
}
// 跳转到支付成功页
uni.navigateTo({
url: `/pages/payOk/payOk?rangeId=${rangeId.value}`
})
} catch (err) {
console.error('支付失败:', err)
uni.showToast({ title: err.data.msg, icon: 'none' })
const errMsg = err?.data?.msg || err?.message || '支付失败,请稍后重试'
uni.showToast({ title: errMsg, icon: 'none' })
} finally {
payLoading.value = false
}
......
......@@ -41,23 +41,30 @@
<!-- 确定按钮(渐变+动效) -->
<view class="confirm-btn-area">
<button class="confirm-btn" @click="handleConfirm">确定</button>
<button class="confirm-btn" @click="goBack">确定</button>
</view>
</view>
</template>
<script setup>
import { onLoad } from '@dcloudio/uni-app'
const goBack = () => {
const pages = getCurrentPages()
const currentPage = pages[pages.length - 1]
const { from } = currentPage.options || {}
// 确定按钮点击事件
const handleConfirm = () => {
uni.navigateBack({ delta: 1 })
// 也可跳转首页:uni.redirectTo({ url: '/pages/index/index' })
let delta = 1
if (from === 'payOrder') {
delta = 2 // 来自添加会员 / 订单页 → 返回 2 级
}else{
delta = 3
}
uni.navigateBack({ delta })
}
onLoad((option) => {
// 可接收订单参数动态渲染,示例:
// if (option.amount) { /* 赋值给金额变量 */ }
})
</script>
......
......@@ -67,11 +67,7 @@
<image mode="aspectFill" v-if="baseFormData.photo2" style="height:200rpx;width:200rpx;" :src="config.baseUrl_api + baseFormData.photo2"/>
</uni-forms-item>
</view>
</uni-forms>
</view>
<view class="agreeline">
<image @click="changeAgree(agree)" v-if="agree"
......@@ -84,7 +80,7 @@
<view class="fixedBottom"><button class="btn-red" @click="goSubmit">确 定</button></view>
<!-- 会员须知 -->
<uni-popup ref="popup" type="bottom" background-color="#fff" animation>
<uni-popup ref="popup" type="bottom" background-color="#fff" animation :disable-scroll="true" :mask-click="false">
<view class="tt">入会须知</view>
<view class="popBody">
_{{baseFormData.name}}_欢迎您申请成为中国跆拳道协会(以下简称中国跆协)会员,请确保本次申请是经过您本人或监护人授权同意后的自愿行为,请您务必仔细阅读本入会须知。
......@@ -106,7 +102,7 @@
</view>
</uni-popup>
<uni-popup ref="infoConfirm" type="center">
<uni-popup ref="infoConfirm" type="center" :disable-scroll="true" :mask-click="false">
<view class="tt">确认信息</view>
<view class="popBody">
<view>
......@@ -504,7 +500,6 @@
const time = new Date().valueOf() + ''
baseFormData.value.t = time + Math.floor(Math.random() * 10)
baseFormData.value.signT = aes2.AESEncrypt(baseFormData.value.idcType + time)
console.log(baseFormData.value)
api.addPersonToMyDept(baseFormData.value).then(Response => {
if (Response.data == 0) {
let msg = '该成员,实名认证未通过,注册失败!'
......@@ -573,6 +568,7 @@
align-items: center !important;
justify-content: flex-end !important;
text-align: right !important;
flex-wrap: nowrap !important;
}
/* 输入框内容右对齐 */
......@@ -587,18 +583,24 @@
/* 文本内容右对齐 */
.uni-forms-item .uni-forms-item__content text,
.uni-forms-item .uni-forms-item__content > text {
text-align: right !important;
width: 100%;
display: block;
display: inline-block !important;
white-space: nowrap !important;
}
/* 覆盖原有样式 */
:deep(.uni-forms-item__content) {
justify-content: flex-end !important;
}
</style>
<style lang="scss" scoped>
:deep(.uni-popup__mask) {
overflow: hidden !important;
position: fixed !important;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
:deep(.uni-popup) {
overflow: hidden !important;
}
:deep(.segmented-control) {
height: 100rpx;
}
......@@ -617,6 +619,8 @@
.popBody {
font-size: 28rpx;
line-height: 1.5;
height: 70vh;
overflow-y: auto;
font-family: 华文仿宋;
height: 80vh;
overflow: auto;
......@@ -632,6 +636,7 @@
box-sizing: border-box;
display: flex;
font-size: 30rpx;
text {
color: #014A9F;
......@@ -671,4 +676,13 @@
:deep(.item-text-overflow) {
text-align: left;
}
:deep(.fixUniFormItemStyle .uni-data-picker__input-box) {
justify-content: flex-start !important;
text-align: left !important;
}
/* 让地区选择器的文本左对齐 */
:deep(.fixUniFormItemStyle .uni-data-picker__text) {
text-align: left !important;
}
</style>
\ No newline at end of file
......
<template>
<!-- 根容器:弹窗时强制固定定位,彻底锁死滚动 -->
<view class="container" :class="{ 'lock-scroll': showModal }">
<!-- 搜索栏 -->
<view class="search-bar">
<uni-easyinput
class="search-input"
placeholderStyle="font-size:30rpx;color:#999"
:input-border="false"
prefixIcon="search"
v-model="queryParams.memName"
placeholder="搜索缴费名称"
@blur="getList"
@clear="getList">
</uni-easyinput>
<view class="add-btn" @click="goAdd">
<text class="add-icon">+</text>
<text class="add-text">新建缴费</text>
<!-- 固定顶部:搜索栏 + 状态Tab -->
<view class="fixed-header-wrapper">
<!-- 搜索栏 -->
<view class="search-bar">
<uni-easyinput
class="search-input"
placeholderStyle="font-size:30rpx;color:#999"
:input-border="false"
prefixIcon="search"
v-model="queryParams.memName"
placeholder="搜索缴费名称"
@blur="getList"
@clear="getList">
</uni-easyinput>
<view class="add-btn" @click="goAdd">
<text class="add-icon">+</text>
<text class="add-text">新建缴费</text>
</view>
</view>
</view>
<!-- 1. 新增:审核状态筛选 Tab -->
<view class="status-tabs">
<view class="tab-item" :class="{ active: activeTab === '' }" @click="switchTab('')">全部</view>
<view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">待提交</view>
<view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">审核中</view>
<view class="tab-item" :class="{ active: activeTab === 2 }" @click="switchTab(2)">审核通过</view>
<view class="tab-item" :class="{ active: activeTab === 3 }" @click="switchTab(3)">审核拒绝</view>
<!-- 审核状态筛选 Tab -->
<view class="status-tabs">
<view class="tab-item" :class="{ active: activeTab === '' }" @click="switchTab('')">全部</view>
<view class="tab-item" :class="{ active: activeTab === 0 }" @click="switchTab(0)">待提交</view>
<view class="tab-item" :class="{ active: activeTab === 1 }" @click="switchTab(1)">审核中</view>
<view class="tab-item" :class="{ active: activeTab === 2 }" @click="switchTab(2)">审核通过</view>
<view class="tab-item" :class="{ active: activeTab === 3 }" @click="switchTab(3)">审核拒绝</view>
</view>
</view>
<!-- 会员缴费列表 -->
<view class="list-container" v-if="list.length > 0">
<view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)">
<view class="item-header">
<view class="left-info">
<text class="mem-name">{{ item.memName }}</text>
<text class="wf-code" v-if="item.wfCode">{{ item.wfCode }}</text>
</view>
<view class="status-badge" :class="getStatusClass(item.auditStatus)">
{{ getStatusText(item.auditStatus) }}
<!-- 内容区域:自动滚动(顶部留出固定栏高度) -->
<view class="scroll-content">
<!-- 会员缴费列表 -->
<view class="list-container" v-if="list.length > 0">
<view class="list-item" v-for="(item, index) in list" :key="index" @click="goDetail(item)">
<view class="item-header">
<view class="left-info">
<text class="mem-name">{{ item.memName }}</text>
<text class="wf-code" v-if="item.wfCode">{{ item.wfCode }}</text>
</view>
<view class="status-badge" :class="getStatusClass(item.auditStatus)">
{{ getStatusText(item.auditStatus) }}
</view>
</view>
</view>
<view class="stats-row">
<view class="stat-item">
<text class="stat-label">人数合计</text>
<text class="stat-value">{{ item.allCount || 0 }}</text>
<view class="stats-row">
<view class="stat-item">
<text class="stat-label">人数合计</text>
<text class="stat-value">{{ item.allCount || 0 }}</text>
</view>
<view class="stat-item">
<text class="stat-label">新会员合计</text>
<text class="stat-value">{{ item.newCount || 0 }}</text>
</view>
<view class="stat-item">
<text class="stat-label">年限合计</text>
<text class="stat-value">{{ item.yearCount || 0 }}</text>
</view>
</view>
<view class="stat-item">
<text class="stat-label">新会员合计</text>
<text class="stat-value">{{ item.newCount || 0 }}</text>
<view class="submit-time" v-if="item.commitTime">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text class="time-text">{{ item.commitTime }} 提交</text>
</view>
<view class="stat-item">
<text class="stat-label">年限合计</text>
<text class="stat-value">{{ item.yearCount || 0 }}</text>
<view class="action-buttons">
<button
class="action-btn delete-btn"
@click.stop="handleDel(item)"
:disabled="item.auditStatus == 1 || item.auditStatus == 9">
删除
</button>
<button
class="action-btn edit-btn"
@click.stop="handleUpdate(item)"
:disabled="item.auditStatus != 0">
编辑
</button>
<button
class="action-btn submit-btn"
@click.stop="commitFN(item)"
:disabled="item.auditStatus != 0">
提交审核
</button>
</view>
</view>
<view class="submit-time" v-if="item.commitTime">
<uni-icons type="calendar-filled" size="16" color="#AD181F"></uni-icons>
<text class="time-text">{{ item.commitTime }} 提交</text>
<view class="load-more" v-if="hasMore">
<text class="load-text">加载中...</text>
</view>
<view class="action-buttons">
<button
class="action-btn delete-btn"
@click.stop="handleDel(item)"
:disabled="item.auditStatus == 1 || item.auditStatus == 9">
删除
</button>
<button
class="action-btn edit-btn"
@click.stop="handleUpdate(item)"
:disabled="item.auditStatus != 0">
编辑
</button>
<button
class="action-btn submit-btn"
@click.stop="commitFN(item)"
:disabled="item.auditStatus != 0">
提交审核
</button>
<view class="load-more" v-else-if="list.length > 0">
<text class="load-text">没有更多数据了</text>
</view>
</view>
</view>
<!-- 空数据状态 -->
<view class="empty-state" v-else>
<image mode="aspectFit" src="/static/nodata.png" class="empty-icon"></image>
<text class="empty-text">暂无数据</text>
<!-- 空数据状态 -->
<view class="empty-state" v-else>
<image mode="aspectFit" src="/static/nodata.png" class="empty-icon"></image>
<text class="empty-text">暂无数据</text>
</view>
</view>
<!-- 弹窗 -->
<view
class="modal-mask"
v-show="showModal"
......@@ -102,7 +117,7 @@
@click.stop
@touchmove.stop.prevent="() => {}"
>
<view class="modal-title">提示</view>
<view class="modal-title">提示</view>
<view class="modal-con">{{ modalTitle }}</view>
<view class="modal-buttons">
<view class="btn-cancel" @click="closeModal">取消</view>
......@@ -117,18 +132,27 @@
import * as api from '@/common/api.js'
import config from '@/config.js'
import { ref, onUnmounted } from 'vue'
import { onLoad, onShow, onReady } from '@dcloudio/uni-app'
import { onLoad, onShow, onReady, onReachBottom } from '@dcloudio/uni-app'
const queryParams = ref({})
const list = ref([])
const total = ref(0)
// 新增:状态 Tab 激活项
const activeTab = ref('')
// ========== 1. 彻底解决弹窗默认显示 ==========
let showModal = ref(false)
// ========== 分页参数 ==========
const pageNum = ref(1)
const pageSize = ref(10)
const hasMore = ref(true)
const loading = ref(false)
// ========== 弹窗 ==========
const showModal = ref(false)
const modalTitle = ref('')
let confirmCallback = null
onLoad(() => {
showModal.value = false
resetList()
})
onReady(() => {
showModal.value = false
......@@ -138,15 +162,15 @@ onShow(() => {
getList()
})
const modalTitle = ref('')
let confirmCallback = null
// ========== 2. 移除所有 uni.setPageScrollEnabled 调用 ==========
onUnmounted(() => {
showModal.value = false
// 上拉加载更多
onReachBottom(() => {
if (hasMore.value && !loading.value) {
pageNum.value++
getList()
}
})
// 新增:状态 Tab 切换
// 切换Tab时重置分页
function switchTab(status) {
activeTab.value = status
if (status === '') {
......@@ -154,14 +178,54 @@ function switchTab(status) {
} else {
queryParams.value.auditStatus = status
}
resetList()
getList()
}
function getList() {
api.getPaymentList(queryParams.value).then(res => {
list.value = res.rows || []
// 重置列表
function resetList() {
pageNum.value = 1
list.value = []
hasMore.value = true
}
// 获取列表(支持分页)
async function getList() {
if (loading.value) return
loading.value = true
try {
const res = await api.getPaymentList({
...queryParams.value,
pageNum: pageNum.value,
pageSize: pageSize.value
})
const data = res.rows || []
total.value = res.total || 0
})
if (pageNum.value === 1) {
list.value = data
} else {
list.value = [...list.value, ...data]
}
if (data.length < pageSize.value) {
hasMore.value = false
} else {
hasMore.value = true
}
} catch (err) {
console.log(err)
} finally {
loading.value = false
}
}
// 搜索时重置
function searchFN() {
resetList()
getList()
}
function goDetail(item) {
......@@ -175,14 +239,12 @@ function handleUpdate(item) {
uni.navigateTo({ url: path })
}
// 打开弹窗:只控制弹窗显示,滚动锁定交给 CSS
function openModal(title, callback) {
modalTitle.value = title
showModal.value = true
confirmCallback = callback
}
// 关闭弹窗:只控制弹窗隐藏,滚动恢复交给 CSS
function closeModal() {
showModal.value = false
confirmCallback = null
......@@ -193,7 +255,6 @@ function confirmModal() {
closeModal()
}
// 删除
function handleDel(row) {
showModal.value = false
openModal(`是否确认删除缴费编号为"${row.wfCode}"的数据项?`, () => {
......@@ -201,16 +262,16 @@ function handleDel(row) {
api.paymentDel(row.rangId).then(() => {
uni.hideLoading()
uni.showToast({ title: '删除成功' })
resetList()
getList()
})
})
}
// 提交审核
function commitFN(row) {
uni.navigateTo({
url: `/myCenter/payOrder?rangeId=${row.rangId}`
})
url: `/myCenter/payOrder?rangeId=${row.rangId}`
})
}
async function goAdd() {
......@@ -234,25 +295,26 @@ function getStatusText(status) {
function getStatusClass(status) {
const classMap = {
0: 'status-pending',
1: 'status-processing',
0: 'status-processing',
1: 'status-pending',
2: 'status-success',
3: 'status-rejected',
9: 'status-withdrawn'
}
return classMap[status] || 'status-default'
}
onUnmounted(() => {
showModal.value = false
})
</script>
<style lang="scss" scoped>
/* 核心:锁死滚动的样式(优先级最高) */
.container {
min-height: 100vh;
background-color: #f8f9fa;
padding-bottom: 60rpx;
transition: all 0.2s ease;
position: relative;
}
/* 弹窗时强制固定定位,彻底禁止滚动(纯 CSS 实现,不依赖 API) */
.container.lock-scroll {
position: fixed;
top: 0;
......@@ -262,14 +324,32 @@ function getStatusClass(status) {
overflow: hidden !important;
}
/* ============= 核心:固定顶部 ============= */
.fixed-header-wrapper {
position: fixed;
top: 0;
left: 0;
right: 0;
background: #fff;
z-index: 10;
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04);
}
/* 内容区域:顶部留出固定栏高度 */
.scroll-content {
padding-top: 190rpx;
padding-bottom: 60rpx;
min-height: 100vh;
box-sizing: border-box;
}
/* 搜索栏 */
.search-bar {
display: flex;
align-items: center;
padding: 20rpx 30rpx;
background-color: #ffffff;
margin-bottom: 24rpx;
box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.04);
margin-bottom: 0;
.search-input {
flex: 1;
......@@ -280,18 +360,11 @@ function getStatusClass(status) {
background-color: #f5f7fa;
height: 76rpx;
padding: 0 24rpx;
transition: all 0.3s ease;
}
:deep(.uni-easyinput__content-input) {
font-size: 28rpx;
color: #333;
letter-spacing: 0.5rpx;
}
:deep(.uni-easyinput__content):focus-within {
background-color: #f0f2f5;
box-shadow: 0 0 0 2rpx rgba(173, 24, 31, 0.1);
}
}
......@@ -303,28 +376,20 @@ function getStatusClass(status) {
border-radius: 40rpx;
font-size: 28rpx;
color: #ffffff;
box-shadow: 0 4rpx 12rpx rgba(173, 24, 31, 0.2);
transition: all 0.2s ease;
&:active {
transform: scale(0.96);
box-shadow: 0 2rpx 8rpx rgba(173, 24, 31, 0.15);
}
.add-icon {
font-size: 36rpx;
margin-right: 10rpx;
font-weight: bold;
}
}
.add-icon {
font-size: 36rpx;
margin-right: 10rpx;
font-weight: bold;
}
}
/* 1. 新增:审核状态筛选 Tab 样式 */
/* 状态Tab */
.status-tabs {
display: flex;
background: #fff;
padding: 0 30rpx;
margin-bottom: 20rpx;
.tab-item {
flex: 1;
......@@ -354,24 +419,16 @@ function getStatusClass(status) {
}
}
/* 列表容器 */
/* 列表 */
.list-container {
padding: 0 30rpx;
}
/* 列表项 */
.list-item {
background: #ffffff;
border-radius: 24rpx;
padding: 36rpx 32rpx;
margin-bottom: 24rpx;
box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
transition: all 0.2s ease;
&:active {
transform: translateY(2rpx);
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.04);
}
}
.item-header {
......@@ -392,7 +449,6 @@ function getStatusClass(status) {
font-weight:600;
color:#1a1a1a;
margin-right:16rpx;
letter-spacing: 0.8rpx;
}
.wf-code {
......@@ -401,19 +457,15 @@ function getStatusClass(status) {
background:#f0f8fb;
padding:6rpx 12rpx;
border-radius: 16rpx;
margin-top: 4rpx;
}
.status-badge {
font-size:24rpx;
padding:8rpx 16rpx;
border-radius: 20rpx;
font-weight: 500;
letter-spacing: 0.5rpx;
}
}
/* 状态徽章 */
.status-pending { background:#f5f5f5; color:#888; }
.status-processing { background:#e8e8ff; color:#1890ff; }
.status-success { background:#f0fff4; color:#52c41a; }
......@@ -421,7 +473,6 @@ function getStatusClass(status) {
.status-withdrawn { background:#fffbe6; color:#faad14; }
.status-default { background:#f5f5f5; color:#999; }
/* 数据统计 */
.stats-row {
display: flex;
justify-content: space-between;
......@@ -437,9 +488,7 @@ function getStatusClass(status) {
font-size:24rpx;
color:#999;
margin-bottom:10rpx;
letter-spacing: 0.5rpx;
}
.stat-value {
font-size:32rpx;
font-weight:700;
......@@ -448,7 +497,6 @@ function getStatusClass(status) {
}
}
/* 提交时间 */
.submit-time {
display: flex;
align-items: center;
......@@ -458,11 +506,9 @@ function getStatusClass(status) {
font-size:24rpx;
color:#666;
margin-left:20rpx;
letter-spacing: 0.3rpx;
}
}
/* 操作按钮 */
.action-buttons {
display: flex;
......@@ -475,27 +521,13 @@ function getStatusClass(status) {
margin:0 8rpx;
border:none;
font-weight: 500;
letter-spacing: 0.8rpx;
transition: all 0.2s ease;
/* 2. 强化:按钮禁用样式(一眼能看出不可用) */
&:disabled {
background: #f0f0f0 !important;
color: #ccc !important;
cursor: not-allowed;
transform: none !important;
opacity: 1 !important;
}
}
.action-btn[disabled] {
background: #f0f0f0 !important;
color: #cccccc !important;
opacity: 1 !important;
cursor: not-allowed;
transform: none !important;
}
.delete-btn {
background:#fff2f2;
color:#ff4d4f;
......@@ -510,12 +542,12 @@ function getStatusClass(status) {
}
}
/* 空数据 */
/* 空状态 */
.empty-state {
display: flex;
flex-direction: column;
align-items: center;
padding:160rpx 40rpx 0;
padding:100rpx 40rpx 0;
.empty-icon {
width:240rpx;
......@@ -523,15 +555,23 @@ function getStatusClass(status) {
margin-bottom:40rpx;
opacity:0.5;
}
.empty-text {
font-size:30rpx;
color:#999;
letter-spacing: 1rpx;
}
}
/* 弹窗:最高优先级样式 */
/* 加载更多 */
.load-more {
padding: 30rpx 0;
text-align: center;
.load-text {
font-size: 26rpx;
color: #999;
}
}
/* 弹窗 */
.modal-mask {
position: fixed;
top: 0;
......@@ -542,78 +582,51 @@ function getStatusClass(status) {
display: flex;
align-items: center;
justify-content: center;
z-index: 99999 !important; /* 最高层级 */
backdrop-filter: blur(4rpx);
touch-action: none !important; /* 禁止触摸 */
pointer-events: auto !important; /* 强制可点击 */
z-index: 99999 !important;
}
.modal-box {
width: 85%;
max-width: 580rpx;
background: #ffffff;
background: #fff;
border-radius: 32rpx;
padding: 60rpx 40rpx 50rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.15);
touch-action: none !important;
pointer-events: auto !important;
}
.modal-con {
.modal-title {
text-align: center;
font-size: 32rpx;
// font-weight: 600;
color: #333;
margin-bottom: 50rpx;
letter-spacing: 1rpx;
line-height: 1.4;
margin-bottom: 20rpx;
}
.modal-title {
.modal-con {
text-align: center;
font-size: 32rpx;
// font-weight: 600;
color: #333;
margin-bottom: 20rpx;
letter-spacing: 1rpx;
line-height: 1.4;
margin-bottom: 50rpx;
}
.modal-buttons {
display: flex;
gap: 24rpx;
}
.btn-cancel {
flex: 1;
height: 92rpx;
line-height: 92rpx;
text-align: center;
font-size: 32rpx;
color: #666;
background: #f5f7fa;
border-radius: 46rpx;
transition: all 0.2s ease;
&:active {
background: #e8e8e8;
}
flex:1;
height:92rpx;
line-height:92rpx;
text-align:center;
font-size:32rpx;
color:#666;
background:#f5f7fa;
border-radius:46rpx;
}
.btn-confirm {
flex: 1;
height: 92rpx;
line-height: 92rpx;
text-align: center;
font-size: 32rpx;
color: #fff;
background: linear-gradient(135deg, #AD181F 0%, #c92028 100%);
border-radius: 46rpx;
font-weight: 600;
box-shadow: 0 6rpx 16rpx rgba(173, 24, 31, 0.25);
transition: all 0.2s ease;
&:active {
transform: scale(0.96);
box-shadow: 0 4rpx 12rpx rgba(173, 24, 31, 0.2);
}
flex:1;
height:92rpx;
line-height:92rpx;
text-align:center;
font-size:32rpx;
color:#fff;
background:linear-gradient(135deg, #AD181F 0%, #c92028 100%);
border-radius:46rpx;
font-weight:600;
}
</style>
\ No newline at end of file
......
......@@ -266,7 +266,7 @@
}
.vipData {
padding: 10rpx 20rpx;
padding: 10rpx 20rpx 5rpx;
font-size: 28rpx;
color: #666;
view { margin-bottom: 10rpx; }
......
......@@ -200,7 +200,7 @@
.icon {
width: 40rpx;
height: 40rpx;
margin-right: 20rpx;
margin:0 20rpx;
}
.photobox {
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!