Browse Source

1

yuhongzhe
于宏哲PHP 11 months ago
parent
commit
d2bbfddb32
  1. 2
      admin/.env.development
  2. 1
      admin/.env.production
  3. 2
      admin/auto-imports.d.ts
  4. 4
      admin/components.d.ts
  5. 23
      admin/src/app/api/departments.ts
  6. 4
      admin/src/app/api/lesson_course_teaching.ts
  7. 12
      admin/src/app/lang/zh-cn/children_like.children_like.json
  8. 26
      admin/src/app/lang/zh-cn/departments.departments.json
  9. 12
      admin/src/app/lang/zh-cn/future_ontent.future_ontent.json
  10. 12
      admin/src/app/lang/zh-cn/instructional_material.instructional_material.json
  11. 12
      admin/src/app/lang/zh-cn/lesson_course_teaching.lesson_course_teaching.json
  12. 12
      admin/src/app/lang/zh-cn/physical_testing.physical_testing.json
  13. 12
      admin/src/app/lang/zh-cn/professional_skills.professional_skills.json
  14. 295
      admin/src/app/views/binding_personnel/binding_personnel.vue
  15. 89
      admin/src/app/views/children_like/children_like.vue
  16. 13
      admin/src/app/views/children_like/components/Jump-lesson-library-edit.vue
  17. 13
      admin/src/app/views/children_like/components/en-course-teaching-edit.vue
  18. 13
      admin/src/app/views/children_like/components/lesson-course-teaching-edit.vue
  19. 242
      admin/src/app/views/departments/components/departments-edit.vue
  20. 292
      admin/src/app/views/departments/departments.vue
  21. 13
      admin/src/app/views/future_ontent/components/Jump-lesson-library-edit.vue
  22. 13
      admin/src/app/views/future_ontent/components/en-course-teaching-edit.vue
  23. 13
      admin/src/app/views/future_ontent/components/lesson-course-teaching-edit.vue
  24. 86
      admin/src/app/views/future_ontent/future_ontent.vue
  25. 13
      admin/src/app/views/instructional_material/components/Jump-lesson-library-edit.vue
  26. 13
      admin/src/app/views/instructional_material/components/basketball-course-teaching-edit.vue
  27. 13
      admin/src/app/views/instructional_material/components/en-course-teaching-edit.vue
  28. 13
      admin/src/app/views/instructional_material/components/lesson-course-teaching-edit.vue
  29. 99
      admin/src/app/views/instructional_material/instructional_material.vue
  30. 21
      admin/src/app/views/lesson_course_teaching/components/Jump-lesson-library-edit.vue
  31. 21
      admin/src/app/views/lesson_course_teaching/components/basketball-course-teaching-edit.vue
  32. 21
      admin/src/app/views/lesson_course_teaching/components/en-course-teaching-edit.vue
  33. 21
      admin/src/app/views/lesson_course_teaching/components/lesson-course-teaching-edit.vue
  34. 21
      admin/src/app/views/lesson_course_teaching/components/ninja-teaching-edit.vue
  35. 21
      admin/src/app/views/lesson_course_teaching/components/physical-teaching-edit.vue
  36. 21
      admin/src/app/views/lesson_course_teaching/components/security-teaching-edit.vue
  37. 21
      admin/src/app/views/lesson_course_teaching/components/strengthen-course-teaching-edit.vue
  38. 192
      admin/src/app/views/lesson_course_teaching/lesson_course_teaching.vue
  39. 13
      admin/src/app/views/physical_testing/components/Jump-lesson-library-edit.vue
  40. 13
      admin/src/app/views/physical_testing/components/basketball-course-teaching-edit.vue
  41. 13
      admin/src/app/views/physical_testing/components/en-course-teaching-edit.vue
  42. 13
      admin/src/app/views/physical_testing/components/lesson-course-teaching-edit.vue
  43. 115
      admin/src/app/views/physical_testing/physical_testing.vue
  44. 13
      admin/src/app/views/professional_skills/components/Jump-lesson-library-edit.vue
  45. 13
      admin/src/app/views/professional_skills/components/basketball-course-teaching-edit.vue
  46. 13
      admin/src/app/views/professional_skills/components/en-course-teaching-edit.vue
  47. 13
      admin/src/app/views/professional_skills/components/lesson-course-teaching-edit.vue
  48. 13
      admin/src/app/views/professional_skills/components/ninja-teaching-edit.vue
  49. 13
      admin/src/app/views/professional_skills/components/security-teaching-edit.vue
  50. 13
      admin/src/app/views/professional_skills/components/strengthen-course-teaching-edit.vue
  51. 196
      admin/src/app/views/professional_skills/professional_skills.vue
  52. 3
      admin/src/app/views/six_speed/components/six-speed-edit.vue
  53. 72
      niucloud/app/adminapi/controller/lesson_course_teaching/LessonCourseTeaching.php
  54. 2
      niucloud/app/adminapi/route/lesson_course_teaching.php
  55. 44
      niucloud/app/api/controller/apiController/Common.php
  56. 179
      niucloud/app/api/controller/apiController/Personnel.php
  57. 36
      niucloud/app/api/controller/apiController/teachingResearch.php
  58. 14
      niucloud/app/api/controller/login/Login.php
  59. 58
      niucloud/app/api/middleware/ApiPersonnelCheckToken.php
  60. 94
      niucloud/app/api/route/route.php
  61. 26
      niucloud/app/service/admin/lesson_course_teaching/LessonCourseTeachingService.php
  62. 4
      niucloud/app/service/admin/upload/UploadService.php
  63. 137
      niucloud/app/service/api/apiService/PersonnelService.php
  64. 15
      niucloud/app/service/api/login/AuthService.php
  65. 53
      niucloud/app/service/api/login/LoginService.php

2
admin/.env.development

@ -1,5 +1,5 @@
# api请求地址 # api请求地址
VITE_APP_BASE_URL='http://146.56.228.75:20024/adminapi/' VITE_APP_BASE_URL='http://zhjwxt.cc/adminapi/'
# 图片服务器地址 # 图片服务器地址
VITE_IMG_DOMAIN='' VITE_IMG_DOMAIN=''

1
admin/.env.production

@ -1,5 +1,6 @@
# api请求地址 # api请求地址
VITE_APP_BASE_URL='http://146.56.228.75:20024/adminapi/' VITE_APP_BASE_URL='http://146.56.228.75:20024/adminapi/'
# VITE_APP_BASE_URL='https://zh.hnhbty.cn/adminapi/'
# 图片服务器地址 # 图片服务器地址
VITE_IMG_DOMAIN='' VITE_IMG_DOMAIN=''

2
admin/auto-imports.d.ts

@ -1,5 +1,5 @@
// Generated by 'unplugin-auto-import' // Generated by 'unplugin-auto-import'
export {} export {}
declare global { declare global {
const ElNotification: typeof import('element-plus/es')['ElNotification']
} }

4
admin/components.d.ts

@ -39,7 +39,6 @@ declare module '@vue/runtime-core' {
ElMenu: typeof import('element-plus/es')['ElMenu'] ElMenu: typeof import('element-plus/es')['ElMenu']
ElMenuItem: typeof import('element-plus/es')['ElMenuItem'] ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
ElOption: typeof import('element-plus/es')['ElOption'] ElOption: typeof import('element-plus/es')['ElOption']
ElPageHeader: typeof import('element-plus/es')['ElPageHeader']
ElPagination: typeof import('element-plus/es')['ElPagination'] ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover'] ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio'] ElRadio: typeof import('element-plus/es')['ElRadio']
@ -47,8 +46,6 @@ declare module '@vue/runtime-core' {
ElRow: typeof import('element-plus/es')['ElRow'] ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect'] ElSelect: typeof import('element-plus/es')['ElSelect']
ElStep: typeof import('element-plus/es')['ElStep']
ElSteps: typeof import('element-plus/es')['ElSteps']
ElSubMenu: typeof import('element-plus/es')['ElSubMenu'] ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
ElSwitch: typeof import('element-plus/es')['ElSwitch'] ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable'] ElTable: typeof import('element-plus/es')['ElTable']
@ -57,7 +54,6 @@ declare module '@vue/runtime-core' {
ElTabs: typeof import('element-plus/es')['ElTabs'] ElTabs: typeof import('element-plus/es')['ElTabs']
ElTag: typeof import('element-plus/es')['ElTag'] ElTag: typeof import('element-plus/es')['ElTag']
ElTooltip: typeof import('element-plus/es')['ElTooltip'] ElTooltip: typeof import('element-plus/es')['ElTooltip']
ElTree: typeof import('element-plus/es')['ElTree']
ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect'] ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
ElUpload: typeof import('element-plus/es')['ElUpload'] ElUpload: typeof import('element-plus/es')['ElUpload']
ExportSure: typeof import('./src/components/export-sure/index.vue')['default'] ExportSure: typeof import('./src/components/export-sure/index.vue')['default']

23
admin/src/app/api/departments.ts

@ -7,7 +7,7 @@ import request from '@/utils/request'
* @returns * @returns
*/ */
export function getDepartmentsList(params: Record<string, any>) { export function getDepartmentsList(params: Record<string, any>) {
return request.get(`departments/departments`, { params }) return request.get(`departments/departments`, {params})
} }
/** /**
@ -16,7 +16,7 @@ export function getDepartmentsList(params: Record<string, any>) {
* @returns * @returns
*/ */
export function getDepartmentsInfo(id: number) { export function getDepartmentsInfo(id: number) {
return request.get(`departments/departments/${id}`) return request.get(`departments/departments/${id}`);
} }
/** /**
@ -25,10 +25,7 @@ export function getDepartmentsInfo(id: number) {
* @returns * @returns
*/ */
export function addDepartments(params: Record<string, any>) { export function addDepartments(params: Record<string, any>) {
return request.post('departments/departments', params, { return request.post('departments/departments', params, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
/** /**
@ -38,10 +35,7 @@ export function addDepartments(params: Record<string, any>) {
* @returns * @returns
*/ */
export function editDepartments(params: Record<string, any>) { export function editDepartments(params: Record<string, any>) {
return request.put(`departments/departments/${params.id}`, params, { return request.put(`departments/departments/${params.id}`, params, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
/** /**
@ -50,14 +44,11 @@ export function editDepartments(params: Record<string, any>) {
* @returns * @returns
*/ */
export function deleteDepartments(id: number) { export function deleteDepartments(id: number) {
return request.delete(`departments/departments/${id}`, { return request.delete(`departments/departments/${id}`, { showErrorMessage: true, showSuccessMessage: true })
showErrorMessage: true,
showSuccessMessage: true,
})
} }
export function getWithDepartmentsList(params: Record<string, any>) { export function getWithDepartmentsList(params: Record<string,any>){
return request.get('departments/departments_all', { params }) return request.get('departments/departments_all', {params})
} }
// USER_CODE_END -- departments // USER_CODE_END -- departments

4
admin/src/app/api/lesson_course_teaching.ts

@ -233,6 +233,10 @@ export function getLessonCourseTeachingInfo(id: number) {
return request.get(`lesson_course_teaching/lesson_course_teaching/${id}`); return request.get(`lesson_course_teaching/lesson_course_teaching/${id}`);
} }
export function setBindingModule(params: Record<string, any>) {
return request.put(`lesson_course_teaching/binding_module/${params.id}`, params)
}
/** /**
* *
* @param id * @param id

12
admin/src/app/lang/zh-cn/children_like.children_like.json

@ -23,5 +23,15 @@
"addJumpLessonLibrary":"添加套圈游戏", "addJumpLessonLibrary":"添加套圈游戏",
"updateJumpLessonLibrary":"编辑套圈游戏", "updateJumpLessonLibrary":"编辑套圈游戏",
"addEnTeachingLibrary":"添加鼓励方式", "addEnTeachingLibrary":"添加鼓励方式",
"editEnTeachingLibrary":"编辑鼓励方式" "editEnTeachingLibrary":"编辑鼓励方式",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

26
admin/src/app/lang/zh-cn/departments.departments.json

@ -1,13 +1,15 @@
{ {
"id": "部门编号", "id":"部门编号",
"idPlaceholder": "请输入部门编号", "idPlaceholder":"请输入部门编号",
"departmentName": "部门名称", "departmentName":"部门名称",
"departmentNamePlaceholder": "请输入部门名称", "departmentNamePlaceholder":"请输入部门名称",
"parentDepartmentId": "上级部门ID", "parentDepartmentId":"上级部门ID",
"parentDepartmentIdPlaceholder": "全部", "parentDepartmentIdPlaceholder":"全部",
"addDepartments": "添加部门", "createdAt":"创建时间",
"updateDepartments": "编辑部门", "updatedAt":"修改时间",
"departmentsDeleteTips": "确定要删除该数据吗?", "addDepartments":"添加部门",
"startDate": "请选择开始时间", "updateDepartments":"编辑部门",
"endDate": "请选择结束时间" "departmentsDeleteTips":"确定要删除该数据吗?",
} "startDate":"请选择开始时间",
"endDate":"请选择结束时间"
}

12
admin/src/app/lang/zh-cn/future_ontent.future_ontent.json

@ -23,5 +23,15 @@
"addJumpLessonLibrary":"添加训练视频", "addJumpLessonLibrary":"添加训练视频",
"updateJumpLessonLibrary":"编辑训练视频", "updateJumpLessonLibrary":"编辑训练视频",
"addEnTeachingLibrary":"添加课后作业", "addEnTeachingLibrary":"添加课后作业",
"editEnTeachingLibrary":"编辑课后作业" "editEnTeachingLibrary":"编辑课后作业",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

12
admin/src/app/lang/zh-cn/instructional_material.instructional_material.json

@ -25,6 +25,16 @@
"addEnTeachingLibrary":"添加趣味游戏库", "addEnTeachingLibrary":"添加趣味游戏库",
"editEnTeachingLibrary":"编辑趣味游戏库", "editEnTeachingLibrary":"编辑趣味游戏库",
"addBasketballTeachingLibrary":"添加放松动作库", "addBasketballTeachingLibrary":"添加放松动作库",
"editBasketballTeachingLibrary":"编辑放松动作库" "editBasketballTeachingLibrary":"编辑放松动作库",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

12
admin/src/app/lang/zh-cn/lesson_course_teaching.lesson_course_teaching.json

@ -33,5 +33,15 @@
"addSecurityTeachingLibrary":"添加少儿安防教案库", "addSecurityTeachingLibrary":"添加少儿安防教案库",
"editSecurityTeachingLibrary":"编辑少儿安防教案库", "editSecurityTeachingLibrary":"编辑少儿安防教案库",
"addPhysicalTeachingLibrary":"添加体能教案库", "addPhysicalTeachingLibrary":"添加体能教案库",
"editPhysicalTeachingLibrary":"编辑体能教案库" "editPhysicalTeachingLibrary":"编辑体能教案库",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

12
admin/src/app/lang/zh-cn/physical_testing.physical_testing.json

@ -25,5 +25,15 @@
"addEnTeachingLibrary":"添加3-6岁体测讲解—解读", "addEnTeachingLibrary":"添加3-6岁体测讲解—解读",
"editEnTeachingLibrary":"编辑3-6岁体测讲解—解读", "editEnTeachingLibrary":"编辑3-6岁体测讲解—解读",
"addBasketballTeachingLibrary":"添加7+岁体测讲解—解读", "addBasketballTeachingLibrary":"添加7+岁体测讲解—解读",
"editBasketballTeachingLibrary":"编辑7+岁体测讲解—解读" "editBasketballTeachingLibrary":"编辑7+岁体测讲解—解读",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

12
admin/src/app/lang/zh-cn/professional_skills.professional_skills.json

@ -31,5 +31,15 @@
"addNinjaTeachingLibrary":"添加安防动作", "addNinjaTeachingLibrary":"添加安防动作",
"editNinjaTeachingLibrary":"编辑安防动作", "editNinjaTeachingLibrary":"编辑安防动作",
"addSecurityTeachingLibrary":"添加标准化动作", "addSecurityTeachingLibrary":"添加标准化动作",
"editSecurityTeachingLibrary":"编辑标准化动作" "editSecurityTeachingLibrary":"编辑标准化动作",
"addBindingPersonnel":"添加绑定人员",
"userName":"姓名",
"userPhone":"电话",
"userStatus":"状态",
"userCreateTime":"创建时间",
"userUpdateTime":"更新时间",
"bindingModule": "绑定模块",
"url1": "图片上传",
"url2": "文件上传",
"url3": "视频上传"
} }

295
admin/src/app/views/binding_personnel/binding_personnel.vue

@ -0,0 +1,295 @@
<template>
<el-dialog v-model="showDialog" :title="t('addBindingPersonnel')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true">
<el-form :inline="true" :model="lessonCourseTeachingTable.searchParam" ref="searchFormRef">
<el-form-item :label="t('userName')" prop="title">
<el-input v-model="lessonCourseTeachingTable.searchParam.name" :placeholder="t('userName')" />
</el-form-item>
<el-form-item :label="t('userPhone')" prop="status">
<el-input v-model="lessonCourseTeachingTable.searchParam.phone" :placeholder="t('userPhone')" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="loadLessonCourseTeachingList()">{{ t('search') }}</el-button>
<el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
</el-form-item>
</el-form>
<div class="mt-[10px]">
<el-table :data="lessonCourseTeachingTable.data" size="large" v-loading="lessonCourseTeachingTable.loading" @selection-change="handleSelectionChange">
<template #empty>
<span>{{ !lessonCourseTeachingTable.loading ? t('emptyData') : '' }}</span>
</template>
<el-table-column type="selection" width="55" />
<el-table-column prop="name" :label="t('userName')" min-width="70" :show-overflow-tooltip="true"/>
<el-table-column prop="phone" :label="t('userPhone')" min-width="120" :show-overflow-tooltip="true"/>
<el-table-column :label="t('userStatus')" min-width="100" align="center" :show-overflow-tooltip="true">
<template #default="{ row }">
<div v-if="row.status == 1">待审核</div>
<div v-if="row.status == 2">已审核</div>
<div v-if="row.status == 3">已禁用</div>
</template>
</el-table-column>
<el-table-column prop="create_time" :label="t('userCreateTime')" min-width="150" :show-overflow-tooltip="true"/>
<el-table-column prop="update_time" :label="t('userUpdateTime')" min-width="150" :show-overflow-tooltip="true"/>
<el-table-column :label="t('operation')" fixed="right" min-width="120">
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 1)">{{ t('delete') }}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination v-model:current-page="lessonCourseTeachingTable.page" v-model:page-size="lessonCourseTeachingTable.limit"
layout="total, sizes, prev, pager, next, jumper" :total="lessonCourseTeachingTable.total"
@size-change="loadLessonCourseTeachingList()" @current-change="loadLessonCourseTeachingList" />
</div>
</div>
<!-- <el-form-item :label="t('bindingModule')" style="margin-top: 15px;">-->
<!-- <el-select class="w-[280px]" v-model="binding_module" clearable :placeholder="t('bindingModule')">-->
<!-- <el-option label="课程教学大纲" value="1" />-->
<!-- <el-option label="跳绳教案库" value="2" />-->
<!-- <el-option label="增高教案库" value="3" />-->
<!-- <el-option label="篮球教案库" value="4" />-->
<!-- <el-option label="强化教案库" value="5" />-->
<!-- <el-option label="空中忍者教案库" value="6" />-->
<!-- <el-option label="少儿安防教案库" value="7" />-->
<!-- <el-option label="体能教案库" value="8" />-->
<!-- <el-option label="热身动作库" value="9" />-->
<!-- <el-option label="体能动作库" value="10" />-->
<!-- <el-option label="趣味游戏库" value="11" />-->
<!-- <el-option label="放松动作库" value="12" />-->
<!-- <el-option label="训练内容" value="13" />-->
<!-- <el-option label="训练视频" value="14" />-->
<!-- <el-option label="课后作业" value="15" />-->
<!-- <el-option label="优秀一堂课" value="16" />-->
<!-- <el-option label="空中忍者" value="17" />-->
<!-- <el-option label="篮球动作" value="18" />-->
<!-- <el-option label="跳绳动作" value="19" />-->
<!-- <el-option label="跑酷动作" value="20" />-->
<!-- <el-option label="安防动作" value="21" />-->
<!-- <el-option label="标准化动作" value="22" />-->
<!-- <el-option label="3-6岁体测" value="23" />-->
<!-- <el-option label="7+体测" value="24" />-->
<!-- <el-option label="3-6岁体测讲解—解读" value="25" />-->
<!-- <el-option label="7+岁体测讲解—解读" value="26" />-->
<!-- <el-option label="互动游戏" value="27" />-->
<!-- <el-option label="套圈游戏" value="28" />-->
<!-- <el-option label="鼓励方式" value="29" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<template #footer>
<span class="dialog-footer">
<el-button @click="showDialog = false">{{ t('cancel') }}</el-button>
<el-button type="primary" :loading="loading" @click="confirm(formRef)">{{
t('confirm')
}}</el-button>
</span>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang'
import type { FormInstance } from 'element-plus'
import {
addLessonCourseTeaching,
editLessonCourseTeaching,
getLessonCourseTeachingInfo,
getLessonCourseTeachingList,
getWithPersonnelDataList,
setBindingModule
} from '@/app/api/lesson_course_teaching'
let showDialog = ref(false)
const loading = ref(false)
let lessonCourseTeachingTable = reactive({
page: 1,
limit: 10,
total: 0,
loading: true,
data: [],
searchParam:{
"name":"",
"phone":""
}
})
const multipleSelection = ref<[]>([])
const binding_module = ref('')
const handleSelectionChange = (val: []) => {
multipleSelection.value = val
}
const loadLessonCourseTeachingList = (page: number = 1) => {
lessonCourseTeachingTable.loading = true
lessonCourseTeachingTable.page = page
getWithPersonnelDataList({
page: lessonCourseTeachingTable.page,
limit: lessonCourseTeachingTable.limit,
...lessonCourseTeachingTable.searchParam
}).then(res => {
lessonCourseTeachingTable.loading = false
lessonCourseTeachingTable.data = res.data.data
lessonCourseTeachingTable.total = res.data.total
}).catch(() => {
lessonCourseTeachingTable.loading = false
})
}
loadLessonCourseTeachingList()
const resetForm = (page: number = 1) => {
lessonCourseTeachingTable.searchParam.name = ''
lessonCourseTeachingTable.searchParam.phone = ''
loadLessonCourseTeachingList()
}
/**
* 表单数据
*/
const initialFormData = {
id: '',
title: '',
image: '',
type: '',
content: '',
status: ''
// user_permission: [],
}
const formData: Record<string, any> = reactive({ ...initialFormData })
const formRef = ref<FormInstance>()
//
const formRules = computed(() => {
return {
title: [
{ required: true, message: t('titlePlaceholder'), trigger: 'blur' },
]
,
image: [
{ required: true, message: t('imagePlaceholder'), trigger: 'blur' },
]
,
type: [
{ required: true, message: t('typePlaceholder'), trigger: 'blur' },
]
,
content: [
{ required: true, message: t('contentPlaceholder'), trigger: 'blur' },
]
,
status: [
{ required: true, message: t('statusPlaceholder'), trigger: 'blur' },
]
}
})
const emit = defineEmits(['complete'])
/**
* 确认
* @param formEl
*/
const confirm = async (formEl: FormInstance | undefined) => {
let data = {
id: BindingId.value,
user_permission: multipleSelection.value.map(item => item.sys_user_id).join(','),
user_permission_name: multipleSelection.value.map(item => item.name).join(','),
table_type: binding_module.value,
}
setBindingModule(data).then(res => {
loading.value = false
showDialog.value = false
emit('complete')
}).catch(err => {
loading.value = false
})
}
//
let typeList = ref([])
const typeDictList = async () => {
typeList.value = await (await useDictionary('material_type')).data.dictionary
}
typeDictList();
watch(() => typeList.value, () => { formData.type = typeList.value[0].value })
let statusList = ref([])
const statusDictList = async () => {
statusList.value = await (await useDictionary('course_status')).data.dictionary
}
statusDictList();
watch(() => statusList.value, () => { formData.status = statusList.value[0].value })
const userPermissionList = ref([] as any[])
const BindingId = ref(undefined)
const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data
}
setUserPermissionList()
const setFormData = async (row: any = null) => {
BindingId.value = row.id
binding_module.value = row.table_type
}
//
const mobileVerify = (rule: any, value: any, callback: any) => {
if (value && !/^1[3-9]\d{9}$/.test(value)) {
callback(new Error(t('generateMobile')))
} else {
callback()
}
}
//
const idCardVerify = (rule: any, value: any, callback: any) => {
if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) {
callback(new Error(t('generateIdCard')))
} else {
callback()
}
}
//
const emailVerify = (rule: any, value: any, callback: any) => {
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) {
callback(new Error(t('generateEmail')))
} else {
callback()
}
}
//
const numberVerify = (rule: any, value: any, callback: any) => {
if (!Number.isInteger(value)) {
callback(new Error(t('generateNumber')))
} else {
callback()
}
}
defineExpose({
showDialog,
setFormData
})
</script>
<style lang="scss" scoped></style>
<style lang="scss">
.diy-dialog-wrap .el-form-item__label{
height: auto !important;
}
</style>

89
admin/src/app/views/children_like/children_like.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 27)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 27)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,10 +160,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 28)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 28)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -246,10 +248,12 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120">
<el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 29)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 29)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -265,6 +269,7 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
@ -279,6 +284,7 @@ import Edit from '@/app/views/children_like/components/lesson-course-teaching-ed
import EditJump from '@/app/views/children_like/components/Jump-lesson-library-edit.vue' import EditJump from '@/app/views/children_like/components/Jump-lesson-library-edit.vue'
import EditEn from '@/app/views/children_like/components/en-course-teaching-edit.vue' import EditEn from '@/app/views/children_like/components/en-course-teaching-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
const active = 'CourseSyllabus' const active = 'CourseSyllabus'
@ -294,7 +300,7 @@ let lessonCourseTeachingTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 27 "table_type": 27
} }
}) })
let JumpLessonLibraryTable = reactive({ let JumpLessonLibraryTable = reactive({
@ -308,7 +314,7 @@ let JumpLessonLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 28 "table_type": 28
} }
}) })
let EnTeachingLibraryTable = reactive({ let EnTeachingLibraryTable = reactive({
@ -322,7 +328,7 @@ let EnTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 29 "table_type": 29
} }
}) })
@ -347,7 +353,12 @@ const editLessonCourseTeachingDialog: Record<string, any> | null = ref(null)
const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null) const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null)
const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null) const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null) const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取课程教学大纲列表 * 获取课程教学大纲列表
*/ */
@ -500,52 +511,34 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 27) { if (type === 27) {
lessonCourseTeachingTable = reactive({ lessonCourseTeachingTable.searchParam.title = ''
page: 1, lessonCourseTeachingTable.searchParam.status = ''
limit: 10, lessonCourseTeachingTable.searchParam.create_time = ''
total: 0, lessonCourseTeachingTable.searchParam.update_time = ''
loading: true, lessonCourseTeachingTable.page = 1
data: [], lessonCourseTeachingTable.limit = 10
searchParam: { lessonCourseTeachingTable.data = []
"title": "", lessonCourseTeachingTable.table_type = 27
"status": "",
"create_time": [],
"update_time": [],
table_type: 27
}
})
loadLessonCourseTeachingList() loadLessonCourseTeachingList()
} else if (type === 28) { } else if (type === 28) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "", JumpLessonLibraryTable.table_type = 28
"status": "",
"create_time": [],
"update_time": [],
table_type: 28
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 29) { } else if (type === 29) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "", EnTeachingLibraryTable.table_type = 29
"status": "",
"create_time": [],
"update_time": [],
table_type: 29
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} }
} }

13
admin/src/app/views/children_like/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -139,6 +151,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/children_like/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/children_like/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

242
admin/src/app/views/departments/components/departments-edit.vue

@ -1,58 +1,33 @@
<template> <template>
<el-dialog <el-dialog v-model="showDialog" :title="formData.id ? t('updateDepartments') : t('addDepartments')" width="50%" class="diy-dialog-wrap" :destroy-on-close="true">
v-model="showDialog" <el-form :model="formData" label-width="120px" ref="formRef" :rules="formRules" class="page-form" v-loading="loading">
:title="formData.id ? t('updateDepartments') : t('addDepartments')" <el-form-item :label="t('departmentName')" prop="department_name">
width="50%" <el-input v-model="formData.department_name" clearable :placeholder="t('departmentNamePlaceholder')" class="input-width" />
class="diy-dialog-wrap" </el-form-item>
:destroy-on-close="true"
> <el-form-item :label="t('parentDepartmentId')" >
<el-form <el-select class="input-width" v-model="formData.parent_department_id" clearable :placeholder="t('parentDepartmentIdPlaceholder')">
:model="formData" <el-option label="请选择" value=""></el-option>
label-width="120px" <el-option
ref="formRef" v-for="(item, index) in parentDepartmentIdList"
:rules="formRules" :key="index"
class="page-form" :label="item['department_name']"
v-loading="loading" :value="item['id']"
> />
<el-form-item :label="t('departmentName')" prop="department_name"> </el-select>
<el-input </el-form-item>
v-model="formData.department_name"
clearable </el-form>
:placeholder="t('departmentNamePlaceholder')"
class="input-width" <template #footer>
/> <span class="dialog-footer">
</el-form-item> <el-button @click="showDialog = false">{{ t('cancel') }}</el-button>
<el-button type="primary" :loading="loading" @click="confirm(formRef)">{{
<el-form-item :label="t('parentDepartmentId')"> t('confirm')
<el-select }}</el-button>
class="input-width" </span>
v-model="formData.parent_department_id" </template>
clearable </el-dialog>
:placeholder="t('parentDepartmentIdPlaceholder')"
>
<el-option label="请选择" value=""></el-option>
<el-option
v-for="(item, index) in parentDepartmentIdList"
:key="index"
:label="item['department_name']"
:value="item['id']"
/>
</el-select>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="showDialog = false">{{ t('cancel') }}</el-button>
<el-button
type="primary"
:loading="loading"
@click="confirm(formRef)"
>{{ t('confirm') }}</el-button
>
</span>
</template>
</el-dialog>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@ -60,12 +35,7 @@ import { ref, reactive, computed, watch } from 'vue'
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import { t } from '@/lang' import { t } from '@/lang'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import { import { addDepartments, editDepartments, getDepartmentsInfo, getWithDepartmentsList } from '@/app/api/departments'
addDepartments,
editDepartments,
getDepartmentsInfo,
getWithDepartmentsList,
} from '@/app/api/departments'
let showDialog = ref(false) let showDialog = ref(false)
const loading = ref(false) const loading = ref(false)
@ -74,9 +44,9 @@ const loading = ref(false)
* 表单数据 * 表单数据
*/ */
const initialFormData = { const initialFormData = {
id: '', id: '',
department_name: '', department_name: '',
parent_department_id: '', parent_department_id: '',
} }
const formData: Record<string, any> = reactive({ ...initialFormData }) const formData: Record<string, any> = reactive({ ...initialFormData })
@ -84,22 +54,18 @@ const formRef = ref<FormInstance>()
// //
const formRules = computed(() => { const formRules = computed(() => {
return { return {
department_name: [ department_name: [
{ { required: true, message: t('departmentNamePlaceholder'), trigger: 'blur' },
required: true,
message: t('departmentNamePlaceholder'), ]
trigger: 'blur', ,
},
],
parent_department_id: [ parent_department_id: [
{ { required: true, message: t('parentDepartmentIdPlaceholder'), trigger: 'blur' },
required: true,
message: t('parentDepartmentIdPlaceholder'), ]
trigger: 'blur',
}, }
],
}
}) })
const emit = defineEmits(['complete']) const emit = defineEmits(['complete'])
@ -109,98 +75,92 @@ const emit = defineEmits(['complete'])
* @param formEl * @param formEl
*/ */
const confirm = async (formEl: FormInstance | undefined) => { const confirm = async (formEl: FormInstance | undefined) => {
if (loading.value || !formEl) return if (loading.value || !formEl) return
let save = formData.id ? editDepartments : addDepartments let save = formData.id ? editDepartments : addDepartments
await formEl.validate(async (valid) => { await formEl.validate(async (valid) => {
if (valid) { if (valid) {
loading.value = true loading.value = true
let data = formData let data = formData
save(data) save(data).then(res => {
.then((res) => { loading.value = false
loading.value = false showDialog.value = false
showDialog.value = false emit('complete')
emit('complete') }).catch(err => {
}) loading.value = false
.catch((err) => { })
loading.value = false }
}) })
}
})
} }
// //
const parentDepartmentIdList = ref([] as any[])
const setParentDepartmentIdList = async () => { const parentDepartmentIdList = ref([] as any[])
parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data const setParentDepartmentIdList = async () => {
} parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data
setParentDepartmentIdList() }
setParentDepartmentIdList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true
if (row) { if(row){
const data = await (await getDepartmentsInfo(row.id)).data const data = await (await getDepartmentsInfo(row.id)).data
if (data) if (data) Object.keys(formData).forEach((key: string) => {
Object.keys(formData).forEach((key: string) => { if (data[key] != undefined) formData[key] = data[key]
if (data[key] != undefined) formData[key] = data[key] })
}) }
} loading.value = false
loading.value = false
} }
// //
const mobileVerify = (rule: any, value: any, callback: any) => { const mobileVerify = (rule: any, value: any, callback: any) => {
if (value && !/^1[3-9]\d{9}$/.test(value)) { if (value && !/^1[3-9]\d{9}$/.test(value)) {
callback(new Error(t('generateMobile'))) callback(new Error(t('generateMobile')))
} else { } else {
callback() callback()
} }
} }
// //
const idCardVerify = (rule: any, value: any, callback: any) => { const idCardVerify = (rule: any, value: any, callback: any) => {
if ( if (value && !/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(value)) {
value && callback(new Error(t('generateIdCard')))
!/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test( } else {
value callback()
) }
) {
callback(new Error(t('generateIdCard')))
} else {
callback()
}
} }
// //
const emailVerify = (rule: any, value: any, callback: any) => { const emailVerify = (rule: any, value: any, callback: any) => {
if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) { if (value && !/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(value)) {
callback(new Error(t('generateEmail'))) callback(new Error(t('generateEmail')))
} else { } else {
callback() callback()
} }
} }
// //
const numberVerify = (rule: any, value: any, callback: any) => { const numberVerify = (rule: any, value: any, callback: any) => {
if (!Number.isInteger(value)) { if (!Number.isInteger(value)) {
callback(new Error(t('generateNumber'))) callback(new Error(t('generateNumber')))
} else { } else {
callback() callback()
} }
} }
defineExpose({ defineExpose({
showDialog, showDialog,
setFormData, setFormData
}) })
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>
<style lang="scss"> <style lang="scss">
.diy-dialog-wrap .el-form-item__label { .diy-dialog-wrap .el-form-item__label{
height: auto !important; height: auto !important;
} }
</style> </style>

292
admin/src/app/views/departments/departments.vue

@ -1,140 +1,93 @@
<template> <template>
<div class="main-container"> <div class="main-container">
<el-card class="box-card !border-none" shadow="never"> <el-card class="box-card !border-none" shadow="never">
<div class="flex justify-between items-center">
<span class="text-lg">{{ pageName }}</span> <div class="flex justify-between items-center">
<el-button type="primary" @click="addEvent"> <span class="text-lg">{{pageName}}</span>
{{ t('addDepartments') }} <el-button type="primary" @click="addEvent">
</el-button> {{ t('addDepartments') }}
</div> </el-button>
</div>
<el-card
class="box-card !border-none my-[10px] table-search-wrap" <el-card class="box-card !border-none my-[10px] table-search-wrap" shadow="never">
shadow="never" <el-form :inline="true" :model="departmentsTable.searchParam" ref="searchFormRef">
> <el-form-item :label="t('departmentName')" prop="department_name">
<el-form <el-input v-model="departmentsTable.searchParam.department_name" :placeholder="t('departmentNamePlaceholder')" />
:inline="true" </el-form-item>
:model="departmentsTable.searchParam"
ref="searchFormRef" <el-form-item :label="t('parentDepartmentId')" prop="parent_department_id">
> <el-select class="w-[280px]" v-model="departmentsTable.searchParam.parent_department_id" clearable :placeholder="t('parentDepartmentIdPlaceholder')">
<el-form-item :label="t('departmentName')" prop="department_name"> <el-option
<el-input v-for="(item, index) in parentDepartmentIdList"
v-model="departmentsTable.searchParam.department_name" :key="index"
:placeholder="t('departmentNamePlaceholder')" :label="item['department_name']"
/> :value="item['id']"
</el-form-item> />
</el-select>
<el-form-item </el-form-item>
:label="t('parentDepartmentId')"
prop="parent_department_id" <el-form-item>
> <el-button type="primary" @click="loadDepartmentsList()">{{ t('search') }}</el-button>
<el-select <el-button @click="resetForm(searchFormRef)">{{ t('reset') }}</el-button>
class="w-[280px]" </el-form-item>
v-model="departmentsTable.searchParam.parent_department_id" </el-form>
clearable </el-card>
:placeholder="t('parentDepartmentIdPlaceholder')"
> <div class="mt-[10px]">
<el-option <el-table :data="departmentsTable.data" size="large" v-loading="departmentsTable.loading">
v-for="(item, index) in parentDepartmentIdList" <template #empty>
:key="index" <span>{{ !departmentsTable.loading ? t('emptyData') : '' }}</span>
:label="item['department_name']" </template>
:value="item['id']" <el-table-column prop="department_name" :label="t('departmentName')" min-width="120" :show-overflow-tooltip="true"/>
/>
</el-select> <el-table-column prop="parent_department_id_name" :label="t('parentDepartmentId')" min-width="120" :show-overflow-tooltip="true"/>
</el-form-item>
<el-table-column prop="created_at" :label="t('createdAt')" min-width="120" :show-overflow-tooltip="true"/>
<el-form-item>
<el-button type="primary" @click="loadDepartmentsList()">{{ <el-table-column prop="updated_at" :label="t('updatedAt')" min-width="120" :show-overflow-tooltip="true"/>
t('search')
}}</el-button> <el-table-column :label="t('operation')" fixed="right" min-width="120">
<el-button @click="resetForm(searchFormRef)">{{ <template #default="{ row }">
t('reset') <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
}}</el-button> <el-button type="primary" link @click="deleteEvent(row.id)">{{ t('delete') }}</el-button>
</el-form-item> </template>
</el-form> </el-table-column>
</el-card>
</el-table>
<div class="mt-[10px]"> <div class="mt-[16px] flex justify-end">
<el-table <el-pagination v-model:current-page="departmentsTable.page" v-model:page-size="departmentsTable.limit"
:data="departmentsTable.data" layout="total, sizes, prev, pager, next, jumper" :total="departmentsTable.total"
size="large" @size-change="loadDepartmentsList()" @current-change="loadDepartmentsList" />
v-loading="departmentsTable.loading" </div>
> </div>
<template #empty>
<span>{{ !departmentsTable.loading ? t('emptyData') : '' }}</span> <edit ref="editDepartmentsDialog" @complete="loadDepartmentsList" />
</template> </el-card>
<el-table-column </div>
prop="department_name"
:label="t('departmentName')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
prop="parent_department_id_name"
:label="t('parentDepartmentId')"
min-width="120"
:show-overflow-tooltip="true"
/>
<el-table-column
:label="t('operation')"
fixed="right"
min-width="120"
>
<template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{
t('edit')
}}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id)">{{
t('delete')
}}</el-button>
</template>
</el-table-column>
</el-table>
<div class="mt-[16px] flex justify-end">
<el-pagination
v-model:current-page="departmentsTable.page"
v-model:page-size="departmentsTable.limit"
layout="total, sizes, prev, pager, next, jumper"
:total="departmentsTable.total"
@size-change="loadDepartmentsList()"
@current-change="loadDepartmentsList"
/>
</div>
</div>
<edit ref="editDepartmentsDialog" @complete="loadDepartmentsList" />
</el-card>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, watch } from 'vue' import { reactive, ref, watch } from 'vue'
import { t } from '@/lang' import { t } from '@/lang'
import { useDictionary } from '@/app/api/dict' import { useDictionary } from '@/app/api/dict'
import { import { getDepartmentsList, deleteDepartments, getWithDepartmentsList } from '@/app/api/departments'
getDepartmentsList,
deleteDepartments,
getWithDepartmentsList,
} from '@/app/api/departments'
import { img } from '@/utils/common' import { img } from '@/utils/common'
import { ElMessageBox, FormInstance } from 'element-plus' import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/departments/components/departments-edit.vue' import Edit from '@/app/views/departments/components/departments-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title const pageName = route.meta.title;
let departmentsTable = reactive({ let departmentsTable = reactive({
page: 1, page: 1,
limit: 10, limit: 10,
total: 0, total: 0,
loading: true, loading: true,
data: [], data: [],
searchParam: { searchParam:{
department_name: '', "department_name":"",
parent_department_id: '', "parent_department_id":""
}, }
}) })
const searchFormRef = ref<FormInstance>() const searchFormRef = ref<FormInstance>()
@ -143,26 +96,25 @@ const searchFormRef = ref<FormInstance>()
const selectData = ref<any[]>([]) const selectData = ref<any[]>([])
// //
/** /**
* 获取部门列表 * 获取部门列表
*/ */
const loadDepartmentsList = (page: number = 1) => { const loadDepartmentsList = (page: number = 1) => {
departmentsTable.loading = true departmentsTable.loading = true
departmentsTable.page = page departmentsTable.page = page
getDepartmentsList({ getDepartmentsList({
page: departmentsTable.page, page: departmentsTable.page,
limit: departmentsTable.limit, limit: departmentsTable.limit,
...departmentsTable.searchParam, ...departmentsTable.searchParam
}) }).then(res => {
.then((res) => { departmentsTable.loading = false
departmentsTable.loading = false departmentsTable.data = res.data.data
departmentsTable.data = res.data.data departmentsTable.total = res.data.total
departmentsTable.total = res.data.total }).catch(() => {
}) departmentsTable.loading = false
.catch(() => {
departmentsTable.loading = false
}) })
} }
loadDepartmentsList() loadDepartmentsList()
@ -173,8 +125,8 @@ const editDepartmentsDialog: Record<string, any> | null = ref(null)
* 添加部门 * 添加部门
*/ */
const addEvent = () => { const addEvent = () => {
editDepartmentsDialog.value.setFormData() editDepartmentsDialog.value.setFormData()
editDepartmentsDialog.value.showDialog = true editDepartmentsDialog.value.showDialog = true
} }
/** /**
@ -182,48 +134,50 @@ const addEvent = () => {
* @param data * @param data
*/ */
const editEvent = (data: any) => { const editEvent = (data: any) => {
editDepartmentsDialog.value.setFormData(data) editDepartmentsDialog.value.setFormData(data)
editDepartmentsDialog.value.showDialog = true editDepartmentsDialog.value.showDialog = true
} }
/** /**
* 删除部门 * 删除部门
*/ */
const deleteEvent = (id: number) => { const deleteEvent = (id: number) => {
ElMessageBox.confirm(t('departmentsDeleteTips'), t('warning'), { ElMessageBox.confirm(t('departmentsDeleteTips'), t('warning'),
confirmButtonText: t('confirm'), {
cancelButtonText: t('cancel'), confirmButtonText: t('confirm'),
type: 'warning', cancelButtonText: t('cancel'),
}).then(() => { type: 'warning',
deleteDepartments(id) }
.then(() => { ).then(() => {
loadDepartmentsList() deleteDepartments(id).then(() => {
}) loadDepartmentsList()
.catch(() => {}) }).catch(() => {
}) })
})
} }
const parentDepartmentIdList = ref([])
const setParentDepartmentIdList = async () => { const parentDepartmentIdList = ref([])
parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data const setParentDepartmentIdList = async () => {
} parentDepartmentIdList.value = await (await getWithDepartmentsList({})).data
setParentDepartmentIdList() }
setParentDepartmentIdList()
const resetForm = (formEl: FormInstance | undefined) => { const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
loadDepartmentsList() loadDepartmentsList()
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
/* 多行超出隐藏 */ /* 多行超出隐藏 */
.multi-hidden { .multi-hidden {
word-break: break-all; word-break: break-all;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
display: -webkit-box; display: -webkit-box;
-webkit-line-clamp: 2; -webkit-line-clamp: 2;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
} }
</style> </style>

13
admin/src/app/views/future_ontent/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -139,6 +151,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/future_ontent/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/future_ontent/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

86
admin/src/app/views/future_ontent/future_ontent.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 13)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 13)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,10 +160,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 14)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 14)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -246,10 +248,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 15)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 15)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -265,12 +268,9 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
addPublicLibraryList editPublicLibraryList
<script lang="ts" setup> <script lang="ts" setup>
import { reactive, ref, watch } from 'vue' import { reactive, ref, watch } from 'vue'
import { t } from '@/lang' import { t } from '@/lang'
@ -282,6 +282,7 @@ import { ElMessageBox,FormInstance } from 'element-plus'
import Edit from '@/app/views/future_ontent/components/lesson-course-teaching-edit.vue' import Edit from '@/app/views/future_ontent/components/lesson-course-teaching-edit.vue'
import EditJump from '@/app/views/future_ontent/components/Jump-lesson-library-edit.vue' import EditJump from '@/app/views/future_ontent/components/Jump-lesson-library-edit.vue'
import EditEn from '@/app/views/future_ontent/components/en-course-teaching-edit.vue' import EditEn from '@/app/views/future_ontent/components/en-course-teaching-edit.vue'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
@ -350,7 +351,12 @@ statusDictList();
const editLessonCourseTeachingDialog: Record<string, any> | null = ref(null) const editLessonCourseTeachingDialog: Record<string, any> | null = ref(null)
const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null) const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null)
const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null) const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取课程教学大纲列表 * 获取课程教学大纲列表
*/ */
@ -503,52 +509,34 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 13) { if (type === 13) {
lessonCourseTeachingTable = reactive({ lessonCourseTeachingTable.searchParam.title = ''
page: 1, lessonCourseTeachingTable.searchParam.status = ''
limit: 10, lessonCourseTeachingTable.searchParam.create_time = ''
total: 0, lessonCourseTeachingTable.searchParam.update_time = ''
loading: true, lessonCourseTeachingTable.page = 1
data: [], lessonCourseTeachingTable.limit = 10
searchParam: { lessonCourseTeachingTable.data = []
"title": "", lessonCourseTeachingTable.table_type = 13
"status": "",
"create_time": [],
"update_time": [],
"table_type":13
}
})
loadLessonCourseTeachingList() loadLessonCourseTeachingList()
} else if (type === 14) { } else if (type === 14) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "", JumpLessonLibraryTable.table_type = 14
"status": "",
"create_time": [],
"update_time": [],
"table_type":14
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 15) { } else if (type === 15) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "", EnTeachingLibraryTable.table_type = 15
"status": "",
"create_time": [],
"update_time": [],
"table_type":15
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} }
} }

13
admin/src/app/views/instructional_material/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -138,6 +150,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/instructional_material/components/basketball-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/instructional_material/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -132,6 +144,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/instructional_material/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

99
admin/src/app/views/instructional_material/instructional_material.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="updateActionLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="updateActionLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 9)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 9)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -158,10 +159,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 10)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 10)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -245,10 +247,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 11)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 11)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -332,10 +335,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 12)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 12)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -351,6 +355,7 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
@ -366,6 +371,7 @@ import Edit from '@/app/views/instructional_material/components/lesson-course-te
import EditJump from '@/app/views/instructional_material/components/Jump-lesson-library-edit.vue' import EditJump from '@/app/views/instructional_material/components/Jump-lesson-library-edit.vue'
import EditEn from '@/app/views/instructional_material/components/en-course-teaching-edit.vue' import EditEn from '@/app/views/instructional_material/components/en-course-teaching-edit.vue'
import EditBasketball from '@/app/views/instructional_material/components/basketball-course-teaching-edit.vue' import EditBasketball from '@/app/views/instructional_material/components/basketball-course-teaching-edit.vue'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
@ -446,7 +452,12 @@ const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null)
const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null) const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null) const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editStrengthenTeachingLibraryDialog: Record<string, any> | null = ref(null) const editStrengthenTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取热身动作库列表 * 获取热身动作库列表
*/ */
@ -637,64 +648,40 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 9) { if (type === 9) {
ActionLibraryTable = reactive({ ActionLibraryTable.searchParam.title = ''
page: 1, ActionLibraryTable.searchParam.status = ''
limit: 10, ActionLibraryTable.searchParam.create_time = ''
total: 0, ActionLibraryTable.searchParam.update_time = ''
loading: true, ActionLibraryTable.page = 1
data: [], ActionLibraryTable.limit = 10
searchParam: { ActionLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadActionLibraryList() loadActionLibraryList()
} else if (type === 10) { } else if (type === 10) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 11) { } else if (type === 11) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} else if (type === 12) { } else if (type === 12) {
BasketballTeachingLibraryTable = reactive({ BasketballTeachingLibraryTable.searchParam.title = ''
page: 1, BasketballTeachingLibraryTable.searchParam.status = ''
limit: 10, BasketballTeachingLibraryTable.searchParam.create_time = ''
total: 0, BasketballTeachingLibraryTable.searchParam.update_time = ''
loading: true, BasketballTeachingLibraryTable.page = 1
data: [], BasketballTeachingLibraryTable.limit = 10
searchParam: { BasketballTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadBasketballTeachingLibraryList() loadBasketballTeachingLibraryList()
} }
} }

21
admin/src/app/views/lesson_course_teaching/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -137,6 +149,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -161,10 +174,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/basketball-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -157,10 +170,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -132,6 +144,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -156,10 +169,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -157,10 +170,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/ninja-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -157,10 +170,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/physical-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -157,10 +170,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/security-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -157,10 +170,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

21
admin/src/app/views/lesson_course_teaching/components/strengthen-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -132,6 +144,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false
@ -156,10 +169,10 @@ const confirm = async (formEl: FormInstance | undefined) => {
const userPermissionList = ref([] as any[]) const userPermissionList = ref([] as any[])
const setUserPermissionList = async () => { // const setUserPermissionList = async () => {
userPermissionList.value = await (await getWithPersonnelDataList({})).data // userPermissionList.value = await (await getWithPersonnelDataList({})).data
} // }
setUserPermissionList() // setUserPermissionList()
const setFormData = async (row: any = null) => { const setFormData = async (row: any = null) => {
Object.assign(formData, initialFormData) Object.assign(formData, initialFormData)
loading.value = true loading.value = true

192
admin/src/app/views/lesson_course_teaching/lesson_course_teaching.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 1)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 1)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,10 +160,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 2)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 2)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -246,10 +248,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 3)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 3)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -333,10 +336,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 4)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 4)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -420,10 +424,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editStrengthenTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editStrengthenTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 5)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 5)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -507,10 +512,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editNinjaTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editNinjaTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 6)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 6)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -594,10 +600,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editSecurityTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editSecurityTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 7)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 7)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -681,10 +688,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editPhysicalTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editPhysicalTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 8)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 8)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -700,6 +708,7 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
@ -718,6 +727,7 @@ import EditStrengthen from '@/app/views/lesson_course_teaching/components/streng
import EditNinja from '@/app/views/lesson_course_teaching/components/ninja-teaching-edit.vue' import EditNinja from '@/app/views/lesson_course_teaching/components/ninja-teaching-edit.vue'
import EditSecurity from '@/app/views/lesson_course_teaching/components/security-teaching-edit.vue' import EditSecurity from '@/app/views/lesson_course_teaching/components/security-teaching-edit.vue'
import EditPhysical from '@/app/views/lesson_course_teaching/components/physical-teaching-edit.vue' import EditPhysical from '@/app/views/lesson_course_teaching/components/physical-teaching-edit.vue'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
@ -852,6 +862,12 @@ const editStrengthenTeachingLibraryDialog: Record<string, any> | null = ref(null
const editNinjaTeachingLibraryDialog: Record<string, any> | null = ref(null) const editNinjaTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editSecurityTeachingLibraryDialog: Record<string, any> | null = ref(null) const editSecurityTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editPhysicalTeachingLibraryDialog: Record<string, any> | null = ref(null) const editPhysicalTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取课程教学大纲列表 * 获取课程教学大纲列表
@ -1205,124 +1221,76 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 1) { if (type === 1) {
lessonCourseTeachingTable = reactive({ lessonCourseTeachingTable.searchParam.title = ''
page: 1, lessonCourseTeachingTable.searchParam.status = ''
limit: 10, lessonCourseTeachingTable.searchParam.create_time = ''
total: 0, lessonCourseTeachingTable.searchParam.update_time = ''
loading: true, lessonCourseTeachingTable.page = 1
data: [], lessonCourseTeachingTable.limit = 10
searchParam: { lessonCourseTeachingTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadLessonCourseTeachingList() loadLessonCourseTeachingList()
} else if (type === 2) { } else if (type === 2) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 3) { } else if (type === 3) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} else if (type === 4) { } else if (type === 4) {
BasketballTeachingLibraryTable = reactive({ BasketballTeachingLibraryTable.searchParam.title = ''
page: 1, BasketballTeachingLibraryTable.searchParam.status = ''
limit: 10, BasketballTeachingLibraryTable.searchParam.create_time = ''
total: 0, BasketballTeachingLibraryTable.searchParam.update_time = ''
loading: true, BasketballTeachingLibraryTable.page = 1
data: [], BasketballTeachingLibraryTable.limit = 10
searchParam: { BasketballTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadBasketballTeachingLibraryList() loadBasketballTeachingLibraryList()
} else if (type === 5) { } else if (type === 5) {
StrengTeachingLibraryTable = reactive({ StrengTeachingLibraryTable.searchParam.title = ''
page: 1, StrengTeachingLibraryTable.searchParam.status = ''
limit: 10, StrengTeachingLibraryTable.searchParam.create_time = ''
total: 0, StrengTeachingLibraryTable.searchParam.update_time = ''
loading: true, StrengTeachingLibraryTable.page = 1
data: [], StrengTeachingLibraryTable.limit = 10
searchParam: { StrengTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} else if (type === 6) { } else if (type === 6) {
NinjaTeachingLibraryTable = reactive({ NinjaTeachingLibraryTable.searchParam.title = ''
page: 1, NinjaTeachingLibraryTable.searchParam.status = ''
limit: 10, NinjaTeachingLibraryTable.searchParam.create_time = ''
total: 0, NinjaTeachingLibraryTable.searchParam.update_time = ''
loading: true, NinjaTeachingLibraryTable.page = 1
data: [], NinjaTeachingLibraryTable.limit = 10
searchParam: { NinjaTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} else if (type === 7) { } else if (type === 7) {
SecurityTeachingLibraryTable = reactive({ SecurityTeachingLibraryTable.searchParam.title = ''
page: 1, SecurityTeachingLibraryTable.searchParam.status = ''
limit: 10, SecurityTeachingLibraryTable.searchParam.create_time = ''
total: 0, SecurityTeachingLibraryTable.searchParam.update_time = ''
loading: true, SecurityTeachingLibraryTable.page = 1
data: [], SecurityTeachingLibraryTable.limit = 10
searchParam: { SecurityTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} else if (type === 8) { } else if (type === 8) {
PhysicalTeachingLibraryTable = reactive({ PhysicalTeachingLibraryTable.searchParam.title = ''
page: 1, PhysicalTeachingLibraryTable.searchParam.status = ''
limit: 10, PhysicalTeachingLibraryTable.searchParam.create_time = ''
total: 0, PhysicalTeachingLibraryTable.searchParam.update_time = ''
loading: true, PhysicalTeachingLibraryTable.page = 1
data: [], PhysicalTeachingLibraryTable.limit = 10
searchParam: { PhysicalTeachingLibraryTable.data = []
"title": "",
"status": "",
"create_time": [],
"update_time": []
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} }
} }

13
admin/src/app/views/physical_testing/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -139,6 +151,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/physical_testing/components/basketball-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/physical_testing/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/physical_testing/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

115
admin/src/app/views/physical_testing/physical_testing.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 23)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 23)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,10 +160,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 24)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 24)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -246,10 +248,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 25)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 25)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -333,10 +336,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 26)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 26)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -352,6 +356,7 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
@ -367,6 +372,7 @@ import EditJump from '@/app/views/physical_testing/components/Jump-lesson-librar
import EditEn from '@/app/views/physical_testing/components/en-course-teaching-edit.vue' import EditEn from '@/app/views/physical_testing/components/en-course-teaching-edit.vue'
import EditBasketball from '@/app/views/physical_testing/components/basketball-course-teaching-edit.vue' import EditBasketball from '@/app/views/physical_testing/components/basketball-course-teaching-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
const active = 'CourseSyllabus' const active = 'CourseSyllabus'
@ -382,7 +388,7 @@ let lessonCourseTeachingTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 23 "table_type": 23
} }
}) })
let JumpLessonLibraryTable = reactive({ let JumpLessonLibraryTable = reactive({
@ -396,7 +402,7 @@ let JumpLessonLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 24 "table_type": 24
} }
}) })
let EnTeachingLibraryTable = reactive({ let EnTeachingLibraryTable = reactive({
@ -410,7 +416,7 @@ let EnTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 25 "table_type": 25
} }
}) })
let BasketballTeachingLibraryTable = reactive({ let BasketballTeachingLibraryTable = reactive({
@ -424,7 +430,7 @@ let BasketballTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 26 "table_type": 26
} }
}) })
@ -449,7 +455,12 @@ const editLessonCourseTeachingDialog: Record<string, any> | null = ref(null)
const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null) const editJumpLessonLibraryDialog: Record<string, any> | null = ref(null)
const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null) const editEnTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null) const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取课程教学大纲列表 * 获取课程教学大纲列表
*/ */
@ -644,68 +655,44 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 23) { if (type === 23) {
lessonCourseTeachingTable = reactive({ lessonCourseTeachingTable.searchParam.title = ''
page: 1, lessonCourseTeachingTable.searchParam.status = ''
limit: 10, lessonCourseTeachingTable.searchParam.create_time = ''
total: 0, lessonCourseTeachingTable.searchParam.update_time = ''
loading: true, lessonCourseTeachingTable.page = 1
data: [], lessonCourseTeachingTable.limit = 10
searchParam: { lessonCourseTeachingTable.data = []
"title": "", lessonCourseTeachingTable.table_type = 23
"status": "",
"create_time": [],
"update_time": [],
table_type: 23
}
})
loadLessonCourseTeachingList() loadLessonCourseTeachingList()
} else if (type === 24) { } else if (type === 24) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "", JumpLessonLibraryTable.table_type = 24
"status": "",
"create_time": [],
"update_time": [],
table_type: 24
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 25) { } else if (type === 25) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "", EnTeachingLibraryTable.table_type = 25
"status": "",
"create_time": [],
"update_time": [],
table_type: 25
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} else if (type === 26) { } else if (type === 26) {
BasketballTeachingLibraryTable = reactive({ BasketballTeachingLibraryTable.searchParam.title = ''
page: 1, BasketballTeachingLibraryTable.searchParam.status = ''
limit: 10, BasketballTeachingLibraryTable.searchParam.create_time = ''
total: 0, BasketballTeachingLibraryTable.searchParam.update_time = ''
loading: true, BasketballTeachingLibraryTable.page = 1
data: [], BasketballTeachingLibraryTable.limit = 10
searchParam: { BasketballTeachingLibraryTable.data = []
"title": "", BasketballTeachingLibraryTable.table_type = 26
"status": "",
"create_time": [],
"update_time": [],
table_type: 26
}
})
loadBasketballTeachingLibraryList() loadBasketballTeachingLibraryList()
} }
} }

13
admin/src/app/views/professional_skills/components/Jump-lesson-library-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -139,6 +151,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/basketball-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/en-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/lesson-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/ninja-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/security-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -134,6 +146,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

13
admin/src/app/views/professional_skills/components/strengthen-course-teaching-edit.vue

@ -21,6 +21,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label="t('url1')" v-if="formData.type == 3">
<upload-image v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url2')" v-if="formData.type == 2">
<upload-file v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('url3')" v-if="formData.type == 1">
<upload-video v-model="formData.url" />
</el-form-item>
<el-form-item :label="t('content')" prop="content"> <el-form-item :label="t('content')" prop="content">
<editor v-model="formData.content" /> <editor v-model="formData.content" />
</el-form-item> </el-form-item>
@ -133,6 +145,7 @@ const confirm = async (formEl: FormInstance | undefined) => {
save(data).then(res => { save(data).then(res => {
loading.value = false loading.value = false
showDialog.value = false showDialog.value = false
formData.url = ''
emit('complete') emit('complete')
}).catch(err => { }).catch(err => {
loading.value = false loading.value = false

196
admin/src/app/views/professional_skills/professional_skills.vue

@ -72,10 +72,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEvent(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 16)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 16)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -159,10 +160,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editJumpLessonLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 17)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 17)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -246,10 +248,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editEnTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 18)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 18)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -333,10 +336,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editBasketballTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 19)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 19)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -420,10 +424,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editStrengthenTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editStrengthenTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 20)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 20)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -507,10 +512,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editNinjaTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editNinjaTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 21)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 21)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -594,10 +600,11 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column :label="t('operation')" fixed="right" min-width="120"> <el-table-column :label="t('operation')" fixed="right" min-width="180">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" link @click="editSecurityTeachingLibrary(row)">{{ t('edit') }}</el-button> <el-button type="primary" link @click="editSecurityTeachingLibrary(row)">{{ t('edit') }}</el-button>
<el-button type="primary" link @click="deleteEvent(row.id, 22)">{{ t('delete') }}</el-button> <el-button type="primary" link @click="deleteEvent(row.id, 22)">{{ t('delete') }}</el-button>
<el-button type="primary" link @click="addBindingPersonnel(row)">{{ t('addBindingPersonnel') }}</el-button>
</template> </template>
</el-table-column> </el-table-column>
@ -613,6 +620,7 @@
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
<binding-personnel ref="BindingPersonnelDialog" @complete="loadLessonCourseTeachingList" />
</div> </div>
</template> </template>
@ -632,6 +640,7 @@ import EditNinja from '@/app/views/professional_skills/components/ninja-teaching
import EditSecurity from '@/app/views/professional_skills/components/security-teaching-edit.vue' import EditSecurity from '@/app/views/professional_skills/components/security-teaching-edit.vue'
import EditPhysical from '@/app/views/professional_skills/components/physical-teaching-edit.vue' import EditPhysical from '@/app/views/professional_skills/components/physical-teaching-edit.vue'
import { useRoute } from 'vue-router' import { useRoute } from 'vue-router'
import bindingPersonnel from '@/app/views/binding_personnel/binding_personnel.vue'
const route = useRoute() const route = useRoute()
const pageName = route.meta.title; const pageName = route.meta.title;
const active = 'CourseSyllabus' const active = 'CourseSyllabus'
@ -647,7 +656,7 @@ let lessonCourseTeachingTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 16 "table_type": 16
} }
}) })
let JumpLessonLibraryTable = reactive({ let JumpLessonLibraryTable = reactive({
@ -661,7 +670,7 @@ let JumpLessonLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 17 "table_type": 17
} }
}) })
let EnTeachingLibraryTable = reactive({ let EnTeachingLibraryTable = reactive({
@ -675,7 +684,7 @@ let EnTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 18 "table_type": 18
} }
}) })
let BasketballTeachingLibraryTable = reactive({ let BasketballTeachingLibraryTable = reactive({
@ -689,7 +698,7 @@ let BasketballTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 19 "table_type": 19
} }
}) })
let StrengTeachingLibraryTable = reactive({ let StrengTeachingLibraryTable = reactive({
@ -703,7 +712,7 @@ let StrengTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 20 "table_type": 20
} }
}) })
let NinjaTeachingLibraryTable = reactive({ let NinjaTeachingLibraryTable = reactive({
@ -717,7 +726,7 @@ let NinjaTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 21 "table_type": 21
} }
}) })
let SecurityTeachingLibraryTable = reactive({ let SecurityTeachingLibraryTable = reactive({
@ -731,7 +740,7 @@ let SecurityTeachingLibraryTable = reactive({
"status":"", "status":"",
"create_time":[], "create_time":[],
"update_time":[], "update_time":[],
table_type: 22 "table_type": 22
} }
}) })
@ -759,7 +768,12 @@ const editBasketballTeachingLibraryDialog: Record<string, any> | null = ref(null
const editStrengthenTeachingLibraryDialog: Record<string, any> | null = ref(null) const editStrengthenTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editNinjaTeachingLibraryDialog: Record<string, any> | null = ref(null) const editNinjaTeachingLibraryDialog: Record<string, any> | null = ref(null)
const editSecurityTeachingLibraryDialog: Record<string, any> | null = ref(null) const editSecurityTeachingLibraryDialog: Record<string, any> | null = ref(null)
const BindingPersonnelDialog: Record<string, any> | null = ref(null)
const addBindingPersonnel = (row) => {
BindingPersonnelDialog.value.setFormData(row)
BindingPersonnelDialog.value.showDialog = true
}
/** /**
* 获取课程教学大纲列表 * 获取课程教学大纲列表
*/ */
@ -1072,116 +1086,74 @@ const resetForm = (formEl: FormInstance | undefined, type: number) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
if (type === 16) { if (type === 16) {
lessonCourseTeachingTable = reactive({ lessonCourseTeachingTable.searchParam.title = ''
page: 1, lessonCourseTeachingTable.searchParam.status = ''
limit: 10, lessonCourseTeachingTable.searchParam.create_time = ''
total: 0, lessonCourseTeachingTable.searchParam.update_time = ''
loading: true, lessonCourseTeachingTable.page = 1
data: [], lessonCourseTeachingTable.limit = 10
searchParam: { lessonCourseTeachingTable.data = []
"title": "", lessonCourseTeachingTable.table_type = 16
"status": "",
"create_time": [],
"update_time": [],
table_type: 16
}
})
loadLessonCourseTeachingList() loadLessonCourseTeachingList()
} else if (type === 17) { } else if (type === 17) {
JumpLessonLibraryTable = reactive({ JumpLessonLibraryTable.searchParam.title = ''
page: 1, JumpLessonLibraryTable.searchParam.status = ''
limit: 10, JumpLessonLibraryTable.searchParam.create_time = ''
total: 0, JumpLessonLibraryTable.searchParam.update_time = ''
loading: true, JumpLessonLibraryTable.page = 1
data: [], JumpLessonLibraryTable.limit = 10
searchParam: { JumpLessonLibraryTable.data = []
"title": "", JumpLessonLibraryTable.table_type = 17
"status": "",
"create_time": [],
"update_time": [],
table_type: 17
}
})
loadJumpLessonLibraryList() loadJumpLessonLibraryList()
} else if (type === 18) { } else if (type === 18) {
EnTeachingLibraryTable = reactive({ EnTeachingLibraryTable.searchParam.title = ''
page: 1, EnTeachingLibraryTable.searchParam.status = ''
limit: 10, EnTeachingLibraryTable.searchParam.create_time = ''
total: 0, EnTeachingLibraryTable.searchParam.update_time = ''
loading: true, EnTeachingLibraryTable.page = 1
data: [], EnTeachingLibraryTable.limit = 10
searchParam: { EnTeachingLibraryTable.data = []
"title": "", EnTeachingLibraryTable.table_type = 18
"status": "",
"create_time": [],
"update_time": [],
table_type: 18
}
})
loadEnTeachingLibraryList() loadEnTeachingLibraryList()
} else if (type === 19) { } else if (type === 19) {
BasketballTeachingLibraryTable = reactive({ BasketballTeachingLibraryTable.searchParam.title = ''
page: 1, BasketballTeachingLibraryTable.searchParam.status = ''
limit: 10, BasketballTeachingLibraryTable.searchParam.create_time = ''
total: 0, BasketballTeachingLibraryTable.searchParam.update_time = ''
loading: true, BasketballTeachingLibraryTable.page = 1
data: [], BasketballTeachingLibraryTable.limit = 10
searchParam: { BasketballTeachingLibraryTable.data = []
"title": "", BasketballTeachingLibraryTable.table_type = 19
"status": "",
"create_time": [],
"update_time": [],
table_type: 19
}
})
loadBasketballTeachingLibraryList() loadBasketballTeachingLibraryList()
} else if (type === 20) { } else if (type === 20) {
StrengTeachingLibraryTable = reactive({ StrengTeachingLibraryTable.searchParam.title = ''
page: 1, StrengTeachingLibraryTable.searchParam.status = ''
limit: 10, StrengTeachingLibraryTable.searchParam.create_time = ''
total: 0, StrengTeachingLibraryTable.searchParam.update_time = ''
loading: true, StrengTeachingLibraryTable.page = 1
data: [], StrengTeachingLibraryTable.limit = 10
searchParam: { StrengTeachingLibraryTable.data = []
"title": "", StrengTeachingLibraryTable.table_type = 20
"status": "",
"create_time": [],
"update_time": [],
table_type: 20
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} else if (type === 21) { } else if (type === 21) {
NinjaTeachingLibraryTable = reactive({ NinjaTeachingLibraryTable.searchParam.title = ''
page: 1, NinjaTeachingLibraryTable.searchParam.status = ''
limit: 10, NinjaTeachingLibraryTable.searchParam.create_time = ''
total: 0, NinjaTeachingLibraryTable.searchParam.update_time = ''
loading: true, NinjaTeachingLibraryTable.page = 1
data: [], NinjaTeachingLibraryTable.limit = 10
searchParam: { NinjaTeachingLibraryTable.data = []
"title": "", NinjaTeachingLibraryTable.table_type = 21
"status": "",
"create_time": [],
"update_time": [],
table_type: 21
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} else if (type === 22) { } else if (type === 22) {
SecurityTeachingLibraryTable = reactive({ SecurityTeachingLibraryTable.searchParam.title = ''
page: 1, SecurityTeachingLibraryTable.searchParam.status = ''
limit: 10, SecurityTeachingLibraryTable.searchParam.create_time = ''
total: 0, SecurityTeachingLibraryTable.searchParam.update_time = ''
loading: true, SecurityTeachingLibraryTable.page = 1
data: [], SecurityTeachingLibraryTable.limit = 10
searchParam: { SecurityTeachingLibraryTable.data = []
"title": "", SecurityTeachingLibraryTable.table_type = 22
"status": "",
"create_time": [],
"update_time": [],
table_type: 22
}
})
loadStrengthenTeachingLibraryList() loadStrengthenTeachingLibraryList()
} }
} }

3
admin/src/app/views/six_speed/components/six-speed-edit.vue

@ -35,6 +35,7 @@
:placeholder="t('preferredClassTimePlaceholder')"> :placeholder="t('preferredClassTimePlaceholder')">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item :label="t('distance')" prop="distance"> <el-form-item :label="t('distance')" prop="distance">
<el-input v-model="formData.distance" clearable :placeholder="t('distancePlaceholder')" class="input-width" /> <el-input v-model="formData.distance" clearable :placeholder="t('distancePlaceholder')" class="input-width" />
</el-form-item> </el-form-item>
@ -231,6 +232,8 @@ const confirm = async (formEl: FormInstance | undefined) => {
} }
purchase_powerDictList(); purchase_powerDictList();
watch(() => purchase_powerList.value, () => { formData.purchase_power = purchase_powerList.value[0].value }) watch(() => purchase_powerList.value, () => { formData.purchase_power = purchase_powerList.value[0].value })
let concept_awarenessList = ref([]) let concept_awarenessList = ref([])
const concept_awarenessDictList = async () => { const concept_awarenessDictList = async () => {
concept_awarenessList.value = await (await useDictionary('cognitive_concept')).data.dictionary concept_awarenessList.value = await (await useDictionary('cognitive_concept')).data.dictionary

72
niucloud/app/adminapi/controller/lesson_course_teaching/LessonCourseTeaching.php

@ -49,7 +49,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",1] ["table_type",1],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->add($data); $id = (new LessonCourseTeachingService())->add($data);
@ -68,6 +69,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->edit($id, $data); (new LessonCourseTeachingService())->edit($id, $data);
@ -101,7 +103,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",2] ["table_type",2],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->jumpAdd($data); $id = (new LessonCourseTeachingService())->jumpAdd($data);
@ -120,6 +123,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->jumpEdit($id, $data); (new LessonCourseTeachingService())->jumpEdit($id, $data);
@ -154,7 +158,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",3] ["table_type",3],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->enAdd($data); $id = (new LessonCourseTeachingService())->enAdd($data);
@ -173,6 +178,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->enEdit($id, $data); (new LessonCourseTeachingService())->enEdit($id, $data);
@ -207,7 +213,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",4] ["table_type",4],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->basketballAdd($data); $id = (new LessonCourseTeachingService())->basketballAdd($data);
@ -226,6 +233,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->basketballEdit($id, $data); (new LessonCourseTeachingService())->basketballEdit($id, $data);
@ -260,7 +268,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",5] ["table_type",5],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->strengAdd($data); $id = (new LessonCourseTeachingService())->strengAdd($data);
@ -279,6 +288,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->strengEdit($id, $data); (new LessonCourseTeachingService())->strengEdit($id, $data);
@ -312,7 +322,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",6] ["table_type",6],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->ninjaAdd($data); $id = (new LessonCourseTeachingService())->ninjaAdd($data);
@ -331,6 +342,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->ninjaEdit($id, $data); (new LessonCourseTeachingService())->ninjaEdit($id, $data);
@ -364,7 +376,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",7] ["table_type",7],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->securityAdd($data); $id = (new LessonCourseTeachingService())->securityAdd($data);
@ -383,6 +396,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->securityEdit($id, $data); (new LessonCourseTeachingService())->securityEdit($id, $data);
@ -417,7 +431,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",8] ["table_type",8],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->physicalAdd($data); $id = (new LessonCourseTeachingService())->physicalAdd($data);
@ -436,6 +451,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->physicalEdit($id, $data); (new LessonCourseTeachingService())->physicalEdit($id, $data);
@ -469,7 +485,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",9] ["table_type",9],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->actionAdd($data); $id = (new LessonCourseTeachingService())->actionAdd($data);
@ -488,6 +505,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->actionEdit($id, $data); (new LessonCourseTeachingService())->actionEdit($id, $data);
@ -521,7 +539,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",10] ["table_type",10],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->fitnessAdd($data); $id = (new LessonCourseTeachingService())->fitnessAdd($data);
@ -540,6 +559,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->fitnessEdit($id, $data); (new LessonCourseTeachingService())->fitnessEdit($id, $data);
@ -573,7 +593,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",11] ["table_type",11],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->gamesAdd($data); $id = (new LessonCourseTeachingService())->gamesAdd($data);
@ -592,6 +613,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->gamesEdit($id, $data); (new LessonCourseTeachingService())->gamesEdit($id, $data);
@ -625,7 +647,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",12] ["table_type",12],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->relaxationAdd($data); $id = (new LessonCourseTeachingService())->relaxationAdd($data);
@ -644,6 +667,7 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->relaxationEdit($id, $data); (new LessonCourseTeachingService())->relaxationEdit($id, $data);
@ -669,7 +693,8 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["table_type",0] ["table_type",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->publicAdd($data); $id = (new LessonCourseTeachingService())->publicAdd($data);
@ -682,12 +707,27 @@ class LessonCourseTeaching extends BaseAdminController
["type",0], ["type",0],
["content",""], ["content",""],
["status",0], ["status",0],
["url",'']
]); ]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit'); $this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.edit');
(new LessonCourseTeachingService())->publicEdit($id, $data); (new LessonCourseTeachingService())->publicEdit($id, $data);
return success('EDIT_SUCCESS'); return success('EDIT_SUCCESS');
} }
public function setBindingModule(int $id){
$data = $this->request->params([
["user_permission",""],
["user_permission_name",""],
["table_type",0],
["id",0],
]);
$this->validate($data, 'app\validate\lesson_course_teaching\LessonCourseTeaching.add');
$id = (new LessonCourseTeachingService())->bindingModuleAdd($id, $data);
return success('ADD_SUCCESS', ['id' => $id]);
}
/** /**
@ -712,7 +752,11 @@ class LessonCourseTeaching extends BaseAdminController
public function getPersonnelDataAll(){ public function getPersonnelDataAll(){
return success(( new LessonCourseTeachingService())->getPersonnelDataAll()); $data = $this->request->params([
["name",""],
["phone",""]
]);
return success((new LessonCourseTeachingService())->getPersonnelDataAll($data));
} }
} }

2
niucloud/app/adminapi/route/lesson_course_teaching.php

@ -107,6 +107,8 @@ Route::group('lesson_course_teaching', function () {
Route::post('public_library', 'lesson_course_teaching.LessonCourseTeaching/publicAdd'); Route::post('public_library', 'lesson_course_teaching.LessonCourseTeaching/publicAdd');
Route::put('public_library/:id', 'lesson_course_teaching.LessonCourseTeaching/publicEdit'); Route::put('public_library/:id', 'lesson_course_teaching.LessonCourseTeaching/publicEdit');
Route::put('binding_module/:id', 'lesson_course_teaching.LessonCourseTeaching/setBindingModule');
//教研管理详情 //教研管理详情
Route::get('lesson_course_teaching/:id', 'lesson_course_teaching.LessonCourseTeaching/info'); Route::get('lesson_course_teaching/:id', 'lesson_course_teaching.LessonCourseTeaching/info');
//删除教研管理 //删除教研管理

44
niucloud/app/api/controller/apiController/Common.php

@ -0,0 +1,44 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\api\controller\apiController;
use app\dict\member\MemberLoginTypeDict;
use app\Request;
use app\service\api\apiService\PersonnelService;
use app\service\api\captcha\CaptchaService;
use app\service\api\login\ConfigService;
use app\service\api\login\LoginService;
use core\base\BaseApiService;
use Exception;
use think\Response;
/**
* 公共控制器相关接口
* Class Personnel
* @package app\api\controller\apiController
*/
class Common extends BaseApiService
{
//员工详情
public function info(Request $request){
//获取员工信息
$where = [
'id'=>$this->member_id,
];
$res = (new PersonnelService())->info($where);
if(!$res){
return fail('账户信息有误');
}
return success($res);
}
}

179
niucloud/app/api/controller/apiController/Personnel.php

@ -0,0 +1,179 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\api\controller\apiController;
use app\dict\member\MemberLoginTypeDict;
use app\Request;
use app\service\api\apiService\PersonnelService;
use app\service\api\captcha\CaptchaService;
use app\service\api\login\ConfigService;
use app\service\api\login\LoginService;
use core\base\BaseApiService;
use Exception;
use think\Response;
/**
* 员工端相关接口
* Class Personnel
* @package app\api\controller\apiController
*/
class Personnel extends BaseApiService
{
//员工详情
public function info(Request $request){
//获取员工信息
$where = [
'id'=>$this->member_id,
];
$res = (new PersonnelService())->info($where);
if(!$res){
return fail('账户信息有误');
}
return success($res);
}
//员工修改
public function edit(Request $request){
$params = $request->all();
$data = [
'head_img'=>$params['head_img'],//头像|绝对地址
'name'=>$params['name'],//姓名
'address'=>$params['address'],//住址
'gender'=>$params['gender'],//性别
'birthday'=>$params['birthday'],//生日
'email'=>$params['email'],//邮箱
'phone'=>$params['phone'],//手机号
'wx'=>$params['wx'],//微信号
];
//获取员工信息
$where = [
'id'=>$this->member_id,
];
$res = (new PersonnelService())->edit($where,$data);
if(!$res['code']){
return fail('操作失败');
}
return success([]);
}
/**
* 登录
* @return Response
*/
public function login()
{
$data = $this->request->params([
['username', ''],
['password', ''],
]);
//校验登录注册配置
(new ConfigService())->checkLoginConfig(MemberLoginTypeDict::USERNAME);
//参数验证
//验证码验证
$result = (new LoginService())->account($data['username'], $data['password']);
if (!$result) {
//账号密码错误, 重置验证码
return fail('ACCOUNT_OR_PASSWORD_ERROR');
}
return success($result);
}
/**
* 登出
* @return Response
*/
public function logout()
{
(new LoginService)->logout();
return success('MEMBER_LOGOUT');
}
/**
* 创建验证码
* @return Response
*/
public function captcha()
{
return success((new CaptchaService())->create());
}
/**
* 发送手机验证码
* @param $type
* @return Response
* @throws Exception
*/
public function sendMobileCode($type)
{
$data = $this->request->params([
['mobile', ''],
]);
return success((new LoginService())->sendMobileCode($data['mobile'], $type));
}
/**
* 手机号登录
* @return Response
*/
public function mobile()
{
$data = $this->request->params([
['mobile', ''],
['nickname', ''],
['headimg', ''],
['mobile', '']
]);
//校验登录注册配置
(new ConfigService())->checkLoginConfig(MemberLoginTypeDict::MOBILE);
return success((new LoginService())->mobile($data));
}
/**
* 重置密码
* @return Response
*/
public function resetPassword()
{
$data = $this->request->params([
['mobile', ''],
['password', '']
]);
//参数验证
$this->validate($data, 'app\validate\member\Member.reset_password');
(new LoginService())->resetPassword($data['mobile'], $data['password']);
return success('PASSWORD_RESET_SUCCESS');
}
//销售教师人员登陆
public function personnelLogin()
{
$data = $this->request->params([
['phone', ''],
['password', ''],
['login_type', ''],//登陆类型|1=教练,2=销售
]);
//验证码验证
$result = (new LoginService())->loginByPersonnel($data);
if(!$result['user_type']){
if($data['login_type'] == 1){
$msg = '暂无教练权限';
}else{
$msg = '暂无销售权限';
}
return fail($msg);//code|0错误
}
return success($result);//code|1正确
}
}

36
niucloud/app/api/controller/apiController/teachingResearch.php

@ -0,0 +1,36 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\api\controller\apiController;
use app\dict\member\MemberLoginTypeDict;
use app\Request;
use app\service\api\apiService\PersonnelService;
use app\service\api\captcha\CaptchaService;
use app\service\api\login\ConfigService;
use app\service\api\login\LoginService;
use core\base\BaseApiService;
use Exception;
use think\Response;
/**
* 公共控制器相关接口
* Class Personnel
* @package app\api\controller\apiController
*/
class teachingResearch extends BaseApiService
{
//教研管理列表
public function list(){
$id = $this->member_id;
dd($id);
}
}

14
niucloud/app/api/controller/login/Login.php

@ -109,14 +109,26 @@ class Login extends BaseController
return success('PASSWORD_RESET_SUCCESS'); return success('PASSWORD_RESET_SUCCESS');
} }
//销售教师人员登陆
public function personnelLogin() public function personnelLogin()
{ {
$data = $this->request->params([ $data = $this->request->params([
['phone', ''], ['phone', ''],
['password', ''], ['password', ''],
['login_type', ''],//登陆类型|1=教练,2=销售
]); ]);
//验证码验证 //验证码验证
$result = (new LoginService())->loginByPersonnel($data); $result = (new LoginService())->loginByPersonnel($data);
return success($result);
if(!$result['user_type']){
if($data['login_type'] == 1){
$msg = '暂无教练权限';
}else{
$msg = '暂无销售权限';
}
return fail($msg);//code|0错误
}
return success($result);//code|1正确
} }
} }

58
niucloud/app/api/middleware/ApiPersonnelCheckToken.php

@ -0,0 +1,58 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\api\middleware;
use app\dict\sys\AppTypeDict;
use app\Request;
use app\service\api\login\AuthService;
use app\service\api\login\LoginService;
use Closure;
use Exception;
use core\exception\AuthException;
/**
* 员工端登录token验证
* Class ApiCheckToken
* @package app\api\middleware
*/
class ApiPersonnelCheckToken
{
/**
* @param Request $request
* @param Closure $next
* @param bool $is_throw_exception 是否把错误抛出
* @return mixed
* @throws Exception
*/
public function handle(Request $request, Closure $next, bool $is_throw_exception = false)
{
$request->appType(AppTypeDict::PERSONNEL);
// 校验渠道
( new AuthService() )->checkChannel($request);
//通过配置来设置系统header参数
try {
$token = $request->apiToken();
$token_info = ( new LoginService() )->parsePersonnelToken($token);
if (!empty($token_info)) {
$request->memberId($token_info[ 'member_id' ]);
}
//校验会员和站点
$a= ( new AuthService() )->checkPersonnelMember($request);
} catch (AuthException $e) {
//是否将登录错误抛出
if ($is_throw_exception)
return fail($e->getMessage(), [], $e->getCode());
}
return $next($request);
}
}

94
niucloud/app/api/route/route.php

@ -11,6 +11,7 @@
use app\api\middleware\ApiChannel; use app\api\middleware\ApiChannel;
use app\api\middleware\ApiCheckToken; use app\api\middleware\ApiCheckToken;
use app\api\middleware\ApiPersonnelCheckToken;
use app\api\middleware\ApiLog; use app\api\middleware\ApiLog;
use app\api\route\dispatch\BindDispatch; use app\api\route\dispatch\BindDispatch;
use core\dict\DictLoader; use core\dict\DictLoader;
@ -74,8 +75,7 @@ Route::group(function() {
//登录 //登录
Route::get('login', 'login.Login/login'); Route::get('login', 'login.Login/login');
//员工登录
Route::post('personnelLogin', 'login.Login/personnelLogin');
//第三方绑定 //第三方绑定
Route::post('bind', BindDispatch::class); Route::post('bind', BindDispatch::class);
@ -162,5 +162,95 @@ Route::group(function() {
})->middleware(ApiChannel::class) })->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true) ->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class); ->middleware(ApiLog::class);
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓-----员工端相关-----↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//无需token验证的
Route::group(function() {
//员工登录
Route::post('personnelLogin', 'login.Login/personnelLogin');
})->middleware(ApiChannel::class)
->middleware(ApiPersonnelCheckToken::class)
->middleware(ApiLog::class);
//需要token验证的
Route::group(function() {
//上传图片
Route::post('uploadImage', 'upload.Upload/image');
//员工端详情
Route::get('personnel/info', 'apiController.Personnel/info');
//员工端-修改
Route::post('personnel/edit', 'apiController.Personnel/edit');
})->middleware(ApiChannel::class)
->middleware(ApiPersonnelCheckToken::class, true)
->middleware(ApiLog::class);
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑-----员工端相关-----↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓-----用户端相关-----↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
//无需token验证的
Route::group(function() {
// Route::post('personnelLogin', 'login.Login/personnelLogin');
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class)
->middleware(ApiLog::class);
//需要token验证的
Route::group(function() {
// Route::get('personnel/info', 'apiController.Personnel/info');
})->middleware(ApiChannel::class)
->middleware(ApiCheckToken::class, true)
->middleware(ApiLog::class);
//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑-----用户端相关-----↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
//加载插件路由 //加载插件路由
( new DictLoader("Route") )->load([ 'app_type' => 'api' ]); ( new DictLoader("Route") )->load([ 'app_type' => 'api' ]);

26
niucloud/app/service/admin/lesson_course_teaching/LessonCourseTeachingService.php

@ -598,6 +598,11 @@ class LessonCourseTeachingService extends BaseAdminService
} }
public function bindingModuleAdd(int $id, array $data)
{
$this->model->where([['id', '=', $id]])->update($data);
return true;
}
/** /**
* 获取教研管理信息 * 获取教研管理信息
* @param int $id * @param int $id
@ -605,10 +610,10 @@ class LessonCourseTeachingService extends BaseAdminService
*/ */
public function getInfo(int $id) public function getInfo(int $id)
{ {
$field = 'id,title,image,type,content,status,create_time,update_time,delete_time,table_type,user_permission'; $field = 'id,title,image,type,content,status,create_time,update_time,delete_time,table_type,user_permission,url';
$info = $this->model->field($field)->where([['id', "=", $id]])->with(['personnelData'])->findOrEmpty()->toArray(); $info = $this->model->field($field)->where([['id', "=", $id]])->with(['personnelData'])->findOrEmpty()->toArray();
$info['status'] = strval($info['status']); $info['status'] = strval($info['status']);
$info['type'] = strval($info['type']);
return $info; return $info;
} }
@ -625,9 +630,22 @@ class LessonCourseTeachingService extends BaseAdminService
} }
public function getPersonnelDataAll(){ public function getPersonnelDataAll(array $where = []){
$personnelDataModel = new PersonnelData(); $personnelDataModel = new PersonnelData();
return $personnelDataModel->where('is_sys_user',1)->select()->toArray(); $field = 'id,name,gender,phone,status,status,sys_user_id,create_time,update_time';
$order = 'id desc';
$whereArr = [];
if (!empty($where['name'])) {
$whereArr[] = ['name','like',"'%'".$where['name']."'%'"];
}
if (!empty($where['phone'])) {
$whereArr[] = ['phone','like',"'%'".$where['phone']."'%'"];
}
$search_model = $personnelDataModel->where('is_sys_user', 1)->where($whereArr)->field($field)->order($order);
$list = $this->pageQuery($search_model);
return $list;
} }

4
niucloud/app/service/admin/upload/UploadService.php

@ -61,8 +61,8 @@ class UploadService extends BaseAdminService
* @throws Exception * @throws Exception
*/ */
public function document($file, string $type){ public function document($file, string $type){
if(!in_array($type, FileDict::getSceneType())) // if(!in_array($type, FileDict::getSceneType()))
throw new UploadFileException('UPLOAD_TYPE_ERROR'); // throw new UploadFileException('UPLOAD_TYPE_ERROR');
$dir = $this->root_path.'/document/'.$type.'/'.date('Ym').'/'.date('d'); $dir = $this->root_path.'/document/'.$type.'/'.date('Ym').'/'.date('d');
$core_upload_service = new CoreUploadService(); $core_upload_service = new CoreUploadService();
return $core_upload_service->document($file, $type, $dir, StorageDict::LOCAL); return $core_upload_service->document($file, $type, $dir, StorageDict::LOCAL);

137
niucloud/app/service/api/apiService/PersonnelService.php

@ -0,0 +1,137 @@
<?php
// +----------------------------------------------------------------------
// | Niucloud-admin 企业快速开发的多应用管理平台
// +----------------------------------------------------------------------
// | 官方网址:https://www.niucloud.com
// +----------------------------------------------------------------------
// | niucloud团队 版权所有 开源版本可自由商用
// +----------------------------------------------------------------------
// | Author: Niucloud Team
// +----------------------------------------------------------------------
namespace app\service\api\apiService;
use app\model\campus_person_role\CampusPersonRole;
use app\model\departments\Departments;
use app\model\member\Member;
use app\model\personnel\Personnel;
use app\model\sys\SysRole;
use app\service\core\member\CoreMemberService;
use core\base\BaseApiService;
use core\exception\ApiException;
use core\util\Barcode;
use think\Model;
/**
* 员工服务层
* Class MemberService
* @package app\service\api\member
*/
class PersonnelService extends BaseApiService
{
public function __construct()
{
parent::__construct();
$this->model = new Personnel();
}
//获取员工信息
public function info(array $where,string $field = '*'){
$model = $this->model;
if(!empty($where['id'])){
$model = $model->where('id',$where['id']);
}
$res = $model->field($field)->find();//员工信息
//查询部门信息
$campus_person_role = CampusPersonRole::where('person_id',$where['id'])->select()->toArray();
$role_id = array_unique(array_column($campus_person_role, 'role_id'));
$dept_id = array_unique(array_column($campus_person_role, 'dept_id'));
//查询用户角色
$role_name_arr = SysRole::whereIn('role_id',$role_id)->column('role_name');
$role_name_str = implode(',',$role_name_arr);//
//查询部门
$department_name_arr = Departments::whereIn('id',$dept_id)->column('department_name');
$department_name_str = implode(',',$department_name_arr);
if($res){
$res = $res->toArray();
$res['role_name_str'] = $role_name_str;
$res['department_name_str'] = $department_name_str;
}else{
$res = [];
}
return $res;
}
//员工信息-修改
public function edit(array $where,array $data){
$data['update_time'] = date('Y-m-d H:i:s');
if(!$where){
return [
'code'=>0,
'msg'=>'查询条件不能为空'
];
}
$model = $this->model;
if(!empty($where['id'])){
$model = $model->where('id',$where['id']);
}
$res = $model->update($data);//员工信息
if($res){
$res = [
'code'=>1,
'msg'=>'操作成功'
];
}else{
$res = [
'code'=>0,
'msg'=>'操作失败'
];
}
return $res;
}
/**
* 获取会员的模型对象(todo 慎用!!! 现主要用于登录)
* @param array $data
* @return Member|array|mixed|Model !!! 仔细看,返回值是模型对象 如果想要判断是否为空 请用 $member->isEmpty()
*/
public function findMemberInfo(array $data){
//会员账号
if(!empty($data['username']))
$where[] = ['username', '=', $data['username']];
//会员手机号
if(!empty($data['mobile']))
$where[] = ['mobile', '=', $data['mobile']];
//会员id
if(!empty($data['id']))
$where[] = ['id', '=', $data['id']];
//微信公众号openid
if(!empty($data['wx_openid']))
$where[] = ['wx_openid', '=', $data['wx_openid']];
//微信小程序openid
if(!empty($data['weapp_openid']))
$where[] = ['weapp_openid', '=', $data['weapp_openid']];
// 微信unionid
if(!empty($data['wx_unionid']))
$where[] = ['wx_unionid', '=', $data['wx_unionid']];
if(!empty($data['username|mobile']))
$where[] = ['username|mobile', '=', $data['username|mobile']];
if(empty($where)){
$where[] = ['member_id', '=', -1];
}
return $this->model->where($where)->findOrEmpty();
}
}

15
niucloud/app/service/api/login/AuthService.php

@ -14,6 +14,7 @@ namespace app\service\api\login;
use app\dict\common\ChannelDict; use app\dict\common\ChannelDict;
use app\model\member\Member; use app\model\member\Member;
use app\Request; use app\Request;
use app\service\api\apiService\PersonnelService;
use app\service\api\member\MemberService; use app\service\api\member\MemberService;
use app\service\core\channel\CoreH5Service; use app\service\core\channel\CoreH5Service;
use app\service\core\channel\CorePcService; use app\service\core\channel\CorePcService;
@ -49,6 +50,20 @@ class AuthService extends BaseApiService
return true; return true;
} }
//检测员工用户是否存在
public function checkPersonnelMember(Request $request)
{
//如果登录信息非法就报错
if ($this->member_id > 0) {
$member_service = new PersonnelService();
$member_info = $member_service->findMemberInfo([ 'id' => $this->member_id ]);
if ($member_info->isEmpty()) {
throw new AuthException('MEMBER_NOT_EXIST', 401);
}
}
return true;
}
/** /**
* 校验渠道 * 校验渠道
* @param Request $request * @param Request $request

53
niucloud/app/service/api/login/LoginService.php

@ -15,6 +15,7 @@ use app\dict\member\MemberLoginTypeDict;
use app\dict\member\MemberRegisterTypeDict; use app\dict\member\MemberRegisterTypeDict;
use app\dict\sys\AppTypeDict; use app\dict\sys\AppTypeDict;
use app\dict\sys\SmsDict; use app\dict\sys\SmsDict;
use app\model\campus_person_role\CampusPersonRole;
use app\model\member\Member; use app\model\member\Member;
use app\model\personnel\Personnel; use app\model\personnel\Personnel;
use app\model\sys\SysUser; use app\model\sys\SysUser;
@ -163,7 +164,7 @@ class LoginService extends BaseApiService
} }
/** /**
* 解析token * 解析客户端token
* @param string|null $token * @param string|null $token
* @return array * @return array
*/ */
@ -190,6 +191,34 @@ class LoginService extends BaseApiService
return $token_info; return $token_info;
} }
/**
* 解析员工端token
* @param string|null $token
* @return array
*/
public function parsePersonnelToken(?string $token)
{
if (empty($token)) {
//定义专属于授权认证机制的错误响应, 定义专属语言包
throw new AuthException('MUST_LOGIN', 401);
}
try {
$token_info = TokenAuth::parseToken($token, AppTypeDict::PERSONNEL);
} catch (Throwable $e) {
// if(env('app_debug', false)){
// throw new AuthException($e->getMessage(), 401);
// }else{
throw new AuthException('LOGIN_EXPIRE', 401);
// }
}
if (!$token_info) {
throw new AuthException('MUST_LOGIN', 401);
}
//验证有效次数或过期时间
return $token_info;
}
/** /**
* 手机发送验证码 * 手机发送验证码
* @param $mobile * @param $mobile
@ -326,6 +355,7 @@ class LoginService extends BaseApiService
if ($member_info->status != 2) throw new ApiException('账号状态异常禁止登录'); if ($member_info->status != 2) throw new ApiException('账号状态异常禁止登录');
$user = (new SysUser())->where('username', $params['phone'])->find(); $user = (new SysUser())->where('username', $params['phone'])->find();
//create_password($params['password'])//创建密码
if (!check_password($params['password'], $user->password)) throw new ApiException('账号或密码错误'); if (!check_password($params['password'], $user->password)) throw new ApiException('账号或密码错误');
$user->login_time = time(); $user->login_time = time();
$user->last_ip = $this->request->ip(); $user->last_ip = $this->request->ip();
@ -334,11 +364,26 @@ class LoginService extends BaseApiService
$user->last_time = time(); $user->last_time = time();
$user->save(); $user->save();
$expire_time = env('system.api_token_expire_time') ?? 3600; $expire_time = env('system.api_token_expire_time') ?? 3600;
$token_info = TokenAuth::createToken($member_info->id, AppTypeDict::PERSONNEL, ['id' => $member_info->id, 'phone' => $member_info->phone], $expire_time);; //生成token
$token_info = TokenAuth::createToken($member_info->id, AppTypeDict::PERSONNEL, ['id' => $member_info->id, 'member_id'=>$member_info->id, 'phone' => $member_info->phone, 'user_type' => $params['login_type']], $expire_time);
event("PersonnelLogin", $member_info); event("PersonnelLogin", $member_info);
$role = CampusPersonRole::where('person_id',$member_info['id'])->column('role_id');
//login_type|1=教练,2=销售
$user_type = '';//1=教练,2=销售
if(in_array(2,$role) && $params['login_type'] == 2){
//销售登陆
$user_type = 2;
}elseif(in_array(3,$role) && $params['login_type'] == 1){
//教师登陆
$user_type = 1;
}
return [ return [
'token' => $token_info['token'], 'token' => $token_info['token'],//token
'expires_time' => $token_info['params']['exp'] 'expires_time' => $token_info['params']['exp'],//过期时间
'user_type' => $user_type//用户类型
]; ];
} }
} }

Loading…
Cancel
Save