|
@@ -3,17 +3,10 @@
|
|
<div class="waybill-info">
|
|
<div class="waybill-info">
|
|
<div class="waybill-info-title">运单基本信息</div>
|
|
<div class="waybill-info-title">运单基本信息</div>
|
|
<div class="waybill-info-content flex">
|
|
<div class="waybill-info-content flex">
|
|
- <div
|
|
|
|
- v-for="(item, index) in waybillInfoItems"
|
|
|
|
- :key="index"
|
|
|
|
- class="waybill-info-item"
|
|
|
|
- >
|
|
|
|
|
|
+ <div v-for="(item, index) in waybillInfoItems" :key="index" class="waybill-info-item">
|
|
<div class="waybill-info-item-label">{{ item.label }}:</div>
|
|
<div class="waybill-info-item-label">{{ item.label }}:</div>
|
|
<div class="waybill-info-item-content">
|
|
<div class="waybill-info-item-content">
|
|
- <OverflowTooltip
|
|
|
|
- :content="computedWaybillInfo(item)"
|
|
|
|
- effect="light"
|
|
|
|
- />
|
|
|
|
|
|
+ <OverflowTooltip :content="computedWaybillInfo(item)" effect="light" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@@ -28,40 +21,20 @@
|
|
<el-button class="button-sqaure" color="#ac014d" @click="exportHandler">
|
|
<el-button class="button-sqaure" color="#ac014d" @click="exportHandler">
|
|
<i class="icon-export" />
|
|
<i class="icon-export" />
|
|
</el-button>
|
|
</el-button>
|
|
- <ColumnSet
|
|
|
|
- class="button-sqaure"
|
|
|
|
- :table-columns="isDeparture ? pullTableColumns : tableColumns"
|
|
|
|
- @checked-submit="columnChecked"
|
|
|
|
- />
|
|
|
|
|
|
+ <ColumnSet class="button-sqaure" :table-columns="isDeparture ? pullTableColumns : tableColumns" @checked-submit="columnChecked" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <div
|
|
|
|
- v-show="trackAirlines.length"
|
|
|
|
- :style="{
|
|
|
|
|
|
+ <div v-show="trackAirlines.length" :style="{
|
|
maxHeight: `${
|
|
maxHeight: `${
|
|
trackAirlines.length > 1 ? 208 * 2 + 8 : trackRowHeight
|
|
trackAirlines.length > 1 ? 208 * 2 + 8 : trackRowHeight
|
|
}px`,
|
|
}px`,
|
|
- }"
|
|
|
|
- class="waybill-track"
|
|
|
|
- >
|
|
|
|
|
|
+ }" class="waybill-track">
|
|
<el-scrollbar always>
|
|
<el-scrollbar always>
|
|
<div class="waybill-track-warpper">
|
|
<div class="waybill-track-warpper">
|
|
- <div
|
|
|
|
- v-for="trackAirline in trackAirlines"
|
|
|
|
- :key="trackAirline.flightNO"
|
|
|
|
- class="waybill-track-row"
|
|
|
|
- :style="{ height: `${trackRowHeight}px` }"
|
|
|
|
- >
|
|
|
|
- <div
|
|
|
|
- v-for="(trackAirport, index) in trackAirline.airports"
|
|
|
|
- :key="trackAirport.airport"
|
|
|
|
- class="waybill-track-box"
|
|
|
|
- :style="trackBoxStyle(trackAirline.airports, index)"
|
|
|
|
- >
|
|
|
|
|
|
+ <div v-for="trackAirline in trackAirlines" :key="trackAirline.flightNO" class="waybill-track-row" :style="{ height: `${trackRowHeight}px` }">
|
|
|
|
+ <div v-for="(trackAirport, index) in trackAirline.airports" :key="trackAirport.airport" class="waybill-track-box" :style="trackBoxStyle(trackAirline.airports, index)">
|
|
<div class="title flex-wrap">
|
|
<div class="title flex-wrap">
|
|
- <span v-if="index === 0" class="title-span"
|
|
|
|
- >航班号:{{ trackAirline.flightNO }}</span
|
|
|
|
- >
|
|
|
|
|
|
+ <span v-if="index === 0" class="title-span">航班号:{{ trackAirline.flightNO }}</span>
|
|
<!-- <span
|
|
<!-- <span
|
|
v-if="!name.includes('InternationalDeparture')"
|
|
v-if="!name.includes('InternationalDeparture')"
|
|
class="title-span"
|
|
class="title-span"
|
|
@@ -69,149 +42,123 @@
|
|
trackAirport.airport
|
|
trackAirport.airport
|
|
}}</span
|
|
}}</span
|
|
> -->
|
|
> -->
|
|
- <span class="title-span"
|
|
|
|
- >日期:{{ trackAirline.flightDate }}</span
|
|
|
|
- >
|
|
|
|
|
|
+ <span class="title-span">日期:{{ trackAirline.flightDate }}</span>
|
|
</div>
|
|
</div>
|
|
- <Steps
|
|
|
|
- :steps="trackAirport.trackSteps"
|
|
|
|
- :hasMultiple="hasMultiple"
|
|
|
|
- />
|
|
|
|
|
|
+ <Steps :steps="trackAirport.trackSteps" :hasMultiple="hasMultiple" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</el-scrollbar>
|
|
</el-scrollbar>
|
|
</div>
|
|
</div>
|
|
<div class="goods-list">
|
|
<div class="goods-list">
|
|
- <SimpleTable
|
|
|
|
- v-if="isDeparture"
|
|
|
|
- ref="tableRef"
|
|
|
|
- :data="pullTableData"
|
|
|
|
- :columns="pullTableColumns"
|
|
|
|
- sequence
|
|
|
|
- scrollbar-always-on
|
|
|
|
- :column-props="{ formatter }"
|
|
|
|
- />
|
|
|
|
- <SimpleTable
|
|
|
|
- v-else
|
|
|
|
- ref="tableRef"
|
|
|
|
- :data="tableData"
|
|
|
|
- :columns="tableColumns"
|
|
|
|
- scrollbar-always-on
|
|
|
|
- :row-class-name="rowClass"
|
|
|
|
- :cell-class-name="cellClass"
|
|
|
|
- @cell-click="cellClickHandler"
|
|
|
|
- :column-props="{ formatter, minWidth: 75 }"
|
|
|
|
- />
|
|
|
|
|
|
+ <SimpleTable v-if="isDeparture" ref="tableRef" :data="pullTableData" :columns="pullTableColumns" sequence scrollbar-always-on :column-props="{ formatter }" />
|
|
|
|
+ <SimpleTable v-else ref="tableRef" :data="tableData" :columns="tableColumns" scrollbar-always-on :row-class-name="rowClass" :cell-class-name="cellClass" @cell-click="cellClickHandler" :column-props="{ formatter, minWidth: 75 }" />
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
-import OverflowTooltip from '@/components/OverflowTooltip/index.vue'
|
|
|
|
|
|
+import OverflowTooltip from "@/components/OverflowTooltip/index.vue";
|
|
// import Search from '@/components/search/index.vue'
|
|
// import Search from '@/components/search/index.vue'
|
|
-import Steps from '@/components/steps/index.vue'
|
|
|
|
-import ColumnSet from '@/components/ColumnSet/index.vue'
|
|
|
|
-import SimpleTable from '@/components/SimpleTable/index.vue'
|
|
|
|
-import { useTrackData } from '../../hooks/useTrackData'
|
|
|
|
-import { useTable } from '../../hooks/useTable'
|
|
|
|
-import { useTableColumnSet } from '@/hooks/useTableColumnSet'
|
|
|
|
-import { useTableExport } from '../../hooks/useTableExport'
|
|
|
|
-import { useTableStyle } from '../../hooks/useTableStyle'
|
|
|
|
-import { useTableCellClick } from '../../hooks/useTableCellClick'
|
|
|
|
-import { useWaybillInfo } from './useWaybillInfo'
|
|
|
|
-import { CommonData, CommonTableFormatter, CommonValue } from '~/common'
|
|
|
|
-import { useLoop } from '@/hooks/useLoop'
|
|
|
|
-import { datetimeToTime } from '@/utils/validate'
|
|
|
|
|
|
+import Steps from "@/components/steps/index.vue";
|
|
|
|
+import ColumnSet from "@/components/ColumnSet/index.vue";
|
|
|
|
+import SimpleTable from "@/components/SimpleTable/index.vue";
|
|
|
|
+import { useTrackData } from "../../hooks/useTrackData";
|
|
|
|
+import { useTable } from "../../hooks/useTable";
|
|
|
|
+import { useTableColumnSet } from "@/hooks/useTableColumnSet";
|
|
|
|
+import { useTableExport } from "../../hooks/useTableExport";
|
|
|
|
+import { useTableStyle } from "../../hooks/useTableStyle";
|
|
|
|
+import { useTableCellClick } from "../../hooks/useTableCellClick";
|
|
|
|
+import { useWaybillInfo } from "./useWaybillInfo";
|
|
|
|
+import { CommonData, CommonTableFormatter, CommonValue } from "~/common";
|
|
|
|
+import { useLoop } from "@/hooks/useLoop";
|
|
|
|
+import { datetimeToTime } from "@/utils/validate";
|
|
|
|
|
|
const hasMultiple = computed(() =>
|
|
const hasMultiple = computed(() =>
|
|
- trackAirlines.value.some(airline =>
|
|
|
|
- airline.airports.some(airport =>
|
|
|
|
- airport.trackSteps.some(step => 'children' in step)
|
|
|
|
|
|
+ trackAirlines.value.some((airline) =>
|
|
|
|
+ airline.airports.some((airport) =>
|
|
|
|
+ airport.trackSteps.some((step) => "children" in step)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
-)
|
|
|
|
-const trackRowHeight = computed(() => (unref(hasMultiple) ? 280 : 208))
|
|
|
|
|
|
+);
|
|
|
|
+const trackRowHeight = computed(() => (unref(hasMultiple) ? 280 : 208));
|
|
|
|
|
|
const props = defineProps({
|
|
const props = defineProps({
|
|
name: {
|
|
name: {
|
|
type: String,
|
|
type: String,
|
|
required: true,
|
|
required: true,
|
|
},
|
|
},
|
|
-})
|
|
|
|
|
|
+});
|
|
|
|
|
|
-const isDeparture = props.name.includes('Departure')
|
|
|
|
|
|
+const isDeparture = props.name.includes("Departure");
|
|
|
|
|
|
-const route = useRoute()
|
|
|
|
-const { flightDate, waybillNO } = route.query
|
|
|
|
-const dataContent = [flightDate, waybillNO] as string[]
|
|
|
|
|
|
+const route = useRoute();
|
|
|
|
+const { flightDate, waybillNO } = route.query;
|
|
|
|
+const dataContent = [flightDate, waybillNO] as string[];
|
|
|
|
|
|
-const {
|
|
|
|
- waybillInfoItems,
|
|
|
|
- waybillInfo,
|
|
|
|
- computedWaybillInfo,
|
|
|
|
- getWaybillInfo,
|
|
|
|
-} = useWaybillInfo(props.name, dataContent)
|
|
|
|
|
|
+const { waybillInfoItems, waybillInfo, computedWaybillInfo, getWaybillInfo } =
|
|
|
|
+ useWaybillInfo(props.name, dataContent);
|
|
|
|
|
|
-const { tableColumns, tableData: trackData, getTableData } = useTable(
|
|
|
|
- `${props.name}Goods`,
|
|
|
|
- dataContent
|
|
|
|
-)
|
|
|
|
|
|
+const {
|
|
|
|
+ tableColumns,
|
|
|
|
+ tableData: trackData,
|
|
|
|
+ getTableData,
|
|
|
|
+} = useTable(`${props.name}Goods`, dataContent);
|
|
|
|
|
|
const {
|
|
const {
|
|
tableColumns: pullTableColumns,
|
|
tableColumns: pullTableColumns,
|
|
tableData: pullTableData,
|
|
tableData: pullTableData,
|
|
getTableData: getPullTableData,
|
|
getTableData: getPullTableData,
|
|
-} = useTable(`${props.name}Pull`, dataContent)
|
|
|
|
|
|
+} = useTable(`${props.name}Pull`, dataContent);
|
|
|
|
|
|
// 判断是否有另外一个机场的节点信息,没有则隐藏那些列
|
|
// 判断是否有另外一个机场的节点信息,没有则隐藏那些列
|
|
-watch(trackData, data => {
|
|
|
|
- let anotherAirportNodeFlag = ''
|
|
|
|
|
|
+watch(trackData, (data) => {
|
|
|
|
+ let anotherAirportNodeFlag = "";
|
|
if (isDeparture) {
|
|
if (isDeparture) {
|
|
- anotherAirportNodeFlag = 'node-arrival'
|
|
|
|
|
|
+ anotherAirportNodeFlag = "node-arrival";
|
|
} else {
|
|
} else {
|
|
- anotherAirportNodeFlag = 'node-departure'
|
|
|
|
|
|
+ anotherAirportNodeFlag = "node-departure";
|
|
}
|
|
}
|
|
const activeNodes = data.reduce((nodes: string[], row) => {
|
|
const activeNodes = data.reduce((nodes: string[], row) => {
|
|
- if (typeof row.nodeCode === 'string' && !nodes.includes(row.nodeCode)) {
|
|
|
|
- nodes.push(row.nodeCode)
|
|
|
|
|
|
+ if (typeof row.nodeCode === "string" && !nodes.includes(row.nodeCode)) {
|
|
|
|
+ nodes.push(row.nodeCode);
|
|
}
|
|
}
|
|
- return nodes
|
|
|
|
- }, [])
|
|
|
|
- tableColumns.value.forEach(column => {
|
|
|
|
|
|
+ return nodes;
|
|
|
|
+ }, []);
|
|
|
|
+ tableColumns.value.forEach((column) => {
|
|
if (
|
|
if (
|
|
column.defaultDisabled ||
|
|
column.defaultDisabled ||
|
|
- (typeof column.className === 'string' &&
|
|
|
|
|
|
+ (typeof column.className === "string" &&
|
|
column.className.includes(anotherAirportNodeFlag))
|
|
column.className.includes(anotherAirportNodeFlag))
|
|
) {
|
|
) {
|
|
- column.checkDisabled = true
|
|
|
|
|
|
+ column.checkDisabled = true;
|
|
if (activeNodes.includes(column.columnName)) {
|
|
if (activeNodes.includes(column.columnName)) {
|
|
- column.hidden = false
|
|
|
|
|
|
+ column.hidden = false;
|
|
} else {
|
|
} else {
|
|
- column.hidden = true
|
|
|
|
|
|
+ column.hidden = true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- })
|
|
|
|
-})
|
|
|
|
|
|
+ });
|
|
|
|
+});
|
|
|
|
|
|
-const loopFuncs = [getWaybillInfo, getTableData]
|
|
|
|
|
|
+const loopFuncs = [getWaybillInfo, getTableData];
|
|
if (isDeparture) {
|
|
if (isDeparture) {
|
|
- loopFuncs.push(getPullTableData)
|
|
|
|
|
|
+ loopFuncs.push(getPullTableData);
|
|
}
|
|
}
|
|
-useLoop(loopFuncs, 'waybill')
|
|
|
|
|
|
+useLoop(loopFuncs, "waybill");
|
|
|
|
|
|
// onMounted(getTableData)
|
|
// onMounted(getTableData)
|
|
|
|
|
|
-const { trackAirlines, trackBoxStyle } = useTrackData(props.name, trackData)
|
|
|
|
|
|
+const { trackAirlines, trackBoxStyle } = useTrackData(props.name, trackData);
|
|
|
|
|
|
const tableData = computed(() => {
|
|
const tableData = computed(() => {
|
|
const mergedTableData = trackData.value.reduce(
|
|
const mergedTableData = trackData.value.reduce(
|
|
(data: CommonData[], current) => {
|
|
(data: CommonData[], current) => {
|
|
- const sameRow = data.find(row =>
|
|
|
|
- ['flightNO', 'flightDate', 'cargoSN'].every(
|
|
|
|
- key => (row[key] ?? '') === (current[key] ?? '')
|
|
|
|
|
|
+ const sameRow = data.find((row) =>
|
|
|
|
+ ["flightNO", "flightDate", "cargoSN"].every(
|
|
|
|
+ (key) => (row[key] ?? "") === (current[key] ?? "")
|
|
)
|
|
)
|
|
- )
|
|
|
|
|
|
+ );
|
|
const {
|
|
const {
|
|
flightNO,
|
|
flightNO,
|
|
flightDate,
|
|
flightDate,
|
|
@@ -228,93 +175,93 @@ const tableData = computed(() => {
|
|
ConsignmentItemPackagingQuantityQuantity, // 跟踪节点件数
|
|
ConsignmentItemPackagingQuantityQuantity, // 跟踪节点件数
|
|
execResult,
|
|
execResult,
|
|
execTime,
|
|
execTime,
|
|
- } = current
|
|
|
|
- const nodeValue = `位置:${execPosition ?? '--'}\n结果:${
|
|
|
|
- execResult ? '通过' : '未通过'
|
|
|
|
- }\n时间:${execTime ?? ''}`
|
|
|
|
|
|
+ } = current;
|
|
|
|
+ const nodeValue = `位置:${execPosition ?? "--"}\n结果:${
|
|
|
|
+ execResult ? "通过" : "未通过"
|
|
|
|
+ }\n时间:${execTime ?? ""}`;
|
|
if (sameRow) {
|
|
if (sameRow) {
|
|
- sameRow[String(nodeCode)] = nodeValue
|
|
|
|
- ;[
|
|
|
|
- 'ULDNO',
|
|
|
|
|
|
+ sameRow[String(nodeCode)] = nodeValue;
|
|
|
|
+ [
|
|
|
|
+ "ULDNO",
|
|
// 'cargoSN'
|
|
// 'cargoSN'
|
|
- ].forEach(key => {
|
|
|
|
- const oldValue = sameRow[key]
|
|
|
|
- const currentValue = current[key]
|
|
|
|
- if (typeof currentValue === 'string' && currentValue !== oldValue) {
|
|
|
|
- if (typeof oldValue === 'string') {
|
|
|
|
|
|
+ ].forEach((key) => {
|
|
|
|
+ const oldValue = sameRow[key];
|
|
|
|
+ const currentValue = current[key];
|
|
|
|
+ if (typeof currentValue === "string" && currentValue !== oldValue) {
|
|
|
|
+ if (typeof oldValue === "string") {
|
|
sameRow[key] = [
|
|
sameRow[key] = [
|
|
...new Set([
|
|
...new Set([
|
|
- ...oldValue.split(','),
|
|
|
|
- ...currentValue.split(','),
|
|
|
|
|
|
+ ...oldValue.split(","),
|
|
|
|
+ ...currentValue.split(","),
|
|
]),
|
|
]),
|
|
- ].join(',')
|
|
|
|
|
|
+ ].join(",");
|
|
} else {
|
|
} else {
|
|
- sameRow[key] = currentValue
|
|
|
|
|
|
+ sameRow[key] = currentValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- })
|
|
|
|
- ;['pullMark', 'returnMark'].forEach(key => {
|
|
|
|
- sameRow[key] = sameRow[key] ?? current[key]
|
|
|
|
- })
|
|
|
|
|
|
+ });
|
|
|
|
+ ["pullMark", "returnMark"].forEach((key) => {
|
|
|
|
+ sameRow[key] = sameRow[key] ?? current[key];
|
|
|
|
+ });
|
|
} else {
|
|
} else {
|
|
data.push({
|
|
data.push({
|
|
...current,
|
|
...current,
|
|
[String(nodeCode)]: nodeValue,
|
|
[String(nodeCode)]: nodeValue,
|
|
- })
|
|
|
|
|
|
+ });
|
|
}
|
|
}
|
|
- return data
|
|
|
|
|
|
+ return data;
|
|
},
|
|
},
|
|
[]
|
|
[]
|
|
- )
|
|
|
|
|
|
+ );
|
|
return mergedTableData.reduce((data: CommonData[], current) => {
|
|
return mergedTableData.reduce((data: CommonData[], current) => {
|
|
- const { cargoSN } = current
|
|
|
|
- if (typeof cargoSN === 'string' && cargoSN !== '') {
|
|
|
|
- const splitedRows = cargoSN.split(',').map(splitedCargoSN => ({
|
|
|
|
|
|
+ const { cargoSN } = current;
|
|
|
|
+ if (typeof cargoSN === "string" && cargoSN !== "") {
|
|
|
|
+ const splitedRows = cargoSN.split(",").map((splitedCargoSN) => ({
|
|
...current,
|
|
...current,
|
|
cargoSN: splitedCargoSN,
|
|
cargoSN: splitedCargoSN,
|
|
- }))
|
|
|
|
- data.push(...splitedRows)
|
|
|
|
|
|
+ }));
|
|
|
|
+ data.push(...splitedRows);
|
|
} else {
|
|
} else {
|
|
- data.push(current)
|
|
|
|
|
|
+ data.push(current);
|
|
}
|
|
}
|
|
- return data
|
|
|
|
- }, [])
|
|
|
|
-})
|
|
|
|
|
|
+ return data;
|
|
|
|
+ }, []);
|
|
|
|
+});
|
|
|
|
|
|
const formatter: CommonTableFormatter = (row, column, cellValue, index) => {
|
|
const formatter: CommonTableFormatter = (row, column, cellValue, index) => {
|
|
- if (column.property === 'wholePull') {
|
|
|
|
- return cellValue === 1 ? '是' : '否'
|
|
|
|
|
|
+ if (column.property === "wholePull") {
|
|
|
|
+ return cellValue === 1 ? "是" : "否";
|
|
}
|
|
}
|
|
- if (column.property === 'pullTime') {
|
|
|
|
- return datetimeToTime(cellValue, flightDate as CommonValue)
|
|
|
|
|
|
+ if (column.property === "pullTime") {
|
|
|
|
+ return datetimeToTime(cellValue, flightDate as CommonValue);
|
|
}
|
|
}
|
|
- const value = String(cellValue ?? '').split('\n')
|
|
|
|
|
|
+ const value = String(cellValue ?? "").split("\n");
|
|
if (value[2]) {
|
|
if (value[2]) {
|
|
value[2] = `时间:${datetimeToTime(
|
|
value[2] = `时间:${datetimeToTime(
|
|
- value[2].replace('时间:', ''),
|
|
|
|
|
|
+ value[2].replace("时间:", ""),
|
|
flightDate as CommonValue
|
|
flightDate as CommonValue
|
|
- )}`
|
|
|
|
|
|
+ )}`;
|
|
}
|
|
}
|
|
- return value.join('\n')
|
|
|
|
-}
|
|
|
|
|
|
+ return value.join("\n");
|
|
|
|
+};
|
|
|
|
|
|
-const search = (text: string) => {}
|
|
|
|
-const clear = () => {}
|
|
|
|
|
|
+const search = (text: string) => {};
|
|
|
|
+const clear = () => {};
|
|
|
|
|
|
-const tableRef = ref<InstanceType<typeof SimpleTable> | null>(null)
|
|
|
|
-const { exportToExcel } = useTableExport()
|
|
|
|
|
|
+const tableRef = ref<InstanceType<typeof SimpleTable> | null>(null);
|
|
|
|
+const { exportToExcel } = useTableExport();
|
|
const exportHandler = () => {
|
|
const exportHandler = () => {
|
|
- const table = tableRef.value!.table!
|
|
|
|
- exportToExcel({ table })
|
|
|
|
-}
|
|
|
|
|
|
+ const table = tableRef.value!.table!;
|
|
|
|
+ exportToExcel({ table });
|
|
|
|
+};
|
|
|
|
|
|
const { columnChecked } = useTableColumnSet(
|
|
const { columnChecked } = useTableColumnSet(
|
|
isDeparture ? pullTableColumns : tableColumns
|
|
isDeparture ? pullTableColumns : tableColumns
|
|
-)
|
|
|
|
|
|
+);
|
|
|
|
|
|
-const { rowClass, cellClass } = useTableStyle(`${props.name}Goods`)
|
|
|
|
|
|
+const { rowClass, cellClass } = useTableStyle(`${props.name}Goods`);
|
|
|
|
|
|
-const { cellClickHandler } = useTableCellClick(`${props.name}Goods`)
|
|
|
|
|
|
+const { cellClickHandler } = useTableCellClick(`${props.name}Goods`);
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|