fhrons-mobile-next 2.0.0 → 2.0.2
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/.env.poc +8 -0
- package/assets/css/colors.js +6 -0
- package/assets/css/customVant.less +60 -0
- package/assets/css/extra.css +32 -0
- package/assets/css/global.css +1 -0
- package/assets/css/global.less +1637 -0
- package/assets/css/index.js +63 -0
- package/assets/css/static.less +607 -0
- package/assets/js/func.js +361 -0
- package/assets/js/globalData.js +18 -0
- package/assets/js/qywxapi.js +484 -0
- package/{packages → assets/js}/storage.js +1 -20
- package/assets/js/upload.js +269 -0
- package/assets/js/validate.js +48 -0
- package/assets/js/vant.js +39 -0
- package/assets/js/wxapi.js +297 -0
- package/assets/vantLang/index.js +172 -0
- package/assets/vantLang/lib/en-US.js +95 -0
- package/assets/vantLang/lib/es-ES.js +95 -0
- package/assets/vantLang/lib/pt-PT.js +96 -0
- package/assets/vantLang/lib/zh-CN.js +96 -0
- package/assets/vantLang/lib/zh-HK.js +96 -0
- package/assets/vantLang/locales/en_US.js +102 -0
- package/assets/vantLang/locales/es_ES.js +102 -0
- package/assets/vantLang/locales/index.js +12 -0
- package/assets/vantLang/locales/pt_PT.js +102 -0
- package/assets/vantLang/locales/zh_CN.js +102 -0
- package/assets/vantLang/locales/zh_T.js +102 -0
- package/babel.config.js +15 -0
- package/index.js +68 -33
- package/inject-env-plugin.js +29 -0
- package/package.json +46 -32
- package/packages/areaMobile/index.js +5 -0
- package/packages/areaMobile/index.vue +260 -0
- package/packages/autoGraph/VueEsign.vue +309 -0
- package/packages/autoGraph/index.js +5 -0
- package/packages/autoGraph/index.vue +472 -0
- package/packages/commonForm/CommonAsyncAreaPicker.vue +223 -0
- package/packages/commonForm/CommonDatePicker.vue +152 -0
- package/packages/commonForm/CommonForm.vue +786 -0
- package/packages/commonForm/CommonFullTimePicker.vue +137 -0
- package/packages/commonForm/CommonSinglePicker.vue +121 -0
- package/packages/commonForm/CommonYearMonthPicker.vue +127 -0
- package/packages/commonForm/index.js +33 -0
- package/packages/dialog/index.js +32 -0
- package/packages/dialog/index.vue +379 -0
- package/packages/index.js +7 -3
- package/packages/introduce/index.js +5 -0
- package/packages/introduce/index.vue +31 -0
- package/packages/loading/Loading.vue +70 -0
- package/packages/loading/index.js +43 -0
- package/packages/mindMap/index.js +5 -0
- package/packages/mindMap/index.vue +437 -0
- package/packages/pdfViewer/index.js +12 -0
- package/packages/pdfViewer/index.vue +131 -0
- package/packages/sharePanel/SheetPanel.vue +316 -0
- package/packages/sharePanel/index.js +5 -0
- package/packages/sharePanel/index.vue +476 -0
- package/packages/sharePanel/props.js +58 -0
- package/packages/sharePanel/utils/QyWxShareMixin.js +93 -0
- package/packages/sharePanel/utils/shareWay.js +81 -0
- package/packages/theme/index copy.js +89 -0
- package/packages/theme/index.js +38 -0
- package/packages/theme/theme.css +910 -0
- package/packages/theme/theme.less +26 -0
- package/packages/uploadFile/VanUploadFile.vue +80 -0
- package/packages/uploadFile/index.js +5 -0
- package/packages/uploadFile/index.vue +725 -0
- package/packages/uploadFile/vanUpload.js +5 -0
- package/packages/verify/Verify/VerifyPoints.vue +247 -0
- package/packages/verify/Verify/VerifySlide.vue +364 -0
- package/packages/verify/index.js +5 -0
- package/packages/verify/index.vue +416 -0
- package/packages/verify/utils/verify.js +53 -0
- package/packages/videoPage/index.js +5 -0
- package/packages/videoPage/index.vue +440 -0
- package/plugins/sensors/fhsensors.js +84 -0
- package/plugins/sensors/sensors.js +175 -0
- package/plugins/sensors/sensorsFun.js +1387 -0
- package/fhrons-mobile-next-2.0.0.tgz +0 -0
- package/packages/fhImage/index.js +0 -5
- package/packages/fhImage/index.vue +0 -57
- package/packages/fhPresetImage/index.js +0 -5
- package/packages/fhPresetImage/index.vue +0 -39
- package/packages/html2canvas/index.js +0 -29
- package/upload copy.js +0 -468
- package/utils/tools.js +0 -22
- /package/{dist → fhcommon/dist}/fhcommon.min.js +0 -0
- /package/{dist → fhcommon/dist}/fhcommon.min.js.LICENSE.txt +0 -0
- /package/{upload.js → fhcommon/upload.js} +0 -0
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
|
|
2
|
+
if (!window.axios) {
|
|
3
|
+
loadJavaScript('https://scrm-pro-1251973116.file.myqcloud.com/funzg/form/axios.js', () => {
|
|
4
|
+
console.log('axios 加载成功');
|
|
5
|
+
});
|
|
6
|
+
}
|
|
7
|
+
if (!window.AWS) {
|
|
8
|
+
loadJavaScript('https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/aws-sdk-2.1562.0.min.js', () => {
|
|
9
|
+
console.log('aws-sdk 加载成功');
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
if (!window.COS) {
|
|
13
|
+
loadJavaScript('https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/cos-js-sdk-v5.min.js', () => {
|
|
14
|
+
console.log('腾讯cos 加载成功');
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
if (!window.lrz) {
|
|
18
|
+
loadJavaScript('https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/lrz.all.bundle.min.js', () => {
|
|
19
|
+
console.log('lrz加载成功');
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* 第一个参数的可选属性
|
|
25
|
+
* @param {Blob} file 要上传的文件
|
|
26
|
+
* @param {String} target 要上传的目标云,类型:0大陆环境/1港险环境
|
|
27
|
+
* @param {String} project 所属项目:0全局,1课程,2开放平台,4:scrm 5:营销 6:frcdap
|
|
28
|
+
* @param {Function} keyFunc 生成key的方法
|
|
29
|
+
* @param {Boolean} needWholeRes 是否需要返回完整的响应体
|
|
30
|
+
*
|
|
31
|
+
* 第二个参数
|
|
32
|
+
* @param {Function} onProgress 接收上传进度的回调
|
|
33
|
+
* @returns Link 上传完成后的图片链接
|
|
34
|
+
*
|
|
35
|
+
* 例:
|
|
36
|
+
* const param = {
|
|
37
|
+
* file, target = 'tencent', project = '0', keyFunc
|
|
38
|
+
* }
|
|
39
|
+
* upload(param,(percent)=>{
|
|
40
|
+
* console.log(percent) // 输出上传进度的百分比
|
|
41
|
+
* })
|
|
42
|
+
*/
|
|
43
|
+
const upload = function ({ file, target, project = '0', keyFunc, needWholeRes }, onProgress) {
|
|
44
|
+
const defaultTarget = (location.origin.includes('https://smnguat.fhrons.net') || location.origin.includes('https://openuat.fhrons.net') || location.origin.includes('https://smng.avantech.io') || location.origin.includes('https://open.avantech.io') || process.env.VUE_APP_ENV_CONFIG && process.env.VUE_APP_ENV_CONFIG.includes('hk') || process.env.VUE_APP_ENV_CONFIG && process.env.VUE_APP_ENV_CONFIG === 'poc') ? 'amazon' : 'tencent';
|
|
45
|
+
target = target || defaultTarget;
|
|
46
|
+
if (!file) {
|
|
47
|
+
console.error('上传的文件不能为空');
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (file.raw) file = file.raw;
|
|
51
|
+
target = target === 'tencent' ? '0' : '1'; // 根据传进来的target转换
|
|
52
|
+
const filename = file.name;
|
|
53
|
+
const appName = process.env.VUE_APP_NAME || 'common';
|
|
54
|
+
if (typeof keyFunc !== 'function' || (typeof keyFunc === 'function' && !keyFunc())) keyFunc = () => '/' + appName + '/uploadfile_' + new Date().valueOf() + filename;
|
|
55
|
+
let newKey = keyFunc();
|
|
56
|
+
newKey = removeLeadingSlash(newKey);
|
|
57
|
+
return axios.get(`/funapi/config/oss/sign/${target}/${project}`).then(res => {
|
|
58
|
+
const { tmpSecretId, tmpSecretKey, token, sessionToken, startTime, expiredTime, requestId, type, bucketName, region, cdnUrl } = res.data || res;
|
|
59
|
+
/**
|
|
60
|
+
* @tmpSecretId 临时访问密钥的标识符。
|
|
61
|
+
* @tmpSecretKey 临时访问密钥的密钥。
|
|
62
|
+
* @type 0腾讯/1亚马逊 字符串格式
|
|
63
|
+
* @startTime 腾讯使用的字段,开始时间
|
|
64
|
+
* @expiredTime 腾讯使用的字段,过期时间
|
|
65
|
+
* @bucketName 存储桶名称
|
|
66
|
+
* @cdnUrl cdn链接的前缀
|
|
67
|
+
* @region 存储区域
|
|
68
|
+
*/
|
|
69
|
+
if (type === '1') { // 亚马逊
|
|
70
|
+
AWS.config.update({
|
|
71
|
+
accessKeyId: tmpSecretId,
|
|
72
|
+
secretAccessKey: tmpSecretKey,
|
|
73
|
+
region: region,
|
|
74
|
+
sessionToken: token
|
|
75
|
+
});
|
|
76
|
+
const s3 = new AWS.S3();
|
|
77
|
+
const params = {
|
|
78
|
+
Bucket: bucketName,
|
|
79
|
+
Key: newKey,
|
|
80
|
+
ContentType: type,
|
|
81
|
+
Body: file,
|
|
82
|
+
'Access-Control-Allow-Credentials': '*'
|
|
83
|
+
};
|
|
84
|
+
const upload = s3.upload(params);
|
|
85
|
+
upload.on('httpUploadProgress', (progress) => {
|
|
86
|
+
const { loaded, total } = progress;
|
|
87
|
+
/* 非必须 */
|
|
88
|
+
const percent = Math.round(parseInt(loaded / total) * 100);
|
|
89
|
+
if (typeof onProgress === 'function') onProgress(percent);
|
|
90
|
+
});
|
|
91
|
+
const uploadPromise = upload.promise();
|
|
92
|
+
return uploadPromise.then(res => {
|
|
93
|
+
const { key, Key } = res;
|
|
94
|
+
console.log(res);
|
|
95
|
+
// const tempUrl = (key.startsWith('/') ? '' : '/');
|
|
96
|
+
if (needWholeRes) {
|
|
97
|
+
return {
|
|
98
|
+
...res,
|
|
99
|
+
fileUrl: `${cdnUrl}/${key || Key}`
|
|
100
|
+
};
|
|
101
|
+
} return `${cdnUrl}/${key || Key}`;
|
|
102
|
+
}).catch(err => {
|
|
103
|
+
console.log(err);
|
|
104
|
+
}).finally(_ => {
|
|
105
|
+
});
|
|
106
|
+
} // 腾讯 如果没有type 则默认使用腾讯上传
|
|
107
|
+
const cos = new COS({
|
|
108
|
+
getAuthorization: function (options, callback) {
|
|
109
|
+
callback({
|
|
110
|
+
TmpSecretId: tmpSecretId,
|
|
111
|
+
TmpSecretKey: tmpSecretKey,
|
|
112
|
+
XCosSecurityToken: sessionToken,
|
|
113
|
+
StartTime: startTime,
|
|
114
|
+
ExpiredTime: expiredTime,
|
|
115
|
+
requestId: requestId,
|
|
116
|
+
SecurityToken: token
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
return cos.sliceUploadFile(
|
|
121
|
+
{
|
|
122
|
+
Bucket: bucketName /* 必须 */,
|
|
123
|
+
Region: region /* 存储桶所在地域,必须字段 */,
|
|
124
|
+
Key: newKey /* 必须 */,
|
|
125
|
+
StorageClass: 'STANDARD',
|
|
126
|
+
Body: file, // 上传文件对象
|
|
127
|
+
onProgress: progressData => {
|
|
128
|
+
console.log(progressData);
|
|
129
|
+
const { loaded, total, percent, speed } = progressData;
|
|
130
|
+
const per = Math.round(parseInt(percent * 100));
|
|
131
|
+
if (typeof onProgress === 'function') onProgress(per);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
).then(data => {
|
|
135
|
+
console.log(data);
|
|
136
|
+
const { key, Key } = data;
|
|
137
|
+
const tempUrl = (Key.startsWith('/') ? '' : '/');
|
|
138
|
+
if (needWholeRes) {
|
|
139
|
+
return {
|
|
140
|
+
...res,
|
|
141
|
+
fileUrl: `${cdnUrl}${tempUrl}${key || Key}`
|
|
142
|
+
};
|
|
143
|
+
} return `${cdnUrl}${tempUrl}${key || Key}`;
|
|
144
|
+
}).catch(err => {
|
|
145
|
+
console.log(err);
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export default upload;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @param {Blob} file 上传的图片文件
|
|
154
|
+
* @param {Number} quality 压缩质量
|
|
155
|
+
* @returns 返回压缩后的图片文件
|
|
156
|
+
*/
|
|
157
|
+
// 压缩文件
|
|
158
|
+
export const compressFile = async function (file, quality) {
|
|
159
|
+
file = file.raw ? file.raw : file;
|
|
160
|
+
// const imageCompressor = new Compressor();
|
|
161
|
+
try {
|
|
162
|
+
let reFile = '';
|
|
163
|
+
const rst = await lrz(file, {
|
|
164
|
+
quality: quality // 图片压缩质量,取值0-1,默认为0.7
|
|
165
|
+
});
|
|
166
|
+
// const rst = new Compressor(file);
|
|
167
|
+
reFile = new File([rst.file], file.name, { type: 'image/jpeg', lastModified: Date.now() });
|
|
168
|
+
return reFile;
|
|
169
|
+
} catch (error) {
|
|
170
|
+
return '';
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @param {Blob} file 上传的图片文件
|
|
176
|
+
* @param {Number} size 指定压缩后的图片大小
|
|
177
|
+
* @param {Number} quality 压缩质量
|
|
178
|
+
* @returns 返回压缩后的图片文件
|
|
179
|
+
*/
|
|
180
|
+
// 循环压缩
|
|
181
|
+
export const loopCompressFile = async function (file, size, quality) {
|
|
182
|
+
// let reFile = file;
|
|
183
|
+
const reFile = await compressFile(file, quality);
|
|
184
|
+
if (reFile.size > size) {
|
|
185
|
+
compressFile(reFile, quality);
|
|
186
|
+
}
|
|
187
|
+
return reFile;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
// 判断html文档中是否有重复引用的标签
|
|
191
|
+
/**
|
|
192
|
+
* @param {String} src 要检查的引用地址
|
|
193
|
+
*/
|
|
194
|
+
export function chectDuplicateScript (src) {
|
|
195
|
+
let result = false;
|
|
196
|
+
// 获取文档中所有的script标签
|
|
197
|
+
const scriptTags = document.getElementsByTagName('script');
|
|
198
|
+
// 创建一个存储已经出现过的URL集合
|
|
199
|
+
const scriptURLs = new Set();
|
|
200
|
+
// 遍历所有的tag 标签
|
|
201
|
+
for (let i = 0; i < scriptTags.length; i++) {
|
|
202
|
+
const currentSrc = scriptTags[i].getAttribute('src');
|
|
203
|
+
if (currentSrc && currentSrc === src) {
|
|
204
|
+
if (scriptURLs.has(currentSrc)) {
|
|
205
|
+
// console.log('重复引用,引用地址为', currentSrc);
|
|
206
|
+
result = true;
|
|
207
|
+
} else {
|
|
208
|
+
scriptURLs.add(currentSrc);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (scriptURLs.size === 0) {
|
|
213
|
+
result = false;
|
|
214
|
+
// console.log('没有重复引用', src);
|
|
215
|
+
}
|
|
216
|
+
return result;
|
|
217
|
+
}
|
|
218
|
+
// 动态引入JS文件
|
|
219
|
+
function loadJavaScript (src, callback) {
|
|
220
|
+
if (chectDuplicateScript(src)) return;
|
|
221
|
+
const script = document.createElement('script');
|
|
222
|
+
const head = document.getElementsByTagName('head')[0];
|
|
223
|
+
script.type = 'text/javascript';
|
|
224
|
+
script.charset = 'UTF-8';
|
|
225
|
+
script.src = src;
|
|
226
|
+
window.onerror = () => {
|
|
227
|
+
console.log(`loadJavaScript加载${src}失败`);
|
|
228
|
+
};
|
|
229
|
+
if (script.addEventListener) {
|
|
230
|
+
script.addEventListener('load', function () {
|
|
231
|
+
callback();
|
|
232
|
+
}, false);
|
|
233
|
+
} else if (script.attachEvent) {
|
|
234
|
+
script.attachEvent('onreadystatechange', function () {
|
|
235
|
+
const target = window.event.srcElement;
|
|
236
|
+
if (target.readyState === 'loaded' || script.readState === 'complate') {
|
|
237
|
+
callback();
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
script.addEventListener('error', (e) => {
|
|
242
|
+
if (!isEmpty(e)) {
|
|
243
|
+
callback('err');
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
if (src) {
|
|
247
|
+
// 如果src不存在,不加入到项目里面去,否则会报加载资源失败
|
|
248
|
+
head.appendChild(script);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* 为空
|
|
253
|
+
* @param val
|
|
254
|
+
* @returns {boolean}
|
|
255
|
+
*/
|
|
256
|
+
function isEmpty (val) {
|
|
257
|
+
if (val === null || val === undefined || (typeof val === 'string' && (val === '' || val === 'undefined' || val === 'null')) || (Array.isArray(val) && val.length === 0) || (Object.prototype.toString.call(val) === '[object Object]' && Object.keys(val).length === 0)) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
function removeLeadingSlash (str) {
|
|
264
|
+
if (str.startsWith('/')) {
|
|
265
|
+
return str.substring(1); // 返回去掉斜杠后的值
|
|
266
|
+
}
|
|
267
|
+
return str; // 如果字符串不以斜杠开头,则返回原始字符串
|
|
268
|
+
}
|
|
269
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* 校验设备环境 */
|
|
2
|
+
export function isWeiXin() {
|
|
3
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
4
|
+
if (ua.match(/MicroMessenger/i) == 'micromessenger' && (ua.match(/wxwork/i) != 'wxwork')) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export function isIOS() {
|
|
11
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
12
|
+
if (ua.match(/iphone|ipad|ipod/)) {
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function isAndroid() {
|
|
19
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
20
|
+
if (ua.match(/android/)) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function isQYWeiXin() {
|
|
27
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
28
|
+
if ((ua.match(/MicroMessenger/i) == 'micromessenger') && (ua.match(/wxwork/i) == 'wxwork')) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function isApp() {
|
|
35
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
36
|
+
if (ua.match(/iphone|ipad|ipod|android/)) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function isQQ() {
|
|
43
|
+
var ua = window.navigator.userAgent.toLowerCase();
|
|
44
|
+
if (ua.match(/QQ\//i) === 'qq/') {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// import { loadJavaScript, loadStyleLink } from './func'
|
|
2
|
+
// // import Vue from 'vue'
|
|
3
|
+
// // window.Vue = Vue
|
|
4
|
+
|
|
5
|
+
// function loadVant () {
|
|
6
|
+
// if (!window.vant) {
|
|
7
|
+
// loadJavaScript('https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/vant@2.13.2.min.js', function (str) {
|
|
8
|
+
// console.log(window.vant, '-----------------------------------------', str)
|
|
9
|
+
// Vue.use(window.vant)
|
|
10
|
+
// // 初始化toast配置
|
|
11
|
+
// vant.Toast.setDefaultOptions({ duration: 2000 });
|
|
12
|
+
// const prototypes = {
|
|
13
|
+
// $toast: vant.Toast
|
|
14
|
+
// // $dialog: Dialog
|
|
15
|
+
// };
|
|
16
|
+
// Object.keys(prototypes).forEach(key => {
|
|
17
|
+
// const value = prototypes[key];
|
|
18
|
+
// Object.defineProperty(Vue.prototype, key, {
|
|
19
|
+
// value
|
|
20
|
+
// });
|
|
21
|
+
// });
|
|
22
|
+
// loadStyleLink('https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/vant%402.12index.css', (str) => {
|
|
23
|
+
// console.log('加载vant样式', str)
|
|
24
|
+
// })
|
|
25
|
+
// })
|
|
26
|
+
// }
|
|
27
|
+
// }
|
|
28
|
+
|
|
29
|
+
// function loadVue () {
|
|
30
|
+
// if (!window.Vue) {
|
|
31
|
+
// loadJavaScript(`https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/${loaction.origin.includes('localhost') ? 'vue.js' : 'vue.min.js'}`, function (str) {
|
|
32
|
+
// console.log('备用vue加载成功')
|
|
33
|
+
// loadVant()
|
|
34
|
+
// })
|
|
35
|
+
// } else {
|
|
36
|
+
// loadVant()
|
|
37
|
+
// }
|
|
38
|
+
// }
|
|
39
|
+
// loadVue()
|
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
// import wx from "weixin-js-sdk";
|
|
4
|
+
import { getStorage, setStorage } from './storage';
|
|
5
|
+
import { isBase64, loadJavaScript, getSystemName } from "./func";
|
|
6
|
+
|
|
7
|
+
if (!window["wx"]) {
|
|
8
|
+
loadJavaScript("https://dop-pro-1251973116.file.myqcloud.com/upload/jsfile/funzg/jweixin-1.6.0.js").then(() => {
|
|
9
|
+
console.log("weixin-js-sdk 加载成功", wx);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
const wxApi = {
|
|
13
|
+
wxShare (params = {}) {
|
|
14
|
+
return new Promise((resolve, reject) => {
|
|
15
|
+
if (/iPhone|mac|iPod|iPad/i.test(navigator.userAgent)) {
|
|
16
|
+
this.url = params.firUrl || (getStorage({ key: getSystemName() + 'firUrl' }) || {}).content;
|
|
17
|
+
} else {
|
|
18
|
+
this.url = window.location.href;
|
|
19
|
+
}
|
|
20
|
+
const { loginResponseDO = {} } = getStorage({ commonKey: 'userGlobalGist' }) || {};
|
|
21
|
+
const saasId = params.saasId || loginResponseDO.saasId || '000000'; // 000000 表示元租户
|
|
22
|
+
const appId = params.appId || (getStorage({ key: getSystemName() + 'appId' }) || {}).content;
|
|
23
|
+
let _data = {
|
|
24
|
+
url: this.url,
|
|
25
|
+
saasId,
|
|
26
|
+
appId
|
|
27
|
+
};
|
|
28
|
+
if (_data && _data.url && _data.saasId && _data.appId) {
|
|
29
|
+
axios.post('/funapi/cbsmh/mh/mhThirdService/getWxSign', _data).then((res) => {
|
|
30
|
+
if (res.status == 'SUCCESS') {
|
|
31
|
+
setStorage({ name: 'firUrl', content: window.location.href });
|
|
32
|
+
wx.config({
|
|
33
|
+
debug: false, // 开启调试模式s
|
|
34
|
+
appId, // 必填,公众号的唯一标识
|
|
35
|
+
timestamp: res && res.data && res.data.timestamp, // 必填,生成签名的时间戳
|
|
36
|
+
nonceStr: res && res.data && res.data.nonceStr, // 必填,生成签名的随机串
|
|
37
|
+
signature: res && res.data && res.data.signature, // 必填,签名
|
|
38
|
+
jsApiList: [
|
|
39
|
+
"wx-open-launch-weapp",
|
|
40
|
+
"getLocation",
|
|
41
|
+
"openLocation",
|
|
42
|
+
"checkJsApi",
|
|
43
|
+
"hideMenuItems",
|
|
44
|
+
"showMenuItems",
|
|
45
|
+
"showOptionMenu",
|
|
46
|
+
"hideOptionMenu",
|
|
47
|
+
"updateAppMessageShareData",
|
|
48
|
+
"updateTimelineShareData",
|
|
49
|
+
"onMenuShareAppMessage",
|
|
50
|
+
"onMenuShareTimeline",
|
|
51
|
+
"chooseImage",
|
|
52
|
+
"getLocalImgData"
|
|
53
|
+
], // 必填,需要使用的JS接口列表
|
|
54
|
+
openTagList: ["wx-open-launch-weapp"],
|
|
55
|
+
});
|
|
56
|
+
wx.ready(function () {
|
|
57
|
+
wx.checkJsApi({
|
|
58
|
+
jsApiList: [
|
|
59
|
+
"showMenuItems",
|
|
60
|
+
"hideMenuItems",
|
|
61
|
+
"showOptionMenu",
|
|
62
|
+
"hideOptionMenu",
|
|
63
|
+
],
|
|
64
|
+
success: function () {
|
|
65
|
+
let showMenus = ["menuItem:share:appMessage", "menuItem:share:timeline"]
|
|
66
|
+
let hideMenus = [
|
|
67
|
+
"menuItem:share:qq",
|
|
68
|
+
"menuItem:share:weiboApp",
|
|
69
|
+
"menuItem:share:facebook",
|
|
70
|
+
"menuItem:share:QZone",
|
|
71
|
+
"menuItem:copyUrl",
|
|
72
|
+
"menuItem:openWithQQBrowser",
|
|
73
|
+
"menuItem:openWithSafari",
|
|
74
|
+
"menuItem:share:email",
|
|
75
|
+
"menuItem:share:brand",
|
|
76
|
+
]
|
|
77
|
+
if (params.isHideOptionMenu) {
|
|
78
|
+
wx.hideOptionMenu();
|
|
79
|
+
} else {
|
|
80
|
+
wx.showOptionMenu()
|
|
81
|
+
wx.showMenuItems({
|
|
82
|
+
menuList: showMenus, // 要显示的菜单项,所有menu项见附录3
|
|
83
|
+
});
|
|
84
|
+
// 隐藏掉部分按钮
|
|
85
|
+
wx.hideMenuItems({
|
|
86
|
+
menuList: hideMenus,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|
|
91
|
+
})
|
|
92
|
+
wx.error(function (error) {
|
|
93
|
+
console.error("------wx.error:----------:", error);
|
|
94
|
+
});
|
|
95
|
+
resolve(true);
|
|
96
|
+
} else {
|
|
97
|
+
reject(false);
|
|
98
|
+
}
|
|
99
|
+
}).catch(() => {
|
|
100
|
+
reject(false);
|
|
101
|
+
});
|
|
102
|
+
} else {
|
|
103
|
+
reject(false);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
|
|
110
|
+
* [wxRegister 微信Api初始化]
|
|
111
|
+
* @param {Function} callback [ready回调函数]
|
|
112
|
+
*/
|
|
113
|
+
wxRegister (option = {}) {
|
|
114
|
+
if (!option.link) return;
|
|
115
|
+
|
|
116
|
+
//data是微信配置信息,option是分享的配置内容
|
|
117
|
+
wx.ready(function () {
|
|
118
|
+
// 判断当前客户端版本是否支持指定JS接口
|
|
119
|
+
wx.checkJsApi({
|
|
120
|
+
jsApiList: [
|
|
121
|
+
"showMenuItems",
|
|
122
|
+
"onMenuShareAppMessage",
|
|
123
|
+
"onMenuShareTimeline",
|
|
124
|
+
"updateTimelineShareData",
|
|
125
|
+
"hideMenuItems",
|
|
126
|
+
"showOptionMenu",
|
|
127
|
+
"hideOptionMenu",
|
|
128
|
+
"updateAppMessageShareData",
|
|
129
|
+
],
|
|
130
|
+
success: function () {
|
|
131
|
+
if (option.hasOwnProperty('isHideOptionMenu')) {
|
|
132
|
+
let showMenus = ["menuItem:share:appMessage", "menuItem:share:timeline"]
|
|
133
|
+
let hideMenus = [
|
|
134
|
+
"menuItem:share:qq",
|
|
135
|
+
"menuItem:share:weiboApp",
|
|
136
|
+
"menuItem:share:facebook",
|
|
137
|
+
"menuItem:share:QZone",
|
|
138
|
+
"menuItem:copyUrl",
|
|
139
|
+
"menuItem:openWithQQBrowser",
|
|
140
|
+
"menuItem:openWithSafari",
|
|
141
|
+
"menuItem:share:email",
|
|
142
|
+
"menuItem:share:brand",
|
|
143
|
+
]
|
|
144
|
+
if (option.isHideOptionMenu) {
|
|
145
|
+
wx.hideOptionMenu();
|
|
146
|
+
} else {
|
|
147
|
+
wx.showOptionMenu()
|
|
148
|
+
wx.showMenuItems({
|
|
149
|
+
menuList: showMenus, // 要显示的菜单项,所有menu项见附录3
|
|
150
|
+
});
|
|
151
|
+
// 隐藏掉部分按钮
|
|
152
|
+
wx.hideMenuItems({
|
|
153
|
+
menuList: hideMenus,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// 分享给好友
|
|
159
|
+
if (wx.updateAppMessageShareData) {
|
|
160
|
+
wx.updateAppMessageShareData({
|
|
161
|
+
title: option.title, // 分享标题
|
|
162
|
+
desc: option.desc, // 分享描述
|
|
163
|
+
link: option.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
164
|
+
imgUrl: option.imgUrl, // 分享图标
|
|
165
|
+
success: function (res) {
|
|
166
|
+
console.log("wx_success:updateAppMessageShareData----------:", res);
|
|
167
|
+
},
|
|
168
|
+
fail: function (err) {
|
|
169
|
+
console.log("wx_fail:updateAppMessageShareData----------:", err);
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
wx.onMenuShareAppMessage({
|
|
173
|
+
title: option.title, // 分享标题
|
|
174
|
+
desc: option.desc, // 分享描述
|
|
175
|
+
link: option.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
176
|
+
imgUrl: option.imgUrl, // 分享图标
|
|
177
|
+
type: "", // 分享类型,music、video或link,不填默认为link
|
|
178
|
+
dataUrl: "", // 如果type是music或video,则要提供数据链接,默认为空
|
|
179
|
+
success: function (res) {
|
|
180
|
+
console.log("wx_success:onMenuShareAppMessage", res);
|
|
181
|
+
},
|
|
182
|
+
fail: function (err) {
|
|
183
|
+
console.log("wx_fail:onMenuShareAppMessage", err);
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
// 分享到朋友圈
|
|
188
|
+
if (wx.updateTimelineShareData) {
|
|
189
|
+
wx.updateTimelineShareData({
|
|
190
|
+
title: option.title, // 分享标题
|
|
191
|
+
link: option.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
192
|
+
imgUrl: option.imgUrl, // 分享图标
|
|
193
|
+
desc: option.desc, // 分享描述
|
|
194
|
+
success: function (res) {
|
|
195
|
+
console.log("wx_success:updateTimelineShareData", res);
|
|
196
|
+
},
|
|
197
|
+
fail: function (err) {
|
|
198
|
+
console.log("wx_fail:updateTimelineShareData", err);
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
// } else {
|
|
202
|
+
wx.onMenuShareTimeline({
|
|
203
|
+
title: option.title, // 分享标题
|
|
204
|
+
link: option.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
|
|
205
|
+
imgUrl: option.imgUrl, // 分享图标
|
|
206
|
+
desc: option.desc, // 分享描述
|
|
207
|
+
success: function (res) {
|
|
208
|
+
console.log("wx_success:onMenuShareTimeline", res);
|
|
209
|
+
},
|
|
210
|
+
fail: function (err) {
|
|
211
|
+
console.log("wx_fail:onMenuShareTimeline", err);
|
|
212
|
+
},
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
fail: function (err) {
|
|
217
|
+
console.log("wx_fail:checkJsApi-----------------------", err);
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
},
|
|
222
|
+
/**
|
|
223
|
+
* [wxHideMenu 微信隐藏自带menu]
|
|
224
|
+
*/
|
|
225
|
+
wxHideMenu () { //data是微信配置信息,option是分享的配置内容
|
|
226
|
+
wx.ready(function () {
|
|
227
|
+
// 判断当前客户端版本是否支持指定JS接口
|
|
228
|
+
wx.checkJsApi({
|
|
229
|
+
jsApiList: ['hideMenuItems', 'hideOptionMenu'],
|
|
230
|
+
success: function (res) {
|
|
231
|
+
// 隐藏掉部分按钮
|
|
232
|
+
wx.hideMenuItems({
|
|
233
|
+
menuList: [
|
|
234
|
+
'menuItem:share:appMessage',
|
|
235
|
+
'menuItem:share:timeline',
|
|
236
|
+
'menuItem:share:qq',
|
|
237
|
+
'menuItem:share:weiboApp',
|
|
238
|
+
'menuItem:share:facebook',
|
|
239
|
+
'menuItem:share:QZone',
|
|
240
|
+
'menuItem:copyUrl',
|
|
241
|
+
'menuItem:openWithQQBrowser',
|
|
242
|
+
'menuItem:openWithSafari',
|
|
243
|
+
'menuItem:share:email',
|
|
244
|
+
'menuItem:share:brand'
|
|
245
|
+
]
|
|
246
|
+
});
|
|
247
|
+
wx.hideOptionMenu();
|
|
248
|
+
},
|
|
249
|
+
fail: function (res) { console.log(res) }
|
|
250
|
+
})
|
|
251
|
+
})
|
|
252
|
+
},
|
|
253
|
+
/**
|
|
254
|
+
* 拍照或从手机相册中选图接口
|
|
255
|
+
* @param count {number}选择图片张数
|
|
256
|
+
*/
|
|
257
|
+
chooseImage (count) {
|
|
258
|
+
return new Promise((resolve, reject) => {
|
|
259
|
+
wx.chooseImage({
|
|
260
|
+
count: count, // 默认9
|
|
261
|
+
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
|
|
262
|
+
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
|
|
263
|
+
success: function (res) {
|
|
264
|
+
let localIds = res.localIds; // 返回选定照片的本地 ID 列表,localId可以作为 img 标签的 src 属性显示图片
|
|
265
|
+
resolve(localIds)
|
|
266
|
+
},
|
|
267
|
+
fail: function (err) {
|
|
268
|
+
reject(err)
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
})
|
|
272
|
+
},
|
|
273
|
+
/**
|
|
274
|
+
* 获取本地图片接口
|
|
275
|
+
* @param localId {string}本地id
|
|
276
|
+
*/
|
|
277
|
+
getLocalImgData (localId) {
|
|
278
|
+
return new Promise((resolve, reject) => {
|
|
279
|
+
wx.getLocalImgData({
|
|
280
|
+
localId: localId, // 图片的localID
|
|
281
|
+
success: function (res) {
|
|
282
|
+
let localData = res.localData; // localData是图片的base64数据,可以用 img 标签显示
|
|
283
|
+
if (isBase64(localData)) {
|
|
284
|
+
resolve(localData)
|
|
285
|
+
} else {
|
|
286
|
+
resolve('data:image/jpg;base64,' + localData)
|
|
287
|
+
}
|
|
288
|
+
},
|
|
289
|
+
fail: function (err) {
|
|
290
|
+
reject(err)
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
})
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
|
|
297
|
+
export default wxApi;
|