zhangfei
2025-06-03 14c90f4513a26dbc30960121c57a3cdf60996aa3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
import {
    config,
    PublicKey,
    MD5Key,
    ACCESSTOKEN
} from '@/common/config.js'
import JSEncrypt from './jsencrypt';
import {
    hex_md5
} from './md5';
 
const encrypt = new JSEncrypt()
encrypt.setPublicKey(PublicKey)
/**
 * @description rsa加密
 * @returns {string | false} signParams
 * @param {String} str
 */
 
export function encryptPwd(str) {
     return encrypt.encrypt(str); 
    // let unsignstr = str + randomWord(10);
    // let utf8str = utf8.encode(unsignstr);
    // //rsa加密
    // return encrypt.encrypt(utf8str) || ''
}
 
function randomWord(range) {
    // 生成随机字符串
    let str = "",
        arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k',
            'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F',
            'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
        ];
 
    for (let i = 0; i < range; i++) {
        let pos = Math.round(Math.random() * (arr.length - 1));
        str += arr[pos];
    }
    return str;
}
export function rupte2(s) {
    // 奇数位和偶数位提取,然后所有偶数位在前,奇数在后
    let ll = s.length
    let s1 = []
    let s2 = []
    for (let i = 0; i < ll; i++) {
        if (i % 2 == 0) {
            s1.push(s[i])
        } else {
            s2.push(s[i])
        }
    }
    return s2.join('') + s1.join('')
}
 
export function rupte3(s) {
    // 3位提取,所有第二位数放在前面,第三位数中间,第一位数后面
    let ll = s.length
    let s1 = []
    let s2 = []
    let s3 = []
    for (let i = 0; i < ll; i++) {
        let a = i % 3
        if (a == 0) {
            s1.push(s[i])
        } else if (a == 1) {
            s2.push(s[i])
        } else {
            s3.push(s[i])
        }
    }
    return s2.join('') + s3.join('') + s1.join('')
}
 
export function rupted_token_str(s) {
    // 打乱顺序token字符顺序
    let tmps = rupte3(s)
    tmps = rupte2(tmps)
    tmps = rupte3(tmps)
    tmps = rupte2(tmps)
    return tmps
}
 
export function ruptedtoken(token) {
    // 将token签名并打乱顺序
    if (token != "") {
        let unsignstr = token + randomWord(token.length);
        let signstr = hex_md5(unsignstr + MD5Key).toLowerCase();
        return rupted_token_str(unsignstr + signstr)
    } else {
        return ""
    }
}
/**
 * @description 参数加密
 * @returns {Object} signParams
 * @param {Object} params 参数对象
 */
 
export function signParams(params) {
    params.signtype = 'MD5';
    params.timestamp = new Date().getTime() + '';
    // 计算签名
    let sortKey = Object.keys(params).sort();
    let sortList = [];
    for (let key of sortKey) {
        let val = encodeURIComponent(params[key]);
        val = val.replace(/\(/g, '%28')
        val = val.replace(/\)/g, '%29')
        val = val.replace(/\*/g, '%2A')
        val = val.replace(/!/g, '%21')
        val = val.replace(/'/g, '%27')
        sortList.push(key + "=" + val);
        params[key] = val
    }
    sortList.push("key=" + MD5Key);
    //MD5加密
    params.sign = hex_md5(sortList.join("&")).toUpperCase();
    return params;
}
 
//表单序列化
export const serialize = data => {
    let list = [];
    Object.keys(data).forEach(ele => {
        list.push(`${ele}=${data[ele]}`)
    })
    return list.join('&');
};
 
/**
 * @description 对象根据字典排序
 * @param obj
 * @returns {{}}
 */
export function objKeySort(obj) {
    let newkey = Object.keys(obj).sort();
    //先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
    let newObj = {}; //创建一个新的对象,用于存放排好序的键值对
    for (let i = 0; i < newkey.length; i++) { //遍历newkey数组
        newObj[newkey[i]] = obj[newkey[i]]; //向新创建的对象中按照排好的顺序依次增加键值对
    }
    return newObj; //返回排好序的新对象
}
 
/**
 * @description json转query string
 * @param obj
 */
export function toQueryString(obj) {
    let pm = '';
    if (obj !== undefined) {
        if (typeof obj === 'string') {
            obj = JSON.parse(obj)
        }
        for (let p in obj) {
            pm += '&' + p + '=' + encodeURI(obj[p]);
        }
    }
    return pm.slice(1)
}
 
/* 检查空 */
export function isBlank(str) {
    if (str === undefined || str === 'undefined' || str === null || str === '' || str === 'null' || str === '[]') {
        return true
    } else {
        return false
    }
}
 
 
export function hasToken() {
    return !isBlank(uni.getStorageSync(ACCESSTOKEN));
}
 
 
 
/**
 * 日期格式化
 * @param {Object} date
 * @param {Object} fmt
 */
export function dateFormat(date, fmt) {
    if (!date) {
        return
    }
    if (!fmt) {
        fmt = 'yyyy-MM-dd hh:mm'
    }
    if (!(date instanceof Date)) {
        date = new Date(date.replace(/-/g, '/'))
    }
 
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
    }
 
    let o = {
        'M+': date.getMonth() + 1,
        'd+': date.getDate(),
        'h+': date.getHours(),
        'm+': date.getMinutes(),
        's+': date.getSeconds()
    };
 
    for (let k in o) {
        if (new RegExp(`(${k})`).test(fmt)) {
            let str = o[k] + '';
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? str : ('00' + str).substr(str.length));
        }
    }
    return fmt;
}
// 格式化时间
export function LongToDateTime(val) {
  if (val == null || val == undefined || val == '' || val == 'null' || val == 'undefined') {
      return '';
  }
  var temp = val.toString();
  // 年
  var y = temp.slice(0, 4);
  // 月
  var m = temp.slice(4, 6);
  // 日
  var d = temp.slice(6, 8);
  // 时
  var hh = temp.slice(8, 10);
  // 分
  var mm = temp.slice(10, 12);
  // 秒
  var ss = temp.slice(12, 14);
  var result = y + '-' + m + '-' + d + ' ' + hh + ':' + mm + ':' + ss;
  return result;
}
/* 正整数 */
export function isInteger(number) {
    const reg = /^[1-9]\d*$/
    if (reg.test(number)) {
        return true
    } else {
        return false
    }
}
 
/**
 * 将元转换为分(如果可以转换,否则原值返回)
 * @param val
 * @returns {number|*}
 */
export function formatYuanToFen(val) {
    if (isBlank(val) || !isPrice(val)) {
        return val
    }
    return parseFloat(val) * 100
}
 
/**
 * 将分转换为元(如果可以转换,否则原值返回)
 * @param val
 * @returns {number|*}
 */
export function formatFenToYuan(val) {
    let str = val + ''
    let accuracy = 0
    if (str.slice(-2) == "00") {
        accuracy = 0
    } else if (str.slice(-1) == "0") {
        accuracy = 1
    } else {
        accuracy = 2
    }
    if (val == '0') {
        accuracy = 0
    }
    return (str / 100).toFixed(accuracy)
}
 
 
// 获取图片路径
export function getHeadImg(val) {
    let headImg = ""
    if (!isBlank(val)) {
        headImg = (val.includes('http://') || val.includes('https://')) ? val : config.logoPath + JSON.parse(val)[0]
            .attPath
    }
    return headImg
}
 
/**
 * 合并对象相同属性
 * chenlong
 * @param obj1
 * @param obj2
 */
export function mergeObjSamePro(obj1, obj2) {
    const res = {}
    Object.keys(obj2).map(function(key) {
        if (key in obj1) {
            res[key] = obj2[key]
        }
    })
    return res
}