import { knowledgeTypeData } from '@/views/knowledge-manage/knowledgeTypeData'
import {
DataTableColumn,
NButton,
NDataTable,
NDrawerContent,
NInput,
NModal,
NSpace,
NTooltip,
useDialog,
useMessage
} from 'naive-ui'
import { InternalRowData } from 'naive-ui/es/data-table/src/interface'
import { defineComponent, onMounted, reactive } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import {
lessonCoursewareDetailPageKnowledgePoint,
lessonCoursewareDetailRemoveKnowledgePoint,
lessonCoursewareDetailUpOrDownKnowledgePoint
} from '../../api'
import AddseKnowledge from './AddseKnowledge'
import TheLink from '@/components/TheLink'
export default defineComponent({
name: 'CourseKnowledgePoint',
props: {
item: {
type: Object,
default: () => {}
},
courseTypeCode: {
type: String,
default: ''
}
},
emits: ['handleSuccess'],
setup(props, { emit }) {
const message = useMessage()
const dialog = useDialog()
const route = useRoute()
const state = reactive({
pagination: {
page: 1,
rows: 1000,
pageTotal: 0
},
searchForm: {
keyword: '',
knowledgePointId: ''
},
loading: false,
dataList: [] as any,
checkList: [] as string[],
visiableKnowledge: false
})
const columns = [
{
type: 'selection'
},
{
title: '知识点名称',
key: 'name',
render(row: any) {
return row.children ? (
<>
{row.name}({row.knowledgePointId})
>
) : (
{row.name}({row.knowledgePointId})
)
}
},
{
title: '课程类型',
key: 'courseTypeName',
width: 200,
ellipsis: true,
render(row: InternalRowData) {
return (
{{
default: () => row.courseTypeName,
trigger: () => row.courseTypeName
}}
)
}
},
{
title: '素材数量',
key: 'totalMaterialNum'
},
{
title: '建议学习时长',
key: 'totalMaterialTimeSecond',
render(row: any) {
return row.totalMaterialTimeSecond + 's'
}
},
{
title: '操作',
key: 'operation',
fixed: 'right',
render(row: InternalRowData, rowIndex: number) {
return (
handleRowMove('up', row)}
>
上移
handleRowMove('down', row)}
>
下移
)
}
}
]
const getList = async () => {
state.loading = true
try {
const { data } = await lessonCoursewareDetailPageKnowledgePoint({
...state.searchForm,
lessonCoursewareDetailId: props.item?.id,
page: state.pagination.page,
rows: state.pagination.rows
})
if (Array.isArray(data?.rows)) {
state.dataList = data.rows.map((n: any, i: number) => ({
...n,
relOrder: i + 1,
parentId: 0
}))
state.dataList.forEach((item: any) => {
if (item.children && item.children.length > 0) {
item.children.forEach((child: any, i: number) => {
child.relOrder = i + 1
child.parentId = item.id
})
}
})
console.log(state.dataList, 'dataList')
}
} catch {}
state.loading = false
}
onMounted(() => {
getList()
})
// 批量删除
const hanldeDelete = () => {
const d = dialog.warning({
title: '警告',
content: '是否确认删除知识点关联?',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: async () => {
d.loading = true
console.log(props.item)
try {
const res = await lessonCoursewareDetailRemoveKnowledgePoint({
id: props.item?.id,
knowledgePointIds: state.checkList.join(',')
})
message.success('删除成功')
state.checkList = []
getList()
emit('handleSuccess')
} catch (error) {}
d.loading = false
}
})
}
// 判断是否是最后一个
const checkLastItem = (row: any) => {
const dataList = state.dataList || []
if (row.parentId > 0) {
const childList = dataList.find((n: any) => n.id === row.parentId)
return row.relOrder === childList.children.length
} else {
return row.relOrder === dataList.length
}
}
// 表格行移动
const handleRowMove = (type: 'up' | 'down', row: any) => {
if (state.loading) return
const moveData = []
const index = row.relOrder - 1
const tempList =
row.parentId > 0 ? state.dataList : state.dataList.find((n: any) => n.id === row.parentId)
if (type === 'up') {
if (row.parentId <= 0) {
state.dataList[index] = state.dataList.splice(index - 1, 1, state.dataList[index])[0]
} else {
state.dataList.forEach((item: any) => {
if (item.id === row.parentId) {
item.children[index] = item.children.splice(index - 1, 1, item.children[index])[0]
}
})
}
} else {
if (row.parentId <= 0) {
state.dataList[index] = state.dataList.splice(index + 1, 1, state.dataList[index])[0]
} else {
state.dataList.forEach((item: any) => {
if (item.id === row.parentId) {
item.children[index] = item.children.splice(index + 1, 1, item.children[index])[0]
}
})
}
}
const moveList: any = []
let sort: number = 0
state.dataList.forEach((item: any, index: number) => {
item.relOrder = index + 1
if (item.children && item.children.length > 0) {
item.children.forEach((child: any, i: number) => {
child.relOrder = i + 1
child.parentId = item.id
sort = sort + 1
moveList.push({
sortNo: sort,
id: child.id
})
})
} else {
sort = sort + 1
moveList.push({
sortNo: sort,
id: item.id
})
}
})
console.log(moveList)
handleSaveRow(moveList)
}
// 记录排序后的位置
const handleSaveRow = async (moveData: any) => {
try {
await lessonCoursewareDetailUpOrDownKnowledgePoint(moveData)
// getList()
} catch {}
}
return () => (
(state.visiableKnowledge = true)}>
关联知识点
hanldeDelete()}
>
批量删除
{
state.pagination.page = 1
getList()
}}
>
搜索
{
state.searchForm.keyword = ''
state.pagination.page = 1
getList()
}}
>
重置
row.id}
v-model:columns={columns}
data={state.dataList}
onUpdateCheckedRowKeys={(value: any, rows: any) => {
let tempIds: any = []
rows.forEach((row: any) => {
if (!(row.children && row.children.length > 0)) {
tempIds.push(row.id)
}
})
state.checkList = tempIds
}}
>
{
state.visiableKnowledge = false
}}
onHandleSuccess={() => {
state.visiableKnowledge = false
getList()
emit('handleSuccess')
}}
/>
)
}
})