CampusInfo.js 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. Namespace.register('CampusInfo');
  2. function JsonParse (data){
  3. if (typeof data !== 'string' || !data) {
  4. return null
  5. }
  6. return eval('(' + data.replace(/^\s+/, '').replace(/\s+$/, '') + ')')
  7. };
  8. function OptionsInit(options,defaultOptions) {
  9. let opts = {};
  10. let key;
  11. for (key in defaultOptions) {
  12. if (typeof options[key] === 'undefined') {
  13. opts[key] = defaultOptions[key]
  14. } else {
  15. opts[key] = options[key]
  16. }
  17. }
  18. return opts
  19. }
  20. function Ajax(options) {
  21. let ajaxSettings = {
  22. url: '',
  23. type: 'POST',
  24. dataType: 'json',
  25. async: true,
  26. cache: true,
  27. data: null,
  28. contentType: 'application/x-www-form-urlencoded',
  29. success: null,
  30. error: null,
  31. complete: null,
  32. processData:true,
  33. progress:false,
  34. accepts: {
  35. text: 'text/plain',
  36. html: 'text/html',
  37. xml: 'application/xml, text/xml',
  38. json: 'application/json, text/javascript'
  39. },
  40. header:null,
  41. param:null,
  42. withCredentials: false
  43. };
  44. let opts = OptionsInit(options,ajaxSettings);
  45. let param = function (obj) {
  46. let s = [];
  47. for (let key in obj) {
  48. s.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]))
  49. }
  50. return s.join('&');
  51. };
  52. let addToQueryString = function (url, params) {
  53. return url + (url.indexOf('?') > -1 ? '&' : '?') + param(params);
  54. };
  55. let xhr = new XMLHttpRequest();
  56. let url = opts.url;
  57. let sendData = opts.data;
  58. let readyStateChange = function () {
  59. let status = xhr.status;
  60. let data;
  61. if (xhr.readyState !== 4) {
  62. return
  63. }
  64. if (status >= 200 && status < 300 || status === 304) {
  65. if (opts.dataType === 'xml') {
  66. data = xhr.responseXML
  67. } else {
  68. data = xhr.responseText;
  69. if (opts.dataType === 'json') {
  70. data = JsonParse(data);
  71. }
  72. }
  73. if (typeof(opts.success)==='function') {
  74. opts.success.call(opts, data, status, xhr);
  75. }
  76. }
  77. else {
  78. if (typeof(opts.error)==='function') {
  79. opts.error.call(opts, xhr, status)
  80. }
  81. }
  82. if (typeof(opts.complete)==='function') {
  83. opts.complete.call(opts, xhr, status)
  84. }
  85. };
  86. if(opts.param) {
  87. url = addToQueryString(url, opts.param);
  88. }
  89. if (!opts.cache) {
  90. url = addToQueryString(url, {noAjaxCache: (new Date()).getTime()})
  91. }
  92. if ((opts.type === 'GET'||opts.type === 'get')&&sendData&&opts.processData) {
  93. url = addToQueryString(url, sendData);
  94. sendData = null
  95. }
  96. xhr.open(opts.type, url, opts.async);
  97. if ((opts.type === 'POST'||opts.type === 'post')&&sendData&&opts.processData) {
  98. sendData = param(sendData);
  99. xhr.setRequestHeader('Content-type', opts.contentType);
  100. }
  101. for(let i in opts.header){
  102. xhr.setRequestHeader(i, opts.header[i]);
  103. }
  104. if(opts.progress) {
  105. xhr.upload.addEventListener("progress", opts.progress, false);
  106. }
  107. if (opts.dataType && opts.accepts[opts.dataType]) {
  108. xhr.setRequestHeader('Accept', opts.accepts[opts.dataType])
  109. }
  110. xhr.withCredentials = opts.withCredentials;
  111. if (opts.async) {
  112. xhr.onreadystatechange = readyStateChange;
  113. xhr.send(sendData)
  114. }else {
  115. console.warn(opts.url+' 使用了同步请求,该请求将影响性能,不建议使用');
  116. xhr.send(sendData);
  117. readyStateChange()
  118. }
  119. return xhr
  120. };
  121. const {ipcRenderer} = require('electron');
  122. let MainWindow=require('electron').remote.getCurrentWindow();
  123. CampusInfo.LoadAdvert = function () {
  124. for (var i = 0; i < CampusInfo.Advert.length; i++) {
  125. var a=$$("img", {
  126. "draggable":false,
  127. "src": CampusInfo.AdvertData[i].img
  128. }, CampusInfo.Advert[i]);
  129. a.href=CampusInfo.AdvertData[i].script;
  130. a.onclick=function () {
  131. CampusInfo.OpenWeb(this.href)
  132. }
  133. }
  134. };//加载广告
  135. CampusInfo.OpenWeb=function(url){
  136. ipcRenderer.send('open-browers',url);
  137. };//打开网页
  138. CampusInfo.LoadData = function (navMain) {
  139. var data = navMain.resource;//取出数组里定义好的传参
  140. var Tag = navMain.tag;//查看是什么标签
  141. var LeftArea = navMain.Left;//左侧内容容器
  142. var CenterArea = navMain.Center;//中间内容容器
  143. var ContentLength = navMain.dataLength;//中间内容有多少个
  144. var LeftContentArr = [];//记录左侧数据
  145. var CenterTitleArr = [];//记录特殊的蓝色标题数据
  146. var CenterContentArr = [];//记录输出内容
  147. CenterContentArr[0] = [];//三个数组分别用来记录三块内容,内容长度为8或者4
  148. CenterContentArr[1] = [];
  149. CenterContentArr[2] = [];
  150. if (typeof data === 'string') {
  151. CampusInfo.NewsData = [];
  152. CampusInfo.LoadNews = function () {
  153. var url = data + "iid=" + CampusInfo.randomNum(10) + "&device_id=" + CampusInfo.randomNum(11);
  154. Ajax({
  155. url:url,
  156. type:'GET',
  157. success:function(rs){
  158. rs = rs.data;
  159. for (var i = 0; i < rs.length; i++) {
  160. var list = JSON.parse(rs[i].content);
  161. var arr = [];
  162. var falg = true;
  163. CampusInfo.NewsData.forEach(function (value) {
  164. if (value.UserFilesName === list.title) {
  165. falg = false;
  166. return false;
  167. }
  168. });
  169. if (falg && list.image_list&&list.title.length>15) {
  170. arr.UserFilesName = list.title;
  171. arr.UserFilesServerName = list.image_list[0].url;
  172. arr.Action_url = list.url;
  173. CampusInfo.NewsData.push(arr);
  174. }
  175. }
  176. if (CampusInfo.NewsData.length < 19) {
  177. CampusInfo.LoadNews();
  178. } else {
  179. CampusInfo.DealData(ContentLength, LeftContentArr, CenterTitleArr, CenterContentArr, CampusInfo.NewsData);//处理数据
  180. CampusInfo.PrintDataLocal(LeftContentArr, CenterTitleArr, CenterContentArr, LeftArea, CenterArea, Tag);//打印数据(本地数据)
  181. CampusInfo.Loading.remove();//移除loading
  182. CampusInfo.AutoSlider();//开始自动切换
  183. CampusInfo.Bind();//绑定事件
  184. }
  185. }
  186. })
  187. };
  188. CampusInfo.LoadNews();
  189. }else if(typeof data === 'object'&&CampusInfo.Fliter(data)) {
  190. U.A.Request(US.ADMINAUTH, (data), function (rs) {
  191. rs = rs.value;
  192. CampusInfo.DealData(ContentLength,LeftContentArr,CenterTitleArr,CenterContentArr,rs);//处理数据
  193. CampusInfo.PrintData(LeftContentArr,CenterTitleArr,CenterContentArr,LeftArea,CenterArea,Tag)//打印数据(获取的数据)
  194. });
  195. //注释的这里是有用的 是请求返回数据的操作
  196. }else{
  197. CampusInfo.DealData(ContentLength,LeftContentArr,CenterTitleArr,CenterContentArr,data);
  198. CampusInfo.PrintDataLocal(LeftContentArr,CenterTitleArr,CenterContentArr,LeftArea,CenterArea,Tag)
  199. }
  200. };//加载数据
  201. CampusInfo.Fliter=function (data) {
  202. for(var i=0;i<CampusInfo.FliterData.length;i++){
  203. if(CampusInfo.FliterData[i]===data){
  204. return false;
  205. }
  206. }
  207. return true;
  208. };//用于辨别本地数据
  209. CampusInfo.DealData=function (ContentLength,LeftContentArr,CenterTitleArr,CenterContentArr,rs) {/*中间内容多少条,左侧内容数组,中间标题数组,中间内容数组,获取的所有数据*/
  210. for (var i = 0; i < rs.length; i++) {
  211. if (i < 3) {
  212. LeftContentArr.push(rs[i]);
  213. } else {
  214. if (ContentLength === 4) {
  215. if (i === 3 || i === 8 || i === 13) {
  216. CenterTitleArr.push(rs[i]);
  217. }
  218. if (i > 3 && i < 8) {
  219. CenterContentArr[0].push(rs[i]);
  220. }
  221. if (i > 8 && i < 13) {
  222. CenterContentArr[1].push(rs[i]);
  223. }
  224. if (i > 13 && i < 18) {
  225. CenterContentArr[2].push(rs[i]);
  226. }
  227. } else {
  228. if (i === 3 || i === 12 || i === 21) {
  229. CenterTitleArr.push(rs[i]);
  230. }
  231. if (i > 3 && i < 12) {
  232. CenterContentArr[0].push(rs[i]);
  233. }
  234. if (i > 12 && i < 21) {
  235. CenterContentArr[1].push(rs[i]);
  236. }
  237. if (i > 21 && i < 30) {
  238. CenterContentArr[2].push(rs[i]);
  239. }
  240. }
  241. }
  242. }
  243. };
  244. CampusInfo.PrintDataLocal=function (LeftContentArr,CenterTitleArr,CenterContentArr,LeftArea,CenterArea,Tag) {/*左侧内容数组,中间标题数组,中间内容数组,左侧内容区域,中间内容区域,在CampusInfo.NavData定义的标签名*/
  245. for (var j = 0; j < CenterTitleArr.length; j++) {
  246. CenterArea[j].TitleArea.innerHTML = CenterTitleArr[j].UserFilesName;
  247. CenterArea[j].TitleArea.href = CenterTitleArr[j].Action_url;
  248. CenterArea[j].TitleArea.onclick = function () {
  249. CampusInfo.OpenWeb(this.href)
  250. };
  251. for (var k = 0; k < CenterContentArr[j].length; k++) {
  252. CenterArea[j].ContentArea[k].innerHTML = CenterContentArr[j][k].UserFilesName;
  253. CenterArea[j].ContentArea[k].href = CenterContentArr[j][k].Action_url;
  254. CenterArea[j].ContentArea[k].onclick = function () {
  255. CampusInfo.OpenWeb(this.href)
  256. };
  257. }
  258. }
  259. for (var kk = 0; kk < LeftContentArr.length; kk++) {
  260. LeftArea[kk].ImgArea.src = LeftContentArr[kk].UserFilesServerName;
  261. LeftArea[kk].TitleArea.innerHTML = LeftContentArr[kk].UserFilesName;
  262. LeftArea[kk].ImgArea.href = LeftContentArr[kk].Action_url;
  263. LeftArea[kk].ImgArea.onclick = function () {
  264. CampusInfo.OpenWeb(this.href)
  265. }
  266. }
  267. };//打印本地数据
  268. CampusInfo.PrintData=function (LeftContentArr,CenterTitleArr,CenterContentArr,LeftArea,CenterArea,Tag) {/*左侧内容数组,中间标题数组,中间内容数组,左侧内容区域,中间内容区域,在CampusInfo.NavData定义的标签名*/
  269. for (var j = 0; j < CenterTitleArr.length; j++) {
  270. CenterArea[j].TitleArea.innerHTML = CenterTitleArr[j].UserFilesName;
  271. if (Tag === 'graduation') {
  272. CenterArea[j].TitleArea.href = CampusInfo.ResourceUrl + CenterTitleArr[j].UserFilesServerName;
  273. } else {
  274. CenterArea[j].TitleArea.href = CenterTitleArr[j].Action_url;
  275. }
  276. CenterArea[j].TitleArea.onclick = function () {
  277. CampusInfo.OpenWeb(this.href)
  278. };
  279. for (var k = 0; k < CenterContentArr[j].length; k++) {
  280. CenterArea[j].ContentArea[k].innerHTML = CenterContentArr[j][k].UserFilesName;
  281. if (Tag === 'graduation') {
  282. CenterArea[j].ContentArea[k].href = CampusInfo.ResourceUrl + CenterContentArr[j][k].UserFilesServerName;
  283. } else {
  284. CenterArea[j].ContentArea[k].href = CenterContentArr[j][k].Action_url;
  285. }
  286. CenterArea[j].ContentArea[k].onclick = function () {
  287. CampusInfo.OpenWeb(this.href)
  288. };
  289. }
  290. }
  291. for (var kk = 0; kk < LeftContentArr.length; kk++) {
  292. LeftArea[kk].ImgArea.src = CampusInfo.ResourceUrl + LeftContentArr[kk].UserFilesServerName;//将图片地址添加进img标签
  293. LeftArea[kk].TitleArea.innerHTML = LeftContentArr[kk].UserFilesName;//将数据标题写入标题容器
  294. if (Tag === 'graduation') {//如果是毕业季数据
  295. LeftArea[kk].ImgArea.href = CampusInfo.ResourceUrl + LeftContentArr[kk].UserFilesServerName;//在图片前加上资源地址
  296. } else {
  297. LeftArea[kk].ImgArea.href = LeftContentArr[kk].Action_url;//否则直接放图片地址,这个href是用来点开链接的
  298. }
  299. LeftArea[kk].ImgArea.onclick = function () {
  300. CampusInfo.OpenWeb(this.href)//打开广告链接
  301. }
  302. }
  303. };//打印网络数据
  304. CampusInfo.randomNum = function (n) {
  305. var t = '';
  306. for (var i = 0; i < n; i++) {
  307. t += Math.floor(Math.random() * 10);
  308. }
  309. return t;//返回一个n长度的随机数
  310. };//随机数传参为随机数的长度
  311. CampusInfo.Bind = function () {
  312. CampusInfo.Nav[0].className = 'CampusInfoHeadNavActive';//默认第一个选中
  313. CampusInfo.Main[0].style.display = 'block';//默认第一个内容显示
  314. CampusInfo.Head.onclick=function () {
  315. CampusInfo.OpenWeb('http://seo.1473.cn')
  316. };//校内版点击跳转
  317. for (var i = 0; i < CampusInfo.Nav.length; i++) {//循环所有导航元素添加绑定事件
  318. (function (i) {
  319. CampusInfo.Nav[i].onclick = function () {//添加点击事件
  320. CampusInfo.AutoState=false;//如果点击了就取消自动切换,将自动切换禁用
  321. for (var j = 0; j < CampusInfo.Nav.length; j++) {//循环改变所有导航为未选中状态,所有内容为隐藏
  322. CampusInfo.Nav[j].className = '';
  323. CampusInfo.Main[j].style.display = 'none';
  324. }
  325. CampusInfo.Nav[i].className = 'CampusInfoHeadNavActive';//给指定的导航添加选中
  326. CampusInfo.Main[i].style.display = 'block';//给指定的内容添加显示
  327. }
  328. })(i)
  329. }
  330. ipcRenderer.on('quit',()=>{
  331. CampusInfo.QuitFlag=true;
  332. });
  333. window.onbeforeunload=(event)=>{
  334. if(!CampusInfo.QuitFlag&&process.env.NODE_ENV !== 'development') {
  335. MainWindow.hide();
  336. return false
  337. }
  338. };
  339. };//绑定事件
  340. CampusInfo.AutoSlider = function () {
  341. if (CampusInfo.AutoState) {//如果自动切换模式打开
  342. CampusInfo.NowShow++;//默认为-1,切换对应CampusInfo.Main显示
  343. if (CampusInfo.NowShow === CampusInfo.Nav.length) {//如果是最后一个则返回第一个
  344. CampusInfo.NowShow = 0;
  345. }
  346. for (var i = 0; i < CampusInfo.Nav.length; i++) {//循环改变所有导航为未选中状态,所有内容为隐藏
  347. CampusInfo.Nav[i].className = '';
  348. CampusInfo.Main[i].style.display = 'none';
  349. }
  350. CampusInfo.Nav[CampusInfo.NowShow].className = 'CampusInfoHeadNavActive';//给指定的导航添加选中
  351. CampusInfo.Main[CampusInfo.NowShow].style.display = 'block';//给指定的内容添加显示
  352. setTimeout(function () {
  353. CampusInfo.AutoSlider();//开始自动切换
  354. }, 5000);//5秒切换一次
  355. }
  356. };//自动切换
  357. CampusInfo.LoadWeather=function (location) {
  358. if(!location){//如果没有传地址就默认为深圳
  359. location='深圳'
  360. }
  361. U.A.Request("http://api.map.baidu.com/telematics/v3/weather?location="+location+"&output=json&ak=v4Wf3i6LQtNU0CvL3fScxzIx", null, function (rs) {
  362. rs = rs.value.results[0].weather_data[0];
  363. var temperature=rs.temperature;
  364. var weather=rs.weather;
  365. CampusInfo.WeatherPanel.innerHTML=location+' '+weather+' '+temperature;//将返回信息输出到对应元素内
  366. });
  367. };//获取天气
  368. CampusInfo.Init = function () {
  369. CampusInfo.AutoState=true;//默认为true自动切换,false不切换
  370. CampusInfo.NowShow=-1;//默认显示第几个-1是为了加载完成不会直接跳过第一个
  371. CampusInfo.ResourceUrl = 'http://fs.1473.cn/';//资源地址
  372. CampusInfo.Loading=$(".CampusInfoLoading")[0];
  373. CampusInfo.WeatherPanel=$(".CampusInfoHeadWeather")[0];
  374. CampusInfo.NavContainer = $(".CampusInfoHeadNav")[0];//导航元素主容器
  375. CampusInfo.MainContainer = $(".CampusInfoMain")[0];//内容元素住容器
  376. CampusInfo.Nav = [];//记录导航元素
  377. CampusInfo.Main = [];//记录内容元素
  378. CampusInfo.Advert = [];//记录广告区域
  379. CampusInfo.QuitFlag=false;
  380. CampusInfo.Head=$(".CampusInfoHeadTitle span")[0];//获取头部的校内版元素
  381. for (var i = 0; i < CampusInfo.NavData.length; i++) {//循环导航数组创建元素
  382. var area = [];//初始化area数组
  383. var leftContent = [];//初始化左侧内容数组
  384. var li = $$("li", {
  385. "innerHTML": CampusInfo.NavData[i].name
  386. }, CampusInfo.NavContainer);//创建一个导航元素在导航容器内
  387. var container = $$("div", {
  388. "className": "CampusInfoContainer",
  389. }, CampusInfo.MainContainer);//创建一个主内容容器在内容容器内
  390. var left_container = $$("div", {
  391. "className": "CampusInfoContLeft",
  392. }, container);//创建一个左侧内容区域在主容器里
  393. var center_container = $$("div", {
  394. "className": "CampusInfoContCenter",
  395. }, container);//创建一个中心内容区域在主容器里
  396. var right_container = $$("div", {
  397. "className": "CampusInfoContRight",
  398. }, container);//传建一个右侧内容容器在数组里
  399. CampusInfo.Nav[i] = li;//将导航元素丢进数组里
  400. CampusInfo.Main[i] = container;//将页面元素丢进数组里
  401. CampusInfo.Main[i].tag = CampusInfo.NavData[i].tag;//获取导航数组的内容标签
  402. CampusInfo.Main[i].dataLength = CampusInfo.NavData[i].dataLength;//获取导航数组规定的下方内容数据个数4或者8
  403. CampusInfo.Main[i].resource = CampusInfo.NavData[i].resource;//获取导航数组中的数据来源
  404. for (var j = 0; j < 3; j++) {
  405. area[j] = $$("div", {
  406. "className": "CampusInfoContCenterContent",
  407. }, center_container);//创建一个用来放置内容的元素,因为有三栏内容 所以创建三个并记录到ara数组
  408. area[j].TitleArea = $$("p", {
  409. "className": "CampusInfoContCenterTitle",
  410. }, area[j]);//创建放置标题的元素,同样三个 丢进area下的TitleArr数组
  411. for (var k = 0; k < CampusInfo.NavData[i].dataLength; k++) {
  412. $$("span", {
  413. "className": "CampusInfoContCenterCArea" + CampusInfo.NavData[i].dataLength
  414. }, area[j]);//这里根据之前取出的数据长度创建元素,丢进area里的ContentArea
  415. area[j].ContentArea = area[j].getElementsByTagName('span');//记录创建的span数组
  416. }
  417. CampusInfo.Main[i].Center = area;//将area丢回内容元素下的中间部分
  418. leftContent[j] = $$("div", {
  419. "className": "CampusInfoContLeftContent"
  420. }, left_container);//创建三个放置左侧内容的元素
  421. leftContent[j].ImgArea = $$("img", {"draggable":false}, leftContent[j]);//对应三个内容的img标签 丢回leftContent下的ImgArea数组
  422. leftContent[j].TitleArea = $$("p", {}, leftContent[j]);//对应三个内容的标题,丢回leftContent下的TitleArea数组
  423. CampusInfo.Main[i].Left = leftContent//将leftContent丢进主容器下的左侧数组
  424. }
  425. for (var k = 0; k < 2; k++) {
  426. var advert = $$("div", {
  427. "className": "CampusInfoContRightContent",
  428. }, right_container);//在每个右侧版块创建两个放置广告的元素
  429. CampusInfo.Advert.push(advert)//将创建的广告容器元素丢进数组里
  430. }
  431. }
  432. for(var i=0;i<CampusInfo.Main.length;i++){
  433. CampusInfo.LoadData(CampusInfo.Main[i]);//加载数据,传入要加载的主容器
  434. }
  435. CampusInfo.LoadAdvert();//加载广告
  436. CampusInfo.LoadWeather();//加载天气
  437. }();//初始化