Merge branch 'main' of https://git.1024tool.vip/zfc/guzhi
This commit is contained in:
commit
62d9fb8516
@ -52,6 +52,8 @@ export default {
|
||||
getInvoiceById: (params = {}) => request.get(`/transactions/receipts/${params.id}`, { params }),
|
||||
// 后端接口要求请求体包裹在 data 字段下
|
||||
sendInvoice: (data = {}) => request.post('/transactions/send-email', { data }),
|
||||
// invoice headers
|
||||
getInvoiceHeaders: (params = {}) => request.get('/invoice/list', { params }),
|
||||
// valuation (估值评估)
|
||||
getValuationList: (params = {}) => request.get('/valuations/', { params }),
|
||||
getValuationById: (params = {}) => request.get(`/valuations/${params.valuation_id || params.id}`),
|
||||
|
||||
@ -45,11 +45,20 @@ watch(() => props.userData, (newData) => {
|
||||
|
||||
// 保存设置
|
||||
function handleSave() {
|
||||
const oldVal = currentRemaining.value
|
||||
const newVal = Number(limitForm.value.targetCount || 0)
|
||||
const changeStr = `(${oldVal} > ${newVal})`
|
||||
const separator = ' || '
|
||||
|
||||
const finalRemark = limitForm.value.remark
|
||||
? `${limitForm.value.remark}${separator}${changeStr}`
|
||||
: changeStr
|
||||
|
||||
const data = {
|
||||
user_id: props.userData.id,
|
||||
target_count: Number(limitForm.value.targetCount || 0),
|
||||
target_count: newVal,
|
||||
op_type: limitForm.value.quotaType,
|
||||
remark: limitForm.value.remark
|
||||
remark: finalRemark
|
||||
}
|
||||
emit('save', data)
|
||||
}
|
||||
|
||||
@ -1,39 +1,44 @@
|
||||
<script setup>
|
||||
import { computed, ref, watch, h } from 'vue'
|
||||
import { NModal, NButton, NTabs, NTabPane, NDataTable, NSpin } from 'naive-ui'
|
||||
import { NModal, NButton, NTabs, NTabPane, NDataTable, NSpin, useMessage } from 'naive-ui'
|
||||
import { formatDate } from '@/utils'
|
||||
import api from '@/api'
|
||||
|
||||
const props = defineProps({
|
||||
visible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
data: {
|
||||
userId: {
|
||||
type: [String, Number],
|
||||
default: null,
|
||||
},
|
||||
baseInfo: {
|
||||
type: Object,
|
||||
default: () => ({}),
|
||||
},
|
||||
loading: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
})
|
||||
|
||||
const emit = defineEmits(['update:visible'])
|
||||
|
||||
const message = useMessage()
|
||||
const activeTab = ref('basic')
|
||||
const invoiceLoading = ref(false)
|
||||
const logLoading = ref(false)
|
||||
const invoiceList = ref([])
|
||||
const logList = ref([])
|
||||
|
||||
watch(
|
||||
() => props.visible,
|
||||
(show) => {
|
||||
if (!show) {
|
||||
activeTab.value = 'basic'
|
||||
}
|
||||
}
|
||||
)
|
||||
const logPagination = ref({
|
||||
page: 1,
|
||||
pageSize: 5,
|
||||
itemCount: 0,
|
||||
})
|
||||
|
||||
const baseInfo = computed(() => props.data?.baseInfo || {})
|
||||
const invoiceHeaders = computed(() => props.data?.invoiceHeaders || [])
|
||||
const operationLogs = computed(() => props.data?.operationLogs || [])
|
||||
const invoicePagination = ref({
|
||||
page: 1,
|
||||
pageSize: 5,
|
||||
itemCount: 0,
|
||||
})
|
||||
|
||||
const invoiceColumns = [
|
||||
{ title: '公司名称', key: 'company_name', ellipsis: { tooltip: true } },
|
||||
@ -55,9 +60,111 @@ const logColumns = [
|
||||
},
|
||||
},
|
||||
{ title: '操作人', key: 'operator_name', width: 120 },
|
||||
{ title: '操作记录', key: 'operation_detail', ellipsis: { tooltip: true } },
|
||||
{
|
||||
title: '操作记录',
|
||||
key: 'remark',
|
||||
render(row) {
|
||||
const fullRemark = row.remark || ''
|
||||
const separator = ' || '
|
||||
let remark = '-'
|
||||
let countChange = '-'
|
||||
|
||||
if (fullRemark.includes(separator)) {
|
||||
const parts = fullRemark.split(separator)
|
||||
remark = parts[0]
|
||||
countChange = parts[1]
|
||||
} else if (fullRemark.match(/^\(\d+\s*>\s*\d+\)$/)) {
|
||||
countChange = fullRemark
|
||||
remark = '-'
|
||||
} else {
|
||||
remark = fullRemark
|
||||
}
|
||||
|
||||
// Format count change: (0 > 1) => 0 -> 1
|
||||
if (countChange !== '-') {
|
||||
countChange = countChange.replace(/[()]/g, '').replace('>', '->')
|
||||
}
|
||||
|
||||
return h('div', { style: 'line-height: 1.6;' }, [
|
||||
h('div', `剩余估值次数:${countChange}`),
|
||||
h('div', `类型:${row.op_type || '-'}`),
|
||||
h('div', `备注:${remark}`)
|
||||
])
|
||||
}
|
||||
},
|
||||
]
|
||||
|
||||
// Reset state when modal opens or user changes
|
||||
watch(
|
||||
() => props.visible,
|
||||
(show) => {
|
||||
if (show) {
|
||||
activeTab.value = 'basic'
|
||||
// Reset lists but don't clear immediately to avoid flicker if same user?
|
||||
// Actually safe to clear or just let the tab watcher handle it.
|
||||
// If we want to force refresh on re-open:
|
||||
invoiceList.value = []
|
||||
logList.value = []
|
||||
logPagination.value.page = 1
|
||||
invoicePagination.value.page = 1
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
watch(activeTab, (tab) => {
|
||||
if (!props.userId) return
|
||||
|
||||
if (tab === 'invoice' && invoiceList.value.length === 0) {
|
||||
fetchInvoices()
|
||||
} else if (tab === 'logs' && logList.value.length === 0) {
|
||||
fetchLogs()
|
||||
}
|
||||
})
|
||||
|
||||
async function fetchInvoices() {
|
||||
invoiceLoading.value = true
|
||||
try {
|
||||
const { data = [], total = 0 } = await api.getInvoiceHeaders({
|
||||
user_id: props.baseInfo.id,
|
||||
page: invoicePagination.value.page,
|
||||
page_size: invoicePagination.value.pageSize
|
||||
})
|
||||
invoiceList.value = data
|
||||
invoicePagination.value.itemCount = total
|
||||
} catch (error) {
|
||||
message.error(error?.message || '获取发票抬头失败')
|
||||
} finally {
|
||||
invoiceLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleInvoicePageChange(page) {
|
||||
invoicePagination.value.page = page
|
||||
fetchInvoices()
|
||||
}
|
||||
|
||||
async function fetchLogs() {
|
||||
logLoading.value = true
|
||||
try {
|
||||
const { data: logs = [], total = 0 } = await api.getAppUserQuotaLogs({
|
||||
user_id: props.userId,
|
||||
page: logPagination.value.page,
|
||||
page_size: logPagination.value.pageSize,
|
||||
})
|
||||
logList.value = logs
|
||||
logPagination.value.itemCount = total
|
||||
} catch (error) {
|
||||
message.error(error?.message || '获取操作记录失败')
|
||||
} finally {
|
||||
logLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
function handleLogPageChange(page) {
|
||||
logPagination.value.page = page
|
||||
fetchLogs()
|
||||
}
|
||||
|
||||
function handleClose() {
|
||||
emit('update:visible', false)
|
||||
}
|
||||
@ -74,7 +181,6 @@ function handleClose() {
|
||||
:mask-closable="false"
|
||||
@update:show="$emit('update:visible', $event)"
|
||||
>
|
||||
<NSpin :show="loading">
|
||||
<div class="user-detail-modal">
|
||||
<NTabs v-model:value="activeTab" type="card" size="large" class="detail-tabs">
|
||||
<NTabPane name="basic" tab="基础信息">
|
||||
@ -104,32 +210,40 @@ function handleClose() {
|
||||
</div>
|
||||
</NTabPane>
|
||||
<NTabPane name="invoice" tab="发票抬头">
|
||||
<NSpin :show="invoiceLoading">
|
||||
<NDataTable
|
||||
class="section-table"
|
||||
:columns="invoiceColumns"
|
||||
:data="invoiceHeaders"
|
||||
:pagination="false"
|
||||
:data="invoiceList"
|
||||
:pagination="invoicePagination"
|
||||
:remote="true"
|
||||
:bordered="false"
|
||||
:single-line="false"
|
||||
@update:page="handleInvoicePageChange"
|
||||
>
|
||||
<template #empty>
|
||||
<div class="empty">暂无发票抬头信息</div>
|
||||
</template>
|
||||
</NDataTable>
|
||||
</NSpin>
|
||||
</NTabPane>
|
||||
<NTabPane name="logs" tab="操作记录">
|
||||
<NSpin :show="logLoading">
|
||||
<NDataTable
|
||||
class="section-table"
|
||||
:columns="logColumns"
|
||||
:data="operationLogs"
|
||||
:pagination="false"
|
||||
:data="logList"
|
||||
:pagination="logPagination"
|
||||
:remote="true"
|
||||
:bordered="false"
|
||||
:single-line="false"
|
||||
@update:page="handleLogPageChange"
|
||||
>
|
||||
<template #empty>
|
||||
<div class="empty">暂无操作记录</div>
|
||||
</template>
|
||||
</NDataTable>
|
||||
</NSpin>
|
||||
</NTabPane>
|
||||
</NTabs>
|
||||
|
||||
@ -138,7 +252,6 @@ function handleClose() {
|
||||
<NButton type="primary" @click="handleClose">确定</NButton>
|
||||
</div>
|
||||
</div>
|
||||
</NSpin>
|
||||
</NModal>
|
||||
</template>
|
||||
|
||||
|
||||
@ -71,16 +71,16 @@ const columns = [
|
||||
align: 'center',
|
||||
ellipsis: { tooltip: true },
|
||||
},
|
||||
{
|
||||
title: '微信号',
|
||||
key: 'wechat',
|
||||
width: 140,
|
||||
align: 'center',
|
||||
ellipsis: { tooltip: true },
|
||||
render(row) {
|
||||
return row.wechat || '-'
|
||||
},
|
||||
},
|
||||
// {
|
||||
// title: '微信号',
|
||||
// key: 'wechat',
|
||||
// width: 140,
|
||||
// align: 'center',
|
||||
// ellipsis: { tooltip: true },
|
||||
// render(row) {
|
||||
// return row.wechat || '-'
|
||||
// },
|
||||
// },
|
||||
{
|
||||
title: '注册时间',
|
||||
key: 'created_at',
|
||||
@ -158,13 +158,8 @@ const columns = [
|
||||
// 查看用户详情
|
||||
async function handleViewDetail(row) {
|
||||
detailModalVisible.value = true
|
||||
detailLoading.value = true
|
||||
try {
|
||||
const { data: logs = [] } = await api.getAppUserQuotaLogs({
|
||||
user_id: row.id,
|
||||
page: 1,
|
||||
page_size: 50,
|
||||
})
|
||||
currentUser.value = row
|
||||
|
||||
userDetail.value = {
|
||||
baseInfo: {
|
||||
id: row.id,
|
||||
@ -174,14 +169,7 @@ async function handleViewDetail(row) {
|
||||
notes: row.notes,
|
||||
remaining_count: row.remaining_count,
|
||||
user_type: row.user_type || '-',
|
||||
},
|
||||
invoiceHeaders: [],
|
||||
operationLogs: logs,
|
||||
}
|
||||
} catch (error) {
|
||||
$message.error(error?.message || '获取用户详情失败')
|
||||
} finally {
|
||||
detailLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
@ -256,7 +244,7 @@ const validateForm = {
|
||||
@keypress.enter="$table?.handleSearch()"
|
||||
/>
|
||||
</QueryBarItem>
|
||||
<QueryBarItem label="微信号" :label-width="60">
|
||||
<!-- <QueryBarItem label="微信号" :label-width="60">
|
||||
<NInput
|
||||
v-model:value="queryItems.wechat"
|
||||
clearable
|
||||
@ -265,7 +253,7 @@ const validateForm = {
|
||||
style="width: 200px"
|
||||
@keypress.enter="$table?.handleSearch()"
|
||||
/>
|
||||
</QueryBarItem>
|
||||
</QueryBarItem> -->
|
||||
<QueryBarItem label="ID" :label-width="60">
|
||||
<NInput
|
||||
v-model:value="queryItems.id"
|
||||
@ -325,8 +313,8 @@ const validateForm = {
|
||||
<!-- 用户详情弹窗 -->
|
||||
<UserDetailModal
|
||||
v-model:visible="detailModalVisible"
|
||||
:data="userDetail"
|
||||
:loading="detailLoading"
|
||||
:user-id="currentUser?.id"
|
||||
:base-info="userDetail.baseInfo"
|
||||
/>
|
||||
</CommonPage>
|
||||
</template>
|
||||
|
||||
@ -195,84 +195,7 @@ const detailSections = computed(() => {
|
||||
|
||||
const calcFlow = computed(() => props.detailData?.calculation_result?.flow || [])
|
||||
|
||||
// 证书相关功能
|
||||
const handleUploadCertificate = () => {
|
||||
certificateModalMode.value = 'upload'
|
||||
certificateData.value = {}
|
||||
certificateModalVisible.value = true
|
||||
}
|
||||
|
||||
const handleViewCertificate = () => {
|
||||
certificateModalMode.value = 'view'
|
||||
// 这里可以从 props.detailData 中获取已上传的证书数据
|
||||
certificateData.value = {
|
||||
title: '非遗传承人等级证书',
|
||||
description: '非遗传承人等级证书相关文件',
|
||||
files: props.detailData?.certificates || []
|
||||
}
|
||||
certificateModalVisible.value = true
|
||||
}
|
||||
|
||||
const handleCertificateConfirm = (data) => {
|
||||
console.log('证书数据:', data)
|
||||
// 这里可以调用 API 保存证书数据
|
||||
$message?.success('证书上传成功')
|
||||
certificateModalVisible.value = false
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="audit-detail">
|
||||
<div class="detail-header">
|
||||
<div>
|
||||
<button type="button" class="back-btn" @click="emit('back')">
|
||||
<TheIcon icon="mdi:arrow-left" :size="16" class="mr-4" />
|
||||
返回审核列表
|
||||
</button>
|
||||
<!-- <div class="detail-title">
|
||||
<h2>{{ detailData?.asset_name || '审核详情' }}</h2>
|
||||
<NTag size="small" :type="getStatusConfig(detailData?.status).type">
|
||||
{{ getStatusConfig(detailData?.status).text }}
|
||||
</NTag>
|
||||
</div>
|
||||
<p class="detail-meta">
|
||||
<span>手机号:{{ detailData?.phone || '-' }}</span>
|
||||
<span>微信号:{{ detailData?.wechat || '-' }}</span>
|
||||
<span>提交时间:{{ formatDate(detailData?.created_at) }}</span>
|
||||
<span>审核时间:{{ detailData?.reviewed_at ? formatDate(detailData?.reviewed_at) : '-' }}</span>
|
||||
</p> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<NTabs
|
||||
v-model:value="activeDetailTab"
|
||||
type="line"
|
||||
size="large"
|
||||
class="audit-tabs"
|
||||
>
|
||||
<NTabPane name="audit" tab="审核信息">
|
||||
<NSpin :show="loading">
|
||||
<div v-for="section in detailSections" :key="section.key" class="detail-section">
|
||||
<div class="section-title">
|
||||
<span class="dot" />
|
||||
<span>{{ section.title }}</span>
|
||||
</div>
|
||||
<NDataTable
|
||||
:columns="section.columns"
|
||||
:data="section.data"
|
||||
:bordered="true"
|
||||
:single-line="false"
|
||||
:scroll-x="section.fields.length * 200 + 120"
|
||||
>
|
||||
<template #empty>
|
||||
<span>暂无数据</span>
|
||||
</template>
|
||||
</NDataTable>
|
||||
</div>
|
||||
</NSpin>
|
||||
</NTabPane>
|
||||
<NTabPane name="flow" tab="计算流程">
|
||||
<NSpin :show="loading">
|
||||
const mockFlowHtml = ref(`
|
||||
<div class="calc-flow-container">
|
||||
<!-- 左侧:详细计算流程 -->
|
||||
<div class="calc-flow-left">
|
||||
@ -369,6 +292,88 @@ const handleCertificateConfirm = (data) => {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`)
|
||||
|
||||
|
||||
// 证书相关功能
|
||||
const handleUploadCertificate = () => {
|
||||
certificateModalMode.value = 'upload'
|
||||
certificateData.value = {}
|
||||
certificateModalVisible.value = true
|
||||
}
|
||||
|
||||
const handleViewCertificate = () => {
|
||||
certificateModalMode.value = 'view'
|
||||
// 这里可以从 props.detailData 中获取已上传的证书数据
|
||||
certificateData.value = {
|
||||
title: '非遗传承人等级证书',
|
||||
description: '非遗传承人等级证书相关文件',
|
||||
files: props.detailData?.certificates || []
|
||||
}
|
||||
certificateModalVisible.value = true
|
||||
}
|
||||
|
||||
const handleCertificateConfirm = (data) => {
|
||||
console.log('证书数据:', data)
|
||||
// 这里可以调用 API 保存证书数据
|
||||
$message?.success('证书上传成功')
|
||||
certificateModalVisible.value = false
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="audit-detail">
|
||||
<div class="detail-header">
|
||||
<div>
|
||||
<button type="button" class="back-btn" @click="emit('back')">
|
||||
<TheIcon icon="mdi:arrow-left" :size="16" class="mr-4" />
|
||||
返回审核列表
|
||||
</button>
|
||||
<!-- <div class="detail-title">
|
||||
<h2>{{ detailData?.asset_name || '审核详情' }}</h2>
|
||||
<NTag size="small" :type="getStatusConfig(detailData?.status).type">
|
||||
{{ getStatusConfig(detailData?.status).text }}
|
||||
</NTag>
|
||||
</div>
|
||||
<p class="detail-meta">
|
||||
<span>手机号:{{ detailData?.phone || '-' }}</span>
|
||||
<span>微信号:{{ detailData?.wechat || '-' }}</span>
|
||||
<span>提交时间:{{ formatDate(detailData?.created_at) }}</span>
|
||||
<span>审核时间:{{ detailData?.reviewed_at ? formatDate(detailData?.reviewed_at) : '-' }}</span>
|
||||
</p> -->
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<NTabs
|
||||
v-model:value="activeDetailTab"
|
||||
type="line"
|
||||
size="large"
|
||||
class="audit-tabs"
|
||||
>
|
||||
<NTabPane name="audit" tab="审核信息">
|
||||
<NSpin :show="loading">
|
||||
<div v-for="section in detailSections" :key="section.key" class="detail-section">
|
||||
<div class="section-title">
|
||||
<span class="dot" />
|
||||
<span>{{ section.title }}</span>
|
||||
</div>
|
||||
<NDataTable
|
||||
:columns="section.columns"
|
||||
:data="section.data"
|
||||
:bordered="true"
|
||||
:single-line="false"
|
||||
:scroll-x="section.fields.length * 200 + 120"
|
||||
>
|
||||
<template #empty>
|
||||
<span>暂无数据</span>
|
||||
</template>
|
||||
</NDataTable>
|
||||
</div>
|
||||
</NSpin>
|
||||
</NTabPane>
|
||||
<NTabPane name="flow" tab="计算流程">
|
||||
<NSpin :show="loading">
|
||||
<div v-html="mockFlowHtml"></div>
|
||||
</NSpin>
|
||||
</NTabPane>
|
||||
</NTabs>
|
||||
@ -532,14 +537,14 @@ const handleCertificateConfirm = (data) => {
|
||||
}
|
||||
|
||||
/* 计算流程容器 */
|
||||
.calc-flow-container {
|
||||
:deep(.calc-flow-container) {
|
||||
display: flex;
|
||||
gap: 24px;
|
||||
min-height: 600px;
|
||||
}
|
||||
|
||||
/* 左侧详细流程 */
|
||||
.calc-flow-left {
|
||||
:deep(.calc-flow-left) {
|
||||
flex: 1;
|
||||
background: #f8f9fa;
|
||||
padding: 20px;
|
||||
@ -548,7 +553,7 @@ const handleCertificateConfirm = (data) => {
|
||||
max-height: 800px;
|
||||
}
|
||||
|
||||
.calc-formula-header {
|
||||
:deep(.calc-formula-header) {
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
color: #1d2129;
|
||||
@ -557,11 +562,11 @@ const handleCertificateConfirm = (data) => {
|
||||
border-bottom: 2px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.calc-section {
|
||||
:deep(.calc-section) {
|
||||
margin-bottom: 24px;
|
||||
}
|
||||
|
||||
.calc-section-title {
|
||||
:deep(.calc-section-title) {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: #1d2129;
|
||||
@ -569,12 +574,12 @@ const handleCertificateConfirm = (data) => {
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.calc-subsection {
|
||||
:deep(.calc-subsection) {
|
||||
margin-left: 20px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.calc-subsection-title {
|
||||
:deep(.calc-subsection-title) {
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
@ -582,24 +587,24 @@ const handleCertificateConfirm = (data) => {
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.calc-item {
|
||||
:deep(.calc-item) {
|
||||
margin-left: 20px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.calc-item-label {
|
||||
:deep(.calc-item-label) {
|
||||
font-size: 14px;
|
||||
color: #4b5563;
|
||||
margin-bottom: 8px;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
.calc-detail {
|
||||
:deep(.calc-detail) {
|
||||
margin-left: 20px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
|
||||
.calc-detail-item {
|
||||
:deep(.calc-detail-item) {
|
||||
font-size: 13px;
|
||||
color: #6b7280;
|
||||
margin-bottom: 4px;
|
||||
@ -607,7 +612,7 @@ const handleCertificateConfirm = (data) => {
|
||||
}
|
||||
|
||||
/* 右侧大纲 */
|
||||
.calc-flow-right {
|
||||
:deep(.calc-flow-right) {
|
||||
width: 320px;
|
||||
background: #fff;
|
||||
border: 1px solid #e5e7eb;
|
||||
@ -617,7 +622,7 @@ const handleCertificateConfirm = (data) => {
|
||||
max-height: 800px;
|
||||
}
|
||||
|
||||
.calc-outline-title {
|
||||
:deep(.calc-outline-title) {
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
color: #1d2129;
|
||||
@ -626,41 +631,41 @@ const handleCertificateConfirm = (data) => {
|
||||
border-bottom: 2px solid #e5e7eb;
|
||||
}
|
||||
|
||||
.calc-outline {
|
||||
:deep(.calc-outline) {
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
.outline-section {
|
||||
:deep(.outline-section) {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.outline-title {
|
||||
:deep(.outline-title) {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
color: #1d2129;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.outline-subsection {
|
||||
:deep(.outline-subsection) {
|
||||
margin-left: 12px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.outline-subtitle {
|
||||
:deep(.outline-subtitle) {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
color: #374151;
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
.outline-item {
|
||||
:deep(.outline-item) {
|
||||
font-size: 12px;
|
||||
color: #4b5563;
|
||||
margin-bottom: 4px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.outline-detail {
|
||||
:deep(.outline-detail) {
|
||||
font-size: 11px;
|
||||
color: #6b7280;
|
||||
margin-left: 24px;
|
||||
|
||||
@ -93,7 +93,7 @@ const columns = [
|
||||
// },
|
||||
{
|
||||
title: '评估结果',
|
||||
key: 'valuation_result',
|
||||
key: 'final_value_ab',
|
||||
width: 120,
|
||||
align: 'center',
|
||||
render(row) {
|
||||
@ -112,11 +112,11 @@ const columns = [
|
||||
},
|
||||
{
|
||||
title: '审核时间',
|
||||
key: 'reviewed_at',
|
||||
key: 'updated_at',
|
||||
width: 160,
|
||||
align: 'center',
|
||||
render(row) {
|
||||
return row.reviewed_at ? formatDate(row.reviewed_at) : '-'
|
||||
return row.updated_at ? formatDate(row.updated_at) : '-'
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user