common.js 12 KB

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