提交
This commit is contained in:
1 parent
594e4ce38e
commit
e233269abf
144 files changed
+228178
-111974
No files matched your search
@@ -867,6 +867,7 @@ body .el-table thead {
|
||||
}
|
||||
|
||||
// 主列表:无顶/底外框;左右外缘 + 列间竖线 + 行间横线
|
||||
// 含 el-table--border(ListTable 为列宽拖拽开启):覆盖上方「border 模式去竖线」规则,保持 list-table 网格
|
||||
.page-container .list-table.el-table,
|
||||
.console-container .list-table.el-table,
|
||||
.el-dialog .list-table.el-table,
|
||||
@@ -909,16 +910,9 @@ body .el-table thead {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 横向滚到最右侧时末列完整可见:
|
||||
* 给表头/表体 table 右侧留出空隙,增大可滚动宽度,避免末列被 overflow 或
|
||||
* 叠加滚动条裁切。不要给末列 .cell 加 padding,否则会挤占「创建时间」等定宽文案。
|
||||
*/
|
||||
&.el-table--scrollable-x {
|
||||
.el-table__header-wrapper table,
|
||||
.el-table__body-wrapper table {
|
||||
margin-right: 12px;
|
||||
}
|
||||
// 列宽拖拽代理线(Element Plus border 模式)
|
||||
.el-table__column-resize-proxy {
|
||||
border-left: 1px dashed var(--mint-primary, #10b981) !important;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-contract-selector"
|
||||
ref="tableRef"
|
||||
v-loading="loading"
|
||||
:data="contractList"
|
||||
@@ -138,7 +138,7 @@
|
||||
{{ planCountMap[String(row.id)] ?? 0 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<ListPagination
|
||||
v-show="total > 0"
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
:remote-method="searchRemote"
|
||||
:loading="loading"
|
||||
:allow-create="allowCreate"
|
||||
default-first-option
|
||||
:default-first-option="allowCreate"
|
||||
clearable
|
||||
style="width: 100%"
|
||||
@focus="handleFocus"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
v-for="item in displayOptions"
|
||||
:key="item.id"
|
||||
:label="item.customerName"
|
||||
:value="item.customerName"
|
||||
@@ -98,6 +98,22 @@
|
||||
loadDefault()
|
||||
}
|
||||
}
|
||||
|
||||
/** 编辑回显:历史往来单位若不在客户库,仍展示只读选项(禁止 allow-create 时) */
|
||||
const displayOptions = computed(() => {
|
||||
const current = model.value?.trim()
|
||||
if (!current) return options.value
|
||||
if (options.value.some((item) => item.customerName === current)) {
|
||||
return options.value
|
||||
}
|
||||
return [
|
||||
{
|
||||
id: `legacy-${current}`,
|
||||
customerName: current
|
||||
},
|
||||
...options.value
|
||||
]
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
productName: string
|
||||
model?: string
|
||||
unit?: string
|
||||
status?: string
|
||||
}
|
||||
|
||||
const dictStore = useDictStore()
|
||||
@@ -60,11 +61,14 @@
|
||||
const options = ref<ProductOption[]>([])
|
||||
|
||||
const formatProductMeta = (item: ProductOption): string => {
|
||||
const parts: string[] = []
|
||||
const model = item.model?.trim() || ''
|
||||
const unitRaw = item.unit?.trim() || ''
|
||||
const unit = unitRaw ? dictStore.getLabel('crm_product_unit', unitRaw) : ''
|
||||
if (model && unit) return `${model} / ${unit}`
|
||||
return model || unit || ''
|
||||
if (model && unit) parts.push(`${model} / ${unit}`)
|
||||
else if (model || unit) parts.push(model || unit)
|
||||
if (item.status === 'off') parts.push('已下架')
|
||||
return parts.join(' · ')
|
||||
}
|
||||
|
||||
const extractList = (res: unknown): ProductOption[] => {
|
||||
@@ -84,6 +88,7 @@
|
||||
specification.value = item.model?.trim() || ''
|
||||
}
|
||||
|
||||
/** 编辑回显:当前产品即使已下架也保留在选项中,新建/重选仅上架产品 */
|
||||
const ensureCurrentOption = async () => {
|
||||
const id = productId.value?.trim()
|
||||
if (!id) return
|
||||
@@ -103,7 +108,7 @@
|
||||
const loadDefault = async () => {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await fetchProductList({ page: 1, pageSize: 20 })
|
||||
const res = await fetchProductList({ page: 1, pageSize: 20, status: 'on' })
|
||||
options.value = extractList(res)
|
||||
await ensureCurrentOption()
|
||||
} catch (error) {
|
||||
@@ -124,7 +129,8 @@
|
||||
const res = await fetchProductList({
|
||||
keyword: query.trim(),
|
||||
page: 1,
|
||||
pageSize: 50
|
||||
pageSize: 50,
|
||||
status: 'on'
|
||||
})
|
||||
options.value = extractList(res)
|
||||
await ensureCurrentOption()
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
<!--
|
||||
主列表薄封装:在 el-table 上启用列宽拖拽,并按 table-key 持久化到 localStorage。
|
||||
用法:将 <el-table class="list-table" …> 换成 <ListTable table-key="crm-customer" class="list-table" …>
|
||||
-->
|
||||
<template>
|
||||
<el-table
|
||||
ref="tableRef"
|
||||
v-bind="tableAttrs"
|
||||
:border="resolvedBorder"
|
||||
:allow-drag-last-column="true"
|
||||
:class="tableClass"
|
||||
@header-dragend="handleHeaderDragEnd"
|
||||
>
|
||||
<slot />
|
||||
</el-table>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, nextTick, onMounted, ref, unref, useAttrs, watch } from 'vue'
|
||||
import {
|
||||
resolveListColumnKey,
|
||||
usePersistedListColumnWidths
|
||||
} from '@/composables/usePersistedListColumnWidths'
|
||||
|
||||
defineOptions({ name: 'ListTable', inheritAttrs: false })
|
||||
|
||||
const props = withDefaults(
|
||||
defineProps<{
|
||||
/** 表格唯一标识,用于 localStorage 分区(同页多表必须不同) */
|
||||
tableKey: string
|
||||
/** 是否持久化列宽,默认 true */
|
||||
persistColumnWidth?: boolean
|
||||
/** 是否开启 border(列宽拖拽依赖);默认 true */
|
||||
border?: boolean
|
||||
}>(),
|
||||
{
|
||||
persistColumnWidth: true,
|
||||
border: true
|
||||
}
|
||||
)
|
||||
|
||||
const attrs = useAttrs()
|
||||
const tableRef = ref<any>(null)
|
||||
const { setWidth, applyToTable, resetWidths, getWidths } = usePersistedListColumnWidths(
|
||||
computed(() => props.tableKey)
|
||||
)
|
||||
|
||||
const resolvedBorder = computed(() => props.border !== false)
|
||||
|
||||
const tableClass = computed(() => {
|
||||
const extra = attrs.class
|
||||
return ['list-table', extra]
|
||||
})
|
||||
|
||||
const tableAttrs = computed(() => {
|
||||
const raw = { ...attrs } as Record<string, unknown>
|
||||
delete raw.class
|
||||
delete raw.border
|
||||
// 避免与内部 handler 重复绑定(父级若仍监听,下面会手动转发)
|
||||
delete raw.onHeaderDragend
|
||||
delete raw.onHeaderDragEnd
|
||||
return raw
|
||||
})
|
||||
|
||||
const parentHeaderDragEnd = computed(() => {
|
||||
const a = attrs as Record<string, unknown>
|
||||
return (a.onHeaderDragend || a.onHeaderDragEnd) as
|
||||
| ((...args: any[]) => void)
|
||||
| Array<(...args: any[]) => void>
|
||||
| undefined
|
||||
})
|
||||
|
||||
let applyTimer: ReturnType<typeof setTimeout> | null = null
|
||||
|
||||
const scheduleApply = () => {
|
||||
if (!props.persistColumnWidth) return
|
||||
if (!Object.keys(getWidths()).length) return
|
||||
if (applyTimer) clearTimeout(applyTimer)
|
||||
applyTimer = setTimeout(() => {
|
||||
nextTick(() => {
|
||||
applyToTable(tableRef.value)
|
||||
})
|
||||
}, 16)
|
||||
}
|
||||
|
||||
const handleHeaderDragEnd = (
|
||||
newWidth: number,
|
||||
oldWidth: number,
|
||||
column: any,
|
||||
event: MouseEvent
|
||||
) => {
|
||||
if (props.persistColumnWidth) {
|
||||
const key = resolveListColumnKey(column)
|
||||
if (key) setWidth(key, newWidth)
|
||||
}
|
||||
|
||||
const parent = parentHeaderDragEnd.value
|
||||
if (typeof parent === 'function') {
|
||||
parent(newWidth, oldWidth, column, event)
|
||||
} else if (Array.isArray(parent)) {
|
||||
parent.forEach((fn) => fn?.(newWidth, oldWidth, column, event))
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
scheduleApply()
|
||||
// 首屏列尚未完全注册时再补一次
|
||||
setTimeout(() => scheduleApply(), 100)
|
||||
})
|
||||
|
||||
watch(
|
||||
() => (attrs as any).data,
|
||||
() => scheduleApply(),
|
||||
{ deep: false }
|
||||
)
|
||||
|
||||
watch(
|
||||
() => props.tableKey,
|
||||
() => scheduleApply()
|
||||
)
|
||||
|
||||
// 列显隐导致列数量变化时写回(避免在 drag 过程中用 onUpdated 反复 apply)
|
||||
watch(
|
||||
() => {
|
||||
const cols = tableRef.value?.store?.states?.columns
|
||||
return unref(cols)?.length ?? 0
|
||||
},
|
||||
() => scheduleApply()
|
||||
)
|
||||
|
||||
/**
|
||||
* 代理底层 el-table,保证父组件 ref 上的 clearSelection / doLayout 等仍可用
|
||||
*/
|
||||
const exposed = new Proxy(
|
||||
{},
|
||||
{
|
||||
get(_target, prop) {
|
||||
if (prop === 'elTableRef') return tableRef
|
||||
if (prop === 'applyColumnWidths') {
|
||||
return () => applyToTable(tableRef.value)
|
||||
}
|
||||
if (prop === 'resetColumnWidths') {
|
||||
return () => {
|
||||
resetWidths()
|
||||
}
|
||||
}
|
||||
const table = tableRef.value
|
||||
if (!table) return undefined
|
||||
const value = table[prop as keyof typeof table]
|
||||
return typeof value === 'function' ? value.bind(table) : value
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
defineExpose(exposed)
|
||||
</script>
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
<div v-if="!certList.length" class="cert-empty">{{ emptyHint }}</div>
|
||||
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-cert-form-list"
|
||||
v-else-if="layout === 'table'"
|
||||
:data="certList"
|
||||
stripe
|
||||
@@ -113,7 +113,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div v-else class="cert-card-list">
|
||||
<div v-for="(cert, index) in certList" :key="cert._key" class="cert-card">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
<div v-else-if="layout === 'table'" class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-cert-view-list"
|
||||
:data="certList"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -77,7 +77,7 @@
|
||||
<span v-else>—</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
<h3 class="dialog-section-title">关联运输信息</h3>
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-disburse-dialog"
|
||||
:data="settlement.transports || []"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -159,7 +159,7 @@
|
||||
<el-table-column prop="freightAmount" label="运费(元)" min-width="110" align="right">
|
||||
<template #default="{ row }">{{ formatAmount(row.freightAmount) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</div>
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-settlement-form-dialog"
|
||||
:data="editableTransports"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -152,7 +152,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<p v-if="canEditTransports" class="dialog-section-tip">至少保留一条关联运输;删除后可在「添加运输」中重新加入</p>
|
||||
@@ -222,7 +222,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-settlement-form-dialog-2"
|
||||
:data="removedTransports"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -309,7 +309,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ formatAmount(row.freightAmount) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-settlement-form-dialog-3"
|
||||
v-loading="addLoading"
|
||||
:data="availablePlans"
|
||||
class="list-table"
|
||||
@@ -412,7 +412,7 @@
|
||||
row.archiveTime ? formatDateTime(row.archiveTime) : '—'
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<h4 class="view-section-title">发票信息</h4>
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-settlement-view-dialog"
|
||||
:data="invoiceRows"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -61,7 +61,7 @@
|
||||
<span v-else class="view-kv-value">—</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<div class="view-kv-grid view-kv-grid--cols-2 view-kv-grid--mt">
|
||||
@@ -80,7 +80,7 @@
|
||||
<h4 class="view-section-title">关联运输信息</h4>
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-freight-settlement-view-dialog-2"
|
||||
:data="settlement.transports || []"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -126,7 +126,7 @@
|
||||
<el-table-column prop="freightAmount" label="运费(元)" min-width="110" align="right">
|
||||
<template #default="{ row }">{{ formatAmount(row.freightAmount) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="panel dialog-list-panel pl-plan-product-table-wrap">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table :data="products" stripe class="list-table pl-plan-product-table" empty-text="暂无产品">
|
||||
<ListTable table-key="business-pl-plan-form-dialog-pl-plan-form-product-table" :data="products" stripe class="list-table pl-plan-product-table" empty-text="暂无产品">
|
||||
<el-table-column label="序号" type="index" min-width="60" align="center" header-align="center" />
|
||||
<el-table-column label="产品名称" min-width="140" show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
@@ -140,7 +140,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<p v-if="!hasDriverFeedback" class="pl-plan-form-empty-hint">暂无司机回传</p>
|
||||
<template v-else>
|
||||
<div class="view-subtable-wrap">
|
||||
<el-table :data="driverFeedbackTableRows" class="view-subtable list-table" stripe>
|
||||
<ListTable table-key="business-pl-plan-transport-feedback-blocks" :data="driverFeedbackTableRows" class="view-subtable list-table" stripe>
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" />
|
||||
<el-table-column
|
||||
prop="productNo"
|
||||
@@ -98,7 +98,7 @@
|
||||
{{ row.remark || '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
<div class="pl-plan-io-site-meta">
|
||||
<div class="pl-plan-io-site-meta__item">
|
||||
@@ -148,7 +148,7 @@
|
||||
<template v-if="ioOrder">
|
||||
<ViewKvTable :fields="ioOrderViewFields" mode="quint" />
|
||||
<div class="view-subtable-wrap" style="margin-top: 12px">
|
||||
<el-table :data="resolvedIoOrderItems" class="view-subtable list-table" stripe>
|
||||
<ListTable table-key="business-pl-plan-transport-feedback-blocks-2" :data="resolvedIoOrderItems" class="view-subtable list-table" stripe>
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" />
|
||||
<el-table-column
|
||||
prop="productNo"
|
||||
@@ -215,7 +215,7 @@
|
||||
{{ row.remark || '—' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
<div class="pl-plan-io-site-meta">
|
||||
<div class="pl-plan-io-site-meta__item">
|
||||
@@ -238,7 +238,7 @@
|
||||
暂无现场链接
|
||||
</p>
|
||||
<div v-else class="view-subtable-wrap">
|
||||
<el-table :data="siteFeedbackTableRows" class="view-subtable list-table" stripe>
|
||||
<ListTable table-key="business-pl-plan-transport-feedback-blocks-3" :data="siteFeedbackTableRows" class="view-subtable list-table" stripe>
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" />
|
||||
<el-table-column
|
||||
prop="productName"
|
||||
@@ -294,7 +294,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</template>
|
||||
</section>
|
||||
@@ -329,7 +329,7 @@
|
||||
<template v-if="row.weighing">
|
||||
<h5 class="pl-plan-dibang-weighing-title">地磅单</h5>
|
||||
<div class="view-subtable-wrap">
|
||||
<el-table :data="[row.weighing]" class="view-subtable list-table" stripe>
|
||||
<ListTable table-key="business-pl-plan-transport-feedback-blocks-4" :data="[row.weighing]" class="view-subtable list-table" stripe>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
@@ -402,7 +402,7 @@
|
||||
align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</template>
|
||||
<p v-else class="pl-plan-form-empty-hint pl-plan-dibang-pending">尚未关联地磅单</p>
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="business-pl-transport-address-select-dialog"
|
||||
class="list-table pl-transport-address-select-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -107,7 +107,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<ListPagination
|
||||
v-show="pagination.total > 0"
|
||||
|
||||
@@ -15,7 +15,14 @@
|
||||
:key="item.id"
|
||||
:label="item.licensePlate"
|
||||
:value="item.licensePlate"
|
||||
/>
|
||||
>
|
||||
<div class="pl-vehicle-option">
|
||||
<span>{{ item.licensePlate }}</span>
|
||||
<span v-if="vehicleTypeLabel(item)" class="pl-vehicle-option__meta">{{
|
||||
vehicleTypeLabel(item)
|
||||
}}</span>
|
||||
</div>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
|
||||
@@ -32,17 +39,29 @@
|
||||
placeholder?: string
|
||||
}>(),
|
||||
{
|
||||
placeholder: '请选择车牌号'
|
||||
placeholder: '请选择车牌号(三方/自有车辆)'
|
||||
}
|
||||
)
|
||||
|
||||
const loading = ref(false)
|
||||
const options = ref<Vehicle[]>([])
|
||||
|
||||
const vehicleTypeLabel = (item: Vehicle): string => {
|
||||
if (item.id?.startsWith('legacy-')) return '历史'
|
||||
if (item.vehicleType === 'self') return '自有'
|
||||
if (item.vehicleType === 'carrier') return '三方'
|
||||
return ''
|
||||
}
|
||||
|
||||
/** 三方车辆 + 山峡自有车辆,禁止手填新建 */
|
||||
const loadOptions = async (keyword: string) => {
|
||||
loading.value = true
|
||||
try {
|
||||
const res = await vehicleApi.list(keyword.trim() ? { q: keyword.trim() } : undefined)
|
||||
const res = await vehicleApi.list({
|
||||
...(keyword.trim() ? { q: keyword.trim() } : {}),
|
||||
page: 1,
|
||||
pageSize: 100
|
||||
})
|
||||
options.value = pickBxList<Vehicle>(res)
|
||||
} catch (error) {
|
||||
console.error('加载运输车辆列表失败', error)
|
||||
@@ -58,7 +77,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
/** 编辑态回显:历史出入库单中的车牌若不在运输车辆库,仍展示只读选项 */
|
||||
/** 编辑态回显:历史出入库单中的车牌若不在车辆库,仍展示只读选项 */
|
||||
const displayOptions = computed(() => {
|
||||
const current = model.value?.trim()
|
||||
if (!current) return options.value
|
||||
@@ -77,3 +96,19 @@
|
||||
]
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.pl-vehicle-option {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.pl-vehicle-option__meta {
|
||||
flex-shrink: 0;
|
||||
font-size: 12px;
|
||||
color: var(--text-muted);
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,138 @@
|
||||
import { unref, type Ref } from 'vue'
|
||||
import { useUserStore } from '@/store/modules/user'
|
||||
|
||||
export type ListColumnWidthMap = Record<string, number>
|
||||
|
||||
/** 与 usePersistedListColumns 的特殊列命名保持一致,便于同一套 key 习惯 */
|
||||
export function resolveListColumnKey(column: {
|
||||
property?: string
|
||||
prop?: string
|
||||
type?: string
|
||||
id?: string
|
||||
label?: string
|
||||
}): string | null {
|
||||
const prop = column.property || column.prop
|
||||
if (prop) return String(prop)
|
||||
if (column.type === 'selection') return '__selection__'
|
||||
if (column.type === 'index') return '__index__'
|
||||
if (column.type === 'expand') return '__expand__'
|
||||
if (column.id) return String(column.id)
|
||||
if (column.label) return `__label__:${column.label}`
|
||||
return null
|
||||
}
|
||||
|
||||
function buildStorageKey(tableKey: string, userId?: string | number | null): string {
|
||||
const uid = userId != null && String(userId).trim() !== '' ? String(userId) : 'anonymous'
|
||||
return `list_col_widths:${uid}:${tableKey}`
|
||||
}
|
||||
|
||||
function loadWidths(storageKey: string): ListColumnWidthMap {
|
||||
if (typeof localStorage === 'undefined') return {}
|
||||
const raw = localStorage.getItem(storageKey)
|
||||
if (!raw) return {}
|
||||
try {
|
||||
const parsed = JSON.parse(raw)
|
||||
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return {}
|
||||
const next: ListColumnWidthMap = {}
|
||||
for (const [key, value] of Object.entries(parsed)) {
|
||||
const n = Number(value)
|
||||
if (key && Number.isFinite(n) && n > 0) {
|
||||
next[key] = Math.round(n)
|
||||
}
|
||||
}
|
||||
return next
|
||||
} catch {
|
||||
return {}
|
||||
}
|
||||
}
|
||||
|
||||
function persistWidths(storageKey: string, widths: ListColumnWidthMap) {
|
||||
if (typeof localStorage === 'undefined') return
|
||||
try {
|
||||
localStorage.setItem(storageKey, JSON.stringify(widths))
|
||||
} catch {
|
||||
// ignore quota / private mode
|
||||
}
|
||||
}
|
||||
|
||||
function getTableColumns(table: any): any[] {
|
||||
if (!table) return []
|
||||
const cols = table.store?.states?.columns
|
||||
const list = unref(cols)
|
||||
return Array.isArray(list) ? list : []
|
||||
}
|
||||
|
||||
/**
|
||||
* 列表列宽 localStorage 持久化(按用户 + tableKey)。
|
||||
* 配合 ListTable:拖拽结束写入,挂载后写回 Element Plus 内部列宽。
|
||||
*/
|
||||
export function usePersistedListColumnWidths(tableKey: string | Ref<string>) {
|
||||
const userStore = useUserStore()
|
||||
|
||||
const resolveKey = () => {
|
||||
const key = String(unref(tableKey) || '').trim()
|
||||
const userId = userStore.getUserInfo?.userId
|
||||
return key ? buildStorageKey(key, userId) : ''
|
||||
}
|
||||
|
||||
const getWidths = (): ListColumnWidthMap => {
|
||||
const storageKey = resolveKey()
|
||||
return storageKey ? loadWidths(storageKey) : {}
|
||||
}
|
||||
|
||||
const setWidth = (columnKey: string, width: number) => {
|
||||
const storageKey = resolveKey()
|
||||
if (!storageKey || !columnKey) return
|
||||
const n = Math.round(Number(width))
|
||||
if (!Number.isFinite(n) || n <= 0) return
|
||||
const next = { ...loadWidths(storageKey), [columnKey]: n }
|
||||
persistWidths(storageKey, next)
|
||||
}
|
||||
|
||||
const resetWidths = () => {
|
||||
const storageKey = resolveKey()
|
||||
if (!storageKey || typeof localStorage === 'undefined') return
|
||||
try {
|
||||
localStorage.removeItem(storageKey)
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 将已存宽度写回表格列并 relayout。
|
||||
* @returns 是否应用了至少一列
|
||||
*/
|
||||
const applyToTable = (table: any): boolean => {
|
||||
const widths = getWidths()
|
||||
const keys = Object.keys(widths)
|
||||
if (!keys.length || !table) return false
|
||||
|
||||
const columns = getTableColumns(table)
|
||||
if (!columns.length) return false
|
||||
|
||||
let applied = false
|
||||
for (const col of columns) {
|
||||
const colKey = resolveListColumnKey(col)
|
||||
if (!colKey) continue
|
||||
const w = widths[colKey]
|
||||
if (w == null) continue
|
||||
col.width = w
|
||||
col.realWidth = w
|
||||
applied = true
|
||||
}
|
||||
|
||||
if (applied && typeof table.doLayout === 'function') {
|
||||
table.doLayout()
|
||||
}
|
||||
return applied
|
||||
}
|
||||
|
||||
return {
|
||||
getWidths,
|
||||
setWidth,
|
||||
resetWidths,
|
||||
applyToTable,
|
||||
resolveListColumnKey
|
||||
}
|
||||
}
|
||||
@@ -3,6 +3,7 @@ import App from './App.vue'
|
||||
import { createApp } from 'vue'
|
||||
import { ElTable } from 'element-plus'
|
||||
import EmptyAwareElTag from './utils/patch-el-tag-empty'
|
||||
import ListTable from '@/components/business/list-table/index.vue'
|
||||
|
||||
ElTable.props.border = { type: Boolean, default: true }
|
||||
|
||||
@@ -52,6 +53,8 @@ logApiCryptoBootInfo()
|
||||
|
||||
const app = createApp(App)
|
||||
app.component('ElTag', EmptyAwareElTag)
|
||||
// 列表列宽拖拽持久化:全局注册,避免按需解析失败导致部分页仍是裸标签
|
||||
app.component('ListTable', ListTable)
|
||||
initStore(app)
|
||||
initRouter(app)
|
||||
setupGlobDirectives(app)
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-advance-apply"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -236,7 +236,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -347,7 +347,7 @@
|
||||
</div>
|
||||
|
||||
<BaseDetailTableSection title="冲抵记录" :data="viewOffsetRecords" empty-text="暂无冲抵记录">
|
||||
<el-table class="list-table" :data="viewOffsetRecords" stripe size="small">
|
||||
<ListTable table-key="bx-advance-apply-2" class="list-table" :data="viewOffsetRecords" stripe size="small">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column
|
||||
prop="reimburseApplyCode"
|
||||
@@ -390,7 +390,7 @@
|
||||
header-align="center"
|
||||
/>
|
||||
<el-table-column prop="operator" label="操作人" min-width="100" align="center" header-align="center" />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</BaseDetailTableSection>
|
||||
|
||||
<BxApprovalFlowTabs
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-advance-approve"
|
||||
class="list-table"
|
||||
:data="pendingRows"
|
||||
v-loading="pendingLoading"
|
||||
@@ -166,7 +166,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -254,7 +254,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-advance-approve-2"
|
||||
class="list-table"
|
||||
:data="approvedRows"
|
||||
v-loading="approvedLoading"
|
||||
@@ -346,7 +346,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-advance-issue"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -185,7 +185,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -276,7 +276,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-advance-issue-2"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -381,7 +381,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -488,7 +488,7 @@
|
||||
</div>
|
||||
|
||||
<BaseDetailTableSection title="冲抵流水" :data="offsetRecords" empty-text="暂无冲抵记录">
|
||||
<el-table class="list-table" :data="offsetRecords" stripe size="small">
|
||||
<ListTable table-key="bx-advance-issue-3" class="list-table" :data="offsetRecords" stripe size="small">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="reimburseApplyCode" label="报销单号" min-width="130" align="center" header-align="center" />
|
||||
<el-table-column prop="reimburseApplicantName" label="报销申请人" min-width="100" align="center" header-align="center" />
|
||||
@@ -500,7 +500,7 @@
|
||||
<el-table-column prop="createTime" label="冲抵时间" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="operator" label="操作人" min-width="100" align="center" header-align="center" />
|
||||
<el-table-column prop="remark" label="备注" min-width="140" align="left" header-align="center" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</BaseDetailTableSection>
|
||||
|
||||
<div v-if="viewAttachments.length" class="dlg-view-section">
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="bx-expense-item"
|
||||
ref="tableRef"
|
||||
class="list-table"
|
||||
:data="filteredTree"
|
||||
@@ -175,7 +175,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="bx-invoice-wallet-admin"
|
||||
v-loading="loading"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
@@ -81,7 +81,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
v-model:current-page="page"
|
||||
@@ -132,7 +132,7 @@
|
||||
<el-tabs v-model="detailTab" class="dlg-view-flow-tabs wallet-detail-tabs">
|
||||
<el-tab-pane label="发票列表" name="invoices">
|
||||
<p class="detail-tab-tip">删除将冲减总额与余额</p>
|
||||
<el-table
|
||||
<ListTable table-key="bx-invoice-wallet-admin-2"
|
||||
class="list-table"
|
||||
:data="invoiceRows"
|
||||
stripe
|
||||
@@ -168,13 +168,13 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<p v-if="!invoiceRows.length" class="detail-empty-hint">
|
||||
暂无发票;可通过「代传发票」录入。
|
||||
</p>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="额度流水" name="ledgers">
|
||||
<el-table
|
||||
<ListTable table-key="bx-invoice-wallet-admin-3"
|
||||
class="list-table"
|
||||
:data="ledgerRows"
|
||||
stripe
|
||||
@@ -194,7 +194,7 @@
|
||||
<el-table-column prop="remark" label="备注" min-width="160" show-overflow-tooltip>
|
||||
<template #default="{ row }">{{ row.remark || '-' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<p v-if="!ledgerRows.length" class="detail-empty-hint">暂无额度流水。</p>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
<el-tabs v-model="activeTab" class="wallet-tabs">
|
||||
<el-tab-pane label="发票列表" name="invoices">
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="bx-invoice-wallet-mine"
|
||||
v-loading="loading"
|
||||
class="list-table"
|
||||
:data="filteredInvoiceRows"
|
||||
@@ -105,12 +105,12 @@
|
||||
<template #default="{ row }">{{ row.uploadByName || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="上传时间" min-width="140" />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="额度流水" name="ledgers">
|
||||
<div class="list-body list-wrap">
|
||||
<el-table v-loading="ledgerLoading" class="list-table" :data="filteredLedgerRows" stripe>
|
||||
<ListTable table-key="bx-invoice-wallet-mine-2" v-loading="ledgerLoading" class="list-table" :data="filteredLedgerRows" stripe>
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" />
|
||||
<el-table-column prop="createTime" label="时间" min-width="170" />
|
||||
<el-table-column prop="entryType" label="类型" min-width="140">
|
||||
@@ -126,7 +126,7 @@
|
||||
<el-table-column prop="remark" label="备注" min-width="180" show-overflow-tooltip>
|
||||
<template #default="{ row }">{{ row.remark || '-' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-payment"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -177,7 +177,7 @@
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -275,7 +275,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-payment-2"
|
||||
class="list-table"
|
||||
:data="processedRows"
|
||||
v-loading="processedLoading"
|
||||
@@ -389,7 +389,7 @@
|
||||
{{ row.payTime || '-' }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -536,7 +536,7 @@
|
||||
<el-icon><RefreshLeft /></el-icon>重置
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table
|
||||
<ListTable table-key="bx-payment-3"
|
||||
class="list-table"
|
||||
:data="offsetAdvances"
|
||||
v-loading="offsetAdvanceLoading"
|
||||
@@ -564,7 +564,7 @@
|
||||
{{ formatMoney(Number(row.actualAmount || row.amount || 0) - Number(row.offsetAmount || 0)) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="offset-pager">
|
||||
<el-pagination
|
||||
v-model:current-page="offsetAdvancePage"
|
||||
@@ -653,7 +653,7 @@
|
||||
|
||||
<h4 class="dlg-view-section-title section-gap-tight">冲抵明细</h4>
|
||||
<BaseDetailTableSection embedded title="冲抵明细" :data="processedOffsetRecords" empty-text="暂无冲抵明细">
|
||||
<el-table class="list-table" :data="processedOffsetRecords" stripe size="small">
|
||||
<ListTable table-key="bx-payment-4" class="list-table" :data="processedOffsetRecords" stripe size="small">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="advanceApplyCode" label="备用金单号" min-width="130" align="center" header-align="center" />
|
||||
<el-table-column prop="advanceApplicantName" label="备用金申请人" min-width="110" align="center" header-align="center" />
|
||||
@@ -665,7 +665,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="createTime" label="冲抵时间" min-width="160" align="center" header-align="center" />
|
||||
<el-table-column prop="operator" label="操作人" min-width="100" align="center" header-align="center" />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</BaseDetailTableSection>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-reimburse-apply"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -209,7 +209,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -482,7 +482,7 @@
|
||||
|
||||
<div class="dlg-view-section">
|
||||
<h4 class="dlg-view-section-title">报销明细</h4>
|
||||
<el-table
|
||||
<ListTable table-key="bx-reimburse-apply-2"
|
||||
class="list-table view-detail-table"
|
||||
:data="viewData.details || []"
|
||||
stripe
|
||||
@@ -505,7 +505,7 @@
|
||||
<el-table-column prop="remark" label="报销事由" min-width="140" align="left" header-align="center">
|
||||
<template #default="{ row }">{{ row.remark || '-' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div v-if="viewLinkedInvoiceFiles.length" class="dlg-view-section">
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-reimburse-approve"
|
||||
class="list-table"
|
||||
:data="pendingRows"
|
||||
v-loading="pendingLoading"
|
||||
@@ -214,7 +214,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
@@ -329,7 +329,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-reimburse-approve-2"
|
||||
class="list-table"
|
||||
:data="approvedRows"
|
||||
v-loading="approvedLoading"
|
||||
@@ -442,7 +442,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap table-page-summary table-page-summary-biz-split">
|
||||
<el-table
|
||||
<ListTable table-key="bx-view-all"
|
||||
class="list-table"
|
||||
:data="pager.pagedRows.value"
|
||||
v-loading="loading"
|
||||
@@ -197,7 +197,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<span class="list-range">{{ pager.rangeText.value }}</span>
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary table-page-summary-biz-split">
|
||||
<el-table
|
||||
<ListTable table-key="bx-view-mine"
|
||||
class="list-table"
|
||||
:data="pagedRows"
|
||||
v-loading="tableLoading"
|
||||
@@ -181,7 +181,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<div class="table-scroll table-page-summary">
|
||||
<el-table
|
||||
<ListTable table-key="bx-view-todo"
|
||||
class="list-table"
|
||||
:data="pagedRows"
|
||||
v-loading="tableLoading"
|
||||
@@ -182,7 +182,7 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="bx-workflow-advance"
|
||||
class="list-table"
|
||||
:data="filteredNodes"
|
||||
v-loading="loading"
|
||||
@@ -116,7 +116,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="bx-workflow-reimburse"
|
||||
class="list-table"
|
||||
:data="filteredNodes"
|
||||
v-loading="loading"
|
||||
@@ -116,7 +116,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-clue"
|
||||
class="list-table"
|
||||
:data="clueList"
|
||||
v-loading="loading"
|
||||
@@ -395,7 +395,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
<section v-else class="invalid-dialog-section">
|
||||
<h3 class="invalid-section-title">待标记线索({{ batchClues.length }} 条)</h3>
|
||||
<el-table :data="batchClues" class="list-table invalid-batch-table" stripe max-height="240">
|
||||
<ListTable table-key="crm-clue-invalid-form" :data="batchClues" class="list-table invalid-batch-table" stripe max-height="240">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="clueName" label="线索姓名" min-width="120" show-overflow-tooltip />
|
||||
<el-table-column prop="company" label="公司名称" min-width="140" show-overflow-tooltip />
|
||||
@@ -93,7 +93,7 @@
|
||||
<span v-else>—</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</section>
|
||||
|
||||
<section class="invalid-dialog-section">
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
<span class="chart-title">销售跟进排行榜</span>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="ownerData" stripe max-height="400">
|
||||
<ListTable table-key="crm-clue-statistics" class="list-table" :data="ownerData" stripe max-height="400">
|
||||
<el-table-column type="index" label="排名" min-width="70" align="center">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.$index === 0" type="danger" size="small">1</el-tag>
|
||||
@@ -94,7 +94,7 @@
|
||||
{{ Number(scope.row.avgFollowCount || 0).toFixed(1) }}次
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart-panel">
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-approval"
|
||||
class="list-table"
|
||||
v-loading="loading"
|
||||
:data="approvalList"
|
||||
@@ -171,7 +171,7 @@
|
||||
<el-table-column label="审批时间" v-if="isColumnVisible('approvalTime')" min-width="160" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ parseTime(row.approvalTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-change"
|
||||
class="list-table"
|
||||
v-loading="loading"
|
||||
:data="changeList"
|
||||
@@ -235,7 +235,7 @@
|
||||
<el-table-column label="创建时间" v-if="isColumnVisible('createTime')" min-width="160" align="center" header-align="center">
|
||||
<template #default="{ row }">{{ parseTime(row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
<el-divider content-position="left">产品明细</el-divider>
|
||||
<div class="panel dialog-list-panel mb-4">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table :data="detailContract.products" class="list-table" stripe empty-text="暂无产品明细">
|
||||
<ListTable table-key="crm-contract-components-contract-detail-dialog" :data="detailContract.products" class="list-table" stripe empty-text="暂无产品明细">
|
||||
<el-table-column label="序号" type="index" min-width="60" align="center" header-align="center" />
|
||||
<el-table-column label="产品名称" min-width="120" :show-overflow-tooltip="true">
|
||||
<template #default="{ row }">
|
||||
@@ -261,7 +261,7 @@
|
||||
<span>{{ scope.row.remark || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -281,7 +281,7 @@
|
||||
</div>
|
||||
<div class="panel dialog-list-panel mb-3">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table :data="prod.priceTiers || []" class="list-table" stripe empty-text="暂无调价记录">
|
||||
<ListTable table-key="crm-contract-components-contract-detail-dialog-2" :data="prod.priceTiers || []" class="list-table" stripe empty-text="暂无调价记录">
|
||||
<el-table-column type="index" label="#" min-width="52" align="center" header-align="center" />
|
||||
<el-table-column label="开始日期" prop="startDate" min-width="120" align="center" />
|
||||
<el-table-column label="结束日期" prop="endDate" min-width="120" align="center" />
|
||||
@@ -307,7 +307,7 @@
|
||||
<span v-else class="text-muted">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -406,7 +406,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-components-contract-detail-dialog-3"
|
||||
:data="detailPaymentList"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -436,7 +436,7 @@
|
||||
<el-table-column label="创建时间" prop="createTime" width="160" align="center">
|
||||
<template #default="scope">{{ parseTime(scope.row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -454,7 +454,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-components-contract-detail-dialog-4"
|
||||
:data="detailInvoiceList"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -484,7 +484,7 @@
|
||||
<el-table-column label="创建时间" prop="createTime" width="160" align="center">
|
||||
<template #default="scope">{{ parseTime(scope.row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -1670,6 +1670,10 @@ const fetchQuoteFreight = async (quoteId?: number): Promise<number> => {
|
||||
}
|
||||
};
|
||||
|
||||
/** 产品明细中是否含「自提」送货方式(字典 crm_shfs) */
|
||||
const hasSelfPickupProduct = (products?: Array<{ deliveryMethod?: string }> | null): boolean =>
|
||||
!!products?.some((p) => String(p.deliveryMethod || '').trim() === '自提');
|
||||
|
||||
/** 替换模板中的占位符为数据库最新数据 */
|
||||
const replacePlaceholders = (htmlContent: string, contractData: ContractVO | undefined, quoteFreight = 0): string => {
|
||||
if (!htmlContent || !contractData) return htmlContent;
|
||||
@@ -1929,6 +1933,9 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
|
||||
const totalWithFreightChinese = numberToChinese(totalWithFreight);
|
||||
const freightText = freightAmount > 0 ? `¥${formatNumber(freightAmount)}` : '-';
|
||||
const totalWithFreightText = isFrameworkContract ? '随行就市' : `${totalWithFreightChinese}(¥${formatNumber(totalWithFreight)})`;
|
||||
const tipRowText = hasSelfPickupProduct(contractData.products)
|
||||
? '含税、客户自提结算以实际到货吨位为准'
|
||||
: '含税、含运费、装卸费(一票制) 结算以实际到货吨位为准';
|
||||
const productTotalRow = `
|
||||
<tr style="background-color: #fff; font-weight: bold;">
|
||||
<td colspan="2" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 12px;">运费</td>
|
||||
@@ -1938,7 +1945,7 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="11" style="padding: 5px 6px; border: 0.3px solid #000; text-align: center; font-size: 11px; background-color: #fff;">
|
||||
含税、含运费、装卸费(一票制) 结算以实际到货吨位为准
|
||||
${tipRowText}
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
@@ -2068,6 +2075,14 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
||||
const 第五条Content = '{{SETTLEMENT_METHOD_CONTENT}}'; // 占位符
|
||||
// 注意:实际内容在打印/生成PDF时通过 replacePlaceholders 动态替换
|
||||
|
||||
// 第三条:任一产品送货方式为「自提」时使用客户自提条款(仅新生成模板写入)
|
||||
const isSelfPickup = hasSelfPickupProduct(contractData.products);
|
||||
const article3Content = isSelfPickup
|
||||
? `<div style="margin: 0;">1、交货方式:需方自提,供方需提供需方要求产品。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由需方承担,到达本公司卸货过程中所发生的一些费用由需方承担。</div>`
|
||||
: `<div style="margin: 0;">1、交货方式:供方送货,供方需提供需方要求产品,送达至需方要求地点。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由供方承担,到达本公司卸货过程中所发生的一些费用由供方承担。</div>`;
|
||||
|
||||
// 数字转中文大写
|
||||
const numberToChinese = (num: number): string => {
|
||||
const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
|
||||
@@ -2314,8 +2329,7 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
||||
<div style="margin-bottom: 5px; line-height: 1.5; font-size: 12px;">
|
||||
<div style="font-weight: bold; margin-bottom: 0; color: #000;">第三条、交货方式及运输方式</div>
|
||||
<div style="line-height: 1.8;">
|
||||
<div style="margin: 0;">1、交货方式:供方送货,供方需提供需方要求产品,送达至需方要求地点。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由供方承担,到达本公司卸货过程中所发生的一些费用由供方承担。</div>
|
||||
${article3Content}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -2441,8 +2455,10 @@ const handleSaveTemplate = async () => {
|
||||
const totalRowMatch = templateWithPlaceholders.match(/<tr style="background-color: #fff; font-weight: bold;">[\s\S]*?<\/tr>/);
|
||||
const totalRowHtml = totalRowMatch ? totalRowMatch[0] : '';
|
||||
|
||||
// 3. 提取提示行
|
||||
const tipRowMatch = templateWithPlaceholders.match(/<tr>[\s\S]*?<td colspan="10"[\s\S]*?结算以实际到货吨位为准[\s\S]*?<\/td>[\s\S]*?<\/tr>/);
|
||||
// 3. 提取提示行(兼容一票制 / 客户自提文案,以及 colspan 10/11)
|
||||
const tipRowMatch = templateWithPlaceholders.match(
|
||||
/<tr>[\s\S]*?<td colspan="1[01]"[\s\S]*?结算以实际到货吨位为准[\s\S]*?<\/td>[\s\S]*?<\/tr>/
|
||||
);
|
||||
const tipRowHtml = tipRowMatch ? tipRowMatch[0] : '';
|
||||
|
||||
// 替换产品表格部分
|
||||
@@ -2462,9 +2478,10 @@ const handleSaveTemplate = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
// 替换提示行
|
||||
// 替换提示行(兼容旧一票制与客户自提提示)
|
||||
if (tipRowHtml) {
|
||||
const tipRowPattern = /<tr>[\s\S]*?<td colspan="10"[\s\S]*?>含税、含运费[\s\S]*?<\/tr>/;
|
||||
const tipRowPattern =
|
||||
/<tr>[\s\S]*?<td colspan="1[01]"[\s\S]*?>含税、(?:含运费|客户自提)[\s\S]*?<\/tr>/;
|
||||
if (tipRowPattern.test(finalTemplate)) {
|
||||
finalTemplate = finalTemplate.replace(tipRowPattern, tipRowHtml);
|
||||
}
|
||||
|
||||
@@ -1178,11 +1178,6 @@ const handleQuoteConfirm = (quote: QuoteVO) => {
|
||||
form.value.quoteId = quote.id
|
||||
form.value.quoteNo = quote.quoteNo
|
||||
|
||||
if (quote.quoteDate) {
|
||||
form.value.signDate = quote.quoteDate
|
||||
handleSignDateChange(quote.quoteDate)
|
||||
}
|
||||
|
||||
if (quote.customerId && !form.value.customerId) {
|
||||
form.value.customerId = quote.customerId
|
||||
form.value.customerName = quote.customerName || ''
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<!-- 产品列表 -->
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-components-product-selector"
|
||||
ref="tableRef"
|
||||
v-loading="loading"
|
||||
:data="productList"
|
||||
@@ -98,7 +98,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
|
||||
@@ -1400,6 +1400,10 @@ const extractSettlementClauseContent = (htmlContent: string): string => {
|
||||
return content.replace(/\u00a0/g, ' ').trim();
|
||||
};
|
||||
|
||||
/** 产品明细中是否含「自提」送货方式(字典 crm_shfs) */
|
||||
const hasSelfPickupProduct = (products?: Array<{ deliveryMethod?: string }> | null): boolean =>
|
||||
!!products?.some((p) => String(p.deliveryMethod || '').trim() === '自提');
|
||||
|
||||
/**
|
||||
* 替换模板中的占位符为数据库最新数据
|
||||
* 用于每次打开富文本时动态更新数据
|
||||
@@ -1618,6 +1622,9 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
|
||||
}
|
||||
|
||||
// 替换产品合计行
|
||||
const tipRowText = hasSelfPickupProduct(contractData.products)
|
||||
? '含税、客户自提结算以实际到货吨位为准'
|
||||
: '含税、含运费、装卸费(一票制) 结算以实际到货吨位为准';
|
||||
const productTotalRow = `
|
||||
<tr style="background-color: #fff; font-weight: bold;">
|
||||
<td colspan="4" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 12px;">合计(人民币)</td>
|
||||
@@ -1625,7 +1632,7 @@ const replacePlaceholders = (htmlContent: string, contractData: ContractVO | und
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="11" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 11px; background-color: #fff;">
|
||||
含税、含运费、装卸费(一票制) 结算以实际到货吨位为准
|
||||
${tipRowText}
|
||||
</td>
|
||||
</tr>
|
||||
`;
|
||||
@@ -1729,6 +1736,17 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
||||
|
||||
const 第五条Content = getSettlementClauseContent(contractData);
|
||||
|
||||
// 第三条 / 表格提示行:任一产品送货方式为「自提」时使用客户自提文案(仅新生成模板写入)
|
||||
const isSelfPickup = hasSelfPickupProduct(contractData.products);
|
||||
const tipRowText = isSelfPickup
|
||||
? '含税、客户自提结算以实际到货吨位为准'
|
||||
: '含税、含运费、装卸费(一票制) 结算以实际到货吨位为准';
|
||||
const article3Content = isSelfPickup
|
||||
? `<div style="margin: 0;">1、交货方式:需方自提,供方需提供需方要求产品。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由需方承担,到达本公司卸货过程中所发生的一些费用由需方承担。</div>`
|
||||
: `<div style="margin: 0;">1、交货方式:供方送货,供方需提供需方要求产品,送达至需方要求地点。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由供方承担,到达本公司卸货过程中所发生的一些费用由供方承担。</div>`;
|
||||
|
||||
// 数字转中文大写
|
||||
const numberToChinese = (num: number): string => {
|
||||
const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
|
||||
@@ -1915,7 +1933,7 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
||||
<!-- 提示行 -->
|
||||
<tr>
|
||||
<td colspan="10" style="padding: 5px 6px; border: 1px solid #000; text-align: center; font-size: 11px; background-color: #fff;">
|
||||
含税、含运费、装卸费(一票制) 结算以实际到货吨位为准
|
||||
${tipRowText}
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -1935,8 +1953,7 @@ const generateContractTemplate = (contractData: ContractVO | undefined): string
|
||||
<div style="margin-bottom: 5px; line-height: 1.5; font-size: 12px;">
|
||||
<div style="font-weight: bold; margin-bottom: 0; color: #000;">第三条、交货方式及运输方式</div>
|
||||
<div style="padding-left: 20px; line-height: 1.5;">
|
||||
<div style="margin: 0;">1、交货方式:供方送货,供方需提供需方要求产品,送达至需方要求地点。</div>
|
||||
<div style="margin: 0;">2、运输:在运输过程中发生的一切费用由供方承担,到达本公司卸货过程中所发生的一些费用由供方承担。</div>
|
||||
${article3Content}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1149,13 +1149,6 @@ const handleQuoteConfirm = (quote: QuoteVO) => {
|
||||
form.value.quoteId = quote.id;
|
||||
form.value.quoteNo = quote.quoteNo;
|
||||
|
||||
// 如果报价单有报价日期,自动带出到签订日期
|
||||
if (quote.quoteDate) {
|
||||
form.value.signDate = quote.quoteDate;
|
||||
// 同步更新合同期限
|
||||
handleSignDateChange(quote.quoteDate);
|
||||
}
|
||||
|
||||
// 自动带出客户信息
|
||||
if (quote.customerId && !form.value.customerId) {
|
||||
form.value.customerId = quote.customerId;
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap"> <!-- 操作按钮栏 + 数据表格 -->
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract"
|
||||
v-loading="loading"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -191,7 +191,7 @@
|
||||
<el-table-column type="expand" width="55">
|
||||
<template #default="scope">
|
||||
<div class="contract-product-expand" v-loading="expandLoadingMap[String(scope.row.id)]">
|
||||
<el-table :data="scope.row.products || []" stripe class="list-table">
|
||||
<ListTable table-key="crm-contract-2" :data="scope.row.products || []" stripe class="list-table">
|
||||
<el-table-column label="序号" type="index" width="60" align="center" />
|
||||
<el-table-column
|
||||
label="产品名称"
|
||||
@@ -249,7 +249,7 @@
|
||||
<span>{{ productScope.row.remark || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -439,7 +439,7 @@
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column v-if="isColumnVisible('remark')" label="备注" align="center" prop="remark" min-width="200" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/** 供方 / 需方字段:空字符串也需提交,以便清空落库(调换后一侧为空时不能被剥掉) */
|
||||
export const CONTRACT_PARTY_FIELD_KEYS = [
|
||||
'partyA',
|
||||
'partyAAddress',
|
||||
'partyAContact',
|
||||
'partyAMobile',
|
||||
'partyALegalPerson',
|
||||
'partyAAgent',
|
||||
'partyAPhoneFax',
|
||||
'partyABank',
|
||||
'partyAAccount',
|
||||
'partyB',
|
||||
'partyBAddress',
|
||||
'partyBContact',
|
||||
'partyBMobile',
|
||||
'partyBLegalPerson',
|
||||
'partyBAgent',
|
||||
'partyBPhoneFax',
|
||||
'partyBBank',
|
||||
'partyBAccount'
|
||||
] as const
|
||||
|
||||
const partyFieldSet = new Set<string>(CONTRACT_PARTY_FIELD_KEYS)
|
||||
|
||||
/** 清理 undefined / 空字符串,但保留供需方空字符串以便后端原样写入 */
|
||||
export function omitEmptyExceptPartyFields(data: Record<string, any>) {
|
||||
Object.keys(data).forEach((key) => {
|
||||
if (data[key] === undefined) {
|
||||
delete data[key]
|
||||
return
|
||||
}
|
||||
if (data[key] === '' && !partyFieldSet.has(key)) {
|
||||
delete data[key]
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -100,7 +100,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-contract-template"
|
||||
class="list-table"
|
||||
v-loading="loading"
|
||||
:data="templateList"
|
||||
@@ -180,7 +180,7 @@
|
||||
{{ parseTime(row.createTime) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -120,7 +120,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-customer-detail-dialog"
|
||||
v-loading="contactLoading"
|
||||
:data="contactList"
|
||||
class="list-table"
|
||||
@@ -205,7 +205,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -213,7 +213,7 @@
|
||||
<el-tab-pane label="商机" name="opportunity">
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-customer-detail-dialog-2"
|
||||
v-loading="opportunityLoading"
|
||||
:data="opportunityList"
|
||||
class="list-table"
|
||||
@@ -267,7 +267,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -275,7 +275,7 @@
|
||||
<el-tab-pane label="合同" name="contract">
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-customer-detail-dialog-3"
|
||||
v-loading="contractLoading"
|
||||
:data="contractList"
|
||||
class="list-table"
|
||||
@@ -342,7 +342,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
@@ -354,7 +354,7 @@
|
||||
<el-tab-pane label="操作日志" name="log">
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-customer-detail-dialog-4"
|
||||
v-loading="logLoading"
|
||||
:data="operLogList"
|
||||
class="list-table"
|
||||
@@ -424,7 +424,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div v-if="logTotal > 0" class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
v-model:current-page="logQuery.pageNum"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table v-loading="loading" :data="contactList" stripe class="list-table">
|
||||
<ListTable table-key="crm-customer-components-contact-list" v-loading="loading" :data="contactList" stripe class="list-table">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column label="姓名" prop="contactName" min-width="120" align="center">
|
||||
<template #default="{ row }">
|
||||
@@ -87,7 +87,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<ContactFormDialog ref="contactFormRef" @success="getList" />
|
||||
</div>
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-components-invoice-info"
|
||||
:data="invoiceInfoList"
|
||||
v-loading="loading"
|
||||
stripe
|
||||
@@ -111,7 +111,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" class="dialog-form-layout" align-center append-to-body @close="handleClose">
|
||||
|
||||
@@ -179,7 +179,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer"
|
||||
class="list-table"
|
||||
:data="customerList"
|
||||
v-loading="loading"
|
||||
@@ -610,7 +610,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ selectedRows.length }}</span> 项
|
||||
|
||||
@@ -110,7 +110,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-pool-rule-index"
|
||||
class="list-table"
|
||||
:data="ruleList"
|
||||
v-loading="loading"
|
||||
@@ -205,7 +205,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ selectedRows.length }}</span> 项
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-customer-pool"
|
||||
class="list-table"
|
||||
:data="customerList"
|
||||
v-loading="loading"
|
||||
@@ -501,7 +501,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ selectedRows.length }}</span> 项
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
<span class="chart-title">阶段转化明细</span>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="funnelData" stripe>
|
||||
<ListTable table-key="crm-opportunity-funnel" class="list-table" :data="funnelData" stripe>
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column label="商机阶段" prop="stageName" min-width="120" align="center" />
|
||||
<el-table-column label="商机数量" prop="count" min-width="100" align="center">
|
||||
@@ -113,7 +113,7 @@
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -152,7 +152,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-opportunity"
|
||||
v-loading="loading"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -447,7 +447,7 @@
|
||||
min-width="200"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
<span class="chart-title">最高预估金额商机 Top 10</span>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="topAmountList" stripe max-height="400">
|
||||
<ListTable table-key="crm-opportunity-statistics" class="list-table" :data="topAmountList" stripe max-height="400">
|
||||
<el-table-column type="index" label="排名" min-width="70" align="center" />
|
||||
<el-table-column
|
||||
prop="opportunityName"
|
||||
@@ -125,7 +125,7 @@
|
||||
<template #default="scope">¥{{ formatMoney(scope.row.amount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="ownerUserName" label="负责人" min-width="100" align="center" />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<div class="chart-panel">
|
||||
@@ -133,7 +133,7 @@
|
||||
<span class="chart-title">最高跟进次数商机 Top 10</span>
|
||||
</div>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table class="list-table" :data="topFollowList" stripe max-height="400">
|
||||
<ListTable table-key="crm-opportunity-statistics-2" class="list-table" :data="topFollowList" stripe max-height="400">
|
||||
<el-table-column type="index" label="排名" min-width="70" align="center" />
|
||||
<el-table-column
|
||||
prop="opportunityName"
|
||||
@@ -159,7 +159,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="ownerUserName" label="负责人" min-width="100" align="center" />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-price-letter"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -243,7 +243,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
|
||||
<!-- 树形表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-product-category"
|
||||
v-if="refreshTable"
|
||||
ref="tableRef"
|
||||
class="list-table"
|
||||
@@ -158,7 +158,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-product"
|
||||
class="list-table"
|
||||
:data="productList"
|
||||
v-loading="loading"
|
||||
@@ -265,7 +265,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<!-- 分页 -->
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
<!-- 产品列表 -->
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-quote-components-product-selector"
|
||||
ref="tableRef"
|
||||
v-loading="loading"
|
||||
:data="productList"
|
||||
@@ -98,7 +98,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<ListPagination
|
||||
v-show="total > 0"
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
<template #products>
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="crm-quote-components-quote-detail-dialog"
|
||||
:data="quoteInfo.productList || []"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -148,7 +148,7 @@
|
||||
<span>{{ row.deliveryMethod || '—' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="(quoteInfo.productList?.length || 0) > 0" class="quote-product-summary">
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-quote-components-quote-form-panel"
|
||||
:data="form.products"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -270,7 +270,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
|
||||
<!-- 产品明细 -->
|
||||
<el-divider content-position="left">产品明细</el-divider>
|
||||
<el-table :data="quote?.productList" class="list-table" stripe>
|
||||
<ListTable table-key="crm-quote-detail" :data="quote?.productList" class="list-table" stripe>
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column label="产品名称" prop="productName" min-width="120" align="center" header-align="center" :show-overflow-tooltip="true" />
|
||||
<el-table-column label="型号/规格" prop="model" min-width="130" align="center" header-align="center" :show-overflow-tooltip="true">
|
||||
@@ -134,7 +134,7 @@
|
||||
<span>{{ scope.row.deliveryMethod || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<!-- 产品汇总 -->
|
||||
<div class="product-summary mt-4">
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="crm-quote"
|
||||
v-loading="loading"
|
||||
class="list-table"
|
||||
stripe
|
||||
@@ -161,7 +161,7 @@
|
||||
<el-table-column type="expand" width="55">
|
||||
<template #default="scope">
|
||||
<div class="quote-product-expand" v-loading="expandLoadingMap[String(scope.row.id)]">
|
||||
<el-table :data="scope.row.productList || []" stripe class="list-table">
|
||||
<ListTable table-key="crm-quote-2" :data="scope.row.productList || []" stripe class="list-table">
|
||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||
<el-table-column
|
||||
label="产品名称"
|
||||
@@ -221,7 +221,7 @@
|
||||
<span>{{ productScope.row.deliveryMethod || '-' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@@ -392,7 +392,7 @@
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
<el-table-column v-if="isColumnVisible('remark')" label="备注" align="center" prop="remark" min-width="200" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
<section class="stats-section">
|
||||
<h3 class="section-title">状态详情统计</h3>
|
||||
<div class="list-body list-wrap">
|
||||
<el-table :data="statusList" class="list-table" stripe>
|
||||
<ListTable table-key="crm-quote-statistics" :data="statusList" class="list-table" stripe>
|
||||
<el-table-column
|
||||
type="index"
|
||||
label="序号"
|
||||
@@ -84,7 +84,7 @@
|
||||
<el-table-column label="占比" prop="percent" min-width="100" align="right">
|
||||
<template #default="{ row }">{{ row.percent }}%</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table v-loading="loading" :data="tableData" class="list-table" stripe>
|
||||
<ListTable table-key="crm-supplier-hazard" v-loading="loading" :data="tableData" class="list-table" stripe>
|
||||
<el-table-column prop="supplierName" label="主体名称" min-width="200" show-overflow-tooltip />
|
||||
<el-table-column prop="supplierCode" label="编码" min-width="100" show-overflow-tooltip />
|
||||
<el-table-column label="允许易制毒" min-width="120" align="center">
|
||||
@@ -64,7 +64,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="updateTime" label="更新时间" min-width="160" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<el-pagination
|
||||
|
||||
@@ -82,11 +82,7 @@
|
||||
</el-button>
|
||||
<el-button
|
||||
class="btn-ghost"
|
||||
:disabled="
|
||||
selectedRows.length !== 1 ||
|
||||
!selectedRows[0]?.purchasePlanId ||
|
||||
!!selectedRows[0]?.hasWeighingSlip
|
||||
"
|
||||
:disabled="selectedRows.length !== 1 || !!selectedRows[0]?.hasWeighingSlip"
|
||||
@click="handleGenerateWeighing(selectedRows[0])"
|
||||
>
|
||||
<el-icon><Plus /></el-icon>
|
||||
@@ -98,7 +94,7 @@
|
||||
</el-button>
|
||||
<el-button
|
||||
class="btn-ghost"
|
||||
:disabled="selectedRows.length !== 1 || !selectedRows[0]?.purchasePlanId"
|
||||
:disabled="selectedRows.length !== 1"
|
||||
@click="handleCopyFillLink(selectedRows[0])"
|
||||
>
|
||||
<el-icon><Link /></el-icon>
|
||||
@@ -138,7 +134,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="db-inventory"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -350,7 +346,7 @@
|
||||
sortable="custom"
|
||||
:sort-order="getSortOrder('remarks')"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
@@ -408,14 +404,18 @@
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="往来单位" prop="partnerCompany">
|
||||
<DbCrmCustomerSelect v-model="formData.partnerCompany" placeholder="请输入往来单位搜索" />
|
||||
<DbCrmCustomerSelect
|
||||
v-model="formData.partnerCompany"
|
||||
:allow-create="false"
|
||||
placeholder="请从客户管理中搜索选择"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="产品" prop="productId">
|
||||
<DbCrmProductSelect
|
||||
v-model:product-id="formData.productId"
|
||||
v-model:product-name="formData.product"
|
||||
v-model:specification="formData.specification"
|
||||
placeholder="请搜索并选择 CRM 产品"
|
||||
placeholder="请搜索并选择上架产品"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格">
|
||||
@@ -434,7 +434,7 @@
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="车牌号" prop="vehicleNo">
|
||||
<PlVehicleSelect v-model="formData.vehicleNo" />
|
||||
<PlVehicleSelect v-model="formData.vehicleNo" placeholder="请选择三方或自有车辆车牌" />
|
||||
</el-form-item>
|
||||
<el-form-item label="计划号" prop="planNo" class="form-col-span-2">
|
||||
<el-input v-model="formData.planNo" placeholder="请输入计划号" :readonly="isPlanNoReadonly" />
|
||||
@@ -466,7 +466,6 @@
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="viewingRecord.purchasePlanId"
|
||||
class="btn-ghost"
|
||||
:disabled="viewingRecord.hasWeighingSlip"
|
||||
@click="handleGenerateWeighing(viewingRecord)"
|
||||
@@ -474,11 +473,7 @@
|
||||
<el-icon><Plus /></el-icon>
|
||||
{{ viewingRecord.hasWeighingSlip ? '已生成地磅单' : '生成地磅单' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="viewingRecord.purchasePlanId"
|
||||
class="btn-ghost"
|
||||
@click="handleCopyFillLink(viewingRecord)"
|
||||
>
|
||||
<el-button class="btn-ghost" @click="handleCopyFillLink(viewingRecord)">
|
||||
<el-icon><Link /></el-icon>
|
||||
磅单二维码
|
||||
</el-button>
|
||||
@@ -645,8 +640,8 @@
|
||||
|
||||
const formRules = {
|
||||
date: [{ required: true, message: '请选择日期', trigger: 'change' }],
|
||||
partnerCompany: [{ required: true, message: '请输入往来单位', trigger: 'blur' }],
|
||||
productId: [{ required: true, message: '请选择 CRM 产品', trigger: 'change' }],
|
||||
partnerCompany: [{ required: true, message: '请选择往来单位', trigger: 'change' }],
|
||||
productId: [{ required: true, message: '请选择上架产品', trigger: 'change' }],
|
||||
quantity: [{ required: true, message: '请输入数量', trigger: 'blur' }],
|
||||
vehicleNo: [{ required: true, message: '请选择车牌号', trigger: 'change' }]
|
||||
}
|
||||
|
||||
@@ -134,7 +134,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="db-plans"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -280,7 +280,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="db-weighing"
|
||||
class="list-table"
|
||||
:data="paginatedData"
|
||||
v-loading="loading"
|
||||
@@ -296,7 +296,7 @@
|
||||
{{ row.deduction || 0 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="demo-category"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -209,7 +209,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
<!-- 数据表格:单元格 flex 纵向居中,避免订单状态列 el-space 与其它列 el-tag 错位 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="demo-order"
|
||||
ref="orderListTableRef"
|
||||
class="order-list-table list-table"
|
||||
:data="tableData"
|
||||
@@ -299,7 +299,7 @@
|
||||
>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<!-- 分页 -->
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="demo-product"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -219,7 +219,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="demo-unit"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -128,7 +128,7 @@
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ selectedRows.length }}</span> 项
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl--shared-io-order-list-page"
|
||||
class="list-table"
|
||||
:data="rows"
|
||||
v-loading="loading"
|
||||
@@ -205,7 +205,7 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="actualQtyTotal" label="实际数量合计" min-width="120" align="right" />
|
||||
<el-table-column prop="siteFeedbackTime" label="最近提交" min-width="160" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
@@ -307,7 +307,7 @@
|
||||
<el-form-item label="产品明细">
|
||||
<div class="panel dialog-list-panel">
|
||||
<div class="list-body list-wrap dialog-list-body-only">
|
||||
<el-table
|
||||
<ListTable table-key="pl--shared-io-order-list-page-2"
|
||||
class="list-table"
|
||||
:data="editForm.items || []"
|
||||
stripe
|
||||
@@ -365,7 +365,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" min-width="120" show-overflow-tooltip />
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-carrier"
|
||||
class="list-table"
|
||||
:data="carrierList"
|
||||
v-loading="loading"
|
||||
@@ -182,7 +182,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-driver"
|
||||
class="list-table"
|
||||
:data="driverList"
|
||||
v-loading="loading"
|
||||
@@ -156,7 +156,7 @@
|
||||
min-width="160"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-approval-done-panel"
|
||||
class="list-table"
|
||||
:data="settlementList"
|
||||
v-loading="loading"
|
||||
@@ -132,7 +132,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.submitterName || '—' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-approval-pending-panel"
|
||||
class="list-table"
|
||||
:data="settlementList"
|
||||
v-loading="loading"
|
||||
@@ -144,7 +144,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ formatDateTime(row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-disburse-panel"
|
||||
class="list-table"
|
||||
:data="settlementList"
|
||||
v-loading="loading"
|
||||
@@ -121,7 +121,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.submitterName || '—' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-settled-panel"
|
||||
class="list-table"
|
||||
:data="settlementList"
|
||||
v-loading="loading"
|
||||
@@ -114,7 +114,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-settlement-bill-panel"
|
||||
class="list-table"
|
||||
:data="settlementList"
|
||||
v-loading="loading"
|
||||
@@ -225,7 +225,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ formatDateTime(row.createTime) }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-freight-components-unsettled-plan-panel"
|
||||
class="list-table"
|
||||
:data="planList"
|
||||
v-loading="loading"
|
||||
@@ -168,7 +168,7 @@
|
||||
row.archiveTime ? formatDateTime(row.archiveTime) : '—'
|
||||
}}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -60,7 +60,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-inventory-document-reminder"
|
||||
class="list-table"
|
||||
:data="displayReminderList"
|
||||
v-loading="loading"
|
||||
@@ -148,7 +148,7 @@
|
||||
min-width="160"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-inventory-ledger"
|
||||
class="list-table"
|
||||
:data="inventoryList"
|
||||
v-loading="loading"
|
||||
@@ -156,7 +156,7 @@
|
||||
<el-tag v-else type="success" size="small">正常</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-personnel"
|
||||
class="list-table"
|
||||
:data="personnelRows"
|
||||
v-loading="loading"
|
||||
@@ -245,7 +245,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -113,7 +113,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-plan-archive"
|
||||
class="list-table"
|
||||
:data="planList"
|
||||
v-loading="loading"
|
||||
@@ -275,7 +275,7 @@
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-plan-cert"
|
||||
class="list-table"
|
||||
:data="planList"
|
||||
v-loading="loading"
|
||||
@@ -317,7 +317,7 @@
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -125,7 +125,7 @@
|
||||
<!-- 产品明细 -->
|
||||
<div class="detail-section">
|
||||
<h3 class="section-title">产品明细</h3>
|
||||
<el-table :data="products" stripe class="list-table">
|
||||
<ListTable table-key="pl-plan-detail" :data="products" stripe class="list-table">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="productName" label="产品名称" min-width="150" />
|
||||
<el-table-column prop="productNo" label="产品编号" min-width="120" />
|
||||
@@ -160,7 +160,7 @@
|
||||
<span v-if="!row.isExplosive && !row.isToxic">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<!-- 操作按钮 -->
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
<el-icon><Plus /></el-icon>添加产品
|
||||
</el-button>
|
||||
</h3>
|
||||
<el-table :data="formData.products" stripe class="list-table product-table">
|
||||
<ListTable table-key="pl-plan-form" :data="formData.products" stripe class="list-table product-table">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column prop="productName" label="产品名称" min-width="150">
|
||||
<template #default="{ row, $index }">
|
||||
@@ -184,7 +184,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<!-- 备注 -->
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
<!-- 数据表格 -->
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-plan"
|
||||
class="list-table"
|
||||
:data="planList"
|
||||
v-loading="loading"
|
||||
@@ -308,7 +308,7 @@
|
||||
min-width="100"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar pl-plan-list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-self-vehicle"
|
||||
class="list-table"
|
||||
:data="vehicleList"
|
||||
v-loading="loading"
|
||||
@@ -212,7 +212,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
@@ -301,7 +301,7 @@
|
||||
<el-icon><Plus /></el-icon>添加人员
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="personnelList" stripe class="list-table sub-table">
|
||||
<ListTable table-key="pl-self-vehicle-2" :data="personnelList" stripe class="list-table sub-table">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column label="姓名" min-width="160">
|
||||
<template #default="{ row }">
|
||||
@@ -355,7 +355,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<PlVehicleCertPartTabs
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-transport-address"
|
||||
class="list-table"
|
||||
:data="addressRows"
|
||||
v-loading="loading"
|
||||
@@ -153,7 +153,7 @@
|
||||
min-width="140"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-transport"
|
||||
class="list-table"
|
||||
:data="transportList"
|
||||
v-loading="loading"
|
||||
@@ -197,7 +197,7 @@
|
||||
{{ formatDateTime(row.createTime) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-maintenance-apply"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -201,7 +201,7 @@
|
||||
min-width="170"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -118,7 +118,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-maintenance-process"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -247,7 +247,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.handlerName || '—' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-recharge-apply"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -182,7 +182,7 @@
|
||||
min-width="170"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-recharge-record"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -263,7 +263,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.recordCreateByName || '—' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-urea-apply"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -186,7 +186,7 @@
|
||||
min-width="170"
|
||||
align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle-urea-disburse"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -232,7 +232,7 @@
|
||||
>
|
||||
<template #default="{ row }">{{ row.handlerName || '—' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -94,7 +94,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="pl-vehicle"
|
||||
class="list-table"
|
||||
:data="vehicleList"
|
||||
v-loading="loading"
|
||||
@@ -219,7 +219,7 @@
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
@@ -310,7 +310,7 @@
|
||||
<el-icon><Plus /></el-icon>添加人员
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="personnelList" stripe class="list-table sub-table">
|
||||
<ListTable table-key="pl-vehicle-2" :data="personnelList" stripe class="list-table sub-table">
|
||||
<el-table-column type="index" label="序号" min-width="68" align="center" header-align="center" />
|
||||
<el-table-column label="姓名" min-width="160">
|
||||
<template #default="{ row }">
|
||||
@@ -364,7 +364,7 @@
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<!-- 车辆证书(主车/挂车 Tab) -->
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-dept"
|
||||
ref="tableRef"
|
||||
:key="listTableKey"
|
||||
class="list-table"
|
||||
@@ -159,7 +159,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-dict"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
v-loading="loading"
|
||||
@@ -142,7 +142,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ selectedRows.length }}</span> 项
|
||||
@@ -235,7 +235,7 @@
|
||||
<div class="view-section dict-view-data-section">
|
||||
<h3>字典数据</h3>
|
||||
<div class="list-body list-wrap dict-view-table-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-dict-2"
|
||||
class="list-table"
|
||||
:data="viewDictDataList"
|
||||
v-loading="viewDictDataLoading"
|
||||
@@ -290,7 +290,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -351,7 +351,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="list-body list-wrap dict-data-table-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-dict-3"
|
||||
class="list-table"
|
||||
:data="dictDataTableData"
|
||||
v-loading="dictDataLoading"
|
||||
@@ -413,7 +413,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
已选 <span class="sel-num">{{ dictDataSelectedRows.length }}</span> 项
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-leave"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
stripe
|
||||
@@ -174,7 +174,7 @@
|
||||
align="center"
|
||||
header-align="center"
|
||||
/>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
<div class="list-pager-selected">
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
</div>
|
||||
|
||||
<div class="list-body list-wrap">
|
||||
<el-table
|
||||
<ListTable table-key="system-menu"
|
||||
ref="tableRef"
|
||||
class="list-table"
|
||||
:data="tableData"
|
||||
@@ -193,7 +193,7 @@
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</ListTable>
|
||||
</div>
|
||||
|
||||
<div class="pagination list-pager-bar">
|
||||
|
||||
Loaded 100 of 144 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user