HomePage.vue 37 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412
  1. <template>
  2. <div id="home-page">
  3. <div class="title">
  4. <div class="text font-ht" @click="toLogin">
  5. 上海市CIM平台
  6. </div>
  7. </div>
  8. <div class="star">
  9. <div class="bg1" @click="toOtherRouter(item,!loginPinia.canSeeSystemArr.find(i => getModuleIdIsHas(+i.MODULE_ID,item)) && !item.children && item.aPath)" v-for="item in ballSystemList" :key="item.name">
  10. <div class="bgc" ref="canvasGLTF" >
  11. </div>
  12. <div class="hx-box pa">
  13. <ul class="pr">
  14. <li class="hx-k1 pa0">
  15. <span></span>
  16. </li>
  17. <li class="hx-k2 pa0">
  18. <span></span>
  19. </li>
  20. <li class="hx-k3 pa0">
  21. <span></span>
  22. </li>
  23. </ul>
  24. </div>
  25. <div class="text" :class="{'disabled':!loginPinia.canSeeSystemArr.find(i => getModuleIdIsHas(+i.MODULE_ID,item)) && !item.children && item.aPath}"><pre class="font-ht">{{item.name}}</pre></div>
  26. <div class="child-kuang" v-if="item.children && item.isExtend">
  27. <ul>
  28. <li class="font-ht" @click="toOtherRouter(child,getDisabled(child))" :class="{'disabled':getDisabled(child)}" v-for="child in item.children" :key="child.name" >
  29. {{child.name}}
  30. </li>
  31. </ul>
  32. </div>
  33. </div>
  34. <div style="--i:0s" class="dot dot1">
  35. </div>
  36. <!-- <div style="&#45;&#45;i:1s" class="dot dot1">-->
  37. <!-- </div>-->
  38. <!-- <div style="&#45;&#45;i:2s" class="dot dot1">-->
  39. <!-- </div>-->
  40. <div style="--i:0s" class="dot dot2">
  41. </div>
  42. <!-- <div style="&#45;&#45;i:1s" class="dot dot2">-->
  43. <!-- </div>-->
  44. <!-- <div style="&#45;&#45;i:2s" class="dot dot2">-->
  45. <!-- </div>-->
  46. <div style="--i:0s" class="dot dot3">
  47. </div>
  48. <!-- <div style="&#45;&#45;i:1s" class="dot dot3">-->
  49. <!-- </div>-->
  50. <!-- <div style="&#45;&#45;i:2s" class="dot dot3">-->
  51. <!-- </div>-->
  52. <div style="--i:0s" class="dot dot4">
  53. </div>
  54. <!-- <div style="&#45;&#45;i:1s" class="dot dot4">-->
  55. <!-- </div>-->
  56. <!-- <div style="&#45;&#45;i:2s" class="dot dot4">-->
  57. <!-- </div>-->
  58. <div style="--i:0s" class="dot dot5">
  59. </div>
  60. <!-- <div style="&#45;&#45;i:1s" class="dot dot5">-->
  61. <!-- </div>-->
  62. <!-- <div style="&#45;&#45;i:2s" class="dot dot5">-->
  63. <!-- </div>-->
  64. <!-- <div style="&#45;&#45;i:0.5s" class="dot dot1">-->
  65. <!-- </div>-->
  66. <!-- <div style="&#45;&#45;i:1s" class="dot dot1">-->
  67. <!-- </div>-->
  68. <!-- <div style="&#45;&#45;i:1s" class="dot dot2">-->
  69. <!-- </div>-->
  70. <!-- <div style="&#45;&#45;i:0.5s" class="dot dot2">-->
  71. <!-- </div>-->
  72. <!-- <div style="&#45;&#45;i:1s" class="dot dot2">-->
  73. <!-- </div>-->
  74. <!-- <div style="&#45;&#45;i:2s" class="dot dot3">-->
  75. <!-- </div>-->
  76. <!-- <div style="&#45;&#45;i:0.5s" class="dot dot3">-->
  77. <!-- </div>-->
  78. <!-- <div style="&#45;&#45;i:1s" class="dot dot3">-->
  79. <!-- </div>-->
  80. <!-- <div style="&#45;&#45;i:3s" class="dot dot4">-->
  81. <!-- </div>-->
  82. <!-- <div style="&#45;&#45;i:0.5s" class="dot dot4">-->
  83. <!-- </div>-->
  84. <!-- <div style="&#45;&#45;i:1s" class="dot dot4">-->
  85. <!-- </div>-->
  86. <!-- <div style="&#45;&#45;i:4s" class="dot dot5">-->
  87. <!-- </div>-->
  88. <!-- <div style="&#45;&#45;i:0.5s" class="dot dot5">-->
  89. <!-- </div>-->
  90. <!-- <div style="&#45;&#45;i:1s" class="dot dot5">-->
  91. <!-- </div>-->
  92. <!-- <div style="&#45;&#45;i:4s" class="dot">-->
  93. <!-- </div>-->
  94. <!-- <div style="&#45;&#45;i:6s" class="dot">-->
  95. <!-- </div>-->
  96. <!-- <div style="&#45;&#45;i:8s" class="dot">-->
  97. <!-- </div>-->
  98. </div>
  99. <!-- <div class="right-tk">-->
  100. <!-- <ul>-->
  101. <!-- <li v-for="item in systemList" :key="item.name">-->
  102. <!-- {{item.name}}-->
  103. <!-- </li>-->
  104. <!-- </ul>-->
  105. <!-- </div>-->
  106. </div>
  107. </template>
  108. <script setup>
  109. import {useRouter} from "vue-router";
  110. import * as THREE from 'three'
  111. import imgs1 from '../../assets/imgs/jx.jpg'
  112. import imgs2 from '../../assets/imgs/mx.jpg'
  113. import imgs3 from '../../assets/imgs/hx.jpg'
  114. import imgs4 from '../../assets/imgs/sx.png'
  115. import imgs5 from '../../assets/imgs/hwx.png'
  116. import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
  117. let currentObjIndex = 1
  118. const loginPinia = useLoginStore()
  119. let isExtend = ref(false)
  120. let animationFrameObj = {
  121. animationFrameId1:null,
  122. animationFrameId2:null,
  123. animationFrameId3:null,
  124. animationFrameId4:null,
  125. animationFrameId5:null,
  126. }
  127. const router = useRouter()
  128. let rendererObj = {
  129. renderer1:null,
  130. renderer2:null,
  131. renderer3:null,
  132. renderer4:null,
  133. renderer5:null,
  134. }
  135. // 加载地球的纹理
  136. let img1 = {
  137. img1:new THREE.TextureLoader().load(imgs1),
  138. img2:new THREE.TextureLoader().load(imgs2),
  139. img3:new THREE.TextureLoader().load(imgs3),
  140. img4:new THREE.TextureLoader().load(imgs4),
  141. img5:new THREE.TextureLoader().load(imgs5),
  142. };
  143. function getModuleIdIsHas(MODULE_ID,child){
  144. return child.moduleId?.split(',').map(it => +it).includes(+MODULE_ID)
  145. }
  146. function getDisabled(child){
  147. return (!child.isOutZj && !loginPinia.canSeeSystemArr.find(i => getModuleIdIsHas(+i.MODULE_ID,child))) || child.disabled
  148. }
  149. // 初始化用于记录动画帧ID的变量
  150. // let animationFrameId = null
  151. // 初始化三维场景变量
  152. let sceneObj = {
  153. scene1:null,
  154. scene2:null,
  155. scene3:null,
  156. scene4:null,
  157. scene5:null,
  158. }
  159. // 初始化摄像机变量
  160. let cameraObj = {
  161. camera1:null,
  162. camera2:null,
  163. camera3:null,
  164. camera4:null,
  165. camera5:null,
  166. }
  167. // 初始化渲染器变量
  168. // let renderer = null
  169. // 初始化ResizeObserver对象变量,用于监听DOM元素的大小变化
  170. let resizeObserverObj = {
  171. resizeObserver1:null,
  172. resizeObserver2:null,
  173. resizeObserver3:null,
  174. resizeObserver4:null,
  175. resizeObserver5:null,
  176. }
  177. import {nextTick, onBeforeUnmount, onMounted, ref} from "vue";
  178. import {useLoginStore} from "@/pinia/login";
  179. import {
  180. editZwLoginState,
  181. getUserMyRole,
  182. getUserMyRoleClass,
  183. getUserMyRoleModule, loginInSjfxfn,
  184. loginInSpace,
  185. loginInSpaceLog,
  186. loginInZw
  187. } from "@/service/login";
  188. import {handleMes, showMessage} from "@/unit/element-ui/tip";
  189. import {encode} from "js-base64";
  190. // import {Clay} from "@/static/clay.min";
  191. onBeforeUnmount(() => {
  192. // cancelAnimationFrame(animationFrameId);
  193. // rendererObj['renderer' +(currentObjIndex)].dispose();
  194. // scene.dispose();
  195. // if (resizeObserver) {
  196. // resizeObserver.disconnect();
  197. // }
  198. })
  199. function toLogin(){
  200. router.replace('/login')
  201. }
  202. function loginZHFXFN(type,url,systemType){
  203. loginInSjfxfn(loginPinia.loginInfo.username,encode(loginPinia.loginInfo.psd),type).then(res => {
  204. var result = res.msg;
  205. if (result.length == 0) {
  206. showMessage({
  207. type:'warning',
  208. message:'登录信息已失效!'
  209. })
  210. return;
  211. }
  212. var rows = result[0].Rows;
  213. //所属系统 0:政务目录浏览系统 1:政务目录管理系统 2:平台监控系统 3:数据综合分析系统 9:城市体检 10:一网通办
  214. if(type == "3"){
  215. //获取用户信息 0 1 163 173 174
  216. var usercode = rows[0].USERID;
  217. var username = rows[0].USERNAME;
  218. var unitcode = rows[0].UNIT;
  219. var unitname = rows[0].UNIT_NAME;
  220. var lasttime = rows[0].LAST_TIME;
  221. var changetime = rows[0].CHANGE_TIME;
  222. var role = rows[0].ROLE_LIST;
  223. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  224. var role_uuid = rows[0]["ROLE_UUID"];
  225. var change_time = rows[0].CHANGE_TIME;
  226. //判断用户角色,只有平台管理员和系统管理员可以登录
  227. //保存用户信息
  228. const userInfo = {
  229. zhfx_usercode:usercode,
  230. zhfx_username:username,
  231. zhfx_unitcode:unitcode,
  232. zhfx_unitname:unitname,
  233. zhfx_lasttime:lasttime,
  234. zhfx_role:role,
  235. zhfx_userkeycode:userkeycode,
  236. zhfx_changetime:changetime,
  237. zhfx_role_uuid:role_uuid,
  238. zhfx_systemtype: rows[0]["SYSTEM_TYPE"]
  239. }
  240. debugger
  241. localStorage.setItem('anaLoginUserInfo',JSON.stringify(userInfo))
  242. window.open(url);
  243. return;
  244. }
  245. })
  246. .catch((e) => {
  247. showMessage({
  248. type:'error',
  249. message:'登录失败'
  250. })
  251. })
  252. }
  253. function toPage(item,isDisabled){
  254. let path = isDisabled?item.loginPage:item.aPath
  255. if (item.isOutZj){
  256. window.open(path,path)
  257. return;
  258. }
  259. if (isDisabled) {
  260. window.open(path,path)
  261. return
  262. }
  263. debugger
  264. switch (item.moduleId){
  265. case '569':
  266. loginKj(2,path,"a42fe58a1ff142f696c63b56519833a0")
  267. break
  268. case '538':
  269. loginKj(1,path,"4f2a211f473b4e39b9ccc1e04233c725")
  270. break
  271. case '570':
  272. loginZW(0,path,"166ab385ec6d49e3aa8473f31d2aaca3")
  273. break
  274. case '116':
  275. loginZW(1,path,"0693eeb52c154ba3ba57db71b30a0b98")
  276. break
  277. case '662':
  278. loginZW(2,path,"ebb42096345340359741dcb9c039f15c");
  279. break
  280. case '571,579':
  281. loginZHFXFN(3,path,"ed698aa9d09e4ac7b35df02a2d73985f");
  282. break
  283. case '572':
  284. break
  285. case '573':
  286. break
  287. case '574':
  288. break
  289. case '575':
  290. break
  291. case '576':
  292. loginZW(9,path,"47e0971bb15b4420bf1f351510378c72");
  293. break
  294. case '577':
  295. break
  296. case '578':
  297. break
  298. case '579': //数据综合分析系统
  299. loginZHFXFN(3,path,"ed698aa9d09e4ac7b35df02a2d73985f");
  300. break
  301. case '663': //城市体检
  302. loginZW(9,path,"47e0971bb15b4420bf1f351510378c72");
  303. break
  304. }
  305. }
  306. function selectUserClass(url){
  307. debugger
  308. let unit_id = JSON.parse(localStorage.getItem('loginUserInfoSpace')).ywxt_unitcode;
  309. let json_data = {
  310. "unit_id":unit_id
  311. };
  312. getUserMyRoleClass(json_data).then(res => {
  313. let result = res.msg;
  314. if (result.length == 0) {
  315. showMessage({
  316. type:'error',
  317. message:'获取所属行业失败!'
  318. })
  319. return;
  320. }
  321. let rowcount = result[0].TotalRowCount;
  322. if (rowcount == "0") {
  323. showMessage({
  324. type:'error',
  325. message:'获取所属行业失败!'
  326. })
  327. return;
  328. }
  329. let rows = result[0].Rows;
  330. if (rows.length == 0) {
  331. showMessage({
  332. type:'error',
  333. message:'获取所属行业失败!'
  334. })
  335. return;
  336. }
  337. //设置所属行业
  338. let classArr = [];
  339. for (var i = 0; i < rows.length; i++) {
  340. classArr.push({ code: rows[i].CODE, name: rows[i].NAME });
  341. }
  342. var classStr = "";
  343. for (var i = 0; i < classArr.length; i++) {
  344. classStr += "code:" + classArr[i].code + ",name:" + classArr[i].name + ";";
  345. }
  346. classStr = classStr.substring(0, classStr.length - 1);
  347. localStorage.setItem("ywxt_unitclass", classStr);
  348. window.open(url,url );
  349. return;
  350. })
  351. }
  352. function loginKj_log(unitid,userid,module,type,des){
  353. var json_data = {
  354. "UNIT":unitid,
  355. "userid":userid,
  356. "PLATE":module,
  357. "OPERATION":type,
  358. "OPERATIONRESULT":des,
  359. "appkey":localStorage.getItem("ywxt_userkeycode")
  360. };
  361. loginInSpaceLog(json_data).then(res => {})
  362. }
  363. function editUserLoginStateZw(usercode,userkeycode,login_lock,login_type,url){
  364. let json_data = {
  365. "CODE":usercode,
  366. "USERKEYCODE":userkeycode,
  367. "LOGIN_LOCK":login_lock,
  368. "LOGIN_TYPE":login_type,
  369. LOGIN_COUNT:'0'
  370. }
  371. debugger
  372. editZwLoginState(json_data).then(res => {
  373. handleMes(res,() => {
  374. window.open(url,url)
  375. })
  376. })
  377. }
  378. function loginZW(type,url,systemType){
  379. debugger
  380. loginInZw(loginPinia.loginInfo.username,encode(loginPinia.loginInfo.psd),type)
  381. .then(res => {
  382. var result = res.msg;
  383. if (result.length == 0) {
  384. showMessage({
  385. type:'warning',
  386. message:'登录信息已失效!'
  387. })
  388. return;
  389. }
  390. var rows = result[0].Rows;
  391. //所属系统 0:政务目录浏览系统 1:政务目录管理系统 2:平台监控系统 3:数据综合分析系统 9:城市体检 10:一网通办
  392. if(type == "0"){
  393. //获取用户信息
  394. var usercode = rows[0].USERID;
  395. var username = rows[0].USERNAME;
  396. var truename = rows[0].NAME;
  397. var unitcode = rows[0].UNIT;
  398. var unitname = rows[0].UNIT_NAME;
  399. var lasttime = rows[0].LAST_TIME;
  400. var role = rows[0].ROLE_CODE;
  401. var name = rows[0].NAME;
  402. var phone = rows[0].PHONE;
  403. var mail = rows[0].MAIL;
  404. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  405. //保存用户信息
  406. localStorage.setItem("zjw_usercode", usercode);
  407. localStorage.setItem("zjw_username", username);
  408. localStorage.setItem("zjw_unitcode", unitcode);
  409. localStorage.setItem("zjw_unitname", unitname);
  410. // localStorage.setItem("zjw_password", json_data["password"]);
  411. localStorage.setItem("zjw_lasttime", lasttime);
  412. localStorage.setItem("zjw_role", role);
  413. localStorage.setItem("zjw_name", name);
  414. localStorage.setItem("zjw_phone", phone);
  415. localStorage.setItem("zjw_mail", mail);
  416. localStorage.setItem("zjw_userkeycode", userkeycode);
  417. editUserLoginStateZw(usercode,userkeycode,"1","0",url );
  418. return;
  419. }
  420. if(type == "1"){
  421. //获取用户信息
  422. var usercode = rows[0].USERID;
  423. var username = rows[0].USERNAME;
  424. var truename = rows[0].NAME;
  425. var unitcode = rows[0].UNIT;
  426. var unitname = rows[0].UNIT_NAME;
  427. var lasttime = rows[0].LAST_TIME;
  428. var changetime = rows[0].CHANGE_TIME;
  429. var role = rows[0].ROLE_CODE;
  430. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  431. var qc = rows[0]["QC"];
  432. var tyshdm = rows[0]["TYSHDM"];
  433. var hlwj = rows[0]["HLWJ"];
  434. var role_uuid = rows[0]["ROLE_UUID"];
  435. //保存用户信息
  436. localStorage.setItem("yml_usercode", usercode);
  437. localStorage.setItem("yml_username", username);
  438. localStorage.setItem("yml_unitcode", unitcode);
  439. localStorage.setItem("yml_unitname", unitname);
  440. // localStorage.setItem("yml_password", json_data["password"]);
  441. localStorage.setItem("yml_lasttime", lasttime);
  442. localStorage.setItem("yml_role", role);
  443. localStorage.setItem("yml_userkeycode", userkeycode);
  444. localStorage.setItem("yml_changetime", changetime);
  445. localStorage.setItem("zyml_role_uuid", role_uuid);
  446. // alert(userkeycode);
  447. localStorage.setItem("yml_qc",qc);
  448. localStorage.setItem("yml_tyshdm", tyshdm);
  449. localStorage.setItem("hlwj", hlwj);
  450. editUserLoginStateZw(usercode,userkeycode,"1","1",url );
  451. return;
  452. }
  453. if(type == "2"){
  454. var usercode = rows[0].USERID;
  455. var username = rows[0].USERNAME;
  456. var truename = rows[0].NAME;
  457. var unitcode = rows[0].UNIT;
  458. var unitname = rows[0].UNIT_NAME;
  459. var lasttime = rows[0].LAST_TIME;
  460. var change_time = rows[0].CHANGE_TIME;
  461. var role = rows[0].ROLE_CODE;
  462. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  463. var ROLE_UUID = rows[0]["ROLE_UUID"];
  464. //保存用户信息
  465. const userInfo = {
  466. ptjk_usercode:usercode,
  467. ptjk_username:username,
  468. ptjk_unitcode:unitcode,
  469. ptjk_unitname:unitname,
  470. //ptjk_password:password,
  471. ptjk_lasttime:lasttime,
  472. ptjk_changetime:change_time,
  473. ptjk_role:role,
  474. ' ptjk-part':'',
  475. ptjk_userkeycode:userkeycode,
  476. ptjk_role_uuid:ROLE_UUID
  477. }
  478. localStorage.setItem('dataWatchLoginUserInfo',JSON.stringify(userInfo))
  479. editUserLoginStateZw(usercode,userkeycode,"1","2",url);
  480. return;
  481. }
  482. if(type == "9"){
  483. //获取用户信息
  484. var usercode = rows[0].USERID;
  485. var username = rows[0].USERNAME;
  486. //var truename = rows[0].NAME;
  487. var unitcode = rows[0].UNIT;
  488. var unitname = rows[0].UNIT_NAME;
  489. var lasttime = rows[0].LAST_TIME;
  490. var role = rows[0].ROLE_CODE;
  491. var name = rows[0].NAME;
  492. var phone = rows[0].PHONE;
  493. var mail = rows[0].MAIL;
  494. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  495. var change_time = rows[0].CHANGE_TIME;
  496. //保存用户信息
  497. localStorage.setItem("cstj_usercode", usercode);
  498. localStorage.setItem("cstj_username", username);
  499. localStorage.setItem("cstj_unitcode", unitcode);
  500. localStorage.setItem("cstj_unitname", unitname);
  501. // localStorage.setItem("cstj_password", json_data["password"]);
  502. localStorage.setItem("cstj_lasttime", lasttime);
  503. localStorage.setItem("cstj_role", role);
  504. localStorage.setItem("cstj_name", name);
  505. localStorage.setItem("cstj_phone", phone);
  506. localStorage.setItem("cstj_mail", mail);
  507. localStorage.setItem("cstj_userkeycode", userkeycode);
  508. localStorage.setItem("cstj_changetime", change_time);
  509. editUserLoginStateZw(usercode,userkeycode,"1","9",url );
  510. return;
  511. }
  512. })
  513. .catch((e) => {
  514. showMessage({
  515. type:'error',
  516. message:'登录失败'
  517. })
  518. })
  519. }
  520. function selectUserModule(user_id,url){
  521. var json_data = {
  522. "user_id":user_id
  523. };
  524. getUserMyRoleModule(json_data).then(res => {
  525. var result = res.msg;
  526. if (result.length == 0) {
  527. showMessage({
  528. type:'error',
  529. message:'获取用户权限失败!'
  530. })
  531. return;
  532. }
  533. var rowcount = result[0].TotalRowCount;
  534. if (rowcount == "0") {
  535. showMessage({
  536. type:'error',
  537. message:'获取用户权限失败!'
  538. })
  539. return;
  540. }
  541. var rows = result[0].Rows;
  542. if (rows.length == 0) {
  543. showMessage({
  544. type:'error',
  545. message:'获取用户权限失败!'
  546. })
  547. return;
  548. }
  549. //设置用户权限
  550. var moduleArr = [];
  551. for (var i = 0; i < rows.length; i++) {
  552. moduleArr.push({ code: rows[i].CODE, name: rows[i].NAME, state: rows[i].STATE });
  553. }
  554. var moduleStr = "";
  555. for (var i = 0; i < moduleArr.length; i++) {
  556. moduleStr += "code:" + moduleArr[i].code + ",name:" + moduleArr[i].name + ",state:" + moduleArr[i].state + ";";
  557. }
  558. moduleStr = moduleStr.substring(0, moduleStr.length - 1);
  559. localStorage.setItem("ywxt_module", moduleStr);
  560. //查询所属行业 PRO_SELECT_USER_CLASS
  561. selectUserClass(url);
  562. })
  563. }
  564. function selectUserRole(user_id,url){
  565. var json_data = {
  566. "user_id":user_id
  567. };
  568. getUserMyRole(json_data).then(res => {
  569. var result = res.msg;
  570. if (result.length == 0) {
  571. showMessage({
  572. type:'error',
  573. message:'获取用户角色失败!'
  574. })
  575. return;
  576. }
  577. var rowcount = result[0].TotalRowCount;
  578. if (rowcount == "0") {
  579. showMessage({
  580. type:'error',
  581. message:'获取用户角色失败!'
  582. })
  583. return;
  584. }
  585. var rows = result[0].Rows;
  586. if (rows.length == 0) {
  587. showMessage({
  588. type:'error',
  589. message:'获取用户角色失败!'
  590. })
  591. return;
  592. }
  593. //设置用户角色
  594. var roleArr = [];
  595. for (var i = 0; i < rows.length; i++) {
  596. roleArr.push({ code: rows[i].ROLE_ID, name: rows[i].ROLE_NAME });
  597. }
  598. var roleStr = "";
  599. for (var i = 0; i < roleArr.length; i++) {
  600. roleStr += "code:" + roleArr[i].code + ",name:" + roleArr[i].name + ";";
  601. }
  602. roleStr = roleStr.substring(0, roleStr.length - 1);
  603. localStorage.setItem("ywxt_userrole", roleStr);
  604. debugger
  605. let basicLoginUserInfo = JSON.parse(localStorage.getItem('loginUserInfoSpace'));
  606. basicLoginUserInfo.role = rows;
  607. localStorage.setItem('loginUserInfoSpace',JSON.stringify(basicLoginUserInfo))
  608. //查询用户模块信息
  609. selectUserModule(user_id,url);
  610. })
  611. }
  612. function loginKj(type,url,systemType){
  613. loginInSpace(loginPinia.loginInfo.username,encode(loginPinia.loginInfo.psd),type,systemType)
  614. .then(res => {
  615. debugger
  616. let result = res.msg;
  617. if (result.length == 0) {
  618. showMessage({
  619. type:'warning',
  620. message:'登录信息失效'
  621. })
  622. return;
  623. }
  624. let rows = result[0].Rows;
  625. if(type == "1"){
  626. //获取用户信息
  627. var usercode = rows[0].USERID;
  628. var unitcode = rows[0].UNIT;
  629. var username = rows[0].USERNAME;
  630. var truename = rows[0].NAME;
  631. var password = rows[0].PASSWORD;
  632. var unitname = rows[0].UNIT_NAME;
  633. var contact = rows[0].CONTACT;
  634. var sex = rows[0].SEX;
  635. var telephone = rows[0].TELPHONE;
  636. var email = rows[0].MAIL;
  637. var identify = rows[0].IS_IDENTIFY;
  638. var usertype = rows[0].TYPE;
  639. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  640. var change_time = rows[0].CHANGE_TIME;
  641. debugger
  642. //保存用户信息
  643. const loginUserInfo = {
  644. ywxt_usercode:usercode,
  645. ywxt_username:username,
  646. ywxt_unitcode:unitcode,
  647. ywxt_unitname:unitname,
  648. ywxt_contact:contact,
  649. ywxt_telephone:telephone,
  650. ywxt_email:email,
  651. ywxt_identify:identify,
  652. ywxt_userkeycode:userkeycode,
  653. ptjk_changetime:change_time,
  654. password:password
  655. }
  656. // 根据user_id获取角色
  657. localStorage.setItem('loginUserInfoSpace',JSON.stringify(loginUserInfo))
  658. loginKj_log(unitcode,usercode, "运维系统-登录", "登录系统成功", "系统登录");
  659. //空间运维系统 登录成功后 需要缓存用户权限
  660. selectUserRole(usercode,url);
  661. return;
  662. }
  663. if(type == "2"){
  664. //获取用户信息
  665. var usercode = rows[0].USERID;
  666. var username = rows[0].USERNAME;
  667. var truename = rows[0].NAME;
  668. var password = rows[0].PASSWORD;
  669. var unitcode = rows[0].UNIT;
  670. var unitname = rows[0].UNIT_NAME;
  671. var contact = rows[0].CONTACT;
  672. var sex = rows[0].SEX;
  673. var telephone = rows[0].TELPHONE;
  674. var email = rows[0].MAIL;
  675. var identify = rows[0].IS_IDENTIFY;
  676. var usertype = rows[0].TYPE;
  677. var userkeycode = rows[0]["TEMPUSERKEYCODE"];
  678. var changetime = rows[0]["CHANGE_TIME"];
  679. //保存用户信息
  680. const loginUserInfo = {
  681. gxjh_usercode:usercode,
  682. gxjh_username:username,
  683. gxjh_unitcode:unitcode,
  684. gxjh_unitname:unitname,
  685. gxjh_contact:contact?decode(contact):'',
  686. gxjh_telephone:telephone?decode(telephone):'',
  687. gxjh_email:email?decode(email):'',
  688. gxjh_identify:identify,
  689. gxjh_userkeycode:userkeycode,
  690. gxjh_changetime:changetime,
  691. }
  692. localStorage.setItem('exchangeUserInfo',JSON.stringify(loginUserInfo))
  693. loginKj_log(unitcode,usercode, "浏览系统-登录", "登录系统成功", "系统登录");
  694. //切换首页
  695. window.open(url,url)
  696. // window.location.href = url;
  697. return;
  698. }
  699. })
  700. .catch((e) => {
  701. debugger
  702. showMessage({
  703. type:'error',
  704. message:'登录失败'
  705. })
  706. })
  707. }
  708. function toOtherRouter(item,isDisabled){
  709. console.log(router,'useRouter()',item)
  710. if (item.path){
  711. let routeUrl = router.resolve({
  712. path: item.path,
  713. });
  714. window.open(routeUrl.href,'_blank')
  715. }
  716. else if (item.aPath){
  717. toPage(item,isDisabled)
  718. //
  719. //
  720. // window.open(item.aPath,'_blank')
  721. // localStorage.setItem('sks','11')
  722. }
  723. ballSystemList.value.forEach(i=>{
  724. i.isExtend = i.name === item.name?!i.isExtend:false
  725. })
  726. }
  727. function initResizeObserver(index) {
  728. resizeObserverObj['resizeObserver'+currentObjIndex] = new ResizeObserver(entries => {
  729. for (let entry of entries) {
  730. if (entry.target === canvasGLTF.value[index]) {
  731. const width = entry.contentRect.width;
  732. const height = entry.contentRect.height;
  733. cameraObj['camera'+currentObjIndex].aspect = width / height;
  734. cameraObj['camera'+currentObjIndex].updateProjectionMatrix();
  735. rendererObj['renderer' +(currentObjIndex)].setSize(width, height);
  736. rendererObj['renderer' +(currentObjIndex)].render(sceneObj['scene'+currentObjIndex], cameraObj['camera'+currentObjIndex]);
  737. }
  738. }
  739. });
  740. resizeObserverObj['resizeObserver'+currentObjIndex].observe(canvasGLTF.value[index]);
  741. }
  742. const canvasGLTF =ref(null)
  743. function renderBall(index){
  744. // 获取canvas的宽度和高度
  745. let width = canvasGLTF.value[index].offsetWidth
  746. let height = canvasGLTF.value[index].offsetHeight
  747. // 初始化用于旋转地球的步长
  748. let step = 0;
  749. console.log(canvasGLTF.value,'我的',step)
  750. // 创建新的三维场景
  751. sceneObj['scene'+currentObjIndex] = new THREE.Scene();
  752. // 创建透视摄像机
  753. cameraObj['camera'+currentObjIndex] = new THREE.PerspectiveCamera(45, width / height, 0.1, 1000);
  754. // 创建WebGL渲染器,并启用抗锯齿和透明度
  755. rendererObj['renderer' +(currentObjIndex)] = new THREE.WebGLRenderer({
  756. antialias: true,
  757. alpha: true
  758. });
  759. // 设置渲染器的大小
  760. rendererObj['renderer' +(currentObjIndex)].setSize(width, height);
  761. // 创建材质数组并添加基础材质
  762. let mats = [];
  763. mats.push(new THREE.MeshBasicMaterial({map: img1['img' + (index+1)]}));
  764. // 创建球体的几何形状
  765. const geometry = new THREE.SphereGeometry(20, 60, 60);
  766. // 创建地球的材质
  767. let material = new THREE.MeshLambertMaterial({
  768. color: 0xFFFFFF,
  769. map: img1['img' + (index+1)]
  770. });
  771. // 创建地球的网格模型
  772. let sphere = new THREE.Mesh(geometry, material);
  773. // 设置地球的初始旋转值
  774. sphere.rotation.x = 0.1;
  775. // 将地球添加到场景中
  776. sceneObj['scene'+currentObjIndex].add(sphere);
  777. // 创建并添加环境光
  778. let ambientLight = new THREE.AmbientLight(0x666666);
  779. sceneObj['scene'+currentObjIndex].add(ambientLight);
  780. // 创建并添加投影灯光
  781. let spotLight = new THREE.SpotLight(0xffffff);
  782. spotLight.position.set(-40, 160, 100);
  783. spotLight.castShadow = true;
  784. sceneObj['scene'+currentObjIndex].add(spotLight);
  785. // 设置摄像机的位置和视点
  786. cameraObj['camera'+currentObjIndex].position.x = -80;
  787. cameraObj['camera'+currentObjIndex].position.y = 26;
  788. cameraObj['camera'+currentObjIndex].position.z = 50;
  789. cameraObj['camera'+currentObjIndex].lookAt(sceneObj['scene'+currentObjIndex].position);
  790. // 开始渲染循环
  791. render();
  792. // 渲染函数
  793. function render() {
  794. // 使地球绕Y轴旋转
  795. sphere.rotation.y = step += 0.005;
  796. // 请求下一帧的动画
  797. animationFrameObj['animationFrameId'+(index +1)] = requestAnimationFrame(render);
  798. // 渲染场景
  799. rendererObj['renderer' +(index+1)].render(sceneObj['scene'+(index+1)], cameraObj['camera'+(index+1)]);
  800. }
  801. let controls = new OrbitControls( cameraObj['camera'+currentObjIndex], rendererObj['renderer' +(currentObjIndex)].domElement);
  802. controls.enableZoomenableZoom = false
  803. // 将渲染器的DOM元素添加到Vue组件中的相应位置
  804. canvasGLTF.value[index].appendChild(rendererObj['renderer' +(currentObjIndex)].domElement)
  805. // 初始化尺寸观察者以监听canvas的大小变化
  806. initResizeObserver(index)
  807. }
  808. onMounted(() => {
  809. renderBall(0)
  810. currentObjIndex++
  811. renderBall(1)
  812. currentObjIndex++
  813. renderBall(2)
  814. currentObjIndex++
  815. renderBall(3)
  816. currentObjIndex++
  817. renderBall(4)
  818. // setTimeout(() => {
  819. // currentObjIndex++
  820. // setTimeout(() => {
  821. //
  822. // },1000)
  823. // renderBall(1)
  824. // },1000)
  825. })
  826. const systemList = ref([
  827. {
  828. name:'上海市农民相对集中居住管理系统'
  829. },
  830. {
  831. name:'市体育局体育公共设施GIS系统'
  832. },
  833. {
  834. name:'城市体检专题评估系统'
  835. },
  836. {
  837. name:'上海城市维护项目管理信息系统'
  838. },
  839. {
  840. name:'杨浦大桥数字孪生'
  841. },
  842. {
  843. name:'上海市城市更新信息系统'
  844. }
  845. ])
  846. const ballSystemList = ref([
  847. {name:'GIS中台',children:[
  848. // {name:'空间地理信息共享交换系统',aPath:'https://cimweb.zjw.sh.cegn.cn:2007/space-browsing/#/main/home',moduleId:'569',loginPage:'https://cimweb.zjw.sh.cegn.cn:2007/space-browsing/#/login'},
  849. {name:'空间地理信息应用系统',aPath:'https://cimweb.zjw.sh.cegn.cn:2007/space-application/#/main/home',moduleId:'569',loginPage:'https://cimweb.zjw.sh.cegn.cn:2007/space-application/#/login'},
  850. {name:'空间地理信息管理系统',aPath:'https://cimweb.zjw.sh.cegn.cn:2007/space-manage/#/main/GXYWWebsite/view/main/MainFrame',moduleId:'538',loginPage:'https://cimweb.zjw.sh.cegn.cn:2007/space-manage/#/login'},
  851. ]},
  852. {name:'BIM中台'},
  853. {name:'IOT中台',children: [
  854. {name:'视频数据管理',isOutZj:true,aPath:'http://10.86.133.76:8080/#/realMonitor?xmNo=172',moduleId:'569',loginPage:'http://10.86.133.76:8080/#/realMonitor?xmNo=172'},
  855. {name:'IOT数据管理',disabled:true}]},
  856. {name:'智能分析\nAI中台',
  857. children:[
  858. // {name:'数据分析赋能',aPath:'https://cimweb.zjw.sh.cegn.cn:2007/space-application/#/main/home',moduleId:'569',loginPage:'https://cimweb.zjw.sh.cegn.cn:2007/space-application/#/login'},
  859. {name:'数据治理监控',aPath:'https://cimweb.zjw.sh.cegn.cn:2007/space-monitor/#/home',moduleId:'662',loginPage: 'https://cimweb.zjw.sh.cegn.cn:2007/space-monitor/#/login'},
  860. ]},
  861. {name:'应用\n赋能中台',path:'/power-home'},
  862. ])
  863. </script>
  864. <style scoped lang="scss">
  865. @keyframes bga {
  866. 100%{
  867. transform: rotate(360deg);
  868. }
  869. }
  870. @keyframes wave {
  871. 0%{
  872. background-position: 0 0 ;
  873. }
  874. 100%{
  875. background-position: 1000px 0;
  876. }
  877. }
  878. @keyframes lineOpacity{
  879. 0%{
  880. opacity: 1;
  881. }
  882. 100%{
  883. opacity: 0;
  884. }
  885. }
  886. @keyframes ballMove1 {
  887. 0%{
  888. top: 238px;
  889. left: 286px;
  890. opacity: 0;
  891. }
  892. 50%{
  893. opacity: 1;
  894. }
  895. 100%{
  896. top: 268px;
  897. left: 1070px;
  898. opacity: 0;
  899. }
  900. }
  901. @keyframes ballMove2 {
  902. 0%{
  903. transform: rotate(158deg);
  904. top: 385px;
  905. left: 892px;
  906. opacity: 0;
  907. }
  908. 50%{
  909. opacity: 1;
  910. }
  911. 100%{
  912. transform: rotate(158deg);
  913. top: 580px;
  914. left: 392px;
  915. opacity: 0;
  916. }
  917. }
  918. @keyframes ballMove3 {
  919. 0%{
  920. transform: rotate(297deg);
  921. top: 333px;
  922. left: 422px;
  923. opacity: 0;
  924. }
  925. 50%{
  926. opacity: 1;
  927. }
  928. 100%{
  929. transform: rotate(297deg);
  930. top: 117px;
  931. left: 526px;
  932. opacity: 0;
  933. }
  934. }
  935. @keyframes ballMove4 {
  936. 0%{
  937. transform: rotate(56deg);
  938. top: 270px;
  939. left: 747px;
  940. opacity: 0;
  941. }
  942. 50%{
  943. opacity: 1;
  944. }
  945. 100%{
  946. transform: rotate(56deg);
  947. top: 519px;
  948. left: 911px;
  949. opacity: 0;
  950. }
  951. }
  952. @keyframes ballMove5 {
  953. 0%{
  954. transform: rotate(204deg);
  955. top: 513px;
  956. left: 684px;
  957. opacity: 0;
  958. }
  959. 50%{
  960. opacity: 1;
  961. }
  962. 100%{
  963. transform: rotate(204deg);
  964. top: 272px;
  965. left: 120px;
  966. opacity: 0;
  967. }
  968. }
  969. @keyframes ballMove {
  970. 0%{
  971. top: 242px;
  972. left: 245px;
  973. transform: rotate(2deg);
  974. }
  975. 20%{
  976. top: 272px;
  977. left: 1151px;
  978. transform: rotate(2deg);
  979. }
  980. 21%{
  981. transform: rotate(158deg);
  982. top: 354px;
  983. left: 973px;
  984. }
  985. 40%{
  986. transform: rotate(158deg);
  987. top: 580px;
  988. left: 392px;
  989. }
  990. 41%{
  991. transform: rotate(297deg);
  992. top: 333px;
  993. left: 422px;
  994. }
  995. 60%{
  996. transform: rotate(297deg);
  997. top: 117px;
  998. left: 526px;
  999. }
  1000. 61%{
  1001. transform: rotate(56deg);
  1002. top: 270px;
  1003. left: 747px;
  1004. }
  1005. 80%{
  1006. transform: rotate(56deg);
  1007. top: 519px;
  1008. left: 911px;
  1009. }
  1010. 81%{
  1011. transform: rotate(204deg);
  1012. top: 513px;
  1013. left: 684px;
  1014. }
  1015. 100%{
  1016. transform: rotate(204deg);
  1017. top: 272px;
  1018. left: 120px;
  1019. }
  1020. }
  1021. #home-page{
  1022. .disabled{
  1023. color: #3d3d3d !important;
  1024. }
  1025. .dot{
  1026. z-index: -1;
  1027. //top: 238px;
  1028. //left: 286px;
  1029. //transform: rotate(158deg);
  1030. //top: 272px;
  1031. //left: 1151px;
  1032. position: absolute;
  1033. //animation: ballMove 5s var(--i) infinite linear;
  1034. width: 10px;
  1035. height: 10px;
  1036. //background-clip: content-box;
  1037. //border: 10px solid transparent;
  1038. border-radius: 50%;
  1039. &.dot5{
  1040. animation: ballMove5 1s var(--i) infinite linear;
  1041. &:before{
  1042. animation:lineOpacity 1s var(--i) infinite linear;
  1043. }
  1044. }
  1045. &.dot4{
  1046. animation: ballMove4 1s var(--i) infinite linear;
  1047. &:before{
  1048. animation:lineOpacity 1s var(--i) infinite linear;
  1049. }
  1050. }
  1051. &.dot3{
  1052. animation: ballMove3 1s var(--i) infinite linear;
  1053. &:before{
  1054. animation:lineOpacity 1s var(--i) infinite linear;
  1055. }
  1056. }
  1057. &.dot2{
  1058. animation: ballMove2 1s var(--i) infinite linear;
  1059. &:before{
  1060. animation:lineOpacity 1s var(--i) infinite linear;
  1061. }
  1062. }
  1063. &.dot1{
  1064. animation: ballMove1 1s var(--i) infinite linear;
  1065. &:before{
  1066. animation:lineOpacity 1s var(--i) infinite linear;
  1067. }
  1068. }
  1069. //border-width:10px 0 0 10px;
  1070. //border-color: red blue yellow green;
  1071. //border-style: solid;
  1072. //left: -1000px;
  1073. //animation: ballMove 5s var(--i) infinite linear;
  1074. //top: 268px;
  1075. //left: 1070px;
  1076. &:before{
  1077. //
  1078. content: "";
  1079. position: absolute;
  1080. width: 200px;
  1081. height: 2px;
  1082. left: 0;
  1083. transform: translateX(-100%);
  1084. background: #d4eaf0;
  1085. }
  1086. //background-color: #5796c5;
  1087. //box-shadow: 0 0 0 4px #5796c5
  1088. //0 0 0 10px #5796c5,
  1089. //0 0 20px #5796c5,
  1090. //0 0 40px 5px #5796c5,
  1091. //0 0 60px 10px #5796c5;
  1092. }
  1093. position: relative;
  1094. .right-tk{
  1095. li{
  1096. line-height: 1.5;
  1097. font-size: 22px;
  1098. color: #fff;
  1099. }
  1100. padding: 20px 50px 20px 30px;
  1101. box-sizing: border-box;
  1102. position: absolute;
  1103. bottom: 20px;
  1104. right: 0px;
  1105. width: 459px;
  1106. height: 365px;
  1107. background: url("../../assets/imgs/tk.png");
  1108. }
  1109. .star{
  1110. .bg1{
  1111. .child-kuang{
  1112. li{
  1113. cursor: pointer;
  1114. height: 56px;
  1115. line-height: 56px;
  1116. padding-left: 2em;
  1117. &:not(.disabled):not(:hover){
  1118. background: linear-gradient(198deg, #FFFFFF 0.1220703125%,#FFFFFF 100%);
  1119. -webkit-background-clip: text;
  1120. -webkit-text-fill-color: transparent;
  1121. }
  1122. &:hover{
  1123. position: relative;
  1124. &:before{
  1125. left: 0;
  1126. top: 0;
  1127. content: "";
  1128. width: 58px;
  1129. height: 56px;
  1130. position: absolute;
  1131. background: url("@/assets/imgs/选中.png");
  1132. }
  1133. color: #409FFF;
  1134. }
  1135. font-size: 24px;
  1136. }
  1137. width: max-content;
  1138. border: 2px solid #64afe0;
  1139. background: rgba(0, 20, 40, 0.6);
  1140. padding: 10px;
  1141. position: absolute;
  1142. top: 80%;
  1143. }
  1144. //height: 290px;
  1145. //width: 290px;
  1146. }
  1147. transform-style: preserve-3d;
  1148. >div{
  1149. transform-style: preserve-3d;
  1150. perspective: 800px;
  1151. //transform: rotateX(-20deg) rotateY(25deg);
  1152. .bgc{
  1153. width: 300px;
  1154. height: 300px;
  1155. //&:before{
  1156. // content: "";
  1157. // position: absolute;
  1158. // left: 0;
  1159. // right: 0;
  1160. // bottom: 0;
  1161. // top: 0;
  1162. // background: url("../../assets/imgs/earthclouds1k.png");
  1163. //}
  1164. //background: url("../../assets/imgs/earthmap1k.jpg");
  1165. //background-position: 320px 0;
  1166. //transform: rotateY(calc(90deg * let(--i))) translateZ(150px);
  1167. //transform-origin: center center;
  1168. position: relative;
  1169. }
  1170. .text{
  1171. cursor: pointer;
  1172. text-shadow: 0px 5px 20px #000000;
  1173. top: 0px;
  1174. left: 0;
  1175. color: rgba(239, 248, 252, 1);
  1176. //color: rgba(255, 255, 255, 0.4);
  1177. position: absolute;
  1178. right: 0;
  1179. bottom: 0;
  1180. margin: auto;
  1181. z-index: 5;
  1182. width: 100%;
  1183. height: max-content;
  1184. text-align: center;
  1185. }
  1186. justify-content: center;
  1187. color: rgba(239, 248, 252, 1);
  1188. font-size: 27px;
  1189. display: flex;
  1190. align-items: center;
  1191. position: absolute;
  1192. }
  1193. >div:nth-child(1){
  1194. .text{
  1195. //margin-left: 42px;
  1196. }
  1197. //width: 281px;
  1198. //height: 297px;
  1199. top: 94px;
  1200. left: -100px;
  1201. .bgc{
  1202. //background: url("../../assets/imgs/1.png");
  1203. }
  1204. }
  1205. >div:nth-child(2){
  1206. .text{
  1207. //margin-left: 42px;
  1208. }
  1209. bottom: -50px;
  1210. //width: 280px;
  1211. //height: 298px;
  1212. left: 160px;
  1213. .bgc{
  1214. //background: url("../../assets/imgs/2.png");
  1215. }
  1216. }
  1217. >div:nth-child(3){
  1218. .text{
  1219. //margin-left: 42px;
  1220. }
  1221. bottom: -60px;
  1222. //width: 280px;
  1223. right: 100px;
  1224. //height: 297px;
  1225. .bgc{
  1226. //background: url("../../assets/imgs/3.png");
  1227. }
  1228. }
  1229. >div:nth-child(4){
  1230. .text{
  1231. //margin-left: 42px;
  1232. }
  1233. //width: 281px;
  1234. //height: 297px;
  1235. top: 130px;
  1236. right: -100px;
  1237. .bgc{
  1238. //background: url("../../assets/imgs/4.png");
  1239. }
  1240. }
  1241. >div:nth-child(5){
  1242. .text{
  1243. //margin-left: 42px;
  1244. }
  1245. //width: 283px;
  1246. //height: 297px;
  1247. top: -100px;
  1248. left: 433px;
  1249. .bgc{
  1250. //background: url("../../assets/imgs/5.png");
  1251. }
  1252. }
  1253. position: absolute;
  1254. left: 50%;
  1255. width: 1205px;
  1256. height: 692px;
  1257. background: url("../../assets/imgs/star.png");
  1258. background-size: 100% 100%;
  1259. top: 50%;
  1260. transform: translate(-50%,-50%);
  1261. }
  1262. .title{
  1263. cursor: pointer;
  1264. >.text{
  1265. font-size: 50px;
  1266. color: #EFF8FC;
  1267. line-height: 83px;
  1268. text-transform: uppercase;
  1269. letter-spacing: 10px;
  1270. //background-image: url("../../assets/imgs/img.png");
  1271. background: linear-gradient(0deg, #EFF8FC 0%, #E9F8FF 0%,#59C8FF 100%);
  1272. -webkit-background-clip: text;
  1273. animation: wave 30s linear infinite;
  1274. -webkit-text-fill-color: transparent;
  1275. }
  1276. transform: translate(50px,50px);
  1277. width: 539px;
  1278. height: 83px;
  1279. background: url("../../assets/imgs/bk-big.png");
  1280. }
  1281. min-height: 100%;
  1282. background: url("../../assets/imgs/bg.jpg");
  1283. background-size: 100% 100%;
  1284. }
  1285. </style>