6-27-中午提交,修改页面映射
This commit is contained in:
parent
d67cdd6123
commit
506a5a4faa
@ -42,7 +42,7 @@
|
||||
<td>
|
||||
<div class="stack">
|
||||
<strong>{{ row.fileName }}</strong>
|
||||
<small>{{ row.bizType }} / {{ row.bizId }}</small>
|
||||
<small>{{ row.bizType === 'sales_order' ? '销售订单' : row.bizType === 'logistics_task' ? '物流任务' : row.bizType }} / {{ row.bizId }}</small>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
|
||||
@ -92,9 +92,9 @@
|
||||
<div class="panel-header"><h3>操作审计日志</h3><span>记录审批、配置与导出等关键动作</span></div>
|
||||
<div class="timeline">
|
||||
<div v-for="item in filteredLogs" :key="item.logId" class="timeline-item">
|
||||
<strong>{{ item.operateType }}</strong>
|
||||
<strong>{{ mapOperateType(item.operateType) }}</strong>
|
||||
<p>{{ item.detail }}</p>
|
||||
<small>{{ item.time }} · {{ item.bizType || '未知业务' }}</small>
|
||||
<small>{{ item.time }} · {{ mapBizType(item.bizType) }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<PaginationBar v-model:currentPage="pagination.pageNo" v-model:pageSize="pagination.pageSize" :total="pagination.total" />
|
||||
@ -150,6 +150,50 @@ const matrix = ref([
|
||||
const logs = ref([]);
|
||||
const pagination = reactive({ pageNo: 1, pageSize: 20, total: 0 });
|
||||
|
||||
/** 将操作类型码映射为中文 */
|
||||
const operateTypeMap = {
|
||||
order_submit: '订单提交',
|
||||
order_update: '订单修改',
|
||||
order_approve: '订单审批',
|
||||
order_cancel: '订单取消',
|
||||
order_cancel_approve: '取消审批',
|
||||
order_settle: '订单结算',
|
||||
order_supplier_text_confirm: '供应商确认',
|
||||
logistics_task_create: '物流任务创建',
|
||||
logistics_task_reassign: '物流任务改派',
|
||||
logistics_task_cancel: '物流任务取消',
|
||||
logistics_task_attachment_create: '物流附件上传',
|
||||
driver_task_accepted: '司机接单',
|
||||
driver_task_picked_up: '司机揽货',
|
||||
driver_task_delivered: '司机送达',
|
||||
tracking_update: '轨迹更新',
|
||||
waybill_submit: '运单提交',
|
||||
customer_create: '客户创建',
|
||||
customer_update: '客户修改',
|
||||
customer_import: '客户导入',
|
||||
config_create: '配置创建',
|
||||
config_update: '配置修改',
|
||||
ai_recognize: 'AI识别',
|
||||
ai_correct: 'AI修正',
|
||||
attachment_create: '附件上传',
|
||||
};
|
||||
function mapOperateType(value) { return operateTypeMap[value] || value || '-'; }
|
||||
|
||||
/** 将业务类型码映射为中文 */
|
||||
const bizTypeMap = {
|
||||
sales_order: '销售订单',
|
||||
logistics_task: '物流任务',
|
||||
customer: '客户',
|
||||
customer_arrears: '客户欠款',
|
||||
config: '系统配置',
|
||||
system_user: '系统用户',
|
||||
system_role: '系统角色',
|
||||
system_menu: '系统菜单',
|
||||
file_attachment: '文件附件',
|
||||
ai_recognition_log: 'AI识别记录',
|
||||
};
|
||||
function mapBizType(value) { return bizTypeMap[value] || value || '未知业务'; }
|
||||
|
||||
const visibleFields = computed(() => baseFields.map((field) => ({
|
||||
label: field.label,
|
||||
value: field[activeRole.value],
|
||||
|
||||
@ -230,10 +230,11 @@ const validationItems = computed(() => {
|
||||
|
||||
// 欠款模式一致性
|
||||
const arrearsMode = cfgMap.arrears_generate_mode?.value;
|
||||
const arrearsModeMap = { shipped: '发货后记账', delivered: '送达后记账' };
|
||||
const modeOk = arrearsMode === 'shipped' || arrearsMode === 'delivered';
|
||||
items.push({
|
||||
name: '欠款模式校验',
|
||||
detail: `当前模式:${arrearsMode || '未设置'}。`,
|
||||
detail: `当前模式:${arrearsModeMap[arrearsMode] || arrearsMode || '未设置'}。`,
|
||||
state: modeOk ? 'done' : 'todo',
|
||||
stateText: modeOk ? '已对齐' : '待收口',
|
||||
});
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
<div class="trace-card">
|
||||
<div class="trace-time">{{ item.node_time }}</div>
|
||||
<div class="trace-desc">{{ item.node_desc }}</div>
|
||||
<span v-if="item.source_platform" class="trace-source badge">{{ item.source_platform }}</span>
|
||||
<span v-if="item.source_platform" class="trace-source badge">{{ ({ driver: '司机上报', backend: '后台录入', kuaidi100: '快递100', third_party: '第三方', manual: '手动录入' })[item.source_platform] || item.source_platform }}</span>
|
||||
<span v-if="item.remark" class="trace-location">{{ item.remark }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -460,7 +460,7 @@
|
||||
</div>
|
||||
<div class="doc-field">
|
||||
<label>任务状态</label>
|
||||
<span>{{ detail.logistics.task_status || '-' }}</span>
|
||||
<span>{{ mapLogisticsStatus(detail.logistics.status) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<!-- 物流轨迹时间线 -->
|
||||
@ -471,7 +471,7 @@
|
||||
<div class="doc-trace-card">
|
||||
<span class="doc-trace-time">{{ item.node_time }}</span>
|
||||
<span class="doc-trace-desc">{{ item.node_desc }}</span>
|
||||
<span v-if="item.source_platform" class="doc-trace-source">{{ item.source_platform }}</span>
|
||||
<span v-if="item.source_platform" class="doc-trace-source">{{ mapSourcePlatform(item.source_platform) }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -1028,6 +1028,20 @@ const statusTextMap = {
|
||||
pending_settle: '待结算', settled: '已结算',
|
||||
};
|
||||
|
||||
/** 将物流轨迹来源平台映射为中文 */
|
||||
const sourcePlatformMap = {
|
||||
driver: '司机上报', backend: '后台录入', kuaidi100: '快递100',
|
||||
third_party: '第三方', manual: '手动录入',
|
||||
};
|
||||
function mapSourcePlatform(value) { return sourcePlatformMap[value] || value || ''; }
|
||||
|
||||
/** 将物流任务状态映射为中文 */
|
||||
const logisticsStatusMap = {
|
||||
pending: '待接单', accepted: '已接单', picked_up: '已揽货',
|
||||
delivered: '已送达', canceled: '已取消',
|
||||
};
|
||||
function mapLogisticsStatus(value) { return logisticsStatusMap[value] || value || '-'; }
|
||||
|
||||
// ==================== 编辑相关 ====================
|
||||
const isEditing = ref(false);
|
||||
const editSaving = ref(false);
|
||||
|
||||
@ -60,9 +60,9 @@
|
||||
<tbody>
|
||||
<tr v-for="row in paginatedReminders" :key="row.reminder_id">
|
||||
<td>{{ row.title || '(无标题)' }}</td>
|
||||
<td>{{ row.type }}</td>
|
||||
<td>{{ row.biz_type }} / {{ row.biz_id }}</td>
|
||||
<td><span class="status">{{ row.status }}</span></td>
|
||||
<td>{{ mapReminderType(row.type) }}</td>
|
||||
<td>{{ mapReminderBizType(row.biz_type) }} / {{ row.biz_id }}</td>
|
||||
<td><span class="status">{{ mapReminderStatus(row.status) }}</span></td>
|
||||
<td><button class="ghost-btn" @click="markRead(row)" :disabled="row.status === 'read'">标记已读</button></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -96,6 +96,28 @@ import PaginationBar from '../components/PaginationBar.vue';
|
||||
const toast = useToast();
|
||||
/** 提醒列表数据 */
|
||||
const reminders = ref([]);
|
||||
|
||||
/** 将提醒类型码映射为中文 */
|
||||
const reminderTypeMap = {
|
||||
logistics_timeout: '物流超时',
|
||||
arrears: '欠款提醒',
|
||||
inactive_customer: '长期未下单',
|
||||
order_status: '订单状态变更',
|
||||
};
|
||||
function mapReminderType(value) { return reminderTypeMap[value] || value || '-'; }
|
||||
|
||||
/** 将提醒状态码映射为中文 */
|
||||
const reminderStatusMap = { pending: '待处理', read: '已读' };
|
||||
function mapReminderStatus(value) { return reminderStatusMap[value] || value || '-'; }
|
||||
|
||||
/** 将业务类型码映射为中文 */
|
||||
const reminderBizTypeMap = {
|
||||
sales_order: '销售订单',
|
||||
logistics_task: '物流任务',
|
||||
customer_arrears: '客户欠款',
|
||||
customer: '客户',
|
||||
};
|
||||
function mapReminderBizType(value) { return reminderBizTypeMap[value] || value || '-'; }
|
||||
/** 操作进行中标识 */
|
||||
const loading = ref(false);
|
||||
/** 筛选条件(状态和类型) */
|
||||
|
||||
@ -195,7 +195,7 @@
|
||||
<article>
|
||||
<h4>文件信息</h4>
|
||||
<p>文件名:{{ lastExport.file_name }}</p>
|
||||
<p>导出格式:{{ lastExport.export_format }}</p>
|
||||
<p>导出格式:{{ lastExport.export_format === 'csv' ? 'CSV' : lastExport.export_format === 'xlsx' ? 'Excel' : lastExport.export_format }}</p>
|
||||
<p>统计周期数:{{ lastExport.total_periods }}</p>
|
||||
</article>
|
||||
<article class="full-width">
|
||||
|
||||
@ -83,6 +83,26 @@ function mapOrderStatus(status) {
|
||||
return statusMap[status] || status || "-";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将审批类型码映射为中文文本
|
||||
* @param {string} type - 审批类型码
|
||||
* @returns {string} 中文类型名称
|
||||
*/
|
||||
function mapApproveType(type) {
|
||||
const typeMap = { order: "订单审批", cancel_order: "取消审批" };
|
||||
return typeMap[type] || type || "-";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将审批结果码映射为中文文本
|
||||
* @param {string} result - 审批结果码
|
||||
* @returns {string} 中文结果名称
|
||||
*/
|
||||
function mapApproveResult(result) {
|
||||
const resultMap = { pass: "通过", reject: "驳回", refuse: "驳回" };
|
||||
return resultMap[result] || result || "-";
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号脱敏处理,保留前 3 位和后 4 位
|
||||
* @param {string} mobile - 原始手机号
|
||||
@ -347,8 +367,8 @@ export async function fetchOrderDetail(orderId) {
|
||||
approveLogs: (data.approve_logs || []).map((item) => ({
|
||||
id: item.log_id,
|
||||
approveTime: item.approve_time || "-",
|
||||
approveType: item.approve_type || "-",
|
||||
approveResult: item.approve_result || "-",
|
||||
approveType: mapApproveType(item.approve_type),
|
||||
approveResult: mapApproveResult(item.approve_result),
|
||||
afterStatus: mapOrderStatus(item.after_status),
|
||||
approveOpinion: item.approve_opinion || "-",
|
||||
})),
|
||||
|
||||
@ -102,7 +102,7 @@
|
||||
<div v-else class="reminder-list">
|
||||
<article v-for="item in pendingReminders" :key="item.reminder_id" class="reminder-row">
|
||||
<span class="reminder-title">{{ item.title || '(无标题)' }}</span>
|
||||
<span class="reminder-type">{{ item.type || "-" }}</span>
|
||||
<span class="reminder-type">{{ mapReminderType(item.type) }}</span>
|
||||
<span class="reminder-time">{{ item.created_at || "-" }}</span>
|
||||
</article>
|
||||
</div>
|
||||
@ -131,6 +131,15 @@ import { fetchFlowOverview, fetchRemindersDashboard, fetchSalesmanDashboard, fet
|
||||
import { salesStore } from "../store";
|
||||
import { reminderWs } from "../utils/websocket";
|
||||
|
||||
/** 将提醒类型码映射为中文 */
|
||||
const reminderTypeMap = {
|
||||
arrears: "欠款提醒",
|
||||
inactive_customer: "长期未下单",
|
||||
logistics_timeout: "物流超时",
|
||||
order_status: "订单状态变更",
|
||||
};
|
||||
function mapReminderType(value) { return reminderTypeMap[value] || value || "-"; }
|
||||
|
||||
/** 加载状态标识 */
|
||||
const loading = ref(true);
|
||||
/** 自定义日期范围 */
|
||||
|
||||
Loading…
Reference in New Issue
Block a user