|  | @@ -0,0 +1,191 @@
 | 
	
		
			
				|  |  | +import MHeader from '@/components/m-header';
 | 
	
		
			
				|  |  | +import MSticky from '@/components/m-sticky';
 | 
	
		
			
				|  |  | +import { defineComponent, onMounted, reactive, ref } from 'vue';
 | 
	
		
			
				|  |  | +import styles from './index.module.less';
 | 
	
		
			
				|  |  | +import { useRoute, useRouter } from 'vue-router';
 | 
	
		
			
				|  |  | +import {
 | 
	
		
			
				|  |  | +  Button,
 | 
	
		
			
				|  |  | +  Cell,
 | 
	
		
			
				|  |  | +  CellGroup,
 | 
	
		
			
				|  |  | +  Checkbox,
 | 
	
		
			
				|  |  | +  CheckboxGroup,
 | 
	
		
			
				|  |  | +  Image,
 | 
	
		
			
				|  |  | +  List,
 | 
	
		
			
				|  |  | +  showToast
 | 
	
		
			
				|  |  | +} from 'vant';
 | 
	
		
			
				|  |  | +import iconBook from './images/icon-book.png';
 | 
	
		
			
				|  |  | +import request from '@/helpers/request';
 | 
	
		
			
				|  |  | +import MEmpty from '@/components/m-empty';
 | 
	
		
			
				|  |  | +import { browser } from '@/helpers/utils';
 | 
	
		
			
				|  |  | +import { postMessage } from '@/helpers/native-message';
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export default defineComponent({
 | 
	
		
			
				|  |  | +  name: 'wroing-book',
 | 
	
		
			
				|  |  | +  setup() {
 | 
	
		
			
				|  |  | +    const route = useRoute();
 | 
	
		
			
				|  |  | +    const router = useRouter();
 | 
	
		
			
				|  |  | +    const checkboxRefs = ref([] as any);
 | 
	
		
			
				|  |  | +    const forms = reactive({
 | 
	
		
			
				|  |  | +      type: route.query.type,
 | 
	
		
			
				|  |  | +      list: [] as any,
 | 
	
		
			
				|  |  | +      checked: [] as any,
 | 
	
		
			
				|  |  | +      isClick: false,
 | 
	
		
			
				|  |  | +      listState: {
 | 
	
		
			
				|  |  | +        dataShow: true, // 判断是否有数据
 | 
	
		
			
				|  |  | +        loading: false,
 | 
	
		
			
				|  |  | +        finished: false
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      params: {
 | 
	
		
			
				|  |  | +        page: 1,
 | 
	
		
			
				|  |  | +        rows: 20
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const getList = async () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        if (forms.isClick) return;
 | 
	
		
			
				|  |  | +        forms.isClick = true;
 | 
	
		
			
				|  |  | +        const res = await request.post('/edu-app/knowledgePoint/page', {
 | 
	
		
			
				|  |  | +          data: {
 | 
	
		
			
				|  |  | +            ...forms.params
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        forms.listState.loading = false;
 | 
	
		
			
				|  |  | +        const result = res.data || {};
 | 
	
		
			
				|  |  | +        // 处理重复请求数据
 | 
	
		
			
				|  |  | +        if (forms.list.length > 0 && result.current === 1) {
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        forms.list = forms.list.concat(result.rows || []);
 | 
	
		
			
				|  |  | +        forms.listState.finished = result.current >= result.pages;
 | 
	
		
			
				|  |  | +        forms.params.page = result.current + 1;
 | 
	
		
			
				|  |  | +        forms.listState.dataShow = forms.list.length > 0;
 | 
	
		
			
				|  |  | +        forms.isClick = false;
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        forms.listState.dataShow = false;
 | 
	
		
			
				|  |  | +        forms.listState.finished = true;
 | 
	
		
			
				|  |  | +        forms.isClick = false;
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const checkboxToggle = (index: number) => {
 | 
	
		
			
				|  |  | +      checkboxRefs.value[index].toggle();
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    const onSubmit = () => {
 | 
	
		
			
				|  |  | +      try {
 | 
	
		
			
				|  |  | +        if (forms.checked.length <= 0) {
 | 
	
		
			
				|  |  | +          showToast('请选择知识点');
 | 
	
		
			
				|  |  | +          return;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (forms.type === 'TEST') {
 | 
	
		
			
				|  |  | +          // 模拟测试
 | 
	
		
			
				|  |  | +          router.push({
 | 
	
		
			
				|  |  | +            path: '/examination-mode',
 | 
	
		
			
				|  |  | +            query: { knowledgePointIds: forms.checked.join(',') }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          router.push({
 | 
	
		
			
				|  |  | +            path: '/practice-mode',
 | 
	
		
			
				|  |  | +            query: { knowledgePointIds: forms.checked.join(',') }
 | 
	
		
			
				|  |  | +          });
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      } catch {
 | 
	
		
			
				|  |  | +        //
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +    onMounted(() => {
 | 
	
		
			
				|  |  | +      getList();
 | 
	
		
			
				|  |  | +    });
 | 
	
		
			
				|  |  | +    return () => (
 | 
	
		
			
				|  |  | +      <div class={styles.woringBook}>
 | 
	
		
			
				|  |  | +        <MSticky position="top">
 | 
	
		
			
				|  |  | +          <MHeader border={false} background="transparent">
 | 
	
		
			
				|  |  | +            {{
 | 
	
		
			
				|  |  | +              content: () => (
 | 
	
		
			
				|  |  | +                <div class={styles.woringHeader}>
 | 
	
		
			
				|  |  | +                  <i
 | 
	
		
			
				|  |  | +                    onClick={() => {
 | 
	
		
			
				|  |  | +                      if (browser().isApp) {
 | 
	
		
			
				|  |  | +                        postMessage({
 | 
	
		
			
				|  |  | +                          api: 'goBack'
 | 
	
		
			
				|  |  | +                        });
 | 
	
		
			
				|  |  | +                      } else {
 | 
	
		
			
				|  |  | +                        router.back();
 | 
	
		
			
				|  |  | +                      }
 | 
	
		
			
				|  |  | +                    }}
 | 
	
		
			
				|  |  | +                    class={[
 | 
	
		
			
				|  |  | +                      'van-badge__wrapper van-icon van-icon-arrow-left van-nav-bar__arrow',
 | 
	
		
			
				|  |  | +                      styles.leftArrow
 | 
	
		
			
				|  |  | +                    ]}></i>
 | 
	
		
			
				|  |  | +                  <span class={styles.title}>
 | 
	
		
			
				|  |  | +                    <i></i>
 | 
	
		
			
				|  |  | +                  </span>
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +              )
 | 
	
		
			
				|  |  | +            }}
 | 
	
		
			
				|  |  | +          </MHeader>
 | 
	
		
			
				|  |  | +        </MSticky>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <div class={styles.woringSecgtion}>
 | 
	
		
			
				|  |  | +          <div class={styles.title}>请选择知识点</div>
 | 
	
		
			
				|  |  | +          {forms.listState.dataShow ? (
 | 
	
		
			
				|  |  | +            <List
 | 
	
		
			
				|  |  | +              finished={forms.listState.finished}
 | 
	
		
			
				|  |  | +              finishedText=" "
 | 
	
		
			
				|  |  | +              class={[styles.container, styles.containerInformation]}
 | 
	
		
			
				|  |  | +              onLoad={getList}
 | 
	
		
			
				|  |  | +              immediateCheck={false}>
 | 
	
		
			
				|  |  | +              <CellGroup border={false}>
 | 
	
		
			
				|  |  | +                <CheckboxGroup v-model={forms.checked}>
 | 
	
		
			
				|  |  | +                  {forms.list.map((item: any, index: number) => (
 | 
	
		
			
				|  |  | +                    <Cell
 | 
	
		
			
				|  |  | +                      center
 | 
	
		
			
				|  |  | +                      onClick={() => checkboxToggle(index)}
 | 
	
		
			
				|  |  | +                      class={styles.cell}>
 | 
	
		
			
				|  |  | +                      {{
 | 
	
		
			
				|  |  | +                        icon: () => (
 | 
	
		
			
				|  |  | +                          <Image src={iconBook} class={styles.iconImg} />
 | 
	
		
			
				|  |  | +                        ),
 | 
	
		
			
				|  |  | +                        title: () => (
 | 
	
		
			
				|  |  | +                          <div class={styles.cellTitle}>{item.name}</div>
 | 
	
		
			
				|  |  | +                        ),
 | 
	
		
			
				|  |  | +                        label: () => (
 | 
	
		
			
				|  |  | +                          <p class={styles.cellContent}>
 | 
	
		
			
				|  |  | +                            <span>{item.questionNum}</span>道错题
 | 
	
		
			
				|  |  | +                          </p>
 | 
	
		
			
				|  |  | +                        ),
 | 
	
		
			
				|  |  | +                        'right-icon': () => (
 | 
	
		
			
				|  |  | +                          <Checkbox
 | 
	
		
			
				|  |  | +                            name={item.id}
 | 
	
		
			
				|  |  | +                            ref={el => (checkboxRefs.value[index] = el)}
 | 
	
		
			
				|  |  | +                            onClick={(e: MouseEvent) => e.stopPropagation()}
 | 
	
		
			
				|  |  | +                          />
 | 
	
		
			
				|  |  | +                        )
 | 
	
		
			
				|  |  | +                      }}
 | 
	
		
			
				|  |  | +                    </Cell>
 | 
	
		
			
				|  |  | +                  ))}
 | 
	
		
			
				|  |  | +                </CheckboxGroup>
 | 
	
		
			
				|  |  | +              </CellGroup>
 | 
	
		
			
				|  |  | +            </List>
 | 
	
		
			
				|  |  | +          ) : (
 | 
	
		
			
				|  |  | +            <MEmpty description="暂无知识点" />
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        {/* {forms.list.length <= 0 && !forms.loading && (
 | 
	
		
			
				|  |  | +                    <div class={styles.emptyContainer}>
 | 
	
		
			
				|  |  | +                      <MEmpty description="暂无知识点" />
 | 
	
		
			
				|  |  | +                    </div>
 | 
	
		
			
				|  |  | +                  )} */}
 | 
	
		
			
				|  |  | +        <MSticky position="bottom" varName="--bottom-height">
 | 
	
		
			
				|  |  | +          <div class={'btnGroup'}>
 | 
	
		
			
				|  |  | +            <Button round block type="primary" onClick={onSubmit}>
 | 
	
		
			
				|  |  | +              确认
 | 
	
		
			
				|  |  | +            </Button>
 | 
	
		
			
				|  |  | +          </div>
 | 
	
		
			
				|  |  | +        </MSticky>
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    );
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +});
 |