|
|
@@ -15,8 +15,8 @@ const formSlotSuffix = "tool-form_"
|
|
|
|
|
|
const props = withDefaults(
|
|
|
defineProps<{
|
|
|
- header?: Header[] // 逐渐弃用
|
|
|
columns: Header[]
|
|
|
+ columnsFun?: () => Header[]
|
|
|
tableTitle?: string
|
|
|
emptyTableText?: string
|
|
|
keyField?: string
|
|
|
@@ -160,7 +160,6 @@ const props = withDefaults(
|
|
|
}
|
|
|
)
|
|
|
const emits = defineEmits<{
|
|
|
- (e: "update:header", v: Header[]): void
|
|
|
(e: "update:columns", v: Header[]): void
|
|
|
(e: "update:selectedRows", v: any[]): void
|
|
|
(e: "update:currentPage", v: number): void
|
|
|
@@ -170,8 +169,12 @@ const emits = defineEmits<{
|
|
|
(e: "page-change", v: number): void
|
|
|
(e: "update:formData", v: any): void
|
|
|
(e: "sort", v: Sort[]): void
|
|
|
+ (e: "row-click", row: any): void
|
|
|
+ (e: "row-db-click", row: any): void
|
|
|
+ (e: "checkbox-change", isChecked: boolean, row: any): void
|
|
|
(e: "select", row: any): void
|
|
|
(e: "unSelect", row: any): void
|
|
|
+ (e: "checkbox-all", isChecked: boolean, rows: any[]): void
|
|
|
(e: "select-all", rows: any[]): void
|
|
|
(e: "unSelect-all", rows: any[]): void
|
|
|
}>()
|
|
|
@@ -179,7 +182,7 @@ const tableBoxRef = ref()
|
|
|
const tableContentRef = ref()
|
|
|
const id = ref("")
|
|
|
|
|
|
-const { data, queryParams, searchFormRowItems, searchFormItems } = toRefs(props)
|
|
|
+const { data, searchFormRowItems, searchFormItems } = toRefs(props)
|
|
|
const leftFixedRef = ref()
|
|
|
const tableResponsiveRef = ref()
|
|
|
const rightFixedRef = ref()
|
|
|
@@ -198,14 +201,29 @@ const sortParams = ref<Sort[]>([
|
|
|
}
|
|
|
])
|
|
|
|
|
|
-const _columns = ref<Header[]>()
|
|
|
+const _columns = ref<Header[]>([])
|
|
|
const columns: WritableComputedRef<Header[]> = computed({
|
|
|
get(): Header[] {
|
|
|
- return _columns.value ?? props.columns ?? props.header ?? []
|
|
|
+ if (_columns.value && _columns.value.length > 0) {
|
|
|
+ if (props.columnsFun) {
|
|
|
+ const cols = props.columnsFun() ?? []
|
|
|
+ const newCols: Header[] = []
|
|
|
+ cols.forEach((v: Header) => {
|
|
|
+ const col = _columns.value.find((vv: Header) => vv.field == v.field)
|
|
|
+ if (col) {
|
|
|
+ v.visible = col.visible
|
|
|
+ }
|
|
|
+ newCols.push(v)
|
|
|
+ })
|
|
|
+ _columns.value = newCols
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ _columns.value = props.columnsFun ? props.columnsFun() : props.columns ?? []
|
|
|
+ }
|
|
|
+ return _columns.value
|
|
|
},
|
|
|
set(value: Header[]): void {
|
|
|
_columns.value = value
|
|
|
- emits("update:header", value)
|
|
|
emits("update:columns", value)
|
|
|
}
|
|
|
})
|
|
|
@@ -392,9 +410,8 @@ const defaultHandleFuns = {
|
|
|
if (props.exportUrl) {
|
|
|
download(
|
|
|
props.exportUrl,
|
|
|
- { ...innerQueryParams.value },
|
|
|
`${props.exportName ? props.exportName + "_" : ""}${new Date().getTime()}.xlsx`,
|
|
|
- { method: "POST" }
|
|
|
+ { method: "POST", params: { ...innerQueryParams.value } }
|
|
|
)
|
|
|
} else {
|
|
|
message.alertError("导出接口方法未配置,请联系管理员")
|
|
|
@@ -631,6 +648,19 @@ function getSelectedIds() {
|
|
|
function getData() {
|
|
|
return remoteData.value
|
|
|
}
|
|
|
+function setSelecteds(rows: any[] | any, isSelected: boolean) {
|
|
|
+ if (!Array.isArray(rows)) {
|
|
|
+ rows = [rows]
|
|
|
+ }
|
|
|
+ if (isSelected) {
|
|
|
+ selectedRows.value = [...new Set([...selectedRows.value, ...rows])]
|
|
|
+ } else {
|
|
|
+ selectedRows.value = selectedRows.value.filter((item: any) => !rows.includes(item))
|
|
|
+ }
|
|
|
+}
|
|
|
+function clearSelecteds() {
|
|
|
+ selectedRows.value = []
|
|
|
+}
|
|
|
provide(symbolKeys.tableBox, tableBoxRef)
|
|
|
provide(symbolKeys.searchFrom, {
|
|
|
queryParams: innerQueryParams,
|
|
|
@@ -652,9 +682,9 @@ provide(symbolKeys.content, {
|
|
|
tableClass: props.tableClass,
|
|
|
tableStyle: tableStyle.value
|
|
|
})
|
|
|
+provide(symbolKeys.checkAll, checkAll)
|
|
|
provide(symbolKeys.header, {
|
|
|
columns,
|
|
|
- checkAll,
|
|
|
hasCheckbox: isMultipleCheck.value || props.hasCheckbox,
|
|
|
isMultipleCheck: isMultipleCheck.value,
|
|
|
sortField: props.sortField ?? "",
|
|
|
@@ -733,6 +763,7 @@ const onSelectAll = (isChecked: boolean) => {
|
|
|
sRows = [...new Set([...selectedRows.value, ...displayData.value])]
|
|
|
selectedRows.value = sRows
|
|
|
emits("select-all", sRows)
|
|
|
+ emits("checkbox-all", true, sRows)
|
|
|
} else {
|
|
|
if (props.checkPageMultiple) {
|
|
|
sRows = selectedRows.value.filter(
|
|
|
@@ -743,6 +774,7 @@ const onSelectAll = (isChecked: boolean) => {
|
|
|
}
|
|
|
selectedRows.value = sRows
|
|
|
emits("unSelect-all", sRows)
|
|
|
+ emits("checkbox-all", false, displayData.value)
|
|
|
}
|
|
|
}
|
|
|
const onSelect = (v: { isChecked: boolean; row: any }) => {
|
|
|
@@ -752,12 +784,14 @@ const onSelect = (v: { isChecked: boolean; row: any }) => {
|
|
|
sRows = isMultipleCheck.value ? [...new Set([...selectedRows.value, row])] : [row]
|
|
|
selectedRows.value = sRows
|
|
|
emits("select", row)
|
|
|
+ emits("checkbox-change", true, row)
|
|
|
} else {
|
|
|
sRows = isMultipleCheck.value
|
|
|
? selectedRows.value.filter((vv) => vv[keyField.value] != row[keyField.value])
|
|
|
: []
|
|
|
selectedRows.value = sRows
|
|
|
emits("unSelect", row)
|
|
|
+ emits("checkbox-change", false, row)
|
|
|
}
|
|
|
}
|
|
|
const onQuery = () => {
|
|
|
@@ -766,10 +800,12 @@ const onQuery = () => {
|
|
|
const onRowClick = (v: any) => {
|
|
|
const row = toValue(v)
|
|
|
props.rowClick && props.rowClick(row)
|
|
|
+ emits("row-click", row)
|
|
|
}
|
|
|
const onRowDbClick = (v: any) => {
|
|
|
const row = toValue(v)
|
|
|
props.rowDbClick && props.rowDbClick(row)
|
|
|
+ emits("row-db-click", row)
|
|
|
}
|
|
|
const onReset = () => {
|
|
|
innerQueryParams.value = JSON.parse(emptyQueryParams)
|
|
|
@@ -917,11 +953,26 @@ function init() {
|
|
|
_tableBoxStyle.value = calcTableBoxStyle()
|
|
|
})
|
|
|
}
|
|
|
-
|
|
|
onMounted(init)
|
|
|
onUnmounted(() => {
|
|
|
tableResponsiveRef.value?.removeEventListener("scroll", onFixedScrollX, true)
|
|
|
})
|
|
|
+watch(selectedRows, (val: any) => {
|
|
|
+ if (val.length > 0 && val.length == displayData.value.length) {
|
|
|
+ let flag = true
|
|
|
+ displayData.value.forEach((item: any) => {
|
|
|
+ if (
|
|
|
+ selectedRows.value.find((row: any) => row[keyField.value] == item[keyField.value]) == null
|
|
|
+ ) {
|
|
|
+ flag = false
|
|
|
+ return
|
|
|
+ }
|
|
|
+ })
|
|
|
+ checkAll.value = flag
|
|
|
+ } else {
|
|
|
+ checkAll.value = false
|
|
|
+ }
|
|
|
+})
|
|
|
watch(
|
|
|
() => props.queryParams,
|
|
|
(val: any) => {
|
|
|
@@ -938,6 +989,8 @@ defineExpose({
|
|
|
getSelecteds,
|
|
|
getData,
|
|
|
getQueryParams,
|
|
|
+ setSelecteds,
|
|
|
+ clearSelecteds,
|
|
|
defaultHandleFuns
|
|
|
})
|
|
|
</script>
|