common.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486
  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. return language[curLang];
  118. }
  119. /*
  120. * 密码的验证:6~20位,由英文、数字或符号组成的验证
  121. * 验证通过,返回boolean值true,否则返回具体的错误信息
  122. * @zjf-2021-01-06
  123. * */
  124. export function checkPwd(pwd) {
  125. let tarLang = getCurLanguage();
  126. if (pwd.length < 6) {
  127. return tarLang['密码最少6位哦~'];
  128. } else if (pwd.length > 20) {
  129. return tarLang['密码最多20位哦~'];
  130. } else if (!(/[^\u4e00-\u9fa5]/.test(pwd))) {
  131. return tarLang['密码不可以有中文哦~'];
  132. } else if (!(/^\S*$/.test(pwd))) {
  133. return tarLang['密码中不可以有空格哦~'];
  134. } else {
  135. return true;
  136. }
  137. }
  138. /*
  139. * 短信验证码的验证:6位0~9的数字
  140. * 验证通过,返回boolean值true,否则返回具体的错误信息
  141. * @zjf-2021-01-06
  142. * */
  143. export function checkSmsCode(val) {
  144. let tarLang = getCurLanguage();
  145. let reg = /^\d{6}$/;
  146. if (!val) {
  147. return tarLang['请输入短信验证码'];
  148. } else if (!reg.test(val)) {
  149. return tarLang['请输入正确的短信验证码'];
  150. } else {
  151. return true;
  152. }
  153. }
  154. /*
  155. * 邮箱的验证
  156. * 验证通过,返回boolean值true,否则返回具体的错误信息
  157. * @zjf-2021-01-.gitignore
  158. * */
  159. export function checkEmail(email) {
  160. let tarLang = getCurLanguage();
  161. let reg = /^([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[-_.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,6}$/;
  162. if (!email) {
  163. return tarLang['请输入邮箱'];
  164. } else if (!reg.test(email)) {
  165. return tarLang['请输入正确的邮箱'];
  166. } else {
  167. return true;
  168. }
  169. }
  170. /*
  171. * 短信图形验证码的验证:4位英文字母和数字
  172. * 验证通过,返回boolean值true,否则返回具体的错误信息
  173. * @zjf-2021-01-07
  174. * */
  175. export function checkImgCode(val) {
  176. let tarLang = getCurLanguage();
  177. let reg = /^[a-zA-Z0-9]{4}$/;
  178. if (!val) {
  179. return tarLang['请输入图形验证码'];
  180. } else if (!reg.test(val)) {
  181. return tarLang['请输入正确的图形验证码'];
  182. } else {
  183. return true;
  184. }
  185. }
  186. /*
  187. * 邮箱验证码的验证:6位0~9的数字
  188. * 验证通过,返回boolean值true,否则返回具体的错误信息
  189. * @zjf-2021-01-06
  190. * */
  191. export function checkEmailCode(val) {
  192. let tarLang = getCurLanguage();
  193. let reg = /^\d{4,6}$/;
  194. if (!val) {
  195. return tarLang['请输入邮箱验证码'];
  196. } else if (!reg.test(val)) {
  197. return tarLang['请输入正确的邮箱验证码'];
  198. } else {
  199. return true;
  200. }
  201. }
  202. export function checkPhone(mobile, txt) {
  203. let tarLang = getCurLanguage();
  204. let regMobile = /(1[3-9]\d{9}$)/;
  205. if (!mobile) {
  206. return txt ? txt : tarLang['请输入手机号'];
  207. } else if (!regMobile.test(mobile)) {
  208. return txt ? txt : tarLang['请输入正确的手机号'];
  209. } else {
  210. return true;
  211. }
  212. }
  213. /**
  214. * base64加密
  215. * @params data String 要加密的字符串
  216. * @zjf-2021-06-28
  217. */
  218. export function base64Encode(data) {
  219. let b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
  220. let o1,
  221. o2,
  222. o3,
  223. h1,
  224. h2,
  225. h3,
  226. h4,
  227. bits,
  228. i = 0,
  229. ac = 0,
  230. enc = '',
  231. tmp_arr = [];
  232. if (!data) {
  233. return data;
  234. }
  235. data = utf8Encode(data);
  236. do {
  237. o1 = data.charCodeAt(i++);
  238. o2 = data.charCodeAt(i++);
  239. o3 = data.charCodeAt(i++);
  240. bits = o1 << 16 | o2 << 8 | o3;
  241. h1 = bits >> 18 & 0x3f;
  242. h2 = bits >> 12 & 0x3f;
  243. h3 = bits >> 6 & 0x3f;
  244. h4 = bits & 0x3f;
  245. tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
  246. } while (i < data.length);
  247. enc = tmp_arr.join('');
  248. switch (data.length % 3) {
  249. case 1:
  250. enc = enc.slice(0, -2) + '==';
  251. break;
  252. case 2:
  253. enc = enc.slice(0, -1) + '=';
  254. break;
  255. }
  256. return enc;
  257. }
  258. export function utf8Encode(string) {
  259. string = (string + '').replace(/\r\n/g, '\n').replace(/\r/g, '\n');
  260. let utftext = '',
  261. start,
  262. end;
  263. let stringl = 0,
  264. n;
  265. start = end = 0;
  266. stringl = string.length;
  267. for (n = 0; n < stringl; n++) {
  268. let c1 = string.charCodeAt(n);
  269. let enc = null;
  270. if (c1 < 128) {
  271. end++;
  272. } else if ((c1 > 127) && (c1 < 2048)) {
  273. enc = String.fromCharCode((c1 >> 6) | 192, (c1 & 63) | 128);
  274. } else {
  275. enc = String.fromCharCode((c1 >> 12) | 224, ((c1 >> 6) & 63) | 128, (c1 & 63) | 128);
  276. }
  277. if (enc !== null) {
  278. if (end > start) {
  279. utftext += string.substring(start, end);
  280. }
  281. utftext += enc;
  282. start = end = n + 1;
  283. }
  284. }
  285. if (end > start) {
  286. utftext += string.substring(start, string.length);
  287. }
  288. return utftext;
  289. }
  290. //处理产品名中的空格换中横及大写转换小写
  291. export function calcProductName(val){
  292. let name = ''
  293. //1.删除特殊字符 2.去除两头空格 3.替换空格为- 4.替换/为-
  294. name = val ? val.toLowerCase().replace(/[~'!?.<>@#$%^*()()+=\/\\:]/g,"").replace(/^\s*|\s*$/g,"").replace(/\ /g, "-").replace(/\//g, '-') : ''
  295. return name
  296. }
  297. //处理商品ID
  298. export function calcProductId(val){
  299. let a = val.split('_')
  300. let b = a[a.length - 1]
  301. return b
  302. }
  303. //处理分类页面的店铺ID字段
  304. export function calcUrlShopId(val){
  305. let a = val.split('_')
  306. let vid = ''
  307. for(let i in a){
  308. if(i > 0) {
  309. if (a[i].indexOf('v-') > -1) {
  310. vid = a[i].replace('v-', '')
  311. }
  312. }
  313. }
  314. return vid
  315. }
  316. //处理分类页面的分类ID字段
  317. export function calcUrlCatId(val){
  318. let a = val.split('_')
  319. let cid = ''
  320. for(let i in a){
  321. if(i > 0){
  322. if(a[i].indexOf('c-') > -1){
  323. cid = a[i].replace('c-','')
  324. }
  325. }
  326. }
  327. return cid
  328. }
  329. //处理分类页面的分页页面字段
  330. export function calcUrlPagination(val){
  331. let a = val.split('_')
  332. let pid = ''
  333. for(let i in a){
  334. if(i > 0){
  335. if(a[i].indexOf('p-') > -1){
  336. pid = a[i].replace('p-','')
  337. }
  338. }
  339. }
  340. return pid
  341. }
  342. //处理分类页面的关键字
  343. export function calcUrlKeywords(val){
  344. let a = val.split('_')
  345. let kid = ''
  346. for(let i in a){
  347. if(i > 0){
  348. if(a[i].indexOf('k-') > -1){
  349. kid = a[i].replace('k-','')
  350. }
  351. }
  352. }
  353. return kid
  354. }
  355. //处理商城的分类URL-PID字段
  356. export function calcMallUrlPid(val){
  357. let a = val.split('_')
  358. let pid = ''
  359. for(let i in a){
  360. if(i > 0){
  361. if(a[i].indexOf('pid-') > -1){
  362. pid = a[i].replace('pid-','')
  363. }
  364. }
  365. }
  366. return pid
  367. }
  368. //处理商城的分类URL-GID字段
  369. export function calcMallUrlGid(val){
  370. let a = val.split('_')
  371. let gid = ''
  372. for(let i in a){
  373. if(i > 0){
  374. if(a[i].indexOf('gid-') > -1){
  375. gid = a[i].replace('gid-','')
  376. }
  377. }
  378. }
  379. return gid
  380. }
  381. //处理商城的分类URL-分页字段
  382. export function calcMallUrlCur(val){
  383. let a = val.split('_')
  384. let current = ''
  385. for(let i in a){
  386. if(i > 0){
  387. if(a[i].indexOf('cur-') > -1){
  388. current = a[i].replace('cur-','')
  389. }
  390. }
  391. }
  392. return current
  393. }
  394. //处理商城的分类URL-品牌ID字段
  395. export function calcMallUrlBrand(val){
  396. let a = val.split('_')
  397. let brand = ''
  398. for(let i in a){
  399. if(i > 0){
  400. if(a[i].indexOf('b-') > -1){
  401. brand = a[i].replace('b-','')
  402. }
  403. }
  404. }
  405. return brand
  406. }
  407. //处理商城的分类URL-分页字段
  408. export function calcMallUrlKeyword(val){
  409. let a = val.split('_')
  410. let keyword = ''
  411. for(let i in a){
  412. if(i > 0){
  413. if(a[i].indexOf('keyword-') > -1){
  414. keyword = a[i].replace('keyword-','')
  415. }
  416. }
  417. }
  418. return keyword
  419. }
  420. //处理商城的分类URL-获取分类名称
  421. export function calcMallUrlCatName(val){
  422. let a = val.split('_')
  423. let current = a[0]
  424. return current
  425. }