Commit 12c38184 by wusiyi

Merge branch 'dev_sorting_rule' into release_v2.31.0

parents 7f8b5b7f 76805051
......@@ -12,36 +12,23 @@ declare module 'vue' {
DatePicker: typeof import('./src/components/Form/DatePicker.vue')['default']
DateRangePicker: typeof import('./src/components/Form/DateRangePicker.vue')['default']
ElButton: typeof import('element-plus/es')['ElButton']
ElCarousel: typeof import('element-plus/es')['ElCarousel']
ElCarouselItem: typeof import('element-plus/es')['ElCarouselItem']
ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
ElCol: typeof import('element-plus/es')['ElCol']
ElCollapse: typeof import('element-plus/es')['ElCollapse']
ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
ElDrawer: typeof import('element-plus/es')['ElDrawer']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
ElEmpty: typeof import('element-plus/es')['ElEmpty']
ElForm: typeof import('element-plus/es')['ElForm']
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
ElTag: typeof import('element-plus/es')['ElTag']
ElTooltip: typeof import('element-plus/es')['ElTooltip']
Icon: typeof import('./src/components/Icon.vue')['default']
ImageView: typeof import('./src/components/ImageView.vue')['default']
......
......@@ -16,7 +16,7 @@
"bignumber.js": "^9.3.0",
"dayjs": "^1.11.13",
"echarts": "^6.0.0",
"element-plus": "^2.6.0",
"element-plus": "^2.14.3",
"lodash-es": "^4.17.21",
"luxon": "^3.7.1",
"pinia": "^2.1.7",
......@@ -510,18 +510,18 @@
}
},
"node_modules/@ctrl/tinycolor": {
"version": "3.6.1",
"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
"integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==",
"version": "4.2.0",
"resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-4.2.0.tgz",
"integrity": "sha512-kzyuwOAQnXJNLS9PSyrk0CWk35nWJW/zl/6KvnTBMFK65gm7U1/Z5BqjxeapjZCIhQcM/DsrEmcbRwDyXyXK4A==",
"license": "MIT",
"engines": {
"node": ">=10"
"node": ">=14"
}
},
"node_modules/@element-plus/icons-vue": {
"version": "2.3.1",
"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
"integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==",
"version": "2.3.2",
"resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.2.tgz",
"integrity": "sha512-OzIuTaIfC8QXEPmJvB4Y4kw34rSXdCJzxcD1kFStBvr8bK6X1zQAYDo0CNMjojnfTqRQCJ0I7prlErcoRiET2A==",
"license": "MIT",
"peerDependencies": {
"vue": "^3.2.0"
......@@ -1022,28 +1022,28 @@
}
},
"node_modules/@floating-ui/core": {
"version": "1.7.0",
"resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.7.0.tgz",
"integrity": "sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==",
"version": "1.8.0",
"resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.8.0.tgz",
"integrity": "sha512-0CIZ5itps/8x7BG8dEIhs53BvCUH2PCoogtakwRTut+Arm58sJooJ0AuZhLw2HJYIR5cMLNPBSS728sPho2khQ==",
"license": "MIT",
"dependencies": {
"@floating-ui/utils": "^0.2.9"
"@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/dom": {
"version": "1.7.0",
"resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.7.0.tgz",
"integrity": "sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==",
"version": "1.8.0",
"resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.8.0.tgz",
"integrity": "sha512-yXSrzeHZBTZadLOlfyhCkJHNeLJnHRnRInwdZ40L7ZiaAtrBwoYlsDrX3v5zB1Utk7CLfzcOVnVVWoXEky7Ceg==",
"license": "MIT",
"dependencies": {
"@floating-ui/core": "^1.7.0",
"@floating-ui/utils": "^0.2.9"
"@floating-ui/core": "^1.8.0",
"@floating-ui/utils": "^0.2.12"
}
},
"node_modules/@floating-ui/utils": {
"version": "0.2.9",
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz",
"integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==",
"version": "0.2.12",
"resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.12.tgz",
"integrity": "sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==",
"license": "MIT"
},
"node_modules/@humanwhocodes/config-array": {
......@@ -1624,9 +1624,9 @@
},
"node_modules/@popperjs/core": {
"name": "@sxzz/popperjs-es",
"version": "2.11.7",
"resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz",
"integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==",
"version": "2.11.8",
"resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.8.tgz",
"integrity": "sha512-wOwESXvvED3S8xBmcPWHs2dUuzrE4XiZeFu7e1hROIJkm02a49N120pmOXxY33sBb6hArItm5W5tcg1cBtV+HQ==",
"license": "MIT",
"funding": {
"type": "opencollective",
......@@ -1983,9 +1983,9 @@
"license": "MIT"
},
"node_modules/@types/lodash": {
"version": "4.17.17",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.17.tgz",
"integrity": "sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==",
"version": "4.17.24",
"resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.24.tgz",
"integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==",
"license": "MIT"
},
"node_modules/@types/lodash-es": {
......@@ -2075,9 +2075,9 @@
"optional": true
},
"node_modules/@types/web-bluetooth": {
"version": "0.0.16",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz",
"integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==",
"version": "0.0.21",
"resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz",
"integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==",
"license": "MIT"
},
"node_modules/@typescript-eslint/eslint-plugin": {
......@@ -2828,39 +2828,41 @@
"license": "MIT"
},
"node_modules/@vueuse/core": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz",
"integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==",
"version": "14.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-14.3.0.tgz",
"integrity": "sha512-aHfz47g0ZhMtTVHmIzMVpJy8ePhhOy68GY5bv110+5DVtZ+W7BsOx+m61UNQqfrWyPztIHIanWa3E2tib3NFIw==",
"license": "MIT",
"dependencies": {
"@types/web-bluetooth": "^0.0.16",
"@vueuse/metadata": "9.13.0",
"@vueuse/shared": "9.13.0",
"vue-demi": "*"
"@types/web-bluetooth": "^0.0.21",
"@vueuse/metadata": "14.3.0",
"@vueuse/shared": "14.3.0"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"vue": "^3.5.0"
}
},
"node_modules/@vueuse/metadata": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz",
"integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==",
"version": "14.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-14.3.0.tgz",
"integrity": "sha512-BwxmbAzwAVF50+MW57GXOUEV61nFBGnlBvrTqj49PqWJu3uw7hdu72ztXeZ33RdZtDY6kO+bfCAE1PCn88Tktw==",
"license": "MIT",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/shared": {
"version": "9.13.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz",
"integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==",
"version": "14.3.0",
"resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-14.3.0.tgz",
"integrity": "sha512-bZpge9eSXwa4ToSiqJ7j6KRwhAsneMFoSz3LMWKQDkqimm3D/tbFlrklrs/IOqC8tEcYmXQZJ6N0UrjhBirVCg==",
"license": "MIT",
"dependencies": {
"vue-demi": "*"
},
"funding": {
"url": "https://github.com/sponsors/antfu"
},
"peerDependencies": {
"vue": "^3.5.0"
}
},
"node_modules/@vxe-ui/core": {
......@@ -3509,9 +3511,9 @@
}
},
"node_modules/dayjs": {
"version": "1.11.13",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
"integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==",
"version": "1.11.21",
"resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz",
"integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
"license": "MIT"
},
"node_modules/de-indent": {
......@@ -3665,29 +3667,29 @@
"license": "ISC"
},
"node_modules/element-plus": {
"version": "2.9.11",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.11.tgz",
"integrity": "sha512-x4L/6YC8de4JtuE3vpaEugJdQIeHQaHtIYKyk67IeF6dTIiVax45aX4nWOygnh+xX+0gTvL6xO+9BZhPA3G82w==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^3.4.1",
"@element-plus/icons-vue": "^2.3.1",
"@floating-ui/dom": "^1.0.1",
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7",
"@types/lodash": "^4.14.182",
"@types/lodash-es": "^4.17.6",
"@vueuse/core": "^9.1.0",
"version": "2.14.3",
"resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.14.3.tgz",
"integrity": "sha512-pJcvxcpZjYruNzuJhAeVwnbYjfNgzBKnWHwSVEhwzM2/kcLI3brzmtIBxtPqd4hQWJfD1PRnjoc1WipLw2eBGg==",
"license": "MIT",
"dependencies": {
"@ctrl/tinycolor": "^4.2.0",
"@element-plus/icons-vue": "^2.3.2",
"@floating-ui/dom": "^1.7.6",
"@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.8",
"@types/lodash": "^4.17.24",
"@types/lodash-es": "^4.17.12",
"@vueuse/core": "14.3.0",
"async-validator": "^4.2.5",
"dayjs": "^1.11.13",
"escape-html": "^1.0.3",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"lodash-unified": "^1.0.2",
"dayjs": "^1.11.20",
"lodash": "^4.18.1",
"lodash-es": "^4.18.1",
"lodash-unified": "^1.0.3",
"memoize-one": "^6.0.0",
"normalize-wheel-es": "^1.2.0"
"normalize-wheel-es": "^1.2.0",
"vue-component-type-helpers": "^3.3.5"
},
"peerDependencies": {
"vue": "^3.2.0"
"vue": "^3.3.7"
}
},
"node_modules/emoji-regex": {
......@@ -3842,12 +3844,6 @@
"node": ">=6"
}
},
"node_modules/escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
"license": "MIT"
},
"node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
......@@ -4940,15 +4936,15 @@
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"version": "4.18.1",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.18.1.tgz",
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"license": "MIT"
},
"node_modules/lodash-es": {
"version": "4.17.21",
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
"integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==",
"version": "4.18.1",
"resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.18.1.tgz",
"integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
"license": "MIT"
},
"node_modules/lodash-unified": {
......@@ -6599,6 +6595,12 @@
}
}
},
"node_modules/vue-component-type-helpers": {
"version": "3.3.7",
"resolved": "https://registry.npmmirror.com/vue-component-type-helpers/-/vue-component-type-helpers-3.3.7.tgz",
"integrity": "sha512-Skkhw9agYSgsWqv7bxSOGJZa9SaiJbZVGdXuFWnrzKaQYHnw9qbjD630rw6RyMqDbp54nfLCLw5SZA55if7JLg==",
"license": "MIT"
},
"node_modules/vue-demi": {
"version": "0.14.10",
"resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz",
......
......@@ -18,7 +18,7 @@
"bignumber.js": "^9.3.0",
"dayjs": "^1.11.13",
"echarts": "^6.0.0",
"element-plus": "^2.6.0",
"element-plus": "^2.14.3",
"lodash-es": "^4.17.21",
"luxon": "^3.7.1",
"pinia": "^2.1.7",
......
......@@ -74,7 +74,6 @@ export function getFactoryOrderNewListApi(
/** 请求体与 `factory/podOrder/list_page` 一致 */
export function getPodOrderAcceptedStatisticsApi(
data: SearchForm,
currentPage: number,
pageSize: number,
status?: string,
subStatus?: number,
......@@ -88,7 +87,7 @@ export function getPodOrderAcceptedStatisticsApi(
}>
>('factory/podOrder/acceptedStatistics', {
...normalizePodOrderQueryPayload({ ...data } as Record<string, unknown>),
currentPage,
currentPage: 1,
pageSize,
status,
acceptedStatus: subStatus,
......
......@@ -780,3 +780,10 @@ export function getSortingLogApi(id: number) {
params: { id },
})
}
// 配货分拣 商品类目
export function getCategoryListApi() {
return axios.get<never, BaseRespData<OperatorList[]>>(
'allocation-sorting-rule/find-custom-category-list',
)
}
......@@ -126,11 +126,11 @@ const attrs = useAttrs()
const slots = useSlots() as Record<string, Slot>
const setCurrentRow = (row: T) => {
tableRef.value?.setCurrentRow(row)
tableRef.value?.setCurrentRow(row as Record<PropertyKey, any>)
}
const toggleRowSelection = (row: T, selected: boolean = true) => {
tableRef.value?.toggleRowSelection(row, selected)
tableRef.value?.toggleRowSelection(row as Record<PropertyKey, any>, selected)
}
const clearSelection = () => {
......@@ -139,11 +139,11 @@ const clearSelection = () => {
const toggleAllSelection = () => {
tableRef.value?.toggleAllSelection()
}
const rowClick = (row:NonNullable<unknown>)=>{
const rowClick = (row: NonNullable<unknown>) => {
console.log(row)
console.log(tableRef.value,props.rowClickSelect)
if(props.rowClickSelect){
tableRef.value?.toggleRowSelection(row,true)
console.log(tableRef.value, props.rowClickSelect)
if (props.rowClickSelect) {
tableRef.value?.toggleRowSelection(row as Record<PropertyKey, any>, true)
}
}
const handleTableHeaderClick = (column: { type?: string }, event: Event) => {
......@@ -170,7 +170,10 @@ const selectAllRows = (select: boolean, setInternalIsMore?: boolean) => {
nextTick(() => {
if (tableRef.value && props.paginatedData.length > 0) {
props.paginatedData.forEach((row) => {
tableRef.value?.toggleRowSelection(row, select)
tableRef.value?.toggleRowSelection(
row as Record<PropertyKey, any>,
select,
)
})
}
......
......@@ -304,6 +304,8 @@ export interface SortingList {
warehouseName: string
autoPrint: boolean
defaultWarehouse: 0 | 1
matchType: 1 | 2 // 匹配类型:1=所有条件(且) 2=任一条件(或)
conditions: SortingRuleCondition[] // 配货规则
}
// 配货分拣 详情
......@@ -328,7 +330,7 @@ export interface SortingRuleCondition {
ruleId?: number
conditionType: string // 条件
operator: string // 操作符
conditionValue?: string | number | string[]
conditionValue?: string | number | (string | number)[]
}
// 配货分拣 配货区/操作符/条件
......
......@@ -516,9 +516,14 @@
</template>
<script setup lang="ts">
import { ElMessage, ElRadioGroup, ElTree, TableColumnCtx } from 'element-plus'
import {
ElMessage,
ElRadioGroup,
ElTree,
TableColumnCtx,
type TableInstance,
} from 'element-plus'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { ElTable } from 'element-plus'
import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue'
import {
......@@ -554,7 +559,9 @@ interface Tree {
code?: string
children?: Tree[]
}
interface SummaryMethodProps<T = AccountStatementNote> {
interface SummaryMethodProps<
T extends Record<PropertyKey, any> = AccountStatementNote,
> {
columns: TableColumnCtx<T>[]
data: T[]
}
......@@ -568,7 +575,7 @@ const dateRange = ref<string[]>([])
const selections = ref<AccountStatementNote[]>([])
const detailList = ref<ItemList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<AccountStatementNote | null>(null)
const logList = ref<LogList[]>([])
......@@ -583,7 +590,7 @@ const {
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
} = usePageList<AccountStatementNote>({
query: (page, pageSize) =>
customJomallReconciliation(
{
......@@ -623,7 +630,7 @@ const getTreeNum = async () => {
console.error(e)
}
}
const rowClick = (row: AccountStatementNote) => {
const rowClick = (row: AccountStatementNote | null) => {
if (!row) {
currentRow.value = null
}
......@@ -789,7 +796,7 @@ const submitConfirmOrder = async () => {
search()
await getTreeNum()
if (singleTableRef.value) {
singleTableRef.value!.setCurrentRow(currentRow.value)
singleTableRef.value!.setCurrentRow(currentRow.value ?? undefined)
}
}
watch(
......
......@@ -4,6 +4,7 @@
:title="isEdit ? '编辑配货区' : '新增配货区'"
:close-on-click-modal="false"
width="800px"
destroy-on-close
>
<el-form ref="formRef" label-width="170px" :model="form" :rules="rules">
<el-form-item label="配货区说明" prop="areaDesc">
......@@ -63,9 +64,9 @@
<el-select
v-model="item.operator"
style="width: 160px"
style="width: 100px"
:disabled="isDisabled"
placeholder="请选择关系"
placeholder="关系"
>
<el-option
v-for="operator in getAvailableOperators(item.conditionType)"
......@@ -79,13 +80,12 @@
<el-select
v-model="item.conditionValue"
class="platform-select"
style="width: 160px"
style="width: 190px"
:disabled="isDisabled"
placeholder="请选择平台"
filterable
multiple
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="1"
clearable
popper-class="customize-select-style"
......@@ -105,11 +105,47 @@
</el-option>
</el-select>
</template>
<template v-else-if="item.conditionType === 'order_category'">
<el-cascader
v-model="item.conditionValue"
class="category-cascader"
style="width: 190px"
placeholder="请选择商品类目"
:options="categoryList"
:props="{
label: 'name',
value: 'id',
children: 'children',
multiple: true,
emitPath: true,
}"
collapse-tags
collapse-tags-tooltip
:max-collapse-tags="1"
tag-type="info"
show-checked-strategy="parent"
clearable
:disabled="isDisabled"
>
<template #tag="{ data, deleteTag }">
<el-tag
v-for="tag in data.slice(0, 1)"
:key="tag.key"
type="info"
:closable="tag.closable"
class="category-cascader-tag"
@close="deleteTag(tag)"
>
{{ tag.text }}
</el-tag>
</template>
</el-cascader>
</template>
<template v-else>
<el-input-number
v-model="item.conditionValue"
style="width: 160px"
style="width: 190px"
:min="1"
:max="999"
:disabled="isDisabled"
......@@ -202,19 +238,7 @@ import type {
SortingRuleCondition,
SortingRuleDetail,
} from '@/types/api/order'
import {
getAreaListApi,
getConditionTypeListApi,
getOperatorListApi,
addAreaApi,
editAreaApi,
} from '@/api/order'
// 配货规则条件
const pickingRuleList = ref<OperatorList[]>()
// 配货规则操作符
const operatorList = ref<OperatorList[]>()
import { getAreaListApi, addAreaApi, editAreaApi } from '@/api/order'
const props = defineProps<{
modelValue: boolean
......@@ -223,6 +247,9 @@ const props = defineProps<{
warehouseId: number
warehouseName: string
isDisabled?: boolean
categoryList: OperatorList[]
pickingRuleList: OperatorList[]
operatorList: OperatorList[]
}>()
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void
......@@ -264,33 +291,38 @@ const getAvailablePickingRules = (currentIndex: number) => {
const selectedFields = form.value.conditions
.filter((_, index) => index !== currentIndex)
.map((item) => item.conditionType)
return pickingRuleList.value?.filter(
return props.pickingRuleList.filter(
(rule) => !selectedFields.includes(rule.code),
)
}
// 根据配货规则类型获取可用的操作符
const getAvailableOperators = (conditionType: string) => {
const list = operatorList.value ?? []
if (conditionType === 'order_total_num') {
return list.filter((operator) => operator.code !== 'in')
} else if (conditionType === 'order_platform') {
return list.filter((operator) => operator.code === 'in')
const list = props.operatorList
const matchers: Record<string, (code: string) => boolean> = {
order_total_num: (code) => code !== 'in' && code !== 'contain',
order_platform: (code) => code === 'in',
order_category: (code) => code === 'contain',
}
return list
const matcher = matchers[conditionType]
return matcher ? list.filter((operator) => matcher(operator.code)) : list
}
// 配货规则条件改变
const handleConditionTypeChange = (item: SortingRuleCondition) => {
// 平台 只能选 in属于
if (item.conditionType === 'order_platform') {
item.conditionValue = undefined
item.operator = 'in'
}
// 订单总件数 清空字段
else if (item.conditionType === 'order_total_num') {
item.conditionValue = undefined
item.operator = 'gt'
switch (item.conditionType) {
case 'order_platform':
item.conditionValue = undefined
item.operator = 'in'
break
case 'order_total_num':
item.conditionValue = undefined
item.operator = 'gt'
break
case 'order_category':
item.conditionValue = undefined
item.operator = 'contain'
break
}
}
......@@ -311,7 +343,8 @@ const validateConditions = (
for (let i = 0; i < items.length; i++) {
const item = items[i]
const isValueValid =
item.conditionType === 'order_platform'
item.conditionType === 'order_platform' ||
item.conditionType === 'order_category'
? Array.isArray(item.conditionValue) && item.conditionValue.length > 0
: item.conditionValue !== null && item.conditionValue !== undefined
if (!item.conditionType || !isValueValid || !item.operator) {
......@@ -352,14 +385,29 @@ const rules = computed(() => {
const platformList = platformJson
// 将详情返回的字符串条件值转为表单可用格式
const formatConditionsForForm = (conditions: SortingRuleCondition[]) =>
conditions.map((item) => ({
...item,
conditionValue:
typeof item.conditionValue === 'string'
? item.conditionValue.split(',').filter(Boolean)
: item.conditionValue,
}))
conditions.map((item) => {
if (
typeof item.conditionValue !== 'string' ||
(item.conditionType !== 'order_platform' &&
item.conditionType !== 'order_category')
) {
return item
}
const values = item.conditionValue.split(',').filter(Boolean)
// 类目 id 一般为 number,需与级联 options 的 id 类型一致才能回显
if (item.conditionType === 'order_category') {
return {
...item,
conditionValue: values.map((v) => {
const num = Number(v)
return Number.isNaN(num) ? v : num
}),
}
}
return { ...item, conditionValue: values }
})
// 添加配货规则
const addPickingRuleItem = () => {
......@@ -397,20 +445,6 @@ const loadAreaList = async () => {
}
}
// 获取配货规则条件
const getConditionTypeList = async () => {
const res = await getConditionTypeListApi()
if (res.code !== 200) return
pickingRuleList.value = res.data
}
// 获取配货规则操作符
const getOperatorList = async () => {
const res = await getOperatorListApi()
if (res.code !== 200) return
operatorList.value = res.data
}
// 提交
const handleSubmit = async () => {
form.value.warehouseId = props.warehouseId
......@@ -425,7 +459,9 @@ const handleSubmit = async () => {
(item): SortingRuleCondition => ({
...item,
conditionValue: Array.isArray(item.conditionValue)
? item.conditionValue.join(',')
? item.conditionValue
.map((v) => (Array.isArray(v) ? v[v.length - 1] : v))
.join(',')
: item.conditionValue,
}),
),
......@@ -442,7 +478,7 @@ const handleSubmit = async () => {
}
onMounted(async () => {
await Promise.all([loadAreaList(), getConditionTypeList(), getOperatorList()])
await loadAreaList()
if (props.editData) {
form.value = {
...props.editData,
......@@ -500,7 +536,6 @@ onMounted(async () => {
:deep(.el-select__selection) {
flex-wrap: nowrap;
overflow: hidden;
}
:deep(.el-select__selected-item) {
......@@ -529,4 +564,21 @@ onMounted(async () => {
flex-wrap: wrap;
}
}
// cascader 样式,确保单行显示
.category-cascader {
.el-cascader__tags {
display: flex !important;
flex-wrap: nowrap !important;
align-items: center;
overflow: hidden;
}
.category-cascader-tag {
flex: 0 1 auto !important;
min-width: 0 !important;
max-width: 100%;
overflow: hidden;
}
}
</style>
......@@ -47,6 +47,62 @@
class="table-container"
>
<TableView :paginated-data="sortingList" :columns="columns">
<template #conditions="{ row }">
<div v-if="row.areaCode === 'AREA_0'">默认分拣口</div>
<div v-else class="conditions-text">
<div class="match-type">
{{
row.matchType === 1
? '满足以下所有条件:'
: '满足以下任一条件:'
}}
</div>
<div
v-for="(item, index) in row.conditions || []"
:key="index"
class="condition-item"
>
<span
class="condition-text"
:title="formatConditionText(item)"
>
{{ index + 1 }}{{ formatConditionText(item) }}
</span>
<el-popover
v-if="item.conditionType === 'order_category'"
placement="bottom"
:width="'auto'"
trigger="click"
>
<el-cascader-panel
class="category-cascader-panel-readonly"
:model-value="getCategoryCascaderValue(item)"
:options="categoryList"
:props="{
label: 'name',
value: 'id',
children: 'children',
multiple: true,
emitPath: true,
checkOnClickNode: false,
checkOnClickLeaf: false,
showPrefix: false,
}"
/>
<template #reference>
<el-button
type="primary"
link
class="category-detail-btn"
>
详情
</el-button>
</template>
</el-popover>
</div>
</div>
</template>
<template #autoPrint="{ row }">
{{ row.autoPrint ? '开启' : '关闭' }}
</template>
......@@ -78,6 +134,9 @@
:edit-data="editData"
:warehouse-id="searchForm.warehouseId"
:warehouse-name="searchForm.warehouseName"
:category-list="categoryList"
:picking-rule-list="pickingRuleList"
:operator-list="operatorList"
@submit="getSortingRuleList"
/>
<el-dialog
......@@ -97,7 +156,9 @@ import { loadWarehouseListApi } from '@/api/common'
import type { WarehouseListData } from '@/types'
import type {
LogListData,
OperatorList,
SortingList,
SortingRuleCondition,
SortingRuleDetail,
} from '@/types/api/order'
import type { CustomColumn } from '@/types/table'
......@@ -107,6 +168,9 @@ import {
getConfigApi,
updateConfighApi,
getAreaInfoApi,
getCategoryListApi,
getConditionTypeListApi,
getOperatorListApi,
} from '@/api/order'
import TableView from '@/components/TableView.vue'
import LogList from '@/components/LogList.vue'
......@@ -128,11 +192,13 @@ const columns: CustomColumn<SortingList>[] = [
align: 'center',
},
{
key: 'conditionsText',
prop: 'conditionsText',
key: 'conditions',
prop: 'conditions',
label: '配货规则',
minWidth: 250,
align: 'left',
slot: 'conditions',
showOverflowTooltip: false,
},
{
key: 'areaName',
......@@ -174,6 +240,9 @@ const columns: CustomColumn<SortingList>[] = [
const warehouseList = ref<WarehouseListData[]>([]) // 仓库列表
const sortingList = ref<SortingList[]>([]) // 规则列表
const categoryList = ref<OperatorList[]>([]) // 商品类目
const pickingRuleList = ref<OperatorList[]>([]) // 配货规则条件
const operatorList = ref<OperatorList[]>([]) // 配货规则操作符
const isEnableSorting = ref(false) // 是否开启配货分拣
const currentId = ref(0) // 当前操作id
const isEdit = ref(false) // 是否编辑
......@@ -188,6 +257,139 @@ const searchForm = ref({
warehouseName: '',
})
type CategoryNode = OperatorList & {
id?: number | string
name?: string
children?: CategoryNode[]
}
// 获取节点下全部叶子 id
const getCategoryLeafIds = (node: CategoryNode): string[] => {
if (!node.children?.length) return node.id != null ? [String(node.id)] : []
return node.children.flatMap(getCategoryLeafIds)
}
// 格式化已选类目:某项下所有子项都被选中时,只展示该项路径
const formatSelectedCategories = (
list: CategoryNode[],
selectedIds: Set<string>,
path: string[] = [],
): string[] => {
const result: string[] = []
for (const item of list) {
const currentPath = [...path, item.name ?? '']
const leafIds = getCategoryLeafIds(item)
const allSelected =
leafIds.length > 0 && leafIds.every((id) => selectedIds.has(id))
if (allSelected) {
result.push(currentPath.join('->'))
continue
}
if (item.children?.length) {
result.push(
...formatSelectedCategories(item.children, selectedIds, currentPath),
)
} else if (item.id != null && selectedIds.has(String(item.id))) {
result.push(currentPath.join('->'))
}
}
return result
}
// 根据叶子 id 查找类目完整路径(用于级联回显)
const findCategoryPath = (
list: CategoryNode[],
targetId: string | number,
path: (string | number)[] = [],
): (string | number)[] | null => {
for (const item of list) {
if (item.id == null) continue
const currentPath = [...path, item.id]
if (String(item.id) === String(targetId)) return currentPath
if (item.children?.length) {
const found = findCategoryPath(item.children, targetId, currentPath)
if (found) return found
}
}
return null
}
// 将条件值转为级联回显路径
const getCategoryCascaderValue = (item: SortingRuleCondition) => {
const ids = String(item.conditionValue ?? '')
.split(',')
.filter(Boolean)
return ids
.map((id) => {
const num = Number(id)
return findCategoryPath(
categoryList.value as CategoryNode[],
Number.isNaN(num) ? id : num,
)
})
.filter((path): path is (string | number)[] => !!path)
}
// 配货规则展示文案
const formatConditionText = (item: SortingRuleCondition) => {
// 配货规则条件
const typeDesc =
pickingRuleList.value.find((r) => r.code === item.conditionType)?.desc ??
item.conditionType
// 配货规则操作符
const operatorDesc =
operatorList.value.find((r) => r.code === item.operator)?.desc ??
item.operator
let valueText = ''
switch (item.conditionType) {
case 'order_category': {
const selectedIds = new Set(
String(item.conditionValue ?? '')
.split(',')
.filter(Boolean),
)
valueText = formatSelectedCategories(
categoryList.value as CategoryNode[],
selectedIds,
).join('、')
break
}
case 'order_platform':
valueText = String(item.conditionValue ?? '')
.split(',')
.filter(Boolean)
.join('、')
break
default:
valueText = String(item.conditionValue ?? '')
break
}
return `${typeDesc}${operatorDesc} ${valueText}`
}
// 获取商品类目
const getCategoryList = async () => {
const res = await getCategoryListApi()
if (res.code !== 200) return
categoryList.value = res.data
}
// 获取配货规则条件
const getConditionTypeList = async () => {
const res = await getConditionTypeListApi()
if (res.code !== 200) return
pickingRuleList.value = res.data
}
// 获取配货规则操作符
const getOperatorList = async () => {
const res = await getOperatorListApi()
if (res.code !== 200) return
operatorList.value = res.data
}
// 加载仓库列表
const loadWarehouseList = async () => {
try {
......@@ -303,9 +505,16 @@ const deleteArea = async (id: number) => {
// }
onMounted(async () => {
await loadWarehouseList()
await getFunctionSwitch()
loading.value = true
await Promise.all([
loadWarehouseList(),
getFunctionSwitch(),
getCategoryList(),
getConditionTypeList(),
getOperatorList(),
])
await getSortingRuleList()
loading.value = false
})
</script>
......@@ -340,4 +549,46 @@ onMounted(async () => {
margin-top: 10px;
}
}
.conditions-text {
padding: 4px 0;
line-height: 1.6;
overflow: hidden;
.match-type {
color: #666;
margin-bottom: 2px;
}
.condition-item {
display: flex;
align-items: center;
color: #333;
overflow: hidden;
min-width: 0;
.condition-text {
flex: 1;
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.category-detail-btn {
flex-shrink: 0;
margin-left: 4px;
padding: 0;
height: auto;
}
}
}
</style>
<style lang="scss">
// 详情面板只读:可展开,禁止勾选
.category-cascader-panel-readonly {
.el-checkbox {
pointer-events: none;
}
}
</style>
......@@ -91,7 +91,6 @@ export function useOrderStatusTree(options: UseOrderStatusTreeOptions) {
try {
const res = await getPodOrderAcceptedStatisticsApi(
getQueryPayload(),
currentPage.value,
pageSize.value,
status.value,
getListPageAcceptedSubStatus(),
......
......@@ -2348,6 +2348,13 @@ const baseProductColumns = computed(() => [
align: 'center',
},
{
key: 'categoryName',
prop: 'categoryName',
label: '商品类目',
minWidth: 160,
align: 'center',
},
{
prop: 'price',
label: '价格',
minWidth: 100,
......
......@@ -1764,6 +1764,7 @@ const resetPlatform = () => {
.basic-info-item {
display: flex;
align-items: center;
overflow: hidden;
span:last-child {
flex: 1;
......
......@@ -901,7 +901,7 @@
</template>
<script setup lang="ts">
import { ElMessage, ElTable, ElTree, TableColumnCtx } from 'element-plus'
import { ElMessage, ElTree, TableColumnCtx, type TableInstance } from 'element-plus'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { CircleClose, Plus } from '@element-plus/icons-vue'
// import pendingReconciliation from './pendingReconciliation.vue'
......@@ -945,7 +945,9 @@ interface Tree {
children?: Tree[]
}
interface SummaryMethodProps<T = AccountStatementNote> {
interface SummaryMethodProps<
T extends Record<PropertyKey, any> = AccountStatementNote,
> {
columns: TableColumnCtx<T>[]
data: T[]
}
......@@ -973,7 +975,7 @@ const selections = ref<AccountStatementNote[]>([])
const detailSelections = ref<ItemList[]>([])
const detailList = ref<ItemList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<AccountStatementNote | null>(null)
const paymentDialogVisible = ref(false)
......@@ -1008,7 +1010,7 @@ const {
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
} = usePageList<AccountStatementNote>({
query: (page, pageSize) =>
podReconciliationList(
{
......@@ -1152,7 +1154,7 @@ const getTreeNum = async () => {
console.error(e)
}
}
const rowClick = (row: AccountStatementNote) => {
const rowClick = (row: AccountStatementNote | null) => {
if (!row) {
currentRow.value = null
}
......@@ -1362,7 +1364,7 @@ const submitConfirmOrder = async (type: number) => {
search()
await getTreeNum()
if (singleTableRef.value) {
singleTableRef.value!.setCurrentRow(currentRow.value)
singleTableRef.value!.setCurrentRow(currentRow.value ?? undefined)
}
}
watch(
......
......@@ -34,7 +34,7 @@ const {
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
} = usePageList<AccountStatementNote>({
query: (page, pageSize) =>
getPodShipmentDetailsById(
{
......
<script setup lang="ts">
import { ElMessage, ElTable } from 'element-plus'
import { ElMessage } from 'element-plus'
import type { PropType } from 'vue'
import { ProductDetails } from '@/types/api/billOrder.ts'
const selection = ref<ProductDetails[]>([])
defineProps({
list: {
type: Array,
type: Array as PropType<ProductDetails[]>,
default: () => [],
},
})
const handleDetailSelectionChange = (arr:ProductDetails[]) => {
const handleDetailSelectionChange = (arr: ProductDetails[]) => {
selection.value = arr
}
......
......@@ -1040,7 +1040,7 @@
<script setup lang="ts">
import DetailView from './detail.vue'
import EditOrder from './editOrder.vue'
import { ElMessage, ElTable, ElTree, TableColumnCtx } from 'element-plus'
import { ElMessage, ElTree, TableColumnCtx, type TableInstance } from 'element-plus'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import usePageList from '@/utils/hooks/usePageList'
import { useValue } from '@/utils/hooks/useValue'
......@@ -1084,7 +1084,9 @@ interface Tree {
children?: Tree[]
}
interface SummaryMethodProps<T = AccountStatementNote> {
interface SummaryMethodProps<
T extends Record<PropertyKey, any> = AccountStatementNote,
> {
columns: TableColumnCtx<T>[]
data: T[]
}
......@@ -1105,7 +1107,7 @@ const orderSelections = ref<OrderDetails[]>([])
const detailList = ref<ProductDetails[]>([])
const orderList = ref<OrderDetails[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<AccountStatementNote | null>(null)
const batchSave = async () => {
......@@ -1182,7 +1184,7 @@ const {
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
} = usePageList<AccountStatementNote>({
query: (page, pageSize) =>
podUsReconciliationList(
{
......@@ -1254,7 +1256,7 @@ const getTreeNum = async () => {
console.error(e)
}
}
const rowClick = (row: AccountStatementNote) => {
const rowClick = (row: AccountStatementNote | null) => {
if (!row) {
currentRow.value = null
}
......@@ -1414,7 +1416,7 @@ const submitConfirmOrder = async (type: number) => {
search()
await getTreeNum()
if (singleTableRef.value) {
singleTableRef.value!.setCurrentRow(currentRow.value)
singleTableRef.value!.setCurrentRow(currentRow.value ?? undefined)
}
}
watch(
......
......@@ -34,7 +34,7 @@ const {
refresh: search,
onCurrentPageChange: handleCurrentChange,
onPageSizeChange: handleSizeChange,
} = usePageList({
} = usePageList<AccountStatementNote>({
query: (page, pageSize) =>
getPodShipmentDetailsById(
{
......
......@@ -894,10 +894,9 @@
</template>
<script setup lang="ts">
import { ElMessage, ElRadioGroup, ElTree } from 'element-plus'
import { ElMessage, ElRadioGroup, ElTree, type TableInstance } from 'element-plus'
import { CirclePlusFilled } from '@element-plus/icons-vue'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { ElTable } from 'element-plus'
import usePageList from '@/utils/hooks/usePageList'
import { checkUpdateParams, AnyObject } from '@/utils/hooks/commonUtil'
import { useValue } from '@/utils/hooks/useValue'
......@@ -1064,7 +1063,7 @@ const tradingTime = ref<string[]>([])
const selections = ref<InterWarehousePage[]>([])
const detailList = ref<InterProductList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<InterWarehousePage | null>(null)
const logList = ref<LogListData[]>([])
const rules = {
......@@ -1399,7 +1398,7 @@ const getWarehouseList = async () => {
console.error(e)
}
}
const rowClick = (row: InterWarehousePage) => {
const rowClick = (row: InterWarehousePage | null) => {
if (!row) {
currentRow.value = null
}
......
......@@ -629,9 +629,8 @@
</template>
<script setup lang="ts">
import { ElMessage, ElRadioGroup, ElTree } from 'element-plus'
import { ElMessage, ElRadioGroup, ElTree, type TableInstance } from 'element-plus'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { ElTable } from 'element-plus'
import ReceiptProductDialog from './components/ReceiptProductDialog.vue'
import usePageList from '@/utils/hooks/usePageList'
import { checkUpdateParams, AnyObject } from '@/utils/hooks/commonUtil'
......@@ -807,7 +806,7 @@ const tradingTime = ref<string[]>([])
const selections = ref<InterWarehousePage[]>([])
const detailList = ref<InterProductList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<InterWarehousePage | null>(null)
const logList = ref<LogListData[]>([])
const detailLoading = ref(false)
......@@ -1085,7 +1084,7 @@ const getWarehouseList = async () => {
console.error(e)
}
}
const rowClick = (row: InterWarehousePage) => {
const rowClick = (row: InterWarehousePage | null) => {
if (!row) {
currentRow.value = null
}
......
......@@ -998,10 +998,9 @@
</template>
<script setup lang="ts">
import { ElMessage, ElRadioGroup, ElTree } from 'element-plus'
import { ElMessage, ElRadioGroup, ElTree, type TableInstance } from 'element-plus'
import { CirclePlusFilled } from '@element-plus/icons-vue'
import splitDiv from '@/components/splitDiv/splitDiv.vue'
import { ElTable } from 'element-plus'
import usePageList from '@/utils/hooks/usePageList'
import { checkUpdateParams, AnyObject } from '@/utils/hooks/commonUtil'
import { useValue } from '@/utils/hooks/useValue'
......@@ -1174,7 +1173,7 @@ const tradingTime = ref<string[]>([])
const selections = ref<InterWarehousePage[]>([])
const detailList = ref<InterProductList[]>([])
const tabsValue = ref<string>('0')
const singleTableRef = ref<InstanceType<typeof ElTable>>()
const singleTableRef = ref<TableInstance>()
const currentRow = ref<InterWarehousePage | null>(null)
const logList = ref<LogListData[]>([])
const rules = {
......@@ -1509,7 +1508,7 @@ const getWarehouseList = async () => {
console.error(e)
}
}
const rowClick = (row: InterWarehousePage) => {
const rowClick = (row: InterWarehousePage | null) => {
if (!row) {
currentRow.value = null
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment