overseas 2.0.7

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.
Files changed (98) hide show
  1. package/README.md +12 -0
  2. package/package.json +80 -0
  3. package/packages/.DS_Store +0 -0
  4. package/packages/base/bottom-popup/index.js +10 -0
  5. package/packages/base/bottom-popup/src/bottom-popup.vue +151 -0
  6. package/packages/base/button/index.js +10 -0
  7. package/packages/base/button/src/button.vue +108 -0
  8. package/packages/base/dialog/index.js +10 -0
  9. package/packages/base/dialog/src/dialog.vue +173 -0
  10. package/packages/base/icon/index.js +10 -0
  11. package/packages/base/icon/src/icon.vue +15 -0
  12. package/packages/base/image/index.js +10 -0
  13. package/packages/base/image/src/image.vue +40 -0
  14. package/packages/base/material-list/index.js +10 -0
  15. package/packages/base/material-list/src/material-list.vue +48 -0
  16. package/packages/base/popup/index.js +10 -0
  17. package/packages/base/popup/src/popup.vue +44 -0
  18. package/packages/business/basic-image/index.js +10 -0
  19. package/packages/business/basic-image/src/basicImage.vue +51 -0
  20. package/packages/business/bottom-fixed-button/index.js +10 -0
  21. package/packages/business/bottom-fixed-button/src/bottomFixedButton.vue +66 -0
  22. package/packages/business/class-choose/index.js +10 -0
  23. package/packages/business/class-choose/src/courseCard.vue +142 -0
  24. package/packages/business/class-choose/src/img/icon_close_bottomcard.svg +14 -0
  25. package/packages/business/class-choose/src/img/icon_date.svg +21 -0
  26. package/packages/business/class-choose/src/img/icon_full.svg +27 -0
  27. package/packages/business/class-choose/src/img/icon_full_EL.svg +49 -0
  28. package/packages/business/class-choose/src/img/icon_selected.svg +18 -0
  29. package/packages/business/class-choose/src/img/icon_star_selected.svg +13 -0
  30. package/packages/business/class-choose/src/img/icon_star_unselect.svg +13 -0
  31. package/packages/business/class-choose/src/index.vue +316 -0
  32. package/packages/business/grade-panel/index.js +10 -0
  33. package/packages/business/grade-panel/src/gradePanel.vue +150 -0
  34. package/packages/business/material-panel/index.js +10 -0
  35. package/packages/business/material-panel/src/index.vue +136 -0
  36. package/packages/business/notified-panel/index.js +10 -0
  37. package/packages/business/notified-panel/src/areaCodeList.js +181 -0
  38. package/packages/business/notified-panel/src/index.vue +491 -0
  39. package/packages/business/page-render/index.js +10 -0
  40. package/packages/business/page-render/src/pageRender.vue +73 -0
  41. package/packages/business/registration-panel/index.js +10 -0
  42. package/packages/business/registration-panel/src/areaCodeList.js +181 -0
  43. package/packages/business/registration-panel/src/img/icon_off.png +0 -0
  44. package/packages/business/registration-panel/src/img/icon_on.png +0 -0
  45. package/packages/business/registration-panel/src/index.vue +329 -0
  46. package/packages/business/registration-panel/src/languageList.js +41 -0
  47. package/packages/business/selector-panel/index.js +10 -0
  48. package/packages/business/selector-panel/src/selectorPanel.vue +134 -0
  49. package/packages/business/student-info/index.js +10 -0
  50. package/packages/business/student-info/src/api/index.js +10 -0
  51. package/packages/business/student-info/src/config.js +11 -0
  52. package/packages/business/student-info/src/studentInfo.vue +145 -0
  53. package/packages/business/switch-student/index.js +10 -0
  54. package/packages/business/switch-student/src/api/index.js +28 -0
  55. package/packages/business/switch-student/src/switchStudent.vue +245 -0
  56. package/packages/business/tips-popup/index.js +10 -0
  57. package/packages/business/tips-popup/src/tipsPopup.vue +76 -0
  58. package/packages/business/user-login/index.js +10 -0
  59. package/packages/business/user-login/src/api/index.js +23 -0
  60. package/packages/business/user-login/src/img/logo.png +0 -0
  61. package/packages/business/user-login/src/index.vue +149 -0
  62. package/packages/theme-style/package.json +38 -0
  63. package/packages/theme-style/src/bottom-fixed-button.scss +31 -0
  64. package/packages/theme-style/src/bottom-popup.scss +87 -0
  65. package/packages/theme-style/src/button.scss +110 -0
  66. package/packages/theme-style/src/class-choose.scss +251 -0
  67. package/packages/theme-style/src/common/popup.scss +39 -0
  68. package/packages/theme-style/src/common/var.scss +6 -0
  69. package/packages/theme-style/src/common.scss +97 -0
  70. package/packages/theme-style/src/dialog.scss +130 -0
  71. package/packages/theme-style/src/grade-panel.scss +76 -0
  72. package/packages/theme-style/src/icon.scss +369 -0
  73. package/packages/theme-style/src/image.scss +8 -0
  74. package/packages/theme-style/src/img/body_bg.png +0 -0
  75. package/packages/theme-style/src/img/pdf.png +0 -0
  76. package/packages/theme-style/src/img/title_bg.png +0 -0
  77. package/packages/theme-style/src/index.scss +20 -0
  78. package/packages/theme-style/src/material-list.scss +118 -0
  79. package/packages/theme-style/src/material-panel.scss +2 -0
  80. package/packages/theme-style/src/notified-panel.scss +207 -0
  81. package/packages/theme-style/src/page-render.scss +3 -0
  82. package/packages/theme-style/src/registration-panel.scss +158 -0
  83. package/packages/theme-style/src/selector-panel.scss +86 -0
  84. package/packages/theme-style/src/student-info.scss +114 -0
  85. package/packages/theme-style/src/switch-student.scss +176 -0
  86. package/packages/theme-style/src/tips-popup.scss +60 -0
  87. package/packages/theme-style/src/user-login.scss +93 -0
  88. package/src/index.js +74 -0
  89. package/src/network/api.js +53 -0
  90. package/src/network/apiUrl.js +65 -0
  91. package/src/utils/dom.js +54 -0
  92. package/src/utils/filters.js +82 -0
  93. package/src/utils/merge.js +16 -0
  94. package/src/utils/phone.js +153 -0
  95. package/src/utils/popup/index.js +115 -0
  96. package/src/utils/popup/popup-manager.js +178 -0
  97. package/src/utils/storage.js +22 -0
  98. package/src/utils/utils.js +49 -0
@@ -0,0 +1,10 @@
1
+ import TsUserLogin from './src/index.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsUserLogin.install = (Vue) => {
7
+ Vue.component(TsUserLogin.name, TsUserLogin)
8
+ }
9
+
10
+ export default TsUserLogin
@@ -0,0 +1,23 @@
1
+ import { net } from '@thinkacademy/overseas-ui/src/network/api'
2
+
3
+ const env = process.env.NODE_ENV === 'none'
4
+
5
+ const userBaseUrl = env ? '' : 'http://one.beta.thethinkacademy.com/v1/'
6
+
7
+ /**
8
+ *
9
+ * @param {登陆接口} params
10
+ * @returns
11
+ */
12
+ export function quickLogin(params) {
13
+ return net.post(`${userBaseUrl}/one-api/ucenter/app/account/quick_login`, params);
14
+ }
15
+
16
+ /**
17
+ *
18
+ * @param {发送验证码} params
19
+ * @returns
20
+ */
21
+ export function sendVerification(params) {
22
+ return net.post('/one-api/ucenter/common/verification/send', params);
23
+ }
@@ -0,0 +1,149 @@
1
+ <template>
2
+ <transition name="fade">
3
+ <div v-show="isShow" class="login-box">
4
+ <div class="sub-box">
5
+ <p class="logo">
6
+ <img src="./img/logo.png" alt="">
7
+ </p>
8
+ <div class="insertput phone">
9
+ <select v-model="countryCallingCode">
10
+ <option
11
+ v-for="item in codeList"
12
+ :key="item.value+item.countryName"
13
+ :value="item.value"
14
+ >
15
+ {{ item.countryName }}
16
+ </option>
17
+ </select>
18
+ <input v-model="phone" maxlength="11" type="text">
19
+ </div>
20
+ <div class="insertput code">
21
+ <input v-model="code" maxlength="6" type="text">
22
+ <span @click="send">{{ sendBtn }}</span>
23
+ </div>
24
+ <p class="centent">
25
+ By ticking this box, you have confirmed that you have read, understood and agreed to our
26
+ </p>
27
+ <div class="footer">
28
+ <p class="cancel" @click="close">
29
+ Cancel
30
+ </p>
31
+ <p class="sign-in" @click="login">
32
+ Sign in
33
+ </p>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </transition>
38
+ </template>
39
+ <script>
40
+ import { setCookies } from '../../../../src/utils/utils'
41
+ import phoneConfig from '../../../../src/utils/phone'
42
+ import { sendVerification, quickLogin } from './api'
43
+
44
+ export default {
45
+ data() {
46
+ return {
47
+ phone: '',
48
+ code: '',
49
+ countryCallingCode: '86',
50
+ codeList: [],
51
+ localeAreaCode: [],
52
+ isShow: false,
53
+ sendBtn: 'send',
54
+ timer: null,
55
+ countDown: 60,
56
+ }
57
+ },
58
+ mounted() {
59
+ setTimeout(() => {
60
+ this.isShow = true
61
+ }, 3000)
62
+ this.codeList = phoneConfig.codeList
63
+ this.localeAreaCode = phoneConfig.localeAreaCode
64
+ },
65
+ methods: {
66
+ timeDown() {
67
+ this.timer = setInterval(() => {
68
+ if (this.countDown > 1) {
69
+ this.countDown -= this.countDown
70
+ this.sendBtn = this.countDown
71
+ } else {
72
+ this.countDown = 60
73
+ this.sendBtn = 'send'
74
+ clearInterval(this.timer)
75
+ this.timer = null
76
+ }
77
+ }, 1000)
78
+ },
79
+ send() {
80
+ if (this.timer) {
81
+ return
82
+ }
83
+ sendVerification({
84
+ data: {
85
+ contactInfo: this.phone,
86
+ countryCallingCode: this.countryCallingCode,
87
+ // 使用手机号快捷登录
88
+ type: 1,
89
+ },
90
+ header: {
91
+ appName: 'Activity',
92
+ appVersion: '1.0.0',
93
+ attribution: 'event_type=410&event_id=246&source_type=0&source_id=0',
94
+ origin: '',
95
+ platform: 'h5',
96
+ platformVersion: '',
97
+ schoolCode: '6501',
98
+ },
99
+ }).then(() => {
100
+ this.timeDown()
101
+ })
102
+ },
103
+ close() {
104
+ this.isShow = false
105
+ },
106
+ open () {
107
+ this.isShow = true
108
+ },
109
+ login() {
110
+ if (!this.phone || !this.code) {
111
+ return
112
+ }
113
+ quickLogin({
114
+ data: {
115
+ phone: this.phone,
116
+ verificationCode: this.code,
117
+ countryCallingCode: this.countryCallingCode,
118
+ },
119
+ header: {
120
+ appName: 'Activity',
121
+ appVersion: '1.0.0',
122
+ attribution: 'event_type=410&event_id=246&source_type=0&source_id=0',
123
+ origin: '',
124
+ platform: 'h5',
125
+ platformVersion: '',
126
+ schoolCode: '8601',
127
+ },
128
+ }).then((res) => {
129
+ const resData = res.data || {};
130
+ const accessToken = resData.data.unifiedAccessToken || ''
131
+ setCookies('_official_token', accessToken)
132
+ localStorage.setItem('token', accessToken)
133
+ this.isShow = false
134
+ // avatar: "https://download-pa-s3.thethinkacademy.com/415/20201222/1608632947958AezAByLn0D.png"
135
+ // card: "215501126720"
136
+ // countryCallingCode: "86"
137
+ // email: "3243@we.com"
138
+ // nickName: "UserytCi"
139
+ // passwordModified: true
140
+ // phone: "136****345"
141
+ // type: 0
142
+ // uid: 7596288
143
+ // unifiedAccessToken: "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOjc1OTYyODgsImNsaWVudFR5cGUiOiJUT1VDSF9XRUJTSVRFIiwiaXNzIjoiVUNFTlRFUiIsImlhdCI6MTYzNjE5MTAxOSwianRpIjoiZDRhMGUyZjUifQ.FvMxZnwYt06_n_divs34c0YurFSumIS_kok2X66Ark6Wdga-p3yoPmxBg5yCNMcH1A5EoLJvxnGj8-bgfiDr1-1Az0HmGojIg30HAB6LWB0UgeIg0k00Pi6nU1OpjJDEJ5imKZbCXRLPHl5IBkqKqUqJN_KX5zHmVrZPuAJZKGs"
144
+ // unifiedTempToken: "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1aWQiOj
145
+ })
146
+ },
147
+ },
148
+ }
149
+ </script>
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "overseas-theme-style",
3
+ "version": "1.0.0",
4
+ "description": "Overseas component theme.",
5
+ "private": true,
6
+ "main": "lib/index.css",
7
+ "style": "lib/index.css",
8
+ "files": [
9
+ "lib",
10
+ "src"
11
+ ],
12
+ "scripts": {
13
+ "build": "gulp build"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://git.100tal.com/peiyou_us_fe/overseas-ui"
18
+ },
19
+ "keywords": [
20
+ "overseas-ui",
21
+ "theme"
22
+ ],
23
+ "contributors": [
24
+ {
25
+ "name": "lijiahong",
26
+ "email": "lijiahong1@tal.com"
27
+ }
28
+ ],
29
+ "homepage": "https://git.100tal.com/peiyou_us_fe/overseas-ui",
30
+ "devDependencies": {},
31
+ "dependencies": {
32
+ "gulp": "^4.0.2",
33
+ "gulp-autoprefixer": "^8.0.0",
34
+ "gulp-cssmin": "^0.2.0",
35
+ "gulp-sass": "^5.0.0",
36
+ "sass": "^1.37.5"
37
+ }
38
+ }
@@ -0,0 +1,31 @@
1
+ .bottom-fixed-btns-wrapper {
2
+ position: fixed;
3
+ bottom: 0;
4
+ width: 100%;
5
+ max-width:750px;
6
+ height: 80px;
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ .bottom-fixed-btns-container {
11
+ padding: 16px;
12
+ width: 100%;
13
+ max-width: 500px;
14
+ height: 80px;
15
+ background: rgba(255, 255, 255, 0.9);
16
+ z-index: 99;
17
+
18
+ .bottom-btn {
19
+ margin: 0 auto;
20
+ padding: 0 16px;
21
+ width: 100%;
22
+ }
23
+ }
24
+
25
+ @media screen and (min-width: 500px) {
26
+ .bottom-fixed-btns-container {
27
+ bottom: 10px;
28
+ max-width: 375px;
29
+ border-radius: 16px;
30
+ }
31
+ }
@@ -0,0 +1,87 @@
1
+ .bottom-popup {
2
+ .header-wrapper {
3
+ padding: 0 16px;
4
+ background: #fff;
5
+ border-top-left-radius: 16px;
6
+ border-top-right-radius: 16px;
7
+
8
+ &.scrolling-style {
9
+ position: relative;
10
+
11
+ &::after {
12
+ content: '';
13
+ position: absolute;
14
+ height: 30px;
15
+ left: 0;
16
+ right: 0;
17
+ background: linear-gradient(180deg, rgba(222, 226, 231, 0.6) 0%, rgba(222, 226, 231, 0) 100%);
18
+ z-index: 1;
19
+ }
20
+ }
21
+
22
+ .title,
23
+ h1 {
24
+ text-align: center;
25
+ font-size: 16px;
26
+ font-weight: 600;
27
+ line-height: 21px;
28
+ color: #172b4d;
29
+ }
30
+
31
+ .normal-header-container {
32
+ position: relative;
33
+ padding: 14px 0;
34
+ display: flex;
35
+ justify-content: center;
36
+ align-items: center;
37
+ height: 60px;
38
+ }
39
+
40
+ .normal-header-container .header-left-container,
41
+ .normal-header-container .header-right-container {
42
+ position: absolute;
43
+ top: 14px;
44
+
45
+ ::v-deep .header-icon-btn-container {
46
+ display: flex;
47
+ justify-content: center;
48
+ align-items: center;
49
+ width: 32px;
50
+ height: 32px;
51
+ text-align: center;
52
+ border-radius: 50%;
53
+ color: #a2aab8;
54
+ background: #f4f6fa;
55
+
56
+ &.success-icon-container {
57
+ color: #ffaa0a;
58
+ background: rgba(255, 170, 10, 0.08);
59
+ }
60
+
61
+ .iconfont {
62
+ font-size: 20px;
63
+ }
64
+ }
65
+ }
66
+
67
+ .normal-header-container .header-left-container {
68
+ left: 0;
69
+ }
70
+
71
+ .normal-header-container .header-right-container {
72
+ right: 0;
73
+ }
74
+ }
75
+
76
+ .body-wrapper {
77
+ position: relative;
78
+ padding: 10px 16px;
79
+ // TODO
80
+ // 通过传值设置高度
81
+ min-height: 462px;
82
+ max-height: 80vh;
83
+ overflow: scroll;
84
+ background: #f4f6fa;
85
+ }
86
+
87
+ }
@@ -0,0 +1,110 @@
1
+ // 按钮样式文件
2
+
3
+ // 清除按钮默认样式
4
+ button {
5
+ border: none;
6
+ outline: none;
7
+ cursor: pointer;
8
+ }
9
+
10
+ .ts-button {
11
+ padding: 0 8px;
12
+ text-align: center;
13
+ font-size: 20px;
14
+ line-height: 24px;
15
+ font-weight: 600;
16
+ border-radius: 10px;
17
+ color: #ffaa0a;
18
+ background: #fff;
19
+ transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
20
+
21
+ &.ts-button--default {
22
+ color: #ffaa0a;
23
+ background: #fff;
24
+
25
+ &.is-outline {
26
+ color: #fff;
27
+ border-color: #fff;
28
+ }
29
+ }
30
+
31
+ &.ts-button--primary {
32
+ color: #fff;
33
+ background: linear-gradient(56deg, rgba(255, 213, 24, 1) 0%, rgba(255, 170, 10, 1) 100%) #ffd518;
34
+
35
+ &.is-outline {
36
+ color: #fff3dc;
37
+ border-color: #fff3dc;
38
+ }
39
+ }
40
+
41
+ &.ts-button--assist {
42
+ color: #ffaa0a;
43
+ background: #fff3dc;
44
+
45
+ &.is-outline {
46
+ color: #fff3dc;
47
+ border-color: #fff3dc;
48
+ }
49
+ }
50
+
51
+ &.ts-button--small {
52
+ height: 32px;
53
+ font-size: 16px;
54
+ line-height: 19px;
55
+ font-weight: 600;
56
+
57
+ &.is-outline {
58
+ border-width: 2px;
59
+ }
60
+ }
61
+
62
+ &.ts-button--normal {
63
+ height: 48px;
64
+ font-size: 20px;
65
+ line-height: 24px;
66
+ font-weight: 600;
67
+ }
68
+
69
+ &.ts-button--large {
70
+ height: 60px;
71
+ font-size: 24px;
72
+ line-height: 30px;
73
+ font-weight: bold;
74
+ }
75
+
76
+ &.is-round {
77
+ border-radius: 100px;
78
+ }
79
+
80
+ &.is-outline {
81
+ border-width: 3px;
82
+ border-style: solid;
83
+ background: transparent;
84
+
85
+ &:not([disabled]):hover,
86
+ &.is-disabled {
87
+ color: #fff;
88
+ border-color: transparent;
89
+ }
90
+
91
+ &[disabled],
92
+ &[disabled]:hover {
93
+ border-color: transparent;
94
+ }
95
+ }
96
+
97
+ &:not([disabled]):hover {
98
+ color: #fff;
99
+ background: #ffd518;
100
+ transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
101
+ }
102
+
103
+ &.is-disabled,
104
+ &[disabled],
105
+ &[disabled]:hover {
106
+ color: #fff;
107
+ background: rgba(162, 170, 184, 0.3);
108
+ cursor: not-allowed;
109
+ }
110
+ }
@@ -0,0 +1,251 @@
1
+ @import './bottom-popup.scss';
2
+ .choose-course-wrapper {
3
+ .goods-list {
4
+ padding-bottom: 80px;
5
+ }
6
+ .voucher-show-wrapper {
7
+ width: 100%;
8
+ padding: 0 16px;
9
+ // height: 70px;
10
+
11
+ margin-bottom: 10px;
12
+ position: fixed;
13
+ bottom: 64px;
14
+ left: 50%;
15
+ transform: translateX(-50%);
16
+ .voucher-show {
17
+ border-radius: 8px;
18
+ color: #ffffff;
19
+ background: rgba(15, 25, 42, 0.95);
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: space-around;
23
+ height: 46px;
24
+
25
+ .voucher-text {
26
+ width: 264px;
27
+ height: 28px;
28
+ line-height: 14px;
29
+ font-size: 12px;
30
+ }
31
+ }
32
+ }
33
+
34
+ .btn-bottom-class-choose {
35
+ position: fixed;
36
+ bottom: 0;
37
+ left: 0;
38
+ width: 100%;
39
+ height: 64px;
40
+ background: #ffffff;
41
+ display: flex;
42
+ justify-content: center;
43
+ padding: 0 16px;
44
+
45
+ .price {
46
+ width: 50%;
47
+ background: #fff;
48
+ text-align: left;
49
+ color: #ffaa0a;
50
+ font-size: 24px;
51
+ font-weight: 600;
52
+ line-height: 64px;
53
+ display: flex;
54
+ flex-direction: column;
55
+ justify-content: center;
56
+
57
+ .price-top {
58
+ height: 29px;
59
+ line-height: 29px;
60
+ s {
61
+ font-size: 12px;
62
+ font-weight: 600;
63
+ color: #a2aab8;
64
+ line-height: 14px;
65
+ }
66
+ }
67
+
68
+ .price-bottom {
69
+ height: 19px;
70
+ font-size: 16px;
71
+ font-family: SFProRounded-Medium, SFProRounded;
72
+ font-weight: 500;
73
+ color: #000;
74
+ line-height: 16px;
75
+ }
76
+ }
77
+ .btn-wrapper {
78
+ width: 50%;
79
+ position: relative;
80
+
81
+ .btn {
82
+ display: block;
83
+ width: 120px;
84
+ height: 40px;
85
+ background: linear-gradient(45deg, #ffd518 0%, #ffaa0a 100%);
86
+ border-radius: 28px;
87
+ position: absolute;
88
+ right: 0;
89
+ top: 50%;
90
+ transform: translateY(-50%);
91
+ text-align: center;
92
+ color: #fff;
93
+ font-weight: 600;
94
+ font-size: 16px;
95
+ }
96
+ }
97
+ }
98
+ .showBackground {
99
+ // background: red;
100
+ background: linear-gradient(45deg, #ffd518 0%, #ffaa0a 100%);
101
+ .price {
102
+ background: transparent;
103
+ color: #ffffff;
104
+
105
+ .price-top {
106
+ color: #ffffff;
107
+ s {
108
+ color: #ffffff;
109
+ }
110
+ }
111
+ .price-bottom {
112
+ color: #ffffff;
113
+ }
114
+ }
115
+ .btn-wrapper .btn {
116
+ background: #ffffff;
117
+ color: #ffaa0a;
118
+ }
119
+ }
120
+
121
+ .bottom-sub-box {
122
+ display: flex;
123
+ justify-content: center;
124
+ align-items: center;
125
+ }
126
+ .left-class {
127
+ font-size: 16px;
128
+ font-weight: 500;
129
+ color: #a2aab8;
130
+ line-height: 22px;
131
+ width: 50%;
132
+ text-align: left;
133
+ }
134
+ .right-price {
135
+ font-weight: 600;
136
+ color: #ffaa0a;
137
+ width: 50%;
138
+ text-align: right;
139
+
140
+ &-top {
141
+ font-size: 20px;
142
+ color: #ffaa0a;
143
+ line-height: 24px;
144
+ width: 100%;
145
+ display: block;
146
+ text-align: right;
147
+ }
148
+
149
+ &-bottom {
150
+ font-size: 12px;
151
+ color: #a2aab8;
152
+ line-height: 14px;
153
+ }
154
+ }
155
+ .course-card {
156
+ position: relative;
157
+ border-radius: 10px;
158
+ padding: 20px 16px 0;
159
+ margin-bottom: 20px;
160
+ background: #fff;
161
+ padding-bottom: 15px;
162
+ &.active {
163
+ box-shadow: 0 0 0 1px #ffaa0a;
164
+ }
165
+ }
166
+ .course-name {
167
+ // line-height: 40px;
168
+ font-weight: 600;
169
+ }
170
+
171
+ .date-info {
172
+ display: flex;
173
+
174
+ .icon {
175
+ margin-top: 16px;
176
+ width: 16px;
177
+ height: 16px;
178
+ img {
179
+ display: block;
180
+ width: 100%;
181
+ height: 100%;
182
+ }
183
+ }
184
+ .info {
185
+ margin-top: 14px;
186
+ margin-bottom: 12px;
187
+ margin-left: 10px;
188
+ flex: 1;
189
+
190
+ :first-child {
191
+ margin-bottom: 8px;
192
+ }
193
+ }
194
+ }
195
+
196
+ .difficulty {
197
+ display: flex;
198
+ align-items: center;
199
+ height: 48px;
200
+ font-size: 12px;
201
+ font-family: SFProRounded-Medium, SFProRounded;
202
+ font-weight: 500;
203
+ color: #172b4d;
204
+ // margin: 0 8px;
205
+ .text {
206
+ padding-right: 10px;
207
+ color: #a2aab8;
208
+ }
209
+ .icon-wrapper {
210
+ display: flex;
211
+ .icon {
212
+ width: 20px;
213
+ height: 22px;
214
+ margin-right: 10px;
215
+ img {
216
+ display: block;
217
+ width: 100%;
218
+ height: 100%;
219
+ }
220
+ }
221
+ }
222
+ .diff-text {
223
+ height: 22px;
224
+ line-height: 22px;
225
+ }
226
+ }
227
+ .active-icon {
228
+ position: absolute;
229
+ top: 0;
230
+ right: 0;
231
+ width: 32px;
232
+ height: 20px;
233
+ img {
234
+ display: block;
235
+ width: 100%;
236
+ height: 100%;
237
+ }
238
+ }
239
+ .course-full {
240
+ position: absolute;
241
+ top: 0;
242
+ right: 0;
243
+ width: 120px;
244
+ height: 104px;
245
+ img {
246
+ display: block;
247
+ width: 100%;
248
+ height: 100%;
249
+ }
250
+ }
251
+ }