common.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. /*
  2. * 获取缓存的值——String类型
  3. * 返回值字符串 有值返回具体的值,否则返回空字符串
  4. * @zjf-2020-.gitignore-26
  5. * */
  6. import { useRouter } from 'vue-router'
  7. import { lang_zn } from '@/assets/language/zh';
  8. import { lang_en } from '@/assets/language/en';
  9. const router = useRouter()
  10. export function getLocalStorageStr(key) {
  11. if(process.client){
  12. let val = localStorage.getItem(key);
  13. return val != undefined && val != null && val ? val : "";
  14. }
  15. }
  16. /**
  17. * 装修模块的跳转
  18. * @params Object val
  19. */
  20. export function diyNavToFun(val) {
  21. if (val.link_type == "url") {
  22. //跳转链接地址
  23. if (val.link_value) {
  24. val.link_value = quillEscapeToHtml(val.link_value);
  25. }
  26. window.open(val.link_value, "_blank");
  27. } else if (val.link_type == "goods") {
  28. //跳转商品详情页
  29. // let routeUrl = router.resolve({
  30. // path: "/goods/detail",
  31. // query: {
  32. // productId: val.info.defaultProductId,
  33. // },
  34. // });
  35. let href = "/goods/detail/"+ calcProductName(val.info.goodsName) +'_'+ val.info.defaultProductId
  36. window.open(href, "_blank");
  37. } else if (val.link_type == "category") {
  38. // 分类列表
  39. let routeUrl = router.resolve({
  40. path: "/goods/list/categoryId-"+val.info.categoryId,
  41. });
  42. window.open(routeUrl.href, "_blank");
  43. } else if (val.link_type == "keyword") {
  44. // 关键词
  45. let path = "/goods/list/keyword-"+ val.link_value
  46. let query = {
  47. keyword: val.link_value,
  48. };
  49. if (val.storeId) {
  50. query.storeId = val.storeId;
  51. path+='/storeId-'+val.storeId
  52. }
  53. let routeUrl = router.resolve({
  54. path: path
  55. });
  56. window.open(routeUrl.href, "_blank");
  57. } else if (val.link_type == "topic") {
  58. //跳转专题页
  59. let href = `/home/topic?topicId=${val.info.decoId}`
  60. window.open(href, "_blank");
  61. } else if (val.link_type == "brand_home") {
  62. //品牌列表
  63. let routeUrl = router.resolve({
  64. path: "/brand",
  65. query: {},
  66. });
  67. window.open(routeUrl.href, "_blank");
  68. } else if (val.link_type == "store_list") {
  69. //店铺列表
  70. let routeUrl = router.resolve({
  71. path: "/store/list/current-1",
  72. });
  73. window.open(routeUrl.href, "_blank");
  74. } else if (val.link_type == "voucher_center") {
  75. //领券中心
  76. let routeUrl = router.resolve({
  77. path: "/coupon",
  78. });
  79. window.open(routeUrl.href, "_blank");
  80. } else if (val.link_type == "point_center") {
  81. let routeUrl = router.resolve({
  82. path: "/point/index",
  83. });
  84. window.open(routeUrl.href, "_blank");
  85. }
  86. }
  87. /*
  88. * 富文本内容反转义(接口返回的富文本内容经过了转义,导致内容无法展示,所以需要反转义)
  89. * @param {String} str 富文本内容
  90. * @zjf-2022-01-07
  91. * */
  92. export function quillEscapeToHtml(str) {
  93. if (str != undefined) {
  94. const arrEntities = { 'lt': '<', 'gt': '>', 'nbsp': ' ', 'amp': '&', 'quot': '"' }
  95. return str.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
  96. return arrEntities[t]
  97. })
  98. } else {
  99. return '';
  100. }
  101. }
  102. /*
  103. * 获取当前语言下的数据 —— Object类型
  104. * 返回对象 语言数据对象
  105. * @zjf-2020-12-28
  106. * */
  107. export function getCurLanguage() {
  108. const language = {
  109. 'zh': lang_zn,
  110. 'en': lang_en,
  111. }
  112. const config = useRuntimeConfig()
  113. if (config.public.appType === 'distributor') {
  114. return language.zh;
  115. }
  116. return language[curLang];
  117. }
  118. /*
  119. * 密码的验证:6~20位,由英文、数字或符号组成的验证
  120. * 验证通过,返回boolean值true,否则返回具体的错误信息
  121. * @zjf-2021-01-06
  122. * */
  123. export function checkPwd(pwd) {
  124. let tarLang = getCurLanguage();
  125. if (pwd.length < 6) {
  126. return tarLang['密码最少6位哦~'];
  127. } else if (pwd.length > 20) {
  128. return tarLang['密码最多20位哦~'];
  129. } else if (!(/[^\u4e00-\u9fa5]/.test(pwd))) {
  130. return tarLang['密码不可以有中文哦~'];
  131. } else if (!(/^\S*$/.test(pwd))) {
  132. return tarLang['密码中不可以有空格哦~'];
  133. } else {
  134. return true;
  135. }
  136. }
  137. /*
  138. * 短信验证码的验证:6位0~9的数字
  139. * 验证通过,返回boolean值true,否则返回具体的错误信息
  140. * @zjf-2021-01-06
  141. * */
  142. export function checkSmsCode(val) {
  143. let tarLang = getCurLanguage();
  144. let reg = /^\d{6}$/;
  145. if (!val) {
  146. return tarLang['请输入短信验证码'];
  147. } else if (!reg.test(val)) {
  148. return tarLang['请输入正确的短信验证码'];
  149. } else {
  150. return true;
  151. }
  152. }
  153. /*
  154. * 邮箱的验证
  155. * 验证通过,返回boolean值true,否则返回具体的错误信息
  156. * @zjf-2021-01-.gitignore
  157. * */
  158. export function checkEmail(email) {
  159. let tarLang = getCurLanguage();
  160. let reg = /^([a-zA-Z0-9_-]+[-_.]?)*[a-zA-Z0-9_-]+@([a-zA-Z0-9.-]+[-_.]?)*[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
  161. if (!email) {
  162. return tarLang['请输入邮箱'];
  163. } else if (!reg.test(email)) {
  164. return tarLang['请输入正确的邮箱'];
  165. } else {
  166. return true;
  167. }
  168. }
  169. /*
  170. * 邮箱的验证 非必填只校验格式
  171. * 验证通过,返回boolean值true,否则返回具体的错误信息
  172. * @zjf-2021-01-.gitignore
  173. * */
  174. export function existCheckEmail(email) {
  175. let tarLang = getCurLanguage();
  176. let reg = /^([a-zA-Z0-9_-]+[-_.]?)*[a-zA-Z0-9_-]+@([a-zA-Z0-9.-]+[-_.]?)*[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}$/;
  177. if (email && !reg.test(email)) {
  178. return tarLang['请输入正确的邮箱'];
  179. }
  180. return true;
  181. }
  182. /*
  183. * 短信图形验证码的验证:4位英文字母和数字
  184. * 验证通过,返回boolean值true,否则返回具体的错误信息
  185. * @zjf-2021-01-07
  186. * */
  187. export function checkImgCode(val) {
  188. let tarLang = getCurLanguage();
  189. let reg = /^[a-zA-Z0-9]{4}$/;
  190. if (!val) {
  191. return tarLang['请输入图形验证码'];
  192. } else if (!reg.test(val)) {
  193. return tarLang['请输入正确的图形验证码'];
  194. } else {
  195. return true;
  196. }
  197. }
  198. /*
  199. * 邮箱验证码的验证:6位0~9的数字
  200. * 验证通过,返回boolean值true,否则返回具体的错误信息
  201. * @zjf-2021-01-06
  202. * */
  203. export function checkEmailCode(val) {
  204. let tarLang = getCurLanguage();
  205. let reg = /^\d{4,6}$/;
  206. if (!val) {
  207. return tarLang['请输入邮箱验证码'];
  208. } else if (!reg.test(val)) {
  209. return tarLang['请输入正确的邮箱验证码'];
  210. } else {
  211. return true;
  212. }
  213. }
  214. export function existCheckPhone(mobile, txt) {
  215. let tarLang = getCurLanguage();
  216. let regMobile = /(1[3-9]\d{9}$)/;
  217. if (mobile && !regMobile.test(mobile)) {
  218. return txt ? txt : tarLang['请输入正确的手机号'];
  219. }
  220. return true;
  221. }
  222. export function checkPhone(mobile, txt) {
  223. let tarLang = getCurLanguage();
  224. let regMobile = /(1[3-9]\d{9}$)/;
  225. if (!mobile) {
  226. return txt ? txt : tarLang['请输入手机号'];
  227. } else if (!regMobile.test(mobile)) {
  228. return txt ? txt : tarLang['请输入正确的手机号'];
  229. } else {
  230. return true;
  231. }
  232. }
  233. /**
  234. * base64加密
  235. * @params data String 要加密的字符串
  236. * @zjf-2021-06-28
  237. */
  238. export function base64Encode(data) {
  239. let b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  240. let o1,
  241. o2,
  242. o3,
  243. h1,
  244. h2,
  245. h3,
  246. h4,
  247. bits,
  248. i = 0,
  249. ac = 0,
  250. enc = '',
  251. tmp_arr = [];
  252. if (!data) {
  253. return data;
  254. }
  255. data = utf8Encode(data);
  256. do {
  257. o1 = data.charCodeAt(i++);
  258. o2 = data.charCodeAt(i++);
  259. o3 = data.charCodeAt(i++);
  260. bits = o1 << 16 | o2 << 8 | o3;
  261. h1 = bits >> 18 & 0x3f;
  262. h2 = bits >> 12 & 0x3f;
  263. h3 = bits >> 6 & 0x3f;
  264. h4 = bits & 0x3f;
  265. tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
  266. } while (i < data.length);
  267. enc = tmp_arr.join('');
  268. switch (data.length % 3) {
  269. case 1:
  270. enc = enc.slice(0, -2) + '==';
  271. break;
  272. case 2:
  273. enc = enc.slice(0, -1) + '=';
  274. break;
  275. }
  276. return enc;
  277. }
  278. export function utf8Encode(string) {
  279. string = (string + '').replace(/\r\n/g, '\n').replace(/\r/g, '\n');
  280. let utftext = '',
  281. start,
  282. end;
  283. let stringl = 0,
  284. n;
  285. start = end = 0;
  286. stringl = string.length;
  287. for (n = 0; n < stringl; n++) {
  288. let c1 = string.charCodeAt(n);
  289. let enc = null;
  290. if (c1 < 128) {
  291. end++;
  292. } else if ((c1 > 127) && (c1 < 2048)) {
  293. enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);
  294. } else {
  295. enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);
  296. }
  297. if (enc !== null) {
  298. if (end > start) {
  299. utftext += string.substring(start, end);
  300. }
  301. utftext += enc;
  302. start = end = n + 1;
  303. }
  304. }
  305. if (end > start) {
  306. utftext += string.substring(start, string.length);
  307. }
  308. return utftext;
  309. }
  310. //处理产品名中的空格换中横及大写转换小写
  311. export function calcProductName(val){
  312. let name = ''
  313. //1.删除特殊字符 2.去除两头空格 3.替换空格为- 4.替换/为-
  314. name = val ? val.toLowerCase().replace(/[~'!?.<>@#$%^*()()+=\/\\:]/g,"").replace(/^\s*|\s*$/g,"").replace(/\ /g, "-").replace(/\//g, '-') : ''
  315. return name
  316. }
  317. //处理商品ID
  318. export function calcProductId(val){
  319. let a = val.split('_')
  320. let b = a[a.length - 1]
  321. return b
  322. }
  323. //处理分类页面的店铺ID字段
  324. export function calcUrlShopId(val){
  325. let a = val.split('_')
  326. let vid = ''
  327. for(let i in a){
  328. if(i > 0) {
  329. if (a[i].indexOf('v-') > -1) {
  330. vid = a[i].replace('v-', '')
  331. }
  332. }
  333. }
  334. return vid
  335. }
  336. //处理分类页面的分类ID字段
  337. export function calcUrlCatId(val){
  338. let a = val.split('_')
  339. let cid = ''
  340. for(let i in a){
  341. if(i > 0){
  342. if(a[i].indexOf('c-') > -1){
  343. cid = a[i].replace('c-','')
  344. }
  345. }
  346. }
  347. return cid
  348. }
  349. //处理分类页面的分页页面字段
  350. export function calcUrlPagination(val){
  351. let a = val.split('_')
  352. let pid = ''
  353. for(let i in a){
  354. if(i > 0){
  355. if(a[i].indexOf('p-') > -1){
  356. pid = a[i].replace('p-','')
  357. }
  358. }
  359. }
  360. return pid
  361. }
  362. //处理分类页面的关键字
  363. export function calcUrlKeywords(val){
  364. let a = val.split('_')
  365. let kid = ''
  366. for(let i in a){
  367. if(i > 0){
  368. if(a[i].indexOf('k-') > -1){
  369. kid = a[i].replace('k-','')
  370. }
  371. }
  372. }
  373. return kid
  374. }
  375. //处理商城的分类URL-PID字段
  376. export function calcMallUrlPid(val){
  377. let a = val.split('_')
  378. let pid = ''
  379. for(let i in a){
  380. if(i > 0){
  381. if(a[i].indexOf('pid-') > -1){
  382. pid = a[i].replace('pid-','')
  383. }
  384. }
  385. }
  386. return pid
  387. }
  388. //处理商城的分类URL-GID字段
  389. export function calcMallUrlGid(val){
  390. let a = val.split('_')
  391. let gid = ''
  392. for(let i in a){
  393. if(i > 0){
  394. if(a[i].indexOf('gid-') > -1){
  395. gid = a[i].replace('gid-','')
  396. }
  397. }
  398. }
  399. return gid
  400. }
  401. //处理商城的分类URL-分页字段
  402. export function calcMallUrlCur(val){
  403. let a = val.split('_')
  404. let current = ''
  405. for(let i in a){
  406. if(i > 0){
  407. if(a[i].indexOf('cur-') > -1){
  408. current = a[i].replace('cur-','')
  409. }
  410. }
  411. }
  412. return current
  413. }
  414. //处理商城的分类URL-品牌ID字段
  415. export function calcMallUrlBrand(val){
  416. let a = val.split('_')
  417. let brand = ''
  418. for(let i in a){
  419. if(i > 0){
  420. if(a[i].indexOf('b-') > -1){
  421. brand = a[i].replace('b-','')
  422. }
  423. }
  424. }
  425. return brand
  426. }
  427. //处理商城的分类URL-分页字段
  428. export function calcMallUrlKeyword(val){
  429. let a = val.split('_')
  430. let keyword = ''
  431. for(let i in a){
  432. if(i > 0){
  433. if(a[i].indexOf('keyword-') > -1){
  434. keyword = a[i].replace('keyword-','')
  435. }
  436. }
  437. }
  438. return keyword
  439. }
  440. //处理商城的分类URL-获取分类名称
  441. export function calcMallUrlCatName(val){
  442. let a = val.split('_')
  443. let current = a[0]
  444. return current
  445. }