edu/admin/src/components/material-select/hook.ts

167 lines
4.0 KiB
TypeScript
Raw Normal View History

2022-04-08 02:42:44 +00:00
import {
apiFileCateAdd,
apiFileCateDelete,
apiFileCateEdit,
apiFileCateLists,
apiFileDelete,
apiFileList,
2022-04-08 06:46:31 +00:00
apiFileMove,
} from "@/api/app"
import { usePages } from "@/core/hooks/pages"
import { ElMessage } from "element-plus"
import { computed, inject, reactive, ref, Ref } from "vue"
2022-04-08 02:42:44 +00:00
// 左侧分组的钩子函数
export function useCate(typeValue: Ref<any>) {
// 分组列表
const cateLists: Ref<any[]> = ref([])
// 选中的分组id
2022-04-08 06:46:31 +00:00
const cateId = ref("")
2022-04-08 02:42:44 +00:00
// 添加分组
const handleAddCate = (val: string) => {
apiFileCateAdd({
type: typeValue.value,
pid: 0,
2022-04-08 06:46:31 +00:00
name: val,
2022-04-08 02:42:44 +00:00
}).then(() => {
getCateLists()
})
}
// 编辑分组
const handleEditCate = (val: string, id: number) => {
apiFileCateEdit({
id,
2022-04-08 06:46:31 +00:00
name: val,
2022-04-08 02:42:44 +00:00
}).then(() => {
getCateLists()
})
}
// 删除分组
const handleDeleteCate = (id: number) => {
apiFileCateDelete({
2022-04-08 06:46:31 +00:00
id,
2022-04-08 02:42:44 +00:00
}).then(() => {
getCateLists()
})
}
// 获取分组列表
const getCateLists = () => {
return new Promise((resolve, reject) => {
apiFileCateLists({
type: typeValue.value,
2022-04-08 06:46:31 +00:00
page_type: 1,
2022-04-08 02:42:44 +00:00
}).then((res: any) => {
const item: any[] = [
{
2022-04-08 06:46:31 +00:00
name: "全部",
id: "",
2022-04-08 02:42:44 +00:00
},
{
2022-04-08 06:46:31 +00:00
name: "未分组",
id: 0,
},
2022-04-08 02:42:44 +00:00
]
cateLists.value = res?.lists
cateLists.value.unshift(...item)
resolve(cateLists)
})
})
}
return {
cateId,
cateLists,
handleAddCate,
handleEditCate,
handleDeleteCate,
2022-04-08 06:46:31 +00:00
getCateLists,
2022-04-08 02:42:44 +00:00
}
}
2022-04-08 06:46:31 +00:00
2022-04-08 02:42:44 +00:00
// 处理文件的钩子函数
export function useFile(cateId: Ref<string>, type: Ref<any>, limit: Ref<number>) {
const moveId = ref(0)
const select: Ref<any[]> = ref([])
const fileParams = reactive({
2022-04-08 06:46:31 +00:00
name: "",
2022-04-08 02:42:44 +00:00
type: type,
2022-04-08 06:46:31 +00:00
cid: cateId,
2022-04-08 02:42:44 +00:00
})
const { pager, requestApi, resetPage } = usePages({
callback: apiFileList,
params: fileParams
})
2022-04-08 06:46:31 +00:00
2022-04-08 02:42:44 +00:00
const selectStatus = computed(
() => (id: number) => select.value.find((item: any) => item.id == id)
)
const getFileList = () => {
requestApi()
}
const refresh = () => {
resetPage()
}
const batchFileDelete = (id?: number[]) => {
2022-04-08 06:46:31 +00:00
let ids = id ? id : select.value.map((item: any) => item.id)
2022-04-08 02:42:44 +00:00
apiFileDelete({
2022-04-08 06:46:31 +00:00
ids,
}).then((res) => {
2022-04-08 02:42:44 +00:00
getFileList()
clearSelect()
})
}
const batchFileMove = () => {
2022-04-08 06:46:31 +00:00
let ids = select.value.map((item: any) => item.id)
2022-04-08 02:42:44 +00:00
apiFileMove({
ids,
2022-04-08 06:46:31 +00:00
cid: moveId.value,
}).then((res) => {
2022-04-08 02:42:44 +00:00
moveId.value = 0
getFileList()
clearSelect()
})
}
const selectFile = (item: any) => {
2022-04-08 06:46:31 +00:00
let index = select.value.findIndex((items: any) => items.id == item.id)
2022-04-08 02:42:44 +00:00
if (index != -1) {
select.value.splice(index, 1)
return
}
if (select.value.length == limit.value) {
if (limit.value == 1) {
select.value = []
select.value.push(item)
return
}
2022-04-08 06:46:31 +00:00
ElMessage.warning("已达到选择上限")
2022-04-08 02:42:44 +00:00
return
}
select.value.push(item)
}
const clearSelect = () => {
select.value = []
}
const cancelSelete = (id: number) => {
2022-04-08 06:46:31 +00:00
select.value = select.value.filter((item) => item.id != id)
2022-04-08 02:42:44 +00:00
}
return {
moveId,
pager,
fileParams,
select,
getFileList,
refresh,
batchFileDelete,
batchFileMove,
selectFile,
selectStatus,
clearSelect,
cancelSelete
}
}