123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 |
- import {
- computed,
- defineComponent,
- onMounted,
- reactive,
- ref,
- watch
- } from 'vue';
- import styles from './baseIndex.module.less';
- import icon_back from './image/icon_back.svg';
- import { Button, Space, Tab, Tabs, showConfirmDialog, Image } from 'vant';
- import {
- api_lessonCoursewareFavoriteRemove,
- api_lessonCoursewareFavoriteSave
- } from '../courseware-list/api';
- import { NImage } from 'naive-ui';
- import { state } from '@/state';
- import TheFavorite from '@/components/the-favorite';
- import { useRouter } from 'vue-router';
- import { postMessage } from '@/helpers/native-message';
- import MEmpty from '@/components/m-empty';
- import MSearch from '@/components/m-search';
- import { api_musicSheetCategoriesPage, api_musicTagTree } from './api';
- import queryString from 'query-string';
- import { useRect } from '@vant/use';
- import { nextTick } from 'process';
- import iconDefaultCo from './image/icon-default-co.png';
- export default defineComponent({
- name: 'baseIndex-list',
- setup() {
- const router = useRouter();
- const popoverShow = ref(false);
- const bookVersionList = ref([] as any);
- // 返回
- const goback = () => {
- postMessage({ api: 'goBack' });
- };
- const forms = reactive({
- // currentGradeNum: null,
- musicTagId: null,
- keyword: null,
- page: 1,
- rows: 999
- // type: 'COURSEWARE'
- });
- const isShowGuide = ref(false);
- const data = reactive({
- list: [] as any[],
- loading: false,
- favoriteList: [] as any[],
- details: [] as any[],
- bookData: {} as any,
- showBook: false,
- book: {} as DOMRect
- });
- const wrapRef = ref();
- const wrapItemRef = ref([] as any);
- const getTanentList = async () => {
- try {
- const { data } = await api_musicTagTree();
- bookVersionList.value = data || [];
- if (bookVersionList.value.length > 0) {
- forms.musicTagId = bookVersionList.value[0].id;
- }
- } catch {
- //
- }
- };
- const getList = async () => {
- data.loading = true;
- const { musicTagId, ...music } = forms;
- const res = await api_musicSheetCategoriesPage({
- musicTagIds: [musicTagId],
- subjectId: state.user.data?.subjectId || '',
- ...music
- // currentGradeNum: forms.currentGradeNum ? forms.currentGradeNum : ''
- });
- if (res?.code === 200 && Array.isArray(res?.data?.rows)) {
- data.list = res.data.rows.map((item: any) => {
- item.load = false;
- item.key = Date.now() + item.id;
- return item;
- });
- }
- data.loading = false;
- isShowGuide.value = true;
- // nextTick(() => {
- // // 设置样式
- // const wrap = useRect(wrapRef);
- // const wrapItem = useRect(wrapItemRef.value[0]);
- // if (wrapItem.width > 0) {
- // wrapRef.value.style.width =
- // Math.floor(wrap.width / wrapItem.width) * wrapItem.width + 'px';
- // wrapRef.value.style.margin = '0 auto';
- // }
- // });
- };
- onMounted(async () => {
- // 安卓的状态栏
- postMessage({
- api: 'setStatusBarVisibility',
- content: {
- isVisibility: 0
- }
- });
- data.loading = true;
- await getTanentList();
- await getList();
- data.loading = false;
- // if (wrapItemRef.value && wrapItemRef.length > 0) {
- // console.log(wrapItemRef[0], '121');
- // }
- });
- const handleFavorite = async (item: any) => {
- if (item.favoriteFlag) {
- await api_lessonCoursewareFavoriteSave({
- lessonCoursewareId: item.id
- });
- } else {
- await api_lessonCoursewareFavoriteRemove({
- lessonCoursewareId: item.id
- });
- getList();
- }
- };
- let timer: any = null;
- const dubounce = (fn: any, delay: number = 300) => {
- if (timer) {
- clearTimeout(timer);
- }
- timer = setTimeout(fn, delay);
- };
- const onDetail = (item: any) => {
- // router.push({
- // path: '/co-ai-detail',
- // query: {
- // musicTagId: forms.musicTagId,
- // id: item.id,
- // name: item.name
- // }
- // });
- const query = queryString.stringify({
- musicTagId: forms.musicTagId,
- id: item.id,
- name: item.name
- });
- const url =
- location.origin + location.pathname + '#/co-ai-detail?' + query;
- console.log('🚀 ~ url:', url);
- postMessage({
- api: 'openWebView',
- content: {
- url,
- orientation: 0,
- isHideTitle: false,
- c_orientation: 0 // 0 横屏 1 竖屏
- }
- });
- };
- return () => (
- <div class={styles.container}>
- {/* <div class={styles.head} style={{ opacity: data.showBook ? 0 : '' }}>
- <div class={styles.back} onClick={goback}>
- <img src={icon_back} />
- </div>
- </div> */}
- <div class={styles.back} onClick={goback}>
- <img src={icon_back} />
- </div>
- <div class={styles.centerSearch}>
- <div id="coai-0">
- <MSearch
- class={[
- 'searchNotice'
- // data.searchNoticeShow ? styles.searchNoticeShow : ''
- ]}
- shape="round"
- background="transparent"
- clearable={false}
- placeholder="请输入关键字"
- // modelValue={forms.keyword}
- // onFocus={() => (data.searchNoticeShow = false)}
- // onBlur={val => {
- // musicForms.keyword = val?.trim() || '';
- // requestAnimationFrame(() => {
- // requestAnimationFrame(() => {
- // if (musicForms.keyword) {
- // data.searchNoticeShow = true;
- // }
- // });
- // });
- // }}
- onSearch={val => {
- forms.keyword = val;
- getList();
- }}
- />
- </div>
- </div>
- <div class={styles.section}>
- <div class={styles.directorySection}>
- <div class={styles.directionc}>
- {bookVersionList.value.map((item: any) => (
- <p
- class={[
- styles.dirItem,
- forms.musicTagId == item.id ? styles.active : ''
- ]}
- onClick={() => {
- forms.musicTagId = item.id;
- getList();
- }}>
- {item.name}
- </p>
- ))}
- </div>
- </div>
- <div class={styles.content}>
- <div
- class={[
- styles.wrap,
- data.list.length <= 0 && !data.loading ? styles.emtpyWrap : ''
- ]}
- ref={wrapRef}>
- {data.list.map((item, index) => {
- return (
- <div class={styles.wrapfirstI}>
- <div
- ref={(el: any) => (wrapItemRef.value[index] = el)}
- class={[
- styles.wrapItem,
- data.bookData.id === item.id && data.showBook
- ? styles.wrapItemHide
- : ''
- ]}
- key={item.key}
- onClick={() => onDetail(item)}>
- <div class={styles.item}>
- <NImage
- data-id={item.id}
- {...{ id: index == 0 ? 'courseware-0' : '' }}
- class={[styles.cover, item.load ? styles.loaded : '']}
- objectFit="cover"
- src={item.coverImg}
- fallbackSrc={iconDefaultCo}
- onLoad={() => {
- item.load = true;
- }}
- onError={() => {
- item.load = true;
- item.error = true;
- }}
- />
- </div>
- <div class={styles.name}>{item.name}</div>
- {/* <div
- id={index === 0 ? 'courseware-1' : ''}
- class={styles.favoriteBtn}
- onClick={(e: Event) => {
- e.stopPropagation();
- item.favoriteFlag = !item.favoriteFlag;
- dubounce(() => handleFavorite(item));
- }}>
- <TheFavorite isFavorite={item.favoriteFlag} />
- </div> */}
- </div>
- </div>
- );
- })}
- {data.list.length <= 0 && !data.loading && (
- <MEmpty image="list" description="暂无数据" />
- )}
- </div>
- </div>
- </div>
- </div>
- );
- }
- });
|