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
package/README.md ADDED
@@ -0,0 +1,12 @@
1
+ ## 海外C端组件库
2
+
3
+ 设置内部npm源
4
+ npm run dist // 打包
5
+ npm run release // 提交
6
+
7
+
8
+ #### TODO
9
+
10
+ 样式解耦
11
+ 国际化
12
+ 打包优化
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "overseas",
3
+ "version": "2.0.7",
4
+ "description": "Think Academy to C UI library",
5
+ "main": "lib/overseas-ui.common.js",
6
+ "author": "lijiahong1@tal.com",
7
+ "license": "ISC",
8
+ "files": [
9
+ "lib",
10
+ "src",
11
+ "packages"
12
+ ],
13
+ "scripts": {
14
+ "serve": "webpack-dev-server --config build/webpack.config.dev.js",
15
+ "dist": "yarn run build:cdn && yarn run build:import && yarn run build:components && yarn run build:utils && yarn run build:theme",
16
+ "build:utils": "cross-env BABEL_ENV=utils babel src --out-dir lib --ignore src/index.js",
17
+ "build:theme": "gulp build --gulpfile packages/theme-style/gulpfile.js && cp-cli packages/theme-style/lib lib/theme-style",
18
+ "build:cdn": "webpack --config build/webpack.conf.js",
19
+ "build:import": "webpack --config build/webpack.common.js",
20
+ "build:components": "webpack --config build/webpack.components.js",
21
+ "release": "release-it --npm.skipChecks"
22
+ },
23
+ "devDependencies": {
24
+ "babel-cli": "^6.26.0",
25
+ "babel-core": "^6.26.3",
26
+ "babel-eslint": "^10.1.0",
27
+ "babel-loader": "^7.1.5",
28
+ "babel-plugin-add-module-exports": "^1.0.4",
29
+ "babel-plugin-module-resolver": "^4.1.0",
30
+ "babel-plugin-syntax-jsx": "^6.18.0",
31
+ "babel-plugin-transform-vue-jsx": "^3.7.0",
32
+ "babel-preset-env": "^1.7.0",
33
+ "babel-preset-stage-2": "^6.24.1",
34
+ "babel-regenerator-runtime": "^6.5.0",
35
+ "cp-cli": "^2.0.0",
36
+ "cross-env": "^7.0.3",
37
+ "css-loader": "2.1.0",
38
+ "eslint": "^6.0.0",
39
+ "eslint-loader": "^4.0.2",
40
+ "eslint-plugin-standard": "^5.0.0",
41
+ "eslint-plugin-vue": "^6.2.2",
42
+ "file-loader": "^6.2.0",
43
+ "gulp": "^4.0.2",
44
+ "gulp-autoprefixer": "^8.0.0",
45
+ "gulp-cache": "^1.1.3",
46
+ "gulp-cssmin": "^0.2.0",
47
+ "gulp-imagemin": "6.2",
48
+ "gulp-sass": "^5.0.0",
49
+ "html-minifier-terser": "^5.0.1",
50
+ "html-webpack-plugin": "4",
51
+ "mini-css-extract-plugin": "0.4.1",
52
+ "node-sass": "4.14.1",
53
+ "progress-bar-webpack-plugin": "^2.1.0",
54
+ "release-it": "^14.11.7",
55
+ "sass": "^1.37.5",
56
+ "sass-loader": "7.1.0",
57
+ "sass-resources-loader": "^2.2.3",
58
+ "style-loader": "0.23.1",
59
+ "stylelint": "^13.13.1",
60
+ "stylelint-config-standard": "^22.0.0",
61
+ "stylelint-webpack-plugin": "^2.2.2",
62
+ "terser-webpack-plugin": "4.2.3",
63
+ "url-loader": "^4.1.1",
64
+ "vue": "^2.6.14",
65
+ "vue-loader": "^15.9.8",
66
+ "vue-style-loader": "^4.1.3",
67
+ "vue-template-compiler": "^2.6.14",
68
+ "webpack": "4.14.0",
69
+ "webpack-cli": "3.0.8",
70
+ "webpack-dev-server": "3.1.11",
71
+ "webpack-node-externals": "1.7.2"
72
+ },
73
+ "dependencies": {
74
+ "axios": "^0.24.0",
75
+ "babel-helper-vue-jsx-merge-props": "^2.0.3",
76
+ "js-cookie": "^3.0.1",
77
+ "vant": "2.12.54"
78
+ },
79
+ "release-it": {}
80
+ }
Binary file
@@ -0,0 +1,10 @@
1
+ import TsBottomPopup from './src/bottom-popup.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsBottomPopup.install = (Vue) => {
7
+ Vue.component(TsBottomPopup.name, TsBottomPopup)
8
+ }
9
+
10
+ export default TsBottomPopup
@@ -0,0 +1,151 @@
1
+ <template>
2
+ <!-- 通用底部弹出层 -->
3
+ <van-popup
4
+ v-model="isShow"
5
+ round
6
+ position="bottom"
7
+ :close-on-click-overlay="closeOnClickOverlay"
8
+ :close-on-popstate="closeOnPopstate"
9
+ >
10
+ <div class="bottom-popup">
11
+ <!-- 完全自定义header -->
12
+ <slot name="custom-header">
13
+ <div class="header-wrapper" :class="{'scrolling-style': isScrolling}">
14
+ <!-- 具备滑动显示阴影的自定义header -->
15
+ <slot name="header">
16
+ <div class="normal-header-container">
17
+ <div v-if="showLeftIcon" class="header-left-container">
18
+ <slot name="left-icon">
19
+ <div class="header-icon-btn-container" @click="leftIconHandler">
20
+ <i class="iconfont icon-close-new-e658" />
21
+ </div>
22
+ </slot>
23
+ </div>
24
+ <div class="title-container">
25
+ <slot name="header-title">
26
+ <h1 class="title">
27
+ {{ popupTitle }}
28
+ </h1>
29
+ </slot>
30
+ </div>
31
+ <div v-if="showRightIcon" class="header-right-container">
32
+ <slot name="right-icon">
33
+ <div class="header-icon-btn-container success-icon-container" @click="rightIconHandler">
34
+ <i class="iconfont icon-close-new-e658" />
35
+ </div>
36
+ </slot>
37
+ </div>
38
+ </div>
39
+ <slot name="header-bottom" />
40
+ </slot>
41
+ </div>
42
+ </slot>
43
+
44
+ <!-- 完全自定义body -->
45
+ <slot name="custom-body">
46
+ <div id="normal-bottom-popup-body-wrapper" class="body-wrapper" @scroll="watchScroll">
47
+ <!-- 具备滑动显示阴影的自定义body -->
48
+ <slot name="body" />
49
+ </div>
50
+ </slot>
51
+ </div>
52
+ </van-popup>
53
+ </template>
54
+
55
+ <script>
56
+ // 节流函数
57
+ const throttle = require('lodash/throttle');
58
+
59
+ export default {
60
+ props: {
61
+ // 弹出层是否显示
62
+ show: {
63
+ default: false,
64
+ type: Boolean,
65
+ },
66
+ // 弹出层标题
67
+ popupTitle: {
68
+ default: '',
69
+ type: String,
70
+ },
71
+ // 是否显示遮罩层
72
+ overlay: {
73
+ default: true,
74
+ type: Boolean,
75
+ },
76
+ // 是否在点击遮罩层后关闭
77
+ closeOnClickOverlay: {
78
+ default: false,
79
+ type: Boolean,
80
+ },
81
+ // 是否在页面回退时自动关闭
82
+ closeOnPopstate: {
83
+ default: false,
84
+ type: Boolean,
85
+ },
86
+ // 是否显示左按钮
87
+ showLeftIcon: {
88
+ default: false,
89
+ type: Boolean,
90
+ },
91
+ // 左侧按钮icon
92
+ leftIconClass: {
93
+ default: 'iconfont icon-close-new-e658',
94
+ type: String,
95
+ },
96
+ // 是否显示右按钮
97
+ showRightIcon: {
98
+ default: true,
99
+ type: Boolean,
100
+ },
101
+ // 右侧按钮icon
102
+ rightIconClass: {
103
+ default: 'iconfont icon-success',
104
+ type: String,
105
+ },
106
+ },
107
+ data() {
108
+ return {
109
+ isScrolling: false,
110
+ pannelBodyScrollTop: 0,
111
+ }
112
+ },
113
+ computed: {
114
+ isShow: {
115
+ get() {
116
+ return this.show;
117
+ },
118
+ set(newValue) {
119
+ this.$emit('update:show', newValue)
120
+ return newValue;
121
+ },
122
+
123
+ },
124
+ },
125
+ watch: {
126
+ pannelBodyScrollTop(newVal) {
127
+ setTimeout(() => {
128
+ const ele = document.getElementById('normal-bottom-popup-body-wrapper')
129
+ if (newVal !== ele.scrollTop) {
130
+ this.isScrolling = true;
131
+ } else {
132
+ this.isScrolling = false;
133
+ }
134
+ }, 100)
135
+ },
136
+ },
137
+ methods: {
138
+ watchScroll: throttle(function watchScrollTop() {
139
+ const ele = document.getElementById('normal-bottom-popup-body-wrapper');
140
+ this.pannelBodyScrollTop = ele.scrollTop;
141
+ }),
142
+ rightIconHandler() {
143
+ this.$emit('right-icon-handler');
144
+ },
145
+ leftIconHandler() {
146
+ this.$emit('left-icon-handler');
147
+ },
148
+ },
149
+ }
150
+ </script>
151
+
@@ -0,0 +1,10 @@
1
+ import TsButton from './src/button.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsButton.install = (Vue) => {
7
+ Vue.component(TsButton.name, TsButton)
8
+ }
9
+
10
+ export default TsButton
@@ -0,0 +1,108 @@
1
+ <template>
2
+ <button class="ts-button"
3
+ :disabled="buttonDisabled"
4
+ :autofocus="autofocus"
5
+ :type="type"
6
+ :class="[
7
+ styleType ? 'ts-button--' + styleType : '',
8
+ buttonSize ? 'ts-button--' + buttonSize : '',
9
+ {
10
+ 'is-disabled': buttonDisabled,
11
+ 'is-loading': loading,
12
+ 'is-outline': outline,
13
+ 'is-round': round,
14
+ }
15
+ ]"
16
+ :style="{'width': width, 'height': height, 'color': textColor, 'background': bgColor, 'border-color': borderColor}"
17
+ @click="handleClick"
18
+ >
19
+ <span v-if="loading" class="iconfont icon-loading" />
20
+ <slot>
21
+ TSButton
22
+ </slot>
23
+ </button>
24
+ </template>
25
+
26
+ <script>
27
+ export default {
28
+ name: 'TsButton',
29
+ props: {
30
+ // 尺寸(small | normal | large)
31
+ size: {
32
+ type: String,
33
+ default: 'normal',
34
+ },
35
+ // 样式类型(default | primary | assist)
36
+ styleType: {
37
+ type: String,
38
+ default: 'default',
39
+ },
40
+ // 圆角为半圆
41
+ round: {
42
+ type: Boolean,
43
+ default: true,
44
+ },
45
+ // 文本颜色
46
+ textColor: {
47
+ type: String,
48
+ default: '',
49
+ },
50
+ // 边框颜色
51
+ borderColor: {
52
+ type: String,
53
+ default: '',
54
+ },
55
+ // 背景色
56
+ bgColor: {
57
+ type: String,
58
+ default: '',
59
+ },
60
+ // 按钮宽度
61
+ width: {
62
+ type: String,
63
+ default: '',
64
+ },
65
+ // 按钮高度
66
+ height: {
67
+ type: String,
68
+ default: '',
69
+ },
70
+ // 原生 type 属性(button | submit | reset)
71
+ type: {
72
+ type: String,
73
+ default: 'button',
74
+ },
75
+ // 是否是线框按钮
76
+ outline: {
77
+ default: false,
78
+ type: Boolean,
79
+ },
80
+ // 是否处于loading状态
81
+ loading: {
82
+ default: false,
83
+ type: Boolean,
84
+ },
85
+ disabled: {
86
+ default: false,
87
+ type: Boolean,
88
+ },
89
+ autofocus: {
90
+ default: false,
91
+ type: Boolean,
92
+ },
93
+ },
94
+ computed: {
95
+ buttonSize() {
96
+ return this.size
97
+ },
98
+ buttonDisabled() {
99
+ return this.disabled || this.loading
100
+ },
101
+ },
102
+ methods: {
103
+ handleClick(e) {
104
+ this.$emit('click', e);
105
+ },
106
+ },
107
+ }
108
+ </script>
@@ -0,0 +1,10 @@
1
+ import TsDialog from './src/dialog.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsDialog.install = (Vue) => {
7
+ Vue.component(TsDialog.name, TsDialog)
8
+ }
9
+
10
+ export default TsDialog
@@ -0,0 +1,173 @@
1
+ <template>
2
+ <transition name="dialog-fade">
3
+ <div v-show="visible" class="ts-dialog-wrapper" @click.self="handleWrapperClick">
4
+ <div
5
+ :key="key"
6
+ ref="dialog"
7
+ role="dialog"
8
+ aria-modal="true"
9
+ :aria-label="title || 'dialog'"
10
+ :class="['ts-dialog', {'is-center': center}, {'is-round': isRound}]"
11
+ :style="{'width': width}"
12
+ >
13
+ <div class="ts-dialog__header" :style="{'background-color': headerBg}">
14
+ <slot name="header">
15
+ <div class="ts-normal-header-container">
16
+ <div v-if="showLeftIcon" class="ts-header-left-container">
17
+ <slot name="left-icon">
18
+ <div class="ts-header-icon-btn-container" @click="leftIconHandler">
19
+ <i class="iconfont icon-close-new-e658" />
20
+ </div>
21
+ </slot>
22
+ </div>
23
+ <div class="ts-title-container">
24
+ <slot name="header-title">
25
+ <div class="title font-semibold">
26
+ {{ title }}
27
+ </div>
28
+ </slot>
29
+ </div>
30
+ <div v-if="showRightIcon" class="ts-header-right-container">
31
+ <slot name="right-icon">
32
+ <div class="ts-header-icon-btn-container success-icon-container" @click="rightIconHandler">
33
+ <i class="iconfont icon-success" />
34
+ </div>
35
+ </slot>
36
+ </div>
37
+ </div>
38
+ <slot name="header-bottom" />
39
+ </slot>
40
+ </div>
41
+ <div class="ts-dialog__body" :style="{'background-color': bodyBg}">
42
+ <slot name="body" />
43
+ </div>
44
+ <div class="ts-dialog__footer">
45
+ <slot name="footer" />
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </transition>
50
+ </template>
51
+
52
+ <script>
53
+ import Popup from '../../../../src/utils/popup/index';
54
+
55
+ export default {
56
+ name: 'TsDialog',
57
+ mixins: [Popup],
58
+ props: {
59
+ // 是否插入到body节点
60
+ appendToBody: {
61
+ type: Boolean,
62
+ default: false,
63
+ },
64
+ // 是否显示遮罩层
65
+ modal: {
66
+ type: Boolean,
67
+ default: true,
68
+ },
69
+ // 弹窗标题
70
+ title: {
71
+ type: String,
72
+ default: 'title',
73
+ },
74
+ // 是否显示左侧icon
75
+ showLeftIcon: {
76
+ type: Boolean,
77
+ default: false,
78
+ },
79
+ // 是否显示右侧icon
80
+ showRightIcon: {
81
+ type: Boolean,
82
+ default: false,
83
+ },
84
+ // 头部背景色
85
+ headerBg: {
86
+ type: String,
87
+ default: '#fff',
88
+ },
89
+ // body背景色
90
+ bodyBg: {
91
+ type: String,
92
+ default: '#fff',
93
+ },
94
+ // 弹窗宽度
95
+ width: {
96
+ type: String,
97
+ default: '50%',
98
+ },
99
+ // 是否居中显示弹窗
100
+ center: {
101
+ type: Boolean,
102
+ default: true,
103
+ },
104
+ // 样式相关配置
105
+ isRound: {
106
+ type: Boolean,
107
+ default: true,
108
+ },
109
+ },
110
+ data() {
111
+ return {
112
+ closed: false,
113
+ key: 0,
114
+ }
115
+ },
116
+ watch: {
117
+ visible(val) {
118
+ console.log(val)
119
+ if (val) {
120
+ this.closed = false
121
+ this.$emit('open');
122
+ if (this.appendToBody) {
123
+ document.body.appendChild(this.$el);
124
+ }
125
+ } else {
126
+ if (!this.closed) this.$emit('close');
127
+ if (this.destroyOnClose) {
128
+ this.$nextTick(() => {
129
+ this.key += 1;
130
+ });
131
+ }
132
+ }
133
+ },
134
+ },
135
+ mounted() {
136
+ if (this.visible) {
137
+ this.rendered = true;
138
+ this.open();
139
+ if (this.appendToBody) {
140
+ document.body.appendChild(this.$el);
141
+ }
142
+ }
143
+ },
144
+ methods: {
145
+ rightIconHandler() {
146
+ this.$emit('right-icon-handler');
147
+ },
148
+ leftIconHandler() {
149
+ this.$emit('left-icon-handler');
150
+ },
151
+ handleWrapperClick() {
152
+ console.log('handle wrapper click')
153
+ if (!this.closeOnClickModal) return;
154
+ this.handleClose();
155
+ },
156
+ handleClose() {
157
+ console.log('handler close')
158
+
159
+ this.hide();
160
+ },
161
+ hide(cancel) {
162
+ console.log('close hide func')
163
+ if (cancel !== false) {
164
+ this.$emit('update:visible', false);
165
+ this.$emit('close');
166
+ this.closed = true;
167
+ console.log('123')
168
+ console.log(this.visible)
169
+ }
170
+ },
171
+ },
172
+ }
173
+ </script>
@@ -0,0 +1,10 @@
1
+ import TsIcon from './src/icon.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsIcon.install = (Vue) => {
7
+ Vue.component(TsIcon.name, TsIcon)
8
+ }
9
+
10
+ export default TsIcon
@@ -0,0 +1,15 @@
1
+ <template>
2
+ <i :class="`iconfont icon-${name}`" />
3
+ </template>
4
+
5
+ <script>
6
+ export default {
7
+ name: 'TsIcon',
8
+ props: {
9
+ name: {
10
+ type: String,
11
+ default: '',
12
+ },
13
+ },
14
+ }
15
+ </script>
@@ -0,0 +1,10 @@
1
+ import TsImage from './src/image.vue'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ TsImage.install = (Vue) => {
7
+ Vue.component(TsImage.name, TsImage)
8
+ }
9
+
10
+ export default TsImage
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <div class="image-section-wrapper">
3
+ <img v-if="src" class="img-section" :src="src" :alt="alt" :width="width" :height="height" :object-fit="fit">
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'TsImage',
10
+ props: {
11
+ src: {
12
+ default: '',
13
+ type: String,
14
+ },
15
+ // img 标签原生object-fit属性
16
+ fit: {
17
+ default: 'contain',
18
+ type: String,
19
+ },
20
+ // img 原生属性
21
+ width: {
22
+ default: '',
23
+ type: String,
24
+ },
25
+ height: {
26
+ default: '',
27
+ type: String,
28
+ },
29
+ alt: {
30
+ default: 'image',
31
+ type: String,
32
+ },
33
+ },
34
+ data() {
35
+ return {
36
+
37
+ }
38
+ },
39
+ }
40
+ </script>
@@ -0,0 +1,10 @@
1
+ import MaterialList from './src/material-list'
2
+
3
+ // install 是默认的方法,供按需引入
4
+ // 当外界在 use 这个组件的时候,就会调用本身的install方法,同时传一个Vue这个类的参数
5
+
6
+ MaterialList.install = (Vue) => {
7
+ Vue.component(MaterialList.name, MaterialList)
8
+ }
9
+
10
+ export default MaterialList