@cqsjjb/course-res-design 0.1.0-beta.1 → 0.1.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CourseInfo.js CHANGED
@@ -2,11 +2,74 @@ import React from 'react';
2
2
  import { Descriptions } from 'antd';
3
3
  import './CourseInfo.less';
4
4
  import { getLabelName } from './utils/tools';
5
- import { getCourseInfo } from './api/courseLibrary';
5
+ import { getCourseInfo, typePageAction } from './api/courseLibrary';
6
+
7
+ /** 资源渠道 */
8
+ export const COURSE_CHANNEL_ENUM = {
9
+ '01': '自有',
10
+ '02': '购买',
11
+ '03': '其他'
12
+ };
13
+ /** 资源形式 */
14
+ export const COURSE_MODE_ENUM = {
15
+ '01': '高清大屏',
16
+ '02': '慕课',
17
+ '03': '动画',
18
+ '04': 'PPT',
19
+ '05': '音频',
20
+ '06': '录屏',
21
+ '07': '情景剧',
22
+ '08': '实操',
23
+ '15': '微课',
24
+ '16': '微视频'
25
+ };
26
+ /** 内置字段 labelTypeCode -> { label, valueKey, enumMap } */
27
+ const INNER_FIELD_MAP = {
28
+ INDUSTRY: {
29
+ label: '行业',
30
+ valueKey: 'categorizeName'
31
+ },
32
+ JOB_TYPE: {
33
+ label: '工种',
34
+ valueKey: 'jobTypeName'
35
+ },
36
+ YEAR: {
37
+ label: '年份',
38
+ valueKey: 'yearValue'
39
+ },
40
+ REGION: {
41
+ label: '区域',
42
+ valueKey: 'regionName'
43
+ },
44
+ CHANNEL: {
45
+ label: '渠道',
46
+ valueKey: 'courseChannelEnum',
47
+ enumMap: COURSE_CHANNEL_ENUM
48
+ },
49
+ PRODUCER: {
50
+ label: '制作方',
51
+ valueKey: 'lecturerName'
52
+ },
53
+ RESOURCE_TYPE: {
54
+ label: '资源类型',
55
+ valueKey: 'courseModeEnum',
56
+ enumMap: COURSE_MODE_ENUM
57
+ },
58
+ RESOURCE_FORM: {
59
+ label: '资源形式',
60
+ valueKey: 'courseModeEnum',
61
+ enumMap: COURSE_MODE_ENUM
62
+ },
63
+ STAR: {
64
+ label: '星级',
65
+ valueKey: 'star'
66
+ }
67
+ };
6
68
  export default class CourseInfo extends React.Component {
7
69
  state = {
8
70
  loading: false,
9
- courseInfo: {}
71
+ courseInfo: {},
72
+ industryFields: []
10
73
  };
11
74
  componentDidMount() {
12
75
  // 如果提供了 courseId,则内部获取数据
@@ -41,11 +104,19 @@ export default class CourseInfo extends React.Component {
41
104
  loading: true
42
105
  });
43
106
  try {
44
- const infoRes = await getCourseInfo({
45
- id: courseId,
107
+ const labelRes = await typePageAction({
46
108
  apiBaseName: apiBaseName
47
109
  });
48
-
110
+ const data = labelRes.data;
111
+ const arr = Array.isArray(data) ? data : [];
112
+ const industryFields = arr.filter(item => item?.classificationType === 'INNER' && item?.useEnum === 'TRUE' && item?.requiredEnum === 'TRUE');
113
+ this.setState({
114
+ industryFields
115
+ });
116
+ const infoRes = await (this.props.getCourseInfoAction ? this.props.getCourseInfoAction() : getCourseInfo({
117
+ id: courseId,
118
+ apiBaseName: apiBaseName
119
+ }));
49
120
  // 处理响应数据(兼容不同的响应格式)
50
121
  const courseInfo = infoRes?.data || infoRes || {};
51
122
  this.setState({
@@ -59,10 +130,22 @@ export default class CourseInfo extends React.Component {
59
130
  });
60
131
  }
61
132
  }
133
+ getInnerFieldDisplay = item => {
134
+ const config = INNER_FIELD_MAP[item.labelTypeCode];
135
+ const label = config?.label ?? item.labelTypeName ?? '-';
136
+ const raw = config?.valueKey ? this.state.courseInfo[config.valueKey] : this.state.courseInfo[item.labelTypeCode];
137
+ const value = config?.enumMap && raw != null ? config.enumMap[raw] : raw;
138
+ return {
139
+ label,
140
+ value: value ?? '-'
141
+ };
142
+ };
62
143
  render() {
63
144
  const {
64
145
  loading,
65
- courseInfo: stateCourseInfo
146
+ courseInfo: stateCourseInfo,
147
+ industryFields,
148
+ customFields
66
149
  } = this.state;
67
150
  // 如果提供了 courseId,优先使用内部 state 的数据,否则使用 props
68
151
  const hasCourseId = !!this.props.courseId;
@@ -78,10 +161,6 @@ export default class CourseInfo extends React.Component {
78
161
  }, /*#__PURE__*/React.createElement(Descriptions.Item, {
79
162
  label: "\u8BFE\u7A0B\u540D\u79F0"
80
163
  }, courseInfo?.courseName || '--'), /*#__PURE__*/React.createElement(Descriptions.Item, {
81
- label: "\u7C7B\u76EE"
82
- }, courseInfo?.categorizeName ? courseInfo.categorizeName : courseInfo?.courseTypeLabel ? getLabelName(courseInfo?.courseTypeLabel) : '--'), courseInfo?.year && /*#__PURE__*/React.createElement(Descriptions.Item, {
83
- label: "\u5E74\u4EFD"
84
- }, courseInfo.year), /*#__PURE__*/React.createElement(Descriptions.Item, {
85
164
  label: "\u8BFE\u7A0B\u4ECB\u7ECD"
86
165
  }, courseInfo?.courseDescription ? /*#__PURE__*/React.createElement("div", {
87
166
  dangerouslySetInnerHTML: {
@@ -94,11 +173,21 @@ export default class CourseInfo extends React.Component {
94
173
  alt: "\u8BFE\u7A0B\u5C01\u9762",
95
174
  width: 84,
96
175
  height: 50
97
- }) : '--'), courseInfo?.star && /*#__PURE__*/React.createElement(Descriptions.Item, {
98
- label: "\u661F\u7EA7"
99
- }, courseInfo.star), courseInfo?.jobTypeName && /*#__PURE__*/React.createElement(Descriptions.Item, {
100
- label: "\u5DE5\u79CD"
101
- }, courseInfo.jobTypeName), /*#__PURE__*/React.createElement(Descriptions.Item, {
176
+ }) : '--'), industryFields.map((item, idx) => {
177
+ const {
178
+ label,
179
+ value
180
+ } = this.getInnerFieldDisplay(item);
181
+ return /*#__PURE__*/React.createElement(Descriptions.Item, {
182
+ key: item.id ?? idx,
183
+ label: label
184
+ }, value);
185
+ }), JSON.parse(stateCourseInfo.dynamicTags || '[]')?.map((item, idx) => {
186
+ return /*#__PURE__*/React.createElement(Descriptions.Item, {
187
+ key: item.id ?? idx,
188
+ label: item.fieldkey
189
+ }, item.fieldValue);
190
+ }), /*#__PURE__*/React.createElement(Descriptions.Item, {
102
191
  label: "\u8BFE\u7A0B\u6807\u7B7E"
103
192
  }, getLabelName(courseInfo?.courseLabel) || '--')));
104
193
  }
package/Preview.js CHANGED
@@ -66,10 +66,10 @@ export default class FormPreview extends React.Component {
66
66
  });
67
67
  try {
68
68
  // 并行请求两个接口
69
- const [menuRes, infoRes] = await Promise.all([getCourseMenu({
69
+ const [menuRes, infoRes] = await Promise.all([this.props.getCourseMenuInfoAction ? this.props.getCourseMenuInfoAction() : getCourseMenu({
70
70
  apiBaseName: this.props.apiBaseName,
71
71
  id: courseId
72
- }), getCourseInfo({
72
+ }), this.props.getCourseInfoAction ? this.props.getCourseInfoAction() : getCourseInfo({
73
73
  apiBaseName: this.props.apiBaseName,
74
74
  id: courseId
75
75
  })]);
@@ -364,7 +364,8 @@ export default class FormPreview extends React.Component {
364
364
  borderRadius: '10px'
365
365
  },
366
366
  courseInfo: courseInfo,
367
- apiBaseName: this.props.apiBaseName
367
+ apiBaseName: this.props.apiBaseName,
368
+ extraApiParams: this.props.extraApiParams
368
369
  })), /*#__PURE__*/React.createElement("div", {
369
370
  className: "course-preview__item-video-info"
370
371
  }, /*#__PURE__*/React.createElement("a", null, "\u89C6\u9891\u65F6\u957F\uFF1A", secondToFormat(Number(item.resourceTotalIden))), courseInfo?.hourRuleId ? /*#__PURE__*/React.createElement("a", null, "\u53C2\u8003\u5B66\u65F6\uFF1A", item.resourceHour || '--', "\u5B66\u65F6") : '', /*#__PURE__*/React.createElement("a", null, "\u8BD5\u770B\u5206\u949F\uFF1A", item.auditionTime || '--'), JSON.parse(item.testExamJson || '[]')?.length > 0 && /*#__PURE__*/React.createElement("a", {
package/PreviewVideo.js CHANGED
@@ -21,7 +21,8 @@ const PreviewVideo = ({
21
21
  disabled,
22
22
  onChange,
23
23
  style,
24
- apiBaseName = 'res'
24
+ apiBaseName = 'res',
25
+ extraApiParams
25
26
  }) => {
26
27
  const [openPreviewVideo, setOpenPreviewVideo] = useState(false);
27
28
  const [jjbWebResSelectorShow, setJjbWebResSelectorShow] = useState(false);
@@ -52,7 +53,8 @@ const PreviewVideo = ({
52
53
  data: url
53
54
  } = await globalApi.getResUrlAction({
54
55
  fileId: fileArr[0].id,
55
- apiBaseName: apiBaseName
56
+ apiBaseName: apiBaseName,
57
+ extraApiParams
56
58
  });
57
59
  obj.resourceUrl = url ? url.length > 0 ? url[0].url : fileArr[0].fileUrl : fileArr[0].fileUrl;
58
60
  } catch (err) {
@@ -62,7 +64,8 @@ const PreviewVideo = ({
62
64
  try {
63
65
  await courseLibraryApi.getResources({
64
66
  fileId: fileArr[0].id,
65
- apiBaseName: apiBaseName
67
+ apiBaseName: apiBaseName,
68
+ extraApiParams
66
69
  }).then(res => {
67
70
  if (res.success) {
68
71
  obj.testExamJson = JSON.stringify(res.data);
@@ -78,7 +81,8 @@ const PreviewVideo = ({
78
81
  } = await courseLibraryApi.getTemplateHour({
79
82
  duration: fileArr[0].duration,
80
83
  ruleId: courseInfo.hourRuleId,
81
- apiBaseName: apiBaseName
84
+ apiBaseName: apiBaseName,
85
+ ...extraApiParams
82
86
  });
83
87
  if (data.length > 0) {
84
88
  obj.resourceHour = data[0].hour;
@@ -155,6 +159,7 @@ const PreviewVideo = ({
155
159
  from: "https://cdn.cqjjb.cn/jjb1-web-jjb-web-saas-res-selector/latest/index.js",
156
160
  componentKey: "jjbWebResSelector",
157
161
  componentProps: {
162
+ apiBaseName: apiBaseName,
158
163
  sourceType: ['media'],
159
164
  onOk: handleResSelectorOk,
160
165
  onCancel: handleResSelectorCancel
@@ -172,7 +177,8 @@ const PreviewVideo = ({
172
177
  id: fileId,
173
178
  src: resourceUrl,
174
179
  apiBaseName: apiBaseName,
175
- courseInfo: courseInfo
180
+ courseInfo: courseInfo,
181
+ extraApiParams: extraApiParams
176
182
  })));
177
183
  };
178
184
  PreviewVideo.propTypes = {
package/VideoPlayer.js CHANGED
@@ -9,6 +9,7 @@ const VideoPlayer = props => {
9
9
  id,
10
10
  courseInfo,
11
11
  apiBaseName,
12
+ extraApiParams,
12
13
  ...rest
13
14
  } = props;
14
15
  const [tracks, setTracks] = useState([]);
@@ -19,7 +20,8 @@ const VideoPlayer = props => {
19
20
  getResUrlAction({
20
21
  fileId: id,
21
22
  courseId: courseInfo?.id,
22
- apiBaseName: apiBaseName
23
+ apiBaseName: apiBaseName,
24
+ extraApiParams
23
25
  }).then(res => {
24
26
  if (res.data) {
25
27
  setNewSrc(res.data?.map((item, index) => {
@@ -47,7 +49,8 @@ const VideoPlayer = props => {
47
49
  getVideoCaption({
48
50
  fileId: id,
49
51
  courseId: courseInfo?.id,
50
- apiBaseName: apiBaseName
52
+ apiBaseName: apiBaseName,
53
+ extraApiParams
51
54
  }).then(res => {
52
55
  if (res.data?.length) {
53
56
  setTracks(res.data.map((item, index) => {
@@ -1,4 +1,5 @@
1
- import request, { API_BASE_NAME } from '../utils/request';
1
+ import request from '../utils/request';
2
+ import { getApiBaseName } from './utils';
2
3
 
3
4
  /**
4
5
  * 资源库获取试题
@@ -6,7 +7,10 @@ import request, { API_BASE_NAME } from '../utils/request';
6
7
  * @returns {Promise}
7
8
  */
8
9
  export const getResources = params => {
9
- return request.get(`/${params.apiBaseName || API_BASE_NAME}/course/getResExam/${params.fileId}`);
10
+ const { apiBaseName, fileId, extraApiParams } = params;
11
+ return request.get(`/${getApiBaseName(apiBaseName)}/course/getResExam/${fileId}`, {
12
+ params: extraApiParams
13
+ });
10
14
  };
11
15
 
12
16
  /**
@@ -15,7 +19,7 @@ export const getResources = params => {
15
19
  * @returns {Promise}
16
20
  */
17
21
  export const getTemplateHour = params => {
18
- return request.post(`/${params.apiBaseName || API_BASE_NAME}/course/getResourceHour`, params);
22
+ return request.post(`/${getApiBaseName(params?.apiBaseName)}/course/getResourceHour`, params);
19
23
  };
20
24
 
21
25
  /**
@@ -24,14 +28,20 @@ export const getTemplateHour = params => {
24
28
  * @returns {Promise}
25
29
  */
26
30
  export const getCourseMenu = params => {
27
- return request.get(`/${params.apiBaseName || API_BASE_NAME}/course/findCourseMenu/${params.id}`);
31
+ return request.get(`/${getApiBaseName(params?.apiBaseName)}/course/findCourseMenu/${params.id}`);
28
32
  };
29
33
 
30
34
  /**
31
35
  * 获取课程基本信息数据(课程信息)
32
36
  * @param {object} params - 请求参数,包含 id
33
- * @returns {Promise}w
37
+ * @returns {Promise}
34
38
  */
35
39
  export const getCourseInfo = params => {
36
- return request.get(`/${params.apiBaseName || API_BASE_NAME}/course/${params.id}`);
37
- };
40
+ return request.get(`/${getApiBaseName(params?.apiBaseName)}/course/${params.id}`);
41
+ };
42
+
43
+ // 查询标签分类管理列表
44
+ export const typePageAction = params =>
45
+ request.get(`/${getApiBaseName(params?.apiBaseName)}/typeManage`, {
46
+ params
47
+ });
package/api/global.js CHANGED
@@ -1,4 +1,5 @@
1
- import request, { API_BASE_NAME } from '../utils/request';
1
+ import request from '../utils/request';
2
+ import { getApiBaseName } from './utils';
2
3
 
3
4
  /**
4
5
  * 根据资源id查询新的视频url
@@ -6,7 +7,10 @@ import request, { API_BASE_NAME } from '../utils/request';
6
7
  * @returns {Promise}
7
8
  */
8
9
  export const getResUrlAction = params => {
9
- return request.get(`/${params.apiBaseName || API_BASE_NAME}/course/getVideoUrlByFileId/${params.fileId}`);
10
+ const { apiBaseName, fileId, extraApiParams } = params;
11
+ return request.get(`/${getApiBaseName(apiBaseName)}/course/getVideoUrlByFileId/${fileId}`, {
12
+ params: extraApiParams
13
+ });
10
14
  };
11
15
 
12
16
  /**
@@ -15,7 +19,11 @@ export const getResUrlAction = params => {
15
19
  * @returns {Promise}
16
20
  */
17
21
  export const getVideoCaption = params => {
22
+ const { apiBaseName, fileId, extraApiParams } = params;
18
23
  return request.get(
19
- `/${params.apiBaseName || API_BASE_NAME}/course/getCaptionListByFileId/${params.fileId}`
24
+ `/${getApiBaseName(apiBaseName)}/course/getCaptionListByFileId/${fileId}`,
25
+ {
26
+ params: extraApiParams
27
+ }
20
28
  );
21
29
  };
package/api/utils.js ADDED
@@ -0,0 +1,15 @@
1
+ const inIframe = () => {
2
+ return window.self !== window.top;
3
+ }
4
+
5
+ export const getApiBaseName = (baseName) => {
6
+ if(baseName) {
7
+ return baseName;
8
+ }
9
+ try {
10
+ const location = inIframe() ? window.parent.location : window.location;
11
+ return location.pathname.match(/^\/(.+)\/[C|c]ontainer/)[1];
12
+ } catch (error) {
13
+ return 'res';
14
+ }
15
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cqsjjb/course-res-design",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.10",
4
4
  "description": "课程资源设计组件库",
5
5
  "main": "index.js",
6
6
  "author": "jiaoxiwei",
package/utils/index.js CHANGED
@@ -4,6 +4,6 @@
4
4
  */
5
5
  export function getApiHost() {
6
6
  return process.env.NODE_ENV === 'development' ?
7
- process.env?.app?.API_HOST || 'https://yjap.cqzxaq.com'
8
- : window.location.origin;
7
+ window?.['process']?.['env']?.['app']?.['API_HOST'] || sessionStorage.getItem('API_HOST') || 'https://yjap.cqzxaq.com'
8
+ : window?.['process']?.['env']?.['app']?.['API_HOST'] || sessionStorage.getItem('API_HOST') || window.location.origin;
9
9
  }