94f120e1 by lttnew

中跆协级位审核

1 parent e4a0b6ec
{
"permissions": {
"allow": [
"Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)"
"Bash(ls D:/ltt/ztx_wx_gzt/views/*/index.vue)",
"WebFetch(domain:minimax-algeng-chat-tts.oss-cn-wulanchabu.aliyuncs.com)"
]
}
}
......
......@@ -902,6 +902,24 @@ export function getVerityMergeList(params) {
})
}
// 中跆协审核列表
export function auditList(params) {
return request({
url: '/exam/info/list',
method: 'get',
params
})
}
// 中跆协审核提交
export function auditJi(data) {
return request({
url: `/exam/info/auditJi/${data.ids}?flag=${data.flag}&reason=${data.reason}&ids=${data.ids}`,
method: 'post',
params: data
})
}
export function doMergeFlows(params) {
return request({
url: `/exam/info/submit/mergeFlows`,
......
......@@ -3,6 +3,14 @@ page {
overflow: auto;
background: #ecf0f6;
}
/* uni-data-checkbox 选中色全局覆盖为红色 */
uni-data-checkbox .checklist-box.is-checked {
border-color: #C4121B !important;
background-color: #C4121B !important;
}
uni-data-checkbox .checklist-box.is-checked .checklist-text {
color: #fff !important;
}
.wBox{box-sizing: border-box;}
.h3 {font-weight: bold;line-height: 2;}
.text-center{text-align: center;}
......@@ -480,5 +488,10 @@ background-size: cover;position: relative;}
.check-icon {
font-size: 20rpx;
color: #fff;
font-weight: bold;
// margin-right: 6rpx;
}
......
// 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'
......
......@@ -253,6 +253,10 @@
onShow(() => {
uni.$on('chosen', updateData)
const curExamId = examId || form.value.examId
if (curExamId) {
getChosedStudentList()
}
})
function updateData(e) {
......@@ -406,6 +410,7 @@
}
function getChosedStudentList() {
if (!form.value.examId) return
var obj = {
examId: form.value.examId
}
......@@ -603,7 +608,7 @@
background: #fff;
border: 2rpx solid #666;
color: #666;
font-size: 24rpx;
font-size: 26rpx;
display: flex;
align-items: center;
justify-content: center;
......@@ -612,7 +617,7 @@
}
.step-text {
font-size: 24rpx;
font-size: 26rpx;
color: #666;
transition: all 0.3s;
}
......@@ -691,7 +696,7 @@
.info-label {
display: block;
font-size: 24rpx;
font-size: 26rpx;
color: #666;
margin-bottom: 8rpx;
......@@ -739,7 +744,7 @@
background: #FFF5F5;
border: 1rpx solid #FFDDDD;
border-radius: 6rpx;
font-size: 24rpx;
font-size: 26rpx;
color: #AD181F;
}
}
......@@ -810,7 +815,7 @@
margin-bottom: 8rpx;
.per-code {
font-size: 24rpx;
font-size: 26rpx;
color: #666;
font-weight: normal;
margin-left: 12rpx;
......@@ -818,7 +823,7 @@
}
.student-idcard {
font-size: 24rpx;
font-size: 26rpx;
color: #666;
}
}
......@@ -841,7 +846,7 @@
align-items: flex-end;
.level-label {
font-size: 24rpx;
font-size: 26rpx;
color: #666;
margin-bottom: 6rpx;
}
......
......@@ -40,14 +40,9 @@
</view>
<view v-if="item.status=='0'||item.status=='3'||item.status=='4'||item.status=='9'" class="func">
<button :disabled="item.status=='1'||item.status=='2'||item.status=='3'"
@click="handleDelete(item)">删除
</button>
<button :disabled="!(item.status=='0')" @click="editThis(item)">编辑</button>
<button :disabled="item.status!='0'&&item.status!='9'||item.totalNum==0||item.pass==0"
@click="handleSubmit(item)">
提交审核
</button>
<button v-if="item.status !== '1' && item.status !== '2' && item.status !== '3'" @click="handleDelete(item)">删除</button>
<button v-if="item.status === '0'" @click="editThis(item)">编辑</button>
<button v-if="(item.status === '0' || item.status === '9') && item.totalNum > 0 && item.pass > 0" @click="handleSubmit(item)">提交审核</button>
</view>
</view>
</view>
......@@ -214,12 +209,23 @@ function goDetail(item) {
.invertedbtn-red {
border-radius: 50px;
background-color: #fff;
font-size: 30rpx;
padding: 10rpx 20rpx;
}
}
// .func button[disabled] {
// background-color: #f5f5f5;
// color: #ccc;
// border-color: #eee;
// }
}
:deep(.func button[disabled]) {
background-color: #f5f5f5 !important;
color: #ccc !important;
border-color: #eee !important;
opacity: 0.6;
}
.mt0 {
margin-top: 0 !important;
}
......
......@@ -16,7 +16,7 @@
</view>
<!-- 已选考生 -->
<view class="selected-section" v-if="selectedList.length > 0">
<!-- <view class="selected-section" v-if="selectedList.length > 0">
<view class="section-header">
<text class="section-title">已选考生</text>
<text class="section-count">{{selectedList.length}}</text>
......@@ -33,15 +33,15 @@
</view>
</view>
</scroll-view>
</view>
</view> -->
<!-- 考生列表 -->
<scroll-view class="student-scroll" scroll-y @scrolltolower="loadMore">
<view class="student-list">
<view class="student-card" v-for="(item, index) in studentList" :key="index" @click="toggleSelect(item)">
<view class="checkbox">
<image v-if="item.checked" src="/static/member/dx_dwn.png" mode="aspectFit"></image>
<view v-else class="checkbox-empty"></view>
<view class="student-card" v-for="(item, index) in studentList" :key="index">
<view class="checkbox" @click="toggleSelect(item)">
<image v-if="item.checked" :src="config.baseUrl_api+'/fs/static/member/dx_dwn.png'" mode="aspectFit"></image>
<image v-else :src="config.baseUrl_api+'/fs/static/member/dx.png'" mode="aspectFit"></image>
</view>
<view class="avatar">
<image v-if="item.photo" :src="item.photo" mode="aspectFill"></image>
......@@ -335,7 +335,7 @@
.remove-btn {
position: absolute;
top: -6rpx;
top: -8rpx;
right: -6rpx;
width: 28rpx;
height: 28rpx;
......@@ -370,13 +370,6 @@
.checkbox {
margin-right: 20rpx;
.checkbox-empty {
width: 40rpx;
height: 40rpx;
border: 2rpx solid #ddd;
border-radius: 50%;
}
image {
width: 40rpx;
height: 40rpx;
......
......@@ -2,55 +2,49 @@
<view>
<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
styleType="text" activeColor="#AD181F"></uni-segmented-control>
<view v-show="totalCost>0" class="vipData">
<view>费用合计:
<text>{{ totalCost.toFixed(2) }}</text>
</view>
<view v-show="infoList.length>0" class="stat-row">
<view class="stat-item">费用合计:<text class="red">{{ totalCost.toFixed(2) }}</text></view>
<view class="stat-item">考试人数:<text class="red">{{ totalNum }}</text></view>
</view>
<view class="appList">
<view class="appItem" v-for="item in infoList">
<view class="appItem" v-for="item in infoList" :key="item.examId" @click="goDetail(item)">
<view class="status" :class="{
'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 }}
'text-primary-bg': item.status=='1',
'text-success-bg': item.status=='2',
'text-danger-bg': item.status=='3'
}" >
{{ 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 mt10" @click="goDetail(item)">{{item.mergeName}}</view>
<view class="flexbox" @click="goDetail(item)">
<view class="date" v-if="item.commitTime">提交时间:{{ item.commitTime.substring(0,10) }}</view>
<view class="text-primary">{{ item.examCode }}</view>
<view class="name mt10" >{{ item.name }}</view>
<view class="flexbox" >
<view>
考试人数
<view>{{item.totalNum}}</view>
<view>{{ item.totalNum }}</view>
</view>
<view>
缴费状态
支付方式
<view>
<text :class="{
'text-success':item.examPayStatusStr=='已上传',
'text-danger':item.examPayStatusStr=='未上传',
'text-warning':item.examPayStatusStr=='已结算'
}">{{ item.examPayStatusStr||'--' }}</text>
民生付
<!-- <text :class="{
'text-success': item.examPayStatusStr=='已上传',
'text-danger': item.examPayStatusStr=='未上传',
'text-warning': item.examPayStatusStr=='已结算'
}">{{ item.examPayStatusStr || '--' }}</text> -->
</view>
</view>
<view>
总金额
<view>¥{{item.totalAmount}}</view>
<view>¥{{ item.price }}</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>
</view>
<view class="func" v-if="(item.isView=='1' && item.status=='1') || item.payStatus=='3'">
<button @click="handleBack(item)">撤回</button>
<view class="pp esp">上报单位:{{ item.memberName }}</view>
<view class="func" v-if="item.status=='1'">
<button @click="goApproval(item)">审批</button>
</view>
</view>
</view>
......@@ -65,189 +59,101 @@
<script setup>
import * as api from '@/common/api.js'
import config from '@/config.js'
import _ from 'underscore'
import {
onMounted,
ref
} from 'vue'
import {
onLoad,
onShow
} from '@dcloudio/uni-app'
const app = getApp();
const app = getApp()
// 导航栏对应 status 值
const statusValues = ['', '1', '2', '3']
const navs = ref(['全部', '审批中', '审批通过', '审批拒绝'])
const current = ref(0)
const queryParams = ref({
// pageNum: 1,
// pageSize: 10
status: '0',
type: '1'
status: '',
auditSelectType: '1',
auditFlag: '1',
pageNum: 1,
pageSize: 50
})
const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回'])
const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
const current = ref()
const infoList = ref([])
const total = ref(0)
const totalCost = ref(0)
const deptType = ref('')
const userType = ref('')
onLoad(() => {
const totalNum = ref(0)
})
onShow(() => {
if (app.globalData.isLogin) {
init()
getList()
} else {
app.firstLoadCallback = () => {
init()
};
getList()
}
}
})
function init() {
deptType.value = app.globalData.deptType
userType.value = app.globalData.userType
getList()
}
function getList() {
uni.showLoading({
title: '加载中',
mask: true
})
uni.showLoading({ title: '加载中', mask: true })
totalCost.value = 0
api.getVerityMergeList(queryParams.value).then(response => {
totalNum.value = 0
api.auditList(queryParams.value).then(response => {
uni.hideLoading()
const list = []
_.each(response.rows, r => {
const item = JSON.parse(r.remark)
item.recordId = r.recordId
item.status = r.auditStatus
item.statusStr = statusArr[r.auditStatus]
item.isView = r.isView
item.payStatus = r.payStatus
item.examPayStatusStr = r.examPayStatusStr
item.sourceData = r
item.auditProcess = r.auditProcess
list.push(item)
totalCost.value += (item.totalAmount * 1)
infoList.value = response.rows || []
total.value = response.total || 0
infoList.value.forEach(item => {
totalCost.value += Number(item.price) || 0
totalNum.value += Number(item.totalNum) || 0
})
infoList.value = list
total.value = response.total
}).catch(() => {
uni.hideLoading()
})
}
function onClickItem(e) {
console.log(e)
queryParams.value.status = e.currentIndex
current.value = e.currentIndex
queryParams.value.status = statusValues[e.currentIndex]
getList()
}
function goDetail(item) {
const form = encodeURIComponent(JSON.stringify(item))
// 查看
let path = `/level/mergeUpDetail?form=${form}&type=1`
uni.navigateTo({
url: path
});
}
function audit(item, flag) {
var obj = {
flag: flag,
reason: null,
id: item.recordId
}
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)
uni.showLoading({
title: '加载中'
})
api.doMergeFlows(obj).then((res) => {
uni.hideLoading()
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
url: `/pages/rank/applyDetail?examId=${item.examId}&type=1`
})
}
function handleBack(row){
uni.showModal({
title: '请输入撤回理由',
editable: true,
success: function(res) {
if (res.confirm) {
if (!res.content) {
uni.showToast({
title: '请输入撤回理由',
icon: 'none'
})
} else {
var obj = {
flag: '2',
reason: res.content,
recordId: row.recordId
}
api.doVerityBack(obj).then(rr=>{
uni.showToast({
title: '操作成功',
icon: 'none'
})
getList()
})
}
}
}
function goApproval(item) {
uni.navigateTo({
url: `/level/ztx/memberAuditPage?ids=${item.examId}`
})
}
</script>
<style scoped lang="scss">
.mt0 {
margin-top: 0 !important;
}
.stat-row {
display: flex;
gap: 40rpx;
padding: 20rpx 30rpx;
background: #f3e5e5;
font-size: 26rpx;
color: #666;
// margin-top: 20rpx;
.red {
color: #C4121B;
font-weight: 600;
}
}
.appList .appItem .name {
width: 100%;
word-break: break-all;
}
</style>
\ No newline at end of file
</style>
......
......@@ -19,22 +19,25 @@
<text class="form-label">审批结果</text>
<view class="radio-group">
<view
:class="{ selected: form.flag === '1' }"
:class="{ selected: form.flag == '1'
}"
class="radio-item"
@click="form.flag = '1'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '1'" color="#fff" size="10" type="checkmark"></uni-icons>
<text class="check-icon" v-if="form.flag == '1'"></text>
<!-- <uni-icons v-if="form.flag == '1'" color="#fff" size="10" type="checkmark"></uni-icons> -->
</view>
<text>审批通过</text>
</view>
<view
:class="{ selected: form.flag === '0' }"
:class="{ selected: form.flag == '0' }"
class="radio-item"
@click="form.flag = '0'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '0'" color="#fff" size="10" type="checkmark"></uni-icons>
<text v-if="form.flag == '0'" class="check-icon"></text>
<!-- <uni-icons v-if="form.flag == '0'" color="#fff" size="10" type="checkmark"></uni-icons> -->
</view>
<text>审批拒绝</text>
</view>
......@@ -164,7 +167,7 @@ async function getExaminer() {
function doSubmit() {
if (form.value.flag === '0' && !form.value.reason) {
if (form.value.flag == '0' && !form.value.reason) {
uni.showToast({
title: '请输入拒绝理由',
icon: 'none'
......@@ -285,7 +288,7 @@ async function confirmDel() {
font-size: 30rpx;
font-weight: 600;
color: #333;
margin-left: 10rpx;
// margin-left: 10rpx;
}
}
......@@ -543,4 +546,12 @@ async function confirmDel() {
.btn-cancel::after, .btn-confirm::after {
border: none;
}
.check-icon {
font-size: 20rpx;
color: #fff;
font-weight: bold;
margin-right: 6rpx;
}
</style>
......
......@@ -50,28 +50,16 @@
<uni-icons color="#AD181F" size="18" type="checkmark-circle"></uni-icons>
<text class="section-title">审核记录</text>
</view>
<view class="audit-list">
<view v-for="(item, index) in auditList" :key="index" class="audit-item">
<view :class="item.auditResult == 2 ? 'pass' : 'fail'" class="audit-dot"></view>
<view class="audit-content">
<view class="audit-row">
<text class="audit-label">审核协会</text>
<text class="audit-value">{{ item.auditDeptName || '-' }}</text>
</view>
<view class="audit-row">
<text class="audit-label">审核时间</text>
<text class="audit-value">{{ formatDateTime(item.auditTime) }}</text>
</view>
<view class="audit-row">
<text class="audit-label">审核状态</text>
<text :class="item.auditResult == 1 ? 'text-success' : 'text-danger'" class="audit-value">
{{ item.auditResult == 1 ? '通过' : '拒绝' }}
</text>
</view>
<view v-if="item.auditMsg" class="audit-row">
<text class="audit-label">备注</text>
<text class="audit-value">{{ item.auditMsg }}</text>
<view class="wBox">
<view class="stepItem" v-for="(item, index) in auditList" :key="index">
<view class="time">{{ formatDateTime(item.auditTime) }}</view>
<view class="content">
<view class="status">
<text v-if="item.auditResult==1" class="text-success">审核通过</text>
<text v-if="item.auditResult==2" class="text-danger">审核拒绝</text>
</view>
<view class="deptName">{{ item.auditDeptName || '--' }}</view>
<view v-if="item.auditMsg">备注:{{ item.auditMsg }}</view>
</view>
</view>
</view>
......@@ -191,7 +179,7 @@ function formatDateTime(dateStr) {
display: flex;
align-items: center;
margin-bottom: 24rpx;
.section-title {
font-size: 30rpx;
font-weight: 600;
......@@ -200,6 +188,54 @@ function formatDateTime(dateStr) {
}
}
.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;
}
.stepItem {
// display: flex;
padding: 16rpx;
border-bottom: 1rpx dashed #eee;
&:last-child {
border-bottom: none;
}
.time {
width: 80%;
font-size: 22rpx;
color: #999;
flex-shrink: 0;
padding-top: 4rpx;
}
.content {
flex: 1;
.status {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 6rpx;
}
.deptName {
font-size: 26rpx;
color: #666;
}
view {
font-size: 24rpx;
color: #999;
margin-top: 4rpx;
}
}
}
.info-card {
.info-row {
display: flex;
......@@ -238,69 +274,6 @@ function formatDateTime(dateStr) {
}
}
/* 审核记录 */
.audit-list {
.audit-item {
display: flex;
padding: 20rpx 0;
border-bottom: 1px dashed #eee;
&:last-child {
border-bottom: none;
}
.audit-dot {
width: 14rpx;
height: 14rpx;
border-radius: 50%;
margin-top: 8rpx;
margin-right: 20rpx;
flex-shrink: 0;
&.pass {
background-color: #4caf50;
}
&.fail {
background-color: #f44336;
}
}
.audit-content {
flex: 1;
.audit-row {
display: flex;
margin-bottom: 10rpx;
&:last-child {
margin-bottom: 0;
}
.audit-label {
font-size: 24rpx;
color: #999;
width: 140rpx;
flex-shrink: 0;
}
.audit-value {
font-size: 26rpx;
color: #333;
flex: 1;
&.text-success {
color: #4caf50;
}
&.text-danger {
color: #f44336;
}
}
}
}
}
}
/* 考官表格 */
.examiner-table {
......
......@@ -17,28 +17,18 @@
<view class="form-card">
<view class="form-item">
<text class="form-label">审批结果</text>
<view class="radio-group">
<view
class="radio-item"
:class="{ selected: form.flag === '1' }"
@click="form.flag = '1'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '1'" type="checkmark" size="10" color="#fff"></uni-icons>
</view>
<text>审批通过</text>
<radio-group @change="onFlagChange">
<view class="radio-group">
<label class="radio-item" :class="{ selected: form.flag == '1' }">
<radio value="1" :checked="form.flag == '1'" color="#C4121B" />
<text>审批通过</text>
</label>
<label class="radio-item" :class="{ selected: form.flag == '0' }">
<radio value="0" :checked="form.flag == '0'" color="#C4121B" />
<text>审批拒绝</text>
</label>
</view>
<view
class="radio-item"
:class="{ selected: form.flag === '0' }"
@click="form.flag = '0'"
>
<view class="radio-circle">
<uni-icons v-if="form.flag === '0'" type="checkmark" size="10" color="#fff"></uni-icons>
</view>
<text>审批拒绝</text>
</view>
</view>
</radio-group>
</view>
<view class="form-item">
......@@ -65,7 +55,7 @@
</template>
<script setup>
import * as api from '@/common/api_exam.js'
import * as api from '@/common/api.js'
import { ref } from 'vue'
import { onLoad } from '@dcloudio/uni-app'
......@@ -78,6 +68,10 @@ const form = ref({
reason: ''
})
function onFlagChange(e) {
form.value.flag = e.detail.value
}
onLoad((options) => {
if (options.type) {
type.value = options.type
......@@ -92,7 +86,7 @@ function goBack() {
}
function doSubmit() {
if (form.value.flag === '0' && !form.value.reason) {
if (form.value.flag == '0' && !form.value.reason) {
uni.showToast({
title: '请输入拒绝理由',
icon: 'none'
......@@ -109,7 +103,7 @@ function doSubmit() {
reason: form.value.reason || ''
}
api.shenAudit(params).then(res => {
api.auditJi(params).then(res => {
uni.showToast({
title: '操作成功',
icon: 'success'
......@@ -168,7 +162,7 @@ function doSubmit() {
font-size: 30rpx;
font-weight: 600;
color: #333;
margin-left: 10rpx;
// margin-left: 10rpx;
}
}
......@@ -190,31 +184,31 @@ function doSubmit() {
.radio-group {
display: flex;
gap: 40rpx;
gap: 24rpx;
}
.radio-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
gap: 12rpx;
font-size: 28rpx;
color: #333;
color: #666;
padding: 20rpx 0;
border-radius: 12rpx;
border: 2rpx solid #eee;
background: #fafafa;
.radio-circle {
width: 36rpx;
height: 36rpx;
border-radius: 50%;
border: 2rpx solid #ddd;
display: flex;
align-items: center;
justify-content: center;
&.selected {
color: #C4121B;
border-color: #C4121B;
background: #fff5f5;
font-weight: 500;
}
&.selected {
.radio-circle {
background-color: #C4121B;
border-color: #C4121B;
}
radio {
transform: scale(0.8);
}
}
......
......@@ -6,7 +6,7 @@
<!-- 考段基本信息 -->
<view class="card">
<view class="card-header">
<view class="header-left">考段基本信息33</view>
<view class="header-left">基本信息</view>
</view>
<view class="card-body">
<view class="info-row">
......@@ -122,26 +122,22 @@
<!-- <view class="no-more" v-if="!hasMore && list.length > 0">没有更多了</view> -->
</view>
<!-- 审核信息 -->
<view class="card">
<view class="card-header">
<view class="header-left">审核信息</view>
</view>
<!-- 审核记录 -->
<view class="h3-padding">审核记录</view>
<view class="wBox">
<view v-if="loadingAudit" class="state-tip">加载中...</view>
<view v-else-if="recordList.length === 0" class="state-tip">暂无审核记录</view>
<view class="audit-list" v-else>
<view class="audit-item" v-for="(n, index) in recordList" :key="index">
<view class="audit-dot" :class="n.auditResult == 1 ? 'pass' : 'fail'"></view>
<view class="audit-content">
<view class="audit-time">{{ n.auditTime || '待审批' }}</view>
<view class="audit-status" :class="n.auditResult == 1 ? 'text-green' : 'text-red'">
{{ getAuditResultText(n.auditResult, n.auditStatusStr) }}
</view>
<view class="audit-dept">{{ n.auditDeptName || n.deptName || '--' }}</view>
<view class="audit-remark" v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
<view class="stepItem" v-else v-for="(n, index) in recordList" :key="index">
<view class="time">{{ n.auditTime || '待审批' }}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==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>
<text v-if="n.auditResult==3" class="text-warning">已撤回</text>
</view>
<view class="deptName">{{ n.auditDeptName || n.deptName || '--' }}</view>
<view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
</view>
</view>
</view>
......@@ -374,6 +370,61 @@ $content-gap: 24rpx; // 统一内容边距
box-sizing: border-box;
}
.h3-padding {
padding: 30rpx 30rpx 0;
font-size: 30rpx;
font-weight: 600;
color: #333;
}
.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;
}
.stepItem {
// display: flex;
padding: 16rpx;
border-bottom: 1rpx dashed #eee;
&:last-child {
border-bottom: none;
}
.time {
width: 80%;
font-size: 22rpx;
color: #999;
flex-shrink: 0;
padding-top: 4rpx;
}
.content {
flex: 1;
.status {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 6rpx;
}
.deptName {
font-size: 26rpx;
color: #666;
}
view {
font-size: 24rpx;
color: #999;
margin-top: 4rpx;
}
}
}
.card {
background: $card-bg;
border-radius: 16rpx;
......@@ -550,68 +601,6 @@ $content-gap: 24rpx; // 统一内容边距
color: $text-placeholder;
}
.audit-list {
padding: 0 $content-gap 24rpx;
}
.audit-item {
display: flex;
padding: 20rpx 0;
border-bottom: 1rpx dashed $border-color;
&:last-child {
border-bottom: none;
}
.audit-dot {
width: 14rpx;
height: 14rpx;
border-radius: 50%;
margin-top: 8rpx;
margin-right: 20rpx;
flex-shrink: 0;
&.pass {
background: $success-color;
}
&.fail {
background: $danger-color;
}
}
.audit-content {
flex: 1;
padding-right: 8rpx;
.audit-time {
font-size: 24rpx;
color: $text-placeholder;
margin-bottom: 6rpx;
}
.audit-status {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 6rpx;
}
.audit-dept {
font-size: 26rpx;
color: $text-secondary;
}
.audit-remark {
font-size: 24rpx;
color: $text-placeholder;
margin-top: 6rpx;
padding: 8rpx 12rpx;
background: #f8f8f8;
border-radius: 8rpx;
}
}
}
.text-red {
color: $danger-color !important;
}
......
......@@ -45,25 +45,19 @@
</view>
<!-- 审核记录 -->
<view class="card">
<view class="card-header">
<view class="header-left">审核记录</view>
</view>
<view class="h3-padding">审核记录</view>
<view class="wBox">
<view v-if="loadingAudit" class="state-tip">加载中...</view>
<view v-else-if="auditList.length === 0" class="state-tip">暂无审核记录</view>
<view class="audit-list" v-else>
<view class="audit-item" v-for="(n, index) in auditList" :key="index">
<view class="audit-dot" :class="n.auditResult == 1 ? 'pass' : 'fail'"></view>
<view class="audit-content">
<view class="audit-time">{{ parseDateTime(n.auditTime) }}</view>
<view class="audit-status" :class="n.auditResult == 1 ? 'text-green' : 'text-red'">
{{ getAuditResultText(n.auditResult) }}
</view>
<view class="audit-dept">{{ n.auditDeptName || '——' }}</view>
<view class="audit-remark" v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
<view class="stepItem" v-else v-for="(n, index) in auditList" :key="index">
<view class="time">{{ parseDateTime(n.auditTime) }}</view>
<view class="content">
<view class="status">
<text v-if="n.auditResult==1" class="text-success">审核通过</text>
<text v-if="n.auditResult==0" class="text-danger">审核拒绝</text>
</view>
<view class="deptName">{{ n.auditDeptName || '--' }}</view>
<view v-if="n.auditMsg">备注:{{ n.auditMsg }}</view>
</view>
</view>
</view>
......@@ -207,6 +201,61 @@ $content-gap: 24rpx;
box-sizing: border-box;
}
.h3-padding {
padding: 30rpx 30rpx 0;
font-size: 30rpx;
font-weight: 600;
color: #333;
}
.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;
}
.stepItem {
// display: flex;
padding: 16rpx;
border-bottom: 1rpx dashed #eee;
&:last-child {
border-bottom: none;
}
.time {
width: 80%;
font-size: 22rpx;
color: #999;
flex-shrink: 0;
padding-top: 4rpx;
}
.content {
flex: 1;
.status {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 6rpx;
}
.deptName {
font-size: 26rpx;
color: #666;
}
view {
font-size: 24rpx;
color: #999;
margin-top: 4rpx;
}
}
}
.card {
background: $card-bg;
border-radius: 16rpx;
......@@ -314,73 +363,4 @@ $content-gap: 24rpx;
color: $primary-color;
}
.audit-list {
padding: 0 $content-gap 24rpx;
}
.audit-item {
display: flex;
padding: 20rpx 0;
border-bottom: 1rpx dashed $border-color;
&:last-child {
border-bottom: none;
}
.audit-dot {
width: 14rpx;
height: 14rpx;
border-radius: 50%;
margin-top: 8rpx;
margin-right: 20rpx;
flex-shrink: 0;
&.pass {
background: $success-color;
}
&.fail {
background: $danger-color;
}
}
.audit-content {
flex: 1;
padding-right: 8rpx;
.audit-time {
font-size: 24rpx;
color: $text-placeholder;
margin-bottom: 6rpx;
}
.audit-status {
font-size: 28rpx;
font-weight: 600;
margin-bottom: 6rpx;
}
.audit-dept {
font-size: 26rpx;
color: $text-secondary;
}
.audit-remark {
font-size: 24rpx;
color: $text-placeholder;
margin-top: 6rpx;
padding: 8rpx 12rpx;
background: #f8f8f8;
border-radius: 8rpx;
}
}
}
.text-red {
color: $danger-color !important;
}
.text-green {
color: $success-color !important;
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!