index.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <template>
  2. <div class="edit-task">
  3. <MenuPage only-key="/personal_workbench/edit_task" />
  4. <div class="edit-task__header">
  5. <div class="menu-container">
  6. <span class="name">{{ courseware_info.book_name }}</span>
  7. </div>
  8. <div class="courseware">
  9. <span class="name-path">{{ courseware_info.name_path }}</span>
  10. <div class="switch">
  11. <span :class="['link', { active: isEdit }]" @click="toggleEditMode(true)">内容编辑</span>
  12. <span :class="['link', { active: !isEdit }]" @click="toggleEditMode(false)">位置调整</span>
  13. </div>
  14. <div class="operator">
  15. <el-switch
  16. v-show="!isEdit"
  17. v-model="chinese"
  18. active-value="zh-Hant"
  19. inactive-value="zh-Hans"
  20. active-color="#ff4949"
  21. inactive-color="#165dff"
  22. active-text="繁"
  23. inactive-text="简"
  24. />
  25. <span v-if="!isEdit" class="link">
  26. <el-select v-model="lang" placeholder="请选择语言" size="mini" class="lang-select">
  27. <el-option v-for="item in langList" :key="item.type" :label="item.name" :value="item.type" />
  28. </el-select>
  29. </span>
  30. <span class="link" @click="showSetBackground">背景图</span>
  31. <span class="link" @click="saveCoursewareContent('quit')">退出编辑</span>
  32. <span class="link" @click="saveCoursewareContent">保存</span>
  33. <span class="link" @click="goBackBookList">返回教材列表</span>
  34. </div>
  35. </div>
  36. </div>
  37. <CreatePage ref="create" class="edit-task__content" @goBackPreview="goBackPreview" />
  38. </div>
  39. </template>
  40. <script>
  41. import CreatePage from '@/views/book/courseware/create/index.vue';
  42. import MenuPage from '@/views/personal_workbench/common/menu.vue';
  43. import * as OpenCC from 'opencc-js';
  44. import { GetBookCoursewareInfo, GetMyBookCoursewareTaskList } from '@/api/project';
  45. import { GetLanguageTypeList } from '@/api/book';
  46. export default {
  47. name: 'EditTaskPage',
  48. components: {
  49. CreatePage,
  50. MenuPage,
  51. },
  52. provide() {
  53. return {
  54. getLang: () => this.lang,
  55. getChinese: () => this.chinese,
  56. getLangList: () => this.langList,
  57. convertText: this.convertText,
  58. };
  59. },
  60. data() {
  61. return {
  62. id: this.$route.params.courseware_id,
  63. project_id: this.$route.query.project_id,
  64. courseware_info: {},
  65. courseware_list: [],
  66. isEdit: true, // 是否编辑状态
  67. opencc: OpenCC.Converter({ from: 'cn', to: 'tw' }),
  68. langList: [],
  69. lang: 'ZH',
  70. chinese: 'zh-Hans',
  71. };
  72. },
  73. created() {
  74. this.getBookCoursewareInfo();
  75. this.getMyBookCoursewareTaskList();
  76. },
  77. mounted() {
  78. this.$nextTick(() => {
  79. this.$watch(
  80. () => this.$refs.create.isEdit,
  81. (newVal) => {
  82. this.isEdit = newVal;
  83. },
  84. { immediate: true },
  85. );
  86. });
  87. },
  88. methods: {
  89. /**
  90. * 得到教材课件信息
  91. */
  92. getBookCoursewareInfo() {
  93. GetBookCoursewareInfo({ id: this.id }).then(({ courseware_info }) => {
  94. this.courseware_info = courseware_info;
  95. this.getLangList();
  96. });
  97. },
  98. goBackBookList() {
  99. this.$router.push({ path: '/personal_workbench/edit_task', query: { book_id: this.courseware_info.book_id } });
  100. },
  101. showSetBackground() {
  102. this.$refs.create.showSetBackground();
  103. },
  104. toggleEditMode(isEdit) {
  105. if (this.isEdit !== isEdit) {
  106. this.saveCoursewareContent('edit');
  107. }
  108. },
  109. saveCoursewareContent(type = '') {
  110. this.$refs.create.saveCoursewareContent(type);
  111. },
  112. goBackPreview() {
  113. this.$router.push({
  114. path: `/personal_workbench/edit_task/preview/${this.id}`,
  115. query: { project_id: this.project_id },
  116. });
  117. },
  118. getLangList() {
  119. GetLanguageTypeList({ book_id: this.courseware_info.book_id, is_contain_zh: 'true' }).then(
  120. ({ language_type_list }) => {
  121. this.langList = language_type_list;
  122. },
  123. );
  124. },
  125. /**
  126. * 得到我的教材课件任务列表
  127. */
  128. getMyBookCoursewareTaskList() {
  129. GetMyBookCoursewareTaskList({ project_id: this.project_id }).then(({ courseware_list }) => {
  130. this.courseware_list = courseware_list;
  131. });
  132. },
  133. /**
  134. * 文本转换
  135. * @param {string} text - 要转换的文本
  136. * @returns {string} - 转换后的文本
  137. */
  138. convertText(text) {
  139. if (this.chinese === 'zh-Hant' && this.opencc) {
  140. return this.opencc(text);
  141. }
  142. return text;
  143. },
  144. },
  145. };
  146. </script>
  147. <style lang="scss" scoped>
  148. @use '@/styles/mixin.scss' as *;
  149. .edit-task {
  150. height: calc(100% - 52px);
  151. min-height: calc(100% - 52px) !important;
  152. @include page-content(true);
  153. &__header {
  154. display: flex;
  155. align-items: center;
  156. border-top: $border;
  157. border-bottom: $border;
  158. .menu {
  159. .name {
  160. max-width: 260px;
  161. font-size: 16px;
  162. font-weight: bold;
  163. }
  164. }
  165. .courseware {
  166. .name-path {
  167. font-size: 14px;
  168. }
  169. .switch {
  170. padding: 4px 16px 4px 0;
  171. margin-right: 300px;
  172. border-right: $border;
  173. .link {
  174. padding: 4px;
  175. border-radius: 4px;
  176. &.active {
  177. background-color: $main-active-color;
  178. }
  179. }
  180. }
  181. .operator {
  182. .lang-select {
  183. :deep .el-input {
  184. width: 100px;
  185. }
  186. :deep .el-input__inner {
  187. height: 24px;
  188. line-height: 24px;
  189. background-color: #fff;
  190. }
  191. :deep .el-input__icon {
  192. line-height: 24px;
  193. }
  194. }
  195. }
  196. }
  197. }
  198. &__content {
  199. flex: 1;
  200. flex-direction: row !important;
  201. }
  202. }
  203. </style>