util.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. import {
  2. validatenull
  3. } from './validate'
  4. /**
  5. * 动态插入css
  6. */
  7. export const loadStyle = (url, callback) => {
  8. if (!isInclude(url)) {
  9. const link = document.createElement('link');
  10. link.type = 'text/css';
  11. link.rel = 'stylesheet';
  12. link.href = url;
  13. const head = document.getElementsByTagName('head')[0];
  14. addCallback(link, callback)
  15. head.appendChild(link);
  16. } else {
  17. callback && callback()
  18. }
  19. };
  20. export const allRoles=()=>{
  21. var currectRole={
  22. roleName:'',
  23. roles:[]
  24. }
  25. var roles=JSON.parse(localStorage.getItem('winseaview-userInfo')).content.roles
  26. currectRole.roles=roles
  27. for (let i = 0; i < roles.length; i++) {
  28. if(currectRole.roleName==''){
  29. currectRole.roleName=roles[i].roleName
  30. }else{
  31. currectRole.roleName=currectRole.roleName+','+roles[i].roleName
  32. }
  33. }
  34. return currectRole
  35. console.log(roles)
  36. };
  37. /**
  38. * 动态插入js
  39. */
  40. export const loadScript = (url, callback) => {
  41. if (!isInclude(url)) {
  42. const link = document.createElement('script');
  43. link.src = url;
  44. link.type = 'text/javascript'
  45. const head = document.getElementsByTagName('head')[0];
  46. addCallback(link, callback)
  47. head.appendChild(link);
  48. } else {
  49. callback && callback()
  50. }
  51. };
  52. /**
  53. * 判断是否已经存在某个css 或者js
  54. * @param {*} name
  55. */
  56. const isInclude = (name) => {
  57. var js = /js$/i.test(name);
  58. var es = document.getElementsByTagName(js ? 'script' : 'link');
  59. for (var i = 0; i < es.length; i++)
  60. if (es[i][js ? 'src' : 'href'].indexOf(name) != -1) return true;
  61. return false;
  62. }
  63. const addCallback = (obj, callback) => {
  64. if (obj.addEventListener) {
  65. obj.addEventListener('load', function() {
  66. callback && callback();
  67. }, false);
  68. } else if (obj.attachEvent) {
  69. obj.attachEvent('onreadystatechange', function() {
  70. var target = window.event.srcElement;
  71. if (target.readyState == 'loaded') {
  72. callback && callback();
  73. }
  74. });
  75. }
  76. }
  77. //表单序列化
  78. export const serialize = data => {
  79. let list = [];
  80. Object.keys(data).forEach(ele => {
  81. list.push(`${ele}=${data[ele]}`)
  82. })
  83. return list.join('&');
  84. };
  85. export const getObjType = obj => {
  86. var toString = Object.prototype.toString;
  87. var map = {
  88. '[object Boolean]': 'boolean',
  89. '[object Number]': 'number',
  90. '[object String]': 'string',
  91. '[object Function]': 'function',
  92. '[object Array]': 'array',
  93. '[object Date]': 'date',
  94. '[object RegExp]': 'regExp',
  95. '[object Undefined]': 'undefined',
  96. '[object Null]': 'null',
  97. '[object Object]': 'object'
  98. };
  99. if (obj instanceof Element) {
  100. return 'element';
  101. }
  102. return map[toString.call(obj)];
  103. };
  104. /**
  105. * 对象深拷贝
  106. */
  107. export const deepClone = data => {
  108. var type = getObjType(data);
  109. var obj;
  110. if (type === 'array') {
  111. obj = [];
  112. } else if (type === 'object') {
  113. obj = {};
  114. } else {
  115. //不再具有下一层次
  116. return data;
  117. }
  118. if (type === 'array') {
  119. for (var i = 0, len = data.length; i < len; i++) {
  120. obj.push(deepClone(data[i]));
  121. }
  122. } else if (type === 'object') {
  123. for (var key in data) {
  124. obj[key] = deepClone(data[key]);
  125. }
  126. }
  127. return obj;
  128. };
  129. /**
  130. * 设置灰度模式
  131. */
  132. export const toggleGrayMode = (status) => {
  133. if (status) {
  134. document.body.className = document.body.className + ' grayMode';
  135. } else {
  136. document.body.className = document.body.className.replace(' grayMode', '');
  137. }
  138. };
  139. /**
  140. * 设置主题
  141. */
  142. export const setTheme = (name) => {
  143. document.body.className = name;
  144. }
  145. /**
  146. * 加密处理
  147. */
  148. export const encryption = (params) => {
  149. let {
  150. data,
  151. type,
  152. param,
  153. key
  154. } = params;
  155. let result = JSON.parse(JSON.stringify(data));
  156. if (type == 'Base64') {
  157. param.forEach(ele => {
  158. result[ele] = btoa(result[ele]);
  159. })
  160. } else if (type == 'Aes') {
  161. param.forEach(ele => {
  162. result[ele] = window.CryptoJS.AES.encrypt(result[ele], key).toString();
  163. })
  164. }
  165. return result;
  166. };
  167. /**
  168. * 浏览器判断是否全屏
  169. */
  170. export const fullscreenToggel = () => {
  171. if (fullscreenEnable()) {
  172. exitFullScreen();
  173. } else {
  174. reqFullScreen();
  175. }
  176. };
  177. /**
  178. * esc监听全屏
  179. */
  180. export const listenfullscreen = (callback) => {
  181. function listen() {
  182. callback()
  183. }
  184. document.addEventListener('fullscreenchange', function() {
  185. listen();
  186. });
  187. document.addEventListener('mozfullscreenchange', function() {
  188. listen();
  189. });
  190. document.addEventListener('webkitfullscreenchange', function() {
  191. listen();
  192. });
  193. document.addEventListener('msfullscreenchange', function() {
  194. listen();
  195. });
  196. };
  197. /**
  198. * 浏览器判断是否全屏
  199. */
  200. export const fullscreenEnable = () => {
  201. var isFullscreen = document.isFullScreen || document.mozIsFullScreen || document.webkitIsFullScreen
  202. return isFullscreen;
  203. }
  204. /**
  205. * 浏览器全屏
  206. */
  207. export const reqFullScreen = () => {
  208. let _documentDom = document.getElementById('index')
  209. if (_documentDom.requestFullScreen) {
  210. _documentDom.requestFullScreen();
  211. } else if (_documentDom.webkitRequestFullScreen) {
  212. _documentDom.webkitRequestFullScreen();
  213. } else if (_documentDom.mozRequestFullScreen) {
  214. _documentDom.mozRequestFullScreen();
  215. }
  216. // if (document.documentElement.requestFullScreen) {
  217. // document.documentElement.requestFullScreen();
  218. // } else if (document.documentElement.webkitRequestFullScreen) {
  219. // document.documentElement.webkitRequestFullScreen();
  220. // } else if (document.documentElement.mozRequestFullScreen) {
  221. // document.documentElement.mozRequestFullScreen();
  222. // }
  223. };
  224. /**
  225. * 浏览器退出全屏
  226. */
  227. export const exitFullScreen = () => {
  228. let _documentDom = document.getElementById('contentView')
  229. if (_documentDom.requestFullScreen) {
  230. document.exitFullScreen();
  231. } else if (_documentDom.webkitRequestFullScreen) {
  232. document.webkitCancelFullScreen();
  233. } else if (_documentDom.mozRequestFullScreen) {
  234. document.mozCancelFullScreen();
  235. }
  236. // if (document.documentElement.requestFullScreen) {
  237. // document.exitFullScreen();
  238. // } else if (document.documentElement.webkitRequestFullScreen) {
  239. // document.webkitCancelFullScreen();
  240. // } else if (document.documentElement.mozRequestFullScreen) {
  241. // document.mozCancelFullScreen();
  242. // }
  243. };
  244. /**
  245. * 递归寻找子类的父类
  246. */
  247. export const findParent = (menu, id) => {
  248. for (let i = 0; i < menu.length; i++) {
  249. if (menu[i].children.length != 0) {
  250. for (let j = 0; j < menu[i].children.length; j++) {
  251. if (menu[i].children[j].id == id) {
  252. return menu[i];
  253. } else {
  254. if (menu[i].children[j].children.length != 0) {
  255. return findParent(menu[i].children[j].children, id);
  256. }
  257. }
  258. }
  259. }
  260. }
  261. };
  262. /**
  263. * 判断路由是否相等
  264. */
  265. export const diff = (obj1, obj2) => {
  266. delete obj1.close;
  267. var o1 = obj1 instanceof Object;
  268. var o2 = obj2 instanceof Object;
  269. if (!o1 || !o2) {
  270. /* 判断不是对象 */
  271. return obj1 === obj2;
  272. }
  273. if (Object.keys(obj1).length !== Object.keys(obj2).length) {
  274. return false;
  275. //Object.keys() 返回一个由对象的自身可枚举属性(key值)组成的数组,例如:数组返回下表:let arr = ["a", "b", "c"];console.log(Object.keys(arr))->0,1,2;
  276. }
  277. for (var attr in obj1) {
  278. var t1 = obj1[attr] instanceof Object;
  279. var t2 = obj2[attr] instanceof Object;
  280. if (t1 && t2) {
  281. return diff(obj1[attr], obj2[attr]);
  282. } else if (obj1[attr] !== obj2[attr]) {
  283. return false;
  284. }
  285. }
  286. return true;
  287. }
  288. /**
  289. * 根据字典的value显示label
  290. */
  291. export const findByvalue = (dic, value) => {
  292. let result = '';
  293. if (validatenull(dic)) return value;
  294. if (typeof(value) == 'string' || typeof(value) == 'number' || typeof(value) == 'boolean') {
  295. let index = 0;
  296. index = findArray(dic, value);
  297. if (index != -1) {
  298. result = dic[index].label;
  299. } else {
  300. result = value;
  301. }
  302. } else if (value instanceof Array) {
  303. result = [];
  304. let index = 0;
  305. value.forEach(ele => {
  306. index = findArray(dic, ele);
  307. if (index != -1) {
  308. result.push(dic[index].label);
  309. } else {
  310. result.push(value);
  311. }
  312. });
  313. result = result.toString();
  314. }
  315. return result;
  316. };
  317. /**
  318. * 根据字典的value查找对应的index
  319. */
  320. export const findArray = (dic, value) => {
  321. for (let i = 0; i < dic.length; i++) {
  322. if (dic[i].value == value) {
  323. return i;
  324. }
  325. }
  326. return -1;
  327. };
  328. /**
  329. * 生成随机len位数字
  330. */
  331. export const randomLenNum = (len, date) => {
  332. let random = '';
  333. random = Math.ceil(Math.random() * 100000000000000).toString().substr(0, len ? len : 4);
  334. if (date) random = random + Date.now();
  335. return random;
  336. };
  337. /**
  338. * 打开小窗口
  339. */
  340. export const openWindow = (url, title, w, h) => {
  341. // Fixes dual-screen position Most browsers Firefox
  342. const dualScreenLeft = window.screenLeft !== undefined ? window.screenLeft : screen.left
  343. const dualScreenTop = window.screenTop !== undefined ? window.screenTop : screen.top
  344. const width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document
  345. .documentElement.clientWidth : screen.width
  346. const height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document
  347. .documentElement.clientHeight : screen.height
  348. const left = ((width / 2) - (w / 2)) + dualScreenLeft
  349. const top = ((height / 2) - (h / 2)) + dualScreenTop
  350. const newWindow = window.open(url, title,
  351. 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
  352. w + ', height=' + h + ', top=' + top + ', left=' + left)
  353. // Puts focus on the newWindow
  354. if (window.focus) {
  355. newWindow.focus()
  356. }
  357. }
  358. // 路由处理 开始
  359. export const isURL = (s) => {
  360. return /^http[s]?:\/\/.*/.test(s);
  361. }
  362. export const objToform = (obj) => {
  363. let result = [];
  364. Object.keys(obj).forEach(ele => {
  365. result.push(`${ele}=${obj[ele]}`);
  366. });
  367. return result.join('&');
  368. }
  369. // 设置标题
  370. export const setTitle = title => {
  371. const defaultTitle = this.$t('title');
  372. title = title ? `${title}-${defaultTitle}` : defaultTitle;
  373. document.title = title;
  374. }
  375. export const closeTag = value => {
  376. let tag = value || this.$store.getters.tag;
  377. if (typeof value === 'string') {
  378. tag = this.$store.getters.tagList.filter(ele => ele.value === value)[0];
  379. }
  380. this.$store.commit('DEL_TAG', tag);
  381. }
  382. export const generateTitle = (title, key, _this) => {
  383. const hasKey = _this.$te('route.' + (key || title));
  384. if (hasKey) {
  385. const translatedTitle = _this.$t('route.' + (key || title))
  386. return translatedTitle;
  387. }
  388. console.log(title)
  389. return title;
  390. }
  391. //处理路由
  392. export const getPath = (params) => {
  393. let {
  394. src
  395. } = params;
  396. let result = src || '/';
  397. if (src.includes('http') || src.includes('https')) {
  398. result = `/myiframe/urlPath?${objToform(params)}`;
  399. }
  400. return result;
  401. }
  402. //设置路由值
  403. export const getValue = (route) => {
  404. let value = '';
  405. if (route.query.src) {
  406. value = route.query.src;
  407. } else {
  408. value = route.path;
  409. }
  410. return value;
  411. }
  412. // 路由处理 结束
  413. // null赋值空字符串
  414. export const nullToString = (obj) => {
  415. Object.keys(obj).forEach(function(key) {
  416. console.log(key, obj[key])
  417. if (obj[key] === null) {
  418. obj[key] = ''
  419. }
  420. })
  421. }