overseas 0.0.1
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/README.md +12 -0
- package/lib/base/bottom-popup.js +550 -0
- package/lib/base/button.js +400 -0
- package/lib/base/dialog.js +979 -0
- package/lib/base/icon.js +273 -0
- package/lib/base/image.js +309 -0
- package/lib/base/material-list.js +357 -0
- package/lib/base/popup.js +364 -0
- package/lib/business/basic-image.js +325 -0
- package/lib/business/bottom-fixed-button.js +350 -0
- package/lib/business/class-choose.js +1717 -0
- package/lib/business/grade-panel.js +683 -0
- package/lib/business/material-panel.js +778 -0
- package/lib/business/notified-panel.js +2141 -0
- package/lib/business/page-render.js +364 -0
- package/lib/business/registration-panel.js +1071 -0
- package/lib/business/selector-panel.js +667 -0
- package/lib/business/student-info.js +1172 -0
- package/lib/business/switch-student.js +1407 -0
- package/lib/business/tips-popup.js +626 -0
- package/lib/business/user-login.js +816 -0
- package/lib/index.js +1 -0
- package/lib/network/api.js +64 -0
- package/lib/network/apiUrl.js +68 -0
- package/lib/overseas-ui.common.js +8771 -0
- package/lib/static/logo.b6015b3.png +0 -0
- package/lib/static/logo.b6015b30.png +0 -0
- package/lib/theme-style/bottom-fixed-button.css +1 -0
- package/lib/theme-style/bottom-popup.css +1 -0
- package/lib/theme-style/button.css +1 -0
- package/lib/theme-style/class-choose.css +1 -0
- package/lib/theme-style/common.css +1 -0
- package/lib/theme-style/dialog.css +1 -0
- package/lib/theme-style/grade-panel.css +1 -0
- package/lib/theme-style/icon.css +1 -0
- package/lib/theme-style/image.css +1 -0
- package/lib/theme-style/img/body_bg.png +0 -0
- package/lib/theme-style/img/pdf.png +0 -0
- package/lib/theme-style/img/title_bg.png +0 -0
- package/lib/theme-style/index.css +1 -0
- package/lib/theme-style/material-list.css +1 -0
- package/lib/theme-style/material-panel.css +1 -0
- package/lib/theme-style/notified-panel.css +1 -0
- package/lib/theme-style/page-render.css +1 -0
- package/lib/theme-style/registration-panel.css +1 -0
- package/lib/theme-style/selector-panel.css +1 -0
- package/lib/theme-style/student-info.css +1 -0
- package/lib/theme-style/switch-student.css +1 -0
- package/lib/theme-style/tips-popup.css +1 -0
- package/lib/theme-style/user-login.css +1 -0
- package/lib/utils/dom.js +60 -0
- package/lib/utils/filters.js +87 -0
- package/lib/utils/merge.js +19 -0
- package/lib/utils/phone.js +156 -0
- package/lib/utils/popup/index.js +132 -0
- package/lib/utils/popup/popup-manager.js +198 -0
- package/lib/utils/storage.js +27 -0
- package/lib/utils/utils.js +65 -0
- package/package.json +80 -0
- package/packages/.DS_Store +0 -0
- package/packages/base/bottom-popup/index.js +10 -0
- package/packages/base/bottom-popup/src/bottom-popup.vue +151 -0
- package/packages/base/button/index.js +10 -0
- package/packages/base/button/src/button.vue +108 -0
- package/packages/base/dialog/index.js +10 -0
- package/packages/base/dialog/src/dialog.vue +173 -0
- package/packages/base/icon/index.js +10 -0
- package/packages/base/icon/src/icon.vue +15 -0
- package/packages/base/image/index.js +10 -0
- package/packages/base/image/src/image.vue +40 -0
- package/packages/base/material-list/index.js +10 -0
- package/packages/base/material-list/src/material-list.vue +48 -0
- package/packages/base/popup/index.js +10 -0
- package/packages/base/popup/src/popup.vue +44 -0
- package/packages/business/basic-image/index.js +10 -0
- package/packages/business/basic-image/src/basicImage.vue +51 -0
- package/packages/business/bottom-fixed-button/index.js +10 -0
- package/packages/business/bottom-fixed-button/src/bottomFixedButton.vue +66 -0
- package/packages/business/class-choose/index.js +10 -0
- package/packages/business/class-choose/src/courseCard.vue +142 -0
- package/packages/business/class-choose/src/img/icon_close_bottomcard.svg +14 -0
- package/packages/business/class-choose/src/img/icon_date.svg +21 -0
- package/packages/business/class-choose/src/img/icon_full.svg +27 -0
- package/packages/business/class-choose/src/img/icon_full_EL.svg +49 -0
- package/packages/business/class-choose/src/img/icon_selected.svg +18 -0
- package/packages/business/class-choose/src/img/icon_star_selected.svg +13 -0
- package/packages/business/class-choose/src/img/icon_star_unselect.svg +13 -0
- package/packages/business/class-choose/src/index.vue +316 -0
- package/packages/business/grade-panel/index.js +10 -0
- package/packages/business/grade-panel/src/gradePanel.vue +150 -0
- package/packages/business/material-panel/index.js +10 -0
- package/packages/business/material-panel/src/index.vue +136 -0
- package/packages/business/notified-panel/index.js +10 -0
- package/packages/business/notified-panel/src/areaCodeList.js +181 -0
- package/packages/business/notified-panel/src/index.vue +491 -0
- package/packages/business/page-render/index.js +10 -0
- package/packages/business/page-render/src/pageRender.vue +73 -0
- package/packages/business/registration-panel/index.js +10 -0
- package/packages/business/registration-panel/src/areaCodeList.js +181 -0
- package/packages/business/registration-panel/src/img/icon_off.png +0 -0
- package/packages/business/registration-panel/src/img/icon_on.png +0 -0
- package/packages/business/registration-panel/src/index.vue +329 -0
- package/packages/business/registration-panel/src/languageList.js +41 -0
- package/packages/business/selector-panel/index.js +10 -0
- package/packages/business/selector-panel/src/selectorPanel.vue +134 -0
- package/packages/business/student-info/index.js +10 -0
- package/packages/business/student-info/src/api/index.js +10 -0
- package/packages/business/student-info/src/config.js +11 -0
- package/packages/business/student-info/src/studentInfo.vue +145 -0
- package/packages/business/switch-student/index.js +10 -0
- package/packages/business/switch-student/src/api/index.js +28 -0
- package/packages/business/switch-student/src/switchStudent.vue +245 -0
- package/packages/business/tips-popup/index.js +10 -0
- package/packages/business/tips-popup/src/tipsPopup.vue +76 -0
- package/packages/business/user-login/index.js +10 -0
- package/packages/business/user-login/src/api/index.js +23 -0
- package/packages/business/user-login/src/img/logo.png +0 -0
- package/packages/business/user-login/src/index.vue +149 -0
- package/packages/theme-style/lib/bottom-fixed-button.css +1 -0
- package/packages/theme-style/lib/bottom-popup.css +1 -0
- package/packages/theme-style/lib/button.css +1 -0
- package/packages/theme-style/lib/class-choose.css +1 -0
- package/packages/theme-style/lib/common.css +1 -0
- package/packages/theme-style/lib/dialog.css +1 -0
- package/packages/theme-style/lib/grade-panel.css +1 -0
- package/packages/theme-style/lib/icon.css +1 -0
- package/packages/theme-style/lib/image.css +1 -0
- package/packages/theme-style/lib/img/body_bg.png +0 -0
- package/packages/theme-style/lib/img/pdf.png +0 -0
- package/packages/theme-style/lib/img/title_bg.png +0 -0
- package/packages/theme-style/lib/index.css +1 -0
- package/packages/theme-style/lib/material-list.css +1 -0
- package/packages/theme-style/lib/material-panel.css +1 -0
- package/packages/theme-style/lib/notified-panel.css +1 -0
- package/packages/theme-style/lib/page-render.css +1 -0
- package/packages/theme-style/lib/registration-panel.css +1 -0
- package/packages/theme-style/lib/selector-panel.css +1 -0
- package/packages/theme-style/lib/student-info.css +1 -0
- package/packages/theme-style/lib/switch-student.css +1 -0
- package/packages/theme-style/lib/tips-popup.css +1 -0
- package/packages/theme-style/lib/user-login.css +1 -0
- package/packages/theme-style/package.json +38 -0
- package/packages/theme-style/src/bottom-fixed-button.scss +31 -0
- package/packages/theme-style/src/bottom-popup.scss +87 -0
- package/packages/theme-style/src/button.scss +110 -0
- package/packages/theme-style/src/class-choose.scss +251 -0
- package/packages/theme-style/src/common/popup.scss +39 -0
- package/packages/theme-style/src/common/var.scss +6 -0
- package/packages/theme-style/src/common.scss +97 -0
- package/packages/theme-style/src/dialog.scss +130 -0
- package/packages/theme-style/src/grade-panel.scss +76 -0
- package/packages/theme-style/src/icon.scss +369 -0
- package/packages/theme-style/src/image.scss +8 -0
- package/packages/theme-style/src/img/body_bg.png +0 -0
- package/packages/theme-style/src/img/pdf.png +0 -0
- package/packages/theme-style/src/img/title_bg.png +0 -0
- package/packages/theme-style/src/index.scss +20 -0
- package/packages/theme-style/src/material-list.scss +118 -0
- package/packages/theme-style/src/material-panel.scss +2 -0
- package/packages/theme-style/src/notified-panel.scss +207 -0
- package/packages/theme-style/src/page-render.scss +3 -0
- package/packages/theme-style/src/registration-panel.scss +158 -0
- package/packages/theme-style/src/selector-panel.scss +86 -0
- package/packages/theme-style/src/student-info.scss +114 -0
- package/packages/theme-style/src/switch-student.scss +176 -0
- package/packages/theme-style/src/tips-popup.scss +60 -0
- package/packages/theme-style/src/user-login.scss +93 -0
- package/src/index.js +74 -0
- package/src/network/api.js +53 -0
- package/src/network/apiUrl.js +65 -0
- package/src/utils/dom.js +54 -0
- package/src/utils/filters.js +82 -0
- package/src/utils/merge.js +16 -0
- package/src/utils/phone.js +153 -0
- package/src/utils/popup/index.js +115 -0
- package/src/utils/popup/popup-manager.js +178 -0
- package/src/utils/storage.js +22 -0
- package/src/utils/utils.js +49 -0
package/src/index.js
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import TsButton from "../packages/base/button";
|
|
2
|
+
import TsImage from "../packages/base/image";
|
|
3
|
+
import TsDialog from "../packages/base/dialog";
|
|
4
|
+
import TsIcon from "../packages/base/icon";
|
|
5
|
+
import TsPopup from "../packages/base/popup";
|
|
6
|
+
import TsBottomPopup from "../packages/base/bottom-popup";
|
|
7
|
+
import TsBasicImage from "../packages/business/basic-image";
|
|
8
|
+
import TsPageRender from "../packages/business/page-render";
|
|
9
|
+
import TsBottomFixedButton from "../packages/business/bottom-fixed-button";
|
|
10
|
+
import TsGradePanel from "../packages/business/grade-panel";
|
|
11
|
+
import TsTipsPopup from "../packages/business/tips-popup";
|
|
12
|
+
import TsSwitchStudent from "../packages/business/switch-student";
|
|
13
|
+
import TsStudentInfo from "../packages/business/student-info";
|
|
14
|
+
import TsUserLogin from "../packages/business/user-login";
|
|
15
|
+
import TsClassChoose from "../packages/business/class-choose";
|
|
16
|
+
import TsMaterialPanel from "../packages/business/material-panel";
|
|
17
|
+
// import TsCourseCard from '../packages/business/course-card';
|
|
18
|
+
import TsSelectorPanel from '../packages/business/selector-panel';
|
|
19
|
+
import TsNotifiedPanel from "../packages/business/notified-panel";
|
|
20
|
+
import TsRegistrationPanel from "../packages/business/registration-panel";
|
|
21
|
+
const components = {
|
|
22
|
+
TsButton,
|
|
23
|
+
TsImage,
|
|
24
|
+
TsDialog,
|
|
25
|
+
TsIcon,
|
|
26
|
+
TsPopup,
|
|
27
|
+
TsBasicImage,
|
|
28
|
+
TsPageRender,
|
|
29
|
+
TsBottomFixedButton,
|
|
30
|
+
TsGradePanel,
|
|
31
|
+
TsTipsPopup,
|
|
32
|
+
TsBottomPopup,
|
|
33
|
+
TsSwitchStudent,
|
|
34
|
+
TsStudentInfo,
|
|
35
|
+
TsUserLogin,
|
|
36
|
+
TsClassChoose,
|
|
37
|
+
TsMaterialPanel,
|
|
38
|
+
TsSelectorPanel,
|
|
39
|
+
TsNotifiedPanel,
|
|
40
|
+
TsRegistrationPanel
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const install = (Vue) => {
|
|
44
|
+
Object.values(components).forEach((component) => {
|
|
45
|
+
Vue.component(component.name, component);
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
if (typeof window !== "undefined" && window.Vue) {
|
|
50
|
+
install(window.Vue);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export default {
|
|
54
|
+
install,
|
|
55
|
+
TsButton,
|
|
56
|
+
TsImage,
|
|
57
|
+
TsDialog,
|
|
58
|
+
TsIcon,
|
|
59
|
+
TsPopup,
|
|
60
|
+
TsBasicImage,
|
|
61
|
+
TsPageRender,
|
|
62
|
+
TsBottomFixedButton,
|
|
63
|
+
TsGradePanel,
|
|
64
|
+
TsTipsPopup,
|
|
65
|
+
TsBottomPopup,
|
|
66
|
+
TsSwitchStudent,
|
|
67
|
+
TsStudentInfo,
|
|
68
|
+
TsUserLogin,
|
|
69
|
+
TsClassChoose,
|
|
70
|
+
TsMaterialPanel,
|
|
71
|
+
TsSelectorPanel,
|
|
72
|
+
TsNotifiedPanel,
|
|
73
|
+
TsRegistrationPanel
|
|
74
|
+
};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description api配置和全局拦截
|
|
3
|
+
* @author bobo <guanbobo@100tal.com>
|
|
4
|
+
* @date 2021-11-06
|
|
5
|
+
*/
|
|
6
|
+
import axios from 'axios';
|
|
7
|
+
// import qs from 'qs';
|
|
8
|
+
// import { removeCookies } from '@thinkacademy/overseas-ui/src/utils/utils';
|
|
9
|
+
|
|
10
|
+
// import oneApi from "./apiUrl";
|
|
11
|
+
|
|
12
|
+
export const config = {
|
|
13
|
+
timeout: 10000,
|
|
14
|
+
// baseURL: 'oneApi.netBaseUrl', process.env.NODE_ENV === development
|
|
15
|
+
withCredentials: true, // 请求是否携带cookie等凭证
|
|
16
|
+
paramsSerializer() {
|
|
17
|
+
// return qs.stringify(params, { arrayFormat: 'brackets' }); // `paramsSerializer` 是一个负责 `params` 序列化的函数
|
|
18
|
+
},
|
|
19
|
+
headers: {
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
"Authorization": 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOjc1OTY1MjUsImNsaWVudFR5cGUiOiJUT1VDSF9XRUJTSVRFIiwiaXNzIjoiVUNFTlRFUiIsImlhdCI6MTYzNjM2MDUwMSwianRpIjoiZmI2NjZmNDcifQ.S2EeKiNWQdvHqhpwwv6bdAwh-floB7jUCQeTr6Q1L-VvaqqK_k6viKDQ8QiSURogjwnlI8YFPMFs3Tg15xV9-0GASQkHLVIQQaEJLXJ1afnr50IST4Edmw-B_m0X_ZrXdt1ymUT-vhnmUAIdTrVrPHFrI7hF65uKs8Gp8IxRQc0'
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export function useInterceptors(netApi) {
|
|
26
|
+
netApi.interceptors.request.use((request) => request);
|
|
27
|
+
netApi.interceptors.response.use(
|
|
28
|
+
(response) => {
|
|
29
|
+
// 业务返回数据
|
|
30
|
+
const resData = response.data || {};
|
|
31
|
+
if (resData.code === 9 || response.status === 403) {
|
|
32
|
+
// 删除token
|
|
33
|
+
// if (!process.server) removeCookies('_official_token');
|
|
34
|
+
}
|
|
35
|
+
return response;
|
|
36
|
+
},
|
|
37
|
+
(error) => Promise.reject(error),
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 生成netApi对象
|
|
43
|
+
* @param configuration api配置
|
|
44
|
+
* @param globalInterceptors 全局拦截器
|
|
45
|
+
* @return {AxiosInstance}
|
|
46
|
+
*/
|
|
47
|
+
function generateNet(configuration, globalInterceptors) {
|
|
48
|
+
const netApi = axios.create(config);
|
|
49
|
+
globalInterceptors(netApi);
|
|
50
|
+
return netApi;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export const net = generateNet(config, useInterceptors);
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
/**
|
|
3
|
+
* API接口地址配置
|
|
4
|
+
*/
|
|
5
|
+
const onePrefix = '/one-api';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* 统一对接server端接口
|
|
9
|
+
* 基础数据: /basic
|
|
10
|
+
* 认证中心(用户中心): /ucenter
|
|
11
|
+
* 班课中心: /course
|
|
12
|
+
* 售卖系统: /shop
|
|
13
|
+
* 教师中心: /teacher
|
|
14
|
+
* 特定聚合接口: /aggregate
|
|
15
|
+
* 配置数据 /config
|
|
16
|
+
* 调转中心 /changeCenter
|
|
17
|
+
*/
|
|
18
|
+
export const oneApi = {
|
|
19
|
+
|
|
20
|
+
// 配置数据
|
|
21
|
+
// ----------------
|
|
22
|
+
// 基础配置数据接口7
|
|
23
|
+
requeryBasicData: `${onePrefix}/config/init`,
|
|
24
|
+
|
|
25
|
+
// 基础数据
|
|
26
|
+
// ----------------
|
|
27
|
+
// 年级查询(全量数据)
|
|
28
|
+
queryGradesAll: `${onePrefix}/basic/client/grade/query`,
|
|
29
|
+
// 年级查询(仅展示数据)
|
|
30
|
+
queryGrades: `${onePrefix}/basic/client/grade/queryWithoutHide`,
|
|
31
|
+
|
|
32
|
+
// 用户中心
|
|
33
|
+
// ----------------
|
|
34
|
+
// 登录验证码发送
|
|
35
|
+
sendLoginMobileCode: `${onePrefix}/ucenter/common/verification/send`,
|
|
36
|
+
// 快捷登录
|
|
37
|
+
commonLogin: `${onePrefix}/ucenter/app/account/quick_login`,
|
|
38
|
+
// 获取用户基础信息
|
|
39
|
+
queryUserBasicInfo: `${onePrefix}/ucenter/basic_info/user/get`,
|
|
40
|
+
|
|
41
|
+
// 售卖子系统
|
|
42
|
+
// ----------------
|
|
43
|
+
// 选课面板接口
|
|
44
|
+
coursePanel: `${onePrefix}/shop/goods/api/coursePanel`,
|
|
45
|
+
|
|
46
|
+
// 营销系统
|
|
47
|
+
// ----------------
|
|
48
|
+
// 老用户
|
|
49
|
+
getInviteOldInfo: `${onePrefix}/activity/api/invite/oldInfo`,
|
|
50
|
+
// 校验老生资格
|
|
51
|
+
checkOld: `${onePrefix}/activity/api/invite/checkOld`,
|
|
52
|
+
// 获取邀请信息
|
|
53
|
+
shareInfo: `${onePrefix}/activity/api/invite/shareInfo/v2`,
|
|
54
|
+
// 老邀新-新用户页面
|
|
55
|
+
getInviteNewInfo: `${onePrefix}/activity/api/invite/newInfo`,
|
|
56
|
+
// 老邀新-新人领券
|
|
57
|
+
getNewerCoupons: `${onePrefix}/activity/api/invite/coupons`,
|
|
58
|
+
|
|
59
|
+
// 数据上报
|
|
60
|
+
dataUpload: `${onePrefix}/data/upload`,
|
|
61
|
+
|
|
62
|
+
// 自定义H5页面相关接口
|
|
63
|
+
getPageScheme: `${onePrefix}/shop/goods/api/project`,
|
|
64
|
+
|
|
65
|
+
}
|
package/src/utils/dom.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/* istanbul ignore next */
|
|
2
|
+
export function hasClass(el, cls) {
|
|
3
|
+
if (!el || !cls) return false;
|
|
4
|
+
if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
|
|
5
|
+
if (el.classList) {
|
|
6
|
+
return el.classList.contains(cls);
|
|
7
|
+
}
|
|
8
|
+
return (` ${el.className} `).indexOf(` ${cls} `) > -1;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* istanbul ignore next */
|
|
12
|
+
export function addClass(el, cls) {
|
|
13
|
+
if (!el) return;
|
|
14
|
+
let curClass = el.className;
|
|
15
|
+
const classes = (cls || '').split(' ');
|
|
16
|
+
|
|
17
|
+
for (let i = 0, j = classes.length; i < j; i += 1) {
|
|
18
|
+
const clsName = classes[i];
|
|
19
|
+
// eslint-disable-next-line no-continue
|
|
20
|
+
if (!clsName) continue;
|
|
21
|
+
|
|
22
|
+
if (el.classList) {
|
|
23
|
+
el.classList.add(clsName);
|
|
24
|
+
} else if (!hasClass(el, clsName)) {
|
|
25
|
+
curClass += ` ${clsName}`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if (!el.classList) {
|
|
29
|
+
el.setAttribute('class', curClass);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* istanbul ignore next */
|
|
34
|
+
export function removeClass(el, cls) {
|
|
35
|
+
if (!el || !cls) return;
|
|
36
|
+
const classes = cls.split(' ');
|
|
37
|
+
let curClass = ` ${el.className} `;
|
|
38
|
+
|
|
39
|
+
for (let i = 0, j = classes.length; i < j; i += 1) {
|
|
40
|
+
const clsName = classes[i];
|
|
41
|
+
// eslint-disable-next-line no-continue
|
|
42
|
+
if (!clsName) continue;
|
|
43
|
+
|
|
44
|
+
if (el.classList) {
|
|
45
|
+
el.classList.remove(clsName);
|
|
46
|
+
} else if (hasClass(el, clsName)) {
|
|
47
|
+
curClass = curClass.replace(` ${clsName} `, ' ');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!el.classList) {
|
|
51
|
+
// eslint-disable-next-line no-undef
|
|
52
|
+
el.setAttribute('class', trim(curClass));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// const moment = require('moment-timezone');
|
|
2
|
+
// /**
|
|
3
|
+
// * 格式化日期
|
|
4
|
+
// * @param {日期} dateStr
|
|
5
|
+
// * @param {日期时间格式化字符串} formatStr
|
|
6
|
+
// */
|
|
7
|
+
// const resourceDateFormate = (timeStamp, zone, formatStr = '') => {
|
|
8
|
+
// let result = '';
|
|
9
|
+
// if (typeof timeStamp === 'number') {
|
|
10
|
+
// result = moment(timeStamp).tz(zone).format(formatStr);
|
|
11
|
+
// } else {
|
|
12
|
+
// result = moment(timeStamp).format(formatStr);
|
|
13
|
+
// }
|
|
14
|
+
|
|
15
|
+
// return result;
|
|
16
|
+
// }
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 货币价格转换
|
|
20
|
+
* @param {price} price
|
|
21
|
+
* @param {minorUnit} minorUnit
|
|
22
|
+
* @param {是否保留两位小数} isKeepTwoDecimal
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const priceUnitConvert = (price, minorUnit, isKeepTwoDecimal = '0') => {
|
|
26
|
+
const newprice = Number(price);
|
|
27
|
+
let result = newprice / minorUnit;
|
|
28
|
+
if (Number(isKeepTwoDecimal) === 1) {
|
|
29
|
+
const resultStr = result.toString();
|
|
30
|
+
const resultDecimal = resultStr.split('.');
|
|
31
|
+
if (resultDecimal.length < 2) {
|
|
32
|
+
// 整数
|
|
33
|
+
result += '.00';
|
|
34
|
+
} else if (resultDecimal.length === 2 && resultDecimal[1].length === 1) {
|
|
35
|
+
// 一位小数
|
|
36
|
+
result += '0';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// /**
|
|
43
|
+
// * 手机号脱敏
|
|
44
|
+
// * @param {phone} phone
|
|
45
|
+
// */
|
|
46
|
+
// const encryptPhone = (phone) => {
|
|
47
|
+
// if (!phone || phone === '') {
|
|
48
|
+
// return ''
|
|
49
|
+
// }
|
|
50
|
+
// if (phone.includes('*')) return phone;
|
|
51
|
+
// // 手机号长度
|
|
52
|
+
// const phoneLen = phone.length;
|
|
53
|
+
|
|
54
|
+
// // 加密长度
|
|
55
|
+
// const encryptLen = Math.floor(phoneLen / 2);
|
|
56
|
+
|
|
57
|
+
// const startIndex = Math.floor((phoneLen - encryptLen) / 2);
|
|
58
|
+
// const endIndex = startIndex + encryptLen;
|
|
59
|
+
|
|
60
|
+
// const startStr = phone.substring(0, startIndex);
|
|
61
|
+
// const endStr = phone.substring(endIndex, phoneLen);
|
|
62
|
+
|
|
63
|
+
// const encryptStr = phone.substring(startIndex, endIndex).replace(/\d|\D/g, '*');
|
|
64
|
+
|
|
65
|
+
// return startStr + encryptStr + endStr;
|
|
66
|
+
// }
|
|
67
|
+
|
|
68
|
+
// /**
|
|
69
|
+
// * 格式化学员卡编号
|
|
70
|
+
// * @param {学员卡编号}} val
|
|
71
|
+
// */
|
|
72
|
+
// const formatCardNo = (val) => {
|
|
73
|
+
// if (!val) return ''
|
|
74
|
+
// return val.replace(/(.{4})/g, '$1 ')
|
|
75
|
+
// }
|
|
76
|
+
|
|
77
|
+
export default {
|
|
78
|
+
// resourceDateFormate,
|
|
79
|
+
priceUnitConvert,
|
|
80
|
+
// encryptPhone,
|
|
81
|
+
// formatCardNo,
|
|
82
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
export default function (target) {
|
|
3
|
+
for (let i = 1, j = arguments.length; i < j; i += 1) {
|
|
4
|
+
const source = arguments[i] || {};
|
|
5
|
+
for (const prop in source) {
|
|
6
|
+
if (source.hasOwnProperty(prop)) {
|
|
7
|
+
const value = source[prop];
|
|
8
|
+
if (value !== undefined) {
|
|
9
|
+
target[prop] = value;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return target;
|
|
16
|
+
}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 手机号相关配置
|
|
3
|
+
* 国际区号配置及对应正则
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export default {
|
|
7
|
+
// 本地默认区号
|
|
8
|
+
localeAreaCode: {
|
|
9
|
+
uk: 44,
|
|
10
|
+
sg: 65,
|
|
11
|
+
us: 1,
|
|
12
|
+
},
|
|
13
|
+
|
|
14
|
+
codeList: [{
|
|
15
|
+
// 美国
|
|
16
|
+
countryName: 'United States',
|
|
17
|
+
countryCode: 'us',
|
|
18
|
+
value: 1,
|
|
19
|
+
reg: /^\d{10}$/,
|
|
20
|
+
}, {
|
|
21
|
+
// 英国
|
|
22
|
+
countryName: 'United Kingdom',
|
|
23
|
+
countryCode: 'uk',
|
|
24
|
+
value: '44',
|
|
25
|
+
reg: /^\d{10}$/,
|
|
26
|
+
}, {
|
|
27
|
+
// 新加坡
|
|
28
|
+
countryName: 'Singapore',
|
|
29
|
+
countryCode: 'sg',
|
|
30
|
+
value: '65',
|
|
31
|
+
reg: /^\d{8}$/,
|
|
32
|
+
}, {
|
|
33
|
+
// 中国
|
|
34
|
+
countryName: 'China',
|
|
35
|
+
countryCode: 'cn',
|
|
36
|
+
value: '86',
|
|
37
|
+
reg: /^\d{11}$/,
|
|
38
|
+
}, {
|
|
39
|
+
// 澳大利亚
|
|
40
|
+
countryName: 'Australia',
|
|
41
|
+
countryCode: 'au',
|
|
42
|
+
value: '61',
|
|
43
|
+
reg: /^\d{10}$/,
|
|
44
|
+
}, {
|
|
45
|
+
// 柬埔寨
|
|
46
|
+
countryName: 'Cambodia',
|
|
47
|
+
countryCode: 'kh',
|
|
48
|
+
value: '855',
|
|
49
|
+
reg: /^\d{10}$/,
|
|
50
|
+
}, {
|
|
51
|
+
// 加拿大
|
|
52
|
+
countryName: 'Canada',
|
|
53
|
+
countryCode: 'ca',
|
|
54
|
+
value: '1',
|
|
55
|
+
reg: /^\d{10}$/,
|
|
56
|
+
}, {
|
|
57
|
+
// 法国
|
|
58
|
+
countryName: 'France',
|
|
59
|
+
countryCode: 'fr',
|
|
60
|
+
value: '33',
|
|
61
|
+
reg: /^\d{10}$/,
|
|
62
|
+
}, {
|
|
63
|
+
// 德国
|
|
64
|
+
countryName: 'Germany',
|
|
65
|
+
countryCode: 'de',
|
|
66
|
+
value: '49',
|
|
67
|
+
reg: /^\d{11}$/,
|
|
68
|
+
}, {
|
|
69
|
+
// 香港
|
|
70
|
+
countryName: 'Hong Kong, China',
|
|
71
|
+
countryCode: 'hk',
|
|
72
|
+
value: '852',
|
|
73
|
+
reg: /^\d{8}$/,
|
|
74
|
+
}, {
|
|
75
|
+
// 印度
|
|
76
|
+
countryName: 'India',
|
|
77
|
+
countryCode: 'in',
|
|
78
|
+
value: '91',
|
|
79
|
+
reg: /^\d{10}$/,
|
|
80
|
+
}, {
|
|
81
|
+
// 印度尼西亚
|
|
82
|
+
countryName: 'Indonesia',
|
|
83
|
+
countryCode: 'id',
|
|
84
|
+
value: '62',
|
|
85
|
+
reg: /^\d{11}$/,
|
|
86
|
+
}, {
|
|
87
|
+
// 爱尔兰
|
|
88
|
+
countryName: 'Ireland',
|
|
89
|
+
countryCode: 'ie',
|
|
90
|
+
value: '353',
|
|
91
|
+
reg: /^\d{9,10}$/,
|
|
92
|
+
}, {
|
|
93
|
+
// 意大利
|
|
94
|
+
countryName: 'Italy',
|
|
95
|
+
countryCode: 'it',
|
|
96
|
+
value: '39',
|
|
97
|
+
reg: /^\d{10}$/,
|
|
98
|
+
}, {
|
|
99
|
+
// 日本
|
|
100
|
+
countryName: 'Japan',
|
|
101
|
+
countryCode: 'jp',
|
|
102
|
+
value: '81',
|
|
103
|
+
reg: /^\d{11}$/,
|
|
104
|
+
}, {
|
|
105
|
+
// 澳门
|
|
106
|
+
countryName: 'Macau, China',
|
|
107
|
+
countryCode: 'mo',
|
|
108
|
+
value: '853',
|
|
109
|
+
reg: /^\d{8}$/,
|
|
110
|
+
}, {
|
|
111
|
+
// 马来西亚
|
|
112
|
+
countryName: 'Malaysia',
|
|
113
|
+
countryCode: 'ms',
|
|
114
|
+
value: '60',
|
|
115
|
+
reg: /^\d{8,10}$/,
|
|
116
|
+
}, {
|
|
117
|
+
// 挪威
|
|
118
|
+
countryName: 'Norway',
|
|
119
|
+
countryCode: 'no',
|
|
120
|
+
value: '47',
|
|
121
|
+
reg: /^\d{8}$/,
|
|
122
|
+
}, {
|
|
123
|
+
// 波兰
|
|
124
|
+
countryName: 'Poland',
|
|
125
|
+
countryCode: 'pl',
|
|
126
|
+
value: '48',
|
|
127
|
+
reg: /^\d{9}$/,
|
|
128
|
+
}, {
|
|
129
|
+
// 韩国
|
|
130
|
+
countryName: 'South Korea',
|
|
131
|
+
countryCode: 'kr',
|
|
132
|
+
value: '82',
|
|
133
|
+
reg: /^\d{11}$/,
|
|
134
|
+
}, {
|
|
135
|
+
// 西班牙
|
|
136
|
+
countryName: 'Spain',
|
|
137
|
+
countryCode: 'es',
|
|
138
|
+
value: '34',
|
|
139
|
+
reg: /^\d{9}$/,
|
|
140
|
+
}, {
|
|
141
|
+
// 泰国
|
|
142
|
+
countryName: 'Thailand',
|
|
143
|
+
countryCode: 'th',
|
|
144
|
+
value: '66',
|
|
145
|
+
reg: /^\d{10}$/,
|
|
146
|
+
}, {
|
|
147
|
+
// 阿联酋
|
|
148
|
+
countryName: 'United Arab Emirates',
|
|
149
|
+
countryCode: 'ae',
|
|
150
|
+
value: '971',
|
|
151
|
+
reg: /^\d{9,10}$/,
|
|
152
|
+
}],
|
|
153
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import Vue from 'vue';
|
|
2
|
+
import merge from '../merge';
|
|
3
|
+
import PopupManager from './popup-manager';
|
|
4
|
+
|
|
5
|
+
let idSeed = 1;
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
props: {
|
|
9
|
+
visible: {
|
|
10
|
+
type: Boolean,
|
|
11
|
+
default: false,
|
|
12
|
+
},
|
|
13
|
+
// 点击蒙层时关闭
|
|
14
|
+
closeOnClickModal: {
|
|
15
|
+
type: Boolean,
|
|
16
|
+
default: false,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
data() {
|
|
20
|
+
return {
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
watch: {
|
|
24
|
+
visible(val) {
|
|
25
|
+
if (val) {
|
|
26
|
+
if (this._opening) return;
|
|
27
|
+
if (!this.rendered) {
|
|
28
|
+
this.rendered = true;
|
|
29
|
+
Vue.nextTick(() => {
|
|
30
|
+
this.open();
|
|
31
|
+
});
|
|
32
|
+
} else {
|
|
33
|
+
this.open();
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
36
|
+
this.close();
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
beforeMount() {
|
|
41
|
+
// 组件渲染前
|
|
42
|
+
this._popupId = `popup-${idSeed += 1}`;
|
|
43
|
+
PopupManager.register(this._popupId, this);
|
|
44
|
+
},
|
|
45
|
+
beforeDestory() {
|
|
46
|
+
// 组件销毁前
|
|
47
|
+
PopupManager.deregister(this._popupId);
|
|
48
|
+
PopupManager.closeModal()
|
|
49
|
+
},
|
|
50
|
+
methods: {
|
|
51
|
+
open(options) {
|
|
52
|
+
console.log('open dialog')
|
|
53
|
+
const props = merge({}, this.$props || this, options);
|
|
54
|
+
this.doOpen(props)
|
|
55
|
+
},
|
|
56
|
+
doOpen(props) {
|
|
57
|
+
console.log('do open')
|
|
58
|
+
if (this.$isServer) return;
|
|
59
|
+
if (this.opened) return;
|
|
60
|
+
|
|
61
|
+
console.log('do opening')
|
|
62
|
+
|
|
63
|
+
this._opening = true;
|
|
64
|
+
|
|
65
|
+
const dom = this.$el;
|
|
66
|
+
|
|
67
|
+
const { modal } = props;
|
|
68
|
+
|
|
69
|
+
const { zIndex } = props;
|
|
70
|
+
|
|
71
|
+
if (zIndex) {
|
|
72
|
+
PopupManager.zIndex = zIndex;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// 显示遮罩层
|
|
76
|
+
if (modal) {
|
|
77
|
+
if (this._closing) {
|
|
78
|
+
PopupManager.closeModal(this._popupId);
|
|
79
|
+
this._closing = false;
|
|
80
|
+
}
|
|
81
|
+
PopupManager.openModal(this._popupId, PopupManager.nextZIndex(), this.modalAppendToBody ? undefined : dom, props.modalClass, props.modalFade);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
dom.style.zIndex = PopupManager.nextZIndex();
|
|
85
|
+
this.opened = true;
|
|
86
|
+
|
|
87
|
+
if (this.onOpen) this.onOpen();
|
|
88
|
+
|
|
89
|
+
this.doAfterOpen();
|
|
90
|
+
},
|
|
91
|
+
doAfterOpen() {
|
|
92
|
+
this._opening = false;
|
|
93
|
+
},
|
|
94
|
+
close() {
|
|
95
|
+
this.doClose();
|
|
96
|
+
},
|
|
97
|
+
doClose() {
|
|
98
|
+
this._closing = true;
|
|
99
|
+
|
|
100
|
+
if (this.onClose) this.onClose();
|
|
101
|
+
|
|
102
|
+
// if (this.lockScroll) {
|
|
103
|
+
// setTimeout(this.restoreBodyStyle, 200);
|
|
104
|
+
// }
|
|
105
|
+
|
|
106
|
+
this.opened = false;
|
|
107
|
+
|
|
108
|
+
this.doAfterClose();
|
|
109
|
+
},
|
|
110
|
+
doAfterClose() {
|
|
111
|
+
PopupManager.closeModal(this._popupId);
|
|
112
|
+
this._closing = false;
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
}
|