Browse Source

添加配置

lex 9 months ago
parent
commit
e8c4158b29

+ 34 - 38
src/views/educational-manage/component/material-list.tsx

@@ -27,6 +27,7 @@ import { getLessonType, lessonType } from '@/views/knowledge-manage/knowledgeTyp
 import { filterTimes, getTimes } from '@/utils/dateUtil'
 import { useRoute } from 'vue-router'
 import { subjectPage } from '@views/system-manage/subject-manage/api'
+import TheTooltip from '@/components/TheTooltip'
 
 const classType: { [_: string]: any } = {
   VIDEO: '视频',
@@ -106,20 +107,13 @@ export default defineComponent({
               <NDescriptions labelPlacement="left" column={1}>
                 <NDescriptionsItem label="素材名称">{row.name}</NDescriptionsItem>
                 <NDescriptionsItem label="素材编号">{row.id}</NDescriptionsItem>
-                <NDescriptionsItem label="素材分类">{row.materialCategoryName}</NDescriptionsItem>
+                <NDescriptionsItem label="素材分类">
+                  <TheTooltip content={row.materialCategoryName} />
+                </NDescriptionsItem>
               </NDescriptions>
             )
           }
         },
-        // {
-        //   title: '编号',
-        //   key: 'id'
-        // },
-
-        // {
-        //   title: '素材分类',
-        //   key: 'materialCategoryName'
-        // }, 分段编号
         {
           title: '素材信息',
           key: 'sn',
@@ -150,29 +144,26 @@ export default defineComponent({
             )
           }
         },
-        // {
-        //   title: '课程类型',
-        //   key: 'courseTypeName',
-        //   width: 200,
-        //   ellipsis: true,
-        //   render(row: InternalRowData) {
-        //     return (
-        //       <NTooltip placement="top-start">
-        //         {{
-        //           default: () => row.courseTypeName,
-        //           trigger: () => row.courseTypeName
-        //         }}
-        //       </NTooltip>
-        //     )
-        //   }
-        // },
-        // {
-        //   title: '建议学习时长',
-        //   key: 'adviseStudyTimeSecond',
-        //   render(row: InternalRowData) {
-        //     return row.adviseStudyTimeSecond ? row.adviseStudyTimeSecond + '秒' : ''
-        //   }
-        // },
+        {
+          title: '关联曲目',
+          key: 'type',
+          render(row: any) {
+            return (
+              <NDescriptions labelPlacement="left" column={1}>
+                <NDescriptionsItem label="曲目名称">
+                  <TheTooltip content={row.materialRef?.relateMaterialInfo?.name} />
+                </NDescriptionsItem>
+                <NDescriptionsItem label="曲目状态">
+                  {row.materialRef?.relateMaterialInfo
+                    ? row.materialRef?.relateMaterialInfo?.status
+                      ? '启用'
+                      : '停用'
+                    : ''}
+                </NDescriptionsItem>
+              </NDescriptions>
+            )
+          }
+        },
         {
           title: '操作信息',
           key: 'createTime',
@@ -188,10 +179,6 @@ export default defineComponent({
             )
           }
         },
-        // {
-        //   title: '上传人',
-        //   key: 'operatorName'
-        // },
         {
           title: '状态',
           key: 'delFlag',
@@ -287,7 +274,16 @@ export default defineComponent({
         const { data } = await fetchMaterialList(body)
         state.loading = false
         state.pagination.pageTotal = Number(data.total)
-        state.dataList = data.rows || []
+        const result = data.rows || []
+        result.forEach((item: any) => {
+          if (item.materialRefs && item.materialRefs.length > 0) {
+            item.materialRef = item.materialRefs[0]
+          } else {
+            item.materialRef = {}
+          }
+        })
+
+        state.dataList = result || []
       } catch {
         state.loading = false
       }

+ 91 - 40
src/views/educational-manage/model/addMaterial.tsx

@@ -9,16 +9,12 @@ import {
   NForm,
   NFormItem,
   NInput,
-  NInputNumber,
-  NModal,
   NRadio,
   NRadioGroup,
   NSelect,
   NSpace,
   NSpin,
   NSwitch,
-  NTag,
-  NUpload,
   useMessage
 } from 'naive-ui'
 import { defineComponent, inject, onMounted, reactive, ref, watch } from 'vue'
@@ -40,9 +36,10 @@ export default defineComponent({
     const saveModel = reactive({
       name: '',
       sn: '', //序号
-      materialCategoryId: '', //素材分类
+      materialCategoryId: null, //素材分类
       // adviseStudyTimeSecond: null,
       type: materialType.视频,
+      materialRefs: [] as any,
       content: '', // 视频、图片链接或者是曲目编号
       courseTypeCode: [], // 课程类型
       enableFlag: true //启用状态
@@ -63,7 +60,17 @@ export default defineComponent({
           })
           if (saveModel.type === 'SONG') {
             musicOpentions.music = {
-              musicSheetName: res.data.contentDesc
+              name: res.data.contentDesc
+            }
+          } else {
+            if (res.data.materialRefs && res.data.materialRefs.length > 0) {
+              res.data.materialRefs.forEach((row: any) => {
+                saveModel.materialRefs.push({
+                  resourceId: row.resourceId,
+                  knowledgeType: row.knowledgeType,
+                  resourceName: row.resourceName
+                })
+              })
             }
           }
           console.log('🚀 ~ saveModel', saveModel)
@@ -151,7 +158,8 @@ export default defineComponent({
     // 添加曲谱
     const musicOpentions = reactive({
       show: false,
-      music: '' as any
+      music: '' as any,
+      type: ''
     })
     const hanldeSelectMusic = (musicItem: any) => {
       musicOpentions.music = musicItem
@@ -184,6 +192,7 @@ export default defineComponent({
               <NFormItem label="素材分类" path="materialCategoryId">
                 <NCascader
                   v-model:value={saveModel.materialCategoryId}
+                  placeholder="请选择素材分类"
                   options={categoryList}
                   checkStrategy="child"
                   childrenField="subMaterialCategoryList"
@@ -226,40 +235,65 @@ export default defineComponent({
               </NRadioGroup>
             </NFormItem>
 
-            <NFormItem label="上传素材" path="content" ref={formContentRef} required>
-              {saveModel.type === materialType.曲目 ? (
-                <NSpace>
-                  <NButton
+            <NSpace justify="space-between" item-style={{ flex: 1 }}>
+              <NFormItem label="上传素材" path="content" ref={formContentRef} required>
+                {saveModel.type === materialType.曲目 ? (
+                  <NSpace>
+                    <NButton
+                      disabled={props.isLook}
+                      type="primary"
+                      onClick={() => {
+                        musicOpentions.show = true
+                        musicOpentions.type = 'upload'
+                      }}
+                    >
+                      选择曲谱
+                    </NButton>
+                    {musicOpentions.music && (
+                      <NInput disabled value={musicOpentions.music?.name}></NInput>
+                    )}
+                  </NSpace>
+                ) : (
+                  <UploadFile
+                    accept={
+                      saveModel.type === materialType.视频
+                        ? 'video/*'
+                        : saveModel.type === materialType.图片
+                        ? 'image/*'
+                        : ''
+                    }
+                    path="courseware/"
+                    listType={saveModel.type === materialType.图片 ? 'image-card' : 'image'}
+                    v-model:fileList={saveModel.content}
+                    size={1024}
                     disabled={props.isLook}
-                    type="primary"
-                    onClick={() => (musicOpentions.show = true)}
-                  >
-                    选择曲谱
-                  </NButton>
-                  {musicOpentions.music && (
-                    <NInput readonly value={musicOpentions.music?.musicSheetName}></NInput>
-                  )}
-                </NSpace>
-              ) : (
-                <UploadFile
-                  accept={
-                    saveModel.type === materialType.视频
-                      ? 'video/*'
-                      : saveModel.type === materialType.图片
-                      ? 'image/*'
-                      : ''
-                  }
-                  path="courseware/"
-                  listType={saveModel.type === materialType.图片 ? 'image-card' : 'image'}
-                  v-model:fileList={saveModel.content}
-                  size={1024}
-                  disabled={props.isLook}
-                  onReadFileInputEventAsArrayBuffer={() => {
-                    formContentRef.value?.restoreValidation()
-                  }}
-                ></UploadFile>
+                    onReadFileInputEventAsArrayBuffer={() => {
+                      formContentRef.value?.restoreValidation()
+                    }}
+                  ></UploadFile>
+                )}
+              </NFormItem>
+
+              {saveModel.type !== 'SONG' && (
+                <NFormItem label="关联曲目">
+                  <NSpace>
+                    <NButton
+                      disabled={props.isLook}
+                      type="primary"
+                      onClick={() => {
+                        musicOpentions.show = true
+                        musicOpentions.type = 'correlation'
+                      }}
+                    >
+                      选择曲谱
+                    </NButton>
+                    {saveModel.materialRefs.length > 0 && (
+                      <NInput disabled value={saveModel.materialRefs[0]?.resourceName}></NInput>
+                    )}
+                  </NSpace>
+                </NFormItem>
               )}
-            </NFormItem>
+            </NSpace>
           </NForm>
           {props.isLook ? (
             ''
@@ -276,7 +310,24 @@ export default defineComponent({
         </NSpin>
         <NDrawer width="80vw" height="100vh" v-model:show={musicOpentions.show}>
           <NDrawerContent title="选择曲谱" closable>
-            <SelectMusicSheet onSelect={(row: any) => hanldeSelectMusic(row)} />
+            <SelectMusicSheet
+              type={musicOpentions.type}
+              onSelect={(row: any) => {
+                console.log(musicOpentions.type, row)
+                if (musicOpentions.type === 'upload') {
+                  hanldeSelectMusic(row)
+                } else {
+                  saveModel.materialRefs = [
+                    {
+                      resourceId: row.id,
+                      knowledgeType: 'MUSIC',
+                      resourceName: row.name
+                    }
+                  ]
+                  musicOpentions.show = false
+                }
+              }}
+            />
           </NDrawerContent>
         </NDrawer>
       </div>

+ 93 - 43
src/views/educational-manage/model/selectMusicSheet.tsx

@@ -1,15 +1,32 @@
 import Pagination from '@/components/pagination'
 import SaveForm from '@/components/save-form'
 import { musicSheetPage, musicTagPage } from '@/views/content-manage/api'
-import {subjectPage} from '@/views/system-manage/api'
-import {NButton, NImage, NSpace, NTag, NDataTable, NFormItem, NInput, NSelect, NCascader} from 'naive-ui'
+import { subjectPage, sysApplicationPage } from '@/views/system-manage/api'
+import {
+  NButton,
+  NImage,
+  NSpace,
+  NTag,
+  NDataTable,
+  NFormItem,
+  NInput,
+  NSelect,
+  NCascader
+} from 'naive-ui'
 import { defineComponent, onMounted, reactive, ref } from 'vue'
-import { accompanimentTypeArray, audioTypeArray } from '@/utils/searchArray'
 import styles from './index.module.less'
-import {musicSheetCategoriesQueryTree} from "@views/music-library/api";
+import { musicSheetCategoriesQueryTree } from '@views/music-library/api'
+import { appKey } from '@/utils/constant'
+import TheTooltip from '@/components/TheTooltip'
 
 export default defineComponent({
   name: 'selectMusicSheet',
+  props: {
+    type: {
+      type: String,
+      default: 'upload'
+    }
+  },
   emits: ['select'],
   setup(props, { emit }) {
     const state = reactive({
@@ -26,11 +43,13 @@ export default defineComponent({
         // playMode: null,
         // accompanimentType: null,
         status: null,
-        topFlag: null
+        topFlag: null,
+        useAppId: [] as any
       },
       dataList: [] as any,
       subjectList: [] as any,
       musicSheetCategories: [] as any,
+      useProjectData: [] as any, // 适用项目行数据
       visiableMusic: false,
       musicOperation: 'add',
       musicData: {} as any
@@ -46,6 +65,31 @@ export default defineComponent({
           }
         },
         {
+          title: '适用项目',
+          key: 'musicSheetExtend.useApplicationNames',
+          redner(row: any) {
+            return (
+              <TheTooltip
+                content={
+                  row.musicSheetExtend && row.musicSheetExtend.useApplicationNames
+                    ? row.musicSheetExtend.useApplicationNames
+                    : ''
+                }
+              />
+            )
+          }
+        },
+        {
+          title: '状态',
+          minWidth: '50px',
+          key: 'status',
+          render(row: any) {
+            return (
+              <NTag type={row.status ? 'primary' : 'default'}>{row.status ? '启用' : '停用'}</NTag>
+            )
+          }
+        },
+        {
           title: '曲目封面',
           key: 'musicCover',
           render(row: any) {
@@ -67,7 +111,7 @@ export default defineComponent({
           title: '可用声部',
           key: 'subjectNames',
           render(row: any) {
-            return <NTag type="primary">{row.subjectNames}</NTag>
+            return <TheTooltip content={row.subjectNames} />
           }
         },
         {
@@ -82,19 +126,6 @@ export default defineComponent({
             )
           }
         },
-        // {
-        //   title: '能否转简谱',
-        //   key: 'notation',
-        //   render(row: any) {
-        //     return (
-        //       <NTag type={row.notation ? 'primary' : 'default'}>{row.notation ? '是' : '否'}</NTag>
-        //     )
-        //   }
-        // },
-        // {
-        //   title: '排序',
-        //   key: 'sortNumber'
-        // },
         {
           title: '操作',
           key: 'operation',
@@ -118,7 +149,10 @@ export default defineComponent({
           page: state.pagination.page,
           rows: state.pagination.rows,
           ...state.searchForm,
-          status: 1
+          useAppId: state.searchForm.useAppId
+            ? state.searchForm.useAppId.join(',')
+            : state.searchForm.useAppId,
+          status: props.type === 'upload' ? 1 : null
         })
         state.loading = false
         state.pagination.pageTotal = Number(data.total)
@@ -128,6 +162,26 @@ export default defineComponent({
       }
     }
 
+    // app列表
+    const initUseAppList = async () => {
+      try {
+        const appKeys = Object.keys(appKey)
+        const { data } = await sysApplicationPage({ page: 1, rows: 999 })
+        const tempList = data.rows || []
+        state.useProjectData = []
+        const filter = tempList.filter((next: any) => {
+          return appKeys.includes(next.appKey)
+        })
+        filter.forEach((item: any) => {
+          state.useProjectData.push({
+            ...item,
+            label: item.appName,
+            value: item.id
+          })
+        })
+      } catch {}
+    }
+
     // 获取标签
     const getTagList = async () => {
       try {
@@ -165,6 +219,7 @@ export default defineComponent({
     onMounted(() => {
       getTagList()
       getSubjectList()
+      initUseAppList()
       getList()
     })
     return () => (
@@ -185,13 +240,13 @@ export default defineComponent({
           </NFormItem>
           <NFormItem label="曲目分类" path="musicCategoryId">
             <NCascader
-                valueField="id"
-                labelField="name"
-                children-field="musicSheetCategoriesList"
-                placeholder="请选择曲目分类"
-                v-model:value={state.searchForm.musicCategoryId}
-                options={state.musicSheetCategories}
-                clearable
+              valueField="id"
+              labelField="name"
+              children-field="musicSheetCategoriesList"
+              placeholder="请选择曲目分类"
+              v-model:value={state.searchForm.musicCategoryId}
+              options={state.musicSheetCategories}
+              clearable
             />
           </NFormItem>
           <NFormItem label="声部" path="musicSubject">
@@ -202,22 +257,17 @@ export default defineComponent({
               clearable
             />
           </NFormItem>
-          {/*<NFormItem label="播放类型" path="playMode">*/}
-          {/*  <NSelect*/}
-          {/*    placeholder="请选择播放类型"*/}
-          {/*    v-model:value={state.searchForm.playMode}*/}
-          {/*    options={audioTypeArray}*/}
-          {/*    clearable*/}
-          {/*  />*/}
-          {/*</NFormItem>*/}
-          {/*<NFormItem label="伴奏类型" path="accompanimentType">*/}
-          {/*  <NSelect*/}
-          {/*    placeholder="请选择伴奏类型"*/}
-          {/*    v-model:value={state.searchForm.accompanimentType}*/}
-          {/*    options={accompanimentTypeArray}*/}
-          {/*    clearable*/}
-          {/*  />*/}
-          {/*</NFormItem>*/}
+          <NFormItem label="适用项目" path="useAppId">
+            <NSelect
+              placeholder="请选择适用项目"
+              v-model:value={state.searchForm.useAppId}
+              options={state.useProjectData}
+              multiple
+              maxTagCount={1}
+              clearable
+              filterable
+            />
+          </NFormItem>
           <NFormItem>
             <NSpace>
               <NButton type="primary" onClick={onSearch}>

+ 7 - 2
src/views/knowledge-manage/knowledge-list/index.tsx

@@ -20,12 +20,13 @@ import { defineComponent, onMounted, reactive, ref, provide } from 'vue'
 import { fetchKnowledgeList, fetchDelKnowledge, knowledgePointStatus } from '../api'
 import { knowledgeTypeData, lessonType } from '../knowledgeTypeData'
 import KnowledgeModel from './component/knowledgeModel'
-import { useRouter } from 'vue-router'
+import { useRoute, useRouter } from 'vue-router'
 import { filterTimes, getTimes } from '@/utils/dateUtil'
 export default defineComponent({
   name: 'knowledge-manage',
   setup() {
     const router = useRouter()
+    const route = useRoute()
     const state = reactive({
       loading: false,
       pagination: {
@@ -40,7 +41,7 @@ export default defineComponent({
     })
 
     const searchForm = reactive({
-      keyword: null,
+      keyword: null as any,
       time: null,
       courseTypeCode: null,
       operatorId: null,
@@ -74,6 +75,10 @@ export default defineComponent({
     }
 
     onMounted(() => {
+      console.log(route.query)
+      if (route.query.keyword) {
+        searchForm.keyword = route.query.keyword
+      }
       getList()
     })
 

+ 1 - 1
src/views/system-manage/menu-manage/index.tsx

@@ -139,7 +139,7 @@ export default defineComponent({
     const getList = async () => {
       try {
         state.loading = true
-        state.expandedRowKeys = []
+        // state.expandedRowKeys = []
         const { data } = await sysMenuPage({
           ...state.searchForm,
           parentId: 0,

+ 10 - 0
src/views/teaching-manage/api.ts

@@ -597,4 +597,14 @@ export const api_openFileImportInfoSave = (data: any) => {
     method: 'post',
     data
   } as any)
+}
+
+/**
+ * 课件导入,单元测验导入,课后训练导入
+ */
+export const api_removeTraining = (id: any) => {
+  return request({
+    url: `/cbs-app/lessonCoursewareDetail/removeTraining/` + id,
+    method: 'post'
+  } as any)
 }

+ 52 - 13
src/views/teaching-manage/courseware-manage/components/courseConfiguration.tsx

@@ -33,7 +33,8 @@ import {
   lessonCoursewareDetailRemove,
   lessonCoursewareExaminationMapperQueryAll,
   lessonCoursewareDetailLock,
-  api_openFileImportInfoSave
+  api_openFileImportInfoSave,
+  api_removeTraining
 } from '../../api'
 import styles from '../index.module.less'
 import { EditFilled, DeleteFilled, LockFilled, UnlockFilled } from '@vicons/antd'
@@ -42,6 +43,7 @@ import SelectAfterClassTraining from '../model/selectAfterClassTraining'
 import AddUnitTest from '../model/AddUnitTest'
 import TheLink from '@/components/TheLink'
 import { api_uploadFile } from '@/plugins/uploadFile'
+import Button from 'naive-ui/es/button/src/Button'
 
 export default defineComponent({
   name: 'courseConfiguration',
@@ -203,6 +205,25 @@ export default defineComponent({
       })
     }
 
+    /** 删除选择的作业 */
+    const hanldeRemoveTraning = (item: any) => {
+      const d = dialog.warning({
+        title: '警告',
+        content: `是否确认删除作业?`,
+        positiveText: '确定',
+        negativeText: '取消',
+        onPositiveClick: async () => {
+          d.loading = true
+          try {
+            const res = await api_removeTraining(item.id)
+            message.success('删除成功')
+            getDetail()
+          } catch (error) {}
+          d.loading = false
+        }
+      })
+    }
+
     const customRequest_importData = reactive({
       loading: false,
       dataType: 'EXAMINATION',
@@ -305,7 +326,6 @@ export default defineComponent({
                     type: 'render',
                     render: () => (
                       <NButton
-                        v-auth="downloadAfter-schoolTraining1702252098317451265"
                         size="large"
                         quaternary
                         tag="a"
@@ -323,7 +343,7 @@ export default defineComponent({
                   下载模板
                 </NButton>
               </NDropdown>
-              <div v-auth="importCourseDate1702252535879827458">
+              <div>
                 <NUpload
                   multiple={false}
                   ref={(el: any) => (customRequest_importData.importRef = el)}
@@ -392,16 +412,35 @@ export default defineComponent({
                                 <td>课后作业</td>
                                 <td style={{ 'text-align': 'right' }}>
                                   {item.lessonTrainingId ? (
-                                    <TheLink
-                                      // to={`/#/afterClassTrainingDetail?id=${item.lessonTrainingId}&name=${item.lessonTrainingName}&courseTypeCode=TRUMPET_SINGLE`}
-                                      authLink="afterClassTrainingManage1599968711187746818"
-                                      to={{
-                                        path: '/afterClassTrainingManage',
-                                        query: { id: item.lessonTrainingId }
-                                      }}
-                                    >
-                                      {item.lessonTrainingName}
-                                    </TheLink>
+                                    <>
+                                      <TheLink
+                                        // to={`/#/afterClassTrainingDetail?id=${item.lessonTrainingId}&name=${item.lessonTrainingName}&courseTypeCode=TRUMPET_SINGLE`}
+                                        authLink="afterClassTrainingManage1599968711187746818"
+                                        to={{
+                                          path: '/afterClassTrainingManage',
+                                          query: { id: item.lessonTrainingId }
+                                        }}
+                                      >
+                                        {item.lessonTrainingName}
+                                      </TheLink>
+
+                                      <NTooltip>
+                                        {{
+                                          default: () => '删除',
+                                          trigger: () => (
+                                            <NButton
+                                              v-auth="lessonCoursewareDetail/removeTraining1793827126242213890"
+                                              quaternary
+                                              size="small"
+                                              circle
+                                              onClick={() => hanldeRemoveTraning(item)}
+                                            >
+                                              <NIcon component={<DeleteFilled />} />
+                                            </NButton>
+                                          )
+                                        }}
+                                      </NTooltip>
+                                    </>
                                   ) : (
                                     '无'
                                   )}

+ 34 - 32
src/views/teaching-manage/courseware-manage/index.tsx

@@ -346,36 +346,38 @@ export default defineComponent({
     const customRequest_importFile = async (data: UploadCustomRequestOptions) => {
       console.log(data.file)
       customRequest_importData.loading = true
-      const fileUrl = await api_uploadFile(data.file.file, () => {})
-      const res = await api_openFileImportInfoSave({
-        dataType: 'COURSEWARE',
-        fileName: data.file.name,
-        importUrl: fileUrl
-      })
-      console.log('🚀 ~ res:', res)
-      customRequest_importData.loading = false
-      if (res.data) {
-        // 空表格
-        if (res.data.insertRow === 0 && res.data.invalidRow === 0) {
-          message.error('导入失败,表格为空')
-          return
-        }
-        if (res.data.respUrl) {
-          dialog.error({
-            title: '信息',
-            content: () => (
-              <NSpace>
-                <div>导入失败,点击下载错误信息</div>
-                <a href={res.data.respUrl} download>
-                  下载
-                </a>
-              </NSpace>
-            )
-          })
-          return
+      try {
+        const fileUrl = await api_uploadFile(data.file.file, () => {})
+        const res = await api_openFileImportInfoSave({
+          dataType: 'COURSEWARE',
+          fileName: data.file.name,
+          importUrl: fileUrl
+        })
+        console.log('🚀 ~ res:', res)
+        if (res.data) {
+          // 空表格
+          if (res.data.insertRow === 0 && res.data.invalidRow === 0) {
+            message.error('导入失败,表格为空')
+            return
+          }
+          if (res.data.respUrl) {
+            dialog.error({
+              title: '信息',
+              content: () => (
+                <NSpace>
+                  <div>导入失败,点击下载错误信息</div>
+                  <a href={res.data.respUrl} download>
+                    下载
+                  </a>
+                </NSpace>
+              )
+            })
+            return
+          }
+          message.success('导入成功')
         }
-        message.success('导入成功')
-      }
+      } catch {}
+      customRequest_importData.loading = false
     }
 
     return () => (
@@ -446,7 +448,7 @@ export default defineComponent({
             <NSpace style={{ paddingBottom: '12px' }} justify="space-between">
               <NButton
                 type="primary"
-              v-auth="coursewareDetail1607207526805606402"
+                v-auth="coursewareDetail1607207526805606402"
                 onClick={() => {
                   state.visiableKnowledge = true
                   router.push({
@@ -458,7 +460,7 @@ export default defineComponent({
               </NButton>
               <NSpace>
                 <NButton
-                  v-auth="downloadCoursewareTemplate1791012053736034306"
+                  v-auth="downloadCoursewareTemplate1793540443017875457"
                   type="primary"
                   tag="a"
                   //@ts-ignore
@@ -467,7 +469,7 @@ export default defineComponent({
                 >
                   下载课件模板
                 </NButton>
-                <div v-auth="Importcourseware1791012122841387009">
+                <div v-auth="Importcourseware1793540542561292290">
                   <NUpload
                     ref={(el: any) => (customRequest_importData.importRef = el)}
                     showFileList={false}

+ 18 - 1
src/views/teaching-manage/courseware-manage/model/CourseKnowledgePoint.tsx

@@ -20,6 +20,7 @@ import {
   lessonCoursewareDetailUpOrDownKnowledgePoint
 } from '../../api'
 import AddseKnowledge from './AddseKnowledge'
+import TheLink from '@/components/TheLink'
 
 export default defineComponent({
   name: 'CourseKnowledgePoint',
@@ -60,7 +61,23 @@ export default defineComponent({
       },
       {
         title: '知识点名称',
-        key: 'name'
+        key: 'name',
+        render(row: any) {
+          return row.children ? (
+            <>
+              {row.name}({row.knowledgePointId})
+            </>
+          ) : (
+            <TheLink
+              to={{
+                path: '/educationalManage/knowledgeManage',
+                query: { keyword: row.knowledgePointId }
+              }}
+            >
+              {row.name}({row.knowledgePointId})
+            </TheLink>
+          )
+        }
       },
       {
         title: '课程类型',