index.tsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { NButton, NSpace, NTabPane, NTabs } from 'naive-ui';
  2. import { defineComponent, nextTick, reactive } from 'vue';
  3. import styles from './index.module.less';
  4. import { useRoute, useRouter } from 'vue-router';
  5. import List from './components/list';
  6. import { api_knowledgeWikiCategoryType_page } from '/src/views/content-information/api';
  7. import TheEmpty from '/src/components/TheEmpty';
  8. import { PageEnum } from '/src/enums/pageEnum';
  9. export default defineComponent({
  10. name: 'content-instrument',
  11. emits: ['confirm', 'close'],
  12. setup(props, { emit }) {
  13. const state = reactive({
  14. tabValue: '',
  15. categoryList: [] as any,
  16. loading: false,
  17. selectItems: [] as any
  18. });
  19. const getCategoryList = async () => {
  20. state.loading = true;
  21. try {
  22. const { data } = await api_knowledgeWikiCategoryType_page({
  23. type: 'MUSICIAN',
  24. page: 1,
  25. rows: 99
  26. });
  27. state.categoryList = data.rows || [];
  28. if (state.categoryList.length) {
  29. nextTick(() => {
  30. state.tabValue = 'name-' + state.categoryList[0].id;
  31. });
  32. }
  33. } catch {
  34. //
  35. }
  36. state.loading = false;
  37. };
  38. getCategoryList();
  39. // 添加
  40. const onSubmit = async () => {
  41. const tempList: any = [];
  42. state.selectItems.forEach((item: any) => {
  43. tempList.push({
  44. coverImg: PageEnum.MUSICIAN_DEFAULT_COVER,
  45. title: '音乐家-' + item.name,
  46. materialId: item.id,
  47. content: item.id
  48. });
  49. });
  50. emit('confirm', tempList);
  51. };
  52. return () => (
  53. <div class={styles.container}>
  54. <div class={styles.wrap}>
  55. <div
  56. class={[
  57. styles.listWrap,
  58. !state.loading &&
  59. state.categoryList.length <= 0 &&
  60. styles.listWrapEmpty
  61. ]}>
  62. {!state.loading && state.categoryList.length <= 0 && (
  63. <TheEmpty description="暂无音乐家" />
  64. )}
  65. <div style={{ minHeight: '55vh' }}>
  66. <NTabs
  67. defaultValue="myResources"
  68. paneClass={styles.paneTitle}
  69. justifyContent="center"
  70. // animated
  71. paneWrapperClass={styles.paneWrapperContainer}
  72. onUpdate:value={(val: any) => {
  73. sessionStorage.setItem('content-instrument-tab', val);
  74. }}
  75. v-model:value={state.tabValue}>
  76. {state.categoryList.map((category: any) => (
  77. <NTabPane name={`name-${category.id}`} tab={category.name}>
  78. <List
  79. selectItems={state.selectItems}
  80. categoryId={category.id}
  81. categoryChildList={category.childrenList}
  82. onConfirm={(ids: any) => {
  83. state.selectItems = ids || [];
  84. }}
  85. />
  86. </NTabPane>
  87. ))}
  88. </NTabs>
  89. </div>
  90. </div>
  91. </div>
  92. <NSpace class={styles.btnGroup} justify="center">
  93. <NButton round onClick={() => emit('close')}>
  94. 取消
  95. </NButton>
  96. <NButton round type="primary" onClick={onSubmit} disabled={!state.selectItems.length}>
  97. 确认添加
  98. </NButton>
  99. </NSpace>
  100. </div>
  101. );
  102. }
  103. });