lijiaqi 5 months ago
commit cc50542108
  1. 2
      .env.production
  2. 3
      .env_1.production
  3. 3
      .eslintignore
  4. 66
      .eslintrc copy.cjs
  5. 6
      .eslintrc.cjs
  6. 16
      .eslintrc_1.cjs
  7. 2
      .gitignore
  8. 1
      Teaching_integration_platform_admin_template
  9. BIN
      dist.zip
  10. 51
      generated/core/OpenAPI.ts
  11. 6
      generated/index.ts
  12. 11
      generated/models/BaseResponse_ObjectiveContents_.ts
  13. 2
      generated/models/CoursesDTO.ts
  14. 14
      generated/models/Know.ts
  15. 8
      generated/models/KnowQueryRequest.ts
  16. 13
      generated/models/KnowRequest.ts
  17. 14
      generated/models/KnowupdateRequest.ts
  18. 27
      generated/services/CourseResourceControllerService.ts
  19. 2
      generated/services/FavourInformationControllerService.ts
  20. 97
      generated/services/KnowControllerService.ts
  21. 8
      generated/services/LearningRecordsControllerService.ts
  22. 8
      generated/services/SeCourseFavourControllerService.ts
  23. 4
      generated/services/SeCourseThumbControllerService.ts
  24. 2
      generated/services/SeKnowFavourControllerService.ts
  25. 2
      generated/services/SeKnowThumbControllerService.ts
  26. 4
      generated/services/SeResourceFavourControllerService.ts
  27. 2
      generated/services/SeResourceThumbControllerService.ts
  28. 65
      generated/services/Service.ts
  29. 24
      generated/services/UmsAdminControllerService.ts
  30. 2
      package.json
  31. 531
      public/data.json
  32. 3486
      public/nodeList.json
  33. 43
      src/api/courseChaptersApi.ts
  34. 8
      src/api/record.js
  35. 16
      src/api/user/crouse.js
  36. 6
      src/api/user/index.ts
  37. 22
      src/api/user/user.js
  38. 4
      src/layout/index.vue
  39. 2
      src/layout/tabbar/setting/index.vue
  40. 6
      src/main.ts
  41. 2
      src/permission.ts
  42. 4
      src/router/index.ts
  43. 1
      src/store/modules/type/types.ts
  44. 53
      src/store/modules/user.ts
  45. 45
      src/views/MyCourseStudy/ContainerCla.vue
  46. 116
      src/views/MyCourseStudy/ContainerKno.vue
  47. 145
      src/views/MyCourseStudy/courseCollections.vue
  48. 18
      src/views/MyCourseStudy/learningProcess.vue
  49. 77
      src/views/course/CourseObjectives.vue
  50. 92
      src/views/course/CourseObjectives111.vue
  51. 4
      src/views/course/spritetext.js
  52. 97
      src/views/courseResources/componse/resourceAdd.vue
  53. 19
      src/views/courseResources/index.vue
  54. 16
      src/views/home/components/Class1.vue
  55. 13
      src/views/home/components/Class2.vue
  56. 30
      src/views/home/components/ConHeader.vue
  57. 4
      src/views/home/components/Echart/Echarts.vue
  58. 4
      src/views/home/components/Echarts.vue
  59. 161
      src/views/home/components/Info.vue
  60. 20
      src/views/home/components/Status.vue
  61. 2
      src/views/home/components/Student1.vue
  62. 2
      src/views/home/components/Student2.vue
  63. 4
      src/views/home/components/Welcome.vue
  64. 68
      src/views/home/index.vue
  65. 25
      src/views/login/index.vue
  66. 1141
      src/views/portal/LearningPathRecommendations.vue
  67. 87
      src/views/portal/components/KnowledgeGraph.vue
  68. 6
      src/views/portal/courseHomepage.vue
  69. 100
      src/views/portal/index.vue
  70. 245
      src/views/portal/knowledgePointLearning.vue
  71. 1
      tsconfig.json

@ -1,3 +1,3 @@
NODE_ENV = 'production'
VITE_APP_TITLE = '无糖运营平台'
VITE_APP_BASE_API = '/prod-api'
# VITE_APP_BASE_API = '/prod-api'

@ -1,3 +1,2 @@
NODE_ENV = 'production'
VITE_APP_TITLE = '无糖运营平台'
VITE_APP_BASE_API = '/prod-api'
VITE_APP_TITLE = '无糖运营平台'

@ -1,2 +1,3 @@
dist
node_modules
node_modules
src/views/course/spritetext.js

@ -0,0 +1,66 @@
// @see https://eslint.bootcss.com/docs/rules/
module.exports = {
env: {
browser: true,
es2021: true,
node: true,
jest: true,
jquery: true,
},
globals: {
VANTA: 'readonly', //VANTA 已经cdn引入 这里拒绝eslint报错 全局声明一下
ElMessage: 'readonly',
ElMessageBox: 'readonly',
ElLoading: 'readonly',
},
/* 指定如何解析语法 */
parser: 'vue-eslint-parser',
/** 优先级低于 parse 的语法解析配置 */
parserOptions: {
ecmaVersion: 'latest',
sourceType: 'module',
parser: '@typescript-eslint/parser',
jsxPragma: 'React',
ecmaFeatures: {
jsx: true,
},
},
/* 继承已有的规则 */
extends: [
'eslint:recommended',
'plugin:vue/vue3-essential',
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended',
],
plugins: ['vue', '@typescript-eslint'],
/*
* "off" 或 0 ==> 关闭规则
* "warn" 或 1 ==> 打开的规则作为警告(不影响代码执行)
* "error" 或 2 ==> 规则作为一个错误(代码不能执行,界面报错)
*/
rules: {
// eslint(https://eslint.bootcss.com/docs/rules/)
'no-var': 'error', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-unexpected-multiline': 'error', // 禁止空余的多行
'no-useless-escape': 'off', // 禁止不必要的转义字符
// typeScript (https://typescript-eslint.io/rules)
'@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
'@typescript-eslint/prefer-ts-expect-error': 'off', // 禁止使用 @ts-ignore
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
'@typescript-eslint/no-non-null-assertion': 'off',
'@typescript-eslint/no-namespace': 'off', // 禁止使用自定义 TypeScript 模块和命名空间。
'@typescript-eslint/semi': 'off',
// eslint-plugin-vue (https://eslint.vuejs.org/rules/)
'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
},
}

@ -43,13 +43,13 @@ module.exports = {
// eslint(https://eslint.bootcss.com/docs/rules/)
'no-var': 'error', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-unexpected-multiline': 'error', // 禁止空余的多行
'no-unexpected-multiline': 'off', // 禁止空余的多行
'no-useless-escape': 'off', // 禁止不必要的转义字符
// typeScript (https://typescript-eslint.io/rules)
'@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
'@typescript-eslint/no-unused-vars': 'off', // 禁止定义未使用的变量
'@typescript-eslint/prefer-ts-expect-error': 'off', // 禁止使用 @ts-ignore
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型

@ -40,16 +40,16 @@ module.exports = {
*/
rules: {
// eslint(https://eslint.bootcss.com/docs/rules/)
'no-var': 'error', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['warn', { max: 1 }], // 不允许多个空行
'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
'no-unexpected-multiline': 'error', // 禁止空余的多行
'no-var': 'off', // 要求使用 let 或 const 而不是 var
'no-multiple-empty-lines': ['off', { max: 1 }], // 不允许多个空行
'no-console': process.env.NODE_ENV === 'production' ? 'off' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'off' : 'off',
'no-unexpected-multiline': 'off', // 禁止空余的多行
'no-useless-escape': 'off', // 禁止不必要的转义字符
// typeScript (https://typescript-eslint.io/rules)
'@typescript-eslint/no-unused-vars': 'error', // 禁止定义未使用的变量
'@typescript-eslint/prefer-ts-expect-error': 'off', // 禁止使用 @ts-ignore
'@typescript-eslint/no-unused-vars': 'off', // 禁止定义未使用的变量
'@typescript-eslint/prefer-ts-expect-off': 'off', // 禁止使用 @ts-ignore
'@typescript-eslint/ban-ts-ignore': 'off',
'@typescript-eslint/no-explicit-any': 'off', // 禁止使用 any 类型
'@typescript-eslint/no-non-null-assertion': 'off',
@ -58,7 +58,7 @@ module.exports = {
// eslint-plugin-vue (https://eslint.vuejs.org/rules/)
'vue/multi-word-component-names': 'off', // 要求组件名称始终为 “-” 链接的单词
'vue/script-setup-uses-vars': 'error', // 防止<script setup>使用的变量<template>被标记为未使用
'vue/script-setup-uses-vars': 'off', // 防止<script setup>使用的变量<template>被标记为未使用
'vue/no-mutating-props': 'off', // 不允许组件 prop的改变
'vue/attribute-hyphenation': 'off', // 对模板中的自定义组件强制执行属性命名样式
},

2
.gitignore vendored

@ -21,4 +21,4 @@ dist-ssr
*.ntvs*
*.njsproj
*.sln
*.sw?
*.sw?

@ -1 +0,0 @@
Subproject commit be31783972a0cdd8d1abfe03df8ef24a73854b0c

Binary file not shown.

@ -2,34 +2,31 @@
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { ApiRequestOptions } from './ApiRequestOptions'
// 引入设置token的方法
import { GET_TKOEN } from '@/utils/token'
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>
type Headers = Record<string, string>
import type { ApiRequestOptions } from './ApiRequestOptions';
type Resolver<T> = (options: ApiRequestOptions) => Promise<T>;
type Headers = Record<string, string>;
export type OpenAPIConfig = {
BASE: string
VERSION: string
WITH_CREDENTIALS: boolean
CREDENTIALS: 'include' | 'omit' | 'same-origin'
TOKEN?: string | Resolver<string> | undefined
USERNAME?: string | Resolver<string> | undefined
PASSWORD?: string | Resolver<string> | undefined
HEADERS?: Headers | Resolver<Headers> | undefined
ENCODE_PATH?: ((path: string) => string) | undefined
}
BASE: string;
VERSION: string;
WITH_CREDENTIALS: boolean;
CREDENTIALS: 'include' | 'omit' | 'same-origin';
TOKEN?: string | Resolver<string> | undefined;
USERNAME?: string | Resolver<string> | undefined;
PASSWORD?: string | Resolver<string> | undefined;
HEADERS?: Headers | Resolver<Headers> | undefined;
ENCODE_PATH?: ((path: string) => string) | undefined;
};
export const OpenAPI: OpenAPIConfig = {
BASE: 'http://39.106.16.162:8080',
VERSION: '1.0.0',
WITH_CREDENTIALS: false,
CREDENTIALS: 'include',
TOKEN: GET_TKOEN('TOKEN'),
USERNAME: undefined,
PASSWORD: undefined,
HEADERS: {
Authorization: 'Bearer ' + GET_TKOEN('TOKEN'),
},
ENCODE_PATH: undefined,
}
BASE: 'http://39.106.16.162:8080',
VERSION: '1.0.0',
WITH_CREDENTIALS: false,
CREDENTIALS: 'include',
TOKEN: undefined,
USERNAME: undefined,
PASSWORD: undefined,
HEADERS: undefined,
ENCODE_PATH: undefined,
};

@ -18,6 +18,7 @@ export type { BaseResponse_List_TeacherInfVO_ } from './models/BaseResponse_List
export type { BaseResponse_long_ } from './models/BaseResponse_long_';
export type { BaseResponse_Map_string_object_ } from './models/BaseResponse_Map_string_object_';
export type { BaseResponse_ObjectiveContentKnowVO_ } from './models/BaseResponse_ObjectiveContentKnowVO_';
export type { BaseResponse_ObjectiveContents_ } from './models/BaseResponse_ObjectiveContents_';
export type { BaseResponse_Page_ } from './models/BaseResponse_Page_';
export type { BaseResponse_Page_CourseFavourDetailVO_ } from './models/BaseResponse_Page_CourseFavourDetailVO_';
export type { BaseResponse_Page_CourseResources_ } from './models/BaseResponse_Page_CourseResources_';
@ -36,8 +37,12 @@ export type { CourseResources } from './models/CourseResources';
export type { CoursesDTO } from './models/CoursesDTO';
export type { CoursesVO } from './models/CoursesVO';
export type { CourseThumbAddRequest } from './models/CourseThumbAddRequest';
export type { Know } from './models/Know';
export type { KnowFavourAddRequest } from './models/KnowFavourAddRequest';
export type { KnowQueryRequest } from './models/KnowQueryRequest';
export type { KnowRequest } from './models/KnowRequest';
export type { KnowThumbAddRequest } from './models/KnowThumbAddRequest';
export type { KnowupdateRequest } from './models/KnowupdateRequest';
export type { LearningRecords } from './models/LearningRecords';
export type { ObjectiveContentKnowDTO } from './models/ObjectiveContentKnowDTO';
export type { ObjectiveContentKnowVO } from './models/ObjectiveContentKnowVO';
@ -61,6 +66,7 @@ export type { UpdateAdminPasswordParam } from './models/UpdateAdminPasswordParam
export { Service } from './services/Service';
export { CourseResourceControllerService } from './services/CourseResourceControllerService';
export { FavourInformationControllerService } from './services/FavourInformationControllerService';
export { KnowControllerService } from './services/KnowControllerService';
export { LearningRecordsControllerService } from './services/LearningRecordsControllerService';
export { ResourceControllerService } from './services/ResourceControllerService';
export { SeCourseFavourControllerService } from './services/SeCourseFavourControllerService';

@ -0,0 +1,11 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { ObjectiveContents_ } from './ObjectiveContents_';
export type BaseResponse_ObjectiveContents_ = {
code?: number;
data?: ObjectiveContents_;
message?: string;
};

@ -45,7 +45,7 @@ export type CoursesDTO = {
/**
*
*/
img?: string;
img: string;
/**
*
*/

@ -0,0 +1,14 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type Know = {
content?: string;
hour?: number;
id?: number;
img?: string;
info?: string;
name?: string;
resourceid?: string;
};

@ -0,0 +1,8 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type KnowQueryRequest = {
name?: string;
};

@ -0,0 +1,13 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type KnowRequest = {
content?: string;
hour?: number;
img?: string;
info?: string;
name?: string;
resourceid?: string;
};

@ -0,0 +1,14 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
export type KnowupdateRequest = {
content?: string;
hour?: number;
id?: number;
img?: string;
info?: string;
name?: string;
resourceid?: string;
};

@ -5,6 +5,7 @@
import type { BaseResponse_List_CourseResources_ } from '../models/BaseResponse_List_CourseResources_';
import type { BaseResponse_Page_ } from '../models/BaseResponse_Page_';
import type { BaseResponse_string_ } from '../models/BaseResponse_string_';
import type { CourseResources } from '../models/CourseResources';
import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI';
import { request as __request } from '../core/request';
@ -17,7 +18,7 @@ export class CourseResourceControllerService {
public static allUsingGet1(): CancelablePromise<BaseResponse_List_CourseResources_> {
return __request(OpenAPI, {
method: 'GET',
url: '/courses/all',
url: '/api/courses/all',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -36,7 +37,7 @@ export class CourseResourceControllerService {
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/courses/delete',
url: '/api/courses/delete',
query: {
'ids': ids,
},
@ -61,7 +62,7 @@ export class CourseResourceControllerService {
): CancelablePromise<BaseResponse_Page_> {
return __request(OpenAPI, {
method: 'GET',
url: '/courses/getall',
url: '/api/courses/getall',
query: {
'pagenum': pagenum,
'pagesize': pagesize,
@ -74,4 +75,24 @@ export class CourseResourceControllerService {
},
});
}
/**
* saveCourseResource
* @param courseResources courseResources
* @returns BaseResponse_string_ OK
* @throws ApiError
*/
public static saveCourseResourceUsingGet1(
courseResources: CourseResources,
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'GET',
url: '/api/courses/save',
body: courseResources,
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
}

@ -28,7 +28,7 @@ export class FavourInformationControllerService {
): CancelablePromise<BaseResponse_Page_CourseResources_> {
return __request(OpenAPI, {
method: 'GET',
url: '/Favour/get',
url: '/api/Favour/get',
query: {
'current': current,
'pageSize': pageSize,

@ -0,0 +1,97 @@
/* generated using openapi-typescript-codegen -- do not edit */
/* istanbul ignore file */
/* tslint:disable */
/* eslint-disable */
import type { Know } from '../models/Know';
import type { KnowQueryRequest } from '../models/KnowQueryRequest';
import type { KnowRequest } from '../models/KnowRequest';
import type { KnowupdateRequest } from '../models/KnowupdateRequest';
import type { CancelablePromise } from '../core/CancelablePromise';
import { OpenAPI } from '../core/OpenAPI';
import { request as __request } from '../core/request';
export class KnowControllerService {
/**
* add
* @param knowAddRequest knowAddRequest
* @returns boolean OK
* @returns any Created
* @throws ApiError
*/
public static addUsingPost1(
knowAddRequest: KnowRequest,
): CancelablePromise<boolean | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/know/add',
body: knowAddRequest,
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
/**
* deleteKnow
* @param ids ids
* @returns number OK
* @returns any Created
* @throws ApiError
*/
public static deleteKnowUsingPost1(
ids: Array<number>,
): CancelablePromise<number | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/know/delete',
body: ids,
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
/**
* query
* @param knowQueryRequest knowQueryRequest
* @returns Know OK
* @returns any Created
* @throws ApiError
*/
public static queryUsingPost1(
knowQueryRequest: KnowQueryRequest,
): CancelablePromise<Array<Know> | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/know/query',
body: knowQueryRequest,
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
/**
* update
* @param knowAddRequest knowAddRequest
* @returns boolean OK
* @returns any Created
* @throws ApiError
*/
public static updateUsingPost1(
knowAddRequest: KnowupdateRequest,
): CancelablePromise<boolean | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/api/know/update',
body: knowAddRequest,
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
}

@ -18,7 +18,7 @@ export class LearningRecordsControllerService {
public static allUsingGet3(): CancelablePromise<BaseResponse_List_LearningRecords_> {
return __request(OpenAPI, {
method: 'GET',
url: '/learningrecords/all',
url: '/api/learningrecords/all',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -37,7 +37,7 @@ export class LearningRecordsControllerService {
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/learningrecords/delete',
url: '/api/learningrecords/delete',
query: {
'ids': ids,
},
@ -62,7 +62,7 @@ export class LearningRecordsControllerService {
): CancelablePromise<BaseResponse_Page_> {
return __request(OpenAPI, {
method: 'GET',
url: '/learningrecords/getall',
url: '/api/learningrecords/getall',
query: {
'pagenum': pagenum,
'pagesize': pagesize,
@ -87,7 +87,7 @@ export class LearningRecordsControllerService {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/learningrecords/saverecords',
url: '/api/learningrecords/saverecords',
body: learningRecords,
errors: {
401: `Unauthorized`,

@ -24,7 +24,7 @@ export class SeCourseFavourControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_favour/add',
url: '/api/course_favour/add',
body: courseFavourAddRequest,
errors: {
401: `Unauthorized`,
@ -45,7 +45,7 @@ export class SeCourseFavourControllerService {
): CancelablePromise<BaseResponse_long_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_favour/count',
url: '/api/course_favour/count',
body: courseFavourAddRequest,
errors: {
401: `Unauthorized`,
@ -66,7 +66,7 @@ export class SeCourseFavourControllerService {
): CancelablePromise<BaseResponse_long_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_favour/countAll',
url: '/api/course_favour/countAll',
body: courseFavourAllRequest,
errors: {
401: `Unauthorized`,
@ -87,7 +87,7 @@ export class SeCourseFavourControllerService {
): CancelablePromise<BaseResponse_Page_CourseFavourDetailVO_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_favour/list/page',
url: '/api/course_favour/list/page',
body: courseFavourQueryRequest,
errors: {
401: `Unauthorized`,

@ -21,7 +21,7 @@ export class SeCourseThumbControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_thumb/',
url: '/api/course_thumb/',
body: courseThumbAddRequest,
errors: {
401: `Unauthorized`,
@ -42,7 +42,7 @@ export class SeCourseThumbControllerService {
): CancelablePromise<BaseResponse_long_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_thumb/count',
url: '/api/course_thumb/count',
body: courseThumbAddRequest,
errors: {
401: `Unauthorized`,

@ -20,7 +20,7 @@ export class SeKnowFavourControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/know_favour/add',
url: '/api/know_favour/add',
body: knowFavourAddRequest,
errors: {
401: `Unauthorized`,

@ -20,7 +20,7 @@ export class SeKnowThumbControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/know_thumb/add',
url: '/api/know_thumb/add',
body: knowThumbAddRequest,
errors: {
401: `Unauthorized`,

@ -22,7 +22,7 @@ export class SeResourceFavourControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/resource_favour/add',
url: '/api/resource_favour/add',
body: resourceFavourAddRequest,
errors: {
401: `Unauthorized`,
@ -43,7 +43,7 @@ export class SeResourceFavourControllerService {
): CancelablePromise<BaseResponse_Page_CourseResources_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/resource_favour/list/page',
url: '/api/resource_favour/list/page',
body: resourceFavourQueryRequest,
errors: {
401: `Unauthorized`,

@ -20,7 +20,7 @@ export class SeResourceThumbControllerService {
): CancelablePromise<BaseResponse_boolean_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/resource_thumb/add',
url: '/api/resource_thumb/add',
body: resourceThumbAddRequest,
errors: {
401: `Unauthorized`,

@ -8,6 +8,7 @@ import type { BaseResponse_List_CourseObjectivesTreeVO_ } from '../models/BaseRe
import type { BaseResponse_List_ObjectivesType_ } from '../models/BaseResponse_List_ObjectivesType_';
import type { BaseResponse_Map_string_object_ } from '../models/BaseResponse_Map_string_object_';
import type { BaseResponse_ObjectiveContentKnowVO_ } from '../models/BaseResponse_ObjectiveContentKnowVO_';
import type { BaseResponse_ObjectiveContents_ } from '../models/BaseResponse_ObjectiveContents_';
import type { BaseResponse_PageDTO_CoursesVO_ } from '../models/BaseResponse_PageDTO_CoursesVO_';
import type { BaseResponse_string_ } from '../models/BaseResponse_string_';
import type { CourseObjectivesDTO } from '../models/CourseObjectivesDTO';
@ -32,7 +33,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'PUT',
url: '/course_objectives',
url: '/api/course_objectives',
body: courseObjectivesDto,
errors: {
401: `Unauthorized`,
@ -53,7 +54,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/course_objectives/addobjectives',
url: '/api/course_objectives/addobjectives',
body: courseObjectivesDto,
errors: {
401: `Unauthorized`,
@ -73,7 +74,7 @@ export class Service {
): CancelablePromise<BaseResponse_List_CourseObjectivesTreeVO_> {
return __request(OpenAPI, {
method: 'GET',
url: '/course_objectives/list/{id}',
url: '/api/course_objectives/list/{id}',
path: {
'id': id,
},
@ -95,7 +96,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/course_objectives/{id}',
url: '/api/course_objectives/{id}',
path: {
'id': id,
},
@ -117,7 +118,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'PUT',
url: '/coursesteacher',
url: '/api/coursesteacher',
body: coursesDto,
errors: {
401: `Unauthorized`,
@ -138,7 +139,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/coursesteacher/addcourse',
url: '/api/coursesteacher/addcourse',
body: coursesDto,
errors: {
401: `Unauthorized`,
@ -155,7 +156,7 @@ export class Service {
public static testUsingGet1(): CancelablePromise<any> {
return __request(OpenAPI, {
method: 'GET',
url: '/coursesteacher/down',
url: '/api/coursesteacher/down',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -176,7 +177,7 @@ export class Service {
): CancelablePromise<BaseResponse_Map_string_object_> {
return __request(OpenAPI, {
method: 'GET',
url: '/coursesteacher/index',
url: '/api/coursesteacher/index',
query: {
'page': page,
'pageSize': pageSize,
@ -217,7 +218,7 @@ export class Service {
): CancelablePromise<BaseResponse_PageDTO_CoursesVO_> {
return __request(OpenAPI, {
method: 'GET',
url: '/coursesteacher/page',
url: '/api/coursesteacher/page',
query: {
'assessmenttype': assessmenttype,
'category': category,
@ -248,7 +249,7 @@ export class Service {
): CancelablePromise<BaseResponse_CoursesDTO_> {
return __request(OpenAPI, {
method: 'GET',
url: '/coursesteacher/{id}',
url: '/api/coursesteacher/{id}',
path: {
'id': id,
},
@ -270,7 +271,7 @@ export class Service {
): CancelablePromise<BaseResponse> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/coursesteacher/{id}',
url: '/api/coursesteacher/{id}',
path: {
'id': id,
},
@ -292,7 +293,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/objective_content_know/addknows',
url: '/api/objective_content_know/addknows',
body: objectiveContentKnowDto,
errors: {
401: `Unauthorized`,
@ -312,7 +313,7 @@ export class Service {
): CancelablePromise<BaseResponse_ObjectiveContentKnowVO_> {
return __request(OpenAPI, {
method: 'GET',
url: '/objective_content_know/{objectiveId}',
url: '/api/objective_content_know/{objectiveId}',
path: {
'objectiveId': objectiveId,
},
@ -335,7 +336,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/objective_contents/addcontent',
url: '/api/objective_contents/addcontent',
body: objectiveContents,
errors: {
401: `Unauthorized`,
@ -356,7 +357,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'PUT',
url: '/objective_contents/update',
url: '/api/objective_contents/update',
body: objectiveContents,
errors: {
401: `Unauthorized`,
@ -365,6 +366,28 @@ export class Service {
},
});
}
/**
* id查询目标内容
* @param id id
* @returns BaseResponse_ObjectiveContents_ OK
* @throws ApiError
*/
public static updateContentUsingGet1(
id: string,
): CancelablePromise<BaseResponse_ObjectiveContents_> {
return __request(OpenAPI, {
method: 'GET',
url: '/api/objective_contents/{id}',
path: {
'id': id,
},
errors: {
401: `Unauthorized`,
403: `Forbidden`,
404: `Not Found`,
},
});
}
/**
*
* @param id id
@ -376,7 +399,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/objective_contents/{id}',
url: '/api/objective_contents/{id}',
path: {
'id': id,
},
@ -398,7 +421,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'PUT',
url: '/objectives_type',
url: '/api/objectives_type',
body: objectivesType,
errors: {
401: `Unauthorized`,
@ -419,7 +442,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/objectives_type/addobjectives',
url: '/api/objectives_type/addobjectives',
body: objectivesType,
errors: {
401: `Unauthorized`,
@ -439,7 +462,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_> {
return __request(OpenAPI, {
method: 'DELETE',
url: '/objectives_type/deleteobjectives/{id}',
url: '/api/objectives_type/deleteobjectives/{id}',
path: {
'id': id,
},
@ -457,7 +480,7 @@ export class Service {
public static objectivesListUsingGet1(): CancelablePromise<BaseResponse_List_ObjectivesType_> {
return __request(OpenAPI, {
method: 'GET',
url: '/objectives_type/list',
url: '/api/objectives_type/list',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -477,7 +500,7 @@ export class Service {
): CancelablePromise<BaseResponse_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/student_courses/addcoursess',
url: '/api/student_courses/addcoursess',
body: studentCoursesDto,
errors: {
401: `Unauthorized`,

@ -26,7 +26,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult_string_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/code',
url: '/api/user/code',
query: {
'phone': phone,
},
@ -45,7 +45,7 @@ export class UmsAdminControllerService {
public static getTeacherInfListUsingGet1(): CancelablePromise<BaseResponse_List_TeacherInfVO_> {
return __request(OpenAPI, {
method: 'GET',
url: '/user/get_teacherinf_list',
url: '/api/user/get_teacherinf_list',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -64,7 +64,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult> {
return __request(OpenAPI, {
method: 'GET',
url: '/user/info',
url: '/api/user/info',
query: {
'name': name,
},
@ -87,7 +87,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/login',
url: '/api/user/login',
body: umsAdmin,
errors: {
401: `Unauthorized`,
@ -108,7 +108,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/personal/info',
url: '/api/user/personal/info',
query: {
'id': id,
},
@ -131,7 +131,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/phone/login',
url: '/api/user/phone/login',
query: {
'phone': phone,
},
@ -154,7 +154,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult_UmsAdmin_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/phone/register',
url: '/api/user/phone/register',
body: umsAdminParam,
errors: {
401: `Unauthorized`,
@ -171,7 +171,7 @@ export class UmsAdminControllerService {
public static refreshTokenUsingGet1(): CancelablePromise<CommonResult> {
return __request(OpenAPI, {
method: 'GET',
url: '/user/refreshToken',
url: '/api/user/refreshToken',
errors: {
401: `Unauthorized`,
403: `Forbidden`,
@ -191,7 +191,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult_UmsAdmin_ | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/register',
url: '/api/user/register',
body: umsAdminParam,
errors: {
401: `Unauthorized`,
@ -212,7 +212,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/update',
url: '/api/user/update',
body: umsadmin,
errors: {
401: `Unauthorized`,
@ -233,7 +233,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/update/PersonalInfo',
url: '/api/user/update/PersonalInfo',
body: umsStudentAndTeacherDto,
errors: {
401: `Unauthorized`,
@ -254,7 +254,7 @@ export class UmsAdminControllerService {
): CancelablePromise<CommonResult | any> {
return __request(OpenAPI, {
method: 'POST',
url: '/user/updatePassword',
url: '/api/user/updatePassword',
body: updatePasswordParam,
errors: {
401: `Unauthorized`,

@ -5,7 +5,7 @@
"type": "module",
"scripts": {
"dev": "vite --open",
"build": "vue-tsc && vite build",
"build": "vite build",
"preview": "vite preview",
"build:test": "vue-tsc && vite build --mode test",
"build:pro": "vue-tsc && vite build --mode production",

@ -1,267 +1,266 @@
{
"nodes": [
{ "id": "node1", "label": "计算机", "color": "#4682B4", "classID": 0 },
{
"id": "node2",
"label": "前端",
"color": "rgba(254, 241, 0, 1)",
"classID": 1
},
{
"id": "node3",
"label": "js",
"color": "rgba(239, 242, 18, 1)",
"classID": 2
},
{
"id": "node4",
"label": "html",
"color": "rgba(230, 234, 10, 1)",
"classID": 3
},
{
"id": "node5",
"label": "css",
"color": "rgba(244, 231, 0, 1)",
"classID": 4
},
{
"id": "node6",
"label": "less",
"color": "rgba(15, 245, 57, 1)",
"classID": 5
},
{
"id": "node7",
"label": "scss",
"color": "rgba(133, 255, 11, 1)",
"classID": 6
},
{
"id": "node8",
"label": "VUE",
"color": "rgba(42, 255, 0, 1)",
"classID": 7
},
{
"id": "node9",
"label": "React",
"color": "rgba(76, 73, 245, 1)",
"classID": 8
},
{ "id": "node10", "label": "模块化", "color": "#4682B4", "classID": 9 },
{ "id": "node11", "label": "webpack", "color": "#4682B4", "classID": 10 },
{ "id": "node12", "label": "vite", "color": "#4682B4", "classID": 11 },
{
"id": "node13",
"label": "uniapp",
"color": "rgba(77, 255, 0, 1)",
"classID": 12
},
{
"id": "node14",
"label": "element",
"color": "rgba(33, 162, 255, 1)",
"classID": 13
},
{
"id": "node15",
"label": "web3",
"color": "rgba(255, 0, 251, 1)",
"classID": 14
},
{
"id": "node16",
"label": "webGl",
"color": "rgba(208, 0, 249, 1)",
"classID": 15
},
{
"id": "node17",
"label": "three",
"color": "rgba(225, 0, 255, 1)",
"classID": 16
},
{
"id": "node18",
"label": "后端",
"color": "rgba(0, 229, 255, 1)",
"classID": 17
},
{
"id": "node19",
"label": "java",
"color": "rgba(237, 229, 85, 1)",
"classID": 18
},
{
"id": "node20",
"label": "PHP",
"color": "rgba(195, 206, 215, 1)",
"classID": 19
},
{
"id": "node21",
"label": "Go",
"color": "rgba(255, 0, 0, 1)",
"classID": 20
},
{
"id": "node22",
"label": "Python",
"color": "rgba(109, 238, 180, 1)",
"classID": 21
},
{ "id": "node23", "label": "MySQL", "color": "#4682B4", "classID": 22 },
{
"id": "node24",
"label": "人工智能",
"color": "rgba(180, 5, 255, 1)",
"classID": 23
},
{
"id": "node25",
"label": "python",
"color": "rgba(255, 8, 8, 1)",
"classID": 24
},
{
"id": "node26",
"label": "AI模型",
"color": "rgba(10, 138, 244, 1)",
"classID": 25
},
{
"id": "node27",
"label": "Spring Framework",
"color": "rgba(242, 238, 14, 1)",
"classID": 26
},
{
"id": "node28",
"label": "Hibernate",
"color": "rgba(242, 238, 14, 1)",
"classID": 27
},
{
"id": "node29",
"label": "Spring MVC",
"color": "rgba(242, 238, 14, 1)",
"classID": 28
},
{
"id": "node30",
"label": "Gin",
"color": "rgba(255, 0, 0, 1)",
"classID": 29
},
{
"id": "node31",
"label": "Echo",
"color": "rgba(255, 0, 0, 1)",
"classID": 30
},
{
"id": "node32",
"label": "Beego",
"color": "rgba(255, 8, 0, 1)",
"classID": 31
},
{
"id": "node33",
"label": "Laravel",
"color": "rgba(200, 209, 217, 1)",
"classID": 32
},
{
"id": "node34",
"label": "Symfony",
"color": "rgba(182, 194, 204, 1)",
"classID": 33
},
{
"id": "node35",
"label": "CodeIgniter",
"color": "rgba(188, 197, 204, 1)",
"classID": 34
},
{
"id": "node36",
"label": "Django",
"color": "rgba(36, 245, 144, 1)",
"classID": 35
},
{
"id": "node37",
"label": "Flask",
"color": "rgba(41, 244, 176, 1)",
"classID": 36
},
{
"id": "node38",
"label": "FastAPI",
"color": "rgba(58, 244, 142, 1)",
"classID": 37
}
],
"links": [
{ "source": "node2", "target": "node3", "label": "", "classID": 0 },
{ "source": "node2", "target": "node5", "label": "", "classID": 1 },
{ "source": "node2", "target": "node4", "label": "", "classID": 2 },
{ "source": "node1", "target": "node2", "label": "前端方向", "classID": 3 },
{ "source": "node5", "target": "node6", "label": "", "classID": 4 },
{ "source": "node5", "target": "node7", "label": "", "classID": 5 },
{ "source": "node3", "target": "node8", "label": "", "classID": 6 },
{ "source": "node3", "target": "node9", "label": "", "classID": 7 },
{ "source": "node3", "target": "node10", "label": "", "classID": 8 },
{ "source": "node10", "target": "node11", "label": "", "classID": 9 },
{ "source": "node10", "target": "node12", "label": "", "classID": 10 },
{ "source": "node11", "target": "node9", "label": "", "classID": 11 },
{ "source": "node11", "target": "node8", "label": "", "classID": 12 },
{ "source": "node12", "target": "node8", "label": "", "classID": 13 },
{ "source": "node8", "target": "node13", "label": "", "classID": 14 },
{ "source": "node8", "target": "node14", "label": "", "classID": 15 },
{ "source": "node11", "target": "node13", "label": "", "classID": 16 },
{ "source": "node12", "target": "node13", "label": "", "classID": 17 },
{ "source": "node2", "target": "node15", "label": "", "classID": 18 },
{ "source": "node15", "target": "node16", "label": "", "classID": 19 },
{ "source": "node16", "target": "node17", "label": "", "classID": 20 },
{ "source": "node1", "target": "node1", "label": "", "classID": 21 },
{
"source": "node1",
"target": "node18",
"label": "后端方向",
"classID": 22
},
{ "source": "node18", "target": "node21", "label": "", "classID": 23 },
{ "source": "node18", "target": "node20", "label": "", "classID": 24 },
{ "source": "node18", "target": "node19", "label": "", "classID": 25 },
{ "source": "node18", "target": "node22", "label": "", "classID": 26 },
{ "source": "node22", "target": "node23", "label": "", "classID": 27 },
{ "source": "node19", "target": "node23", "label": "", "classID": 28 },
{ "source": "node20", "target": "node23", "label": "", "classID": 29 },
{ "source": "node21", "target": "node23", "label": "", "classID": 30 },
{
"source": "node1",
"target": "node24",
"label": "人工智能方向",
"classID": 31
},
{ "source": "node24", "target": "node25", "label": "", "classID": 32 },
{ "source": "node24", "target": "node26", "label": "", "classID": 33 },
{ "source": "node12", "target": "node9", "label": "", "classID": 34 },
{ "source": "node19", "target": "node27", "label": "", "classID": 35 },
{ "source": "node19", "target": "node28", "label": "", "classID": 36 },
{ "source": "node19", "target": "node29", "label": "", "classID": 37 },
{ "source": "node21", "target": "node30", "label": "", "classID": 38 },
{ "source": "node21", "target": "node31", "label": "", "classID": 39 },
{ "source": "node21", "target": "node32", "label": "", "classID": 40 },
{ "source": "node20", "target": "node33", "label": "", "classID": 41 },
{ "source": "node20", "target": "node34", "label": "", "classID": 42 },
{ "source": "node20", "target": "node35", "label": "", "classID": 43 },
{ "source": "node22", "target": "node36", "label": "", "classID": 44 },
{ "source": "node22", "target": "node37", "label": "", "classID": 45 },
{ "source": "node22", "target": "node38", "label": "", "classID": 46 }
]
}
"nodes": [
{ "id": "node1", "label": "计算机", "color": "#4682B4", "classID": 0 },
{
"id": "node2",
"label": "前端",
"color": "rgba(254, 241, 0, 1)",
"classID": 1
},
{
"id": "node3",
"label": "js",
"color": "rgba(239, 242, 18, 1)",
"classID": 2
},
{
"id": "node4",
"label": "html",
"color": "rgba(230, 234, 10, 1)",
"classID": 3
},
{
"id": "node5",
"label": "css",
"color": "rgba(244, 231, 0, 1)",
"classID": 4
},
{
"id": "node6",
"label": "less",
"color": "rgba(15, 245, 57, 1)",
"classID": 5
},
{
"id": "node7",
"label": "scss",
"color": "rgba(133, 255, 11, 1)",
"classID": 6
},
{
"id": "node8",
"label": "VUE",
"color": "rgba(42, 255, 0, 1)",
"classID": 7
},
{
"id": "node9",
"label": "React",
"color": "rgba(76, 73, 245, 1)",
"classID": 8
},
{ "id": "node10", "label": "模块化", "color": "#4682B4", "classID": 9 },
{ "id": "node11", "label": "webpack", "color": "#4682B4", "classID": 10 },
{ "id": "node12", "label": "vite", "color": "#4682B4", "classID": 11 },
{
"id": "node13",
"label": "uniapp",
"color": "rgba(77, 255, 0, 1)",
"classID": 12
},
{
"id": "node14",
"label": "element",
"color": "rgba(33, 162, 255, 1)",
"classID": 13
},
{
"id": "node15",
"label": "web3",
"color": "rgba(255, 0, 251, 1)",
"classID": 14
},
{
"id": "node16",
"label": "webGl",
"color": "rgba(208, 0, 249, 1)",
"classID": 15
},
{
"id": "node17",
"label": "three",
"color": "rgba(225, 0, 255, 1)",
"classID": 16
},
{
"id": "node18",
"label": "后端",
"color": "rgba(0, 229, 255, 1)",
"classID": 17
},
{
"id": "node19",
"label": "java",
"color": "rgba(237, 229, 85, 1)",
"classID": 18
},
{
"id": "node20",
"label": "PHP",
"color": "rgba(195, 206, 215, 1)",
"classID": 19
},
{
"id": "node21",
"label": "Go",
"color": "rgba(255, 0, 0, 1)",
"classID": 20
},
{
"id": "node22",
"label": "Python",
"color": "rgba(109, 238, 180, 1)",
"classID": 21
},
{ "id": "node23", "label": "MySQL", "color": "#4682B4", "classID": 22 },
{
"id": "node24",
"label": "人工智能",
"color": "rgba(180, 5, 255, 1)",
"classID": 23
},
{
"id": "node25",
"label": "python",
"color": "rgba(255, 8, 8, 1)",
"classID": 24
},
{
"id": "node26",
"label": "AI模型",
"color": "rgba(10, 138, 244, 1)",
"classID": 25
},
{
"id": "node27",
"label": "Spring Framework",
"color": "rgba(242, 238, 14, 1)",
"classID": 26
},
{
"id": "node28",
"label": "Hibernate",
"color": "rgba(242, 238, 14, 1)",
"classID": 27
},
{
"id": "node29",
"label": "Spring MVC",
"color": "rgba(242, 238, 14, 1)",
"classID": 28
},
{
"id": "node30",
"label": "Gin",
"color": "rgba(255, 0, 0, 1)",
"classID": 29
},
{
"id": "node31",
"label": "Echo",
"color": "rgba(255, 0, 0, 1)",
"classID": 30
},
{
"id": "node32",
"label": "Beego",
"color": "rgba(255, 8, 0, 1)",
"classID": 31
},
{
"id": "node33",
"label": "Laravel",
"color": "rgba(200, 209, 217, 1)",
"classID": 32
},
{
"id": "node34",
"label": "Symfony",
"color": "rgba(182, 194, 204, 1)",
"classID": 33
},
{
"id": "node35",
"label": "CodeIgniter",
"color": "rgba(188, 197, 204, 1)",
"classID": 34
},
{
"id": "node36",
"label": "Django",
"color": "rgba(36, 245, 144, 1)",
"classID": 35
},
{
"id": "node37",
"label": "Flask",
"color": "rgba(41, 244, 176, 1)",
"classID": 36
},
{
"id": "node38",
"label": "FastAPI",
"color": "rgba(58, 244, 142, 1)",
"classID": 37
}
],
"links": [
{ "source": "node2", "target": "node3", "label": "", "classID": 0 },
{ "source": "node2", "target": "node5", "label": "", "classID": 1 },
{ "source": "node2", "target": "node4", "label": "", "classID": 2 },
{ "source": "node1", "target": "node2", "label": "前端方向", "classID": 3 },
{ "source": "node5", "target": "node6", "label": "", "classID": 4 },
{ "source": "node5", "target": "node7", "label": "", "classID": 5 },
{ "source": "node3", "target": "node8", "label": "", "classID": 6 },
{ "source": "node3", "target": "node9", "label": "", "classID": 7 },
{ "source": "node3", "target": "node10", "label": "", "classID": 8 },
{ "source": "node10", "target": "node11", "label": "", "classID": 9 },
{ "source": "node10", "target": "node12", "label": "", "classID": 10 },
{ "source": "node11", "target": "node9", "label": "", "classID": 11 },
{ "source": "node11", "target": "node8", "label": "", "classID": 12 },
{ "source": "node12", "target": "node8", "label": "", "classID": 13 },
{ "source": "node8", "target": "node13", "label": "", "classID": 14 },
{ "source": "node8", "target": "node14", "label": "", "classID": 15 },
{ "source": "node11", "target": "node13", "label": "", "classID": 16 },
{ "source": "node12", "target": "node13", "label": "", "classID": 17 },
{ "source": "node2", "target": "node15", "label": "", "classID": 18 },
{ "source": "node15", "target": "node16", "label": "", "classID": 19 },
{ "source": "node16", "target": "node17", "label": "", "classID": 20 },
{ "source": "node1", "target": "node1", "label": "", "classID": 21 },
{
"source": "node1",
"target": "node18",
"label": "后端方向",
"classID": 22
},
{ "source": "node18", "target": "node21", "label": "", "classID": 23 },
{ "source": "node18", "target": "node20", "label": "", "classID": 24 },
{ "source": "node18", "target": "node19", "label": "", "classID": 25 },
{ "source": "node18", "target": "node22", "label": "", "classID": 26 },
{ "source": "node22", "target": "node23", "label": "", "classID": 27 },
{ "source": "node19", "target": "node23", "label": "", "classID": 28 },
{ "source": "node20", "target": "node23", "label": "", "classID": 29 },
{ "source": "node21", "target": "node23", "label": "", "classID": 30 },
{
"source": "node1",
"target": "node24",
"label": "人工智能方向",
"classID": 31
},
{ "source": "node24", "target": "node25", "label": "", "classID": 32 },
{ "source": "node24", "target": "node26", "label": "", "classID": 33 },
{ "source": "node12", "target": "node9", "label": "", "classID": 34 },
{ "source": "node19", "target": "node27", "label": "", "classID": 35 },
{ "source": "node19", "target": "node28", "label": "", "classID": 36 },
{ "source": "node19", "target": "node29", "label": "", "classID": 37 },
{ "source": "node21", "target": "node30", "label": "", "classID": 38 },
{ "source": "node21", "target": "node31", "label": "", "classID": 39 },
{ "source": "node21", "target": "node32", "label": "", "classID": 40 },
{ "source": "node20", "target": "node33", "label": "", "classID": 41 },
{ "source": "node20", "target": "node34", "label": "", "classID": 42 },
{ "source": "node20", "target": "node35", "label": "", "classID": 43 },
{ "source": "node22", "target": "node36", "label": "", "classID": 44 },
{ "source": "node22", "target": "node37", "label": "", "classID": 45 },
{ "source": "node22", "target": "node38", "label": "", "classID": 46 }
]
}

File diff suppressed because it is too large Load Diff

@ -1,41 +1,38 @@
import request from '@/utils/request'
/**
*
*/
export function getAssApi(params: {
page: number,
pageSize: number,
resourceIdList: string,
page: number
pageSize: number
resourceIdList: string
type: 1 | 2 | 3 | 4 | 5
userId: string
}) {
return request.get('/Favour/get', {
params
params,
})
}
/**
*
* @param par
* @param par
*/
export function aaaApi(par: any) {
if (par) return request.get(`url${par}`)
else return request.get(`url`)
}
export const uploadFile = (data: any) => {
return request({
url: '/upload',
method: "POST",
data
method: 'POST',
data,
})
}
/**
*
* @returns
@ -66,33 +63,33 @@ export function getOrogramObjectiveApi() {
})
}
// 获取课程列表
export const getCourseList = (params:any) => {
export const getCourseList = (params: any) => {
return request({
url: '/course_objectives/list/' + params.id,
params
params,
})
}
// 添加分目标
export const addCourse = (data:any) => {
export const addCourse = (data: any) => {
return request({
url:'/objective_contents/addcontent',
method:"POST",
data
url: '/objective_contents/addcontent',
method: 'POST',
data,
})
}
// 编辑目标
export const editCourse = (data: any) => {
return request({
url: '/objective_contents/update',
method: "PUT",
data
method: 'PUT',
data,
})
}
//删除课程目标
export const deleteCourse = (params: any) => {
return request({
url: '/objective_contents/' + params.id,
method: "DELETE",
method: 'DELETE',
})
}
// /objective_contents/
@ -100,7 +97,7 @@ export const deleteCourse = (params: any) => {
export const getCourseInfo = (params: any) => {
return request({
url: '/objective_contents/' + params.id,
method: "get",
params
method: 'get',
params,
})
}
}

@ -1,10 +1,8 @@
import request from '@/utils/request'
//获取浏览记录列表
export const getRecordListService = (params) =>
request.get('/learningrecords/getall', { params })
request.get('/api/learningrecords/getall', { params })
//删除浏览记录
export function DelRecordService(ids) {
return request.delete(
`h/learningrecords/delete?ids=${ids}`,
)
}
return request.delete(`h//api/learningrecords/delete?ids=${ids}`)
}

@ -1,35 +1,35 @@
import request from '@/utils/request'
// 获取课程列表
export const getCourseListApi = (params) => {
return request.get('/coursesteacher/page', {
return request.get('/api/coursesteacher/page', {
params,
})
}
// 编辑课程
export const editCourseApi = (params) => {
return request.put('/coursesteacher', params)
return request.put('/api/coursesteacher', params)
}
// 添加课程
export const addCourseApi = (data) => {
return request.post(`/coursesteacher/addcourse`, data)
return request.post(`/api/coursesteacher/addcourse`, data)
}
// 获取课程详情
export const getCourseDetailApi = (id) => {
return request.get(`/coursesteacher/${id}`)
return request.get(`/api/coursesteacher/${id}`)
}
// 删除课程
export const deleteCourseApi = (id) => {
return request.delete(`/coursesteacher/${id}`)
return request.delete(`/api/coursesteacher/${id}`)
}
// 获取课程id
export const getCourseObjectApi = (id) => {
return request.get(`/course_objectives/list/${id}`)
return request.get(`/api/course_objectives/list/${id}`)
}
// 获取教师列表
export const getTeacherListApi = () => {
return request.get('/user/get_teacherinf_list')
return request.get('/api/user/get_teacherinf_list')
}
export const fnNameGet = (params) => {
@ -44,7 +44,7 @@ export const getPageCourses = (data) => {
console.log(data.pageSize)
// return request.get(`/courses/index`,data)
return request.get(
`/coursesteacher/index?page=${data.page}&pageSize=${data.pageSize}`,
`/api/coursesteacher/index?page=${data.page}&pageSize=${data.pageSize}`,
)
}
// {id:1}

@ -3,9 +3,9 @@ import { loginType, loginResponseType, userInfoType } from './types'
//项目用户相关的请求地址
enum API {
LOGIN_URL = '/user/login',
USERINFO_URL = '/user/info',
LOGOUT_URL = '/user/logout',
LOGIN_URL = '/api/user/login',
USERINFO_URL = '/api/user/info',
LOGOUT_URL = '/api/user/logout',
}
// 用户登录
export const reqLogin = (data: loginType) =>

@ -1,48 +1,48 @@
import request from '@/utils/request'
//账号登录接口
export const userLoginService = (loginData) => {
return request.post('/user/login', loginData, {
return request.post('/api/user/login', loginData, {
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})
}
//手机号登录接口
export const userPhoneLoginService = (phones) => {
return request.post('/user/phone/login?phone=' + phones)
return request.post('/api/user/phone/login?phone=' + phones)
}
//账号注册接口
export const userRegisterService = (jsonData) => {
return request.post('/user/register', jsonData, {
return request.post('/api/user/register', jsonData, {
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})
}
//手机号注册接口
export const userPhoneRegisterService = (jsonData) => {
return request.post('/user/phone/register', jsonData, {
return request.post('/api/user/phone/register', jsonData, {
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})
}
//手机号验证码请求
export const userCodeRegisterService = (phoness) => {
return request.post('/user/code?phone=' + phoness)
return request.post('/api/user/code?phone=' + phoness)
}
//用户信息接口
export const userGetInfoService = (token) =>
request.get('/user/info', {
request.get('/api/user/info', {
headers: { Authorization: `Bearer ${token}` },
})
//修改用户信息
export const userChangeService = (jsonData) => {
return request.post('/user/update', jsonData, {
return request.post('/api/user/update', jsonData, {
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})
}
//获取身份信息
//获取个人信息
export const userIdenService = (id) => {
return request.post('/user/personal/info?id=' + id)
return request.post('/api/user/personal/info?id=' + id)
}
//修改身份信息
//修改个人信息
export const userIdenChangeService = (dataToSend) => {
return request.post('/user/update/PersonalInfo', dataToSend, {
return request.post('/api/user/update/PersonalInfo', dataToSend, {
headers: { 'Content-Type': 'application/json;charset=UTF-8' },
})
}

@ -43,19 +43,17 @@
<script lang="ts" setup>
import { onMounted, watch } from 'vue'
import useLayoutSettingStoe from '@/store/modules/setting'
import permissionStore from '@/store/modules/permission'
//
import { useRoute } from 'vue-router'
import Tabbar from './tabbar/index.vue'
import LoGo from './logo/index.vue'
import Menu from './menu/index.vue'
import {constantRoute} from '@/router/routers'
import { constantRoute } from '@/router/routers'
//
// import userUserStore from '@/store/modules/user'
// import { onMounted, reactive, ref, toRefs, watch } from 'vue'
import Main from './main/index.vue'
const LayoutSettingStoe = useLayoutSettingStoe()
const usePermissionStore = permissionStore()
// const userStore = userUserStore()
const $route = useRoute()

@ -13,7 +13,7 @@
<el-button size="small" icon="FullScreen" circle @click="fullScreen" />
<el-button size="small" icon="Setting" circle />
<img
:src="userStore.avatar"
src=""
alt=""
style="width: 24px; height: 24px; margin: 0 10px; border-radius: 50%"
/>

@ -22,14 +22,14 @@ const app = createApp(App)
//持久化
import gloablComponent from '@/components/index'
import 'echarts'
import ECharts from 'vue-echarts';
import 'echarts'
import ECharts from 'vue-echarts'
// 导入jquery
// import $ from 'jquery'
app.use(gloablComponent)
// 注册仓库
app.use(pinia)
app.component('ECharts',ECharts)
app.component('ECharts', ECharts)
// 安装element插件
app.use(ElementPlus, {
locale: zhCn, //使用中文

@ -68,7 +68,7 @@ router.beforeEach(async (to, form, next) => {
// console.log(to, 'to')
// next()
// })
router.afterEach((to, form, next) => {
router.afterEach(() => {
nprogress.done()
})
export default router

@ -1,6 +1,6 @@
// 导入路由插件
import { createRouter, createWebHashHistory } from 'vue-router'
import {constantRoute} from './routers.ts'
import { constantRoute } from './routers.ts'
const routerList = [
{
path: '/login',
@ -14,7 +14,7 @@ const routerList = [
]
const router = createRouter({
history: createWebHashHistory(),
routes: [...routerList,...constantRoute],
routes: [...routerList, ...constantRoute],
scrollBehavior() {
return {
left: 0,

@ -7,4 +7,5 @@ export interface LoginStoreType {
routes: string
phone: string
userInfo: object
data: object
}

@ -1,9 +1,9 @@
// 创建用户相关的仓库
import { defineStore } from 'pinia'
// 引入登录接口
import { reqLogin, getUserInfo } from '@/api/user/index'
// import { reqLogin, getUserInfo } from '@/api/user/index'
// 引入登录参数类型
import { loginType, loginResponseType } from '@/api/user/types'
import { loginType } from '@/api/user/types'
// 引入ElementPlus通知插件
import { ElMessage, ElNotification } from 'element-plus'
import { getTime } from '@/utils/time'
@ -24,6 +24,8 @@ import {
const useUserStore = defineStore(
'User',
{
// @ts-expect-error
state: (): LoginStoreType => {
return {
token: GET_TKOEN('TOKEN') || '',
@ -31,22 +33,25 @@ const useUserStore = defineStore(
userName: '', // 用户姓名
avatar: '', // 用户头像
routes: '',
phone: '',
userInfo: {}, // 当前用户相关信息
data: {},
}
},
actions: {
// 登录事件
async userLogin(data: loginType) {
console.log(data, 'pinia')
const res: loginResponseType = await userLoginService(data).catch(
(error) => {
ElMessage.error(error.response.data.message)
console.log(error, 'error')
},
)
async userLogin(data: any) {
// console.log(data, 'pinia')
const res: any = await userLoginService(data).catch((error) => {
ElMessage.error(error.response.data.message)
console.log(error, 'error')
})
if (res.code === 200) {
// @ts-expect-error
this.token = res.data.token as string
// @ts-expect-error
SET_TKOEN('TOKEN', this.token)
// localStorage.setItem('TOKEN', this.token)
@ -68,10 +73,14 @@ const useUserStore = defineStore(
},
//手机号登录
async userPhoneLogin(data: loginType) {
const res: loginResponseType = await userPhoneLoginService(data)
const res: any = await userPhoneLoginService(data)
console.log(res, 11111)
if (res.code === 200) {
// @ts-expect-error
this.token = res.data.token as string //接收返回的token
// @ts-expect-error
SET_TKOEN('TOKEN', this.token)
// localStorage.setItem('TOKEN', this.token)
ElNotification({
@ -90,16 +99,24 @@ const useUserStore = defineStore(
},
// 获取用户信息事件
async getUserInfo() {
const result = await userGetInfoService(GET_TKOEN('TOKEN'))
const result: any = await userGetInfoService(GET_TKOEN('TOKEN'))
if (result.code === 200) {
const res = await userIdenService(result.data.id)
// @ts-expect-error
this.userInfo = res.data
console.log(this.userInfo, 'this.userInfo')
// console.log(this.userInfo, 'this.userInfo')
// @ts-expect-error
this.data = result.data
console.log(result, '123')
// @ts-expect-error
this.userName = result.data.username
// this.avatar = result.data.checkUser.avatar
this.routes = result.data.menus.map((item) => {
// @ts-expect-error
this.routes = result.data.menus.map((item: any) => {
return item.name
})
return {
@ -116,9 +133,17 @@ const useUserStore = defineStore(
// 清除token
REMOVE_TOKEN('TOKEN'),
// ;(this.userName = ''), (this.avatar = '')
// @ts-expect-error
(this.userName = ''),
// @ts-expect-error
(this.avatar = '')
// @ts-expect-error
this.token = ''
// @ts-expect-error
this.routes = ''
usePermissionStore.removeRouter()
location.reload()

@ -2,12 +2,14 @@
<!-- 课程收藏页面 -->
<el-tab-pane label="课程收藏" name="first">
<div class="Container_Cla" ref="container">
<div class="item_1" v-for="(item_1, index) in datalist" :key="index">
<div class="item_1" v-for="item_1 in datalist" :key="item_1.id">
<!-- 课程图片盒子 -->
<div class="ClassImg">
<!-- 更多图片盒子 -->
<div class="ClassGd">
<img src="../../assets/icons/更多.svg" width="100%" height="100%" />
<!-- <img src="../../assets/icons/更多.svg" width="100%" height="100%" /> -->
<p>查看课程</p>
<p>取消收藏</p>
</div>
<!-- 课程图片 -->
<img :src="item_1.img" />
@ -40,7 +42,7 @@
</el-tab-pane>
</template>
<script lang="ts" setup>
import { ref, onMounted, onBeforeUnmount } from 'vue'
import { ref, onMounted } from 'vue'
import { SeCourseFavourControllerService } from '../../../generated/services/SeCourseFavourControllerService'
import { CourseFavourQueryRequest } from 'generated/models/CourseFavourQueryRequest'
// ===============================
@ -69,27 +71,18 @@ onMounted(() => myObserver.observe(container.value))
const total = ref(0)
const datalist = ref([
{
/**
* 课程学时
*/
//
classhours: '',
/**
* 课程学分
*/
//
credit: '',
id: '',
img: '',
name: '',
/**
* 教师id
*/
// id
teacher: '',
},
])
/**
* 表单信息
*/
//
let params = ref<CourseFavourQueryRequest>({
current: 1,
pageSize: 12,
@ -97,7 +90,7 @@ let params = ref<CourseFavourQueryRequest>({
sortOrder: '',
userId: 2,
})
//
const getDatalist = async () => {
const res = await SeCourseFavourControllerService.listPostByPageUsingPost1(
params.value,
@ -108,6 +101,7 @@ const getDatalist = async () => {
getDatalist()
//
const handleSizeChange = (size: any) => {
// console.log(size)
params.value.current = 1
@ -200,10 +194,23 @@ const handleCurrentChange = (page: any) => {
.ClassGd {
position: absolute;
background-color: rgb(217, 217, 217, 0.5);
display: none;
margin-top: -9px;
margin-left: 95%;
margin-left: 85%;
padding: 3px 5px;
cursor: pointer;
border-radius: 20%;
& > p {
margin-top: 3px;
margin-bottom: 3px;
font-size: 10px;
font-weight: 350;
color: black;
&:hover {
color: #2952f6;
font-weight: 35s0;
}
}
}
.ClaCon {

@ -1,36 +1,90 @@
<template>
<el-tab-pane label="知识点收藏" name="third">
<div class="Container_Kno">
<div class="item_3" v-for="(item_3, index) in 10" :key="index">
<div>
<div class="KnowledgeCollent">
<div class="KnoCon">
<h4>课程名称</h4>
<p>{{ item_3 }}-xxxx</p>
</div>
<div class="KnoBtn" >
<img src="../../assets/icons/更多.svg" alt="" />
</div>
</div>
<div class="Knowledge_point">
<ul>
<li v-for="(item, index) in 6" :key="index">
知识点知识点知识点{{ item }}
<span class="btn" >×</span>
&nbsp;
</li>
</ul>
</div>
</div>
<el-tab-pane label="知识点收藏" name="third">
<div class="Container_Kno">
<div
class="item_3 noUpd"
v-for="item_3 in arr"
:onclick="handClick"
:key="item_3.id"
>
<div>
<div class="KnowledgeCollent">
<div class="KnoCon">
<h4>{{ item_3.name }}</h4>
<p>{{ item_3.num }}-{{ item_3.zjname }}</p>
</div>
<div class="KnoBtn">
<img class="cli" src="../../assets/icons/更多.svg" />
</div>
</div>
<div class="Knowledge_point">
<ul>
<li v-for="(item, index) in 5" :key="index">
&nbsp;
{{ index + 1 }}. 知识点知识点知识点 &nbsp;
<span class="btn">×</span>
&nbsp;
</li>
</ul>
</div>
</el-tab-pane>
</div>
</div>
</div>
</el-tab-pane>
</template>
<script lang="ts" setup>
<script setup>
import { ref, reactive } from 'vue'
function handClick(e) {
if (e.target.classList.contains('cli')) {
this.classList.toggle('noUpd')
}
}
const arr = reactive([])
const a = [
{
id: 1,
name: '操作系统',
num: 1,
zjname: '操作系统引论',
zsd: ['sadas', 'asdadsad', 'asdasdas'],
},
{
id: 2,
name: '跨文化交际',
num: 1,
},
{
id: 3,
name: '软件项目管理',
num: 1,
},
{
id: 4,
name: '英语课',
num: 1,
},
]
arr.length = 0
arr.push(...a)
const ShowDel = ref(false)
function XsDel(id) {
const item = arr.find((o) => o.a.id == id)
item.ShowDel = !item.ShowDel
}
</script>
<style lang="scss" scoped>
.btn {
display: inline-block;
}
.item_3.noUpd {
.btn {
display: none;
}
}
.Container_Kno {
width: 100%;
height: 100%;
@ -68,14 +122,14 @@
justify-content: space-around;
}
.KnoBtn>img {
.KnoBtn > img {
padding-top: 20px;
cursor: pointer;
}
.KnowledgeCollent h4 {
margin-top: 3px;
font-size: 30px;
font-size: 27px;
font-weight: 550;
font-style: normal;
}
@ -96,7 +150,7 @@
flex-direction: column;
}
.Knowledge_point>ul>li {
.Knowledge_point > ul > li {
display: inline-block;
margin-top: 3px;
margin-bottom: 3px;
@ -110,12 +164,8 @@
border-radius: 3px;
}
.btn {
display: none;
}
.btn:hover {
cursor: pointer;
color: rgb(15, 57, 76);
}
</style>
</style>

@ -1,6 +1,12 @@
<template>
<div class="curse-collection">
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick" style="padding-top: 0">
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
style="padding-top: 0"
>
<!-- 课程收藏页面 -->
<ContainerCla />
<!-- 资源收藏页面 -->
@ -77,11 +83,18 @@
</div>
</div>
</div>
<el-dialog v-model="centerDialogVisible" title="视频播放中" width="1000" align-center>
<el-dialog
v-model="centerDialogVisible"
title="视频播放中"
width="1000"
align-center
>
<span>点击开了一个弹框</span>
<template #footer>
<div class="dialog-footer">
<video src=""></video>
<video
src="https://www.bilibili.com/video/BV1HV4y1a7n4?p=50&vd_source=9e99d3200788d6043e077de463ef019b"
></video>
</div>
</template>
</el-dialog>
@ -109,13 +122,23 @@
</div>
<div class="ResClaDic">
<p>音频名称-----{{ item }}</p>
<el-button plain @click="centerDialogVisible = true">
点击播放
</el-button>
</div>
</div>
</div>
<div class="Page-2">
<el-pagination v-model:current-page="currentPage1" v-model:page-size="pageSize1" :disabled="disabled"
:page-sizes="[6, 8, 12, 15]" layout="total, sizes, prev, pager, next, jumper" :total="10"
@size-change="handleSizeChange" @current-change="handleCurrentChange" />
<el-pagination
v-model:current-page="currentPage1"
v-model:page-size="pageSize1"
:disabled="disabled"
:page-sizes="[6, 8, 12, 15]"
layout="total, sizes, prev, pager, next, jumper"
:total="10"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</el-tab-pane>
<!-- 知识点收藏页面 -->
@ -130,21 +153,22 @@ import { ref, watch } from 'vue'
import type { TabsPaneContext } from 'element-plus'
import ContainerCla from './ContainerCla.vue'
import ContainerKno from './ContainerKno.vue'
import { getAssApi } from "@/api/courseChaptersApi";
// import { getAssApi } from '@/api/courseChaptersApi'
import { SeResourceFavourControllerService } from '../../../generated/services/SeResourceFavourControllerService'
const centerDialogVisible = ref(false)
const activeIndex = ref(1)
function hsndelShow(index: number) {
activeIndex.value = index
}
//=========================
function handleApi(params) {
getAssApi(params).then(res => {
arr.value = res.data.records
total.value = res.data.total
console.log(arr.value, '-', total.value)
})
}
// //=========================
// function handleApi(params) {
// getAssApi(params).then(res => {
// arr.value = res.data.records
// total.value = res.data.total
// console.log(arr.value, '-', total.value)
// })
// }
const arr = ref([])
const total = ref(0)
//
@ -152,11 +176,11 @@ const currentPage1 = ref(1)
const pageSize1 = ref(10)
const disabled = ref(false)
const handleSizeChange = (val: number) => {
hand()
const handleSizeChange = () => {
getDatalist()
}
const handleCurrentChange = (val: number) => {
hand()
const handleCurrentChange = () => {
getDatalist()
}
function initFenYie() {
@ -165,34 +189,61 @@ function initFenYie() {
pageSize1.value = 10
}
watch(activeIndex, (newVal) => {
watch(activeIndex, () => {
initFenYie()
hand()
getDatalist()
})
function hand() {
const params = {
type: activeIndex.value,
page: currentPage1.value,
pageSize: pageSize1.value,
resourceIdList: '1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'
}
handleApi(params)
}
const obj = {
// function hand() {
// console.log(res)
// // handleApi(params)
// }
const params = {
current: currentPage1.value,
type: activeIndex.value,
page: currentPage1.value,
pageSize: pageSize1.value,
resourceIdList: '1,2,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'
sortField: '',
sortOrder: '',
userId: '3',
}
handleApi(obj)
const datalist = ref([
{
description: '',
id: '',
img: '',
name: '',
path: '',
status: '',
tags: '',
type: '',
},
])
const getDatalist = async () => {
const res =
await SeResourceFavourControllerService.listPostByPageUsingPost3(params)
datalist.value = res.data.records
total.value = res.data.total
console.log(datalist.value[0])
}
getDatalist()
// hand()
// const obj = {
// type: activeIndex.value,
// page: currentPage1.value,
// pageSize: pageSize1.value,
// sortField:'',
// sortOrder:'',
// resourceIdList: ''
// }
// handleApi(obj)
//=========================
const activeName = ref('first')
const handleClick = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event)
}
</script>
<style lang="scss" scoped>
@ -200,7 +251,7 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
justify-content: center;
}
.example-pagination-block+.example-pagination-block {
.example-pagination-block + .example-pagination-block {
margin-top: 10px;
}
@ -337,7 +388,7 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
align-items: center;
}
.ResClaDic>p {
.ResClaDic > p {
font-family: Inter, Inter;
font-weight: 500;
font-size: 20px;
@ -348,8 +399,6 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
}
.item_2-2,
.item_2-3,
.item_2-4,
.item_2-5 {
width: 100%;
height: 300px;
@ -361,6 +410,18 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
border-radius: 6px;
margin-bottom: 32px;
}
.item_2-3,
.item_2-4 {
width: 100%;
height: 300px;
margin-top: 20px;
border-left: 1px solid #e4e4e4;
border-top: 1px solid #e4e4e4;
overflow: hidden;
box-shadow: 2px 2px 2px 2px rgba(214, 212, 212, 0.5);
border-radius: 6px;
margin-bottom: 32px;
}
.Page-2 {
width: 100%;
@ -368,7 +429,7 @@ const handleClick = (tab: TabsPaneContext, event: Event) => {
position: flex;
justify-content: center;
background-color: #fff;
border-top: 1px solid rgb(229, 227, 227, .5);
border-bottom: 1px solid rgb(229, 227, 227, .5);
border-top: 1px solid rgb(229, 227, 227, 0.5);
border-bottom: 1px solid rgb(229, 227, 227, 0.5);
}
</style>

@ -155,6 +155,7 @@ const goToAnotherPage = (address) => {
<ul v-if="recordList.length > 0">
<li v-for="record in recordList" :key="record.id" v-loading="loading">
<input
style="display: flex"
type="checkbox"
:value="record.id"
@change="toggleSelection(record.id)"
@ -241,29 +242,30 @@ ul {
padding: 10;
display: flex;
flex-wrap: wrap;
justify-content: start;
}
li {
/* margin-bottom: 30px; */
transition: filter 0.3s; /* 添加过渡动画 */
flex: 0 0 20%;
/* flex: 1 0 20%; */
width: calc(20% - 20px);
flex-direction: column;
margin-bottom: 10px;
align-items: center;
text-align: center;
/* margin: 0 15px; */
padding: 10px;
box-sizing: border-box;
transition: box-shadow 0.3s;
cursor: pointer;
align-items: center;
}
li:hover {
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
}
.img {
width: 100%;
height: 100%;
display: block;
width: 250px;
height: 250px;
}
</style>

@ -4,7 +4,13 @@ import { ElMessage, ElMessageBox } from 'element-plus'
import { id } from 'element-plus/es/locales.mjs'
import * as echarts from 'echarts'
import { useRoute } from 'vue-router'
import { getCourseList, addCourse, editCourse, deleteCourse, getCourseInfo } from '@/api/courseChaptersApi'
import {
getCourseList,
addCourse,
editCourse,
deleteCourse,
getCourseInfo,
} from '@/api/courseChaptersApi'
const route = useRoute()
// id id
// targetId
@ -49,11 +55,16 @@ const handleClose = () => {
//
const submit = async () => {
if (flog.value) {
await editCourse({ id: activeIndex.value, content: formData.value.description })
await editCourse({
id: activeIndex.value,
content: formData.value.description,
})
} else {
await addCourse({ objectiveId: activeIndex.value, content: formData.value.description })
await addCourse({
objectiveId: activeIndex.value,
content: formData.value.description,
})
}
getList()
dialogVisible.value = false
formData.value.description = ''
@ -79,7 +90,6 @@ const submit = async () => {
// })
// close()
// flog.value = false
}
const close = () => {
formData.value = {
@ -117,7 +127,7 @@ const del = async (obj) => {
await ElMessageBox.confirm('你确认要删除该课程目标吗', '温馨提示', {
type: 'warning',
confirmButtonText: '确认',
cancelButtonText: '取消'
cancelButtonText: '取消',
})
await deleteCourse({ id: obj.id })
ElMessage.success('删除成功')
@ -145,9 +155,9 @@ const data = ref({})
const courseId = ref(0)
onMounted(async () => {
courseId.value = route.query.id
console.log(courseId.value);
console.log(courseId.value)
getList()
console.log(data.value);
console.log(data.value)
let chartDom = document.getElementById('main')
let myChart = echarts.init(chartDom)
let option
@ -197,7 +207,9 @@ onMounted(async () => {
<div class="topContent">
<div class="title">| 课程总目标</div>
<div class="content1">
<textarea class="textarea" @change="textChange" v-model="text">文本内容</textarea>
<textarea class="textarea" @change="textChange" v-model="text">
文本内容</textarea
>
</div>
</div>
<div class="footContent">
@ -208,13 +220,17 @@ onMounted(async () => {
</div>
</div>
<div class="rightContent">
<div class="title" style="
<div
class="title"
style="
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
height: 60px;">
height: 60px;
"
>
<div class="left2">| 课程分目标</div>
<div class="right2">
<!-- <el-button type="primary" @click="addBook">新增</el-button> -->
@ -223,7 +239,10 @@ onMounted(async () => {
<div class="content2">
<el-scrollbar height="600px">
<ul class="objectLi">
<li v-for="(item, index) in data.courseObjectivesTrees" :key="item.id">
<li
v-for="(item, index) in data.courseObjectivesTrees"
:key="item.id"
>
<div class="courseObject">
<!-- {{ filterTarger(item.targetId) }} -->
<div class="courseObject1">{{ item.name }}</div>
@ -231,7 +250,9 @@ onMounted(async () => {
<!-- <el-button class="edit" type="text" @click="editBook(item)">
编辑
</el-button> -->
<el-button type="primary" @click="addBook(item.id)">新增</el-button>
<el-button type="primary" @click="addBook(item.id)">
新增
</el-button>
</div>
</div>
<div class="smallContent">
@ -246,10 +267,18 @@ onMounted(async () => {
<!-- {{ filterTarger(obj.targetId) }} -->
</div>
<div class="partObject2">
<el-button class="edit" type="text" @click="editBook(obj)">
<el-button
class="edit"
type="text"
@click="editBook(obj)"
>
编辑
</el-button>
<el-button class="destroy" type="text" @click="del(obj)">
<el-button
class="destroy"
type="text"
@click="del(obj)"
>
删除
</el-button>
</div>
@ -267,8 +296,13 @@ onMounted(async () => {
</div>
</div>
</div>
<el-dialog v-if="dialogVisible" v-model="dialogVisible" :title="flog ? '编辑' : '新增'" width="500"
:before-close="handleClose">
<el-dialog
v-if="dialogVisible"
v-model="dialogVisible"
:title="flog ? '编辑' : '新增'"
width="500"
:before-close="handleClose"
>
<el-form :model="formData" label-width="auto" style="max-width: 600px">
<!-- <el-form-item label="目标" prop="target">
<el-select v-model="formData.target" placeholder="Select" size="large" style="width: 240px">
@ -277,7 +311,10 @@ onMounted(async () => {
</el-select>
</el-form-item> -->
<el-form-item label="内容" prop="description">
<el-input v-model="formData.description" placeholder="请输入内容"></el-input>
<el-input
v-model="formData.description"
placeholder="请输入内容"
></el-input>
</el-form-item>
</el-form>
<template #footer>
@ -380,7 +417,7 @@ const li
background-color: #fff;
background-image: linear-gradient(#c7e3ff, #ffffff);
.objectLi>li {
.objectLi > li {
width: 845px;
height: 250px;
// margin: 40px;
@ -423,7 +460,7 @@ const li
background-image: linear-gradient(#c7e3ff, #ffffff);
}
.small>li {
.small > li {
// display: inline-flex;
width: 650px;
height: 150px;

@ -3,7 +3,7 @@ import { ref, onMounted } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { id } from 'element-plus/es/locales.mjs'
import * as echarts from 'echarts'
import {useRoute } from 'vue-router'
import { useRoute } from 'vue-router'
import { getCourseList } from '@/api/courseChaptersApi'
const route = useRoute()
// id id
@ -15,10 +15,26 @@ const booksList = ref([
])
const courseList = ref([
{ id: 1, specific: '思政目标', booklist: [{ id: 1, targetId: 1, introduce: '内容111111' }] },
{ id: 2, specific: '知识目标', booklist: [{ id: 1, targetId: 1, introduce: '内容222222' }] },
{ id: 3, specific: '能力目标', booklist: [{ id: 1, targetId: 1, introduce: '内容333333' }] },
{ id: 4, specific: '素质目标', booklist: [{ id: 1, targetId: 1, introduce: '内容444444' }] },
{
id: 1,
specific: '思政目标',
booklist: [{ id: 1, targetId: 1, introduce: '内容111111' }],
},
{
id: 2,
specific: '知识目标',
booklist: [{ id: 1, targetId: 1, introduce: '内容222222' }],
},
{
id: 3,
specific: '能力目标',
booklist: [{ id: 1, targetId: 1, introduce: '内容333333' }],
},
{
id: 4,
specific: '素质目标',
booklist: [{ id: 1, targetId: 1, introduce: '内容444444' }],
},
])
const targetList = ref([
{
@ -115,7 +131,9 @@ const editBook = (obj) => {
}
const del = (id) => {
// console.log(id);
courseList.booksList.value = booksList.value.filter((item) => item.id !== id)
courseList.value.booksList.value = booksList.value.filter(
(item) => item.id !== id,
)
}
// const disableChange = (id) => {
@ -139,20 +157,19 @@ const updateDisabledStatus = () => {
}
})
}
const list=ref([])
const content88=ref()
const list = ref([])
const content88 = ref()
const courseId = ref(0)
onMounted(async() => {
onMounted(async () => {
courseId.value = route.query.id
console.log(courseId.value);
console.log(courseId.value)
const res = await getCourseList({ id: courseId.value })
console.log(res);
list.value=res.data
console.log(list.value);
console.log(res)
list.value = res.data
console.log(list.value)
content88.value = list.value[0].contents[0].content
console.log(list.value[0].contents[0].content);
console.log(content88.value);
console.log(list.value[0].contents[0].content)
console.log(content88.value)
let chartDom = document.getElementById('main')
let myChart = echarts.init(chartDom)
@ -203,7 +220,9 @@ onMounted(async() => {
<div class="topContent">
<div class="title">| 课程总目标</div>
<div class="content1">
<textarea class="textarea" @change="textChange">{{ content88 }}</textarea>
<textarea class="textarea" @change="textChange">{{
content88
}}</textarea>
</div>
</div>
<div class="footContent">
@ -214,13 +233,17 @@ onMounted(async() => {
</div>
</div>
<div class="rightContent">
<div class="title" style="
<div
class="title"
style="
width: 100%;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 20px;
height: 60px;">
height: 60px;
"
>
<div class="left2">| 课程分目标</div>
<div class="right2">
<!-- <el-button type="primary" @click="addBook">新增</el-button> -->
@ -237,7 +260,9 @@ onMounted(async() => {
<!-- <el-button class="edit" type="text" @click="editBook(item)">
编辑
</el-button> -->
<el-button type="primary" @click="addBook(index)">新增</el-button>
<el-button type="primary" @click="addBook(index)">
新增
</el-button>
</div>
</div>
<div class="smallContent">
@ -247,14 +272,22 @@ onMounted(async() => {
<div class="partObject">
<div class="partObject1">
<!-- {{ item.introduce }} -->
课程目标{{ i+1 }}
课程目标{{ i + 1 }}
<!-- {{ filterTarger(obj.targetId) }} -->
</div>
<div class="partObject2">
<el-button class="edit" type="text" @click="editBook(obj)">
<el-button
class="edit"
type="text"
@click="editBook(obj)"
>
编辑
</el-button>
<el-button class="destroy" type="text" @click="del(obj.id)">
<el-button
class="destroy"
type="text"
@click="del(obj.id)"
>
删除
</el-button>
</div>
@ -272,7 +305,13 @@ onMounted(async() => {
</div>
</div>
</div>
<el-dialog v-if="dialogVisible" v-model="dialogVisible" title="新增目标" width="500" :before-close="handleClose">
<el-dialog
v-if="dialogVisible"
v-model="dialogVisible"
title="新增目标"
width="500"
:before-close="handleClose"
>
<el-form :model="formData" label-width="auto" style="max-width: 600px">
<!-- <el-form-item label="目标" prop="target">
<el-select v-model="formData.target" placeholder="Select" size="large" style="width: 240px">
@ -281,7 +320,10 @@ onMounted(async() => {
</el-select>
</el-form-item> -->
<el-form-item label="内容" prop="description">
<el-input v-model="formData.description" placeholder="请输入内容"></el-input>
<el-input
v-model="formData.description"
placeholder="请输入内容"
></el-input>
</el-form-item>
</el-form>
<template #footer>

@ -19,7 +19,7 @@ function _callSuper(t, o, e) {
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(
let t = !Boolean.prototype.valueOf.call(
Reflect.construct(Boolean, [], function () {}),
)
} catch (t) {}
@ -190,7 +190,7 @@ function _unsupportedIterableToArray(o, minLen) {
}
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length
for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]
for (let i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]
return arr2
}
function _nonIterableSpread() {

@ -1,9 +1,11 @@
<script lang="ts" setup>
import { ref } from 'vue'
// import axios from 'axios'
import { CourseResourceControllerService } from '../../../../generated/services/CourseResourceControllerService'
const props = defineProps(['dafulIndex'])
import { QuillEditor } from '@vueup/vue-quill'
import '@vueup/vue-quill/dist/vue-quill.snow.css'
import { ElMessage } from 'element-plus'
//
const visibleDramwer = ref(false)
//
@ -63,12 +65,17 @@ const selectOp = ref([
{ label: '文件', value: '5' },
{ label: '音频', value: '6' },
])
const handleSel = () => {}
//
import type { UploadProps, UploadUserFile } from 'element-plus'
const fileList = ref([])
function clearFileList() {
fileList.value.length = 0
}
const handleSel = () => {
fileList.value.length = 0
}
const fileList = ref<UploadUserFile[]>([])
//
import type { UploadProps } from 'element-plus'
const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
console.log(uploadFile, uploadFiles)
@ -77,6 +84,82 @@ const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
const handlePreview: UploadProps['onPreview'] = (file) => {
console.log(file)
}
const formRef = ref()
function isSubmit() {
formRef.value.validate((valid, fields) => {
if (valid) {
const params = {
name: formModel.value.name,
type: selectVal.value,
img: fileList.value[0]?.raw,
description: formModel.value.description,
}
console.log('根据参数:', params, '去调用接口???')
} else {
console.log('error submit!', fields)
}
})
}
// upd
const beforeAvatarUpload = (rawFile) => {
console.log('执行了')
switch (+selectVal.value) {
case 1:
if (rawFile.type !== 'application/vnd.ms-powerpoint') {
clearFileList()
ElMessage.error('必须是ppt文件!')
} else {
clearFileList()
fileList.value.push(rawFile)
}
break
case 2:
if (!rawFile.type.startsWith('image/')) {
clearFileList()
ElMessage.error('必须是??文件!')
} else {
clearFileList()
fileList.value.push(rawFile)
}
break
// case 3:
// if (false) {
// clearFileList()
// ElMessage.error('??')
// } else {
// clearFileList()
// fileList.value.push(rawFile)
// }
// break
// case 4:
// if (false) {
// clearFileList()
// ElMessage.error('??')
// } else {
// clearFileList()
// fileList.value.push(rawFile)
// }
// break
// case 5:
// if (false) {
// clearFileList()
// ElMessage.error('??')
// } else {
// clearFileList()
// fileList.value.push(rawFile)
// }
// break
// case 6:
// if (false) {
// clearFileList()
// ElMessage.error('??')
// } else {
// clearFileList()
// fileList.value.push(rawFile)
// }
// break
}
}
</script>
<template>
<el-drawer
@ -118,11 +201,13 @@ const handlePreview: UploadProps['onPreview'] = (file) => {
<el-form-item label="上传资源" prop="fileList">
<el-upload
v-model:file-list="fileList"
:limit="1"
class="upload-demo"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
:on-preview="handlePreview"
:on-remove="handleRemove"
list-type="picture"
:before-upload="beforeAvatarUpload"
>
<el-button type="primary">点击上传资源</el-button>
<template #tip>
@ -135,7 +220,7 @@ const handlePreview: UploadProps['onPreview'] = (file) => {
<el-form-item label="资源简介" prop="description">
<div class="editor">
<quill-editor
v-model:description="formModel.description"
v-model:content="formModel.description"
content-type="html"
theme="snow"
></quill-editor>
@ -143,7 +228,7 @@ const handlePreview: UploadProps['onPreview'] = (file) => {
</el-form-item>
<el-form-item>
<el-button type="primary">取消</el-button>
<el-button type="info">确定</el-button>
<el-button type="info" @click="isSubmit">确定</el-button>
</el-form-item>
</el-form>
</el-drawer>

@ -185,13 +185,13 @@ const onEditResource = (row) => {
<Edit />
</el-icon>
</div>
<div
class="vedio"
<img
class="img"
@click="generateRecords(resource)"
style="margin-top: 10px; margin-bottom: 10px"
>
<img :src="resource.img" />
</div>
:src="resource.img"
/>
<div class="box" style="display: flex; flex-direction: column">
<p style="margin-bottom: 10px">{{ resource.name }}</p>
<p style="margin-top: 10px">{{ resource.description }}</p>
@ -243,7 +243,6 @@ const onEditResource = (row) => {
}
.body {
background-color: #fff;
height: 100%;
}
.top {
margin-bottom: 20px;
@ -267,13 +266,12 @@ ul {
}
li {
transition: filter 0.3s; /* 添加过渡动画 */
flex: 0 0 20%;
width: calc(25% - 25px);
flex-direction: column;
align-items: center;
margin-bottom: 10px;
padding: 10px;
box-sizing: border-box;
transition: box-shadow 0.3s;
cursor: pointer;
}
@ -296,4 +294,9 @@ li:hover {
.box p:hover {
font-weight: bold;
}
.img {
display: block;
width: 250px;
height: 250px;
}
</style>

@ -2,38 +2,38 @@
import conheader from '@/views/home/components/ConHeader.vue'
const courses = [
{
name: 'Vue.js Basics',
name: '软件构造',
image: 'vuejs-basics.jpg',
hours: 20,
},
{
name: 'Reac',
name: '软件项目管理',
image: 'react-fundamentals.jpg',
hours: 25,
},
{
name: 'Reacts',
name: 'React',
image: 'react-fundamentals.jpg',
hours: 25,
},
{
name: 'React Fund',
name: '程序设计',
image: 'react-fundamentals.jpg',
hours: 25,
},
]
</script>
<template>
<div class="info_container" style="width: 214px; height: 326px">
<div class="info_container" style="width: 90%; height: 326px">
<conheader title="已开科目"></conheader>
<div class="info_content" style="width: 214px; height: 264px">
<div class="info_content" style="width: 100%; height: 264px">
<div class="course-list">
<div
v-for="(course, index) in courses"
:key="index"
class="course-item"
>
<img :src="course.image" alt="course image" class="course-image" />
<img :src="course.image" class="course-image" />
<div class="course-info">
<p class="course-name">{{ course.name }}</p>
<p class="course-hours">{{ course.hours }}</p>
@ -63,7 +63,7 @@ const courses = [
.course-list {
display: flex;
flex-direction: column;
width: 132px;
height: 48px;
}
.course-item {

@ -2,31 +2,31 @@
import conheader from '@/views/home/components/ConHeader.vue'
const courses = [
{
name: 'Vue.js Basics',
name: '软件构造',
image: 'vuejs-basics.jpg',
hours: 20,
},
{
name: 'Reac',
name: '项目管理',
image: 'react-fundamentals.jpg',
hours: 25,
},
{
name: 'Reacts',
name: 'React',
image: 'react-fundamentals.jpg',
hours: 25,
},
{
name: 'React Fund',
name: '程序设计',
image: 'react-fundamentals.jpg',
hours: 25,
},
]
</script>
<template>
<div class="info_container" style="width: 214px; height: 326px">
<div class="info_container" style="width: 90%; height: 326px">
<conheader title="我的科目"></conheader>
<div class="info_content" style="width: 214px; height: 264px">
<div class="info_content" style="width: 100%; height: 264px">
<div class="course-list">
<div
v-for="(course, index) in courses"
@ -63,7 +63,6 @@ const courses = [
.course-list {
display: flex;
flex-direction: column;
width: 132px;
height: 48px;
}
.course-item {

@ -46,19 +46,19 @@ function handleClick() {
justify-content: center;
align-items: center;
}
.overlay {
position: absolute;
top: 181px;
left: 1278px;
width: 40px;
height: 30px;
// background-color: lightgray;
border: 1px solid black;
z-index: 1000;
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
margin-bottom: 10px;
}
// .overlay {
// position: absolute;
// top: 181px;
// left: 1278px;
// width: 40px;
// height: 30px;
// // background-color: lightgray;
// border: 1px solid black;
// z-index: 1000;
// display: flex;
// justify-content: center;
// flex-direction: column;
// align-items: center;
// margin-bottom: 10px;
// }
</style>

@ -95,9 +95,9 @@ onMounted(() => {
<template>
<div ref="echarsDom" class="main"></div>
</template>
<style>
<style scoped>
.main {
width: 766px;
width: 100%;
height: 352px;
}
</style>

@ -3,9 +3,9 @@ import echarts from '@/views/home/components/Echart/Echarts.vue'
import conheader from '@/views/home/components/ConHeader.vue'
</script>
<template>
<div class="info_container" style="width: 1257px; height: 384px">
<div class="info_container" style="width: 95%; height: 384px">
<conheader title="主页访问数据(次)"></conheader>
<div class="info_content" style="width: 766px; height: 352px">
<div class="info_content" style="width: 75%; height: 100%">
<echarts></echarts>
</div>
</div>

@ -1,15 +1,16 @@
<script setup>
import conheader from '@/views/home/components/ConHeader.vue'
import { onMounted, ref, computed } from 'vue'
import { userIdenService, userIdenChangeService } from '@/api/user/user.js'
import { userIdenChangeService } from '@/api/user/user.js'
import { Edit } from '@element-plus/icons-vue'
import { ElMessage } from 'element-plus'
const props = defineProps({
data: {
type: Object,
},
})
const id = props.data.id
console.log(props.data, 'djegd ')
const formModel = ref()
const loading = ref()
//true
@ -27,7 +28,6 @@ const openEditDialog = (row) => {
}
//
const saveEdit = () => {
console.log(editRowIndex.value, 'rowww')
const index = editRowIndex.value
if (index !== -1) {
formModel.value[index] = { ...editForm.value }
@ -44,82 +44,64 @@ const cancelEdit = () => {
content: '',
}
}
const identInfo = ref()
//
// const getInfo = async (id) => {
// const res = await userIdenService(id)
// identInfo.value = res
// return res
// }
console.log()
onMounted(() => {
// getInfo(id)
// getInfo(id)
// .then((res) => {
// // 访 getData
// console.log(res.data, '000000')
// identInfo.value = res.data
// //
// if (res.data.roleId === 1) {
// formModel.value = [
// { par: 'name', name: '', content: res.data.name },
// { par: 'sex', name: '', content: res.data.sex },
// { par: 'nationality', name: '', content: res.data.nationality },
// { par: 'profession', name: '', content: res.data.profession },
// { par: 'education', name: '', content: res.data.education },
// { par: 'degree', name: '', content: res.data.degree },
// {
// par: 'professionalTitle',
// name: '',
// content: res.data.professionalTitle,
// },
// {
// par: 'emergencyContact',
// name: '',
// content: res.data.emergencyContact,
// },
// {
// par: 'joinWorkTime',
// name: '',
// content: res.data.joinWorkTime,
// },
// {
// par: 'politicalStatus',
// name: '',
// content: res.data.politicalStatus,
// },
// ]
// } else if (res.data.roleId === 2) {
// formModel.value = [
// { par: 'name', name: '', content: res.data.name },
// { par: 'sex', name: '', content: res.data.sex },
// { par: 'nationality', name: '', content: res.data.nationality },
// { par: 'number', name: '', content: res.data.number },
// { par: 'birthday', name: '', content: res.data.birthday },
// { par: 'phone', name: '', content: res.data.phone },
// { par: 'faculty', name: '', content: res.data.faculty },
// { par: 'major', name: '', content: res.data.major },
// { par: 'year_age', name: '', content: res.data.year_age },
// { par: 'class_name', name: '', content: res.data.class_name },
// ]
// }
// // else {
// // formModel.value = [
// // { name: '', content: res.data.name },
// // { name: '', content: res.data.id },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // { name: '', content: 9.9 },
// // ]
// // }
// })
// .catch((error) => {
// console.error(error)
// })
if (props.data.roleId === 1) {
formModel.value = [
{ par: 'name', name: '姓名', content: props.data.name },
{ par: 'sex', name: '性别', content: props.data.sex },
{ par: 'nationality', name: '民族', content: props.data.nationality },
{ par: 'profession', name: '专业', content: props.data.profession },
{ par: 'education', name: '学历', content: props.data.education },
{ par: 'degree', name: '学位', content: props.data.degree },
{
par: 'professionalTitle',
name: '职称',
content: props.data.professionalTitle,
},
{
par: 'emergencyContact',
name: '手机号',
content: props.data.emergencyContact,
},
{
par: 'joinWorkTime',
name: '参加工作时间',
content: props.data.joinWorkTime,
},
{
par: 'politicalStatus',
name: '政治面貌',
content: props.data.politicalStatus,
},
]
} else if (props.data.roleId === 2) {
formModel.value = [
{ par: 'name', name: '姓名', content: props.data.name },
{ par: 'sex', name: '性别', content: props.data.sex },
{ par: 'nationality', name: '民族', content: props.data.nationality },
{ par: 'number', name: '学号', content: props.data.number },
{ par: 'birthday', name: '生日', content: props.data.birthday },
{ par: 'phone', name: '手机号', content: props.data.phone },
{ par: 'faculty', name: '院系', content: props.data.faculty },
{ par: 'major', name: '专业', content: props.data.major },
{ par: 'yearAge', name: '入学年份', content: props.data.yearAge },
{ par: 'className', name: '班级', content: props.data.className },
]
}
// else {
// formModel.value = [
// { name: '', content: res.data.name },
// { name: '', content: res.data.id },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// { name: '', content: 9.9 },
// ]
// }
})
// 1
const drawer2 = ref(false)
@ -127,7 +109,7 @@ const direction = ref('rtl')
function cancelClick() {
drawer2.value = false
}
const data1 = ref()
const data1 = ref([])
const confirmClick = () => {
drawer2.value = false
data1.value = formModel.value
@ -135,16 +117,21 @@ const confirmClick = () => {
data1.value.map((item) => (values[item.par] = item.content))
const dataToSend = {
...values,
roleId: identInfo.value.roleId,
id: identInfo.value.id,
roleId: props.data.roleId,
id: props.data.id,
}
userIdenChangeService(dataToSend).then(() => {
ElMessage.success('修改成功')
})
console.log(dataToSend, 'datato111')
userIdenChangeService(dataToSend)
.then(() => {
ElMessage.success('修改成功')
})
.catch((error) => {
console.log(error)
})
}
</script>
<template>
<div class="info_container" style="width: 1265px; height: 306px">
<div class="info_container" style="width: 95%; height: 306px">
<conheader title="个人信息" v-model="drawer2">
<template #drawer>
<el-drawer v-model="drawer2" :direction="direction" class="table">
@ -203,7 +190,7 @@ const confirmClick = () => {
</conheader>
<div
class="info_content"
style="width: 776px; height: 244px"
style="width: 60%; height: 244px"
v-loading="loading"
>
<div class="item" :key="item.name" v-for="item in formModel">
@ -226,7 +213,7 @@ const confirmClick = () => {
gap: 10px; /* 设置元素之间的间隔 */
}
.item {
width: 176px;
width: 100%;
height: 60px;
display: flex;
flex-direction: column;

@ -9,7 +9,8 @@ const props = defineProps({
type: Object,
},
})
// console.log(props.data.icon, 44444)
// const data = ref(props.data, 'dsfd')
console.log(props.data, 44444)
const imageUrl = ref('')
//
const form = ref()
@ -37,7 +38,7 @@ const form = ref()
// code: [{ message: '', trigger: 'blur' }],
// }
form.value = props.data
const formLabelWidth = '140px'
const formLabelWidth = '70px'
//
imageUrl.value = props.data.icon
//
@ -61,15 +62,10 @@ const openFileInput = () => {
input.click()
document.body.removeChild(input)
}
const upload = async (option) => {
const res = await tool.oss.upload(option.file)
imageUrl.value = res.url
console.log(imageUrl.value)
}
//
const changeInfo = async () => {
const userInfo = {
username: form.value.username,
// username: form.value.username,
phone: form.value.phone,
id: form.value.id,
nickName: form.value.nickName,
@ -82,7 +78,7 @@ const changeInfo = async () => {
}
</script>
<template>
<div class="ident" style="width: 278px; height: 274px; background: #375fff">
<div class="ident" style="width: 100%; height: 274px; background: #375fff">
<div class="info_container" style="width: 201px; height: 178px">
<div class="avater">
<img :src="imageUrl" alt="Uploaded" v-if="imageUrl" class="avater" />
@ -104,11 +100,10 @@ const changeInfo = async () => {
title="登录信息"
style="width: 800px; text-align: center"
>
<el-form :model="form" style="" :data="form" :rules="rules">
<el-form :model="form" :data="form" :rules="rules">
<el-form-item label="用户名" :label-width="formLabelWidth">
<el-input v-model="form.username" autocomplete="off" />
</el-form-item>
<el-form-item label="昵称" :label-width="formLabelWidth">
<el-input v-model="form.nickName" autocomplete="off" />
</el-form-item>
@ -187,8 +182,6 @@ span {
text-align: center;
font-style: normal;
text-transform: none;
grid-area: element1;
position: relative;
margin-left: 27px;
top: 18px;
@ -198,7 +191,6 @@ span {
height: 24px;
border-radius: 100px 100px 100px 100px;
border: 2px solid #ffffff;
grid-area: element2;
background: #0052d9;
border-radius: 32px 32px 32px 32px;
display: flex;

@ -16,7 +16,7 @@ function confirmClick() {
}
</script>
<template>
<div class="info_container" style="width: 222px; height: 174px">
<div class="info_container" style="width: 90%; height: 174px">
<conheader title="学生分组" v-model="drawer2">
<div>编辑</div>
<template #drawer>

@ -16,7 +16,7 @@ function confirmClick() {
}
</script>
<template>
<div class="info_container" style="width: 222px; height: 174px">
<div class="info_container" style="width: 90%; height: 174px">
<conheader title="已分组别" v-model="drawer2">
<div>编辑</div>
<template #drawer>

@ -13,7 +13,7 @@ const props = defineProps({
</template>
<style scoped>
.nav_info {
width: 1265px;
width: 95%;
height: 32px;
display: flex;
justify-content: start;
@ -32,7 +32,7 @@ const props = defineProps({
margin-right: 68px;
}
.intro {
width: 257px;
width: 50%;
height: 22px;
font-family: Inter, Inter;
font-weight: bold;

@ -9,38 +9,33 @@ import Class2 from './components/Class2.vue'
import Student2 from './components/Student2.vue'
import useUserStore from '@/store/modules/user'
import { ref, onMounted } from 'vue'
import { toRaw } from 'vue'
const userStore = useUserStore()
// const info = userStore.getUserInfo()
// console.log(info)
const username = ref()
const data = ref(null)
const data = ref({})
const infoData = ref()
const flag = ref(false)
const role = ref(null)
const rightVisible = ref(false)
const getData = async () => {
await userStore
.getUserInfo()
.then((response) => {
const res = toRaw(response.result.data)
username.value = res.username
data.value = res
flag.value = true
role.value = data.value.roles[0]
if (role.value === '老师') {
rightVisible.value = true
} else {
rightVisible.value = false
}
console.log(data.value, 333333)
})
.catch((error) => {
console.log(error)
})
}
userStore.getUserInfo().catch((error) => {
console.log(error)
})
onMounted(() => {
getData()
// getData()
username.value = userStore.userName
data.value = userStore.data
infoData.value = userStore.userInfo
// console.log(data.value, '11111')
// console.log(userStore.userInfo, '22222')
// console.log(userStore, 'userStore')
username.value = data.value.username
flag.value = true
role.value = data.value.roles[0]
if (role.value === '老师') {
rightVisible.value = true
} else {
rightVisible.value = false
}
})
</script>
<template>
@ -49,28 +44,28 @@ onMounted(() => {
<div class="nav">
<welcome :username="username"></welcome>
</div>
<div class="info" style="width: 1321px; height: 368px">
<Info :data="data" v-if="flag"></Info>
<div class="info" style="width: 100%; height: 368px">
<Info :data="infoData" v-if="flag"></Info>
</div>
<div class="echarts" style="width: 1321px; height: 444px">
<div class="echarts" style="width: 100%; height: 444px">
<echarts></echarts>
</div>
</div>
<div v-if="rightVisible" class="right">
<status :data="data" v-if="flag"></status>
<div class="class" style="width: 278px; height: 388px">
<div class="class" style="width: 100%; height: 388px">
<Class1></Class1>
</div>
<div class="stu" style="width: 278px; height: 236px">
<div class="stu" style="width: 100%; height: 236px">
<Student1></Student1>
</div>
</div>
<div v-else class="right">
<status :data="data" v-if="flag"></status>
<div class="class" style="width: 278px; height: 388px">
<div class="class" style="width: 100%; height: 388px">
<Class2></Class2>
</div>
<div class="stu" style="width: 278px; height: 236px">
<div class="stu" style="width: 100%; height: 236px">
<Student2></Student2>
</div>
</div>
@ -79,15 +74,16 @@ onMounted(() => {
<style lang="scss" scoped>
.container {
display: flex;
width: 100%;
.left {
width: 1321px;
width: 80%;
height: 936px;
margin-right: 16px;
display: grid;
grid-template-rows: 1fr 1fr 1fr; /* 使用fr单位来平均分布 */
height: 300px; /* 设置容器高度 */
.nav {
width: 1321px;
width: 100%;
height: 92px;
background: #ffffff;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
@ -115,7 +111,7 @@ onMounted(() => {
}
}
.class {
width: 1321px;
width: 80%;
height: 444px;
background: #c57676;
box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.1);
@ -127,7 +123,7 @@ onMounted(() => {
}
}
.right {
width: 278px;
width: 20%;
height: 930px;
display: flex;
flex-direction: column; //

@ -300,7 +300,7 @@ import {
userRegisterService,
userPhoneRegisterService,
userCodeRegisterService,
} from '@/api/user/user.js'
} from '@/api/user/user'
// let loginForm = reactive({ username: 'admin', password: '111111' })
//
let userStore = useUserStore()
@ -371,7 +371,7 @@ const rules = {
code: [{ message: '验证码不能为空', trigger: 'blur' }],
}
//--
//
const countdown = ref(0)
let timer
const updateCountdown = () => {
@ -385,15 +385,15 @@ onBeforeUnmount(() => {
clearInterval(timer) //
})
//
// watch(isRegister, () => {
// formModel.value = {
// username: '',
// password: '',
// repassword: '',
// phone: '',
// code: '',
// }
// })
watch(isRegister, () => {
formModel.value = {
username: '',
password: '',
repassword: '',
phone: '',
code: '',
}
})
//
watch(isToggle, () => {
formModel.value = {
@ -414,6 +414,7 @@ const checkPasswordMatch = () => {
passwordMatchError.value = ''
}
}
//json
const handleSubmit = async () => {
//
@ -467,7 +468,7 @@ const phoneChange = () => {
console.log('开始手机号注册')
isinfo.value = false
}
//
//
const phoneReturn = () => {
isinfo.value = true
}

File diff suppressed because it is too large Load Diff

@ -1,33 +1,41 @@
<template>
<div id="3d-graph"></div>
<div id="3d-graph"></div>
</template>
<script lang="ts" setup>
// import { useRouter } from 'vue-router'
import { onMounted, ref,reactive } from 'vue'
import { onMounted, ref, reactive } from 'vue'
import ForceGraph3D from '3d-force-graph'
//@ts-ignore
import { CSS2DRenderer, CSS2DObject,} from 'three/examples/jsm/renderers/CSS2DRenderer.js'
import {
CSS2DRenderer,
CSS2DObject,
//@ts-expect-error
} from 'three/examples/jsm/renderers/CSS2DRenderer.js'
//@ts-ignore
import SpriteText from '../spritetext.js'
import SpriteText from '../spritetext.js'
// const $router = useRouter()
// const jsonData = ref(null)
let Graph = reactive({})
let Graph = reactive({})
const props = defineProps({
width:{
type:Number,
default:window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth,
width: {
type: Number,
default:
window.innerWidth ||
document.documentElement.clientWidth ||
document.body.clientWidth,
},
height: {
type: Number,
default:
window.innerHeight ||
document.documentElement.clientHeight ||
document.body.clientHeight,
},
height:{
type:Number,
default:window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight,
}
})
const dom = ref(null)
onMounted(() => {
Graph = ForceGraph3D({
Graph = ForceGraph3D({
extraRenderers: [new CSS2DRenderer()],
})(document.getElementById('3d-graph') as HTMLElement)
.jsonUrl('../../../public/data.json')
@ -40,7 +48,7 @@ onMounted(() => {
// console.log(node, 111, Graph.graphData().nodes)
return new CSS2DObject(nodeEl)
})
.linkLabel((link:any) => link.label) //
.linkLabel((link: any) => link.label) //
.linkWidth(0.8)
.linkHoverPrecision(0.5) //
.linkColor(() => '#dd92fd') // 线
@ -101,7 +109,6 @@ onMounted(() => {
} else {
return '#dd92fd'
}
})
} else {
// Graph.linkColor(() => '#a4c7fe') // 线
@ -112,40 +119,40 @@ onMounted(() => {
//@ts-ignore
Graph.graphData(graphData)
})
dom.value = document.querySelector('canvas') as any
dom.value = document.querySelector('canvas') as any
})
const setLabel = () => {
//@ts-ignore
Graph.linkThreeObject((link:any) => {
// extend link with text sprite
const sprite = new SpriteText(`${link.label}`);
sprite.color = '#ccc';
sprite.textHeight = 1.5;
return sprite;
})
Graph.linkThreeObject((link: any) => {
// extend link with text sprite
const sprite = new SpriteText(`${link.label}`)
sprite.color = '#ccc'
sprite.textHeight = 1.5
return sprite
})
//@ts-ignore
Graph.linkPositionUpdate((sprite, { start, end }) => {
//@ts-ignore
const middlePos = Object.assign(
//@ts-expect-error
...['x', 'y', 'z'].map((c) => ({
//@ts-ignore
Graph.linkPositionUpdate((sprite, { start, end }) => {
//@ts-ignore
const middlePos = Object.assign(...['x', 'y', 'z'].map(c => ({
//@ts-ignore
[c]: start[c] + (end[c] - start[c]) / 2 // calc middle point
})));
[c]: start[c] + (end[c] - start[c]) / 2, // calc middle point
})),
)
// Position sprite
Object.assign(sprite.position, middlePos);
});
//@ts-ignore
Graph.d3Force('charge').strength(-120);
// Position sprite
Object.assign(sprite.position, middlePos)
})
//@ts-ignore
Graph.d3Force('charge').strength(-120)
}
// const goToEditAtlas = () => {
// console.log(jsonData.value)
// $router.push({ name: 'EditAtlas', params: { id: 123 } })
// }
</script>
<style lang='scss' scoped>
</style>
<style lang="scss" scoped></style>

@ -64,7 +64,9 @@
</div>
<div class="sidebar">
<div class="icon"><img src="/src/assets/images/rjgz.jpg" width="100%" height="100%"></div>
<div class="icon">
<img src="/src/assets/images/rjgz.jpg" width="100%" height="100%" />
</div>
<!-- <div class="content">
<h3>课程目标</h3>
<div class="btn">了解更多</div>
@ -387,7 +389,7 @@ body {
margin-left: 20px;
// background-color: rgb(84, 50, 9)
}
.sidebar .icon{
.sidebar .icon {
width: 100%;
height: 20%;
}

@ -71,16 +71,20 @@
<!-- </div> -->
<div class="box" style="width: 100%;
height: 20%;
/* background-color: #3374ff; */
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-around;
/* background-color: #74a5ff; */
">
<div
class="box"
style="
width: 100%;
height: 20%;
/* background-color: #3374ff; */
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-around;
/* background-color: #74a5ff; */
"
>
<!-- <p style="font-size: 14px;color: #6B6B6B;">总学时 {{ item.totalHours }}小时</p>
<p style="font-size: 14px;color: #6B6B6B;">总学分 {{item.credit}}</p>
<p style="font-size: 14px;color: #6B6B6B;">章节数 xxx章</p>
@ -97,7 +101,10 @@
<div class="a" style="margin-left: 0px; color: #6b6b6b">
章节数 {{ item.totalchapter }}
</div>
<div class="a" style="margin-left: 29%;color: #6b6b6b;padding-left: 4%;" >
<div
class="a"
style="margin-left: 29%; color: #6b6b6b; padding-left: 4%"
>
知识点总数 {{ item.totalKnow }}
</div>
@ -115,17 +122,21 @@
</div>
<!-- </div> -->
<div class="box" style="width: 100%;
height: 20%;
/* background-color: #3374ff; */
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-around;
/* background-color: #74a5ff; */
">
<div
<div
class="box"
style="
width: 100%;
height: 20%;
/* background-color: #3374ff; */
display: flex;
flex-wrap: wrap;
flex-direction: row;
justify-content: space-around;
/* background-color: #74a5ff; */
"
>
<div
class="a"
style="margin-left: 0px; width: 62%; color: aliceblue"
>
@ -137,7 +148,10 @@
<div class="a" style="margin-left: 0px; color: aliceblue">
章节数 {{ item.totalchapter }}
</div>
<div class="a" style="margin-left: 29%;color: aliceblue;padding-left: 4%;" >
<div
class="a"
style="margin-left: 29%; color: aliceblue; padding-left: 4%"
>
知识点总数 {{ item.totalKnow }}
</div>
<!-- <p style="font-size: 14px;">总学时 {{ item.totalHours }}小时</p>
@ -166,13 +180,11 @@
</div>
</div>
<div class="con"></div>
<!-- 连接后端时可以去掉注释 -->
<!-- 连接后端时可以去掉注释 -->
<div class="but" v-if="!noMoreData" @click="loadItems">
{{ buttonFlag ? '正在加载...' : '加载更多' }}
</div>
<p v-else class="cont">数据全部加载完成</p>
</div>
<!-- 底部 -->
@ -194,10 +206,10 @@
<script lang="ts" setup>
//
import axios from 'axios'
import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue'
// import axios from 'axios'
import { ref } from 'vue'
import { getPageCourses } from '@/api/user/crouse.js'
import { autoResetRef } from '@vueuse/core'
// import { autoResetRef } from '@vueuse/core'
// export default{
const containerRef = ref(null)
// const items = ref([{
@ -211,12 +223,12 @@ const date = ref({
// const loading = ref(false)
const page = ref(date.value.page)
const main = ref<any>(null)
const buttonColor = ref('red')
// const buttonColor = ref('red')
const userList = ref<any>([])
// let count = 0
const showLoadMoreButton = ref(false)
// const showLoadMoreButton = ref(false)
const noMoreData = ref(false)
const isLoading = ref(false)
// const isLoading = ref(false)
const buttonFlag = ref(false)
const loadItems = async () => {
// isLoading.value = true
@ -231,19 +243,16 @@ const loadItems = async () => {
console.log(userList.value, response.data.content)
}
const loadMore = () => {
date.value.page = page.value++
if (date.value.page <= 2) {
loadItems()
}
}
const handleScroll = () => {
const container: any = containerRef.value
console.log(
container.scrollTop,
container.clientHeight,
@ -256,23 +265,16 @@ const handleScroll = () => {
) {
console.log('到底了')
if (buttonFlag.value) {
return alert('正在加载请勿重复滑动')
} else {
loadMore()
}
}
}
loadMore()
</script>
<style lang="scss" scoped>
.container-box {
height: 700px;
@ -478,16 +480,16 @@ img {
height: 30%;
// background-color: #3374ff;
display: flex;
flex-direction: row;
flex-wrap: wrap;
// background-color: #74a5ff;
justify-content: space-around;
flex-direction: row;
flex-wrap: wrap;
// background-color: #74a5ff;
justify-content: space-around;
}
.content .txt .box .a {
width: 39%;
height: 30%;
text-align: center;
font-size:clamp(0.7rem, 0.489rem + 0.4vw, 2rem);
font-size: clamp(0.7rem, 0.489rem + 0.4vw, 2rem);
// float: left;
// margin-top: 10px;
// margin-left: 40px;

@ -39,8 +39,20 @@
<div class="sidebar">
<div class="sidebar-header">
<div class="sidebar-header-imag">
<div class="sidebar-header-imag1"><img src="/src/assets/images/gd (3).png" width="100%" height="100%"></div>
<div class="sidebar-header-imag2"><img src="/src/assets/images/sjx(1).png" width="100%" height="100%"></div>
<div class="sidebar-header-imag1">
<img
src="/src/assets/images/gd (3).png"
width="100%"
height="100%"
/>
</div>
<div class="sidebar-header-imag2">
<img
src="/src/assets/images/sjx(1).png"
width="100%"
height="100%"
/>
</div>
</div>
<h1>知识点</h1>
<p>共发布225个</p>
@ -51,11 +63,17 @@
<div class="content">
<div class="txt">
<div class="txt1">联试题数233 &nbsp;&nbsp;&nbsp;关联学习数22</div>
<div class="imag"><img src="/src/assets/images/sjx(1).png" width="100%" height="100%"></div>
<div class="imag">
<img
src="/src/assets/images/sjx(1).png"
width="100%"
height="100%"
/>
</div>
</div>
</div>
<div class="lina">
<e-charts style="height: 260px;" id="lina" />
<e-charts style="height: 260px" id="lina" />
</div>
<!-- <div id="staff_all_orderCount" style="width: 300px;height:300px;"></div> -->
<!-- <e-chars class="lina" option="option"/> -->
@ -64,16 +82,20 @@
<div class="completion">
<!-- <div class="echates-title">知识点掌握百分比</div> -->
<div class="box">
<div id="liquidfill" style="width: 65%; height: 65%; "></div>
<div id="liquidfill" style="width: 65%; height: 65%"></div>
<div class="percentage">
<h4>平均完成率:<p>80%</p>
<h4>
平均完成率:
<p>80%</p>
</h4>
</div>
</div>
<div class="box">
<div id="liquidfil" style="width: 65%; height: 65%; "></div>
<div id="liquidfil" style="width: 65%; height: 65%"></div>
<div class="percentage">
<h4>平均完成率:<p>60%</p>
<h4>
平均完成率:
<p>60%</p>
</h4>
</div>
</div>
@ -112,11 +134,11 @@
<h1>49</h1>
<p>80% ~ 100%</p>
</div>
<div class="libox" style="border-left: 2px solid #74a5ff;">
<div class="libox" style="border-left: 2px solid #74a5ff">
<h1>3</h1>
<p>60% ~ 79%</p>
</div>
<div class="libox" style="border-left: 2px solid #74a5ff;">
<div class="libox" style="border-left: 2px solid #74a5ff">
<h1>4</h1>
<p>59%以下</p>
</div>
@ -130,20 +152,22 @@
</div>
<div class="lin"></div>
</div>
</div>
</div>
<!-- 底部 -->
<div class="footer">
<h3>软件工程专业</h3>
<h1>教学一体化平台</h1>
<p>关于我们&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; &nbsp;联系我们&nbsp; &nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; 服务协议
<p>
关于我们&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp; &nbsp;联系我们&nbsp;
&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp; 服务协议
</p>
<p style="font-size: 13px; margin-top: 70px">
黄淮学院版权所有@2023 湘豫CP备 19005950-1
<br />
违法和不良信息举报 举报电话0xxx-8xxxxxxx 举报邮箱xxxxxxxxx@qq.com
</p>
<p style="font-size: 13px;margin-top: 70px">黄淮学院版权所有@2023 湘豫CP备 19005950-1<br>
违法和不良信息举报 举报电话0xxx-8xxxxxxx 举报邮箱xxxxxxxxx@qq.com</p>
</div>
<div></div>
</template>
@ -151,34 +175,34 @@
<script lang="ts" setup>
// import axios from 'axios';
import { ref, onMounted, markRaw } from 'vue'
import * as echarts from 'echarts';
import * as echarts from 'echarts'
import 'echarts-liquidfill'
// var ROOT_PATH = 'https://echarts.apache.org/examples';
// type EChartsOption = echarts.EChartsOption;
var option = null
let option = null
// dom dom
onMounted(() => {
const dom = document.getElementById('main')
// dom echarts
var myChart = echarts.init(dom);
let myChart = echarts.init(dom)
console.log(dom, 'dom')
// loading
myChart.showLoading();
myChart.showLoading()
// json
fetch('../../../public/nodeList.json').then((res) => {
res.json().then(graph => {
console.log(graph);
myChart.hideLoading();
res.json().then((graph) => {
console.log(graph)
myChart.hideLoading()
// node links
option = {
tooltip: {},
legend: [
{
data: graph.categories.map(function (a: { name: string }) {
return a.name;
})
}
return a.name
}),
},
],
series: [
@ -193,44 +217,35 @@ onMounted(() => {
label: {
show: true,
position: 'right',
formatter: '{b}'
formatter: '{b}',
},
labelLayout: {
hideOverlap: true
hideOverlap: true,
},
scaleLimit: {
min: 0.4,
max: 2
max: 2,
},
lineStyle: {
color: 'source',
curveness: 0.3
}
}
]
};
curveness: 0.3,
},
},
],
}
// echarts
myChart.setOption(option);
myChart.setOption(option)
})
})
// option && myChart.setOption(option);
})
onMounted(() => {
const chartInstance: any = ref(null)
const updateChart = () => {
chartInstance.value = markRaw(
echarts.init(document?.getElementById(`liquidfill`,)),
echarts.init(document?.getElementById(`liquidfill`)),
)
const option = {
series: [
@ -289,40 +304,38 @@ onMounted(() => {
onMounted(() => {
const dom = document.getElementById('lina')
// dom echarts
var myChart = echarts.init(dom);
let myChart = echarts.init(dom)
console.log(dom, 'dom')
// loading
myChart.showLoading();
myChart.showLoading()
// json
fetch('../../../public/nodeList.json').then((res) => {
res.json().then(graph => {
console.log(graph);
myChart.hideLoading();
res.json().then((graph) => {
console.log(graph)
myChart.hideLoading()
// node links
option = {
xAxis: {
type: 'category',
boundaryGap: false,
data: ['记忆', '理解', '应用', '分析', '评价'],
data: ['记忆', '理解', '应用', '分析', '评价'],
axisLine: {
lineStyle: {
color: '#5470C6' // X
}
}
lineStyle: {
color: '#5470C6', // X
},
},
},
yAxis: {
type: 'value',
axisLine: {
lineStyle: {
color: '#5470C6' // Y
}
},
color: '#5470C6', // Y
},
},
// min:'700',
splitLine: {
show: false
}
show: false,
},
},
series: [
{
@ -330,28 +343,26 @@ onMounted(() => {
type: 'line',
areaStyle: {
color: '#76A6FF',
opacity: 0.5
opacity: 0.5,
},
}
]
};
},
],
}
// echarts
myChart.setOption(option);
myChart.setOption(option)
})
})
// option && myChart.setOption(option);
})
//
onMounted(() => {
const chartInstance: any = ref(null)
const updateChart = () => {
chartInstance.value = markRaw(
echarts.init(document?.getElementById(`liquidfil`,)),
echarts.init(document?.getElementById(`liquidfil`)),
)
const option = {
series: [
@ -428,7 +439,6 @@ onMounted(() => {
* {
margin: 0;
padding: 0;
}
ul {
@ -461,8 +471,6 @@ img {
background-image: url('/src/assets/images/top.png');
background-size: 100% 100%;
// background:linear-gradient(#74a5ff,#91b7ff,#A4c3ff);
}
//
@ -477,8 +485,7 @@ img {
width: 24%;
height: 10%;
margin-right: 20px;
// background-color: #6759ff;
// background-color: #6759ff;
}
.header .nav1 ul li {
@ -488,7 +495,7 @@ img {
color: white;
font-size: 12px;
text-align: center;
// border-right: 1px solid #FFFFFF;
// border-right: 1px solid #FFFFFF;
}
.header .nav2 {
@ -499,7 +506,7 @@ img {
height: 25%;
margin-top: 30px;
// margin-right: -260px;
// background-color: #6759ff;
// background-color: #6759ff;
}
.header .nav2 ul li {
@ -527,17 +534,17 @@ img {
font-size: 50px;
margin-top: 23px;
font-weight: bolder;
color: #FFFFFF;
color: #ffffff;
float: right;
margin-right: 173px // float: left;
// margin-left: 779px;
margin-right: 173px; // float: left;
// margin-left: 779px;
}
.header p {
font-size: 15px;
margin-top: 102px;
// font-weight:bolder;
color: #FFFFFF;
color: #ffffff;
float: right;
margin-right: -175px;
}
@ -558,13 +565,13 @@ img {
}
.subnav h1 {
border-bottom: 4px solid #0052FF;
border-bottom: 4px solid #0052ff;
font-size: 20px;
width: 10%;
height: 35px;
margin: auto;
font-weight: bolder;
color: #0052FF;
color: #0052ff;
text-align: center;
}
@ -578,7 +585,6 @@ img {
flex-direction: row;
flex-wrap: nowrap;
justify-content: space-around;
}
.chart {
@ -605,8 +611,8 @@ img {
.sidebar .sidebar-header {
width: 100%;
height: 7%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
// transform: perspective(3em) rotateY(-6deg);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header-imag {
@ -641,7 +647,7 @@ img {
font-size: 16px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header p {
@ -653,7 +659,7 @@ img {
font-size: 13px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header a {
@ -665,7 +671,7 @@ img {
font-size: 13px;
line-height: 30px;
// background-color: #728cc4;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .sidebar-header-line {
@ -676,17 +682,16 @@ img {
float: left;
margin-top: 1.5%;
// box-shadow: 1.5px -2px #F0F4FA;
box-shadow: 0px -2px 3px 2px #F0F4FA;
box-shadow: 0px -2px 3px 2px #f0f4fa;
// box-shadow: 1.5px 1px #F0F4FA;
// transform: perspective(3em) rotateY(-6deg);
// transform: perspective(3em) rotateY(-6deg);
}
.sidebar .content {
width: 100%;
height: 6%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
margin-top: 10px;
}
.sidebar .content .txt {
@ -697,7 +702,6 @@ img {
justify-content: space-between;
flex-wrap: nowrap;
display: flex;
}
.sidebar .content .txt .imag {
@ -710,9 +714,8 @@ img {
height: 5%;
font-size: 14px;
margin-left: 4px;
color: #FFFFFF;
color: #ffffff;
margin-top: 15px;
}
.sidebar .lina {
@ -772,7 +775,7 @@ img {
display: flex;
flex-wrap: nowrap;
justify-content: space-evenly;
color: #F0F4FA;
color: #f0f4fa;
font-weight: bold;
// background-color: #5582dc;
}
@ -782,17 +785,20 @@ img {
height: 90%;
font-size: 15px;
line-height: 20px;
color: #5470C6;
color: #5470c6;
// background-color: #b3c8f2;
}
//
.header1 {
position: relative;
text-align: center;
border-radius: 100%;
background: linear-gradient(60deg, rgba(84, 58, 183, 1) 0%, rgba(0, 172, 193, 1) 100%);
background: linear-gradient(
60deg,
rgba(84, 58, 183, 1) 0%,
rgba(0, 172, 193, 1) 100%
);
// color: rgb(207, 59, 59);
}
@ -829,12 +835,12 @@ img {
// background-color: white;
// }
.parallax>use {
.parallax > use {
/* 使use元素执行move-forever动画 */
animation: move-forever 25s cubic-bezier(.55, .5, .45, .5) infinite;
animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite;
}
.parallax>use:nth-child(1) {
.parallax > use:nth-child(1) {
/* 延迟2秒启动动画 */
/* 设置动画持续时间为7秒 */
@ -845,7 +851,7 @@ img {
// animation-delay: -2s;
}
.parallax>use:nth-child(2) {
.parallax > use:nth-child(2) {
// background-color: #0052FF;
animation-delay: -3s;
animation-duration: 10s;
@ -888,7 +894,6 @@ img {
// }
}
//
.knowledge {
width: 100%;
@ -896,7 +901,7 @@ img {
display: flex;
flex-direction: row;
justify-content: center;
background-color: #A1C1FF;
background-color: #a1c1ff;
// background-color: #A4c3ff;
padding-top: 20px;
}
@ -912,7 +917,7 @@ img {
.knowledge .libox h1 {
width: 100%;
height: 50%;
color: #F0F4FA;
color: #f0f4fa;
line-height: 50px;
text-align: center;
margin: auto;
@ -924,7 +929,7 @@ img {
.knowledge .libox p {
width: 100%;
height: 50%;
color: #F0F4FA;
color: #f0f4fa;
line-height: 50px;
text-align: center;
margin: auto;
@ -937,7 +942,7 @@ img {
.box1 {
width: 100%;
height: 147px;
background-color: #A1C1FF;
background-color: #a1c1ff;
// height: 100%;
}
@ -947,11 +952,9 @@ img {
margin: auto;
border-radius: 15px 15px 15px 15px;
background-color: #74a5ff;
// background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
}
.method li {
width: 90%;
height: 20%;
@ -960,18 +963,18 @@ img {
line-height: 35px;
margin-left: 10px;
padding-top: 10px;
color: #F0F4FA;
color: #f0f4fa;
// background-color: #74a5ff;
}
.box1 .lin{
width: 60%;
.box1 .lin {
width: 60%;
height: 3%;
border-radius: 2px 2px 2px 2px;
background-color: #74a5ff;
margin: auto;
margin-top: 5.5%;
// box-shadow: 1.5px -2px #F0F4FA;
box-shadow: 0px -2px 3px 2px #F0F4FA;
box-shadow: 0px -2px 3px 2px #f0f4fa;
}
//
@ -990,17 +993,17 @@ width: 60%;
text-align: center;
font-size: 15px;
padding-top: 40px;
color: #7F9EED;
color: #7f9eed;
font-weight: bolder;
}
.footer h1 {
width: 100%;
// position: absolute;
font-family: "kaiti_gb2312";
font-family: 'kaiti_gb2312';
margin-top: 10px;
font-size: 25px;
color: #7F9EED;
color: #7f9eed;
font-weight: bolder;
}
@ -1008,10 +1011,10 @@ width: 60%;
width: 100%;
height: 20px;
// position: absolute;
font-family: "kaiti_gb2312";
font-family: 'kaiti_gb2312';
margin-top: 25px;
font-size: 17px;
color: #7F9EED;
color: #7f9eed;
}
.echates-title {
@ -1023,6 +1026,6 @@ width: 60%;
.bo {
width: 100%;
background: linear-gradient(#74a5ff, #91b7ff, #A4c3ff);
background: linear-gradient(#74a5ff, #91b7ff, #a4c3ff);
}
</style>

@ -1,5 +1,6 @@
{
"compilerOptions": {
"allowJs": true,
"target": "ES2020",
"useDefineForClassFields": true,
"module": "ESNext",

Loading…
Cancel
Save