Jelajahi Sumber

添加参数

lex-xin 5 bulan lalu
induk
melakukan
bb8248153e

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

@@ -607,4 +607,26 @@ export const api_removeTraining = (id: any) => {
     url: `/cbs-app/lessonCoursewareDetail/removeTraining/` + id,
     method: 'post'
   } as any)
+}
+
+/**
+ * 查询已被使用的课件级别
+ */
+export const api_getUsedLevel = (data: any) => {
+  return request({
+    url: `/cbs-app/lessonCourseware/getUsedLevel`,
+    method: 'post',
+    data
+  } as any)
+}
+
+/**
+ * 查询已被使用的课件级别
+ */
+export const api_getUsedLevelDetail = (data: any) => {
+  return request({
+    url: `/cbs-app/lessonCoursewareDetail/getUsedLevel`,
+    method: 'post',
+    data
+  } as any)
 }

+ 36 - 3
src/views/teaching-manage/courseware-manage/components/courseConfiguration.tsx

@@ -34,7 +34,8 @@ import {
   lessonCoursewareExaminationMapperQueryAll,
   lessonCoursewareDetailLock,
   api_openFileImportInfoSave,
-  api_removeTraining
+  api_removeTraining,
+  api_getUsedLevelDetail
 } from '../../api'
 import styles from '../index.module.less'
 import { EditFilled, DeleteFilled, LockFilled, UnlockFilled } from '@vicons/antd'
@@ -43,7 +44,15 @@ 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'
+
+
+const courseTypeIds: any = []
+for(let i = 1; i <= 20; i++) {
+  courseTypeIds.push({
+    label: i,
+    value: i
+  })
+}
 
 export default defineComponent({
   name: 'courseConfiguration',
@@ -65,6 +74,7 @@ export default defineComponent({
       lessonTargetDesc: '', //课时名称
       lessonTrainingId: '', //课后作业
       lockEnable: 'true',
+      level: null,
       accessScope: 0
     })
     // 课件添加课程
@@ -125,6 +135,17 @@ export default defineComponent({
         }
       } catch (error) {}
     }
+    /** 获取级别 */
+    const getLevels = async () => {
+      const { data } = await api_getUsedLevelDetail({
+        lessonCoursewareId: route.query.id
+      })
+      if(Array.isArray(data) && data.length > 0) {
+        courseTypeIds.forEach((item: any) => {
+          item.disabled = data.includes(item.value) ? true : false
+        })
+      }
+    }
     onMounted(() => {
       getDetail()
       getMapperAll()
@@ -288,6 +309,7 @@ export default defineComponent({
                   addForm.id = ''
                   addForm.lockEnable = ''
                   addForm.accessScope = 0
+                  getLevels()
                   addForm.open = true
                 }}
               >
@@ -388,7 +410,7 @@ export default defineComponent({
                 <>
                   <NGi>
                     <NCard
-                      title={item.name}
+                      // title={item.name}
                       style={{
                         '--n-padding-top': '5px',
                         '--n-padding-bottom': '5px',
@@ -396,6 +418,7 @@ export default defineComponent({
                       }}
                     >
                       {{
+                        header: () => <div>{item.name}{item.level && <span style="color: red">({item.level})</span>}</div>,
                         default: () => (
                           <div>
                             <div style={{ paddingBottom: '12px' }}>{item.lessonTargetDesc}</div>
@@ -487,6 +510,8 @@ export default defineComponent({
                                       addForm.id = item.id
                                       addForm.lockEnable = item.lockEnable + ''
                                       addForm.accessScope = item.accessScope ?? 0
+                                      addForm.level = item.level
+                                      getLevels()
                                       addForm.open = true
                                     }}
                                   >
@@ -621,6 +646,14 @@ export default defineComponent({
             >
               <NInput v-model:value={addForm.name} />
             </NFormItem>
+            <NFormItem label="课程编号" path="level">
+              <NSelect
+                placeholder="请选择课程编号"
+                clearable
+                v-model:value={addForm.level}
+                options={courseTypeIds}
+              />
+            </NFormItem>
             <NFormItem
               label="是否需要解锁"
               required

+ 83 - 24
src/views/teaching-manage/courseware-manage/components/createCourseware.tsx

@@ -2,12 +2,9 @@ import UploadFile from '@/components/upload-file'
 import { lessonType } from '@/views/knowledge-manage/knowledgeTypeData'
 import {
   NButton,
-  NButtonGroup,
   NForm,
   NFormItem,
   NInput,
-  NRadio,
-  NRadioGroup,
   NSelect,
   NSpace,
   NSpin,
@@ -16,7 +13,15 @@ import {
 import { defineComponent, onMounted, reactive, ref, watch } from 'vue'
 import { useRoute, useRouter } from 'vue-router'
 import styles from '../index.module.less'
-import { lessonCoursewareDetail, lessonCoursewareSave, lessonCoursewareUpdate } from '../../api'
+import {
+  // lessonCoursewareDetail,
+  lessonCoursewareSave,
+  lessonCoursewareUpdate,
+  api_getUsedLevel
+} from '../../api'
+import { courseLevelTypeList } from '../../teachingData'
+import { orchestraType } from './../../../../utils/constant';
+import deepClone from '@/utils/deep.clone'
 
 export default defineComponent({
   name: 'createCourseware',
@@ -33,13 +38,15 @@ export default defineComponent({
     const router = useRouter()
     const query = route.query
     const loading = ref(false)
-    const formRef = ref()
+    const formRef = ref() 
+    const courseLevelTypes = ref<any[]>(deepClone(courseLevelTypeList))
     const searchForm = reactive<any>({
       coverImg: '', //封面
       orchestraType: 'SINGLE_DELIVERY', // 乐团类型
       lessonTargetDesc: '', // 课件目标
       name: '', // 课件名称
-      courseTypeCode: ''
+      courseTypeCode: null as any,
+      level: null as any
     })
     const rules = {
       coverImg: [{ required: true, message: '请上传课件封面', trigger: ['blur', 'change'] }],
@@ -47,22 +54,47 @@ export default defineComponent({
         { required: true, message: '请填写课件目标', trigger: ['blur', 'change'] }
       ],
       name: [{ required: true, message: '请填写课件名称', trigger: ['blur', 'change'] }],
-      courseTypeCode: [{ required: true, message: '请选择课程类型', trigger: ['blur', 'change'] }]
+      courseTypeCode: [{ required: true, message: '请选择课程类型', trigger: ['blur', 'change'] }],
+      level: [{ required: true, type: 'number', message: '请选择课程级别', trigger: ['blur', 'change'] }]
     }
-    const getDetail = async () => {
-      if (!query.id) return
-      loading.value = true
+    // const getDetail = async () => {
+    //   if (!query.id) return
+    //   loading.value = true
+    //   try {
+    //     const { data } = await lessonCoursewareDetail(query.id)
+    //     searchForm.coverImg = data.coverImg
+    //     searchForm.orchestraType = data.orchestraType
+    //     searchForm.lessonTargetDesc = data.lessonTargetDesc
+    //     searchForm.name = data.name
+    //     searchForm.courseTypeCode = data.courseTypeCode
+    //     searchForm.enableFlag = data.enableFlag
+    //   } catch (error) {}
+    //   loading.value = false
+    // }
+
+    const getLevel = async () => {
+      if (!(searchForm.orchestraType && searchForm.courseTypeCode)) return
       try {
-        const { data } = await lessonCoursewareDetail(query.id)
-        searchForm.coverImg = data.coverImg
-        searchForm.orchestraType = data.orchestraType
-        searchForm.lessonTargetDesc = data.lessonTargetDesc
-        searchForm.name = data.name
-        searchForm.courseTypeCode = data.courseTypeCode
-        searchForm.enableFlag = data.enableFlag
-      } catch (error) {}
-      loading.value = false
+        const { data } = await api_getUsedLevel({
+          courseTypeCode: searchForm.orchestraType,
+          orchestraType: searchForm.courseTypeCode
+        })
+        if(Array.isArray(data) && data.length > 0) {
+          courseLevelTypes.value.forEach((item: any) => {
+            item.disabled = data.includes(item.value) ? true : false
+          })
+        }
+      } catch {}
+    }
+
+    const onChangeOrchestraType = (type: 'SINGLE_DELIVERY' | 'MULTIPLE_DELIVERY' | 'MULTIPLE_DELIVERY_SCHOOL') => {
+      // 如果是一样则不更新
+      if(searchForm.orchestraType === type) return
+      searchForm.level = null
+      searchForm.orchestraType = type
+      getLevel()
     }
+
     onMounted(() => {
       //   getDetail()
       if (props.course) {
@@ -72,12 +104,15 @@ export default defineComponent({
         searchForm.name = props.course.name
         searchForm.courseTypeCode = props.course.courseTypeCode
         searchForm.enableFlag = props.course.enableFlag
+        searchForm.level = props.course.level
+
+        getLevel()
       }
       console.log('🚀 ~ props', props.course)
     })
     watch(
       () => searchForm.coverImg,
-      (newVal, oldVal) => {
+      () => {
         formRef.value.validate()
       }
     )
@@ -138,14 +173,18 @@ export default defineComponent({
                 <NButton
                   disabled={query.isLook ? true : false}
                   type={searchForm.orchestraType == 'SINGLE_DELIVERY' ? 'primary' : 'default'}
-                  onClick={() => (searchForm.orchestraType = 'SINGLE_DELIVERY')}
+                  onClick={() => {
+                    onChangeOrchestraType("SINGLE_DELIVERY")
+                  }}
                 >
                   单交付团
                 </NButton>
                 <NButton
                   disabled={query.isLook ? true : false}
                   type={searchForm.orchestraType == 'MULTIPLE_DELIVERY' ? 'primary' : 'default'}
-                  onClick={() => (searchForm.orchestraType = 'MULTIPLE_DELIVERY')}
+                  onClick={() => {
+                    onChangeOrchestraType("MULTIPLE_DELIVERY")
+                  }}
                 >
                   多交付常规团
                 </NButton>
@@ -154,7 +193,9 @@ export default defineComponent({
                   type={
                     searchForm.orchestraType == 'MULTIPLE_DELIVERY_SCHOOL' ? 'primary' : 'default'
                   }
-                  onClick={() => (searchForm.orchestraType = 'MULTIPLE_DELIVERY_SCHOOL')}
+                  onClick={() => {
+                    onChangeOrchestraType("MULTIPLE_DELIVERY_SCHOOL")
+                  }}
                 >
                   多交付校团
                 </NButton>
@@ -163,10 +204,27 @@ export default defineComponent({
             <NFormItem label="课程类型" path="courseTypeCode" required>
               <NSelect
                 disabled={route.query.id ? true : false}
-                placeholder="课程类型"
+                placeholder="请选择课程类型"
                 clearable
                 v-model:value={searchForm.courseTypeCode}
                 options={lessonType}
+                onUpdate:value={() => {
+                  searchForm.level = null
+                  getLevel()
+                }}
+              />
+            </NFormItem>
+            <NFormItem label="课程级别" path="level" required>
+              <NSelect
+                disabled={
+                  !(searchForm.orchestraType && searchForm.courseTypeCode)
+                    ? true
+                    : false
+                }
+                placeholder="请选择课程级别"
+                clearable
+                v-model:value={searchForm.level}
+                options={courseLevelTypes.value}
               />
             </NFormItem>
             <NFormItem label="教学目标" path="lessonTargetDesc" required>
@@ -174,6 +232,7 @@ export default defineComponent({
                 type="textarea"
                 rows={4}
                 maxlength={500}
+                placeholder={'请输入教学目标'}
                 v-model:value={searchForm.lessonTargetDesc}
                 showCount
               />

+ 14 - 4
src/views/teaching-manage/courseware-manage/index.tsx

@@ -4,7 +4,6 @@ import {
   DataTableColumn,
   NButton,
   NDataTable,
-  NDatePicker,
   NDescriptions,
   NDescriptionsItem,
   NDropdown,
@@ -20,20 +19,20 @@ import {
   useMessage
 } from 'naive-ui'
 import { defineComponent, onMounted, reactive, ref } from 'vue'
-import dayjs from 'dayjs'
 import {
   lessonCoursewarePage,
   lessonCoursewareUpdateEnableFlag,
   lessonCoursewareDelete,
   api_openFileImportInfoSave
 } from '../api'
-import { InternalRowData } from 'naive-ui/es/data-table/src/interface'
 import { useRouter } from 'vue-router'
 import { knowledgeTypeData, lessonType } from '@/views/knowledge-manage/knowledgeTypeData'
-import { orchestraTypes } from '../teachingData'
+import { courseLevelTypeList, getCourseLevelType, orchestraTypes } from '../teachingData'
 import { sysEmployeePage } from '@/views/system-manage/api'
 import { api_uploadFile } from '@/plugins/uploadFile'
 
+
+
 export default defineComponent({
   name: 'courseware-manage',
   setup() {
@@ -59,6 +58,7 @@ export default defineComponent({
       keyword: '', // 关键字匹配
       enableFlag: null, // 是否启用
       operatorId: null, // 更新人
+      level: null, // 课件级别
       courseTypeCode: null // 课程类型
     })
     const dialog = useDialog()
@@ -155,6 +155,7 @@ export default defineComponent({
               <NDescriptions labelPlacement="left" column={1}>
                 <NDescriptionsItem label="课程名称">{row.name}</NDescriptionsItem>
                 <NDescriptionsItem label="课件编号">{row.id}</NDescriptionsItem>
+                <NDescriptionsItem label="课件级别">{getCourseLevelType(row.level)}</NDescriptionsItem>
               </NDescriptions>
             </>
           )
@@ -436,6 +437,15 @@ export default defineComponent({
                   filterable
                 />
               </NFormItem>
+              <NFormItem path="level" label="课件级别">
+                <NSelect
+                  placeholder="请输入课件级别"
+                  clearable
+                  v-model:value={searchForm.level}
+                  options={courseLevelTypeList}
+                  filterable
+                />
+              </NFormItem>
               <NFormItem>
                 <NSpace>
                   <NButton type="primary" onClick={onSearch}>

+ 25 - 0
src/views/teaching-manage/teachingData.ts

@@ -3,3 +3,28 @@ export const orchestraTypes: { [_: string]: any } = {
   MULTIPLE_DELIVERY: '多交付常规团',
   MULTIPLE_DELIVERY_SCHOOL: '多交付校团'
 }
+
+
+interface courseLevelType {
+  [key: number]: string
+}
+export const courseLevelTypeData: courseLevelType = {
+  1: '1级',
+  2: '2级',
+  3: '3级',
+  4: '4级',
+  5: '5级',
+  6: '6级',
+  7: '7级',
+  8: '8级',
+  9: '9级',
+  10: '10级'
+}
+
+export const courseLevelTypeList = Object.keys(courseLevelTypeData).map((key: any) => {
+  return { label: courseLevelTypeData[key], value: Number(key) }
+})
+
+export const getCourseLevelType = (key: any) => {
+  return courseLevelTypeData[key] || ''
+}