vue-cli init
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
(function (root, factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
// AMD. Register as an anonymous module.
|
||||
define([], function() {factory(root);});
|
||||
} else factory(root);
|
||||
// node.js has always supported base64 conversions, while browsers that support
|
||||
// web workers support base64 too, but you may never know.
|
||||
})(typeof exports !== "undefined" ? exports : this, function(root) {
|
||||
if (root.atob) {
|
||||
// Some browsers' implementation of atob doesn't support whitespaces
|
||||
// in the encoded string (notably, IE). This wraps the native atob
|
||||
// in a function that strips the whitespaces.
|
||||
// The original function can be retrieved in atob.original
|
||||
try {
|
||||
root.atob(" ");
|
||||
} catch(e) {
|
||||
root.atob = (function(atob) {
|
||||
var func = function(string) {
|
||||
return atob(String(string).replace(/[\t\n\f\r ]+/g, ""));
|
||||
};
|
||||
func.original = atob;
|
||||
return func;
|
||||
})(root.atob);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// base64 character set, plus padding character (=)
|
||||
var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
||||
// Regular expression to check formal correctness of base64 encoded strings
|
||||
b64re = /^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;
|
||||
|
||||
root.btoa = function(string) {
|
||||
string = String(string);
|
||||
var bitmap, a, b, c,
|
||||
result = "", i = 0,
|
||||
rest = string.length % 3; // To determine the final padding
|
||||
|
||||
for (; i < string.length;) {
|
||||
if ((a = string.charCodeAt(i++)) > 255
|
||||
|| (b = string.charCodeAt(i++)) > 255
|
||||
|| (c = string.charCodeAt(i++)) > 255)
|
||||
throw new TypeError("Failed to execute 'btoa' on 'Window': The string to be encoded contains characters outside of the Latin1 range.");
|
||||
|
||||
bitmap = (a << 16) | (b << 8) | c;
|
||||
result += b64.charAt(bitmap >> 18 & 63) + b64.charAt(bitmap >> 12 & 63)
|
||||
+ b64.charAt(bitmap >> 6 & 63) + b64.charAt(bitmap & 63);
|
||||
}
|
||||
|
||||
// If there's need of padding, replace the last 'A's with equal signs
|
||||
return rest ? result.slice(0, rest - 3) + "===".substring(rest) : result;
|
||||
};
|
||||
|
||||
root.atob = function(string) {
|
||||
// atob can work with strings with whitespaces, even inside the encoded part,
|
||||
// but only \t, \n, \f, \r and ' ', which can be stripped.
|
||||
string = String(string).replace(/[\t\n\f\r ]+/g, "");
|
||||
if (!b64re.test(string))
|
||||
throw new TypeError("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
|
||||
|
||||
// Adding the padding if missing, for semplicity
|
||||
string += "==".slice(2 - (string.length & 3));
|
||||
var bitmap, result = "", r1, r2, i = 0;
|
||||
for (; i < string.length;) {
|
||||
bitmap = b64.indexOf(string.charAt(i++)) << 18 | b64.indexOf(string.charAt(i++)) << 12
|
||||
| (r1 = b64.indexOf(string.charAt(i++))) << 6 | (r2 = b64.indexOf(string.charAt(i++)));
|
||||
|
||||
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255)
|
||||
: r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255)
|
||||
: String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* 通用js方法封装处理
|
||||
* Copyright (c) 2019 aidex
|
||||
*/
|
||||
|
||||
export function replaceAll (text,stringToFind,stringToReplace) {
|
||||
if ( stringToFind == stringToReplace) return this;
|
||||
var temp = text;
|
||||
var index = temp.indexOf(stringToFind);
|
||||
while (index != -1) {
|
||||
temp = temp.replace(stringToFind, stringToReplace);
|
||||
index = temp.indexOf(stringToFind);
|
||||
}
|
||||
return temp;
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
|
||||
// 判断是否为开发环境
|
||||
export const isDevelopment = process.env.NODE_ENV === 'development'
|
||||
|
||||
const config = {
|
||||
upgradeName: 'erp_pda_pre',
|
||||
|
||||
// 产品名称
|
||||
productName: '浩拓技术',
|
||||
|
||||
// 公司名称
|
||||
companyName: '浩拓科技',
|
||||
|
||||
// 版本检查标识
|
||||
appCode: 'android',
|
||||
|
||||
// 内部版本号码
|
||||
appVersion: 1,
|
||||
|
||||
// 管理基础路径
|
||||
adminPath: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1',
|
||||
|
||||
// 环境判断
|
||||
isDevelopment: isDevelopment,
|
||||
|
||||
// 生产环境API URL
|
||||
productionApiUrl: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1',
|
||||
|
||||
// 开发环境API URL选项
|
||||
devApiUrlOptions: [
|
||||
{ label: '测试环境', value: 'https://hcscmtest.zzfzyc.com/hcscm/pda/v1' },
|
||||
{ label: '正式环境', value: 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1' },
|
||||
{ label: '自定义', value: 'custom' }
|
||||
]
|
||||
|
||||
}
|
||||
|
||||
// 设置后台接口服务的基础地址 - 使用动态API URL
|
||||
// config.baseUrl = 'https://aidex.vip/api'; // 注释掉固定的baseUrl
|
||||
|
||||
export default config;
|
||||
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作
|
||||
const install = (Vue, vm) => {
|
||||
|
||||
// 参数配置对象
|
||||
const config = vm.vuex_config;
|
||||
console.log('install u',config)
|
||||
// 将各个定义的接口名称,统一放进对象挂载到vm.$u.api(因为vm就是this,也即this.$u.api)下
|
||||
vm.$u.api = {
|
||||
|
||||
// 基础服务:登录登出、身份信息、菜单授权、切换系统、字典数据等
|
||||
lang: (params = {}) => vm.$u.get('/lang/'+params.lang),
|
||||
index: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index', params),
|
||||
getUserInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/user/getUserInfo', params),
|
||||
login: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/loginByPassword', params),
|
||||
// PDA登录接口
|
||||
pdaLogin: (params = {}) => vm.$u.postJson('/login', params),
|
||||
pdaLogout: (params = {}) => vm.$u.postJson('/logout', params),
|
||||
// 获取配布单列表
|
||||
getFpmArrangeOrderList: (params = {}) => vm.$u.get('/product/fpmArrangeOrder/getFpmArrangeOrderList', params),
|
||||
// 获取成品配布单详情
|
||||
getFpmArrangeOrder: (params = {}) => vm.$u.get('/product/fpmArrangeOrder/getFpmArrangeOrder', params),
|
||||
// 生成出仓单
|
||||
outFpmArrangeOrder: (params = {}) => vm.$u.put('/product/fpmArrangeOrder/outFpmArrangeOrder', params),
|
||||
sendCode: (params = {}) => vm.$u.post(config.adminPath+'/mobile/login/sendCode', params),
|
||||
registerUser: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/registerUser', params),
|
||||
//首页相关api
|
||||
getIndexCardInfo: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getIndexCardInfo', params),
|
||||
getM2mOrderFlowList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderFlowList', params),
|
||||
//获取卡可购买套餐包
|
||||
getM2mOrderPackageList: (params = {}) => vm.$u.get(config.adminPath+'/mobile/index/getM2mOrderPackageList', params),
|
||||
|
||||
logout: (params = {}) => vm.$u.get(config.adminPath+'/mobile/login/logout', params),
|
||||
authInfo: (params = {}) => vm.$u.get(config.adminPath+'/authInfo', params),
|
||||
menuTree: (params = {}) => vm.$u.get(config.adminPath+'/menuTree', params),
|
||||
switchSys: (params = {}) => vm.$u.get(config.adminPath+'/switch/'+params.sysCode),
|
||||
dictData: (params = {}) => vm.$u.get(config.a取dminPath+'/system/dict/data/type/'+params.dictType),
|
||||
|
||||
// 账号服务:验证码接口、忘记密码接口、注册账号接口等
|
||||
validCode: (params = {}) => vm.$u.getText('/validCode', params),
|
||||
getFpValidCode: (params = {}) => vm.$u.post('/account/getFpValidCode', params),
|
||||
savePwdByValidCode: (params = {}) => vm.$u.post('/account/savePwdByValidCode', params),
|
||||
getRegValidCode: (params = {}) => vm.$u.post('/account/getRegValidCode', params),
|
||||
saveRegByValidCode: (params = {}) => vm.$u.post('/account/saveRegByValidCode', params),
|
||||
|
||||
// APP公共服务
|
||||
upgradeCheck: (params = {}) => vm.$u.put(vm.$u.http.config.baseUrl.replace('/pda/v1', '') + '/version/check', params, {
|
||||
'content-type': 'application/json'
|
||||
}),
|
||||
commentSave: (params = {}) => vm.$u.post('/app/comment/save', params),
|
||||
|
||||
// 个人信息修改
|
||||
user: {
|
||||
saveUserInfo: (params = {}) => vm.$u.post(config.adminPath+'/mobile/user/saveUserInfo', params),
|
||||
infoSavePwd: (params = {}) => vm.$u.put(config.adminPath+'/system/user/profile/updatePwd', params),
|
||||
infoSavePqa: (params = {}) => vm.$u.post(config.adminPath+'/sys/user/infoSavePqa', params),
|
||||
},
|
||||
|
||||
// 员工用户查询
|
||||
empUser: {
|
||||
listData: (params = {}) => vm.$u.get(config.adminPath+'/sys/empUser/listData', params),
|
||||
},
|
||||
|
||||
// 组织机构查询
|
||||
office: {
|
||||
treeData: (params = {}) => vm.$u.get(config.adminPath+'/sys/office/treeData', params),
|
||||
},
|
||||
|
||||
// 增删改查例子
|
||||
testData: {
|
||||
form: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/form', params),
|
||||
list: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/listData', params),
|
||||
save: (params = {}) => vm.$u.postJson(config.adminPath+'/test/testData/save', params),
|
||||
disable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/disable', params),
|
||||
enable: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/enable', params),
|
||||
delete: (params = {}) => vm.$u.post(config.adminPath+'/test/testData/delete', params),
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
export default {
|
||||
install
|
||||
}
|
||||
@@ -0,0 +1,142 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
// 此处第二个参数vm,就是我们在页面使用的this,你可以通过vm获取vuex等操作
|
||||
const install = (Vue, vm) => {
|
||||
// 通用请求头设定
|
||||
const ajaxHeader = 'x-ajax';
|
||||
const sessionIdHeader = 'Authorization';
|
||||
const rememberMeHeader = 'x-remember';
|
||||
|
||||
// 请求参数默认配置
|
||||
Vue.prototype.$u.http.setConfig({
|
||||
baseUrl: vm.$store.state.apiurl,
|
||||
originalData: true,
|
||||
// 默认头部,http2约定header名称统一小写 aidex
|
||||
header: {
|
||||
'Platform': 2,
|
||||
'content-type': 'application/x-www-form-urlencoded',
|
||||
'x-requested-with': 'XMLHttpRequest'
|
||||
}
|
||||
});
|
||||
|
||||
// 请求拦截,配置Token等参数
|
||||
Vue.prototype.$u.http.interceptor.request = (req) => {
|
||||
if (!req.header){
|
||||
req.header = [];
|
||||
}
|
||||
req.header["source"] = "app";
|
||||
|
||||
// 默认指定返回 JSON 数据
|
||||
if (!req.header[ajaxHeader]){
|
||||
req.header[ajaxHeader] = 'json';
|
||||
}
|
||||
|
||||
// 设定传递 Token 认证参数 aidex
|
||||
if (!req.header[sessionIdHeader] && vm.vuex_token){
|
||||
req.header[sessionIdHeader] = vm.vuex_token;
|
||||
}
|
||||
|
||||
// 为节省流量,记住我数据不是每次都发送的,当会话失效后,尝试重试登录 aidex
|
||||
if (!req.header[rememberMeHeader] && vm.vuex_remember && req.remember){
|
||||
req.header[rememberMeHeader] = vm.vuex_remember;
|
||||
req.remember = false;
|
||||
}
|
||||
console.log('request', req);
|
||||
return req;
|
||||
}
|
||||
|
||||
// 响应拦截,判断状态码是否通过
|
||||
Vue.prototype.$u.http.interceptor.response = async (res, req) => {
|
||||
console.log('response', res);
|
||||
|
||||
// 处理401未授权状态码
|
||||
if (res.statusCode === 401) {
|
||||
vm.$u.toast('登录已过期,请重新登录');
|
||||
// 清除token和用户信息
|
||||
uni.removeStorageSync('token');
|
||||
vm.$u.vuex('vuex_token', '');
|
||||
vm.$u.vuex('vuex_user', {});
|
||||
// 跳转到登录页面
|
||||
uni.reLaunch({
|
||||
url: '/pages/sys/login/index'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
if (!(res.data)){
|
||||
vm.$u.toast('未连接到服务器')
|
||||
return Promise.reject(new Error('未连接到服务器'));
|
||||
}
|
||||
|
||||
if(res.data.code !== 0) {
|
||||
vm.$u.toast(res.data.msg)
|
||||
return Promise.reject(new Error(res.data.msg))
|
||||
}
|
||||
let data = res.data.data;
|
||||
console.log('data',data)
|
||||
if (typeof data === 'object' && !(data instanceof Array)){
|
||||
if (data.token){
|
||||
console.log('token',data.token)
|
||||
vm.$u.vuex('vuex_token', data.token);
|
||||
if (data.user){
|
||||
vm.$u.vuex('vuex_user', data.user);
|
||||
}
|
||||
vm.$u.vuex('vuex_isAgent', data.isAgent);
|
||||
}
|
||||
if (data.result === 'login'){
|
||||
vm.$u.vuex('vuex_user', {});
|
||||
if (req.tryagain == undefined || req.tryagain){
|
||||
req.tryagain = false; req.remember = true;
|
||||
await vm.$u.http.request(req).then(res => {
|
||||
data = res;
|
||||
});
|
||||
}
|
||||
if (data.result === 'login'){
|
||||
if (!req.data.loginCheck){
|
||||
vm.$u.toast(data.msg);
|
||||
}
|
||||
req.tryagain = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (res.header && res.header[rememberMeHeader]){
|
||||
let remember = res.header[rememberMeHeader];
|
||||
if (remember && remember != 'deleteMe'){
|
||||
vm.$u.vuex('vuex_remember', remember);
|
||||
}else{
|
||||
vm.$u.vuex('vuex_remember', '');
|
||||
}
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
// 封装 get text 请求
|
||||
vm.$u.getText = (url, data = {}, header = {}) => {
|
||||
return vm.$u.http.request({
|
||||
dataType: 'text',
|
||||
method: 'GET',
|
||||
url,
|
||||
header,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
// 封装 post json 请求
|
||||
vm.$u.postJson = (url, data = {}, header = {}) => {
|
||||
console.log('header', header, url, vm.$u)
|
||||
header['content-type'] = 'application/json';
|
||||
return vm.$u.http.request({
|
||||
url,
|
||||
method: 'POST',
|
||||
header,
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default {
|
||||
install
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
export default {
|
||||
common: {
|
||||
title: 'Aidex',
|
||||
},
|
||||
nav: {
|
||||
home: 'Home',
|
||||
user: 'User',
|
||||
msg: 'Msg'
|
||||
},
|
||||
login: {
|
||||
title: 'Login',
|
||||
placeholderAccount: 'Enter Account',
|
||||
placeholderPassword: 'Enter Password',
|
||||
autoLogin: 'Auto Login',
|
||||
loginButton: 'Login',
|
||||
logoutButton: 'Logout',
|
||||
forget: 'Forget Password',
|
||||
reg: 'Resister Account',
|
||||
noLogin: 'No Login'
|
||||
},
|
||||
home: {
|
||||
title: 'Home'
|
||||
},
|
||||
user: {
|
||||
title: 'User'
|
||||
},
|
||||
msg: {
|
||||
title: 'Message'
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
/**
|
||||
* Copyright (c) 2013-Now http://aidex.vip All rights reserved.
|
||||
*/
|
||||
export default {
|
||||
common: {
|
||||
title: 'Aidex',
|
||||
},
|
||||
nav: {
|
||||
home: '消息',
|
||||
workbench: '工作台',
|
||||
user: '我的',
|
||||
book: '通讯录',
|
||||
msg: '消息',
|
||||
},
|
||||
login: {
|
||||
title: '登录',
|
||||
placeholderAccount: '请输入账号',
|
||||
placeholderPassword: '请输入密码',
|
||||
autoLogin: '记住密码',
|
||||
loginButton: '登录',
|
||||
logoutButton: '退出登录',
|
||||
forget: '忘记密码',
|
||||
reg: '注册账号',
|
||||
noLogin: '未登录'
|
||||
},
|
||||
home: {
|
||||
title: '消息'
|
||||
},
|
||||
workbench: {
|
||||
title: '工作台'
|
||||
},
|
||||
user: {
|
||||
title: '用户中心'
|
||||
},
|
||||
msg: {
|
||||
title: '消息'
|
||||
},
|
||||
book: {
|
||||
title: '通讯录'
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,685 @@
|
||||
/**
|
||||
* [js-md5]{@link https://github.com/emn178/js-md5}
|
||||
*
|
||||
* @namespace md5
|
||||
* @version 0.7.3
|
||||
* @author Chen, Yi-Cyuan [emn178@gmail.com]
|
||||
* @copyright Chen, Yi-Cyuan 2014-2017
|
||||
* @license MIT
|
||||
*/
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var ERROR = 'input is invalid type';
|
||||
var WINDOW = typeof window === 'object';
|
||||
var root = WINDOW ? window : {};
|
||||
if (root.JS_MD5_NO_WINDOW) {
|
||||
WINDOW = false;
|
||||
}
|
||||
var WEB_WORKER = !WINDOW && typeof self === 'object';
|
||||
var NODE_JS = !root.JS_MD5_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;
|
||||
if (NODE_JS) {
|
||||
root = global;
|
||||
} else if (WEB_WORKER) {
|
||||
root = self;
|
||||
}
|
||||
var COMMON_JS = !root.JS_MD5_NO_COMMON_JS && typeof module === 'object' && module.exports;
|
||||
var AMD = typeof define === 'function' && define.amd;
|
||||
var ARRAY_BUFFER = !root.JS_MD5_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';
|
||||
var HEX_CHARS = '0123456789abcdef'.split('');
|
||||
var EXTRA = [128, 32768, 8388608, -2147483648];
|
||||
var SHIFT = [0, 8, 16, 24];
|
||||
var OUTPUT_TYPES = ['hex', 'array', 'digest', 'buffer', 'arrayBuffer', 'base64'];
|
||||
var BASE64_ENCODE_CHAR = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
|
||||
|
||||
var blocks = [], buffer8;
|
||||
if (ARRAY_BUFFER) {
|
||||
var buffer = new ArrayBuffer(68);
|
||||
buffer8 = new Uint8Array(buffer);
|
||||
blocks = new Uint32Array(buffer);
|
||||
}
|
||||
|
||||
if (root.JS_MD5_NO_NODE_JS || !Array.isArray) {
|
||||
Array.isArray = function (obj) {
|
||||
return Object.prototype.toString.call(obj) === '[object Array]';
|
||||
};
|
||||
}
|
||||
|
||||
if (ARRAY_BUFFER && (root.JS_MD5_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {
|
||||
ArrayBuffer.isView = function (obj) {
|
||||
return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* @method hex
|
||||
* @memberof md5
|
||||
* @description Output hash as hex string
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {String} Hex string
|
||||
* @example
|
||||
* md5.hex('The quick brown fox jumps over the lazy dog');
|
||||
* // equal to
|
||||
* md5('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
/**
|
||||
* @method digest
|
||||
* @memberof md5
|
||||
* @description Output hash as bytes array
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {Array} Bytes array
|
||||
* @example
|
||||
* md5.digest('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
/**
|
||||
* @method array
|
||||
* @memberof md5
|
||||
* @description Output hash as bytes array
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {Array} Bytes array
|
||||
* @example
|
||||
* md5.array('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
/**
|
||||
* @method arrayBuffer
|
||||
* @memberof md5
|
||||
* @description Output hash as ArrayBuffer
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {ArrayBuffer} ArrayBuffer
|
||||
* @example
|
||||
* md5.arrayBuffer('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
/**
|
||||
* @method buffer
|
||||
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
|
||||
* @memberof md5
|
||||
* @description Output hash as ArrayBuffer
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {ArrayBuffer} ArrayBuffer
|
||||
* @example
|
||||
* md5.buffer('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
/**
|
||||
* @method base64
|
||||
* @memberof md5
|
||||
* @description Output hash as base64 string
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {String} base64 string
|
||||
* @example
|
||||
* md5.base64('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
var createOutputMethod = function (outputType) {
|
||||
return function (message) {
|
||||
return new Md5(true).update(message)[outputType]();
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* @method create
|
||||
* @memberof md5
|
||||
* @description Create Md5 object
|
||||
* @returns {Md5} Md5 object.
|
||||
* @example
|
||||
* var hash = md5.create();
|
||||
*/
|
||||
/**
|
||||
* @method update
|
||||
* @memberof md5
|
||||
* @description Create and update Md5 object
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {Md5} Md5 object.
|
||||
* @example
|
||||
* var hash = md5.update('The quick brown fox jumps over the lazy dog');
|
||||
* // equal to
|
||||
* var hash = md5.create();
|
||||
* hash.update('The quick brown fox jumps over the lazy dog');
|
||||
*/
|
||||
var createMethod = function () {
|
||||
var method = createOutputMethod('hex');
|
||||
if (NODE_JS) {
|
||||
method = nodeWrap(method);
|
||||
}
|
||||
method.create = function () {
|
||||
return new Md5();
|
||||
};
|
||||
method.update = function (message) {
|
||||
return method.create().update(message);
|
||||
};
|
||||
for (var i = 0; i < OUTPUT_TYPES.length; ++i) {
|
||||
var type = OUTPUT_TYPES[i];
|
||||
method[type] = createOutputMethod(type);
|
||||
}
|
||||
return method;
|
||||
};
|
||||
|
||||
var nodeWrap = function (method) {
|
||||
var crypto = eval("require('crypto')");
|
||||
var Buffer = eval("require('buffer').Buffer");
|
||||
var nodeMethod = function (message) {
|
||||
if (typeof message === 'string') {
|
||||
return crypto.createHash('md5').update(message, 'utf8').digest('hex');
|
||||
} else {
|
||||
if (message === null || message === undefined) {
|
||||
throw ERROR;
|
||||
} else if (message.constructor === ArrayBuffer) {
|
||||
message = new Uint8Array(message);
|
||||
}
|
||||
}
|
||||
if (Array.isArray(message) || ArrayBuffer.isView(message) ||
|
||||
message.constructor === Buffer) {
|
||||
return crypto.createHash('md5').update(new Buffer(message)).digest('hex');
|
||||
} else {
|
||||
return method(message);
|
||||
}
|
||||
};
|
||||
return nodeMethod;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Md5 class
|
||||
* @class Md5
|
||||
* @description This is internal class.
|
||||
* @see {@link md5.create}
|
||||
*/
|
||||
function Md5(sharedMemory) {
|
||||
if (sharedMemory) {
|
||||
blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||
this.blocks = blocks;
|
||||
this.buffer8 = buffer8;
|
||||
} else {
|
||||
if (ARRAY_BUFFER) {
|
||||
var buffer = new ArrayBuffer(68);
|
||||
this.buffer8 = new Uint8Array(buffer);
|
||||
this.blocks = new Uint32Array(buffer);
|
||||
} else {
|
||||
this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
}
|
||||
}
|
||||
this.h0 = this.h1 = this.h2 = this.h3 = this.start = this.bytes = this.hBytes = 0;
|
||||
this.finalized = this.hashed = false;
|
||||
this.first = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @method update
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Update hash
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {Md5} Md5 object.
|
||||
* @see {@link md5.update}
|
||||
*/
|
||||
Md5.prototype.update = function (message) {
|
||||
if (this.finalized) {
|
||||
return;
|
||||
}
|
||||
|
||||
var notString, type = typeof message;
|
||||
if (type !== 'string') {
|
||||
if (type === 'object') {
|
||||
if (message === null) {
|
||||
throw ERROR;
|
||||
} else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {
|
||||
message = new Uint8Array(message);
|
||||
} else if (!Array.isArray(message)) {
|
||||
if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {
|
||||
throw ERROR;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw ERROR;
|
||||
}
|
||||
notString = true;
|
||||
}
|
||||
var code, index = 0, i, length = message.length, blocks = this.blocks;
|
||||
var buffer8 = this.buffer8;
|
||||
|
||||
while (index < length) {
|
||||
if (this.hashed) {
|
||||
this.hashed = false;
|
||||
blocks[0] = blocks[16];
|
||||
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||
}
|
||||
|
||||
if (notString) {
|
||||
if (ARRAY_BUFFER) {
|
||||
for (i = this.start; index < length && i < 64; ++index) {
|
||||
buffer8[i++] = message[index];
|
||||
}
|
||||
} else {
|
||||
for (i = this.start; index < length && i < 64; ++index) {
|
||||
blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (ARRAY_BUFFER) {
|
||||
for (i = this.start; index < length && i < 64; ++index) {
|
||||
code = message.charCodeAt(index);
|
||||
if (code < 0x80) {
|
||||
buffer8[i++] = code;
|
||||
} else if (code < 0x800) {
|
||||
buffer8[i++] = 0xc0 | (code >> 6);
|
||||
buffer8[i++] = 0x80 | (code & 0x3f);
|
||||
} else if (code < 0xd800 || code >= 0xe000) {
|
||||
buffer8[i++] = 0xe0 | (code >> 12);
|
||||
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
|
||||
buffer8[i++] = 0x80 | (code & 0x3f);
|
||||
} else {
|
||||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||||
buffer8[i++] = 0xf0 | (code >> 18);
|
||||
buffer8[i++] = 0x80 | ((code >> 12) & 0x3f);
|
||||
buffer8[i++] = 0x80 | ((code >> 6) & 0x3f);
|
||||
buffer8[i++] = 0x80 | (code & 0x3f);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i = this.start; index < length && i < 64; ++index) {
|
||||
code = message.charCodeAt(index);
|
||||
if (code < 0x80) {
|
||||
blocks[i >> 2] |= code << SHIFT[i++ & 3];
|
||||
} else if (code < 0x800) {
|
||||
blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||
} else if (code < 0xd800 || code >= 0xe000) {
|
||||
blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||
} else {
|
||||
code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));
|
||||
blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];
|
||||
blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
this.lastByteIndex = i;
|
||||
this.bytes += i - this.start;
|
||||
if (i >= 64) {
|
||||
this.start = i - 64;
|
||||
this.hash();
|
||||
this.hashed = true;
|
||||
} else {
|
||||
this.start = i;
|
||||
}
|
||||
}
|
||||
if (this.bytes > 4294967295) {
|
||||
this.hBytes += this.bytes / 4294967296 << 0;
|
||||
this.bytes = this.bytes % 4294967296;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
Md5.prototype.finalize = function () {
|
||||
if (this.finalized) {
|
||||
return;
|
||||
}
|
||||
this.finalized = true;
|
||||
var blocks = this.blocks, i = this.lastByteIndex;
|
||||
blocks[i >> 2] |= EXTRA[i & 3];
|
||||
if (i >= 56) {
|
||||
if (!this.hashed) {
|
||||
this.hash();
|
||||
}
|
||||
blocks[0] = blocks[16];
|
||||
blocks[16] = blocks[1] = blocks[2] = blocks[3] =
|
||||
blocks[4] = blocks[5] = blocks[6] = blocks[7] =
|
||||
blocks[8] = blocks[9] = blocks[10] = blocks[11] =
|
||||
blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;
|
||||
}
|
||||
blocks[14] = this.bytes << 3;
|
||||
blocks[15] = this.hBytes << 3 | this.bytes >>> 29;
|
||||
this.hash();
|
||||
};
|
||||
|
||||
Md5.prototype.hash = function () {
|
||||
var a, b, c, d, bc, da, blocks = this.blocks;
|
||||
|
||||
if (this.first) {
|
||||
a = blocks[0] - 680876937;
|
||||
a = (a << 7 | a >>> 25) - 271733879 << 0;
|
||||
d = (-1732584194 ^ a & 2004318071) + blocks[1] - 117830708;
|
||||
d = (d << 12 | d >>> 20) + a << 0;
|
||||
c = (-271733879 ^ (d & (a ^ -271733879))) + blocks[2] - 1126478375;
|
||||
c = (c << 17 | c >>> 15) + d << 0;
|
||||
b = (a ^ (c & (d ^ a))) + blocks[3] - 1316259209;
|
||||
b = (b << 22 | b >>> 10) + c << 0;
|
||||
} else {
|
||||
a = this.h0;
|
||||
b = this.h1;
|
||||
c = this.h2;
|
||||
d = this.h3;
|
||||
a += (d ^ (b & (c ^ d))) + blocks[0] - 680876936;
|
||||
a = (a << 7 | a >>> 25) + b << 0;
|
||||
d += (c ^ (a & (b ^ c))) + blocks[1] - 389564586;
|
||||
d = (d << 12 | d >>> 20) + a << 0;
|
||||
c += (b ^ (d & (a ^ b))) + blocks[2] + 606105819;
|
||||
c = (c << 17 | c >>> 15) + d << 0;
|
||||
b += (a ^ (c & (d ^ a))) + blocks[3] - 1044525330;
|
||||
b = (b << 22 | b >>> 10) + c << 0;
|
||||
}
|
||||
|
||||
a += (d ^ (b & (c ^ d))) + blocks[4] - 176418897;
|
||||
a = (a << 7 | a >>> 25) + b << 0;
|
||||
d += (c ^ (a & (b ^ c))) + blocks[5] + 1200080426;
|
||||
d = (d << 12 | d >>> 20) + a << 0;
|
||||
c += (b ^ (d & (a ^ b))) + blocks[6] - 1473231341;
|
||||
c = (c << 17 | c >>> 15) + d << 0;
|
||||
b += (a ^ (c & (d ^ a))) + blocks[7] - 45705983;
|
||||
b = (b << 22 | b >>> 10) + c << 0;
|
||||
a += (d ^ (b & (c ^ d))) + blocks[8] + 1770035416;
|
||||
a = (a << 7 | a >>> 25) + b << 0;
|
||||
d += (c ^ (a & (b ^ c))) + blocks[9] - 1958414417;
|
||||
d = (d << 12 | d >>> 20) + a << 0;
|
||||
c += (b ^ (d & (a ^ b))) + blocks[10] - 42063;
|
||||
c = (c << 17 | c >>> 15) + d << 0;
|
||||
b += (a ^ (c & (d ^ a))) + blocks[11] - 1990404162;
|
||||
b = (b << 22 | b >>> 10) + c << 0;
|
||||
a += (d ^ (b & (c ^ d))) + blocks[12] + 1804603682;
|
||||
a = (a << 7 | a >>> 25) + b << 0;
|
||||
d += (c ^ (a & (b ^ c))) + blocks[13] - 40341101;
|
||||
d = (d << 12 | d >>> 20) + a << 0;
|
||||
c += (b ^ (d & (a ^ b))) + blocks[14] - 1502002290;
|
||||
c = (c << 17 | c >>> 15) + d << 0;
|
||||
b += (a ^ (c & (d ^ a))) + blocks[15] + 1236535329;
|
||||
b = (b << 22 | b >>> 10) + c << 0;
|
||||
a += (c ^ (d & (b ^ c))) + blocks[1] - 165796510;
|
||||
a = (a << 5 | a >>> 27) + b << 0;
|
||||
d += (b ^ (c & (a ^ b))) + blocks[6] - 1069501632;
|
||||
d = (d << 9 | d >>> 23) + a << 0;
|
||||
c += (a ^ (b & (d ^ a))) + blocks[11] + 643717713;
|
||||
c = (c << 14 | c >>> 18) + d << 0;
|
||||
b += (d ^ (a & (c ^ d))) + blocks[0] - 373897302;
|
||||
b = (b << 20 | b >>> 12) + c << 0;
|
||||
a += (c ^ (d & (b ^ c))) + blocks[5] - 701558691;
|
||||
a = (a << 5 | a >>> 27) + b << 0;
|
||||
d += (b ^ (c & (a ^ b))) + blocks[10] + 38016083;
|
||||
d = (d << 9 | d >>> 23) + a << 0;
|
||||
c += (a ^ (b & (d ^ a))) + blocks[15] - 660478335;
|
||||
c = (c << 14 | c >>> 18) + d << 0;
|
||||
b += (d ^ (a & (c ^ d))) + blocks[4] - 405537848;
|
||||
b = (b << 20 | b >>> 12) + c << 0;
|
||||
a += (c ^ (d & (b ^ c))) + blocks[9] + 568446438;
|
||||
a = (a << 5 | a >>> 27) + b << 0;
|
||||
d += (b ^ (c & (a ^ b))) + blocks[14] - 1019803690;
|
||||
d = (d << 9 | d >>> 23) + a << 0;
|
||||
c += (a ^ (b & (d ^ a))) + blocks[3] - 187363961;
|
||||
c = (c << 14 | c >>> 18) + d << 0;
|
||||
b += (d ^ (a & (c ^ d))) + blocks[8] + 1163531501;
|
||||
b = (b << 20 | b >>> 12) + c << 0;
|
||||
a += (c ^ (d & (b ^ c))) + blocks[13] - 1444681467;
|
||||
a = (a << 5 | a >>> 27) + b << 0;
|
||||
d += (b ^ (c & (a ^ b))) + blocks[2] - 51403784;
|
||||
d = (d << 9 | d >>> 23) + a << 0;
|
||||
c += (a ^ (b & (d ^ a))) + blocks[7] + 1735328473;
|
||||
c = (c << 14 | c >>> 18) + d << 0;
|
||||
b += (d ^ (a & (c ^ d))) + blocks[12] - 1926607734;
|
||||
b = (b << 20 | b >>> 12) + c << 0;
|
||||
bc = b ^ c;
|
||||
a += (bc ^ d) + blocks[5] - 378558;
|
||||
a = (a << 4 | a >>> 28) + b << 0;
|
||||
d += (bc ^ a) + blocks[8] - 2022574463;
|
||||
d = (d << 11 | d >>> 21) + a << 0;
|
||||
da = d ^ a;
|
||||
c += (da ^ b) + blocks[11] + 1839030562;
|
||||
c = (c << 16 | c >>> 16) + d << 0;
|
||||
b += (da ^ c) + blocks[14] - 35309556;
|
||||
b = (b << 23 | b >>> 9) + c << 0;
|
||||
bc = b ^ c;
|
||||
a += (bc ^ d) + blocks[1] - 1530992060;
|
||||
a = (a << 4 | a >>> 28) + b << 0;
|
||||
d += (bc ^ a) + blocks[4] + 1272893353;
|
||||
d = (d << 11 | d >>> 21) + a << 0;
|
||||
da = d ^ a;
|
||||
c += (da ^ b) + blocks[7] - 155497632;
|
||||
c = (c << 16 | c >>> 16) + d << 0;
|
||||
b += (da ^ c) + blocks[10] - 1094730640;
|
||||
b = (b << 23 | b >>> 9) + c << 0;
|
||||
bc = b ^ c;
|
||||
a += (bc ^ d) + blocks[13] + 681279174;
|
||||
a = (a << 4 | a >>> 28) + b << 0;
|
||||
d += (bc ^ a) + blocks[0] - 358537222;
|
||||
d = (d << 11 | d >>> 21) + a << 0;
|
||||
da = d ^ a;
|
||||
c += (da ^ b) + blocks[3] - 722521979;
|
||||
c = (c << 16 | c >>> 16) + d << 0;
|
||||
b += (da ^ c) + blocks[6] + 76029189;
|
||||
b = (b << 23 | b >>> 9) + c << 0;
|
||||
bc = b ^ c;
|
||||
a += (bc ^ d) + blocks[9] - 640364487;
|
||||
a = (a << 4 | a >>> 28) + b << 0;
|
||||
d += (bc ^ a) + blocks[12] - 421815835;
|
||||
d = (d << 11 | d >>> 21) + a << 0;
|
||||
da = d ^ a;
|
||||
c += (da ^ b) + blocks[15] + 530742520;
|
||||
c = (c << 16 | c >>> 16) + d << 0;
|
||||
b += (da ^ c) + blocks[2] - 995338651;
|
||||
b = (b << 23 | b >>> 9) + c << 0;
|
||||
a += (c ^ (b | ~d)) + blocks[0] - 198630844;
|
||||
a = (a << 6 | a >>> 26) + b << 0;
|
||||
d += (b ^ (a | ~c)) + blocks[7] + 1126891415;
|
||||
d = (d << 10 | d >>> 22) + a << 0;
|
||||
c += (a ^ (d | ~b)) + blocks[14] - 1416354905;
|
||||
c = (c << 15 | c >>> 17) + d << 0;
|
||||
b += (d ^ (c | ~a)) + blocks[5] - 57434055;
|
||||
b = (b << 21 | b >>> 11) + c << 0;
|
||||
a += (c ^ (b | ~d)) + blocks[12] + 1700485571;
|
||||
a = (a << 6 | a >>> 26) + b << 0;
|
||||
d += (b ^ (a | ~c)) + blocks[3] - 1894986606;
|
||||
d = (d << 10 | d >>> 22) + a << 0;
|
||||
c += (a ^ (d | ~b)) + blocks[10] - 1051523;
|
||||
c = (c << 15 | c >>> 17) + d << 0;
|
||||
b += (d ^ (c | ~a)) + blocks[1] - 2054922799;
|
||||
b = (b << 21 | b >>> 11) + c << 0;
|
||||
a += (c ^ (b | ~d)) + blocks[8] + 1873313359;
|
||||
a = (a << 6 | a >>> 26) + b << 0;
|
||||
d += (b ^ (a | ~c)) + blocks[15] - 30611744;
|
||||
d = (d << 10 | d >>> 22) + a << 0;
|
||||
c += (a ^ (d | ~b)) + blocks[6] - 1560198380;
|
||||
c = (c << 15 | c >>> 17) + d << 0;
|
||||
b += (d ^ (c | ~a)) + blocks[13] + 1309151649;
|
||||
b = (b << 21 | b >>> 11) + c << 0;
|
||||
a += (c ^ (b | ~d)) + blocks[4] - 145523070;
|
||||
a = (a << 6 | a >>> 26) + b << 0;
|
||||
d += (b ^ (a | ~c)) + blocks[11] - 1120210379;
|
||||
d = (d << 10 | d >>> 22) + a << 0;
|
||||
c += (a ^ (d | ~b)) + blocks[2] + 718787259;
|
||||
c = (c << 15 | c >>> 17) + d << 0;
|
||||
b += (d ^ (c | ~a)) + blocks[9] - 343485551;
|
||||
b = (b << 21 | b >>> 11) + c << 0;
|
||||
|
||||
if (this.first) {
|
||||
this.h0 = a + 1732584193 << 0;
|
||||
this.h1 = b - 271733879 << 0;
|
||||
this.h2 = c - 1732584194 << 0;
|
||||
this.h3 = d + 271733878 << 0;
|
||||
this.first = false;
|
||||
} else {
|
||||
this.h0 = this.h0 + a << 0;
|
||||
this.h1 = this.h1 + b << 0;
|
||||
this.h2 = this.h2 + c << 0;
|
||||
this.h3 = this.h3 + d << 0;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* @method hex
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as hex string
|
||||
* @returns {String} Hex string
|
||||
* @see {@link md5.hex}
|
||||
* @example
|
||||
* hash.hex();
|
||||
*/
|
||||
Md5.prototype.hex = function () {
|
||||
this.finalize();
|
||||
|
||||
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
|
||||
|
||||
return HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +
|
||||
HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +
|
||||
HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +
|
||||
HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +
|
||||
HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +
|
||||
HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +
|
||||
HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +
|
||||
HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +
|
||||
HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +
|
||||
HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +
|
||||
HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +
|
||||
HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +
|
||||
HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +
|
||||
HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +
|
||||
HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +
|
||||
HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F];
|
||||
};
|
||||
|
||||
/**
|
||||
* @method toString
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as hex string
|
||||
* @returns {String} Hex string
|
||||
* @see {@link md5.hex}
|
||||
* @example
|
||||
* hash.toString();
|
||||
*/
|
||||
Md5.prototype.toString = Md5.prototype.hex;
|
||||
|
||||
/**
|
||||
* @method digest
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as bytes array
|
||||
* @returns {Array} Bytes array
|
||||
* @see {@link md5.digest}
|
||||
* @example
|
||||
* hash.digest();
|
||||
*/
|
||||
Md5.prototype.digest = function () {
|
||||
this.finalize();
|
||||
|
||||
var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3;
|
||||
return [
|
||||
h0 & 0xFF, (h0 >> 8) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 24) & 0xFF,
|
||||
h1 & 0xFF, (h1 >> 8) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 24) & 0xFF,
|
||||
h2 & 0xFF, (h2 >> 8) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 24) & 0xFF,
|
||||
h3 & 0xFF, (h3 >> 8) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 24) & 0xFF
|
||||
];
|
||||
};
|
||||
|
||||
/**
|
||||
* @method array
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as bytes array
|
||||
* @returns {Array} Bytes array
|
||||
* @see {@link md5.array}
|
||||
* @example
|
||||
* hash.array();
|
||||
*/
|
||||
Md5.prototype.array = Md5.prototype.digest;
|
||||
|
||||
/**
|
||||
* @method arrayBuffer
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as ArrayBuffer
|
||||
* @returns {ArrayBuffer} ArrayBuffer
|
||||
* @see {@link md5.arrayBuffer}
|
||||
* @example
|
||||
* hash.arrayBuffer();
|
||||
*/
|
||||
Md5.prototype.arrayBuffer = function () {
|
||||
this.finalize();
|
||||
|
||||
var buffer = new ArrayBuffer(16);
|
||||
var blocks = new Uint32Array(buffer);
|
||||
blocks[0] = this.h0;
|
||||
blocks[1] = this.h1;
|
||||
blocks[2] = this.h2;
|
||||
blocks[3] = this.h3;
|
||||
return buffer;
|
||||
};
|
||||
|
||||
/**
|
||||
* @method buffer
|
||||
* @deprecated This maybe confuse with Buffer in node.js. Please use arrayBuffer instead.
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as ArrayBuffer
|
||||
* @returns {ArrayBuffer} ArrayBuffer
|
||||
* @see {@link md5.buffer}
|
||||
* @example
|
||||
* hash.buffer();
|
||||
*/
|
||||
Md5.prototype.buffer = Md5.prototype.arrayBuffer;
|
||||
|
||||
/**
|
||||
* @method base64
|
||||
* @memberof Md5
|
||||
* @instance
|
||||
* @description Output hash as base64 string
|
||||
* @returns {String} base64 string
|
||||
* @see {@link md5.base64}
|
||||
* @example
|
||||
* hash.base64();
|
||||
*/
|
||||
Md5.prototype.base64 = function () {
|
||||
var v1, v2, v3, base64Str = '', bytes = this.array();
|
||||
for (var i = 0; i < 15;) {
|
||||
v1 = bytes[i++];
|
||||
v2 = bytes[i++];
|
||||
v3 = bytes[i++];
|
||||
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
||||
BASE64_ENCODE_CHAR[(v1 << 4 | v2 >>> 4) & 63] +
|
||||
BASE64_ENCODE_CHAR[(v2 << 2 | v3 >>> 6) & 63] +
|
||||
BASE64_ENCODE_CHAR[v3 & 63];
|
||||
}
|
||||
v1 = bytes[i];
|
||||
base64Str += BASE64_ENCODE_CHAR[v1 >>> 2] +
|
||||
BASE64_ENCODE_CHAR[(v1 << 4) & 63] +
|
||||
'==';
|
||||
return base64Str;
|
||||
};
|
||||
|
||||
var exports = createMethod();
|
||||
|
||||
if (COMMON_JS) {
|
||||
module.exports = exports;
|
||||
} else {
|
||||
/**
|
||||
* @method md5
|
||||
* @description Md5 hash function, export to global in browsers.
|
||||
* @param {String|Array|Uint8Array|ArrayBuffer} message message to hash
|
||||
* @returns {String} md5 hashes
|
||||
* @example
|
||||
* md5(''); // d41d8cd98f00b204e9800998ecf8427e
|
||||
* md5('The quick brown fox jumps over the lazy dog'); // 9e107d9d372bb6826bd81d3542a419d6
|
||||
* md5('The quick brown fox jumps over the lazy dog.'); // e4d909c290d0fb1ca068ffaddf22cbd0
|
||||
*
|
||||
* // It also supports UTF-8 encoding
|
||||
* md5('中文'); // a7bac2239fcdcb3a067903d8077c4a07
|
||||
*
|
||||
* // It also supports byte `Array`, `Uint8Array`, `ArrayBuffer`
|
||||
* md5([]); // d41d8cd98f00b204e9800998ecf8427e
|
||||
* md5(new Uint8Array([])); // d41d8cd98f00b204e9800998ecf8427e
|
||||
*/
|
||||
root.md5 = exports;
|
||||
if (AMD) {
|
||||
define(function () {
|
||||
return exports;
|
||||
});
|
||||
}
|
||||
}
|
||||
})();
|
||||
@@ -0,0 +1,207 @@
|
||||
// common/scanMixin.js
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
scanReceiver: null,
|
||||
isPageActive: false
|
||||
}
|
||||
},
|
||||
|
||||
methods: {
|
||||
// 注册扫码广播(兼容多种设备)
|
||||
registerScanBroadcast(scanCallback) {
|
||||
try {
|
||||
// 先尝试注册商米扫码头
|
||||
this.registerSunmiBroadcast(scanCallback)
|
||||
.then(() => {
|
||||
console.log('商米扫码头注册成功');
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('商米扫码头注册失败,尝试新大陆扫码头:', error);
|
||||
// 如果商米扫码头注册失败,尝试新大陆扫码头
|
||||
this.registerNewlandBroadcast(scanCallback);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("注册扫码广播失败:", error);
|
||||
return false;
|
||||
}
|
||||
},
|
||||
|
||||
// 注册商米扫码头广播接收器
|
||||
registerSunmiBroadcast(scanCallback) {
|
||||
return new Promise((resolve, reject) => {
|
||||
try {
|
||||
const main = plus.android.runtimeMainActivity();
|
||||
const IntentFilter = plus.android.importClass("android.content.IntentFilter");
|
||||
|
||||
const filter = new IntentFilter();
|
||||
filter.addAction("com.sunmi.scanner.ACTION_DATA_CODE_RECEIVED");
|
||||
|
||||
const self = this;
|
||||
const receiver = plus.android.implements(
|
||||
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
|
||||
{
|
||||
onReceive: (context, intent) => {
|
||||
console.log('商米扫码广播接收,isPageActive:', self.isPageActive);
|
||||
// 只有当页面活动时才处理广播
|
||||
if (!self.isPageActive) return;
|
||||
|
||||
try {
|
||||
// 导入 Intent 类以使用其方法
|
||||
const Intent = plus.android.importClass("android.content.Intent");
|
||||
|
||||
const scanResult = intent.getStringExtra("data");
|
||||
const sourceBytes = intent.getByteArrayExtra("source_byte");
|
||||
|
||||
console.log('商米扫码结果:', scanResult, sourceBytes);
|
||||
|
||||
if (scanResult) {
|
||||
self.handleScanResult(scanResult, scanCallback);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('处理商米广播数据时出错:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// 注册广播接收器
|
||||
main.registerReceiver(receiver, filter);
|
||||
this.scanReceiver = receiver;
|
||||
console.log('商米扫码广播接收器注册成功');
|
||||
resolve();
|
||||
} catch (error) {
|
||||
console.error('注册商米广播接收器失败:', error);
|
||||
reject(error);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 注册新大陆扫码头广播接收器
|
||||
registerNewlandBroadcast(scanCallback) {
|
||||
try {
|
||||
const main = plus.android.runtimeMainActivity();
|
||||
|
||||
// 先配置扫码枪广播设置
|
||||
try {
|
||||
const Intent = plus.android.importClass("android.content.Intent");
|
||||
const intent = new Intent("com.android.scanner.service_settings");
|
||||
intent.putExtra(
|
||||
"action_barcode_broadcast",
|
||||
"com.android.server.scannerservice.broadcast"
|
||||
);
|
||||
intent.putExtra("key_barcode_broadcast", "scannerdata");
|
||||
main.sendBroadcast(intent);
|
||||
console.log('新大陆扫码枪广播配置完成');
|
||||
} catch (error) {
|
||||
console.error("配置新大陆扫码枪广播失败:", error);
|
||||
}
|
||||
|
||||
// 注册广播接收器
|
||||
const IntentFilter = plus.android.importClass(
|
||||
"android.content.IntentFilter"
|
||||
);
|
||||
const filter = new IntentFilter();
|
||||
filter.addAction("com.android.server.scannerservice.broadcast");
|
||||
console.log("添加新大陆广播action完成");
|
||||
|
||||
const self = this;
|
||||
const receiver = plus.android.implements(
|
||||
"io.dcloud.feature.internal.reflect.BroadcastReceiver",
|
||||
{
|
||||
onReceive: (context, intent) => {
|
||||
console.log('新大陆扫码广播接收,isPageActive:', self.isPageActive);
|
||||
// 只有当页面活动时才处理广播
|
||||
if (!self.isPageActive) return;
|
||||
|
||||
try {
|
||||
// 导入 Intent 类以使用其方法
|
||||
const Intent = plus.android.importClass("android.content.Intent");
|
||||
|
||||
const scanResult = intent.getStringExtra("scannerdata");
|
||||
console.log("新大陆扫码结果:", scanResult);
|
||||
if (scanResult) {
|
||||
self.handleScanResult(scanResult, scanCallback);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("处理新大陆广播数据时出错:", error);
|
||||
}
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// 注册广播接收器
|
||||
main.registerReceiver(receiver, filter);
|
||||
this.scanReceiver = receiver;
|
||||
console.log("新大陆扫码广播注册成功,等待扫码...");
|
||||
} catch (error) {
|
||||
console.error("注册新大陆扫码广播失败:", error);
|
||||
throw error;
|
||||
}
|
||||
},
|
||||
|
||||
// 处理扫码结果的统一方法
|
||||
handleScanResult(scanResult, scanCallback) {
|
||||
try {
|
||||
// 数据清理:去除空格、换行符等
|
||||
let cleanCode = scanResult.replace(/\s+/g, '').replace(/[\r\n]/g, '');
|
||||
|
||||
console.log("扫码结果:", cleanCode);
|
||||
|
||||
if (scanCallback) {
|
||||
scanCallback(cleanCode);
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("处理扫码结果时出错:", error);
|
||||
}
|
||||
},
|
||||
|
||||
// 取消扫码广播监听
|
||||
unregisterScanBroadcast() {
|
||||
if (this.scanReceiver) {
|
||||
try {
|
||||
const main = plus.android.runtimeMainActivity();
|
||||
main.unregisterReceiver(this.scanReceiver);
|
||||
this.scanReceiver = null;
|
||||
console.log("扫码广播注销成功");
|
||||
} catch (err) {
|
||||
console.error("注销扫码广播失败:", err);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 通用的商品扫描处理方法
|
||||
handleGoodsScan(scanCode, successCallback, errorCallback) {
|
||||
const trimmedCode = scanCode ? scanCode.toString().trim() : "";
|
||||
|
||||
if (!trimmedCode) {
|
||||
this.playError && this.playError();
|
||||
errorCallback && errorCallback("无效的二维码!");
|
||||
return;
|
||||
}
|
||||
|
||||
// 根据业务类型处理不同的扫码逻辑
|
||||
if (this.processScanCode) {
|
||||
this.processScanCode(trimmedCode, successCallback, errorCallback);
|
||||
} else {
|
||||
// 默认处理方式
|
||||
successCallback && successCallback(trimmedCode);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 页面激活状态管理
|
||||
onShow() {
|
||||
this.isPageActive = true;
|
||||
console.log('页面显示,设置 isPageActive 为 true');
|
||||
},
|
||||
|
||||
onHide() {
|
||||
this.isPageActive = false;
|
||||
},
|
||||
|
||||
onUnload() {
|
||||
this.isPageActive = false;
|
||||
this.unregisterScanBroadcast();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,751 @@
|
||||
(function (factory) {
|
||||
if (typeof exports === 'object') {
|
||||
// Node/CommonJS
|
||||
module.exports = factory();
|
||||
} else if (typeof define === 'function' && define.amd) {
|
||||
// AMD
|
||||
define(factory);
|
||||
} else {
|
||||
// Browser globals (with support for web workers)
|
||||
var glob;
|
||||
|
||||
try {
|
||||
glob = window;
|
||||
} catch (e) {
|
||||
glob = self;
|
||||
}
|
||||
|
||||
glob.SparkMD5 = factory();
|
||||
}
|
||||
}(function (undefined) {
|
||||
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* Fastest md5 implementation around (JKM md5).
|
||||
* Credits: Joseph Myers
|
||||
*
|
||||
* @see http://www.myersdaily.org/joseph/javascript/md5-text.html
|
||||
* @see http://jsperf.com/md5-shootout/7
|
||||
*/
|
||||
|
||||
/* this function is much faster,
|
||||
so if possible we use it. Some IEs
|
||||
are the only ones I know of that
|
||||
need the idiotic second function,
|
||||
generated by an if clause. */
|
||||
var add32 = function (a, b) {
|
||||
return (a + b) & 0xFFFFFFFF;
|
||||
},
|
||||
hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
|
||||
|
||||
|
||||
function cmn(q, a, b, x, s, t) {
|
||||
a = add32(add32(a, q), add32(x, t));
|
||||
return add32((a << s) | (a >>> (32 - s)), b);
|
||||
}
|
||||
|
||||
function md5cycle(x, k) {
|
||||
var a = x[0],
|
||||
b = x[1],
|
||||
c = x[2],
|
||||
d = x[3];
|
||||
|
||||
a += (b & c | ~b & d) + k[0] - 680876936 | 0;
|
||||
a = (a << 7 | a >>> 25) + b | 0;
|
||||
d += (a & b | ~a & c) + k[1] - 389564586 | 0;
|
||||
d = (d << 12 | d >>> 20) + a | 0;
|
||||
c += (d & a | ~d & b) + k[2] + 606105819 | 0;
|
||||
c = (c << 17 | c >>> 15) + d | 0;
|
||||
b += (c & d | ~c & a) + k[3] - 1044525330 | 0;
|
||||
b = (b << 22 | b >>> 10) + c | 0;
|
||||
a += (b & c | ~b & d) + k[4] - 176418897 | 0;
|
||||
a = (a << 7 | a >>> 25) + b | 0;
|
||||
d += (a & b | ~a & c) + k[5] + 1200080426 | 0;
|
||||
d = (d << 12 | d >>> 20) + a | 0;
|
||||
c += (d & a | ~d & b) + k[6] - 1473231341 | 0;
|
||||
c = (c << 17 | c >>> 15) + d | 0;
|
||||
b += (c & d | ~c & a) + k[7] - 45705983 | 0;
|
||||
b = (b << 22 | b >>> 10) + c | 0;
|
||||
a += (b & c | ~b & d) + k[8] + 1770035416 | 0;
|
||||
a = (a << 7 | a >>> 25) + b | 0;
|
||||
d += (a & b | ~a & c) + k[9] - 1958414417 | 0;
|
||||
d = (d << 12 | d >>> 20) + a | 0;
|
||||
c += (d & a | ~d & b) + k[10] - 42063 | 0;
|
||||
c = (c << 17 | c >>> 15) + d | 0;
|
||||
b += (c & d | ~c & a) + k[11] - 1990404162 | 0;
|
||||
b = (b << 22 | b >>> 10) + c | 0;
|
||||
a += (b & c | ~b & d) + k[12] + 1804603682 | 0;
|
||||
a = (a << 7 | a >>> 25) + b | 0;
|
||||
d += (a & b | ~a & c) + k[13] - 40341101 | 0;
|
||||
d = (d << 12 | d >>> 20) + a | 0;
|
||||
c += (d & a | ~d & b) + k[14] - 1502002290 | 0;
|
||||
c = (c << 17 | c >>> 15) + d | 0;
|
||||
b += (c & d | ~c & a) + k[15] + 1236535329 | 0;
|
||||
b = (b << 22 | b >>> 10) + c | 0;
|
||||
|
||||
a += (b & d | c & ~d) + k[1] - 165796510 | 0;
|
||||
a = (a << 5 | a >>> 27) + b | 0;
|
||||
d += (a & c | b & ~c) + k[6] - 1069501632 | 0;
|
||||
d = (d << 9 | d >>> 23) + a | 0;
|
||||
c += (d & b | a & ~b) + k[11] + 643717713 | 0;
|
||||
c = (c << 14 | c >>> 18) + d | 0;
|
||||
b += (c & a | d & ~a) + k[0] - 373897302 | 0;
|
||||
b = (b << 20 | b >>> 12) + c | 0;
|
||||
a += (b & d | c & ~d) + k[5] - 701558691 | 0;
|
||||
a = (a << 5 | a >>> 27) + b | 0;
|
||||
d += (a & c | b & ~c) + k[10] + 38016083 | 0;
|
||||
d = (d << 9 | d >>> 23) + a | 0;
|
||||
c += (d & b | a & ~b) + k[15] - 660478335 | 0;
|
||||
c = (c << 14 | c >>> 18) + d | 0;
|
||||
b += (c & a | d & ~a) + k[4] - 405537848 | 0;
|
||||
b = (b << 20 | b >>> 12) + c | 0;
|
||||
a += (b & d | c & ~d) + k[9] + 568446438 | 0;
|
||||
a = (a << 5 | a >>> 27) + b | 0;
|
||||
d += (a & c | b & ~c) + k[14] - 1019803690 | 0;
|
||||
d = (d << 9 | d >>> 23) + a | 0;
|
||||
c += (d & b | a & ~b) + k[3] - 187363961 | 0;
|
||||
c = (c << 14 | c >>> 18) + d | 0;
|
||||
b += (c & a | d & ~a) + k[8] + 1163531501 | 0;
|
||||
b = (b << 20 | b >>> 12) + c | 0;
|
||||
a += (b & d | c & ~d) + k[13] - 1444681467 | 0;
|
||||
a = (a << 5 | a >>> 27) + b | 0;
|
||||
d += (a & c | b & ~c) + k[2] - 51403784 | 0;
|
||||
d = (d << 9 | d >>> 23) + a | 0;
|
||||
c += (d & b | a & ~b) + k[7] + 1735328473 | 0;
|
||||
c = (c << 14 | c >>> 18) + d | 0;
|
||||
b += (c & a | d & ~a) + k[12] - 1926607734 | 0;
|
||||
b = (b << 20 | b >>> 12) + c | 0;
|
||||
|
||||
a += (b ^ c ^ d) + k[5] - 378558 | 0;
|
||||
a = (a << 4 | a >>> 28) + b | 0;
|
||||
d += (a ^ b ^ c) + k[8] - 2022574463 | 0;
|
||||
d = (d << 11 | d >>> 21) + a | 0;
|
||||
c += (d ^ a ^ b) + k[11] + 1839030562 | 0;
|
||||
c = (c << 16 | c >>> 16) + d | 0;
|
||||
b += (c ^ d ^ a) + k[14] - 35309556 | 0;
|
||||
b = (b << 23 | b >>> 9) + c | 0;
|
||||
a += (b ^ c ^ d) + k[1] - 1530992060 | 0;
|
||||
a = (a << 4 | a >>> 28) + b | 0;
|
||||
d += (a ^ b ^ c) + k[4] + 1272893353 | 0;
|
||||
d = (d << 11 | d >>> 21) + a | 0;
|
||||
c += (d ^ a ^ b) + k[7] - 155497632 | 0;
|
||||
c = (c << 16 | c >>> 16) + d | 0;
|
||||
b += (c ^ d ^ a) + k[10] - 1094730640 | 0;
|
||||
b = (b << 23 | b >>> 9) + c | 0;
|
||||
a += (b ^ c ^ d) + k[13] + 681279174 | 0;
|
||||
a = (a << 4 | a >>> 28) + b | 0;
|
||||
d += (a ^ b ^ c) + k[0] - 358537222 | 0;
|
||||
d = (d << 11 | d >>> 21) + a | 0;
|
||||
c += (d ^ a ^ b) + k[3] - 722521979 | 0;
|
||||
c = (c << 16 | c >>> 16) + d | 0;
|
||||
b += (c ^ d ^ a) + k[6] + 76029189 | 0;
|
||||
b = (b << 23 | b >>> 9) + c | 0;
|
||||
a += (b ^ c ^ d) + k[9] - 640364487 | 0;
|
||||
a = (a << 4 | a >>> 28) + b | 0;
|
||||
d += (a ^ b ^ c) + k[12] - 421815835 | 0;
|
||||
d = (d << 11 | d >>> 21) + a | 0;
|
||||
c += (d ^ a ^ b) + k[15] + 530742520 | 0;
|
||||
c = (c << 16 | c >>> 16) + d | 0;
|
||||
b += (c ^ d ^ a) + k[2] - 995338651 | 0;
|
||||
b = (b << 23 | b >>> 9) + c | 0;
|
||||
|
||||
a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;
|
||||
a = (a << 6 | a >>> 26) + b | 0;
|
||||
d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;
|
||||
d = (d << 10 | d >>> 22) + a | 0;
|
||||
c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;
|
||||
c = (c << 15 | c >>> 17) + d | 0;
|
||||
b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;
|
||||
b = (b << 21 |b >>> 11) + c | 0;
|
||||
a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;
|
||||
a = (a << 6 | a >>> 26) + b | 0;
|
||||
d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;
|
||||
d = (d << 10 | d >>> 22) + a | 0;
|
||||
c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;
|
||||
c = (c << 15 | c >>> 17) + d | 0;
|
||||
b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;
|
||||
b = (b << 21 |b >>> 11) + c | 0;
|
||||
a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;
|
||||
a = (a << 6 | a >>> 26) + b | 0;
|
||||
d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;
|
||||
d = (d << 10 | d >>> 22) + a | 0;
|
||||
c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;
|
||||
c = (c << 15 | c >>> 17) + d | 0;
|
||||
b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;
|
||||
b = (b << 21 |b >>> 11) + c | 0;
|
||||
a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;
|
||||
a = (a << 6 | a >>> 26) + b | 0;
|
||||
d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;
|
||||
d = (d << 10 | d >>> 22) + a | 0;
|
||||
c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;
|
||||
c = (c << 15 | c >>> 17) + d | 0;
|
||||
b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;
|
||||
b = (b << 21 | b >>> 11) + c | 0;
|
||||
|
||||
x[0] = a + x[0] | 0;
|
||||
x[1] = b + x[1] | 0;
|
||||
x[2] = c + x[2] | 0;
|
||||
x[3] = d + x[3] | 0;
|
||||
}
|
||||
|
||||
function md5blk(s) {
|
||||
var md5blks = [],
|
||||
i; /* Andy King said do it this way. */
|
||||
|
||||
for (i = 0; i < 64; i += 4) {
|
||||
md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);
|
||||
}
|
||||
return md5blks;
|
||||
}
|
||||
|
||||
function md5blk_array(a) {
|
||||
var md5blks = [],
|
||||
i; /* Andy King said do it this way. */
|
||||
|
||||
for (i = 0; i < 64; i += 4) {
|
||||
md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);
|
||||
}
|
||||
return md5blks;
|
||||
}
|
||||
|
||||
function md51(s) {
|
||||
var n = s.length,
|
||||
state = [1732584193, -271733879, -1732584194, 271733878],
|
||||
i,
|
||||
length,
|
||||
tail,
|
||||
tmp,
|
||||
lo,
|
||||
hi;
|
||||
|
||||
for (i = 64; i <= n; i += 64) {
|
||||
md5cycle(state, md5blk(s.substring(i - 64, i)));
|
||||
}
|
||||
s = s.substring(i - 64);
|
||||
length = s.length;
|
||||
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
for (i = 0; i < length; i += 1) {
|
||||
tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);
|
||||
}
|
||||
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
|
||||
if (i > 55) {
|
||||
md5cycle(state, tail);
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
tail[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Beware that the final length might not fit in 32 bits so we take care of that
|
||||
tmp = n * 8;
|
||||
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
|
||||
lo = parseInt(tmp[2], 16);
|
||||
hi = parseInt(tmp[1], 16) || 0;
|
||||
|
||||
tail[14] = lo;
|
||||
tail[15] = hi;
|
||||
|
||||
md5cycle(state, tail);
|
||||
return state;
|
||||
}
|
||||
|
||||
function md51_array(a) {
|
||||
var n = a.length,
|
||||
state = [1732584193, -271733879, -1732584194, 271733878],
|
||||
i,
|
||||
length,
|
||||
tail,
|
||||
tmp,
|
||||
lo,
|
||||
hi;
|
||||
|
||||
for (i = 64; i <= n; i += 64) {
|
||||
md5cycle(state, md5blk_array(a.subarray(i - 64, i)));
|
||||
}
|
||||
|
||||
// Not sure if it is a bug, however IE10 will always produce a sub array of length 1
|
||||
// containing the last element of the parent array if the sub array specified starts
|
||||
// beyond the length of the parent array - weird.
|
||||
// https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue
|
||||
a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);
|
||||
|
||||
length = a.length;
|
||||
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
|
||||
for (i = 0; i < length; i += 1) {
|
||||
tail[i >> 2] |= a[i] << ((i % 4) << 3);
|
||||
}
|
||||
|
||||
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
|
||||
if (i > 55) {
|
||||
md5cycle(state, tail);
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
tail[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Beware that the final length might not fit in 32 bits so we take care of that
|
||||
tmp = n * 8;
|
||||
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
|
||||
lo = parseInt(tmp[2], 16);
|
||||
hi = parseInt(tmp[1], 16) || 0;
|
||||
|
||||
tail[14] = lo;
|
||||
tail[15] = hi;
|
||||
|
||||
md5cycle(state, tail);
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
function rhex(n) {
|
||||
var s = '',
|
||||
j;
|
||||
for (j = 0; j < 4; j += 1) {
|
||||
s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
function hex(x) {
|
||||
var i;
|
||||
for (i = 0; i < x.length; i += 1) {
|
||||
x[i] = rhex(x[i]);
|
||||
}
|
||||
return x.join('');
|
||||
}
|
||||
|
||||
// In some cases the fast add32 function cannot be used..
|
||||
if (hex(md51('hello')) !== '5d41402abc4b2a76b9719d911017c592') {
|
||||
add32 = function (x, y) {
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
|
||||
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
};
|
||||
}
|
||||
|
||||
// ---------------------------------------------------
|
||||
|
||||
/**
|
||||
* ArrayBuffer slice polyfill.
|
||||
*
|
||||
* @see https://github.com/ttaubert/node-arraybuffer-slice
|
||||
*/
|
||||
|
||||
if (typeof ArrayBuffer !== 'undefined' && !ArrayBuffer.prototype.slice) {
|
||||
(function () {
|
||||
function clamp(val, length) {
|
||||
val = (val | 0) || 0;
|
||||
|
||||
if (val < 0) {
|
||||
return Math.max(val + length, 0);
|
||||
}
|
||||
|
||||
return Math.min(val, length);
|
||||
}
|
||||
|
||||
ArrayBuffer.prototype.slice = function (from, to) {
|
||||
var length = this.byteLength,
|
||||
begin = clamp(from, length),
|
||||
end = length,
|
||||
num,
|
||||
target,
|
||||
targetArray,
|
||||
sourceArray;
|
||||
|
||||
if (to !== undefined) {
|
||||
end = clamp(to, length);
|
||||
}
|
||||
|
||||
if (begin > end) {
|
||||
return new ArrayBuffer(0);
|
||||
}
|
||||
|
||||
num = end - begin;
|
||||
target = new ArrayBuffer(num);
|
||||
targetArray = new Uint8Array(target);
|
||||
|
||||
sourceArray = new Uint8Array(this, begin, num);
|
||||
targetArray.set(sourceArray);
|
||||
|
||||
return target;
|
||||
};
|
||||
})();
|
||||
}
|
||||
|
||||
// ---------------------------------------------------
|
||||
|
||||
/**
|
||||
* Helpers.
|
||||
*/
|
||||
|
||||
function toUtf8(str) {
|
||||
if (/[\u0080-\uFFFF]/.test(str)) {
|
||||
str = unescape(encodeURIComponent(str));
|
||||
}
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
function utf8Str2ArrayBuffer(str, returnUInt8Array) {
|
||||
var length = str.length,
|
||||
buff = new ArrayBuffer(length),
|
||||
arr = new Uint8Array(buff),
|
||||
i;
|
||||
|
||||
for (i = 0; i < length; i += 1) {
|
||||
arr[i] = str.charCodeAt(i);
|
||||
}
|
||||
|
||||
return returnUInt8Array ? arr : buff;
|
||||
}
|
||||
|
||||
function arrayBuffer2Utf8Str(buff) {
|
||||
return String.fromCharCode.apply(null, new Uint8Array(buff));
|
||||
}
|
||||
|
||||
function concatenateArrayBuffers(first, second, returnUInt8Array) {
|
||||
var result = new Uint8Array(first.byteLength + second.byteLength);
|
||||
|
||||
result.set(new Uint8Array(first));
|
||||
result.set(new Uint8Array(second), first.byteLength);
|
||||
|
||||
return returnUInt8Array ? result : result.buffer;
|
||||
}
|
||||
|
||||
function hexToBinaryString(hex) {
|
||||
var bytes = [],
|
||||
length = hex.length,
|
||||
x;
|
||||
|
||||
for (x = 0; x < length - 1; x += 2) {
|
||||
bytes.push(parseInt(hex.substr(x, 2), 16));
|
||||
}
|
||||
|
||||
return String.fromCharCode.apply(String, bytes);
|
||||
}
|
||||
|
||||
// ---------------------------------------------------
|
||||
|
||||
/**
|
||||
* SparkMD5 OOP implementation.
|
||||
*
|
||||
* Use this class to perform an incremental md5, otherwise use the
|
||||
* static methods instead.
|
||||
*/
|
||||
|
||||
function SparkMD5() {
|
||||
// call reset to init the instance
|
||||
this.reset();
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends a string.
|
||||
* A conversion will be applied if an utf8 string is detected.
|
||||
*
|
||||
* @param {String} str The string to be appended
|
||||
*
|
||||
* @return {SparkMD5} The instance itself
|
||||
*/
|
||||
SparkMD5.prototype.append = function (str) {
|
||||
// Converts the string to utf8 bytes if necessary
|
||||
// Then append as binary
|
||||
this.appendBinary(toUtf8(str));
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Appends a binary string.
|
||||
*
|
||||
* @param {String} contents The binary string to be appended
|
||||
*
|
||||
* @return {SparkMD5} The instance itself
|
||||
*/
|
||||
SparkMD5.prototype.appendBinary = function (contents) {
|
||||
this._buff += contents;
|
||||
this._length += contents.length;
|
||||
|
||||
var length = this._buff.length,
|
||||
i;
|
||||
|
||||
for (i = 64; i <= length; i += 64) {
|
||||
md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));
|
||||
}
|
||||
|
||||
this._buff = this._buff.substring(i - 64);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Finishes the incremental computation, reseting the internal state and
|
||||
* returning the result.
|
||||
*
|
||||
* @param {Boolean} raw True to get the raw string, false to get the hex string
|
||||
*
|
||||
* @return {String} The result
|
||||
*/
|
||||
SparkMD5.prototype.end = function (raw) {
|
||||
var buff = this._buff,
|
||||
length = buff.length,
|
||||
i,
|
||||
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
ret;
|
||||
|
||||
for (i = 0; i < length; i += 1) {
|
||||
tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);
|
||||
}
|
||||
|
||||
this._finish(tail, length);
|
||||
ret = hex(this._hash);
|
||||
|
||||
if (raw) {
|
||||
ret = hexToBinaryString(ret);
|
||||
}
|
||||
|
||||
this.reset();
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
/**
|
||||
* Resets the internal state of the computation.
|
||||
*
|
||||
* @return {SparkMD5} The instance itself
|
||||
*/
|
||||
SparkMD5.prototype.reset = function () {
|
||||
this._buff = '';
|
||||
this._length = 0;
|
||||
this._hash = [1732584193, -271733879, -1732584194, 271733878];
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the internal state of the computation.
|
||||
*
|
||||
* @return {Object} The state
|
||||
*/
|
||||
SparkMD5.prototype.getState = function () {
|
||||
return {
|
||||
buff: this._buff,
|
||||
length: this._length,
|
||||
hash: this._hash.slice()
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the internal state of the computation.
|
||||
*
|
||||
* @param {Object} state The state
|
||||
*
|
||||
* @return {SparkMD5} The instance itself
|
||||
*/
|
||||
SparkMD5.prototype.setState = function (state) {
|
||||
this._buff = state.buff;
|
||||
this._length = state.length;
|
||||
this._hash = state.hash;
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Releases memory used by the incremental buffer and other additional
|
||||
* resources. If you plan to use the instance again, use reset instead.
|
||||
*/
|
||||
SparkMD5.prototype.destroy = function () {
|
||||
delete this._hash;
|
||||
delete this._buff;
|
||||
delete this._length;
|
||||
};
|
||||
|
||||
/**
|
||||
* Finish the final calculation based on the tail.
|
||||
*
|
||||
* @param {Array} tail The tail (will be modified)
|
||||
* @param {Number} length The length of the remaining buffer
|
||||
*/
|
||||
SparkMD5.prototype._finish = function (tail, length) {
|
||||
var i = length,
|
||||
tmp,
|
||||
lo,
|
||||
hi;
|
||||
|
||||
tail[i >> 2] |= 0x80 << ((i % 4) << 3);
|
||||
if (i > 55) {
|
||||
md5cycle(this._hash, tail);
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
tail[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Do the final computation based on the tail and length
|
||||
// Beware that the final length may not fit in 32 bits so we take care of that
|
||||
tmp = this._length * 8;
|
||||
tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);
|
||||
lo = parseInt(tmp[2], 16);
|
||||
hi = parseInt(tmp[1], 16) || 0;
|
||||
|
||||
tail[14] = lo;
|
||||
tail[15] = hi;
|
||||
md5cycle(this._hash, tail);
|
||||
};
|
||||
|
||||
/**
|
||||
* Performs the md5 hash on a string.
|
||||
* A conversion will be applied if utf8 string is detected.
|
||||
*
|
||||
* @param {String} str The string
|
||||
* @param {Boolean} [raw] True to get the raw string, false to get the hex string
|
||||
*
|
||||
* @return {String} The result
|
||||
*/
|
||||
SparkMD5.hash = function (str, raw) {
|
||||
// Converts the string to utf8 bytes if necessary
|
||||
// Then compute it using the binary function
|
||||
return SparkMD5.hashBinary(toUtf8(str), raw);
|
||||
};
|
||||
|
||||
/**
|
||||
* Performs the md5 hash on a binary string.
|
||||
*
|
||||
* @param {String} content The binary string
|
||||
* @param {Boolean} [raw] True to get the raw string, false to get the hex string
|
||||
*
|
||||
* @return {String} The result
|
||||
*/
|
||||
SparkMD5.hashBinary = function (content, raw) {
|
||||
var hash = md51(content),
|
||||
ret = hex(hash);
|
||||
|
||||
return raw ? hexToBinaryString(ret) : ret;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------
|
||||
|
||||
/**
|
||||
* SparkMD5 OOP implementation for array buffers.
|
||||
*
|
||||
* Use this class to perform an incremental md5 ONLY for array buffers.
|
||||
*/
|
||||
SparkMD5.ArrayBuffer = function () {
|
||||
// call reset to init the instance
|
||||
this.reset();
|
||||
};
|
||||
|
||||
/**
|
||||
* Appends an array buffer.
|
||||
*
|
||||
* @param {ArrayBuffer} arr The array to be appended
|
||||
*
|
||||
* @return {SparkMD5.ArrayBuffer} The instance itself
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.prototype.append = function (arr) {
|
||||
var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),
|
||||
length = buff.length,
|
||||
i;
|
||||
|
||||
this._length += arr.byteLength;
|
||||
|
||||
for (i = 64; i <= length; i += 64) {
|
||||
md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));
|
||||
}
|
||||
|
||||
this._buff = (i - 64) < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Finishes the incremental computation, reseting the internal state and
|
||||
* returning the result.
|
||||
*
|
||||
* @param {Boolean} raw True to get the raw string, false to get the hex string
|
||||
*
|
||||
* @return {String} The result
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.prototype.end = function (raw) {
|
||||
var buff = this._buff,
|
||||
length = buff.length,
|
||||
tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
||||
i,
|
||||
ret;
|
||||
|
||||
for (i = 0; i < length; i += 1) {
|
||||
tail[i >> 2] |= buff[i] << ((i % 4) << 3);
|
||||
}
|
||||
|
||||
this._finish(tail, length);
|
||||
ret = hex(this._hash);
|
||||
|
||||
if (raw) {
|
||||
ret = hexToBinaryString(ret);
|
||||
}
|
||||
|
||||
this.reset();
|
||||
|
||||
return ret;
|
||||
};
|
||||
|
||||
/**
|
||||
* Resets the internal state of the computation.
|
||||
*
|
||||
* @return {SparkMD5.ArrayBuffer} The instance itself
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.prototype.reset = function () {
|
||||
this._buff = new Uint8Array(0);
|
||||
this._length = 0;
|
||||
this._hash = [1732584193, -271733879, -1732584194, 271733878];
|
||||
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the internal state of the computation.
|
||||
*
|
||||
* @return {Object} The state
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.prototype.getState = function () {
|
||||
var state = SparkMD5.prototype.getState.call(this);
|
||||
|
||||
// Convert buffer to a string
|
||||
state.buff = arrayBuffer2Utf8Str(state.buff);
|
||||
|
||||
return state;
|
||||
};
|
||||
|
||||
/**
|
||||
* Gets the internal state of the computation.
|
||||
*
|
||||
* @param {Object} state The state
|
||||
*
|
||||
* @return {SparkMD5.ArrayBuffer} The instance itself
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.prototype.setState = function (state) {
|
||||
// Convert string to buffer
|
||||
state.buff = utf8Str2ArrayBuffer(state.buff, true);
|
||||
|
||||
return SparkMD5.prototype.setState.call(this, state);
|
||||
};
|
||||
|
||||
SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;
|
||||
|
||||
SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;
|
||||
|
||||
/**
|
||||
* Performs the md5 hash on an array buffer.
|
||||
*
|
||||
* @param {ArrayBuffer} arr The array buffer
|
||||
* @param {Boolean} [raw] True to get the raw string, false to get the hex one
|
||||
*
|
||||
* @return {String} The result
|
||||
*/
|
||||
SparkMD5.ArrayBuffer.hash = function (arr, raw) {
|
||||
var hash = md51_array(new Uint8Array(arr)),
|
||||
ret = hex(hash);
|
||||
|
||||
return raw ? hexToBinaryString(ret) : ret;
|
||||
};
|
||||
|
||||
return SparkMD5;
|
||||
}));
|
||||
@@ -0,0 +1,858 @@
|
||||
// 判断类型集合
|
||||
export const checkStr = (str, type) => {
|
||||
switch (type) {
|
||||
case 'phone': //手机号码
|
||||
return /^1[3|4|5|6|7|8|9][0-9]{9}$/.test(str);
|
||||
case 'tel': //座机
|
||||
return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str);
|
||||
case 'card': //身份证
|
||||
return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(str);
|
||||
case 'pwd': //密码以字母开头,长度在6~18之间,只能包含字母、数字和下划线
|
||||
return /^[a-zA-Z]\w{5,17}$/.test(str)
|
||||
case 'postal': //邮政编码
|
||||
return /[1-9]\d{5}(?!\d)/.test(str);
|
||||
case 'QQ': //QQ号
|
||||
return /^[1-9][0-9]{4,9}$/.test(str);
|
||||
case 'email': //邮箱
|
||||
return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str);
|
||||
case 'money': //金额(小数点2位)
|
||||
return /^\d*(?:\.\d{0,2})?$/.test(str);
|
||||
case 'URL': //网址
|
||||
return /(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/.test(str)
|
||||
case 'IP': //IP
|
||||
return /((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))/.test(str);
|
||||
case 'date': //日期时间
|
||||
return /^(\d{4})\-(\d{2})\-(\d{2}) (\d{2})(?:\:\d{2}|:(\d{2}):(\d{2}))$/.test(str) || /^(\d{4})\-(\d{2})\-(\d{2})$/
|
||||
.test(str)
|
||||
case 'number': //数字
|
||||
return /^[0-9]$/.test(str);
|
||||
case 'english': //英文
|
||||
return /^[a-zA-Z]+$/.test(str);
|
||||
case 'chinese': //中文
|
||||
return /^[\\u4E00-\\u9FA5]+$/.test(str);
|
||||
case 'lower': //小写
|
||||
return /^[a-z]+$/.test(str);
|
||||
case 'upper': //大写
|
||||
return /^[A-Z]+$/.test(str);
|
||||
case 'HTML': //HTML标记
|
||||
return /<("[^"]*"|'[^']*'|[^'">])*>/.test(str);
|
||||
default:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 格式化时间-小于10补0
|
||||
function formatDigit(n) {
|
||||
return n.toString().replace(/^(\d)$/, '0$1');
|
||||
}
|
||||
// 格式化时间,通用
|
||||
export const formatDate = (timestamp, formats) => {
|
||||
/* formats格式包括:
|
||||
1. Y-M-D
|
||||
2. Y-M-D h:m:s
|
||||
3. Y年M月D日
|
||||
4. Y年M月D日 h时m分
|
||||
5. Y年M月D日 h时m分s秒
|
||||
示例:console.log(formatDate(1500305226034, 'Y年M月D日 h:m:s')) ==> 2017年07月17日 23:27:06
|
||||
*/
|
||||
formats = formats || 'Y-M-D';
|
||||
var myDate = undefined;
|
||||
if (timestamp) {
|
||||
if (typeof(timestamp) != 'string') {
|
||||
myDate = timestamp;
|
||||
} else {
|
||||
myDate = new Date(timestamp);
|
||||
}
|
||||
} else {
|
||||
myDate = new Date();
|
||||
}
|
||||
|
||||
var year = myDate.getFullYear();
|
||||
var month = formatDigit(myDate.getMonth() + 1);
|
||||
var day = formatDigit(myDate.getDate());
|
||||
var hour = formatDigit(myDate.getHours());
|
||||
var minute = formatDigit(myDate.getMinutes());
|
||||
var second = formatDigit(myDate.getSeconds());
|
||||
return formats.replace(/Y|M|D|h|m|s/g, (matches) => {
|
||||
return {
|
||||
Y: year,
|
||||
M: month,
|
||||
D: day,
|
||||
h: hour,
|
||||
m: minute,
|
||||
s: second
|
||||
} [matches];
|
||||
});
|
||||
}
|
||||
|
||||
// 验证邮箱
|
||||
export const isEmail = (s) => {
|
||||
return /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
|
||||
}
|
||||
// 验证手机号码
|
||||
export const isMobile = (s) => {
|
||||
return /^1[0-9]{10}$/.test(s)
|
||||
}
|
||||
// 验证电话号码
|
||||
export const isPhone = (s) => {
|
||||
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
|
||||
}
|
||||
// 验证是否url地址
|
||||
export const isURL = (s) => {
|
||||
return /^http[s]?:\/\/.*/.test(s)
|
||||
}
|
||||
// 验证是否字符串
|
||||
export const isString = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'String'
|
||||
}
|
||||
// 验证是否是否数字
|
||||
export const isNumber = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Number'
|
||||
}
|
||||
// 验证是否是Boolean
|
||||
export const isBoolean = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Boolean'
|
||||
}
|
||||
// 验证是否是函数
|
||||
export const isFunction = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Function'
|
||||
}
|
||||
//是否为null
|
||||
export const isNull = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Null'
|
||||
}
|
||||
//是否undefined
|
||||
export const isUndefined = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Undefined'
|
||||
}
|
||||
//是否对象
|
||||
export const isObj = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Object'
|
||||
}
|
||||
//是否数组
|
||||
export const isArray = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Array'
|
||||
}
|
||||
// 是否时间对象
|
||||
export const isDate = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Date'
|
||||
}
|
||||
//是否正则
|
||||
export const isRegExp = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'RegExp'
|
||||
}
|
||||
// 是否错误对象
|
||||
export const isError = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Error'
|
||||
}
|
||||
//是否Symbol函数
|
||||
export const isSymbol = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Symbol'
|
||||
}
|
||||
// 是否Promise对象
|
||||
export const isPromise = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Promise'
|
||||
}
|
||||
// 是否Set对象
|
||||
export const isSet = (o) => {
|
||||
return Object.prototype.toString.call(o).slice(8, -1) === 'Set'
|
||||
}
|
||||
//判断数据是不是引用类型的数据
|
||||
export function isObject(value) {
|
||||
let type = typeof value;
|
||||
return value != null && (type == 'object' || type == 'function');
|
||||
}
|
||||
|
||||
// 字符串超出多少字显示省略号
|
||||
export function strOut(str, len=0,type) {
|
||||
type=type||'star';
|
||||
var restr = '';
|
||||
if (str) {
|
||||
if (str.length >= len) {
|
||||
restr = str.substring(0, len) + (type=='star'?'***':'...');
|
||||
} else {
|
||||
restr = str;
|
||||
}
|
||||
}
|
||||
return restr;
|
||||
}
|
||||
//浮点数加法运算--解决精度丢失(传入Number,返回Number)
|
||||
export function FloatAdd(arg1, arg2) {
|
||||
var r1, r2, m;
|
||||
try {
|
||||
r1 = arg1.toString().split('.')[1].length;
|
||||
} catch (e) {
|
||||
r1 = 0;
|
||||
}
|
||||
try {
|
||||
r2 = arg2.toString().split('.')[1].length;
|
||||
} catch (e) {
|
||||
r2 = 0;
|
||||
}
|
||||
m = Math.pow(10, Math.max(r1, r2));
|
||||
return (arg1 * m + arg2 * m) / m;
|
||||
}
|
||||
|
||||
//浮点数乘法运算--解决精度丢失(传入Number,返回Number)
|
||||
export function FloatMul(arg1, arg2) {
|
||||
var m = 0,
|
||||
s1 = arg1.toString(),
|
||||
s2 = arg2.toString();
|
||||
try {
|
||||
m += s1.split('.')[1].length;
|
||||
} catch (e) {}
|
||||
try {
|
||||
m += s2.split('.')[1].length;
|
||||
} catch (e) {}
|
||||
return (Number(s1.replace('.', '')) * Number(s2.replace('.', ''))) / Math.pow(10, m);
|
||||
}
|
||||
//随机数时间戳 (返回数字符串)
|
||||
export function uniqueId() {
|
||||
var a = Math.random,
|
||||
b = parseInt;
|
||||
return Number(new Date()).toString() + b(10 * a()) + b(10 * a()) + b(10 * a());
|
||||
}
|
||||
|
||||
// 数组随机洗牌算法
|
||||
export const shuffle = (arr) => {
|
||||
var result = [],
|
||||
random;
|
||||
while (arr.length > 0) {
|
||||
random = Math.floor(Math.random() * arr.length);
|
||||
result.push(arr[random])
|
||||
arr.splice(random, 1)
|
||||
}
|
||||
return result;
|
||||
}
|
||||
// 严格的身份证号码校验
|
||||
export const isCardID = (sId) => {
|
||||
if (!/(^\d{15}$)|(^\d{17}(\d|X|x)$)/.test(sId)) {
|
||||
console.log('你输入的身份证长度或格式错误')
|
||||
return false
|
||||
}
|
||||
//身份证城市
|
||||
var aCity = {
|
||||
11: "北京",
|
||||
12: "天津",
|
||||
13: "河北",
|
||||
14: "山西",
|
||||
15: "内蒙古",
|
||||
21: "辽宁",
|
||||
22: "吉林",
|
||||
23: "黑龙江",
|
||||
31: "上海",
|
||||
32: "江苏",
|
||||
33: "浙江",
|
||||
34: "安徽",
|
||||
35: "福建",
|
||||
36: "江西",
|
||||
37: "山东",
|
||||
41: "河南",
|
||||
42: "湖北",
|
||||
43: "湖南",
|
||||
44: "广东",
|
||||
45: "广西",
|
||||
46: "海南",
|
||||
50: "重庆",
|
||||
51: "四川",
|
||||
52: "贵州",
|
||||
53: "云南",
|
||||
54: "西藏",
|
||||
61: "陕西",
|
||||
62: "甘肃",
|
||||
63: "青海",
|
||||
64: "宁夏",
|
||||
65: "新疆",
|
||||
71: "台湾",
|
||||
81: "香港",
|
||||
82: "澳门",
|
||||
91: "国外"
|
||||
};
|
||||
if (!aCity[parseInt(sId.substr(0, 2))]) {
|
||||
console.log('你的身份证地区非法')
|
||||
return false
|
||||
}
|
||||
|
||||
// 出生日期验证
|
||||
var sBirthday = (sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2))).replace(/-/g,
|
||||
"/"),
|
||||
d = new Date(sBirthday)
|
||||
if (sBirthday != (d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate())) {
|
||||
console.log('身份证上的出生日期非法')
|
||||
return false
|
||||
}
|
||||
|
||||
// 身份证号码校验
|
||||
var sum = 0,
|
||||
weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2],
|
||||
codes = "10X98765432"
|
||||
for (var i = 0; i < sId.length - 1; i++) {
|
||||
sum += sId[i] * weights[i];
|
||||
}
|
||||
var last = codes[sum % 11]; //计算出来的最后一位身份证号码
|
||||
if (sId[sId.length - 1] != last) {
|
||||
console.log('你输入的身份证号非法')
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
// 随机整数范围
|
||||
export const random = (min, max) => {
|
||||
if (arguments.length === 2) {
|
||||
return Math.floor(min + Math.random() * ((max + 1) - min))
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// 将阿拉伯数字翻译成中文的大写数字
|
||||
export const numberToChinese = (num) => {
|
||||
var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十");
|
||||
var BB = new Array("", "十", "百", "仟", "萬", "億", "点", "");
|
||||
var a = ("" + num).replace(/(^0*)/g, "").split("."),
|
||||
k = 0,
|
||||
re = "";
|
||||
for (var i = a[0].length - 1; i >= 0; i--) {
|
||||
switch (k) {
|
||||
case 0:
|
||||
re = BB[7] + re;
|
||||
break;
|
||||
case 4:
|
||||
if (!new RegExp("0{4}//d{" + (a[0].length - i - 1) + "}$")
|
||||
.test(a[0]))
|
||||
re = BB[4] + re;
|
||||
break;
|
||||
case 8:
|
||||
re = BB[5] + re;
|
||||
BB[7] = BB[5];
|
||||
k = 0;
|
||||
break;
|
||||
}
|
||||
if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0)
|
||||
re = AA[0] + re;
|
||||
if (a[0].charAt(i) != 0)
|
||||
re = AA[a[0].charAt(i)] + BB[k % 4] + re;
|
||||
k++;
|
||||
}
|
||||
|
||||
if (a.length > 1) // 加上小数部分(如果有小数部分)
|
||||
{
|
||||
re += BB[6];
|
||||
for (var i = 0; i < a[1].length; i++)
|
||||
re += AA[a[1].charAt(i)];
|
||||
}
|
||||
if (re == '一十')
|
||||
re = "十";
|
||||
if (re.match(/^一/) && re.length == 3)
|
||||
re = re.replace("一", "");
|
||||
return re;
|
||||
}
|
||||
// 将数字转换为大写金额
|
||||
export const changeToChinese = (Num) => {
|
||||
//判断如果传递进来的不是字符的话转换为字符
|
||||
if (typeof Num == "number") {
|
||||
Num = new String(Num);
|
||||
};
|
||||
Num = Num.replace(/,/g, "") //替换tomoney()中的“,”
|
||||
Num = Num.replace(/ /g, "") //替换tomoney()中的空格
|
||||
Num = Num.replace(/¥/g, "") //替换掉可能出现的¥字符
|
||||
if (isNaN(Num)) { //验证输入的字符是否为数字
|
||||
//alert("请检查小写金额是否正确");
|
||||
return "";
|
||||
};
|
||||
//字符处理完毕后开始转换,采用前后两部分分别转换
|
||||
var part = String(Num).split(".");
|
||||
var newchar = "";
|
||||
//小数点前进行转化
|
||||
for (var i = part[0].length - 1; i >= 0; i--) {
|
||||
if (part[0].length > 10) {
|
||||
return "";
|
||||
//若数量超过拾亿单位,提示
|
||||
}
|
||||
var tmpnewchar = ""
|
||||
var perchar = part[0].charAt(i);
|
||||
switch (perchar) {
|
||||
case "0":
|
||||
tmpnewchar = "零" + tmpnewchar;
|
||||
break;
|
||||
case "1":
|
||||
tmpnewchar = "壹" + tmpnewchar;
|
||||
break;
|
||||
case "2":
|
||||
tmpnewchar = "贰" + tmpnewchar;
|
||||
break;
|
||||
case "3":
|
||||
tmpnewchar = "叁" + tmpnewchar;
|
||||
break;
|
||||
case "4":
|
||||
tmpnewchar = "肆" + tmpnewchar;
|
||||
break;
|
||||
case "5":
|
||||
tmpnewchar = "伍" + tmpnewchar;
|
||||
break;
|
||||
case "6":
|
||||
tmpnewchar = "陆" + tmpnewchar;
|
||||
break;
|
||||
case "7":
|
||||
tmpnewchar = "柒" + tmpnewchar;
|
||||
break;
|
||||
case "8":
|
||||
tmpnewchar = "捌" + tmpnewchar;
|
||||
break;
|
||||
case "9":
|
||||
tmpnewchar = "玖" + tmpnewchar;
|
||||
break;
|
||||
}
|
||||
switch (part[0].length - i - 1) {
|
||||
case 0:
|
||||
tmpnewchar = tmpnewchar + "元";
|
||||
break;
|
||||
case 1:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
|
||||
break;
|
||||
case 2:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
|
||||
break;
|
||||
case 3:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
|
||||
break;
|
||||
case 4:
|
||||
tmpnewchar = tmpnewchar + "万";
|
||||
break;
|
||||
case 5:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "拾";
|
||||
break;
|
||||
case 6:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "佰";
|
||||
break;
|
||||
case 7:
|
||||
if (perchar != 0) tmpnewchar = tmpnewchar + "仟";
|
||||
break;
|
||||
case 8:
|
||||
tmpnewchar = tmpnewchar + "亿";
|
||||
break;
|
||||
case 9:
|
||||
tmpnewchar = tmpnewchar + "拾";
|
||||
break;
|
||||
}
|
||||
var newchar = tmpnewchar + newchar;
|
||||
}
|
||||
//小数点之后进行转化
|
||||
if (Num.indexOf(".") != -1) {
|
||||
if (part[1].length > 2) {
|
||||
// alert("小数点之后只能保留两位,系统将自动截断");
|
||||
part[1] = part[1].substr(0, 2)
|
||||
}
|
||||
for (i = 0; i < part[1].length; i++) {
|
||||
tmpnewchar = ""
|
||||
perchar = part[1].charAt(i)
|
||||
switch (perchar) {
|
||||
case "0":
|
||||
tmpnewchar = "零" + tmpnewchar;
|
||||
break;
|
||||
case "1":
|
||||
tmpnewchar = "壹" + tmpnewchar;
|
||||
break;
|
||||
case "2":
|
||||
tmpnewchar = "贰" + tmpnewchar;
|
||||
break;
|
||||
case "3":
|
||||
tmpnewchar = "叁" + tmpnewchar;
|
||||
break;
|
||||
case "4":
|
||||
tmpnewchar = "肆" + tmpnewchar;
|
||||
break;
|
||||
case "5":
|
||||
tmpnewchar = "伍" + tmpnewchar;
|
||||
break;
|
||||
case "6":
|
||||
tmpnewchar = "陆" + tmpnewchar;
|
||||
break;
|
||||
case "7":
|
||||
tmpnewchar = "柒" + tmpnewchar;
|
||||
break;
|
||||
case "8":
|
||||
tmpnewchar = "捌" + tmpnewchar;
|
||||
break;
|
||||
case "9":
|
||||
tmpnewchar = "玖" + tmpnewchar;
|
||||
break;
|
||||
}
|
||||
if (i == 0) tmpnewchar = tmpnewchar + "角";
|
||||
if (i == 1) tmpnewchar = tmpnewchar + "分";
|
||||
newchar = newchar + tmpnewchar;
|
||||
}
|
||||
}
|
||||
//替换所有无用汉字
|
||||
while (newchar.search("零零") != -1)
|
||||
newchar = newchar.replace("零零", "零");
|
||||
newchar = newchar.replace("零亿", "亿");
|
||||
newchar = newchar.replace("亿万", "亿");
|
||||
newchar = newchar.replace("零万", "万");
|
||||
newchar = newchar.replace("零元", "元");
|
||||
newchar = newchar.replace("零角", "");
|
||||
newchar = newchar.replace("零分", "");
|
||||
if (newchar.charAt(newchar.length - 1) == "元") {
|
||||
newchar = newchar + "整"
|
||||
}
|
||||
return newchar;
|
||||
}
|
||||
// 判断一个元素是否在数组中
|
||||
export const arrContains = (arr, val) => {
|
||||
return arr.indexOf(val) != -1 ? true : false;
|
||||
}
|
||||
// 数组去重
|
||||
export const unique = (arr) => {
|
||||
if (Array.hasOwnProperty('from')) {
|
||||
return Array.from(new Set(arr));
|
||||
} else {
|
||||
var n = {},
|
||||
r = [];
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
if (!n[arr[i]]) {
|
||||
n[arr[i]] = true;
|
||||
r.push(arr[i]);
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
// 数组删除其中一个元素
|
||||
export const arrRemove = (arr, ele) => {
|
||||
var index = arr.indexOf(ele);
|
||||
if (index > -1) {
|
||||
arr.splice(index, 1);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
// 求数组中的最大值
|
||||
export const arrMax = (arr) => {
|
||||
return Math.max.apply(null, arr);
|
||||
}
|
||||
// 求数组中的最小值
|
||||
export const arrMin = (arr) => {
|
||||
return Math.min.apply(null, arr);
|
||||
}
|
||||
// 数组中的值求和
|
||||
export const arrSum = (arr) => {
|
||||
return arr.reduce((pre, cur) => {
|
||||
return pre + cur
|
||||
})
|
||||
}
|
||||
// 去除空格,type: 1-所有空格 2-前后空格 3-前空格 4-后空格
|
||||
export const strTrim = (str, type) => {
|
||||
type = type || 2
|
||||
switch (type) {
|
||||
case 1:
|
||||
return str.replace(/\s+/g, "");
|
||||
case 2:
|
||||
return str.replace(/(^\s*)|(\s*$)/g, "");
|
||||
case 3:
|
||||
return str.replace(/(^\s*)/g, "");
|
||||
case 4:
|
||||
return str.replace(/(\s*$)/g, "");
|
||||
default:
|
||||
return str;
|
||||
}
|
||||
}
|
||||
// 字符转换,type: 1:首字母大写 2:首字母小写 3:大小写转换 4:全部大写 5:全部小写
|
||||
export const changeCase = (str, type) => {
|
||||
type = type || 4
|
||||
switch (type) {
|
||||
case 1:
|
||||
return str.replace(/\b\w+\b/g, (word) => {
|
||||
return word.substring(0, 1).toUpperCase() + word.substring(1).toLowerCase();
|
||||
|
||||
});
|
||||
case 2:
|
||||
return str.replace(/\b\w+\b/g, (word) => {
|
||||
return word.substring(0, 1).toLowerCase() + word.substring(1).toUpperCase();
|
||||
});
|
||||
case 3:
|
||||
return str.split('').map((word) => {
|
||||
if (/[a-z]/.test(word)) {
|
||||
return word.toUpperCase();
|
||||
} else {
|
||||
return word.toLowerCase()
|
||||
}
|
||||
}).join('')
|
||||
case 4:
|
||||
return str.toUpperCase();
|
||||
case 5:
|
||||
return str.toLowerCase();
|
||||
default:
|
||||
return str;
|
||||
}
|
||||
}
|
||||
// 检测密码强度 等级1-5
|
||||
export const checkPwd = (str) => {
|
||||
var Lv = 1;
|
||||
if (str.length < 6) {
|
||||
return Lv
|
||||
}
|
||||
if (/[0-9]/.test(str)) {
|
||||
Lv++
|
||||
}
|
||||
if (/[a-z]/.test(str)) {
|
||||
Lv++
|
||||
}
|
||||
if (/[A-Z]/.test(str)) {
|
||||
Lv++
|
||||
}
|
||||
if (/[\.|-|_]/.test(str)) {
|
||||
Lv++
|
||||
}
|
||||
return Lv;
|
||||
}
|
||||
// 在字符串中插入新字符串
|
||||
export const insertStr = (soure, index, newStr) => {
|
||||
var str = soure.slice(0, index) + newStr + soure.slice(index);
|
||||
return str;
|
||||
}
|
||||
// 16进制颜色值转RGBA字符串
|
||||
export const colorToRGB = (val, opa) => {
|
||||
|
||||
var pattern = /^(#?)[a-fA-F0-9]{6}$/; //16进制颜色值校验规则
|
||||
var isOpa = typeof opa == 'number'; //判断是否有设置不透明度
|
||||
|
||||
if (!pattern.test(val)) { //如果值不符合规则返回空字符
|
||||
return '';
|
||||
}
|
||||
|
||||
var v = val.replace(/#/, ''); //如果有#号先去除#号
|
||||
var rgbArr = [];
|
||||
var rgbStr = '';
|
||||
|
||||
for (var i = 0; i < 3; i++) {
|
||||
var item = v.substring(i * 2, i * 2 + 2);
|
||||
var num = parseInt(item, 16);
|
||||
rgbArr.push(num);
|
||||
}
|
||||
|
||||
rgbStr = rgbArr.join();
|
||||
rgbStr = 'rgb' + (isOpa ? 'a' : '') + '(' + rgbStr + (isOpa ? ',' + opa : '') + ')';
|
||||
return rgbStr;
|
||||
}
|
||||
|
||||
export const dateFormat = (fmt, date) => {
|
||||
let ret;
|
||||
const opt = {
|
||||
"Y+": date.getFullYear().toString(), // 年
|
||||
"m+": (date.getMonth() + 1).toString(), // 月
|
||||
"d+": date.getDate().toString(), // 日
|
||||
"H+": date.getHours().toString(), // 时
|
||||
"M+": date.getMinutes().toString(), // 分
|
||||
"S+": date.getSeconds().toString() // 秒
|
||||
// 有其他格式化字符需求可以继续添加,必须转化成字符串
|
||||
};
|
||||
for (let k in opt) {
|
||||
ret = new RegExp("(" + k + ")").exec(fmt);
|
||||
if (ret) {
|
||||
fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
|
||||
};
|
||||
};
|
||||
return fmt;
|
||||
}
|
||||
|
||||
//uni-app request请求封装
|
||||
//使用方法 供新手参考 :
|
||||
// 在vue文件中 import { uniAjax } from '@/js_sdk/common.js'
|
||||
//uniAjax("api/userInfo",{name:"admin"},"POST",(res)=>{
|
||||
//成功回调函数
|
||||
// },(err)=>{
|
||||
//失败回调函数
|
||||
// },(data)=>{
|
||||
//完成回调函数
|
||||
// })
|
||||
export const uniAjax = (url, dataPost, type, successCallBack, errorCallBack, completeCallBack) => {
|
||||
let obj = {};
|
||||
obj.url = url || "";
|
||||
obj.data = dataPost || {};
|
||||
obj.methods = type || "POST";
|
||||
obj.success = successCallBack || function(data) {};
|
||||
obj.error = errorCallBack || function(data) {};
|
||||
obj.complete = completeCallBack || function(data) {};
|
||||
uni.request({
|
||||
url: obj.url,
|
||||
data: obj.data,
|
||||
method: obj.methods,
|
||||
header: "",
|
||||
dataType: "json",
|
||||
success: obj.success,
|
||||
fail: obj.error,
|
||||
complete: obj.complete
|
||||
});
|
||||
}
|
||||
// 数据深拷贝
|
||||
//使用方法 供新手参考 :
|
||||
// 在vue文件中 import { cloneObj } from '@/js_sdk/common.js'
|
||||
// let dataList = cloneObj(data)
|
||||
export const cloneObj = (obj) => {
|
||||
let newobj = obj.constructor === Array ? [] : {};
|
||||
if (typeof obj !== 'object') {
|
||||
return;
|
||||
}
|
||||
for (let i in obj) {
|
||||
newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i];
|
||||
}
|
||||
return newobj
|
||||
};
|
||||
|
||||
// 常用正则判断
|
||||
//使用方法 供新手参考 :
|
||||
// 在vue文件中 import { regExpObj } from '@/js_sdk/common.js'
|
||||
// let valueReg = regExpObj.regExpZh(value)
|
||||
export const regExpObj = {
|
||||
//匹配有没有中文
|
||||
regExpZh: (str) => {
|
||||
return RegExp(/[\u4e00-\u9fa5]+/).test(str)
|
||||
},
|
||||
//只允许中文
|
||||
onlyregExpZh: (str) => {
|
||||
return RegExp(/^[\u4e00-\u9fa5]+$/).test(str)
|
||||
},
|
||||
//只允许中文,英文字母,数字
|
||||
regExpZhEnNum: (str) => {
|
||||
return RegExp(/^[\u4e00-\u9fa5A-Za-z0-9]+$/).test(str)
|
||||
},
|
||||
//匹配身份证
|
||||
regExpIDCard: (str) => {
|
||||
return RegExp(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/).test(str);
|
||||
},
|
||||
//匹配手机号
|
||||
regExpPhone: (str) => {
|
||||
return RegExp(/^1[3456789]\d{9}$/).test(str);
|
||||
},
|
||||
//匹配邮箱格式
|
||||
regExpEmail: (str) => {
|
||||
return RegExp(/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/).test(str);
|
||||
},
|
||||
//匹配域名
|
||||
regExpRealmName: (str) => {
|
||||
return RegExp(/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\/.?/).test(str)
|
||||
},
|
||||
//匹配InternetURL
|
||||
regExpInternetURL: (str) => {
|
||||
return RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/).test(str)
|
||||
},
|
||||
//匹配密码(密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线))
|
||||
regExpPwd: (str) => {
|
||||
return RegExp(/^[a-zA-Z]\w{5,17}$/).test(str)
|
||||
},
|
||||
//日期格式 2019-01-12
|
||||
regExpDate: (str) => {
|
||||
return RegExp(/^\d{4}-\d{1,2}-\d{1,2}/).test(str)
|
||||
},
|
||||
//匹配空白行
|
||||
regExpWhiteLine: (str) => {
|
||||
return RegExp(/\n\s*\r/).test(str)
|
||||
},
|
||||
//匹配正数、负数、和小数
|
||||
regExpNumberFloat: (str) => {
|
||||
return RegExp(/^(\-|\+)?\d+(\.\d+)?$/).test(str)
|
||||
},
|
||||
//匹配零和非零开头的数字
|
||||
regExpZeroNumber: (str) => {
|
||||
return RegExp(/^(0|[1-9][0-9]*)$/).test(str)
|
||||
},
|
||||
//匹配数字
|
||||
regExpNumber: (str) => {
|
||||
return RegExp(/^[0-9]*$/).test(str)
|
||||
},
|
||||
//长度为8-20的所有字符
|
||||
regExpAllByte: (str) => {
|
||||
return RegExp(/^.{8,20}$/).test(str)
|
||||
}
|
||||
}
|
||||
|
||||
//判断枚举对象取值
|
||||
// 在vue文件中 import { enumeration } from '@/js_sdk/common.js'
|
||||
// let valueStatus = enumeration(enumObj,0);
|
||||
export const enumeration = (enumObj, index) => {
|
||||
//enumObj ====> 枚举对象 例如:{0:"不通过",1:"通过",2:"待审批"};
|
||||
//index ====> 查询属性值或属性名
|
||||
for (let i in enumObj) {
|
||||
if (i == index) {
|
||||
return enumObj[i];
|
||||
} else if (enumObj[i] == index) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//本地缓存
|
||||
export const dataStroage = {
|
||||
//设置离线缓存
|
||||
setStroage: (key, data) => {
|
||||
uni.setStorageSync(key, data);
|
||||
},
|
||||
//获取离线缓存
|
||||
getStroage: (key) => {
|
||||
let data = uni.getStorageSync(key);
|
||||
return data;
|
||||
},
|
||||
//移除某个离线缓存
|
||||
removeStroage: (key) => {
|
||||
uni.removeStorageSync(key);
|
||||
},
|
||||
//移除所有离线缓存
|
||||
closeAllStroage: () => {
|
||||
uni.clearStorageSync();
|
||||
}
|
||||
}
|
||||
|
||||
// 原生Js获取URL传递的参数
|
||||
export const getUrlParam = (name) => {
|
||||
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
let r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return null;
|
||||
}
|
||||
|
||||
//大于固定字符串显示省略号
|
||||
export const handleStr = (str,length) => {
|
||||
let handle_str;
|
||||
str.length <= length ? handle_str = str : handle_str = str.slice(0, length) + "...";
|
||||
return handle_str
|
||||
}
|
||||
|
||||
/* 倒计时
|
||||
endtime 结束时间
|
||||
nowtime 开始时间 默认值时当前时间
|
||||
*/
|
||||
export const countDown = (endtime,nowtime) => {
|
||||
let day = 0,
|
||||
hour = 0,
|
||||
minute = 0,
|
||||
second = 0, //时间默认值
|
||||
newtime = nowtime || new Date().valueOf()/1000,
|
||||
times = endtime - newtime;
|
||||
if (times > 0) {
|
||||
day = Math.floor(times / (60 * 60 * 24));
|
||||
hour = Math.floor(times / (60 * 60)) - (day * 24);
|
||||
minute = Math.floor(times / 60) - (day * 24 * 60) - (hour * 60);
|
||||
second = Math.floor(times) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
|
||||
}
|
||||
day <= 9 ? day = '0' + day : null;
|
||||
hour <= 9 ? hour = '0' + hour : null;
|
||||
minute <= 9 ? minute = '0' + minute : null;
|
||||
second <= 9 ? second = '0' + second : null;
|
||||
return {day,hour,minute,second}
|
||||
}
|
||||
|
||||
/* 判断数据类型 */
|
||||
export const isDataType = {
|
||||
isArray:(obj) => {
|
||||
return (typeof obj == 'object') && obj.constructor == Array;
|
||||
},
|
||||
isObject:(obj) => {
|
||||
return Object.prototype.toString.call(obj) === "[object Object]";
|
||||
},
|
||||
isEmptyObject:(obj) => {
|
||||
let t;
|
||||
for (t in obj) return !1;
|
||||
return !0
|
||||
}
|
||||
}
|
||||
+1459
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,378 @@
|
||||
/**
|
||||
* 通用公共js库,主要定义api接口,auth apikey 常量值和通用函数
|
||||
*/
|
||||
import store from '@/store/index.js';
|
||||
|
||||
// var apiurl = 'http://192.168.1.66:50002/hcscm/pda/v1/'; //开发环境 添
|
||||
// var apiurl = 'http://192.168.1.55:50002/hcscm/pda/v1/'; //开发环境 添
|
||||
//var apiurl ='http://192.168.1.127:50003/hcscm/pda/v1/'; //开发环境 添
|
||||
// var apiurl = 'https://hcscmpre.zzfzyc.com/hcscm/pda/v1/'; //预发布环境
|
||||
// var apiurl = 'https://hcscmtest.zzfzyc.com/hcscm/pda/v1/'; //测试环境
|
||||
//var apiurl = 'https://hcscmtest.zzfzyc.com/hcscm/'; //ERP测试环境
|
||||
|
||||
export const getApiUrl = () => store.state.apiurl
|
||||
|
||||
export function updateApiUrl(newUrl) {
|
||||
store.dispatch('updateApiUrl', newUrl);
|
||||
}
|
||||
// 添加统一请求方法
|
||||
export function request(options) {
|
||||
const token = uni.getStorageSync('RemoteTokenData')?.token;
|
||||
const apiurl = getApiUrl()
|
||||
return uni.request({
|
||||
url: apiurl + options.url,
|
||||
method: options.method || 'GET',
|
||||
data: options.data,
|
||||
header: {
|
||||
'Platform': 2,
|
||||
'Authorization': token,
|
||||
...(options.header || {})
|
||||
},
|
||||
success: options.success,
|
||||
fail: options.fail,
|
||||
complete: options.complete
|
||||
});
|
||||
}
|
||||
// 设置标识 app wx
|
||||
var shebei = '';
|
||||
//#ifdef APP-PLUS
|
||||
shebei = 'app';
|
||||
//#endif
|
||||
|
||||
//#ifdef MP-WEIXIN
|
||||
shebei = 'wx';
|
||||
//#endif
|
||||
|
||||
const S4 = function() {
|
||||
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
|
||||
};
|
||||
export function guid() {
|
||||
return (S4() + S4() +'-' +S4() +'-' +S4() +'-' +S4() +'-' +S4() +S4() +S4()
|
||||
);
|
||||
}
|
||||
|
||||
// store 解析字符串或对象
|
||||
export function parGetData(v) {
|
||||
if (v.indexOf('obj-') === 0) {
|
||||
v = v.slice(4);
|
||||
return JSON.parse(v);
|
||||
} else {
|
||||
if (v.indexOf('str-') === 0) {
|
||||
return v.slice(4);
|
||||
}
|
||||
}
|
||||
}
|
||||
// localstore 存储字符串或对象
|
||||
export function parSetData(v) {
|
||||
if (typeof v == 'object') {
|
||||
v = JSON.stringify(v);
|
||||
v = 'obj-' + v;
|
||||
} else {
|
||||
v = 'str-' + v;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
function getPrefixNumber(maybeNumStr) {
|
||||
const numReg = /^[0-9]*[!0-9]*/;
|
||||
if (numReg.test(maybeNumStr)) {
|
||||
return maybeNumStr.match(numReg)[0];
|
||||
}
|
||||
}
|
||||
|
||||
export function parFabricGoodsBarCode2D(aSourceBarCode) {
|
||||
let aOjbectBarCode = aSourceBarCode.toString();
|
||||
console.log(aOjbectBarCode);
|
||||
var aCrockNo = '';
|
||||
var aGoodsBillNo = '';
|
||||
var aFabricGoodsNo = '';
|
||||
var aGoodsCodeNo = '';
|
||||
var aGoodsCodeName = '';
|
||||
var aQty = '';
|
||||
var aBarCodeDig = '';
|
||||
console.log("****************");
|
||||
if (aOjbectBarCode.indexOf('|') > 0) {
|
||||
console.log("aOjbectBarCode--&8888888888->");
|
||||
var aBarCodeList = aOjbectBarCode.split('|');
|
||||
aCrockNo = aBarCodeList[3];
|
||||
aGoodsBillNo = aBarCodeList[5];
|
||||
aFabricGoodsNo = aBarCodeList[1];
|
||||
aGoodsCodeNo = aBarCodeList[2];
|
||||
aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
if (aGoodsCodeNo.length == 1) {
|
||||
aGoodsCodeNo = '00' + aGoodsCodeNo;
|
||||
} else if (aGoodsCodeNo.length == 2) {
|
||||
aGoodsCodeNo = '0' + aGoodsCodeNo;
|
||||
};
|
||||
aQty = aBarCodeList[6];
|
||||
aBarCodeDig = aBarCodeList[0];
|
||||
} else if (aOjbectBarCode.indexOf('$') > 0) {
|
||||
console.log("aOjbectBarCode--&6555555->");
|
||||
aOjbectBarCode = aOjbectBarCode.replace('¥', '$');
|
||||
aOjbectBarCode = aOjbectBarCode.replace('#', '#');
|
||||
aOjbectBarCode = aOjbectBarCode.replace('##', '#');
|
||||
aOjbectBarCode = aOjbectBarCode.replace('^', '$');
|
||||
var aBarCodeList = aOjbectBarCode.split('$');
|
||||
|
||||
console.log("aBarCodeList.length---->" + aBarCodeList.length);
|
||||
if (aBarCodeList.length <= 5) {
|
||||
aCrockNo = aBarCodeList[0];
|
||||
aGoodsBillNo = aBarCodeList[1];
|
||||
aFabricGoodsNo = aBarCodeList[2];
|
||||
aGoodsCodeNo = aBarCodeList[3];
|
||||
console.log("aGoodsCodeNo---->" + aGoodsCodeNo);
|
||||
|
||||
//aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
if (aGoodsCodeNo == '') {
|
||||
aGoodsCodeNo = aBarCodeList[3];
|
||||
}
|
||||
aGoodsCodeName = "";
|
||||
aQty = aBarCodeList[4];
|
||||
aBarCodeDig = aBarCodeList[1];
|
||||
} else {
|
||||
aCrockNo = aBarCodeList[0];
|
||||
aGoodsBillNo = aBarCodeList[1];
|
||||
aFabricGoodsNo = aBarCodeList[2];
|
||||
aGoodsCodeNo = aBarCodeList[4];
|
||||
console.log("aGoodsCodeNo1111---->" + aGoodsCodeNo);
|
||||
//aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
console.log("aGoodsCodeNo222---->" + aGoodsCodeNo);
|
||||
if (aGoodsCodeNo == '') {
|
||||
aGoodsCodeNo = aBarCodeList[4];
|
||||
}
|
||||
console.log("aGoodsCodeNo33333333333---->" + aGoodsCodeNo);
|
||||
aGoodsCodeName = aBarCodeList[5];
|
||||
aQty = aBarCodeList[6];
|
||||
aBarCodeDig = aBarCodeList[7];
|
||||
}
|
||||
} else if (aOjbectBarCode.indexOf('^') > 0) {
|
||||
var aBarCodeList = aOjbectBarCode.split('^');
|
||||
console.log(">>>aBarCodeList.length>>>>" + aBarCodeList.length.toString());
|
||||
if (aBarCodeList.length > 7) {
|
||||
if (aBarCodeList[0] == '99' || aBarCodeList[0] == '96') {
|
||||
aCrockNo = aBarCodeList[3];
|
||||
aGoodsBillNo = aBarCodeList[4];
|
||||
aFabricGoodsNo = aBarCodeList[5];
|
||||
aGoodsCodeNo = aBarCodeList[6];
|
||||
aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
aGoodsCodeName = aBarCodeList[6];
|
||||
aQty = aBarCodeList[7];
|
||||
aBarCodeDig = aBarCodeList[4];
|
||||
} else {
|
||||
aCrockNo = aBarCodeList[1];
|
||||
aGoodsBillNo = aBarCodeList[3];
|
||||
aFabricGoodsNo = aBarCodeList[5].replace("ZH", "");
|
||||
aGoodsCodeNo = aBarCodeList[7];
|
||||
aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
aGoodsCodeName = aBarCodeList[7];
|
||||
aQty = aBarCodeList[8];
|
||||
aBarCodeDig = aBarCodeList[4];
|
||||
}
|
||||
} else {
|
||||
aCrockNo = aBarCodeList[0];
|
||||
aGoodsBillNo = aBarCodeList[1];
|
||||
aFabricGoodsNo = aBarCodeList[2];
|
||||
aGoodsCodeNo = aBarCodeList[4];
|
||||
aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
aGoodsCodeName = aBarCodeList[5];
|
||||
aQty = aBarCodeList[6];
|
||||
aBarCodeDig = aBarCodeList[7];
|
||||
}
|
||||
} else if (aOjbectBarCode.indexOf('^') == 0) {
|
||||
var aBarCodeList = aOjbectBarCode.split('^');
|
||||
aCrockNo = aBarCodeList[1];
|
||||
aGoodsBillNo = aBarCodeList[2];
|
||||
aFabricGoodsNo = aBarCodeList[3];
|
||||
aGoodsCodeNo = '';
|
||||
//aGoodsCodeNo = getPrefixNumber(aGoodsCodeNo);
|
||||
//aGoodsCodeName = aBarCodeList[5];
|
||||
aQty = aBarCodeList[5];
|
||||
console.log(">>>>>>>>" + aCrockNo + ">>>" + aGoodsBillNo.toString() + ">>>>" + aQty.toString());
|
||||
aBarCodeDig = 0;
|
||||
} else if (aOjbectBarCode.indexOf('http') > 0) {
|
||||
console.log("aOjbectBarCode--&&&->");
|
||||
return '';
|
||||
} else {
|
||||
aCrockNo = '';
|
||||
aGoodsBillNo = '';
|
||||
aFabricGoodsNo = '';
|
||||
aGoodsCodeNo = '';
|
||||
aGoodsCodeNo = '';
|
||||
aGoodsCodeName = '';
|
||||
aQty = 0;
|
||||
aBarCodeDig = aSourceBarCode;
|
||||
console.log("aOjbectBarCode--&66666->"+aBarCodeDig) ;
|
||||
//return '';
|
||||
}
|
||||
/*
|
||||
if (aGoodsCodeNo.length == 1) {
|
||||
aGoodsCodeNo = '00' + aGoodsCodeNo;
|
||||
} else if (aGoodsCodeNo.length == 2) {
|
||||
aGoodsCodeNo = '0' + aGoodsCodeNo;
|
||||
};
|
||||
*/
|
||||
|
||||
return aCrockNo + ',' + aGoodsBillNo + ',' + aBarCodeDig + ',' + aFabricGoodsNo + ',' + aGoodsCodeNo + ',' + aQty;
|
||||
}
|
||||
|
||||
export function GetGoodsQRBarCode(aSourceQRBarCode) {
|
||||
let aQRBarCode = aSourceQRBarCode.toString().trimRight().trimLeft();
|
||||
aQRBarCode = aQRBarCode.replace('¥', '$');
|
||||
aQRBarCode = aQRBarCode.replace('#', '#');
|
||||
aQRBarCode = aQRBarCode.replace('##', '#');
|
||||
aQRBarCode = aQRBarCode.replace('^', '$');
|
||||
|
||||
if (aQRBarCode.indexOf('$') > 0)
|
||||
{
|
||||
var aQRBarCodeList = aQRBarCode.split('$');
|
||||
var aCrockNo = aQRBarCodeList[0];
|
||||
var aGoodsBillNo = aQRBarCodeList[1];
|
||||
var aFabricGoodsNo = aQRBarCodeList[2];
|
||||
var aSaleOrderNo = aQRBarCodeList[3];
|
||||
var aFabricGoodsName = '';
|
||||
var aGoodsCodeNo = aQRBarCodeList[4].split('#')[0];
|
||||
var aGoodsCodeName = aQRBarCodeList[4].split('#')[1];
|
||||
var aQty = aQRBarCodeList[5];
|
||||
var aBarCodeDig= '';
|
||||
|
||||
return aCrockNo + '^' + aGoodsBillNo + '^' + aBarCodeDig + '^'
|
||||
+ aFabricGoodsNo + '^' + aFabricGoodsName + '^' + aGoodsCodeNo
|
||||
+ '^' + aGoodsCodeName +'^' + aSaleOrderNo +'^'+ aQty+'^';
|
||||
} else if (aQRBarCode.indexOf('http') > 0) {
|
||||
return '';
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
export function parYarnGoodsBarCode2D(aSourceBarCode) {
|
||||
aSourceBarCode = aSourceBarCode.replace('\n','');
|
||||
aSourceBarCode = aSourceBarCode.replace('\t','');
|
||||
aSourceBarCode = aSourceBarCode.replace('\s','');
|
||||
aSourceBarCode = aSourceBarCode.replace('\r','');
|
||||
let aOjbectBarCode = aSourceBarCode.toString();
|
||||
var aDyeWorksDigCode = '';
|
||||
var aCustomerPO = '';
|
||||
var aYarnGoodsCodeNo = '';
|
||||
var aYarnGoodsColorNo = '';
|
||||
var aYarnDyeOrderDate = '';
|
||||
var aYarnCrockNo = '';
|
||||
var aYarnBoxBillNo = '';
|
||||
var aYarnBoxRoll = '';
|
||||
var aYarnGrossQty = 0;
|
||||
var aYarnNetQty = 0;
|
||||
if (aOjbectBarCode.indexOf('^') >= 0) {
|
||||
var aBarCodeList = aOjbectBarCode.split('^');
|
||||
aDyeWorksDigCode = aBarCodeList[1];
|
||||
aCustomerPO = aBarCodeList[2];
|
||||
aYarnGoodsCodeNo = aBarCodeList[3];
|
||||
aYarnGoodsColorNo = aBarCodeList[4];
|
||||
aYarnDyeOrderDate = aBarCodeList[5];
|
||||
aYarnCrockNo = aBarCodeList[6];
|
||||
aYarnBoxBillNo = aBarCodeList[7];
|
||||
aYarnBoxRoll = aBarCodeList[8];
|
||||
aYarnGrossQty = aBarCodeList[9];
|
||||
aYarnNetQty = aBarCodeList[10];
|
||||
} else if (aOjbectBarCode.indexOf('http') > 0) {
|
||||
console.log("aOjbectBarCode-CCCC-&&&->");
|
||||
return '';
|
||||
} else {
|
||||
aDyeWorksDigCode = '';
|
||||
aCustomerPO = '';
|
||||
aYarnGoodsCodeNo = '';
|
||||
aYarnGoodsColorNo = '';
|
||||
aYarnDyeOrderDate = '';
|
||||
aYarnCrockNo = '';
|
||||
aYarnBoxBillNo = '';
|
||||
aYarnBoxRoll = '';
|
||||
aYarnGrossQty = '';
|
||||
aYarnNetQty = '';
|
||||
//return '';
|
||||
}
|
||||
return aDyeWorksDigCode + ',' + aCustomerPO + ',' + aYarnGoodsCodeNo + ','
|
||||
+ aYarnGoodsColorNo + ',' + aYarnDyeOrderDate + ',' + aYarnCrockNo + ','
|
||||
+ aYarnBoxBillNo + ',' + aYarnBoxRoll + ',' + aYarnGrossQty + ',' + aYarnNetQty;
|
||||
}
|
||||
|
||||
// 将对象中项目存到数组arr中
|
||||
function concat(arr, obj) {
|
||||
Object.keys(obj).forEach(function(key) {
|
||||
arr.push(obj[key])
|
||||
});
|
||||
return arr;
|
||||
}
|
||||
|
||||
// 新建一个audio实例
|
||||
function createAudio(src) {
|
||||
//console.log("createInnerAudioContext");
|
||||
let innerAudioContext = uni.createInnerAudioContext();
|
||||
innerAudioContext.autoplay = true;
|
||||
innerAudioContext.src = src;
|
||||
innerAudioContext.onPlay(() => {
|
||||
console.log("开始播放");
|
||||
});
|
||||
|
||||
innerAudioContext.onEnded(() => {
|
||||
//console.log('i am onEnded')
|
||||
//播放结束,销毁该实例
|
||||
//innerAudioContext.destroy();
|
||||
console.log('已执行destory()')
|
||||
});
|
||||
innerAudioContext.onError(res => {
|
||||
//console.log(res.errMsg);
|
||||
//console.log(res.errCode);
|
||||
innerAudioContext.stop();
|
||||
});
|
||||
return innerAudioContext;
|
||||
}
|
||||
|
||||
let successAudio = undefined;
|
||||
let errorAudio = undefined;
|
||||
|
||||
function playSuccessAudio() {
|
||||
if (!successAudio) {
|
||||
//console.log("create success");
|
||||
successAudio = createAudio('/static/audio/appright.wav');
|
||||
successAudio.onError(res => {
|
||||
console.log(res.errMsg);
|
||||
console.log(res.errCode);
|
||||
console.log(res);
|
||||
successAudio.destroy();
|
||||
successAudio = undefined; //createAudio('/static/audio/appright.wav');
|
||||
|
||||
});
|
||||
}
|
||||
successAudio.stop();
|
||||
successAudio.play();
|
||||
}
|
||||
|
||||
function playErrorAudio() {
|
||||
if (!errorAudio) {
|
||||
//console.log("create error");
|
||||
errorAudio = createAudio('/static/audio/apperror.wav');
|
||||
errorAudio.onError(res => {
|
||||
console.log(res.errMsg);
|
||||
console.log(res.errCode);
|
||||
console.log(res);
|
||||
errorAudio.destroy();
|
||||
errorAudio = undefined; //createAudio('/static/audio/apperror.wav');
|
||||
})
|
||||
}
|
||||
console.log("create error");
|
||||
errorAudio.stop();
|
||||
errorAudio.play();
|
||||
}
|
||||
|
||||
|
||||
export default {
|
||||
get apiurl() {
|
||||
return getApiUrl()
|
||||
},
|
||||
request,
|
||||
shebei,
|
||||
updateApiUrl,
|
||||
parSetData,
|
||||
parGetData,
|
||||
playSuccessAudio,
|
||||
playErrorAudio,
|
||||
};
|
||||
Vendored
+6
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user