common.js 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import store from "@/store";
  2. import axios from 'axios';
  3. import router from "@/router";
  4. import {getStorage,setStorage} from "@/utils/localStorage";
  5. import '@/services/requestConfig.js'; //导入请求的拦截器
  6. // import emojiConfig from '@/components/emojiComponent/lib/js/config'
  7. // import Config from "@/components/emojiComponent/lib/js/config";
  8. var CancelToken = axios.CancelToken;
  9. var source = CancelToken.source();
  10. const common = {
  11. clearMap(type = 0){//清空地图相关
  12. console.log("***clearMap***",type)
  13. if(!window.map){//如果不存在地图对象,则不需要往下执行清空地图的动作
  14. return false;
  15. }
  16. if(type==1){//入股清空类型是1,则表示要清空地图上的项目信息和聚合信息-全面清空
  17. window.project && window.project.clearProjecttLayer();//先清空项目地图
  18. }
  19. window.modulePolygon && window.modulePolygon.clearPolygonLayer();//板块图层
  20. window.competition && window.competition.clearCompetitionLayer();//竞品图层
  21. window.poiOperate && window.poiOperate.clearPoiLayer(); //poi图层
  22. window.trafficOperate && window.trafficOperate.clearTrafficLayer();//交通路网图层
  23. window.massPointOperate && window.massPointOperate.clearMassLayer();//mass点位图层
  24. },
  25. hexToRgba(hex, opacity) {
  26. if (!hex||!opacity){
  27. return hex
  28. }
  29. let RGBA;
  30. if (hex.includes('#')&&hex.length==7){
  31. RGBA = "rgba(" + parseInt("0x" + hex.slice(1, 3)) + "," + parseInt("0x" + hex.slice(3, 5)) + "," +
  32. parseInt("0x" + hex.slice(5, 7)) + "," + opacity + ")";
  33. }else if (hex.includes('rgb(')){
  34. var values = hex
  35. .replace(/rgb?\(/, '')
  36. .replace(/\)/, '')
  37. .replace(/[\s+]/g, '')
  38. .split(',')
  39. return 'rgba(${values[0]},${values[1]},${values[2]},${opacity})'
  40. }else if(hex.includes('rgba(')){
  41. var values = hex
  42. .replace(/rgba?\(/, '')
  43. .replace(/\)/, '')
  44. .replace(/[\s+]/g, '')
  45. .split(',')
  46. return 'rgba(${values[0]},${values[1]},${values[2]},${opacity})'
  47. }else{
  48. return hex
  49. }
  50. return RGBA
  51. },
  52. //项目切换时触发更新用户账号以及相关逻辑
  53. userProjectChangeHandle(project){
  54. if(!project){
  55. return false;
  56. }
  57. let uid = window.mapVue.$route.query.uid || '';//获取当前路由上的uid
  58. //当前缓存里面的账号信息
  59. let _account = null;
  60. let adversiterList = project.adversiterList || [];
  61. // let userInfo = window.userInfo;
  62. // let _a1 = userInfo ? userInfo['userAccount'] : null;
  63. let _a3 = (adversiterList && adversiterList[0]) ? adversiterList[0] : null;
  64. //当前项目下没有账号信息
  65. if(!_a3){
  66. this.userAccountChange(project,_account);//则设置当前账号为空
  67. return false;//同时不在往下执行
  68. }
  69. //如果检测存在用户账号信息
  70. if(uid){
  71. //当前项目中寻找这个账号
  72. _account = adversiterList.find(it=>it.advertiserId == uid);
  73. if(!_account){//当前项目中不存在路由中的这个账号
  74. _account = _a3;//使用当前项目下的 第一个账号作为当前账号;表示切换了项目地块
  75. }
  76. }else{//使用当前项目下的 第一个账号作为当前账号
  77. _account = _a3;
  78. }
  79. console.warn("***account-userAccountChange0***",_account,project,uid);
  80. this.userAccountChange(project,_account)
  81. },
  82. //切换账号,同时更新到全局变量中
  83. userAccountChange(project,account){
  84. if(!account){
  85. console.warn("***account-userAccountChange2***",account,project);
  86. window.userInfo['userAccount'] = null;//修改当前页面的
  87. return false;
  88. }
  89. switch(account.platform){
  90. case 1:
  91. account['type'] = 'tencent';
  92. account['typeName'] = '腾讯';
  93. break;
  94. case 2:
  95. account['type'] = 'huge';
  96. account['typeName'] = '巨量';
  97. break;
  98. case 3:
  99. account['type'] = 'baidu';
  100. account['typeName'] = '百度';
  101. break;
  102. default:
  103. break;
  104. }
  105. // if((_account && account && _account.advertiserId == account.advertiserId) || (account==null && (!_account || !_account.advertiserId))){ //账号相同,则不需要更新
  106. // console.warn("***账号相同,则不需更新***", _account,account);
  107. // }
  108. // else{//执行账号切换
  109. // }
  110. account.landId = project.id;//记录下当前选中账号 所属地块-因为不同地块可能有相同账号的情况
  111. userInfo['userAccount'] = account;//修改当前页面的当前账号信息
  112. // setStorage("userAccount", account);//更新到缓存里面-页面跳转时使用,window对象 不能跨页使用
  113. console.warn("***account-userAccountChange1***",account,project);
  114. //切换账号则切换路由中的uid
  115. window.mapVue.$router.push({ path: window.mapVue.$route.path, query: { uid: account.advertiserId || '' }})
  116. },
  117. async getLocationPOI(param) {
  118. const res = await requestConfig("locationPOI", param);
  119. if (res.success) {
  120. if (res.single) {
  121. //绘制poi
  122. this.getPois(res.single);
  123. }
  124. }else{
  125. massPointOperate.removeMassList();
  126. }
  127. },
  128. async recommendLocation(param) {
  129. const res = await requestConfig("recommendLocation", param);
  130. if (res.success) {
  131. if (res.single.poiList){
  132. let list = res.single.poiList;
  133. massPointOperate.removeMassList();
  134. window.massPointOperate.addMassPointList(list,true);
  135. }
  136. if (res.single.plateInfoModel&&res.single.plateInfoModel.length>0){
  137. massPointOperate.addPolygons(res.single.plateInfoModel);
  138. }
  139. }else{
  140. massPointOperate.removeMassList();
  141. }
  142. },
  143. async recommendPlanLocation(param) {
  144. const res = await requestConfig("recommendPlanLocation", param);
  145. if (res.success) {
  146. massPointOperate.removeMassList();
  147. if (res.list){
  148. let list = res.list;
  149. window.massPointOperate.addMassPointList(list,true);
  150. }
  151. }else{
  152. massPointOperate.removeMassList();
  153. }
  154. },
  155. // 判断是否为Mac 操作系统
  156. isMacAction() {
  157. return /macintosh|mac os x/i.test(navigator.userAgent);
  158. },
  159. //判断两个对象是否相等
  160. isEqual(objA,objB){
  161. //相等
  162. if(objA === objB) return objA !== 0 || 1/objA === 1/objB;
  163. //空判断
  164. if(objA == null || objB == null) return objA === objB;
  165. //类型判断
  166. if(Object.prototype.toString.call(objA) !== Object.prototype.toString.call(objB)) return false;
  167. switch(Object.prototype.toString.call(objA)){
  168. case '[object RegExp]':
  169. case '[object String]':
  170. //字符串转换比较
  171. return '' + objA ==='' + objB;
  172. case '[object Number]':
  173. //数字转换比较,判断是否为NaN
  174. if(+objA !== +objA){
  175. return +objB !== +objB;
  176. }
  177. return +objA === 0?1/ +objA === 1/objB : +objA === +objB;
  178. case '[object Date]':
  179. case '[object Boolean]':
  180. return +objA === +objB;
  181. case '[object Array]':
  182. //判断数组
  183. for(let i = 0; i < objA.length; i++){
  184. if (!this.isEqual(objA[i],objB[i])) return false;
  185. }
  186. return true;
  187. case '[object Object]':
  188. //判断对象
  189. let keys = Object.keys(objA);
  190. for(let i = 0; i < keys.length; i++){
  191. if (!this.isEqual(objA[keys[i]],objB[keys[i]])) return false;
  192. }
  193. keys = Object.keys(objB);
  194. for(let i = 0; i < keys.length; i++){
  195. if (!this.isEqual(objA[keys[i]],objB[keys[i]])) return false;
  196. }
  197. return true;
  198. default :
  199. return false;
  200. }
  201. },
  202. /**
  203. * 获取字符串的字符数
  204. * @param str
  205. * @returns {number}
  206. */
  207. wordLengthFilter(str){
  208. let size = this.byteLengthFilter(str)
  209. return Math.round(size/2)
  210. },
  211. /**
  212. * 超出最大字节数截取
  213. * @param e 原始字符串
  214. * @param maxLength 最大字节数
  215. * @returns {string} 截取后的字符串
  216. */
  217. copyWritingInput(e,maxLength = 60) {
  218. let s = 0;
  219. e = JSON.parse(JSON.stringify(e))
  220. if (e==''){
  221. return e
  222. }
  223. let cheseReg = /[(\u4e00-\u9fa5)(\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3010|\u3011|\u007e)]+$/
  224. for (var i = 0; i < e.length; i++) {
  225. const code = e.charAt(i);
  226. if("\n" == code){ // 换行符不算入字节
  227. s += 0
  228. }else if(/\s/.test(code)){
  229. s += 1;
  230. }else if (/^[\u0000-\u00ffA-Za-z1-9]+$/.test(code)) {
  231. s += 1;
  232. }else if(cheseReg.test(code)){
  233. s += 2
  234. }else{
  235. s += 0;
  236. }
  237. if (s > maxLength) {
  238. return e.substring(0, i);
  239. // return resultStr;
  240. }
  241. // resultStr += code
  242. }
  243. return e
  244. },
  245. /**
  246. * 新的截取功能
  247. * @param e
  248. * @param maxLength
  249. */
  250. subinput(e,maxLength = 60){
  251. let s = 0;
  252. e = JSON.parse(JSON.stringify(e))
  253. let cheseReg = /[(\u4e00-\u9fa5)(\u3002|\uff1f|\uff01|\uff0c|\u3001|\uff1b|\uff1a|\u201c|\u201d|\u2018|\u2019|\uff08|\uff09|\u300a|\u300b|\u3010|\u3011|\u007e)]+$/
  254. for (var i = 0; i < e.length; i++) {
  255. const code = e.charAt(i);
  256. if("\n" == code){ // 换行符不算入字节
  257. s += 0
  258. }else if(/\s/.test(code)){
  259. s += 1;
  260. }else if (/^[\u0000-\u00ffA-Za-z1-9]+$/.test(code)) {
  261. s += 1;
  262. }else if(cheseReg.test(code)){
  263. s += 1;
  264. if (s >= maxLength) {
  265. return e.substring(0, i);
  266. }else {
  267. s += 1;
  268. }
  269. }else{
  270. s += 0;
  271. }
  272. if (s >= maxLength) {
  273. return e.substring(0, i + 1);
  274. }
  275. }
  276. }
  277. };
  278. export default common;