增加价格变更日志

This commit is contained in:
wuweihua
2026-11-06 10:11:15 +08:00
committed by caojia
parent 8d34f84cbb
commit 956fb08bea
12 changed files with 487 additions and 58 deletions
@@ -12,10 +12,10 @@
</template>
<el-tabs v-model="statusTab" class="ver-tabs">
<el-tab-pane :label="tabLabel('all')" name="all" />
<el-tab-pane :label="tabLabel('0')" name="0" />
<el-tab-pane :label="tabLabel('3')" name="3" />
<el-tab-pane :label="tabLabel('pending')" name="pending" />
<el-tab-pane :label="tabLabel('1')" name="1" />
<el-tab-pane :label="tabLabel('2')" name="2" />
<el-tab-pane :label="tabLabel('del')" name="del" />
</el-tabs>
<el-table :data="filteredVersions" border empty-text="暂无版本">
@@ -32,9 +32,12 @@
</el-table-column>
<el-table-column :label="colStatus" width="100" align="center">
<template #default="{ row }">
<el-tag :type="versionStatusTag(row.status)" size="small">{{ versionStatusLabel(row.status) }}</el-tag>
<el-tag :type="isDeletedVersion(row) ? 'danger' : versionStatusTag(row.status)" size="small">{{ statusText(row) }}</el-tag>
</template>
</el-table-column>
<el-table-column :label="colCreate" min-width="170" align="center">
<template #default="{ row }">{{ row.createTime || '-' }}</template>
</el-table-column>
<el-table-column :label="colRows" width="100" align="center">
<template #default="{ row }">{{ detailCount(row) }}</template>
</el-table-column>
@@ -49,27 +52,27 @@
@click="emit('view-price-log', row)"
>变更记录</el-button>
<el-button
v-if="showEditButton(row)"
v-if="!isDeletedVersion(row) && showEditButton(row)"
link
type="primary"
@click="emit('edit', row)"
>编辑</el-button>
<el-button
v-if="isDraftVersion(row)"
v-if="!isDeletedVersion(row) && isDraftVersion(row)"
link
type="success"
@click="emit('activate', row)"
v-hasPermi="editPerm"
>启动</el-button>
<el-button
v-if="isPendingVersion(row)"
v-if="!isDeletedVersion(row) && isPendingVersion(row)"
link
type="primary"
@click="emit('reschedule', row)"
v-hasPermi="editPerm"
>修改生效时间</el-button>
<el-button
v-if="isDraftVersion(row) || isPendingVersion(row) || isEffectVersion(row)"
v-if="!isDeletedVersion(row) && (isDraftVersion(row) || isPendingVersion(row) || isEffectVersion(row))"
link
type="danger"
:loading="isRemoving(row)"
@@ -102,6 +105,7 @@ const emit = defineEmits(['update:modelValue', 'create-version', 'open-details',
const title = '套餐版本'
const colVer = '版本号'
const colCreate = '创建时间'
const colEff = '生效时间'
const colExp = '失效时间'
const colStatus = '状态'
@@ -109,28 +113,42 @@ const colRows = '明细行数'
const colAction = '操作'
const statusTab = ref('all')
function isDeletedVersion(row) {
return !!row && String(row.isDel) === '1'
}
function statusText(row) {
if (isDeletedVersion(row)) return '已删除'
return versionStatusLabel(row.status)
}
const activeVersions = computed(() => (props.versions || []).filter(v => !isDeletedVersion(v)))
const deletedVersions = computed(() => (props.versions || []).filter(v => isDeletedVersion(v)))
const counts = computed(() => {
const map = { all: 0, '0': 0, '3': 0, '1': 0, '2': 0 }
;(props.versions || []).forEach(v => {
const map = { all: 0, pending: 0, '1': 0, '2': 0, del: 0 }
activeVersions.value.forEach(v => {
map.all++
const s = String(v.status == null ? '' : v.status)
if (map[s] != null) map[s]++
if (s === '0' || s === '3') map.pending++
else if (map[s] != null) map[s]++
})
map.del = deletedVersions.value.length
return map
})
function tabLabel(key) {
const labels = {
all: '全部',
'0': '草稿',
'3': '待生效',
pending: '待生效',
'1': '已生效',
'2': '已失效'
'2': '已失效',
del: '已删除'
}
return labels[key] + ' (' + (counts.value[key] || 0) + ')'
}
const hasDraft = computed(() => (props.versions || []).some(v => isDraftVersion(v)))
const hasDraft = computed(() => activeVersions.value.some(v => isDraftVersion(v)))
function toEffMs(v) {
if (!v || !v.effectiveTime) return NaN
@@ -166,10 +184,21 @@ function sortVersions(list) {
}
const filteredVersions = computed(() => {
const list = props.versions || []
const filtered = statusTab.value === 'all'
? list
: list.filter(v => String(v.status) === statusTab.value)
if (statusTab.value === 'del') {
return sortVersions(deletedVersions.value)
}
const list = activeVersions.value
let filtered
if (statusTab.value === 'all') {
filtered = list
} else if (statusTab.value === 'pending') {
filtered = list.filter(v => {
const s = String(v.status)
return s === '0' || s === '3'
})
} else {
filtered = list.filter(v => String(v.status) === statusTab.value)
}
return sortVersions(filtered)
})