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

163 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-13 09:38:53 +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-13 09:38:53 +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-13 09:38:53 +00:00
name: val
2022-04-08 02:42:44 +00:00
}).then(() => {
getCateLists()
})
}
// 编辑分组
const handleEditCate = (val: string, id: number) => {
apiFileCateEdit({
id,
2022-04-13 09:38:53 +00:00
name: val
2022-04-08 02:42:44 +00:00
}).then(() => {
getCateLists()
})
}
// 删除分组
const handleDeleteCate = (id: number) => {
apiFileCateDelete({
2022-04-13 09:38:53 +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-13 09:38:53 +00:00
page_type: 1
2022-04-08 02:42:44 +00:00
}).then((res: any) => {
const item: any[] = [
{
2022-04-13 09:38:53 +00:00
name: '全部',
id: ''
2022-04-08 02:42:44 +00:00
},
{
2022-04-13 09:38:53 +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-13 09:38:53 +00:00
getCateLists
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-13 09:38:53 +00:00
name: '',
2022-04-08 02:42:44 +00:00
type: type,
2022-04-13 09:38:53 +00:00
cid: cateId
2022-04-08 02:42:44 +00:00
})
const { pager, requestApi, resetPage } = usePages({
callback: apiFileList,
params: fileParams
})
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-13 09:38:53 +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-18 07:44:18 +00:00
cid: moveId.value || 0
2022-04-13 09:38:53 +00:00
}).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-13 09:38:53 +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-13 09:38:53 +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
}
}