Compare commits

..

No commits in common. 'master' and 'mobile' have entirely different histories.

  1. 2
      README.md
  2. 60
      package-lock.json
  3. 7
      package.json
  4. BIN
      public/images/1.png
  5. 36
      public/index.html
  6. 78
      src/App.vue
  7. 1
      src/api/index.js
  8. BIN
      src/assets/images/FEL.png
  9. BIN
      src/assets/images/cn-white.png
  10. BIN
      src/assets/images/cn.png
  11. BIN
      src/assets/images/device/1.png
  12. BIN
      src/assets/images/device/10.png
  13. BIN
      src/assets/images/device/11.png
  14. BIN
      src/assets/images/device/12.png
  15. BIN
      src/assets/images/device/13.png
  16. BIN
      src/assets/images/device/14.png
  17. BIN
      src/assets/images/device/15.png
  18. BIN
      src/assets/images/device/2.png
  19. BIN
      src/assets/images/device/3.png
  20. BIN
      src/assets/images/device/4.png
  21. BIN
      src/assets/images/device/5.png
  22. BIN
      src/assets/images/device/6.png
  23. BIN
      src/assets/images/device/7.png
  24. BIN
      src/assets/images/device/8.png
  25. BIN
      src/assets/images/device/9.png
  26. BIN
      src/assets/images/email-white.png
  27. BIN
      src/assets/images/email.png
  28. BIN
      src/assets/images/en-white.png
  29. BIN
      src/assets/images/en.png
  30. BIN
      src/assets/images/iasf.png
  31. BIN
      src/assets/images/iasf2.png
  32. BIN
      src/assets/images/industrial/app1-1.png
  33. BIN
      src/assets/images/industrial/app1.png
  34. BIN
      src/assets/images/industrial/app10-1.png
  35. BIN
      src/assets/images/industrial/app10.png
  36. BIN
      src/assets/images/industrial/app11-1.png
  37. BIN
      src/assets/images/industrial/app11.png
  38. BIN
      src/assets/images/industrial/app12-1.png
  39. BIN
      src/assets/images/industrial/app12.png
  40. BIN
      src/assets/images/industrial/app13-1.png
  41. BIN
      src/assets/images/industrial/app13.png
  42. BIN
      src/assets/images/industrial/app14-1.png
  43. BIN
      src/assets/images/industrial/app14.png
  44. BIN
      src/assets/images/industrial/app15-1.png
  45. BIN
      src/assets/images/industrial/app15.png
  46. BIN
      src/assets/images/industrial/app16-1.png
  47. BIN
      src/assets/images/industrial/app16.png
  48. BIN
      src/assets/images/industrial/app2-1.png
  49. BIN
      src/assets/images/industrial/app2.png
  50. BIN
      src/assets/images/industrial/app3-1.png
  51. BIN
      src/assets/images/industrial/app3.png
  52. BIN
      src/assets/images/industrial/app4-1.png
  53. BIN
      src/assets/images/industrial/app4.png
  54. BIN
      src/assets/images/industrial/app5-1.png
  55. BIN
      src/assets/images/industrial/app5.png
  56. BIN
      src/assets/images/industrial/app6-1.png
  57. BIN
      src/assets/images/industrial/app6.png
  58. BIN
      src/assets/images/industrial/app7-1.png
  59. BIN
      src/assets/images/industrial/app7.png
  60. BIN
      src/assets/images/industrial/app8-1.png
  61. BIN
      src/assets/images/industrial/app8.png
  62. BIN
      src/assets/images/industrial/app9-1.png
  63. BIN
      src/assets/images/industrial/app9.png
  64. BIN
      src/assets/images/logo3.png
  65. BIN
      src/assets/images/mall1.png
  66. BIN
      src/assets/images/oa-white.png
  67. BIN
      src/assets/images/oa.png
  68. BIN
      src/assets/images/officialAccount.jpg
  69. BIN
      src/assets/images/publication-bg.png
  70. BIN
      src/assets/images/qrcode.png
  71. BIN
      src/assets/images/search-white.png
  72. BIN
      src/assets/images/search.png
  73. BIN
      src/assets/images/tel1.png
  74. BIN
      src/assets/images/userSharing/1.png
  75. 82
      src/components/breadcrumb/index.vue
  76. 70
      src/components/menuTree/index.vue
  77. 160
      src/components/rightColumns/index.vue
  78. 11
      src/const/column.js
  79. 97
      src/i18n/index.js
  80. 392
      src/layouts/footer/index.vue
  81. 436
      src/layouts/header/index.vue
  82. 23
      src/layouts/home/index.vue
  83. 160
      src/layouts/navbar/index.vue
  84. 8
      src/libs/resize/index.js
  85. 271
      src/libs/util.js
  86. 26
      src/main.js
  87. 48
      src/mixins/article/index.js
  88. 56
      src/mixins/estate/index.js
  89. 57
      src/mixins/overview/index.js
  90. 77
      src/mixins/page/index.js
  91. 908
      src/pages/about/index.vue
  92. 576
      src/pages/aboutNew/index.vue
  93. 1145
      src/pages/application/index.vue
  94. 223
      src/pages/article/activity.vue
  95. 143
      src/pages/article/editor.css
  96. 412
      src/pages/article/index.vue
  97. 979
      src/pages/careers/index.vue
  98. 1238
      src/pages/column/index.vue
  99. 207
      src/pages/column/result.vue
  100. 193
      src/pages/contactUs/index.vue
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1 +1 @@
# 粒子研究院
# 粒子研究院前台前端

60
package-lock.json generated

@ -1,5 +1,5 @@
{
"name": "iasf",
"name": "vue-manage-system",
"version": "4.2.0",
"lockfileVersion": 1,
"requires": true,
@ -2771,16 +2771,6 @@
"dev": true,
"optional": true
},
"bindings": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
"optional": true,
"requires": {
"file-uri-to-path": "1.0.0"
}
},
"block-stream": {
"version": "0.0.9",
"resolved": "https://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz",
@ -3700,7 +3690,7 @@
},
"clone-deep": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
"resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz",
"integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
"dev": true,
"requires": {
@ -4384,7 +4374,7 @@
"dependencies": {
"lru-cache": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
"resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz",
"integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
"requires": {
"pseudomap": "^1.0.2",
@ -6042,13 +6032,6 @@
}
}
},
"file-uri-to-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
"optional": true
},
"filesize": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-2.0.4.tgz",
@ -8308,11 +8291,6 @@
"integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=",
"dev": true
},
"jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg=="
},
"js-base64": {
"version": "2.6.4",
"resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
@ -8365,11 +8343,6 @@
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
"integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
},
"jsencrypt": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/jsencrypt/-/jsencrypt-3.3.2.tgz",
"integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A=="
},
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@ -9565,7 +9538,7 @@
"dependencies": {
"gaze": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz",
"resolved": "https://registry.npmmirror.com/gaze/-/gaze-1.1.3.tgz",
"integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==",
"requires": {
"globule": "^1.0.0"
@ -9596,7 +9569,7 @@
"dependencies": {
"glob": {
"version": "7.1.7",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
"resolved": "https://registry.npmmirror.com/glob/-/glob-7.1.7.tgz",
"integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
"requires": {
"fs.realpath": "^1.0.0",
@ -9611,12 +9584,12 @@
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"minimatch": {
"version": "3.0.8",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.0.8.tgz",
"integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==",
"requires": {
"brace-expansion": "^1.1.7"
@ -10267,11 +10240,6 @@
"pinkie": "^2.0.0"
}
},
"pinyin-pro": {
"version": "3.23.1",
"resolved": "https://registry.npmjs.org/pinyin-pro/-/pinyin-pro-3.23.1.tgz",
"integrity": "sha512-fA345e5Zj+oAemjPKN9BpbTToUrq3J6ZVKEXpiCNNftFQahr4cKsBNnpGWR154WSOP3PgqlsaNgKklD8FlZvSw=="
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@ -12441,12 +12409,12 @@
},
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
@ -12456,7 +12424,7 @@
},
"sass-loader": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz",
"resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-8.0.2.tgz",
"integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==",
"dev": true,
"requires": {
@ -12469,7 +12437,7 @@
"dependencies": {
"schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"requires": {
@ -12480,7 +12448,7 @@
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
}
@ -12719,7 +12687,7 @@
},
"shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
"resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz",
"integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
"dev": true,
"requires": {
@ -14687,7 +14655,6 @@
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
@ -15053,7 +15020,6 @@
"dev": true,
"optional": true,
"requires": {
"bindings": "^1.5.0",
"nan": "^2.12.1"
}
},

@ -1,5 +1,5 @@
{
"name": "iasf",
"name": "vue-manage-system",
"version": "4.2.0",
"private": true,
"scripts": {
@ -15,14 +15,10 @@
"element-theme": "^2.0.1",
"element-ui": "^2.15.6",
"html2canvas": "^1.3.2",
"jquery": "^3.7.1",
"js-cookie": "^2.2.1",
"jsencrypt": "^3.3.2",
"jspdf": "^2.4.0",
"lru-cache": "^7.14.1",
"mavon-editor": "^2.9.1",
"node-sass": "^4.14.1",
"pinyin-pro": "^3.23.1",
"vue": "^2.6.14",
"vue-animate-number": "^0.4.2",
"vue-cropperjs": "^3.0.0",
@ -40,6 +36,7 @@
"browserslist": "^4.17.5",
"caniuse-lite": "^1.0.30001271",
"element-theme-chalk": "^2.15.6",
"node-sass": "^4.14.0",
"sass-loader": "^8.0.2",
"vue-template-compiler": "^2.6.14"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 471 KiB

After

Width:  |  Height:  |  Size: 646 KiB

@ -1,22 +1,20 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="keywords" content="深圳综合粒子设施研究院" />
<meta name="description" content="深圳综合粒子设施研究院" />
<meta name="referrer" content="no-referrer" />
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<!-- <meta name="viewport" content="width=device-width, user-scalable=yes, shrink-to-fit=no" /> -->
<link rel="icon" href="favcion.ico" type="image/x-icon"></link>
<link rel="shortcut icon" href="favicon.ico?v=20240710">
<title>深圳综合粒子设施研究院</title>
</head>
<body>
<noscript>
<strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="keywords" content="粒子研究院">
<meta name="description" content="粒子研究院"/>
<meta name="referrer" content="no-referrer">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no">
<title>粒子研究院</title>
</head>
<body>
<noscript>
<strong>We're sorry but vms doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

@ -34,87 +34,13 @@ export default {
}
var flagZt = IsPCModel();
this.$store.commit('updateModelType', flagZt)
window.onresize = this.throttle(() => {
window.onresize = () => {
if(document.body.clientWidth <= 1200) {
this.$store.commit('updateModelType', false)
}else if(document.body.clientWidth > 1700 ) {
this.$store.commit('updateModelType', true)
this.$store.dispatch('updateNavSumA', 10)
sessionStorage.setItem('navPageSize', 10)
}else if(document.body.clientWidth > 1600 && document.body.clientWidth <= 1700 ) {
this.$store.commit('updateModelType', true)
if (this.$i18n.locale == 'en') {
this.$store.dispatch('updateNavSumA', 9)
sessionStorage.setItem('navPageSize', 9)
}else {
this.$store.dispatch('updateNavSumA', 10)
sessionStorage.setItem('navPageSize', 10)
}
}else if(document.body.clientWidth > 1500 && document.body.clientWidth <= 1600) {
this.$store.commit('updateModelType', true)
this.$store.dispatch('updateNavSumA', 9)
sessionStorage.setItem('navPageSize', 9)
}else if(document.body.clientWidth > 1400 && document.body.clientWidth <= 1500) {
this.$store.commit('updateModelType', true)
if (this.$i18n.locale == 'en') {
this.$store.dispatch('updateNavSumA', 7)
sessionStorage.setItem('navPageSize', 7)
}else {
this.$store.dispatch('updateNavSumA', 8)
sessionStorage.setItem('navPageSize', 8)
}
}else if(document.body.clientWidth > 1300 && document.body.clientWidth <= 1400) {
this.$store.commit('updateModelType', true)
if (this.$i18n.locale == 'en') {
this.$store.dispatch('updateNavSumA', 6)
sessionStorage.setItem('navPageSize', 6)
}else {
this.$store.dispatch('updateNavSumA', 7)
sessionStorage.setItem('navPageSize', 7)
}
}else if(document.body.clientWidth > 1200 && document.body.clientWidth <= 1300) {
this.$store.commit('updateModelType', true)
if (this.$i18n.locale == 'en') {
this.$store.dispatch('updateNavSumA', 6)
sessionStorage.setItem('navPageSize', 6)
}else {
this.$store.dispatch('updateNavSumA', 6)
sessionStorage.setItem('navPageSize', 6)
}
}else {
this.$store.commit('updateModelType', true)
}
},500)
},
mounted() {
window.onbeforeunload = function(){
sessionStorage.removeItem('navPageSize')
}
if(document.body.clientWidth > 1600 ) {
sessionStorage.setItem('navPageSize', 10)
}else if(document.body.clientWidth > 1500 && document.body.clientWidth <= 1600) {
sessionStorage.setItem('navPageSize', 9)
}else if(document.body.clientWidth > 1400 && document.body.clientWidth <= 1500) {
sessionStorage.setItem('navPageSize', 8)
}else if(document.body.clientWidth > 1300 && document.body.clientWidth <= 1400) {
sessionStorage.setItem('navPageSize', 7)
}else if(document.body.clientWidth > 1200 && document.body.clientWidth <= 1300) {
sessionStorage.setItem('navPageSize', 6)
}
},
methods: {
throttle(func, delay) {
var prev = Date.now()
return function () {
var context = this;
var args = arguments;
var now = Date.now();
if (now - prev >= delay) {
func.apply(context, args);
prev = Date.now();
}
}
}
},
}
};
</script>

@ -18,5 +18,4 @@ export default {
siteSearchArticles: `iasf/sysContent/siteSearchArticles`,
oneLevelChecksThemAll: `iasf/sysColumn/oneLevelChecksThemAll`,
queryArticlesByColumnType: `iasf/sysColumn/queryArticlesByColumnType`,
queryArticleColumnParent: `iasf/sysContent/queryArticleColumnParent`,
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 443 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 904 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 225 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 741 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1002 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 915 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 892 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 867 B

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 534 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 962 KiB

@ -2,75 +2,49 @@
<!-- 面包屑 -->
<div class="breadcrumb">
<el-breadcrumb separator=">">
<template v-for="(item, i) in columns">
<el-breadcrumb-item :key="i"
:to="{ path: item.path || '/column', query: {
id: item.id
} }">
{{ item.columnName | i18nName($i18n)}}
<template v-for="(item, i) in data">
<el-breadcrumb-item
v-if="i != data.length - 1"
:key="i"
:to="{ path: item.path || '/column', query: item.query }">
{{ item.name }}
</el-breadcrumb-item>
<!-- <el-breadcrumb-item v-else
:key="i">
<el-breadcrumb-item
v-else
:key="i">
{{ item.name }}
</el-breadcrumb-item> -->
</el-breadcrumb-item>
</template>
</el-breadcrumb>
</div>
</template>
<script>
import Util from "@/libs/util";
export default {
props: ['data'],
data () {
return {
columns: [],
};
},
mounted () {
this.getInfo()
},
filters: {
i18nName (name, type) {
switch (name) {
case '专利':
return type.t('column.patent')
case '专著':
return type.t('column.monograph')
case '论文':
return type.t('column.paper')
case '科学研究':
return type.t('column.scientificResearch')
props: ['data'],
data() {
return {
default:
return name
}
}
},
methods: {
//
getInfo () {
this.$route.query.articleId && this.$post(this.api.queryArticleColumnParent, Util.rsa(this.$route.query.articleId)).then(({ data }) => {
this.columns = data
}).catch(err => { })
};
},
},
methods: {
}
};
</script>
<style lang="scss" scoped>
.breadcrumb {
margin: 4px 0 16px;
/deep/.el-breadcrumb__item {
.is-link,
.el-breadcrumb__separator {
font-weight: 400;
color: $main-color;
}
&:last-child {
.is-link {
cursor: pointer;
}
}
margin: 4px 0 16px;
/deep/.el-breadcrumb__item {
.is-link, .el-breadcrumb__separator {
font-weight: 400;
color: $main-color;
}
&:last-child {
.is-link {
color: #0B1D30;
}
}
}
}
</style>

@ -1,28 +1,20 @@
<template>
<div class="menu-child">
<template v-for="item in this.menuList">
<el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
:class="{ active: $route.query.id == item.id }" :key="item.id" :index="String(item.id)" :id="item.id"
v-if="item.children && item.children.length && item.children.find(i => i.menuVisible !== 1)">
<el-submenu :popper-class="$route.path === '/home' || $route.path === '/sfel' ? 'home-menu-popup' : ''" :class="{active: $route.query.id == item.id}" :key="item.id" :index="String(item.id)" :id="item.id" v-if="item.children && item.children.length">
<template slot="title">
<span slot="title" :id="item.id">{{ item.columnName }}</span>
<span slot="title" :id="item.id">{{item.columnName}}</span>
</template>
<menuTree :menuList="item.children"></menuTree>
</el-submenu>
<template v-else>
<template v-if="item.menuVisible !== 1">
<el-menu-item :key="item.id" :id="item.id" :index="String(item.id)"
:class="{ active: $route.query.id == item.id }">
<span slot="title" :id="item.id">{{ item.columnName }}</span>
</el-menu-item>
</template>
</template>
<el-menu-item :key="item.id" :id="item.id" :index="String(item.id)" :class="{active: $route.query.id == item.id}" v-else>
<span slot="title" :id="item.id">{{item.columnName}}</span>
</el-menu-item>
</template>
</div>
</template>
<script>
import Util from '@/libs/util'
export default {
name: 'menuTree',
props: {
@ -31,66 +23,26 @@ export default {
default: []
}
},
computed: {
isHome () {
return Util.isIndex()
},
site () {
return this.$route.query.siteId || this.$store.state.content.site
},
},
data () {
return {}
},
mounted () { },
mounted () {},
methods: {}
}
</script>
<style lang="scss" scoped>
.menu-child {
/deep/ .el-menu-item {
background-color: transparent !important;
}
&:hover {
background-color: transparent !important;
}
}
@media (max-width: 1200px) {
.menu-child {
@media (min-width: 280px) and (max-width: 750px) {
.menu-child{
/deep/ .el-menu-item {
height: 40px;
line-height: 40px;
color: black !important;
background-color: transparent !important;
}
&:hover {
background-color: transparent !important;
height: 40px;line-height: 40px;
}
}
.el-submenu {
&:focus-visible {
outline: none;
}
/deep/ .el-submenu__title {
.el-submenu{
/deep/ .el-submenu__title{
height: 40px;
line-height: 40px;
font-size: 1rem;
color: black !important;
}
}
}
@media (max-width: 640px) {
.nav {
&>.menu-child {
&>.el-menu-item {
font-size: 1rem;
}
}
}
}

@ -1,160 +0,0 @@
<template>
<div :class="['right', { party }]">
<el-tree class="column" ref="column" :data="columns" highlight-current :expand-on-click-node="false"
:props="defaultProps" node-key="id" @node-click="columnTo"></el-tree>
<template v-if="site == 2">
<p class="l-title">{{ $t('column.latestNews') }}</p>
<ul class="list">
<li v-for="(item, i) in site2News" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
</template>
<template v-else>
<p class="l-title">{{ $t('column.hot') }}</p>
<ul class="list">
<li v-for="(item, i) in hots" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
<p class="l-title">{{ $t('column.latestNews') }}</p>
<ul class="list">
<li v-for="(item, i) in news" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
</template>
</div>
</template>
<script>
import Util from '@/libs/util'
import mixins from '@/mixins/article'
export default {
props: ['party'],
mixins: [mixins],
data () {
return {
columns: [],
defaultProps: {
value: 'id',
label: 'columnName'
},
news: [],
site2News: [],
hots: []
}
},
mounted () {
this.getColumn()
},
methods: {
//
getColumn () {
this.$post(this.api.listWithTreeMenuVisible, Util.rsa({
siteId: this.site,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
})).then(({ data }) => {
this.columns = data
this.$parent.getInfo && this.$parent.getInfo()
}).catch(err => { })
this.$post(this.api.hotContent, Util.rsa(this.site)).then(({ data }) => {
this.hots = Util.removeTag(data)
}).catch(err => { })
if (this.site == 2) {
this.$post(this.api.newlyPublishedArticles, Util.rsa({
siteId: this.site,
columnIds: [411, 412, 413],
pageNum: 1,
pageSize: 5,
})).then(({ data }) => {
this.site2News = Util.removeTag(data.records);
}).catch((res) => { });
} else {
this.$post(this.api.newlyPublishedArticles, Util.rsa({
pageNum: 1,
pageSize: 5,
siteId: this.site
})).then(({ data }) => {
this.news = Util.removeTag(data.records)
}).catch(res => { })
}
},
}
}
</script>
<style lang="scss" scoped>
.right {
width: 20%;
/deep/ .el-tree-node__label {
font-size: 0.78rem;
}
}
.column {
width: 100%;
margin-bottom: 1.56rem;
.el-tree-node:focus>.el-tree-node__content {
background-color: #e5edf8;
}
/deep/.el-tree-node__content {
height: 2.75rem;
background-color: #e5edf8;
border-bottom: 2px solid #fff;
}
/deep/.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
color: #fff;
background-color: #0f5698;
}
}
.list {
margin-bottom: 20px;
li {
padding: 16px 0;
border-bottom: 1px solid #d8d8d8;
}
.text {
margin-bottom: 5px;
font-size: 14px;
cursor: pointer;
&:hover {
color: $main-color;
}
}
.date {
font-size: 12px;
color: #999;
}
}
.party {
.el-tree-node:focus>.el-tree-node__content,
/deep/.el-tree-node__content {
background-color: $lightPartyTheme;
}
/deep/.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
background-color: $partyTheme;
}
}
</style>

@ -61,15 +61,4 @@
name: '产品资料和其它'
}
],
// 专利类别
patentClasses: [
{
id: 1,
name: '发明专利'
},
{
id: 2,
name: '实用外观'
}
],
}

@ -5,6 +5,7 @@ export const messages = {
label: '主题',
titlePlaceholder: '请输入搜索内容',
selectPlaceholder: '请选择',
all: '不限',
hot: '热点内容',
latestNews: '最新资讯',
views: '浏览',
@ -21,54 +22,6 @@ export const messages = {
speaker: '主讲人',
series: '演讲系列',
all: '全部',
readDetail: '阅读详情',
offline: '线下',
more: '更多',
author: '作者',
quote: '引用',
abstract: '摘要',
publicationName: '刊物名称',
yearOfPublication: '出版年份',
year: '年',
rollUp: '卷',
documentNumber: '文献号',
publicationType: '出版物类型',
publicationyear: '发表年度',
pleaseSelectThePublicationTime: '请选择出版时间',
PleaseEnterThePaperName: '请输入论文题目/期刊名称/作者名称',
journalName: '期刊名称',
yearofpublication: '出版年',
patentClassification: '专利类别',
applicationDate: '申请日期',
selectDate: '选择日期',
pleaseEnterPatentOfficer: '请输入专利名称/发明人姓名/申请号',
patentName: '专利名称',
ApplicationNumber: '申请号',
AuthorizationDate: '授权日期',
inventor: '发明人',
Pleaseselect: '请选择',
Publicationtime: '出版时间',
PleasenameoftheAuthor: '请输入著作名称/出版社名称/编写人员',
titleOfWork: '著作名称',
press: '出版社',
authorPersion: '编写人员',
seeMore: '查看更多',
inventionpatent: '发明专利',
practicalAppearance: '实用外观',
patent: '专利',
monograph: '专著',
paper: '论文',
scientificResearch: '科学研究',
sfeLintroduce: 'S³FEL介绍',
develHistory: '发展历程',
sfeltrailer: 'S³FEL宣传片',
geographicLocation: '地理位置',
organization: '机构设置',
introduce: '介绍',
ActivityIntroduction: '活动简介',
back: '返回',
comming: '暂无更多信息,敬请期待。',
nothing: '没有找到您搜索的内容,您可尝试搜索其他关键词。',
}
},
'en': {
@ -77,6 +30,7 @@ export const messages = {
label: 'Topic',
titlePlaceholder: 'Please enter the search content',
selectPlaceholder: 'Please Select',
all: 'All',
hot: 'Most View',
latestNews: 'Latest News',
views: 'Views',
@ -93,53 +47,6 @@ export const messages = {
speaker: 'Speaker',
series: 'Series',
all: 'All',
readDetail: 'Read Detail',
offline: 'Offline',
more: 'More',
author: 'Author',
quote: 'Quote',
abstract: 'Abstract',
publicationName: 'JournalName',
yearOfPublication: 'PublicationYear',
year: 'Year',
rollUp: 'Volume',
documentNumber: 'DocumentNumber',
publicationType: 'PublicationType',
publicationyear: 'PublicationYear',
pleaseSelectThePublicationTime: 'Please select the publication time',
PleaseEnterThePaperName: 'Please enter the paper title/journal name/author name',
journalName: 'JournalName',
applicationDate: 'ApplicationDate',
selectDate: 'SelectDate',
pleaseEnterPatentOfficer: 'Please enter the patent name/inventor name/application number',
patentName: 'Patent title',
patentClassification: 'Patent classification',
ApplicationNumber: 'Application number',
AuthorizationDate: 'Authorization Date',
inventor: 'Inventor',
Pleaseselect: 'Please select',
Publicationtime: 'Publication time',
PleasenameoftheAuthor: 'Please enter book title/publisher/author',
titleOfWork: 'Book title',
press: 'Publisher',
authorPersion: 'Author',
seeMore: 'See more',
inventionpatent: 'Invention Patent',
practicalAppearance: 'Practical appearance',
patent: 'Patent',
monograph: 'Monograph',
paper: 'Paper',
scientificResearch: 'Scientific research',
sfeLintroduce: 'Sfe lintroduce',
develHistory: 'Development history',
sfeltrailer: 'Sfel trailer',
geographicLocation: 'geographic location',
organization: 'Organization',
introduce: 'Introduce',
ActivityIntroduction: 'Activity Introduction',
back: 'Back',
comming: 'coming soone',
nothing: `We couldn't find the content you were searching for. You can try searching for other keywords.`,
}
}
};

@ -1,272 +1,248 @@
<template>
<div class="footer">
<div class="info">
<div class="left">
<img class="logo" src="@/assets/images/logo3.png" alt="">
<div class="texts">
<div class="line">
<img class="icon" src="@/assets/images/address.png" alt="">
深圳市光明区新湖街道圳园路268号A3栋
</div>
<div class="line">
<img class="icon" src="@/assets/images/tel.png" alt="">
{{ site == 1 ?
'0755-21096026' :
site == 5 || site == 6 ?
'0755-21096067' :
site == 3 || site == 4 ?
'0755-21096052' :
'0755-21096000' }}
</div>
<div class="line">
<img class="icon" src="@/assets/images/mail.png" alt="">
{{ site == 1 ?
'std@mail.iasf.ac.cn' :
site == 5 || site == 6 ?
'srgcb@mail.iasf.ac.cn' :
site == 3 || site == 4 ?
'FEL@mail.iasf.ac.cn' :
'gad@mail.iasf.ac.cn' }}
</div>
<div>
<div v-if="showDefaultPath.includes($route.path)" class="footer">
<div class="info">
<div class="leftBox">
<img class="m-b-20" src="@/assets/images/iasf.png" alt="">
<p class="meta">Copyright ©2002- 2021</p>
<p class="meta">Institute of Advanced Science Facilities, ShenzhenIASF</p>
<p class="meta">Tel400-0010-998</p>
</div>
<div v-for="(item, i) in columns" :key="i" class="column">
<h6 @click="columnTo(item)">{{ item.columnName }}</h6>
<ul v-if="item.children.length" class="children">
<li v-for="(column, j) in item.children" :key="j" @click="columnTo(column)">{{ column.columnName }}</li>
</ul>
</div>
</div>
<div v-if="site == 1 || site == 2" class="qrcodes">
<div class="item">
<img class="qrcode" src="@/assets/images/officialAccount.jpg" alt="">
<p class="text">官方公众号</p>
<a class="copyright">粤ICP备2020131940号 粤公安网34565432456765432号</a>
</div>
<div v-if="showContactPath.includes($route.path)" class="contact">
<div class="inner">
<div class="title">
<h6>Contact us</h6>
<p class="text">CONTACT US</p>
</div>
<div class="region">
<img class="dot" src="@/assets/images/dot.png" alt="">
<p class="name">Shenzhen</p>
</div>
<div class="info">
<img class="logo" src="@/assets/images/logo.png" alt="">
<div class="texts">
<div class="lines">
<div class="line">
<img class="icon" src="@/assets/images/mail.png" alt="">
Email: {{ isSfel ? 'fel@mail.iasf.ac.cn' : 'std@mail.iasf.ac.cn' }}
</div>
<div class="line">
<img class="icon" src="@/assets/images/tel.png" alt="">
Telephone: {{ isSfel ? '0755-21096052' : '0086-755-21096026' }}
</div>
<div class="line">
<img class="icon" src="@/assets/images/address.png" alt="">
Address: {{ isSfel ? '自由电子激光工程经理部' : '268 Zhenyuan St, Building A3, Floor 3-6, Guangming District, Shenzhen, Guangdong, P.R.China' }}
</div>
</div>
<div class="qrcode">
<!-- <img src="@/assets/images/about/qrcode.png" alt=""> -->
</div>
</div>
</div>
<!-- <div class="item">
<img class="qrcode" src="@/assets/images/qrcode.png" alt="">
<p class="text">官方微信</p>
</div> -->
</div>
</div>
<div class="copyright">Copyright ©深圳综合粒子设施研究院 粤ICP备2020131940号-1 粤公网安备44031102000586号</div>
</div>
</template>
<script>
import mixins from '@/mixins/article'
import Util from '@/libs/util'
export default {
mixins: [mixins],
data () {
data() {
return {
isIasf: false,
showDefaultPath: ['/home', '/iasf', '/estate/index'], //
showDefaultPath: ['/home'], //
showContactPath: ['/news', '/sfel', '/talent', '/about', '/careers', '/edu', '/news'], //
columns: [],
modules: []
};
},
computed: {
// sfel
isSfel () {
isSfel() {
const id = this.$route.query.siteId || this.$store.state.content.site
return id == 3
}
},
watch: {
'$route': {
handler () {
if (this.$route.path === '/iasf') {
this.isIasf = true
this.getInfo()
}
},
deep: true,
immediate: true
},
},
mounted () {
mounted(){
this.getColumn()
},
methods: {
//
getColumn () {
this.$post(this.api.listWithTreeMenuVisible, Util.rsa({
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, {
siteId: this.$route.query.siteId || this.$store.state.content.site,
columnName: '',
templateId: '',
typeId: '',
typeId : '',
isSort: 1
})).then(({ data }) => {
// this.columns = data.slice(0, 5)
this.columns = data
}).catch(err => { })
},
// iasf
getInfo () {
// /
this.$post(this.api[this.preview ? 'getRedisCache' : 'findPage'], Util.rsa(this.$route.query.id)).then(({ data }) => {
if (data.length) {
// state1theEditedJson稿0jsonBeforeEditing
const json = JSON.parse(this.preview ?
data :
data[data.length - 1][data[data.length - 1].state ? 'theEditedJson' : 'jsonBeforeEditing'])
this.modules = json
}
}).catch(err => { })
},
//
isLink (linkName) {
return linkName !== '无' && linkName !== ''
},
//
async openLink (item) {
const { link } = item
if (link.linkName === '无' || link.linkName === '') return false
let href = link.linkAddress
const type = link.connectionType
if (type === 1) { //
if (link.articleId) { //
//
const data = await this.$post(this.api.findArticle, Util.rsa(link.articleId))
if (data.data.isDisable) {
return Util.errorMsg('该文章已禁用!')
} else {
href = '/article?articleId=' + link.articleId
}
} else { //
href = '/column?id=' + link.columnId[link.columnId.length - 1]
}
href += '&siteId=' + (this.site)
if (!link.articleId) href = this.$router.resolve(href).href
} else if (type === 3) { //
if (link.otherArticleId) { //
//
const data = await this.$post(this.api.findArticle, Util.rsa(link.otherArticleId))
if (data.data.isDisable) {
return Util.errorMsg('该文章已禁用!')
} else {
href = '/article?articleId=' + link.otherArticleId
}
} else { //
href = '/column?id=' + link.otherColumnId[link.otherColumnId.length - 1]
}
href += '&siteId=' + link.site
if (!link.otherArticleId) href = this.$router.resolve(href).href
}
// /
if ((type === 1 && link.articleId) || (type === 3 && link.otherArticleId)) {
this.$post(this.api.findColumn, Util.rsa(this.id)).then(({ data }) => {
href = this.$router.resolve(href + '&id=' + this.id + '&columnName=' + data.columnName + '&path=' + this.$route.path.replace('/', '')).href
this.toHref(link.isOpen, href)
}).catch(res => { })
} else {
this.toHref(link.isOpen, href)
}
},
//
toHref (isOpen, href) {
if (isOpen) {
var userAgent = navigator.userAgent;
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
if (isSafari) {
window.location.href = href
} else {
window.open(href)
}
} else {
window.location.href = href
}
}).then(({ data }) => {
this.columns = data.slice(0, 6)
}).catch(err => {})
},
},
};
</script>
<style lang="scss" scoped>
.footer {
z-index: 2;
position: relative;
.leftBox{
margin-right: 100px;
}
.footer{
padding: 64px 10% 25px;
color: #fff;
background-color: #091733;
border-top: 10px solid #2870ff;
.logo {
width: 180px;
}
overflow: hidden;
.info {
display: flex;
justify-content: space-between;
align-items: center;
width: 1200px;
padding: 20px 0;
}
.meta {
margin-bottom: 10px;
font-size: 14px;
}
.column {
margin: 0 20px;
h6 {
margin-bottom: 20px;
font-size: 16px;
white-space: nowrap;
cursor: pointer;
}
}
.children {
li {
margin: 12px 0;
font-size: 14px;
color: #6D7384;
white-space: nowrap;
cursor: pointer;
}
}
.copyright {
font-size: 14px;
color: #6D7384;
}
}
.contact {
position: relative;
padding: 0 0 73px 0;
background: url(../../assets/images/map.png) 0 0/cover no-repeat;
.inner {
width: 1082px;
margin: 0 auto;
color: #fff;
}
.left {
display: inline-flex;
.title {
width: 419px;
height: 263px;
padding: 147px 0 0 40px;
background-color: #0854FE;
h6 {
z-index: 2;
position: relative;
margin-bottom: 20px;
font-size: 45px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
color: #fff;
}
.text {
margin-top: -65px;
font-size: 48px;
-webkit-text-fill-color: transparent;
-webkit-text-stroke: 1px #4073e5;
}
}
.region {
position: absolute;
top: 152px;
left: 70%;
display: flex;
align-items: center;
font-size: 20px;
color: #fff;
img {
margin-right: 20px;
}
}
.texts {
padding: 30px;
margin-left: 20px;
border-left: 2px solid #ccc;
.info {
margin: 55px 0 0 8px;
.texts {
display: flex;
align-items: center;
margin-top: 24px;
}
.item {
margin-right: 75px;
}
.line {
display: flex;
align-items: center;
margin-bottom: 10px;
font-size: 14px;
margin-bottom: 20px;
font-size: 16px;
color: #fff;
&:last-child {
margin-bottom: 0;
}
img {
margin-right: 8px;
}
}
}
.qrcodes {
display: flex;
justify-content: center;
.qrcode {
text-align: center;
font-size: 12px;
.item {
margin-right: 15px;
}
.qrcode {
width: 100px;
height: 100px;
margin-bottom: 10px;
.text {
margin-top: 10px;
font-size: 12px;
color: #fff;
}
}
.copyright {
padding: 16px 0;
font-size: 14px;
color: #c3c3c3;
text-align: center;
background-image: linear-gradient(to bottom, rgb(16, 41, 93), rgb(10, 24, 54) 40%);
}
}
@media (max-width: 1200px) {
.footer {
.info {
flex-direction: column;
width: 90%;
@media (max-width: 1200px) {
body{
width: 100% !important;
}
.inner {
width: 100% !important;
.title{
width: 100%;
text-align: center;
}
.left {
flex-direction: column;
margin-bottom: 20px;
.region{
top: 300px;
left: 50%;
}
.texts {
border-left: 0;
.info{
margin-top: 90px;
}
}
}
@media (min-width: 280px) and (max-width: 750px) {
.footer {
.info{
flex-direction: column;
.column{
margin-top: 20px;
margin-left: 0;
}
}
}
}
.copyright {
padding: 16px;
@media (min-width: 751px) and (max-width: 1200px) {
.footer {
.info{
flex-direction: column;
.column{
margin-top: 20px;
margin-left: 0;
}
}
}
}
</style>

@ -1,114 +1,33 @@
<template>
<div :class="['header', { channel: isHome, estate: isEstate, iasf: isIasf }]">
<a class="logo"
@click="toIndex">
<template v-if="!$store.getters.getModelType">
<img :src="require('@/assets/images/logo2.png')"
alt="">
</template>
<template v-else>
<img v-if="site == 2"
:src="require('@/assets/images/' + (isSfel ? 'iasf2' : isHome ? 'iasf' : 'iasf2') + '.png')"
alt=""
width="310">
<img v-else
:src="require('@/assets/images/' + (isSfel ? 'logo2' : isHome ? 'logo' : 'logo2') + '.png')"
alt="">
</template>
<div :class="['header', { channel: isHome }]">
<a class="logo" @click="toIndex">
<img :src="require('@/assets/images/' + (isSfel ? 'logo2' : isHome ? 'logo' : 'logo-black') + '.png')" alt="">
</a>
<!-- pc端 -->
<template v-if="$store.getters.getModelType">
<navbar v-if="navShow"
ref="nav"
:isHome.sync="isHome"
:isEstate.sync="isEstate"
:isIasf.sync="isIasf"
@showMoreBtns="updateBtnsType"></navbar>
<navbar ref="nav" :isHome.sync="isHome"></navbar>
<div class="tools">
<img class="search"
:src="require('@/assets/images/search' + (isHome ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleSearch">
<template v-if="site == 2">
<img class="search"
style="margin-right: 40px"
:src="require('@/assets/images/email' + (isHome ? '-white' : '') + '.png')"
alt=""
@click.stop="toMail">
<img class="search"
:src="require('@/assets/images/oa' + (isHome ? '-white' : '') + '.png')"
alt=""
@click.stop="toOa">
</template>
<template v-if="Util.isEn(site)">
<img :src="require('@/assets/images/cn' + (isHome ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleLang">
</template>
<template v-else>
<img :src="require('@/assets/images/en' + (isHome ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleLang">
</template>
<div v-if="showSearch"
class="search-wrap"
@click.stop="stop">
<input ref="search"
type="text"
:placeholder="$t('column.titlePlaceholder')"
v-model="title"
@keydown.enter="handleSearch">
<img class="search-icon"
src="@/assets/images/search.png"
alt=""
@click="handleSearch">
<i class="el-icon-close close-icon"
@click="showSearch = false"></i>
<img class="search" :src="require('@/assets/images/search' + (isHome ? '-white' : '') + '.png')" alt="" @click.stop="toggleSearch">
<img :src="require('@/assets/images/cn' + (isHome ? '-white' : '') + '.png')" alt="" @click.stop="toggleLang">
<div v-if="showSearch" class="search-wrap" @click.stop="stop">
<input ref="search" type="text" :placeholder="$t('column.titlePlaceholder')" v-model="title">
<img class="search-icon" src="@/assets/images/search.png" alt="" @click="handleSearch">
<i class="el-icon-close close-icon" @click="showSearch = false"></i>
</div>
</div>
</template>
<!-- 手机端 -->
<template v-else>
<i class="rightBox"
:class="modelType ? 'el-icon-s-fold': 'el-icon-s-unfold' "
@click="updateModelType"></i>
<div class="contentBox"
v-show="modelType">
<navbar ref="nav"
:isHome.sync="isHome"
:updateModelType="updateType"></navbar>
<i class="rightBox" :class="modelType ? 'el-icon-s-fold': 'el-icon-s-unfold' " @click="updateModelType"></i>
<div class="contentBox" v-show="modelType">
<navbar ref="nav" :isHome.sync="isHome" :updateModelType="updateType"></navbar>
<div class="modelBox">
<div class="searchBox"><img class="search"
:src="require('@/assets/images/search' + (isHome && $store.getters.getModelType ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleSearch"></div>
<div class="languageBox">
<!-- <img :src="require('@/assets/images/cn' + (isHome && $store.getters.getModelType ? '-white' : '') + '.png')" alt="" @click.stop="toggleLang"> -->
<template v-if="Util.isEn(site)">
<img :src="require('@/assets/images/cn' + (isHome && $store.getters.getModelType ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleLang">
</template>
<template v-else>
<img :src="require('@/assets/images/en' + (isHome && $store.getters.getModelType ? '-white' : '') + '.png')"
alt=""
@click.stop="toggleLang">
</template>
</div>
<div v-if="showSearch"
class="search-wrap"
@click.stop="stop">
<input ref="search"
type="text"
:placeholder="$t('column.titlePlaceholder')"
v-model="title">
<img class="search-icon"
src="@/assets/images/search.png"
alt=""
@click="handleSearch">
<i class="el-icon-close close-icon"
@click="showSearch = false"></i>
<div class="searchBox"><img class="search" :src="require('@/assets/images/search' + (isHome ? '-white' : '') + '.png')" alt="" @click.stop="toggleSearch"></div>
<div class="languageBox"><img :src="require('@/assets/images/cn' + (isHome ? '-white' : '') + '.png')" alt="" @click.stop="toggleLang"></div>
<div v-if="showSearch" class="search-wrap" @click.stop="stop">
<input ref="search" type="text" :placeholder="$t('column.titlePlaceholder')" v-model="title">
<img class="search-icon" src="@/assets/images/search.png" alt="" @click="handleSearch">
<i class="el-icon-close close-icon" @click="showSearch = false"></i>
</div>
</div>
</div>
@ -117,50 +36,35 @@
</div>
</template>
<script>
import Util from '@/libs/util'
import { mapMutations } from 'vuex'
import navbar from '../navbar'
export default {
data () {
data() {
return {
Util,
isHome: true,
isEstate: false,
isIasf: false,
isHome: this.$route.path === '/home' || this.$route.path === '/sfel',
showSearch: false,
height: 907,
title: '',
searchTimer: null,
modelType: false,
navShow: true
modelType: false
};
},
components: {
navbar
},
computed: {
isSfel () {
isSfel() {
return this.$route.path === '/sfel'
},
site () {
return this.$route.query.siteId || this.$store.state.content.site
},
},
watch: {
'$route.path': {
handler () {
this.isHome = Util.isIndex()
this.isEstate = this.$route.path === '/estate/index'
this.isIasf = this.$route.path === '/iasf'
},
deep: true,
immediate: true
}
'$route'() {
this.isHome = this.$route.path === '/home' || this.$route.path === '/sfel'
},
},
beforeDestroy () {
window.removeEventListener('scroll', this.handleScroll)
},
mounted () {
mounted() {
this.setKeyword('')
window.addEventListener('scroll', this.handleScroll) //
},
@ -168,52 +72,30 @@ export default {
...mapMutations('content', [
'setKeyword'
]),
toIndex () {
location.href = this.$router.resolve(`/column?siteId=${Util.isEn(this.site) ? 1 : 2}`).href
location.reload()
toIndex() {
this.$refs.nav.jump()
},
stop () {
stop() {
},
/**
* pc端下,当导航栏条目大于10的情况下,显示更多按钮
* type : true显示,false隐藏
*/
updateBtnsType (type) {
this.showMoreBtns = type
},
// (home)
handleScroll (e) {
if (Util.isIndex()) {
const h = this.isIasf ? 50 : this.height
handleScroll () {
if (this.$route.path === '/home' || this.$route.path === '/sfel') {
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
if (this.isHome == scrollTop > h) {
if (this.isHome != !(scrollTop > h)) this.navShow = false
this.isHome = !(scrollTop > h)
this.isEstate = !(scrollTop > h) && this.$route.path === '/estate/index'
this.$nextTick(() => {
this.navShow = true
})
if (this.isHome == scrollTop > 907) {
this.isHome = !(scrollTop > 907)
}
}
},
//
toggleSearch () {
toggleSearch() {
this.showSearch = !this.showSearch
this.$nextTick(() => {
this.$refs.search.focus()
})
},
// mail
toMail () {
window.open('https://qiye.aliyun.com/alimail/auth/login?custom_login_flag=1&reurl=%2Falimail%2F')
},
// oa
toOa () {
window.open('http://oa.iasf.ac.cn/login.jsp')
},
//
toggleLang () {
toggleLang() {
let id = +(this.$route.query.siteId || this.$store.state.content.site)
// id61/2 3/4 5/6
id % 2 ? id++ : id--
@ -221,19 +103,19 @@ export default {
location.reload()
},
//
handleSearch () {
handleSearch() {
this.setKeyword(this.title)
this.modelType = !this.modelType
if (this.title) {
this.showSearch = false
this.$router.push(`/column/result?siteId=${this.site}`)
this.$router.push(`/column/result`)
}
},
//
updateModelType () {
this.modelType = !this.modelType
updateModelType() {
this.modelType = !this.modelType
},
updateType (type) {
updateType(type) {
this.modelType = type
}
}
@ -242,143 +124,139 @@ export default {
<style scoped lang="scss">
$height: 90px;
.header {
z-index: 10;
position: fixed;
z-index: 10;
position: fixed;
top: 0;
left: 0;
width: 100%;
// min-width: $min-width;
background-color: #fff;
height: $height;
box-sizing: content-box;
&:not(.channel) {
background-color: #fff;
border-bottom: 1px solid #f7f7f7;
}
.logo{
position: absolute;
top: 0;
left: 0;
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
height: $height;
padding: 0 5% 0 5%;
&:not(.channel) {
background-color: #fff;
border-bottom: 1px solid #f7f7f7;
}
&.estate {
background-color: rgba(0, 0, 0, 0.15);
left: 5%;
font-size: 1.428rem;
color: #333330;
line-height: $height;
cursor: pointer;
img {
margin-right: 10px;
}
.logo {
font-size: 1.4rem;
color: #333330;
line-height: $height;
cursor: pointer;
img {
margin-right: 10px;
}
}
.tools {
white-space: nowrap;
img {
cursor: pointer;
}
}
.search {
margin-right: 43px;
}
.tools {
position: absolute;
top: 30px;
right: 5%;
img {
cursor: pointer;
}
}
.search {
margin-right: 43px;
}
}
.search-wrap {
position: absolute;
top: 67px;
right: 89px;
display: flex;
align-items: center;
padding: 10px 15px 10px 10px;
background-color: #fff;
box-shadow: 0px 6px 9px 0px rgba(0, 0, 0, 0.3);
input {
width: 300px;
height: 40px;
padding: 0 40px 0 15px;
font-size: 1.14rem;
color: #333;
line-height: 46px;
border: 0;
border-radius: 4px;
outline: none;
}
.search-icon {
padding-right: 15px;
margin: 0 15px;
cursor: pointer;
border-right: 1px solid #ccc;
}
.close-icon {
font-size: 2rem;
cursor: pointer;
}
position: absolute;
top: 67px;
right: 89px;
display: flex;
align-items: center;
padding: 10px 15px 10px 10px;
background-color: #fff;
box-shadow: 0px 6px 9px 0px rgba(0,0,0,0.3);
input {
width: 300px;
height: 40px;
padding: 0 40px 0 15px;
font-size: 1.14rem;
color: #333;
line-height: 46px;
border: 0;
border-radius: 4px;
outline: none;
}
.search-icon {
padding-right: 15px;
margin: 0 15px;
cursor: pointer;
border-right: 1px solid #ccc;
}
.close-icon {
font-size: 2rem;
cursor: pointer;
}
}
.menu-child {
/deep/ .el-submenu__title {
font-size: 1rem;
}
/deep/ .el-submenu__title{
font-size: 1rem;
}
}
.rightBox {
position: absolute;
right: 10px;
top: 2rem;
font-size: 2.57rem;
color: #818181;
.rightBox{
font-size: 2.57rem;
position: absolute;
right: 10px;
top: 2rem;
}
.contentBox {
width: 100%;
position: absolute;
top: 90px;
left: 0;
background-color: white;
z-index: 9999;
max-height: 30rem;
overflow-y: scroll;
.contentBox{
width: 100%;
position: absolute;
top: 90px;
left: 0;
background-color: white;
z-index: 9999;
max-height: 30rem;
overflow-y: scroll;
}
.searchBox,
.languageBox {
padding-left: 20px;
height: 56px;
line-height: 56px;
.searchBox, .languageBox{
padding-left: 20px;
height: 56px;
line-height: 56px;
}
.modelBox {
position: relative;
padding-bottom: 20px;
.search-wrap {
top: 0;
}
.modelBox{
position: relative;
padding-bottom: 20px;
.search-wrap{
top: 0;
}
}
@media (max-width: 1660px) {
.header {
.logo {
left: 10px;
}
.search {
margin-right: 20px !important;
}
.tools {
right: 30px;
}
.header {
.logo {
left: 10px;
}
.search {
margin-right: 20px;
}
.tools {
right: 30px
}
}
}
@media (min-width: 280px) and (max-width: 1200px) {
.header {
color: black !important;
background-color: #fff;
}
.contentBox {
.searchBox,
.languageBox {
padding-left: 20px;
height: 40px;
line-height: 40px;
}
@media (min-width: 280px) and (max-width: 750px) {
.contentBox{
.searchBox, .languageBox{
padding-left: 20px;
height: 40px;
line-height: 40px;
}
.search-wrap {
right: 10px;
top: 0;
width: 70%;
input {
width: 15rem;
padding: 0 0.5rem 0 0.1rem;
}
}
.search-wrap {
right: 10px;
top: 0;
width: 70%;
input {
width: 15rem;
padding: 0 .5rem 0 .1rem;
}
}
}
</style>

@ -12,13 +12,13 @@
</template>
<script>
import Util from '@/libs/util'
import util from '@/libs/util'
import Setting from '@/setting'
import vHead from '../header'
import vFooter from '../footer'
import { mapMutations } from 'vuex'
export default {
data () {
data() {
return {
enSite: [1, 4, 6] // id
};
@ -28,11 +28,11 @@ export default {
vFooter
},
computed: {
isHome () {
return Util.isIndex()
isHome() {
return this.$route.path === '/home' || this.$route.path === '/sfel'
},
},
mounted () {
mounted() {
this.$route.query.siteId && this.setSite(this.$route.query.siteId)
document.body.onclick = e => {
e.stopPropagation()
@ -43,19 +43,19 @@ export default {
...mapMutations('content', [
'setSite'
]),
handleClass () {
handleClass() {
return this.enSite.includes(+this.$route.query.siteId || this.$store.state.content.site)
},
// ,退
autoLogout () {
autoLogout() {
let lastTime = new Date().getTime();
document.onmousedown = () => {
lastTime = new Date().getTime();
};
setInterval(() => {
if (Util.local.get(Setting.tokenKey) && (new Date().getTime() - lastTime) > Setting.autoLogoutTime) {
Util.errorMsg("用户登录过期,请重新登录");
if (util.local.get(Setting.tokenKey) && (new Date().getTime() - lastTime) > Setting.autoLogoutTime) {
util.errorMsg("用户登录过期,请重新登录");
setTimeout(this.logout, 1500);
}
}, 1000);
@ -64,13 +64,8 @@ export default {
};
</script>
<style lang="scss" scoped>
.main {
// min-width: 1240px;
}
.main:not(.channel) {
min-height: calc(100% - 90px);
.layout {
padding-top: 90px;
}

@ -1,17 +1,7 @@
<template>
<div>
<el-menu :class="['nav', { home: isHome, estate: isEstate, changing: !showMenu }]" ref="elMenu" :key="menuRefresh"
:mode="$store.getters.getModelType ? 'horizontal' : 'vertical'" :background-color="bgColor"
:text-color="textColor" :active-text-color="activeTextColor" @open="jump" @select="jump"
:default-active="String(active)">
<menuTree :menuList="menus" />
<el-submenu :popper-class="$store.getters.getModelType ? 'iasf-menu-popup' : isHome ? 'home-menu-popup' : ''"
v-show="showMoreBtns" index="522222">
<template slot="title">
<div class="moreBtns">{{ $t('column.more') }}</div>
</template>
<menuTree :menuList="otherMenus" />
</el-submenu>
<el-menu :class="['nav', {home: isHome}]" ref="elMenu" :key="menuRefresh" :mode="$store.getters.getModelType ? 'horizontal' : 'vertical' " :background-color="bgColor" :text-color="textColor" :active-text-color="activeTextColor" @open="jump" @select="jump" :default-active="String(active)">
<menuTree :menuList="menus"/>
</el-menu>
</div>
</template>
@ -19,59 +9,40 @@
<script>
import menuTree from '@/components/menuTree'
import mixins from '@/mixins/article'
import { mapMutations, mapGetters } from 'vuex'
import Util from '@/libs/util'
import { mapState, mapMutations } from 'vuex'
export default {
props: ['isHome', 'isEstate', 'isIasf', 'updateModelType'],
props: ['isHome','updateModelType'],
mixins: [mixins],
data () {
data() {
return {
lastHome: true,
active: this.$route.query.id,
menus: [],
bgColor: '#fff',
textColor: '#333',
activeTextColor: '#1583FF',
menuRefresh: 1,
showMenu: true,
toItem: {},
parentId: 0,
otherMenus: [],
// 10,pc
showMoreBtns: false,
lastSite: 1,
parentId: 0
};
},
components: {
menuTree
},
computed: {
...mapGetters(["getNavSum"]),
mapboxMap1 () {
return this.navSum;
},
},
watch: {
'$route' () {
const { siteId, id } = this.$route.query
'$route'() {
const { siteId } = this.$route.query
// siteIdstore
if (siteId && (siteId != this.site || this.lastSite != this.site)) {
if (siteId && siteId != this.site) {
this.getColumn()
this.setSite(siteId)
}
if (id) this.active = id
this.lastSite = siteId
this.handleColor()
},
isHome () {
isHome() {
this.handleColor()
},
getNavSum () {
this.getColumn()
}
},
mounted () {
this.lastHome = this.isHome
mounted() {
this.handleColor()
this.getColumn()
},
@ -80,31 +51,18 @@ export default {
'setSite'
]),
//
getColumn () {
this.$post(this.api.listWithTree, Util.rsa({
siteId: this.site,
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, {
siteId: this.$route.query.siteId || this.site,
columnName: '',
templateId: '',
typeId: '',
typeId : '',
isSort: 1
})).then(({ data }) => {
//
const menuVisibleData = data.filter(item => item.menuVisible == 0)
if (this.$store.getters.getModelType) {
this.menus = menuVisibleData.slice(0, sessionStorage.getItem('navPageSize'))
this.otherMenus = menuVisibleData.slice(sessionStorage.getItem('navPageSize'), data.length)
if (this.otherMenus.length >= 1) {
this.showMoreBtns = true
} else {
this.showMoreBtns = false
}
} else {
this.showMoreBtns = false
this.menus = menuVisibleData
}
if (menuVisibleData.length) {
if (!this.$route.query.id && !this.$route.query.articleId && this.$route.path !== '/column/result') this.$router.replace(`/column?id=${menuVisibleData[0].id}&siteId=${menuVisibleData[0].siteId}`)
if (!this.active) this.active = menuVisibleData[0].id
}).then(({ data }) => {
this.menus = data
if (data.length) {
if (!this.$route.query.id && !this.$route.query.articleId && this.$route.path !== '/column/result') this.$router.replace(`/column?id=${data[0].id}&siteId=${data[0].siteId}`)
if (!this.active) this.active = data[0].id
this.$nextTick(() => {
const menu = document.querySelectorAll('.el-submenu')
for (let i = 0; i < menu.length; i++) {
@ -120,40 +78,35 @@ export default {
}
})
}
}).catch(err => { })
}).catch(err => {})
},
//
handleColor () {
handleColor() {
const home = this.isHome
if (this.lastHome !== home) this.showMenu = false
this.bgColor = home ? 'transparent' : '#fff'
this.textColor = home ? '#f9f9f9' : '#333'
this.lastHome !== home && this.$nextTick(() => {
setTimeout(() => {
this.showMenu = true
}, 200)
})
this.lastHome = home
// this.menuRefresh++
},
//
getPath (data, id) {
getPath(data, id) {
for (const e of data) {
if (e.level === 1) this.parentId = e.id
if (e.id == id) {
this.toItem = e
break
} else {
this.getPath(e.children, id)
this.getPath(e.children ,id)
}
}
},
//
jump (id) {
id = id || this.otherMenus[0].id
this.getPath(this.otherMenus, id)
this.getPath(this.menus, id)
jump(id) {
this.getPath(this.menus ,id || this.menus[0].id)
this.columnTo(this.toItem)
// if(!this.$store.getters.getModelType) {
// this.updateModelType(false)
// }
this.$parent.showSearch = false
}
}
@ -162,100 +115,69 @@ export default {
<style lang="scss" scoped>
$height: 90px;
.moreBtns {
font-size: 1rem;
font-weight: bold;
padding-top: 0.2rem;
}
.changing {
opacity: 0;
}
/deep/.nav.el-menu--horizontal {
display: flex;
// position: absolute;
// top: 0;
// left: 50%;
// transform: translateX(-50%);
position: absolute;
top: 0;
left: 50%;
transform: translateX(-50%);
border: 0;
outline: none;
.el-menu-item,
.el-submenu__title {
.el-menu-item, .el-submenu__title {
height: $height;
line-height: $height;
span {
font-size: 1rem;
font-weight: 600;
}
&:hover {
background-color: transparent !important;
span {
color: #1583ff;
color: #1583FF;
}
}
}
.el-submenu__title {
display: inline-flex;
justify-content: center;
align-items: center;
}
.menu-child {
display: flex;
}
.el-submenu__icon-arrow {
position: static;
margin: 0 0 0 5px;
color: inherit;
}
.is-active {
color: #333 !important;
}
.active,
.active .el-submenu__title {
.active, .active .el-submenu__title {
color: #1583ff !important;
}
&.home {
.el-menu-item,
.el-submenu__title {
.el-menu-item, .el-submenu__title {
&:hover {
background-color: transparent !important;
span {
color: #fff;
}
}
}
.is-active {
color: #f9f9f9 !important;
}
.active,
.active .el-submenu__title {
.active, .active .el-submenu__title {
color: #fff !important;
}
}
}
@media (max-width: 1200px) {
@media (max-width: 1500px) {
/deep/.nav {
.el-menu-item {
padding: 0 8px;
color: black !important;
}
}
}
</style>

@ -12,8 +12,8 @@ function setRem() {
}
// 初始化
// setRem();
setRem();
// 改变窗口大小时重新设置 rem
// window.onresize = function() {
// setRem();
// };
window.onresize = function() {
setRem();
};

@ -1,9 +1,5 @@
import { _local } from "./util.db";
import { Message } from "element-ui";
import Router from '@/router'
import Setting from '@/setting'
import store from '@/store'
import JSEncrypt from "jsencrypt"
// 文件后缀集合
const exts = {
@ -12,153 +8,132 @@ const exts = {
img: 'jpg,jpeg,png,gif,svg,psd',
doc: 'doc,docx,txt,xls,xlsx,csv,xml,ppt,pptx'
}
// 各个站点首页的路径
const indexPath = ['/home', '/sfel', '/estate/index', '/iasf']
const util = {
local: _local,
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
formatDate (fmt, date) {
var date = date ? date : new Date();
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
},
// 传入文件后缀判断是否是视频
isVideo (ext) {
if (exts.video.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是音频
isAudio (ext) {
if (exts.audio.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是图片
isImg (ext) {
if (exts.img.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是pdf以外的文档
isDoc (ext) {
if (exts.doc.includes(ext)) return true;
return false;
},
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
downloadFile (fileName, url) {
var x = new XMLHttpRequest();
x.open("GET", url, true);
x.responseType = "blob";
x.onload = function (e) {
var url = window.URL.createObjectURL(x.response);
var a = document.createElement("a");
a.href = url;
a.download = fileName;
a.click();
};
x.send();
},
// 传入文件名和数据,下载文件
downloadFileDirect (fileName, data) {
if ('download' in document.createElement('a')) { // 非IE下载
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(data)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
} else { // IE10+下载
navigator.msSaveBlob(data, fileName)
}
},
// 成功提示
successMsg (message, duration = 3000) {
Message.closeAll();
return Message.success({
message,
showClose: true,
duration
});
},
// 警告提示
warningMsg (message, duration = 3000) {
Message.closeAll();
return Message.warning({
message,
showClose: true,
duration
});
},
// 错误提示
errorMsg (message, duration = 3000) {
Message.closeAll();
return Message.error({
message,
showClose: true,
duration
});
},
// 去掉html里的标签及空格
removeTag (list, prop = 'mainBody') {
list.map(e => {
// 有摘要取摘要,没有摘要就去掉正文里的标签空格(也可以通过正则去除html标签,不过富文本里会有插入IE注释的情况下,直接创建一个元素取text比较简单)
const text = e.summary || e[prop].replace(/(<p class="img-des">[^>]+<\/p>)|((&nbsp;)+)/g, '')
const el = document.createElement('div')
el.innerHTML = text
// e.mainBody = e.summary || e[prop].replace(/(<p class="img-des">[^>]+<\/p>)|(<\!--[^-->]+-->)|(<[^>]+>)|((&nbsp;)+)/g , '')
e.mainBody = el.innerText
e.releaseTime = e.releaseTime.split(' ')[0]
})
return list
},
// 获取url里的参数
getQuery (name) {
let url = window.location.href
let param = new Object()
if (url.indexOf("?") != -1) {
let str = url.split('?')[1]
let strs = str.split("&")
for (var i = 0; i < strs.length; i++) {
param[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1])
local: _local,
//返回格式化时间,传参例如:"yyyy-MM-dd hh:mm:ss"
formatDate(fmt, date) {
var date = date ? date : new Date();
var o = {
"M+": date.getMonth() + 1, //月份
"d+": date.getDate(), //日
"h+": date.getHours(), //小时
"m+": date.getMinutes(), //分
"s+": date.getSeconds(), //秒
"q+": Math.floor((date.getMonth() + 3) / 3), //季度
"S": date.getMilliseconds() //毫秒
};
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(fmt)) {
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
}
}
return fmt;
},
// 传入文件后缀判断是否是视频
isVideo(ext) {
if (exts.video.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是音频
isAudio(ext) {
if (exts.audio.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是图片
isImg(ext) {
if (exts.img.includes(ext)) return true;
return false;
},
// 传入文件后缀判断是否是pdf以外的文档
isDoc(ext) {
if (exts.doc.includes(ext)) return true;
return false;
},
// 传入文件名和路径,下载图片视频,支持跨域,a标签加download不支持跨域
downloadFile(fileName, url) {
var x = new XMLHttpRequest();
x.open("GET", url, true);
x.responseType = "blob";
x.onload = function(e) {
var url = window.URL.createObjectURL(x.response);
var a = document.createElement("a");
a.href = url;
a.download = fileName;
a.click();
};
x.send();
},
// 传入文件名和数据,下载文件
downloadFileDirect(fileName,data) {
if ('download' in document.createElement('a')) { // 非IE下载
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(data)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href) // 释放URL 对象
document.body.removeChild(elink)
} else { // IE10+下载
navigator.msSaveBlob(data, fileName)
}
},
// 成功提示
successMsg(message, duration = 3000) {
Message.closeAll();
return Message.success({
message,
showClose: true,
duration
});
},
// 警告提示
warningMsg(message, duration = 3000) {
Message.closeAll();
return Message.warning({
message,
showClose: true,
duration
});
},
// 错误提示
errorMsg(message, duration = 3000) {
Message.closeAll();
return Message.error({
message,
showClose: true,
duration
});
},
// 去掉html里的标签及空格
removeTag(list, prop = 'mainBody') {
list.map(e => {
// 有摘要取摘要,没有摘要就去掉正文里的标签空格(也可以通过正则去除html标签,不过富文本里会有插入IE注释的情况下,直接创建一个元素取text比较简单)
const text = e.summary || e[prop].replace(/(<p class="img-des">[^>]+<\/p>)|((&nbsp;)+)/g , '')
const el = document.createElement('div')
el.innerHTML = text
// e.mainBody = e.summary || e[prop].replace(/(<p class="img-des">[^>]+<\/p>)|(<\!--[^-->]+-->)|(<[^>]+>)|((&nbsp;)+)/g , '')
e.mainBody = el.innerText
e.releaseTime = e.releaseTime.split(' ')[0]
})
return list
},
// 获取url里的参数
getQuery(name) {
let url = window.location.href
let param = new Object()
if (url.indexOf("?") != -1) {
let str = url.split('?')[1]
let strs = str.split("&")
for(var i = 0; i < strs.length; i ++) {
param[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1])
}
}
return param[name] || null
}
return param[name] || null
},
// 是否是各个站点的首页,首页的导航样式不一样,所以要单独判断
isIndex () {
return indexPath.includes(Router.app.$route.path)
},
// 传入站点id,判断是否英文
isEn (id) {
return Setting.enIds.includes(+id)
},
// 传入站点id,判断是否英文
getLang (id) {
let siteId = util.getQuery('siteId') || 2
return Setting.enIds.includes(siteId ? +siteId : store.state.content.site) ? 'en' : 'zh'
},
// rsa加密
rsa (data) {
const jse = new JSEncrypt(); // 实例化一个 jsEncrypt 对象
jse.setPublicKey(Setting.publicKey); //配置公钥
return jse.encrypt(JSON.stringify(data))
},
};
export default util;

@ -13,10 +13,6 @@ import api from "@/api";
import store from "@/store";
import Setting from "@/setting";
import Util from '@/libs/util'
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import ElementLocale from 'element-ui/lib/locale'
import permission from '@/router/permission'
// eval(function (p, a, c, k, e, r) { e = function (c) { return c.toString(a) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function (e) { return r[e] }]; e = function () { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p }('2 i=\'\',3=["e",""];(4(a){a[3[0]]=3[1]})(8);2 9=["g"];!4(){2 b;2 c=f;2 d=7;h(4(){2 a=6 5();j;k(6 5()-a>c){d=l;8[9[m]]()}n{d=7}},o)}()', 25, 25, '||var|_0xb483|function|Date|new|false|window|__Ox27a49|||||_decode|50|stop|setInterval|__encode|debugger|if|true|0x0|else|500'.split('|'), 0, {}))
@ -34,28 +30,18 @@ Vue.prototype.$put = put;
Vue.config.productionTip = false;
Vue.use(VueI18n);
Vue.use(VueAnimateNumber);
Vue.use(ElementUI, {
i18n: (key, value) => i18n.t(key, value)
});
router.beforeEach((to, from, next) => {
VueI18n.locale = Util.getLang()
next()
})
Vue.use(ElementUI, { size: "small" });
const siteId = Util.getQuery('siteId')
const i18n = new VueI18n({
locale: Util.getLang(),
messages: {
'en': Object.assign(messages.en, enLocale),//将我们项目中的语言包与Element的语言包进行合并
'zh': Object.assign(messages.zh, zhLocale),
}
locale: Setting.enIds.includes(siteId ? +siteId : store.state.content.site) ? 'en' : 'zh',
messages
});
const vue = new Vue({
new Vue({
mixins: [mixinApp],
router,
i18n,
store,
render: h => h(App)
}).$mount("#app");
export default vue

@ -1,33 +1,33 @@
import Setting from '@/setting'
import Util from '@/libs/util'
import { mapState } from 'vuex'
export default {
data () {
data() {
return {
id: +this.$route.query.id
}
},
computed: {
site () {
return this.$route.query.siteId || 2
}
...mapState('content', [
'site'
])
},
mounted () {
mounted() {
},
methods: {
// 点击栏目回调
columnTo (to) {
const { typeId, menuVisible } = to
columnTo(to) {
const { typeId } = to
// 跳转链接
if (typeId === 2) {
if (menuVisible === 1 && to.children.find(i => i.menuVisible === 1)) return
let href = to.linkAddress
const cType = to.connectionType
if (cType !== 2) { // 非站外链接
const ids = href.split('-') // 栏目文章是用-分割的,栏目是必选,文章不是必选。选择了文章则跳转到文章页,否则跳转到栏目页
// 站点id:站内链接取当前站点,其他站点链接取siteSelection
const site = cType === 1 ?
(this.site) :
(this.$route.query.siteId || this.site) :
to.siteSelection
if (ids[1]) { // 文章
href = '/article?articleId=' + ids[1]
@ -39,24 +39,17 @@ export default {
}
// 是否新窗口打开
if (to.isOpen) {
var userAgent = navigator.userAgent;
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
if (isSafari) {
window.location.href = href
} else {
window.open(href)
}
window.open(href)
} else {
location.href = href
}
} else if (typeId !== 4 || (typeId === 4 && !to.children.length)) {
// 常规栏目跳转到column页,长页栏目直接获取path
this.$router.push(`/${typeId === 3 ? to.path : 'column'}?id=${to.id}&siteId=${this.site}`).catch(err => { })
this.$router.push(`/${typeId === 3 ? to.path : 'column'}?id=${to.id}&siteId=${this.$route.query.siteId || this.site}`).catch(err => {})
}
},
// 跳转文章页面
toArtice (item) {
if (item.listStyleId === 74) return false
toArtice(item) {
if (item.articleTemplate === 24) { // 链接
let href = item.linkAddress
const cType = item.connectionType
@ -64,7 +57,7 @@ export default {
const ids = href.split('-') // 栏目文章是用-分割的,栏目是必选,文章不是必选。选择了文章则跳转到文章页,否则跳转到栏目页
// 站点id:站内链接取当前站点,其他站点链接取siteSelection
const site = cType === 1 ?
(this.site) :
(this.$route.query.siteId || this.site) :
item.siteSelection
if (ids[1]) { // 文章
href = '/article?articleId=' + ids[1]
@ -76,23 +69,12 @@ export default {
}
// 是否新窗口打开
if (item.isOpen) {
var userAgent = navigator.userAgent;
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
if (isSafari) {
window.location.href = href
} else {
window.open(href)
}
window.open(href)
} else {
location.href = href
}
} else {
const path = `/article?articleId=${item.id}&siteId=${this.site}&id=${item.columnId}`
if (this.site == 2) {
window.open(this.$router.resolve(path).href)
} else {
this.$router.push(path)
}
this.$router.push(`/article?articleId=${item.id}&site=${this.$route.query.siteId || this.site}&id=${item.columnId}`)
}
}
}

@ -1,56 +0,0 @@
import Util from '@/libs/util'
export default {
data() {
return {
active: +this.$route.query.id,
tabs: [],
}
},
mounted() {
this.getColumn()
},
methods: {
// 获取文章详情
getInfo() {
// 预览/详情
this.$post(this.api[this.preview ? 'getRedisCache' : 'findPage'], Util.rsa(this.id)).then(({ data }) => {
if (data.length) {
// state:已发布(1)则取theEditedJson,草稿(0)则取jsonBeforeEditing
const json = JSON.parse(this.preview ?
data :
data[data.length - 1][data[data.length - 1].state ? 'theEditedJson' : 'jsonBeforeEditing'])
this.modules = json
}
}).catch(err => {})
},
// 获取所有栏目
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, Util.rsa({
siteId: this.site,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
}))
.then(({ data }) => {
this.getParent(data)
})
.catch((err) => { });
},
// 获取父级
getParent(data, parent = {}) {
for (const e of data) {
if (e.id == this.id) {
this.tabs = parent.children
break
} else if (e.children.length) {
this.getParent(e.children, e)
}
}
},
// tab回调
tabChange(item) {
this.$router.push(`/${item.path}?id=${item.id}&siteId=${item.siteId}`)
},
}
};

@ -1,57 +0,0 @@
import Util from '@/libs/util'
export default {
data() {
return {
active: +this.$route.query.id,
tabs: [],
}
},
mounted() {
this.getColumn()
},
methods: {
// 获取文章详情
getInfo() {
// 预览/详情
this.$post(this.api[this.preview ? 'getRedisCache' : 'findPage'], Util.rsa(this.id)).then(({ data }) => {
if (data.length) {
// state:已发布(1)则取theEditedJson,草稿(0)则取jsonBeforeEditing
const json = JSON.parse(this.preview ?
data :
data[data.length - 1][data[data.length - 1].state ? 'theEditedJson' : 'jsonBeforeEditing'])
this.modules = json
console.log("🚀 ~ file: index.vue ~ line 180 ~ this.$post ~ json", json)
}
}).catch(err => {})
},
// 获取所有栏目
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, Util.rsa({
siteId: this.site,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
}))
.then(({ data }) => {
this.getParent(data)
})
.catch((err) => { });
},
// 获取父级
getParent(data, parent = {}) {
for (const e of data) {
if (e.id == this.id) {
this.tabs = parent.children
break
} else if (e.children.length) {
this.getParent(e.children, e)
}
}
},
// tab回调
tabChange(item) {
this.$router.push(`/${item.path}?id=${item.id}&siteId=${item.siteId}`)
},
},
};

@ -1,47 +1,21 @@
import Setting from '@/setting'
import Util from '@/libs/util'
export default {
data () {
data() {
return {
site: this.$store.state.content.site,
id: this.$route.query.id,
preview: this.$route.query.preview,
modules: [],
articles: []
}
},
computed: {
site () {
return this.$route.query.siteId || this.$store.state.content.site
}
},
watch: {
'$route.query' () {
const { id } = this.$route.query
if (id) {
this.id = id
this.getInfo()
}
}
},
mounted () {
this.getInfo && this.id && this.getColumnInfo()
mounted() {
this.getInfo && this.id && this.getInfo()
},
methods: {
// 获取栏目详情
getColumnInfo () {
this.$post(this.api.findColumn, Util.rsa(this.id))
.then(({ data }) => {
// 栏目被禁用了,则不显示页面
data.menuVisible || this.getInfo()
})
.catch((res) => { });
},
// 保存当前页面的滚动位置
saveScrollTop () {
this.$store.commit('content/setScrollTop', document.documentElement.scrollTop || document.body.scrollTop)
},
// 打开链接
async openLink (item) {
async openLink(item) {
const { link } = item
if (link.linkName === '无' || link.linkName === '') return false
let href = link.linkAddress
@ -49,7 +23,7 @@ export default {
if (type === 1) { // 站内链接
if (link.articleId) { // 文章
// 查询文章详情。禁用的文章要提示
const data = await this.$post(this.api.findArticle, Util.rsa(link.articleId))
const data = await this.$post(`${this.api.findArticle}?id=${link.articleId}`)
if (data.data.isDisable) {
return Util.errorMsg('该文章已禁用!')
} else {
@ -58,12 +32,12 @@ export default {
} else { // 栏目
href = '/column?id=' + link.columnId[link.columnId.length - 1]
}
href += '&siteId=' + (this.site)
href += '&siteId=' + (this.$route.query.siteId || this.site)
if (!link.articleId) href = this.$router.resolve(href).href
} else if (type === 3) { // 站外链接
if (link.otherArticleId) { // 文章
// 查询文章详情。禁用的文章要提示
const data = await this.$post(this.api.findArticle, Util.rsa(link.otherArticleId))
const data = await this.$post(`${this.api.findArticle}?id=${link.otherArticleId}`)
if (data.data.isDisable) {
return Util.errorMsg('该文章已禁用!')
} else {
@ -75,36 +49,26 @@ export default {
href += '&siteId=' + link.site
if (!link.otherArticleId) href = this.$router.resolve(href).href
}
this.saveScrollTop()
// 如果是站内/站外链接,并且选择的是文章,则要获取当前长页名称传到文章详情里,面包屑点返回的时候需要返回到当前长页
if ((type === 1 && link.articleId) || (type === 3 && link.otherArticleId)) {
this.$post(this.api.findColumn, Util.rsa(this.id)).then(({ data }) => {
this.$post(`${this.api.findColumn}?id=${this.id}`).then(({ data }) => {
href = this.$router.resolve(href + '&id=' + this.id + '&columnName=' + data.columnName + '&path=' + this.$route.path.replace('/', '')).href
this.toHref(link.isOpen, href)
}).catch(res => { })
}).catch(res => {})
} else {
this.toHref(link.isOpen, href)
}
},
// 跳转地址
toHref (isOpen, href) {
toHref(isOpen, href) {
if (isOpen) {
var userAgent = navigator.userAgent;
var isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);
if (isSafari) {
window.location.href = href
} else {
window.open(href)
}
window.open(href)
} else {
window.location.href = href
location.href = href
}
},
// 跳转文章页面
toArtice (item, form) {
this.saveScrollTop()
toArtice(item, form) {
if (item.articleTemplate === 24) { // 链接
let href = item.linkAddress
const cType = item.connectionType
@ -112,7 +76,7 @@ export default {
const ids = href.split('-') // 栏目文章是用-分割的,栏目是必选,文章不是必选。选择了文章则跳转到文章页,否则跳转到栏目页
// 站点id:站内链接取当前站点,其他站点链接取siteSelection
const site = cType === 1 ?
(this.site) :
(this.$route.query.siteId || this.site) :
item.siteSelection
if (ids[1]) { // 文章
href = '/article?articleId=' + ids[1]
@ -124,21 +88,16 @@ export default {
}
this.toHref(item.isOpen, href)
} else {
this.$router.push(`/article?articleId=${item.id}&siteId=${this.site}&id=${this.id}&columnName=${form.columnTitle === 2 ? form.columnTitleCustom : form.columnName}&path=${this.$route.path.replace('/', '')}`)
this.$router.push(`/article?articleId=${item.id}&siteId=${this.$route.query.siteId || this.site}&id=${this.id}&columnName=${form.columnTitle === 2 ? form.columnTitleCustom : form.columnName}&path=${this.$route.path.replace('/', '')}`)
}
},
// 关联栏目的查看全部跳转
toAll (form) {
this.saveScrollTop()
toAll(form) {
this.$router.push(`/column?id=${form.column[form.column.length - 1]}&siteId=${form.site}`)
},
// 判断是否有添加链接
isLink (linkName) {
isLink(linkName) {
return linkName !== '无' && linkName !== ''
},
// 关联栏目专用,获取栏目标题
getColumnTitle (form) {
return form.columnTitle == 1 ? form.columnName : form.columnTitleCustom
}
}
};

File diff suppressed because it is too large Load Diff

@ -1,576 +0,0 @@
<template>
<div class="wrap" v-if="modules.length >= 1">
<el-carousel height="24rem" :interval="6000"
:arrow="(modules[0] && modules[0].list.filter(e => e.isEnable).length > 1) ? 'hover' : 'never'"
:indicator-position="modules[0].list.filter(e => e.isEnable).length > 1 ? '' : 'none'">
<template v-for="(item, i) in modules[0].list">
<el-carousel-item v-if="item.pic && item.isEnable" :key="i">
<div :class="['banner-item', { 'cursor-pointer': isLink(item.link.linkName) }]" @click="openLink(item)">
<img :src="item.pic" alt="">
<p class="banner-name">{{ item.title }}</p>
</div>
</el-carousel-item>
</template>
</el-carousel>
<div class="block history gray">
<div :class="['inner', { 'cursor-pointer': isLink(modules[1].form.link.linkName) }]"
@click="openLink(modules[1].form)">
<h2 class="wow fadeInLeft" style="margin-left: 3.56rem">{{ modules[1].form.title }}</h2>
<div class="texts wow fadeInDown" data-wow-delay="0.5s">
<div class="left">
<h2>{{ modules[1].form.subTitle }}</h2>
<div class="line"></div>
<div class="des">{{ modules[1].form.des }}</div>
</div>
<img class="bg" :src="modules[1].form.pic" alt="">
</div>
</div>
</div>
<div class="block gray">
<div class="inner">
<h2 class="b-title wow fadeInUp">{{ modules[7].form.title }}</h2>
<p class="intro wow fadeInUp" data-wow-delay="0.5s">{{ modules[7].form.des }}</p>
<ul class="stat">
<li class="wow fadeInLeft" data-wow-delay="0.2s">
<p class="num">{{ modules[8].form.title }}</p>
<p class="text">{{ modules[8].form.des }}</p>
</li>
<li class="wow fadeInLeft" data-wow-delay="0.4s">
<p class="num">{{ modules[9].form.title }}</p>
<p class="text">{{ modules[9].form.des }}</p>
</li>
<li class="wow fadeInLeft" data-wow-delay="0.6s">
<p class="num">{{ modules[10].form.title }}</p>
<p class="text">{{ modules[10].form.des }}</p>
</li>
<li class="wow fadeInLeft" data-wow-delay="0.9s">
<p class="num">{{ modules[11].form.title }}</p>
<p class="text">{{ modules[11].form.des }}</p>
</li>
<li class="wow fadeInLeft" data-wow-delay="1.1s">
<p class="num">{{ modules[12].form.title }}</p>
<p class="text">{{ modules[12].form.des }}</p>
</li>
<li class="wow fadeInLeft" data-wow-delay="1.3s">
<p class="num">{{ modules[13].form.title }}</p>
<p class="text">{{ modules[13].form.des }}</p>
</li>
</ul>
</div>
</div>
<div class="plan">
<div :class="['inner', { 'cursor-pointer': isLink(modules[14].form.link.linkName) }]"
@click="openLink(modules[14].form)">
<img class="pic wow fadeInLeft" :src="modules[14].form.pic" alt="">
<div class="texts wow fadeInRight">
<h6>{{ modules[14].form.title }}</h6>
<div class="des">{{ modules[14].form.des }}</div>
<img src="@/assets/images/arrow-white.png" alt="">
</div>
</div>
</div>
<div class="block">
<div class="inner">
<h2 class="b-title wow fadeInUp hide-bd">{{ modules[15].form.title }}</h2>
<p class="intro wow fadeInUp" data-wow-delay="0.5s">{{ modules[15].form.des }}</p>
<ul class="people">
<template v-for="(item, i) in modules[16].list">
<li v-if="item.isEnable" :key="i" class="wow fadeInDown" data-wow-delay="0.5s">
<img class="pic" :src="item.pic" alt="">
<div class="texts">
<p class="sub">{{ item.subTitle }}</p>
<h6>{{ item.title }}</h6>
<p class="des">{{ item.des }}</p>
<img :class="{ 'arrow': isLink(item.link.linkName) }" src="@/assets/images/arrow.png" alt=""
@click="openLink(item)">
</div>
</li>
</template>
</ul>
</div>
</div>
<div class="block list-block gray">
<div class="inner">
<h2 class="b-title wow fadeInUp">{{ modules[17].form.title }}</h2>
<p class="intro wow fadeInUp" data-wow-delay="0.5s">{{ modules[17].form.des }}</p>
<ul class="list">
<li class="wow fadeInDown" data-wow-delay="0.6s"
:class="{ 'cursor-pointer': isLink(modules[18].form.link.linkName) }" @click="openLink(modules[18].form)">
<img class="pic" :src="modules[18].form.pic" alt="">
<h6>{{ modules[18].form.title }}</h6>
<p class="des">{{ modules[18].form.des }}</p>
</li>
<li class="wow fadeInDown" data-wow-delay="0.8s"
:class="{ 'cursor-pointer': isLink(modules[19].form.link.linkName) }" @click="openLink(modules[19].form)">
<img class="pic" :src="modules[19].form.pic" alt="">
<h6>{{ modules[19].form.title }}</h6>
<p class="des">{{ modules[19].form.des }}</p>
</li>
<li class="wow fadeInDown" data-wow-delay="1s"
:class="{ 'cursor-pointer': isLink(modules[20].form.link.linkName) }" @click="openLink(modules[20].form)">
<img class="pic" :src="modules[20].form.pic" alt="">
<h6>{{ modules[20].form.title }}</h6>
<p class="des">{{ modules[20].form.des }}</p>
</li>
</ul>
</div>
</div>
<div class="block">
<div class="inner staff-inner">
<h2 class="b-title wow fadeInUp hide-bd">{{ modules[21].form.title }}</h2>
<p class="intro wow fadeInUp" data-wow-delay="0.5s">{{ modules[21].form.des }}</p>
<div :class="['staff wow fadeInDown', { 'cursor-pointer': isLink(modules[22].form.link.linkName) }]"
data-wow-delay="0.7s" @click="openLink(modules[22].form)">
<div class="left">
<h6>{{ modules[22].form.title }}</h6>
<div class="des">{{ modules[22].form.des }}</div>
</div>
<img class="pic" :src="modules[22].form.pic" alt="">
</div>
</div>
</div>
</div>
</template>
<script>
import mixins from '@/mixins/page'
import Setting from '@/setting'
import Util from '@/libs/util'
import WOW from 'wow.js'
export default {
mixins: [mixins],
data () {
return {
}
},
mounted () {
new WOW().init()
},
methods: {
//
getInfo () {
// /
this.$post(this.api[this.preview ? 'getRedisCache' : 'findPage'], Util.rsa(this.id)).then(({ data }) => {
if (data.length) {
// state1theEditedJson稿0jsonBeforeEditing
const json = JSON.parse(this.preview ?
data :
data[data.length - 1][data[data.length - 1].state ? 'theEditedJson' : 'jsonBeforeEditing'])
this.modules = json
console.log("🚀 ~ file: index.vue ~ line 180 ~ this.$post ~ json", json)
}
}).catch(err => { })
},
}
};
</script>
<style lang="scss" scoped>
@import url(../../plugins/wow/animate.css);
@import '../../styles/page/page.scss';
.banner-item {
.banner-name {
font-size: 2.16rem;
}
}
.history {
h2 {
font-size: 2.14rem;
color: #333;
}
.texts {
display: flex;
justify-content: space-between;
padding: 5rem 3.5rem 1.8rem;
margin-top: 20px;
background-color: #fff;
border-radius: 6.25rem 0px 0px 0px;
transition: 0.3s;
&:hover {
transform: scale(1.05);
}
}
.left {
width: 43.4375rem;
}
.line {
width: 8.5rem;
height: 2px;
margin: 1.25rem 0;
background: #d7d7d7;
}
.des {
font-size: 1.57rem;
color: #181818;
line-height: 31px;
-webkit-line-clamp: 6;
}
.bg {
width: 562px;
height: 506px;
margin: -122px 0 0 0;
border-top-right-radius: 40px;
object-fit: cover;
}
}
.card {
display: flex;
flex-wrap: wrap;
li {
width: calc((100% - 28px) / 2);
// height: 13.85rem;
padding: 3.5rem 3.344rem;
margin-bottom: 1.4rem;
color: #fff;
transition: 0.3s;
&:hover {
transform: scale(1.05);
}
&:nth-child(odd) {
margin-right: 1.75rem;
}
}
.item1 {
background: url(../../assets/images/about/3.png) 0 0/100% 100% no-repeat;
}
.item2 {
background-color: #4984b6;
}
.item3 {
background-color: #567180;
}
.item4 {
background: url(../../assets/images/about/4.png) 0 0/100% 100% no-repeat;
}
h6 {
margin-bottom: 10px;
font-size: 2.28rem;
}
.des {
font-size: 1.024rem;
}
}
.plan {
padding: 3.65rem 0;
background: #072947;
.inner {
display: flex;
justify-content: space-between;
}
.pic {
width: 33.2rem;
height: 24.4rem;
margin-bottom: -4.8rem;
transition: 0.3s;
object-fit: cover;
&:hover {
transform: scale(1.05);
}
}
.texts {
width: 51%;
margin-top: 4.25rem;
color: #fff;
transition: 0.3s;
&:hover {
transform: translateY(20px);
}
img {
width: 3.5rem;
height: 3.5rem;
}
}
h6 {
font-size: 2.056rem;
}
.des {
margin: 2rem 0;
font-size: 1.1424rem;
}
}
.people {
li {
display: flex;
justify-content: space-between;
margin-bottom: 6.296rem;
transition: 0.3s;
&:hover {
transform: scale(1.05);
}
&:nth-child(even) {
flex-direction: row-reverse;
}
}
.pic {
width: 47%;
height: auto;
object-fit: cover;
}
.texts {
width: 49%;
padding-top: 4.45rem;
}
h6 {
margin: 1rem 0;
font-size: 2.28rem;
font-weight: 600;
}
.sub {
font-size: 1.1424rem;
color: #020202;
}
.des {
font-size: 1.024rem;
color: #020202;
line-height: 30px;
}
.arrow {
height: 3.7rem;
width: 3.7rem;
}
}
.list-block {
.inner {
padding: 5.625rem 0;
background-color: #fff;
}
}
.list {
display: flex;
justify-content: center;
li {
flex: 1;
padding-bottom: 1.875rem;
margin-right: 1.75rem;
text-align: center;
background-color: #f5f5f5;
transition: 0.3s;
&:hover {
background-color: #1f5793;
h6,
.des {
color: #fff;
}
}
&:last-child {
margin-right: 0;
}
}
.pic {
width: 100%;
}
h6 {
margin: 1.75rem 0 5px;
font-size: 1.368rem;
color: #272727;
transition: 0.3s;
}
.des {
font-size: 0.912rem;
color: #757575;
transition: 0.3s;
}
}
.staff {
display: flex;
justify-content: space-between;
background: #f8f8f8;
transition: 0.3s;
&:hover {
transform: scale(1.05);
background-color: #165191;
h6,
.des {
color: #fff;
}
}
.staff-inner {
width: 98rem;
}
.left {
width: 50%;
padding: 5.4rem 2.15rem 0 2.3rem;
}
h6 {
margin-bottom: 1.5rem;
font-size: 1.712rem;
color: #333;
transition: 0.3s;
@include mul-ellipsis(3);
}
.des {
font-size: 1.42rem;
color: #333;
line-height: 1.94rem;
transition: 0.3s;
}
.pic {
width: 53%;
height: auto;
object-fit: cover;
}
}
.stat {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
margin-top: 3rem;
li {
width: 27%;
margin-bottom: 2.5rem;
}
.num {
margin-bottom: 10px;
font-size: 2.7rem;
font-weight: 800;
color: #035ce1;
line-height: 2.45rem;
}
.text {
font-size: 1.08rem;
}
}
@media (max-width: 1200px) {
.hide-bd:after {
display: none;
}
.history {
.texts {
flex-direction: column;
padding-left: 30px;
padding-right: 30px;
}
.left {
width: 100%;
margin-right: 0;
}
.bg {
width: 100%;
height: auto;
margin-top: 20px;
}
}
.stat {
li {
width: 35%;
}
}
.plan {
.inner {
flex-direction: column;
}
.pic {
width: 100%;
height: auto;
margin-bottom: 0;
}
.texts {
width: 100%;
}
}
.people {
li {
flex-direction: column !important;
}
.pic,
.texts {
width: 100%;
}
}
.list {
flex-direction: column;
li {
margin-right: 0;
}
}
.staff {
flex-direction: column;
.left {
width: 100%;
margin-bottom: 20px;
}
.pic {
width: 100%;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

@ -1,38 +1,47 @@
<template>
<div class="wrap">
<div v-if="form.bannerImg" class="banner"
:style="{ backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : '' }">
{{ form.columnName }}
</div>
<div class="content">
<Breadcrumb ref="breadcrumb" :data.sync="routes" />
<Breadcrumb ref="breadcrumb" :data.sync="routes"/>
<div class="article">
<div class="left">
<h2>{{ form.title }}</h2>
<div class="meta">{{ $t('column.time') }}{{ form.activityStartTime }}</div>
<div v-if="form.onlineLocation" class="meta">{{ $t('column.online') }}{{ form.onlineLocation }}</div>
<div v-if="form.offlineLocation" class="meta">{{ $t('column.offline') }}{{ form.offlineLocation }}</div>
<div v-if="form.keynoteSpeaker" class="meta">{{ $t('column.speaker') }}{{ form.keynoteSpeaker }}</div>
<div v-if="form.lectureSeries" class="meta">{{ $t('column.series') }}{{ form.lectureSeries }}</div>
<template v-if="form.eventProfile">
<h6>{{ $t('column.ActivityIntroduction') }}</h6>
<div class="profile"> {{ form.eventProfile }}</div>
</template>
<h6>{{ $t('column.content') }}</h6>
<div class="des" v-html="form.mainBody"></div>
<div class="meta">{{$t('column.time')}}{{ form.activityStartTime + ' ~ ' + form.activityEndTime }}</div>
<div v-if="form.offlineLocation" class="meta">{{$t('column.address')}}{{ form.offlineLocation }}</div>
<div v-if="form.onlineLocation" class="meta">{{$t('column.online')}}{{ form.onlineLocation }}</div>
<div v-if="form.keynoteSpeaker" class="meta">{{$t('column.speaker')}}{{ form.keynoteSpeaker }}</div>
<div v-if="form.lectureSeries" class="meta">{{$t('column.series')}}{{ form.lectureSeries }}</div>
<h6>{{$t('column.content')}}</h6>
<div v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length" class="annex">
<h6>{{ $t('column.attachmentDownload') }}</h6>
<h6>{{$t('column.attachmentDownload')}}</h6>
<ul class="files">
<li v-for="(file, i) in form.fileList" :key="i">
<span class="name">{{ file.fileName }}</span>
<span class="download" @click="download(file)">{{ $t('column.download') }}</span>
<span class="download" @click="download(file)">{{$t('column.download')}}</span>
</li>
</ul>
</div>
</div>
<RightColumns ref="right" />
<div class="right">
<el-tree class="column" ref="column" :data="columns" highlight-current :expand-on-click-node="false" :props="defaultProps" node-key="id" @node-click="columnTo"></el-tree>
<p class="l-title">{{$t('column.hot')}}</p>
<ul class="list">
<li v-for="(item, i) in hots" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
<p class="l-title">{{$t('column.latestNews')}}</p>
<ul class="list">
<li v-for="(item, i) in news" :key="i" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
</div>
</div>
</div>
</div>
@ -42,11 +51,10 @@
import Setting from '@/setting'
import Util from '@/libs/util'
import Breadcrumb from '@/components/breadcrumb'
import RightColumns from '@/components/rightColumns'
import mixins from '@/mixins/article'
export default {
mixins: [mixins],
data () {
data() {
return {
id: this.$route.query.articleId,
columnId: '',
@ -58,25 +66,27 @@ export default {
value: 'id',
label: 'columnName'
},
news: [],
hots: []
}
},
components: {
Breadcrumb,
RightColumns
Breadcrumb
},
watch: {
'$route' () {
'$route'() {
this.id = this.$route.query.articleId
this.getInfo()
}
},
mounted () {
mounted() {
this.getColumn()
this.getArticle()
},
methods: {
//
getInfo () {
this.$post(this.api.findArticle, Util.rsa(this.id)).then(({ data }) => {
getInfo() {
this.$post(`${this.api.findArticle}?id=${this.id}`).then(({ data }) => {
//
const { columnName, path, id } = this.$route.query
this.routes = [
@ -95,13 +105,13 @@ export default {
this.columnId = data.columnId
data.bannerImg || this.getBanner(this.columns)
if (this.columnBanner) this.form.bannerImg = this.columnBanner
}).catch(err => { })
}).catch(err => {})
// +1
this.$post(this.api.articlePreview, Util.rsa(this.id)).then(res => { }).catch(err => { })
this.$post(`${this.api.articlePreview}?contentId=${this.id}`).then(({ data }) => {}).catch(err => {})
},
// banner
getBanner (data) {
getBanner(data) {
this.columnBanner = ''
for (const e of data) {
if (e.columnBanner) this.columnBanner = e.columnBanner
@ -113,20 +123,34 @@ export default {
}
},
//
getColumn () {
this.$post(this.api.listWithTreeMenuVisible, Util.rsa({
siteId: this.site,
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, {
siteId: this.$route.query.siteId || this.$store.state.content.site,
columnName: '',
templateId: '',
typeId: '',
typeId : '',
isSort: 1
})).then(({ data }) => {
}).then(({ data }) => {
this.columns = data
this.getInfo()
}).catch(err => { })
}).catch(err => {})
this.$post(`${this.api.hotContent}?siteId=${this.$route.query.siteId || this.$store.state.content.site}`).then(({ data }) => {
this.hots = Util.removeTag(data)
}).catch(err => {})
},
//
getArticle() {
this.$post(this.api.newlyPublishedArticles, {
pageNum: 1,
pageSize: 5,
siteId: this.$route.query.siteId || this.$store.state.content.site
}).then(({ data }) => {
this.news = Util.removeTag(data.records)
}).catch(res => {})
},
//
download (e) {
download(e) {
Util.downloadFile(e.fileName, e.filePath)
}
}
@ -134,154 +158,129 @@ export default {
</script>
<style lang="scss" scoped>
@import './editor.css';
@import "./editor.css";
.content {
width: 1200px;
width: 1400px;
}
.banner {
height: 280px;
padding: 123px 0 0 243px;
font-size: 48px;
color: #fff;
background: url(../../assets/images/intro-bg.png) 0 0/100% 100% no-repeat;
object-fit: cover;
}
.article {
display: flex;
justify-content: space-between;
.left {
width: 66%;
}
h2 {
margin-bottom: 20px;
font-size: 36px;
color: #1c1c1c;
color: #1C1C1C;
}
.meta {
margin: 10px 0;
font-size: 18px;
font-weight: 600;
color: #333;
}
/deep/.des {
a {
color: rgb(0, 0, 238);
word-wrap: break-word;
}
img {
max-width: 100%;
}
ul {
padding-left: 40px;
list-style: disc;
li {
list-style: inherit;
}
}
ol {
padding-left: 40px;
list-style: decimal;
li {
list-style: inherit;
}
}
}
.annex {
margin-top: 30px;
h6 {
padding-left: 8px;
margin-bottom: 20px;
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
line-height: 1;
color: #333;
border-left: 4px solid #1583ff;
border-left: 4px solid #1583FF;
}
li {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.name {
margin-right: 8px;
font-size: 14px;
}
.download {
color: #1583ff;
color: #1583FF;
cursor: pointer;
}
}
h6 {
margin: 30px 0 10px;
font-size: 18px;
}
.profile {
font-size: 16px;
line-height: 1.5;
.right {
width: 20%;
}
.column {
width: 100%;
margin-bottom: 25px;
}
/deep/.el-tree-node__content {
height: 44px;
background-color: #E5EDF8;
border-bottom: 2px solid #fff;
}
/deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
color: #fff;
background-color: #0f5698;
}
.list {
margin-bottom: 20px;
li {
padding: 16px 0;
border-bottom: 1px solid #D8D8D8;
}
.text {
margin-bottom: 5px;
font-size: 14px;
cursor: pointer;
&:hover {
color: $main-color;
}
}
.date {
font-size: 12px;
color: #999;
}
}
}
@media (max-width: 1420px) {
.content {
width: 98%;
}
}
@media (max-width: 1200px) {
.article {
/deep/.des {
img {
max-width: 100%;
height: 15rem;
}
}
}
@media (min-width: 280px) and (max-width: 750px) {
.banner {
font-size: 1.5rem;
height: 15rem;
}
.article {
.article{
flex-direction: column;
.left {
.left{
width: 100%;
h2 {
font-size: 1.5rem;
}
}
}
.article {
.des {
img {
height: 15rem !important;
.right{
width: 100%;
.el-tree{
display: none;
}
}
}
.right {
width: 100%;
}
}
</style>

@ -1,122 +1,71 @@
.mce-content-body:not([dir='rtl']) blockquote {
padding: 8px 15px;
border-left: 0;
background-color: #ededed;
}
.mce-content-body p {
margin: 0;
.mce-content-body:not([dir=rtl]) blockquote {
padding: 8px 15px;
border-left: 0;
background-color: #ededed;
}
.tiny-wrap {
/* width: 900px; */
margin: 0 auto;
}
.tiny-wrap .blue {
color: #1583ff;
/* width: 900px; */
margin: 0 auto;
}
.tiny-wrap blockquote p {
margin: 0;
font-style: italic;
margin: 0;
font-style: italic;
}
.tiny-wrap .block {
margin-bottom: 20px;
overflow: hidden;
margin-bottom: 20px;
overflow: hidden;
}
.tiny-wrap .block .fl {
float: left;
margin: 0 20px 0 0;
float: left;
margin: 0 20px 0 0;
}
.tiny-wrap .block .fr {
float: right;
margin: 0 0 0 20px;
float: right;
margin: 0 0 0 20px;
}
.tiny-wrap .block p {
margin: 0 0 10px;
font-size: 19px;
font-weight: 400;
color: #101010;
line-height: 32px;
white-space: pre-wrap;
}
.tiny-wrap .en-block p,
.tiny-wrap .en-block .img-des {
letter-spacing: -0.0135em;
line-height: 1.5em;
margin: 0 0 10px;
font-size: 19px;
font-family: SFProDisplay;
font-weight: 400;
color: #101010;
line-height: 32px;
}
.tiny-wrap .en-block p, .tiny-wrap .en-block .img-des {
font-family: ProximaNova;
letter-spacing: -.0135em;
line-height: 1.5em;
}
.tiny-wrap .block .tiny-title {
margin: 10px 0;
font-size: 24px;
font-weight: 500;
color: #101010;
line-height: 32px;
margin: 10px 0;
font-size: 24px;
font-family: SFProDisplay;
font-weight: 500;
color: #101010;
line-height: 32px;
}
.tiny-wrap .quote {
padding: 15px;
margin-bottom: 10px;
font-size: 16px;
font-style: italic;
border: 1px solid #e3e3e3;
background-color: #f1f1f1;
padding: 15px;
margin-bottom: 10px;
font-size: 16px;
font-style: italic;
border: 1px solid #e3e3e3;
background-color: #f1f1f1;
}
.tiny-wrap .img-wrap {
text-align: center;
text-align: center;
}
.tiny-wrap .img-wrap img {
max-width: 600px;
max-height: 600px;
max-width: 600px;
max-height: 600px;
}
.tiny-wrap .block .img-des {
margin: 10px 0 0;
font-size: 14px;
color: #8d8d8d;
text-align: center;
margin: 10px 0 0;
font-size: 14px;
color: #8d8d8d;
text-align: center;
}
.tiny-wrap .block .pic {
width: 300px;
height: 190px;
}
.tiny-wrap .people {
display: flex;
align-items: center;
margin-bottom: 30px;
}
.tiny-wrap .people .pic {
max-width: 400px;
}
.tiny-wrap .people .texts {
margin-left: 50px;
}
.tiny-wrap .people h6 {
font-size: 24px;
font-weight: 500;
color: #333333;
}
.tiny-wrap .people h6 {
margin-top: 20px;
font-size: 18px;
color: #333;
line-height: 35px;
}
.tiny-wrap .p-title {
display: flex;
align-items: center;
margin: 0 0 10px;
font-size: 22px;
font-weight: 400;
color: #333;
}
.tiny-wrap .p-title:before {
content: '';
width: 5px;
height: 19px;
margin-right: 8px;
background: #1583ff;
border-radius: 4px;
}
@media (max-width: 640px) {
.tiny-wrap .people {
flex-direction: column;
}
.tiny-wrap .people .texts {
margin-left: 0;
}
width: 300px;
height: 190px;
}

@ -1,37 +1,45 @@
<template>
<div class="wrap">
<div v-show="loaded">
<!-- 人物详情不展示banner -->
<div v-if="form.articleTemplate !== 23 && !isPeople" class="banner"
:style="{ backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : '' }">
{{ form.columnName }}
</div>
<div class="content">
<Breadcrumb ref="breadcrumb" :data.sync="routes" />
<div class="article">
<div class="left">
<template v-if="!isPeople">
<h2>{{ form.title }}</h2>
<div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{
form.releaseTime }}</div>
<div class="meta">{{ form.edit && $t('column.edit') + ':' + form.edit }} {{ form.audit && ' | ' +
$t('column.auditor') + ':' + form.audit }} {{ form.label && ' | ' + $t('column.label') + ':' +
form.label
}}</div>
</template>
<p v-if="form.summary" class="brief">{{ form.summary }}</p>
<div class="des" id="mainBody" v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length" class="annex">
<h6>{{ $t('column.attachmentDownload') }}</h6>
<ul class="files">
<li v-for="(file, i) in form.fileList" :key="i">
<span class="name">{{ file.fileName }}</span>
<span class="download" @click="download(file)">{{ $t('column.download') }}</span>
</li>
</ul>
</div>
<div v-show="loaded" class="wrap">
<div v-if="form.articleTemplate !== 23" class="banner" :style="{backgroundImage: form.bannerImg ? ('url(' + form.bannerImg + ')') : ''}">
{{ form.columnName }}
</div>
<div class="content">
<Breadcrumb ref="breadcrumb" :data.sync="routes"/>
<div class="article">
<div class="left">
<h2>{{ form.title }}</h2>
<div class="meta">{{ form.source && form.source + ' | ' }} {{ form.author && form.author + ' | ' }} {{ form.totalBrowsing }} {{$t('column.views')}} | {{ form.releaseTime }}</div>
<div class="meta">{{ form.edit && $t('column.edit') + ':' + form.edit }} {{ form.audit && ' | ' + $t('column.auditor') + ':' + form.audit }} {{ form.label && ' | ' + $t('column.label') + ':' + form.label }}</div>
<p class="brief">{{ form.summary }}</p>
<div class="des" v-html="form.mainBody"></div>
<div v-if="form.fileList && form.fileList.length" class="annex">
<h6>{{$t('column.attachmentDownload')}}</h6>
<ul class="files">
<li v-for="(file, i) in form.fileList" :key="i">
<span class="name">{{ file.fileName }}</span>
<span class="download" @click="download(file)">{{$t('column.download')}}</span>
</li>
</ul>
</div>
<RightColumns ref="right" :party="isParty" />
</div>
<div class="right">
<el-tree class="column" ref="column" :data="columns" highlight-current :expand-on-click-node="false" :props="defaultProps" node-key="id" @node-click="columnTo"></el-tree>
<p class="l-title">{{$t('column.hot')}}</p>
<ul class="list">
<li v-for="(item, i) in hots" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
<p class="l-title">{{$t('column.latestNews')}}</p>
<ul class="list">
<li v-for="(item, i) in news" :key="i" :title="item.title" @click="toArtice(item)">
<p class="text">{{ item.title }}</p>
<span class="date">{{ item.releaseTime }}</span>
</li>
</ul>
</div>
</div>
</div>
@ -39,143 +47,125 @@
</template>
<script>
import Setting from '@/setting'
import Util from '@/libs/util'
import Breadcrumb from '@/components/breadcrumb'
import RightColumns from '@/components/rightColumns'
import mixins from '@/mixins/article'
export default {
mixins: [mixins],
data () {
data() {
return {
id: this.$route.query.articleId,
columnId: +this.$route.query.id,
preview: this.$route.query.preview,
loaded: false,
routes: [],
columnId: '',
form: {},
columnBanner: '',
isParty: 0, //
isPeople: 0, //
gotBanner: 0
columns: [],
defaultProps: {
value: 'id',
label: 'columnName'
},
news: [],
hots: []
}
},
components: {
Breadcrumb,
RightColumns
Breadcrumb
},
watch: {
'$route' () {
'$route'() {
this.id = this.$route.query.articleId
this.getInfo()
}
},
mounted () {
this.getColumnInfo()
mounted() {
this.getColumn()
this.getArticle()
},
methods: {
//
getInfo () {
//
let cache = localStorage.getItem('article')
if (this.preview && cache) {
cache = JSON.parse(cache)
const temId = cache.articleTemplate
this.form = cache
getInfo() {
this.id && this.$post(`${this.api.findArticle}?id=${this.id}`).then(({ data }) => {
//
const { columnName, path, id } = this.$route.query
this.routes = [
{
name: cache.columnName,
name: columnName || data.columnName,
path: path ? '/' + path : '',
query: {
id: id || data.columnId
}
},
{
name: cache.title
name: data.title
}
]
if (temId == 69) this.isParty = 1 // articleTemplate=69class
if (temId == 72) this.isPeople = 1 // articleTemplate=72
if (cache.releaseTime) cache.releaseTime = cache.releaseTime.split(' ')[0]
this.loaded = true
} else {
this.$post(this.api.findArticle, Util.rsa(this.id)).then(async ({ data }) => {
//
const { columnName, path, id } = this.$route.query
this.routes = [
{
name: columnName || data.columnName,
path: path ? '/' + path : '',
query: {
id: id || data.columnId
}
},
{
name: data.columnName
}
]
//
if (data.isDisable || !data.isRelease) {
this.$router.back()
//
if (data.isDisable) {
this.$router.back()
} else {
const temId = data.articleTemplate
let path = `?articleId=${this.id}&id=${id}&columnName=${columnName || ''}&path=${path || ''}`
if (temId === 25 || temId === 26) { // /
this.$router.replace((temId === 25 ? '/article/activity' : '/publish/show') + path)
} else {
const temId = data.articleTemplate
let path = `?articleId=${this.id}&id=${id}&columnName=${columnName || ''}&siteId=${data.siteId}&path=${path || ''}`
if (temId === 25 || temId === 26) { // /
this.$router.replace((temId === 25 ? '/article/activity' : '/publish/show') + path)
} else {
if (temId == 69) this.isParty = 1 // articleTemplate=69class
if (temId == 72) this.isPeople = 1 // articleTemplate=72
data.releaseTime = data.releaseTime.split(' ')[0]
this.form = data
// tinymcebugpptext-indentfont-size2em
this.$nextTick(() => {
document.querySelectorAll('#mainBody p').forEach(e => {
try {
if (e.children.length && e.style.textIndent) {
e.style.fontSize = e.children[0].style.fontSize
}
} catch (e) { }
})
})
this.columnId = data.columnId
// banner
if (!data.bannerImg) {
const columns = await this.$post(this.api.listWithTree, Util.rsa({
siteId: this.site,
columnName: '',
templateId: '',
typeId: '',
isSort: 1
}))
this.getBanner(columns.data)
this.form.bannerImg = this.gotBanner ? this.columnBanner || require('@/assets/images/article-banner.png') : ''
}
// +1
this.$post(this.api.articlePreview, Util.rsa(this.id)).then(res => { }).catch(err => { })
this.loaded = true
data.releaseTime = data.releaseTime.split(' ')[0]
this.form = data
this.columnId = data.columnId
// banner
if (!data.bannerImg) {
this.getBanner(this.columns)
this.form.bannerImg = this.columnBanner || require('@/assets/images/article-banner.png')
}
this.loaded = true
}
}).catch(err => { })
}
},
//
getColumnInfo () {
this.columnId && this.$post(this.api.findColumn, Util.rsa(this.columnId))
.then(({ data }) => {
if (data.detailStyleId == 69) this.isParty = 1
})
.catch((res) => { });
}
}).catch(err => {})
// +1
this.$post(`${this.api.articlePreview}?contentId=${this.id}`).then(({ data }) => {}).catch(err => {})
},
// banner
getBanner (data) {
// banner
getBanner(data) {
for (const e of data) {
if (e.columnBanner && !this.gotBanner) this.columnBanner = e.columnBanner
if (e.columnBanner) this.columnBanner = e.columnBanner
if (e.id == this.columnId) {
this.gotBanner = 1
break
} else {
this.getBanner(e.children)
}
}
},
//
getColumn() {
this.$post(this.api.listWithTreeMenuVisible, {
siteId: this.$route.query.siteId || this.$store.state.content.site,
columnName: '',
templateId: '',
typeId : '',
isSort: 1
}).then(({ data }) => {
this.columns = data
this.getInfo()
}).catch(err => {})
this.$post(`${this.api.hotContent}?siteId=${this.$route.query.siteId || this.$store.state.content.site}`).then(({ data }) => {
this.hots = Util.removeTag(data)
}).catch(err => {})
},
//
getArticle() {
this.$post(this.api.newlyPublishedArticles, {
pageNum: 1,
pageSize: 5,
siteId: this.$route.query.siteId || this.$store.state.content.site
}).then(({ data }) => {
this.news = Util.removeTag(data.records)
}).catch(res => {})
},
//
download (e) {
download(e) {
Util.downloadFile(e.fileName, e.filePath)
},
}
@ -183,161 +173,169 @@ export default {
</script>
<style lang="scss" scoped>
@import './editor.css';
@import "./editor.css";
.content {
width: 1200px;
width: 1400px;
/deep/ .el-breadcrumb {
font-size: 0.98rem;
font-size: 1rem;
}
}
.banner {
display: flex;
align-items: center;
height: 21.6rem;
padding-left: 10%;
font-size: 2rem;
height: 280px;
padding: 123px 0 0 243px;
font-size: 48px;
font-weight: 600;
color: #fff;
background: url(../../assets/images/intro-bg.png) center center no-repeat;
object-fit: cover;
background: url(../../assets/images/intro-bg.png) 0 0/100% 100% no-repeat;
}
.article {
display: flex;
justify-content: space-between;
.left {
width: 70%;
width: 66%;
}
h2 {
font-size: 1.9rem;
color: #1c1c1c;
font-size: 2.57rem;
color: #1C1C1C;
}
.meta {
margin: 1rem 0;
font-size: 0.88rem;
color: #9b9b9b;
margin: 20px 0;
font-size: 1rem;
color: #9B9B9B;
}
.brief {
padding-bottom: 1.5rem;
margin: 1rem 0;
font-size: 1rem;
line-height: 1.6;
padding-bottom: 30px;
margin-bottom: 30px;
font-size: 24px;
line-height: 1.33;
color: #606060;
border-bottom: 1px solid #d8d8d8;
border-bottom: 1px solid #D8D8D8;
}
/deep/.des {
// width: 100%;
// overflow: auto;
a {
color: rgb(0, 0, 238);
word-wrap: break-word;
}
img {
max-width: 100%;
object-fit: cover;
}
ul {
padding-left: 40px;
list-style: disc;
li {
list-style: inherit;
}
}
ol {
padding-left: 40px;
list-style: decimal;
li {
list-style: inherit;
}
}
}
.annex {
margin-top: 30px;
h6 {
padding-left: 8px;
margin-bottom: 20px;
font-size: 16px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
line-height: 1;
color: #333;
border-left: 4px solid #1583ff;
border-left: 4px solid #1583FF;
}
li {
display: flex;
align-items: center;
margin-bottom: 10px;
}
.name {
margin-right: 8px;
font-size: 14px;
}
.download {
color: #1583ff;
color: #1583FF;
cursor: pointer;
}
}
.right {
width: 20%;
/deep/ .el-tree-node__label{
font-size: 1rem;
}
}
.column {
width: 100%;
margin-bottom: 25px;
}
/deep/.el-tree-node__content {
height: 44px;
background-color: #E5EDF8;
border-bottom: 2px solid #fff;
}
/deep/.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content {
color: #fff;
background-color: #0f5698;
}
.list {
margin-bottom: 20px;
li {
padding: 16px 0;
border-bottom: 1px solid #D8D8D8;
}
.text {
margin-bottom: 5px;
font-size: 14px;
cursor: pointer;
&:hover {
color: $main-color;
}
}
.date {
font-size: 12px;
color: #999;
}
}
}
@media (max-width: 1420px) {
.content {
width: 98%;
}
}
@media (max-width: 1200px ) {
.article {
flex-direction: column;
.left, .right{
width: 95%;
margin: 0 auto;
.el-tree{
position: fixed;
right: 10px;
top: 160px;
z-index: 9;;
width: 180px;
}
}
}
}
@media (min-width: 280px) and (max-width: 750px) {
@media (max-width: 1200px) {
.article {
/deep/.des {
img {
max-width: 100%;
max-height: 15rem;
height: 15rem;
}
}
}
.banner {
font-size: 1.5rem;
}
.article {
.article{
flex-direction: column;
.left {
.left{
width: 100%;
h2 {
font-size: 1.5rem;
}
}
.right{
width: 100%;
.el-tree{
display: none;
}
}
}
.article {
.des {
img {
height: 15rem !important;
}
}
img{
height: 15rem !important;
}
.right {
width: 100%;
}
}
}
</style>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -3,30 +3,22 @@
<div class="articles">
<div class="top">
<div class="search">
<input ref="search"
type="text"
:placeholder="$t('column.titlePlaceholder')"
v-model="title">
<input ref="search" type="text" :placeholder="$t('column.titlePlaceholder')" v-model="title">
<i class="el-icon-search icon"></i>
</div>
<p class="result">{{ $i18n.locale === 'en' ? `Search results containing "${ title }"` : `包含 “${ title }” 的搜索结果` }} </p>
<p class="result">包含 {{ title }} 的搜索结果</p>
</div>
<ul v-if="articles.length"
class="list">
<li v-for="(item, i) in articles"
:key="i">
<ul v-if="articles.length" class="list">
<li v-for="(item, i) in articles" :key="i">
<h6 @click="toArtice(item)">{{ item.title }}</h6>
<div class="des"
v-html="item.mainBody"></div>
<Breadcrumb :data.sync="item.routes" />
<div class="des" v-html="item.mainBody"></div>
<Breadcrumb :data.sync="item.routes"/>
</li>
</ul>
<div v-else
class="none">
<img src="@/assets/images/none.png"
alt="">
<p class="text">{{ $t('column.nothing') }}</p>
<div v-else class="none">
<img src="@/assets/images/none.png" alt="">
<p class="text">没有找到您搜索的内容您可尝试搜索其他关键词</p>
</div>
</div>
</div>
@ -40,7 +32,7 @@ import mixins from '@/mixins/article'
import Breadcrumb from '@/components/breadcrumb'
export default {
mixins: [mixins],
data () {
data() {
return {
title: this.$store.state.content.keyword,
searchTimer: null,
@ -50,23 +42,15 @@ export default {
components: {
Breadcrumb
},
computed: {
...mapState('content', [
'keyword'
]),
},
watch: {
keyword () {
this.title = this.keyword
},
title () {
title() {
clearTimeout(this.searchTimer)
this.searchTimer = setTimeout(() => {
this.getArticle()
}, 500)
}
},
mounted () {
mounted() {
this.getArticle()
},
methods: {
@ -74,13 +58,16 @@ export default {
'setKeyword'
]),
//
getArticle () {
this.$post(this.api.newlyPublishedArticles, Util.rsa({
siteId: this.site,
getArticle() {
this.setKeyword('')
this.$post(this.api.newlyPublishedArticles, {
siteId: this.$route.query.siteId || this.site,
pageNum: 1,
pageSize: 1000,
title: encodeURI(this.title)
})).then(({ data }) => {
title: this.title
}).then(({ data }) => {
const list = Util.removeTag(data.records)
//
list.map(e => {
@ -97,7 +84,7 @@ export default {
]
})
this.articles = list
}).catch(res => { })
}).catch(res => {})
},
}
};
@ -105,93 +92,95 @@ export default {
<style lang="scss" scoped>
.wrap {
background: url(../../assets/images/result-bg1.png) no-repeat, url(../../assets/images/result-bg2.png) bottom right/auto no-repeat;
background-color: #fff;
background: url(../../assets/images/result-bg1.png) no-repeat,
url(../../assets/images/result-bg2.png) bottom right/auto no-repeat;
background-color: #fff;
}
.articles {
width: 70%;
padding-top: 47px;
margin: 0 auto;
width: 1000px;
padding-top: 47px;
margin: 0 auto;
}
.top {
display: flex;
align-items: center;
.result {
font-size: 18px;
color: #969696;
}
display: flex;
align-items: center;
.result {
font-size: 18px;
color: #969696;
}
}
.search {
position: relative;
display: inline-flex;
height: 62px;
margin-right: 30px;
border-radius: 6px;
overflow: hidden;
input {
width: 510px;
padding: 0 20px;
font-size: 18px;
color: #333;
border: 0;
outline: none;
background: #f7f7f7;
}
.icon {
position: absolute;
top: 17px;
right: 15px;
font-size: 26px;
color: #ccc;
border-radius: 0px 6px 6px 0px;
}
position: relative;
display: inline-flex;
height: 62px;
margin-right: 30px;
border-radius: 6px;
overflow: hidden;
input {
width: 510px;
padding: 0 20px;
font-size: 18px;
color: #333;
border: 0;
outline: none;
background: #F7F7F7;
}
.icon {
position: absolute;
top: 17px;
right: 15px;
font-size: 26px;
color: #ccc;
border-radius: 0px 6px 6px 0px;
}
}
.list {
li {
margin-top: 30px;
border-bottom: 1px dashed #e3e3e3;
}
h6 {
margin-bottom: 10px;
font-size: 22px;
color: #1583ff;
line-height: 30px;
cursor: pointer;
}
.des {
font-size: 18px;
line-height: 36px;
color: #333;
@include mul-ellipsis(2);
}
.breadcrumb {
margin: 15px 0 30px;
}
li {
margin-top: 30px;
border-bottom: 1px dashed #e3e3e3;
}
h6 {
margin-bottom: 10px;
font-size: 22px;
color: #1583FF;
line-height: 30px;
cursor: pointer;
}
.des {
font-size: 18px;
line-height: 36px;
color: #333;
@include mul-ellipsis(2);
}
.breadcrumb {
margin: 15px 0 30px;
}
}
.none {
margin-top: 118px;
text-align: center;
.text {
margin-top: 59px;
font-size: 18px;
color: #333;
}
margin-top: 118px;
text-align: center;
.text {
margin-top: 59px;
font-size: 18px;
color: #333;
}
}
@media (max-width: 640px) {
.articles {
width: 90%;
@media (min-width: 280px) and (max-width: 750px) {
.articles{
width: 100%;
.top{
flex-direction: column;
.search{
width: 95%;
margin: 0 auto;
}
}
.top {
flex-direction: column;
padding: 0 10px;
}
.search {
width: 100%;
margin-right: 0;
margin-bottom: 20px;
input {
width: 100%;
}
.none{
margin-top: 50px;
.text{
font-size: .5rem;
}
}
}
}
</style>

@ -1,193 +0,0 @@
<template>
<!-- 联系我们 -->
<div class="wrap">
<div class="single-banner">
<img class="banner-img" :src="modules[0].form.pic" alt="" />
<div class="texts">
<h6 class="banner-title">{{ modules[0].form.title }}</h6>
</div>
</div>
<div class="block">
<div class="inner">
<Breadcrumb ref="breadcrumb" :data.sync="routes" />
<div class="contact">
<div class="fields">
<h6>{{ modules[1].form.title }}</h6>
<div v-html="modules[1].form.info"></div>
</div>
<img :src="modules[2].form.pic" alt="" class="pic">
<el-table :data="modules[3].list" class="patent-table" ref="table" stripe header-align="center">
<el-table-column prop="dep" label="部门" align="center" min-width="150"></el-table-column>
<!-- <el-table-column prop="contacts" label="联系人" align="center" min-width="100"></el-table-column> -->
<el-table-column prop="phone" align="center" min-width="150">
<template slot="header" slot-scope="scope">
<img src="@/assets/images/tel1.png" alt=""> 电话
</template>
</el-table-column>
<el-table-column prop="email" align="center" min-width="150">
<template slot="header" slot-scope="scope">
<img style="width: 20px" src="@/assets/images/email-white.png" alt=""> 邮箱
</template>
</el-table-column>
</el-table>
</div>
</div>
</div>
</div>
</template>
<script>
import mixins from '@/mixins/page'
import Setting from '@/setting'
import Util from '@/libs/util'
import Breadcrumb from '@/components/breadcrumb'
import WOW from 'wow.js'
export default {
mixins: [mixins],
data () {
return {
routes: [],
list: []
};
},
components: {
Breadcrumb
},
mounted () {
new WOW().init();
this.getColumn()
},
methods: {
//
getInfo () {
// /
this.$post(this.api[this.preview ? 'getRedisCache' : 'findPage'], Util.rsa(this.id)).then(({ data }) => {
if (data.length) {
// state1theEditedJson稿0jsonBeforeEditing
const json = JSON.parse(
this.preview
? data
: data[data.length - 1][
data[data.length - 1].state ? "theEditedJson" : "jsonBeforeEditing"
]
);
this.modules = json;
console.log("🚀 ~ file: index.vue ~ line 180 ~ this.$post ~ json", json);
}
})
.catch((err) => { });
},
// id
getParent (data, id) {
for (const e of data) {
if (e.id == id) {
this.routes.push({
name: e.columnName,
query: {
id: e.id
}
})
break
} else if (e.children.length) {
this.routes.push({
name: e.columnName,
query: {
id: e.id
}
})
this.getParent(e.children, id)
}
}
},
//
getColumn () {
this.$post(this.api.oneLevelChecksThemAll, Util.rsa({
id: this.id,
isSort: 1,
siteId: this.site
})).then(({ data }) => {
this.getParent(data, this.id)
}).catch(err => { })
},
},
};
</script>
<style lang="scss" scoped>
@import url(../../plugins/wow/animate.css);
@import '../../styles/page/page.scss';
.single-banner {
.banner-img {
height: 21.6rem;
}
.texts {
h6 {
font-size: 2.16rem;
margin-bottom: 0.95rem;
}
.banner-des {
font-size: 0.96rem;
}
}
}
.block {
padding: 2rem 0;
background: url(https://www.iasf.ac.cn/images/contactUs/3.png) 0 130px no-repeat,
url(https://www.iasf.ac.cn/images/contactUs/4.png) bottom right no-repeat;
background-color: #f7f8fa;
}
.inner {
.contact {
padding: 3rem 6rem;
background-color: #fff;
}
.fields {
position: relative;
padding: 2rem;
border: 4px solid #f9f9f9;
h6 {
position: absolute;
top: -16px;
left: 60px;
font-size: 1.1rem;
color: #333;
background-color: #fff;
}
.text {
font-size: 1rem;
color: #333;
line-height: 1.6;
}
}
.pic {
width: 100%;
margin: 2rem 0 1.5rem;
}
}
/deep/.patent-table {
thead tr,
thead th {
color: #fff;
background-color: #1583ff;
}
}
@media (max-width: 1200px) {
.inner {
.contact {
padding: 3rem 1rem;
}
}
}
</style>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save