index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { defineComponent, onMounted, reactive } from 'vue';
  2. import styles from './index.module.less';
  3. import { NButton, NInput, NSelect, NSwitch, NTooltip } from 'naive-ui';
  4. import { usePrepareStore } from '/src/store/modules/prepareLessons';
  5. import { eventGlobal } from '/src/utils';
  6. export default defineComponent({
  7. name: 'courseware-head',
  8. setup(props, { emit, expose }) {
  9. const prepareStore = usePrepareStore();
  10. const forms = reactive({
  11. subjects: [] as any,
  12. openFlagEnable: true, // 是否支持修改公开状态
  13. autoPlay: true,
  14. name: '',
  15. openFlag: false
  16. });
  17. // 全选
  18. const chioseAll = (list: any) => {
  19. forms.subjects = list.map((child: any) => {
  20. return child.id;
  21. }) as any;
  22. };
  23. const getForms = () => {
  24. return forms;
  25. };
  26. onMounted(() => {
  27. eventGlobal.on('updateCoursewareHeadInfo', (item: any) => {
  28. forms.subjects = item.subjects;
  29. forms.openFlagEnable = item.openFlagEnable;
  30. forms.autoPlay = item.autoPlay;
  31. forms.name = item.name;
  32. forms.openFlag = item.openFlag;
  33. });
  34. });
  35. expose({
  36. getForms
  37. });
  38. return () => (
  39. <>
  40. <div class={styles.headerTitle}>
  41. <i class={styles.iconBook}></i>
  42. <span>{prepareStore.getBaseCourseware.name}</span>
  43. </div>
  44. <div class={styles.formContainer}>
  45. <div class={[styles.btnItem, styles.block]}>
  46. <span class={[styles.btnTitle]}>
  47. <span>*</span>标题
  48. </span>
  49. <NInput
  50. placeholder="请输入课件标题"
  51. v-model:value={forms.name}
  52. maxlength={20}
  53. clearable
  54. />
  55. </div>
  56. <div class={[styles.btnItem, styles.block]}>
  57. <span class={[styles.btnTitle]}>
  58. <span>*</span>声部
  59. </span>
  60. <NSelect
  61. placeholder="请选择声部(可多选)"
  62. class={styles.btnSubjectList}
  63. options={prepareStore.getSubjectList}
  64. labelField="name"
  65. valueField="id"
  66. multiple
  67. maxTagCount={1}
  68. size="small"
  69. v-model:value={forms.subjects}
  70. clearable
  71. v-slots={{
  72. action: () => (
  73. <>
  74. <NButton
  75. text
  76. style=" --n-width: 100% "
  77. size="small"
  78. onClick={() => chioseAll(prepareStore.getSubjectList)}>
  79. 全选
  80. </NButton>
  81. </>
  82. )
  83. }}
  84. />
  85. </div>
  86. <div class={styles.btnItem}>
  87. <span class={styles.btnTitle}>
  88. 自动播放
  89. <NTooltip style={{ maxWidth: '200px' }} showArrow={false}>
  90. {{
  91. trigger: () => <i class={styles.iconQuestion}></i>,
  92. default: () =>
  93. '开启自动播放后,课件内视频、音频资源将自动播放'
  94. }}
  95. </NTooltip>
  96. </span>
  97. <NSwitch v-model:value={forms.autoPlay} />
  98. </div>
  99. <div class={styles.btnItem}>
  100. <span class={styles.btnTitle}>公开</span>
  101. {!forms.openFlagEnable ? (
  102. <NTooltip style={{ maxWidth: '200px' }} showArrow={false}>
  103. {{
  104. trigger: () => (
  105. <NSwitch
  106. v-model:value={forms.openFlag}
  107. disabled={!forms.openFlagEnable}
  108. />
  109. ),
  110. default: () =>
  111. '为尊重课件原作者,在“相关课件”中添加的课件不支持公开'
  112. }}
  113. </NTooltip>
  114. ) : (
  115. <NSwitch
  116. v-model:value={forms.openFlag}
  117. disabled={!forms.openFlagEnable}
  118. />
  119. )}
  120. </div>
  121. </div>
  122. </>
  123. );
  124. }
  125. });