|
@@ -2,6 +2,8 @@ import { defineComponent, onMounted, reactive, ref } from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import {
|
|
|
NButton,
|
|
|
+ NCheckbox,
|
|
|
+ NCheckboxGroup,
|
|
|
// NBreadcrumb,
|
|
|
// NBreadcrumbItem,
|
|
|
// NScrollbar,
|
|
@@ -30,7 +32,8 @@ export default defineComponent({
|
|
|
fontSize: 18,
|
|
|
tableList: [] as any,
|
|
|
selectKey: null,
|
|
|
- details: {} as any
|
|
|
+ details: {} as any,
|
|
|
+ selectCheckboxs: [] as any
|
|
|
});
|
|
|
|
|
|
const getDetails = async () => {
|
|
@@ -42,7 +45,7 @@ export default defineComponent({
|
|
|
});
|
|
|
|
|
|
state.tableList = data || [];
|
|
|
- if (state.tableList.length) {
|
|
|
+ if (state.tableList.length > 0) {
|
|
|
const item =
|
|
|
state.tableList[0].lessonCoursewareDetailKnowledgeDetailList;
|
|
|
state.tableList[0].selected = true;
|
|
@@ -51,6 +54,10 @@ export default defineComponent({
|
|
|
state.selectKey = child.id;
|
|
|
await getDetail();
|
|
|
}
|
|
|
+ state.tableList.forEach((item: any) => {
|
|
|
+ item.checked = false;
|
|
|
+ item.indeterminate = false;
|
|
|
+ });
|
|
|
}
|
|
|
} catch {
|
|
|
//
|
|
@@ -74,12 +81,26 @@ export default defineComponent({
|
|
|
};
|
|
|
|
|
|
const onSubmit = () => {
|
|
|
- emit('confirm', {
|
|
|
- coverImg: PageEnum.THEORY_DEFAULT_COVER,
|
|
|
- title: state.details.name,
|
|
|
- materialId: state.selectKey,
|
|
|
- content: state.selectKey
|
|
|
+ const items: any[] = [];
|
|
|
+ for (const i in state.selectCheckboxs) {
|
|
|
+ const item = state.tableList[i];
|
|
|
+ if (Array.isArray(item.lessonCoursewareDetailKnowledgeDetailList)) {
|
|
|
+ items.push(...item.lessonCoursewareDetailKnowledgeDetailList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ console.log(items.length, 'items', items);
|
|
|
+
|
|
|
+ const result: any[] = [];
|
|
|
+ items.forEach(item => {
|
|
|
+ result.push({
|
|
|
+ coverImg: PageEnum.THEORY_DEFAULT_COVER,
|
|
|
+ title: item.name,
|
|
|
+ materialId: item.id,
|
|
|
+ content: item.id
|
|
|
+ });
|
|
|
});
|
|
|
+
|
|
|
+ emit('confirm', result);
|
|
|
};
|
|
|
|
|
|
onMounted(() => {
|
|
@@ -98,11 +119,16 @@ export default defineComponent({
|
|
|
? styles.empty
|
|
|
: ''
|
|
|
]}
|
|
|
- style={{ minHeight: '100%' }}>
|
|
|
- <NSpin show={show.value}>
|
|
|
+ style={{ height: '100%' }}>
|
|
|
+ <NSpin show={show.value} style={{ height: '100%' }}>
|
|
|
<div class={[styles.listSection]}>
|
|
|
{state.tableList.map((item: any, index: number) => (
|
|
|
- <div class={styles.treeParent} key={'parent' + index}>
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.treeParent,
|
|
|
+ item.selected && styles.treeParentSelected
|
|
|
+ ]}
|
|
|
+ key={'parent' + index}>
|
|
|
<div
|
|
|
class={[styles.treeItem, styles.parentItem]}
|
|
|
onClick={() => {
|
|
@@ -132,35 +158,85 @@ export default defineComponent({
|
|
|
styles.dir,
|
|
|
item.selected ? styles.dirSelect : ''
|
|
|
]}></span>
|
|
|
- {item.name}
|
|
|
+ <p>{item.name}</p>
|
|
|
</p>
|
|
|
+ <div
|
|
|
+ class={styles.checkbox}
|
|
|
+ onClick={(e: any) => {
|
|
|
+ e.stopPropagation();
|
|
|
+ }}>
|
|
|
+ <NCheckbox
|
|
|
+ checked={item.checked}
|
|
|
+ indeterminate={item.indeterminate}
|
|
|
+ onUpdate:checked={(val: boolean) => {
|
|
|
+ item.checked = val;
|
|
|
+
|
|
|
+ const child =
|
|
|
+ item.lessonCoursewareDetailKnowledgeDetailList ||
|
|
|
+ [];
|
|
|
+ if (val) {
|
|
|
+ const ids: any = [];
|
|
|
+ child.forEach((c: any) => {
|
|
|
+ ids.push(c.id);
|
|
|
+ });
|
|
|
+ state.selectCheckboxs[index] = ids;
|
|
|
+ } else {
|
|
|
+ state.selectCheckboxs[index] = [];
|
|
|
+ }
|
|
|
+ item.indeterminate = false;
|
|
|
+ }}></NCheckbox>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <NCheckboxGroup
|
|
|
+ value={state.selectCheckboxs[index]}
|
|
|
+ onUpdate:value={val => {
|
|
|
+ state.selectCheckboxs[index] = val;
|
|
|
|
|
|
- {item.selected &&
|
|
|
- item.lessonCoursewareDetailKnowledgeDetailList &&
|
|
|
- item.lessonCoursewareDetailKnowledgeDetailList.map(
|
|
|
- (child: any, j: number) => (
|
|
|
- <div
|
|
|
- key={'child' + j}
|
|
|
- class={[
|
|
|
- styles.treeItem,
|
|
|
- styles.childItem,
|
|
|
- styles.animation,
|
|
|
- state.selectKey === child.id
|
|
|
- ? styles.childSelect
|
|
|
- : ''
|
|
|
- ]}
|
|
|
- onClick={() => {
|
|
|
- if (state.selectKey === child.id) return;
|
|
|
- state.selectKey = child.id;
|
|
|
- getDetail();
|
|
|
- musicContentRef.value.$el.scrollTo(0, 0);
|
|
|
- }}>
|
|
|
- <span class={styles.childArrow}></span>
|
|
|
- <p class={styles.title}>{child.name}</p>
|
|
|
- </div>
|
|
|
- )
|
|
|
- )}
|
|
|
+ const child =
|
|
|
+ item.lessonCoursewareDetailKnowledgeDetailList ||
|
|
|
+ [];
|
|
|
+ if (val.length <= 0) {
|
|
|
+ item.checked = false;
|
|
|
+ item.indeterminate = false;
|
|
|
+ } else if (val.length === child.length) {
|
|
|
+ item.checked = true;
|
|
|
+ item.indeterminate = false;
|
|
|
+ } else {
|
|
|
+ item.checked = false;
|
|
|
+ item.indeterminate = true;
|
|
|
+ }
|
|
|
+ }}>
|
|
|
+ {item.selected &&
|
|
|
+ item.lessonCoursewareDetailKnowledgeDetailList &&
|
|
|
+ item.lessonCoursewareDetailKnowledgeDetailList.map(
|
|
|
+ (child: any, j: number) => (
|
|
|
+ <div
|
|
|
+ key={'child' + j}
|
|
|
+ class={[
|
|
|
+ styles.treeItem,
|
|
|
+ styles.childItem,
|
|
|
+ styles.animation,
|
|
|
+ state.selectKey === child.id
|
|
|
+ ? styles.childSelect
|
|
|
+ : ''
|
|
|
+ ]}
|
|
|
+ onClick={() => {
|
|
|
+ if (state.selectKey === child.id) return;
|
|
|
+ state.selectKey = child.id;
|
|
|
+ getDetail();
|
|
|
+ musicContentRef.value.$el.scrollTo(0, 0);
|
|
|
+ }}>
|
|
|
+ <span class={styles.childArrow}></span>
|
|
|
+ <p class={styles.title}>{child.name}</p>
|
|
|
+ <div
|
|
|
+ class={styles.checkbox}
|
|
|
+ onClick={(e: any) => e.stopPropagation()}>
|
|
|
+ <NCheckbox value={child.id}></NCheckbox>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ )
|
|
|
+ )}
|
|
|
+ </NCheckboxGroup>
|
|
|
</div>
|
|
|
))}
|
|
|
</div>
|