xuxibiji.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. <template>
  2. <div class="xuxibiji">
  3. <div class="gap10">
  4. <div class="line_vertical"></div>
  5. <div class="font_size18 bold">{{$t('common.xuxibiji')}}</div>
  6. </div>
  7. <div class="addBtn flex-center gradient border_radius_10" @click="openAddDialog">
  8. <div class="gap10">
  9. <img :src="addIcon" alt="" style="width:30px;height:30px">
  10. <span class="font_size18">{{$t('common.add')}}{{$t('common.xuxibiji')}}</span>
  11. </div>
  12. </div>
  13. <div class="list_item padding16 border_radius_16 mt16 flex-center-between"
  14. v-for="(item, index) in list" :key="index">
  15. <div class="flex_1">
  16. <div class="bold font_size18">{{item.noteTitle}}</div>
  17. <div class="gray999 mt5">{{$t('common.genxinyu')}} {{item.updateTime || item.createTime}}</div>
  18. </div>
  19. <div>
  20. <el-button type="primary" plain size="large" @click="openAddDialog(item)">
  21. <el-icon><EditPen /></el-icon>
  22. <span class="ml10">{{$t('common.edit')}}</span>
  23. </el-button>
  24. <el-button type="danger" plain size="large" @click="handleDelete(item)">
  25. <el-icon><Delete /></el-icon>
  26. <span class="ml10">{{$t('common.delete')}}</span>
  27. </el-button>
  28. </div>
  29. </div>
  30. <Pagination
  31. :total="listTotal"
  32. :page-size="searchFom.pageSize"
  33. :current-page="searchFom.pageNum"
  34. @page-change="handlePageChange"
  35. />
  36. <BlockNoteEditorDialog ref="blockNoteEditorDialogRef" @submit="submit"/>
  37. </div>
  38. </template>
  39. <script setup>
  40. import addIcon from '@/assets/imgs/add.png'
  41. import BlockNoteEditorDialog from '@/components/BlockNoteEditorDialog.vue'
  42. import Pagination from '@/components/Pagination.vue'
  43. import { getnoteList,noteAdd,noteEdit,noteDel, getnoteDetail } from '@/api/note.js'
  44. import { ref, onMounted,reactive,watch } from 'vue'
  45. import DGTMessage from '@/utils/message'
  46. import { ElMessageBox } from 'element-plus'
  47. import { useI18n } from 'vue-i18n'
  48. const { t } = useI18n()
  49. import { useAppStore } from '@/pinia/appStore'
  50. const appStore = useAppStore()
  51. const props =defineProps({
  52. info: {
  53. type: Object,
  54. default: () => ({})
  55. }
  56. })
  57. //监听props.info.courseId变化
  58. watch(() => props.info.courseId, (newVal, oldVal) => {
  59. if(newVal !== oldVal){
  60. // 课程ID变化时,重置分页参数
  61. searchFom.courseId = newVal
  62. getList('init');
  63. }
  64. })
  65. const comments = ref('');
  66. const listTotal = ref(0);
  67. const searchFom = reactive({
  68. courseId: props.info.courseId,
  69. pageNum: 1,
  70. pageSize: 10,
  71. })
  72. const list = ref([]);
  73. const handlePageChange = (page) => {
  74. searchFom.pageNum = page
  75. // 这里可以添加获取数据的逻辑
  76. console.log('当前页:', page);
  77. getList();
  78. }
  79. // 查询寻找工作流列表
  80. const getList = async (type) => {
  81. if(type === 'init'){
  82. searchFom.pageNum = 1
  83. }
  84. const res = await getnoteList(searchFom)
  85. if(res.code === 200){
  86. listTotal.value = res.total
  87. list.value = res.rows
  88. }
  89. };
  90. // 打开添加对话框
  91. const blockNoteEditorDialogRef = ref(null)
  92. const openAddDialog = (item={}) => {
  93. blockNoteEditorDialogRef.value.openDialog(item);
  94. };
  95. // 提交表单
  96. const submit = (form) => {
  97. let params = {
  98. noteId: form.noteId,
  99. courseId: searchFom.courseId,
  100. noteTitle: form.noteTitle,
  101. noteContent: form.noteContent,
  102. }
  103. let req = noteAdd
  104. if(form.noteId){
  105. req = noteEdit
  106. }
  107. req(params).then(res => {
  108. console.log(res)
  109. if(res.code === 200){
  110. DGTMessage.success(t('workflowTrade.publishSuccess'))
  111. getList('init');
  112. }
  113. })
  114. };
  115. // 删除笔记
  116. const handleDelete = (item) => {
  117. ElMessageBox.confirm(t('common.confirm')+t('common.delete')+'?', t('common.delete'), {
  118. confirmButtonText: t('common.confirm'),
  119. cancelButtonText: t('common.cancel'),
  120. type: 'warning'
  121. }).then(() => {
  122. noteDel({id: item.noteId}).then(res => {
  123. if(res.code === 200){
  124. DGTMessage.success(t('common.delete')+t('common.success'))
  125. getList('init');
  126. }
  127. })
  128. }).catch(() => {
  129. DGTMessage.info(t('common.cancel')+t('common.delete'));
  130. });
  131. };
  132. </script>
  133. <style scoped lang="scss">
  134. .xuxibiji{
  135. .list_item{
  136. background: #F5F7FA;
  137. }
  138. .addBtn{
  139. cursor: pointer;
  140. margin-top: 20px;
  141. padding: 10px 20px;
  142. color: #fff;
  143. }
  144. }
  145. </style>