ysyyhhh 1 year ago
parent
commit
deed9ebcd0

+ 11 - 1
babel.config.js

@@ -1,3 +1,13 @@
 module.exports = {
-  presets: ["@vue/app"],
+  // presets: ["@vue/app"],
+  presets: ["@vue/cli-plugin-babel/preset"],
+  plugins: [
+    [
+      "component",
+      {
+        libraryName: "element-ui",
+        styleLibraryName: "theme-chalk",
+      },
+    ],
+  ],
 };

File diff suppressed because it is too large
+ 2178 - 2630
package-lock.json


+ 6 - 10
package.json

@@ -9,30 +9,26 @@
   },
   "dependencies": {
     "axios": "^1.4.0",
-    "core-js": "^3.8.3",
     "echarts": "^4.8.0",
-    "element-ui": "^2.15.13",
+    "element-ui": "^2.15.14",
     "highlight.js": "^11.7.0",
     "jquery": "^3.7.0",
+    "mockjs": "^1.1.0",
     "vue": "^2.6.14",
     "vue-baidu-map": "^0.21.22",
     "vue-highlightjs": "^1.3.3"
   },
   "devDependencies": {
-    "@babel/core": "^7.12.16",
-    "@babel/eslint-parser": "^7.12.16",
+    "@babel/plugin-syntax-dynamic-import": "^7.8.3",
     "@types/node": "^18.16.2",
-    "@vue/cli-plugin-babel": "~5.0.0",
-    "@vue/cli-plugin-eslint": "~5.0.0",
     "@vue/cli-service": "~5.0.0",
     "ace-builds": "^1.18.0",
+    "compression-webpack-plugin": "^10.0.0",
     "eslint": "^7.32.0",
     "eslint-plugin-vue": "^8.0.3",
-    "file-loader": "^6.2.0",
-    "less": "^4.1.3",
-    "less-loader": "^11.1.0",
     "vue-router": "^3.5.3",
-    "vue-template-compiler": "^2.6.14"
+    "vue-template-compiler": "^2.6.14",
+    "webpack-bundle-analyzer": "^4.9.0"
   },
   "eslintConfig": {
     "root": true,

+ 78 - 81
public/index.html

@@ -1,94 +1,91 @@
 <!DOCTYPE html>
 <html lang="">
-  <head>
-    <meta charset="utf-8" />
-    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-    <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
-    <title><%= htmlWebpackPlugin.options.title %></title>
-    <!-- 引入样式 -->
-    <link
-      rel="stylesheet"
-      href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"
-    />
-    <!-- 引入组件库 -->
-    <script src="https://unpkg.com/element-ui/lib/index.js"></script>
-    <script
-      src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"
-      prefetch
-    ></script>
-  </head>
-  <body>
-    <noscript>
-      <strong
-        >We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work
+
+<head>
+  <meta charset="utf-8" />
+  <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+  <meta name="viewport" content="width=device-width,initial-scale=1.0" />
+  <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
+  <title>
+    <%= htmlWebpackPlugin.options.title %>
+  </title>
+  <!-- 引入样式 -->
+  <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css" />
+  <!-- 引入组件库 -->
+  <script src="https://unpkg.com/element-ui/lib/index.js"></script>
+  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" prefetch></script>
+</head>
+
+<body>
+  <noscript>
+    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> 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>
-  <script>
-    (function (designWidth, maxWidth) {
-      var doc = document,
-        win = window,
-        docEl = doc.documentElement,
-        remStyle = document.createElement("style"),
-        tid;
+        continue.</strong>
+  </noscript>
+  <div id="app"></div>
+
+</body>
+<script>
+  (function (designWidth, maxWidth) {
+    var doc = document,
+      win = window,
+      docEl = doc.documentElement,
+      remStyle = document.createElement("style"),
+      tid;
+
+    function refreshRem() {
+      var width = docEl.getBoundingClientRect().width; //屏幕宽度
+      maxWidth = maxWidth || 540; //设置最大宽度
+      width < 800 && (width = 800); //设置最小宽度
+      width > maxWidth && (width = maxWidth);
+      var rem = (width * 100) / designWidth; //屏幕宽度 / 设计稿宽度 * 100,若为电脑运行,此时rem=100
+      remStyle.innerHTML = "html{font-size:" + rem + "px;}"; //此时重新定义html根元素大小为1rem,即100px
+    }
 
-      function refreshRem() {
-        var width = docEl.getBoundingClientRect().width; //屏幕宽度
-        maxWidth = maxWidth || 540; //设置最大宽度
-        width < 800 && (width = 800); //设置最小宽度
-        width > maxWidth && (width = maxWidth);
-        var rem = (width * 100) / designWidth; //屏幕宽度 / 设计稿宽度 * 100,若为电脑运行,此时rem=100
-        remStyle.innerHTML = "html{font-size:" + rem + "px;}"; //此时重新定义html根元素大小为1rem,即100px
-      }
+    if (docEl.firstElementChild) {
+      docEl.firstElementChild.appendChild(remStyle);
+    } else {
+      var wrap = doc.createElement("div");
+      wrap.appendChild(remStyle);
+      doc.write(wrap.innerHTML);
+      wrap = null;
+    }
+    //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
+    refreshRem();
 
-      if (docEl.firstElementChild) {
-        docEl.firstElementChild.appendChild(remStyle);
-      } else {
-        var wrap = doc.createElement("div");
-        wrap.appendChild(remStyle);
-        doc.write(wrap.innerHTML);
-        wrap = null;
-      }
-      //要等 wiewport 设置好后才能执行 refreshRem,不然 refreshRem 会执行2次;
-      refreshRem();
+    win.addEventListener(
+      "resize",
+      function () {
+        clearTimeout(tid); //防止执行两次
+        tid = setTimeout(refreshRem, 300);
+      },
+      false
+    );
 
-      win.addEventListener(
-        "resize",
-        function () {
-          clearTimeout(tid); //防止执行两次
+    win.addEventListener(
+      "pageshow",
+      function (e) {
+        if (e.persisted) {
+          // 浏览器后退的时候重新计算
+          clearTimeout(tid);
           tid = setTimeout(refreshRem, 300);
-        },
-        false
-      );
+        }
+      },
+      false
+    );
 
-      win.addEventListener(
-        "pageshow",
+    if (doc.readyState === "complete") {
+      doc.body.style.fontSize = "16px";
+    } else {
+      doc.addEventListener(
+        "DOMContentLoaded",
         function (e) {
-          if (e.persisted) {
-            // 浏览器后退的时候重新计算
-            clearTimeout(tid);
-            tid = setTimeout(refreshRem, 300);
-          }
+          doc.body.style.fontSize = "16px";
         },
         false
       );
+    }
+  })(1920); //此处传入设计稿宽度及最大宽度
+</script>
 
-      if (doc.readyState === "complete") {
-        doc.body.style.fontSize = "16px";
-      } else {
-        doc.addEventListener(
-          "DOMContentLoaded",
-          function (e) {
-            doc.body.style.fontSize = "16px";
-          },
-          false
-        );
-      }
-    })(1920); //此处传入设计稿宽度及最大宽度
-  </script>
-</html>
+</html>

+ 2 - 1
src/App.vue

@@ -14,7 +14,8 @@ export default Vue.extend({
 
   data: () => ({
     //
-  })
+  }),
+
 });
 </script>
 <style>

+ 0 - 36
src/api/code.js

@@ -1,36 +0,0 @@
-import request from "../utils/request";
-
-export function codeListGet() {
-  return request({
-    url: `/xapi/code/select`,
-    method: "GET",
-    params: {
-      projectId: localStorage.getItem("pid"),
-    },
-  });
-}
-
-export function codeCreate(name, label, description, code) {
-  return request({
-    url: `/xapi/code/addCMessage`,
-    method: "POST",
-    data: {
-      name,
-      label,
-      description,
-      code,
-      projectId: localStorage.getItem("pid"),
-    },
-  });
-}
-
-export function codePredict(code, model) {
-  return request({
-    url: `/codePredict/api/code/defection`,
-    method: "POST",
-    data: {
-      code,
-      model,
-    },
-  });
-}

+ 20 - 0
src/api/department.js

@@ -0,0 +1,20 @@
+import request from "../utils/request";
+export function getFacultyList() {
+  return request({
+    url: `/faculty/allFaculty`,
+    method: "GET",
+  });
+}
+export function getFacultyById(id) {
+  return request({
+    url: `/faculty/getFacultyById/` + id,
+    method: "GET",
+  });
+}
+
+export function getLabAndDigitalByFacultyId(id) {
+  return request({
+    url: `/faculty/getLabAndDigitalByFacultyId/` + id,
+    method: "GET",
+  });
+}

+ 33 - 0
src/api/digital.js

@@ -0,0 +1,33 @@
+import request from "../utils/request";
+export function getDigitalTop(num) {
+  return request({
+    url: `/digital/getTopByActive/` + num,
+    method: "GET",
+  });
+}
+export function getDigitalByLabId(id) {
+  return request({
+    url: `/digital/allDigitalByLabId/` + id,
+    method: "GET",
+  });
+}
+
+export function getDigitalById(id) {
+  return request({
+    url: `/digital/getDigitalById/` + id,
+    method: "GET",
+  });
+}
+
+export function getDatasetByDigitalId(id) {
+  return request({
+    url: `/dataset/getById/` + id,
+    method: "GET",
+  });
+}
+export function getFilesByDigitalId(id) {
+  return request({
+    url: `/file/getFilesByDigitalId/` + id,
+    method: "GET",
+  });
+}

+ 0 - 43
src/api/file.js

@@ -1,43 +0,0 @@
-import request from "../utils/request";
-
-export function fileListGet(projectId, keyword) {
-  return request({
-    url: `/xapi/file/getFileList`,
-    method: "GET",
-    params: {
-      projectId,
-    },
-  });
-}
-
-export function fileUpload(fd) {
-  return request({
-    url: `/xapi/file/uploadFile`,
-    method: "POST",
-    data:fd
-    // data: {
-    //   file,
-    //   projectId: localStorage.getItem("pid"),
-    // },
-  });
-}
-
-export function fileUpdate(fd) {
-  return request({
-    url: `/xapi/file/updateFile`,
-    method: "POST",
-    data: fd
-  });
-}
-
-export function fileDownload(id) {
-  return request({
-    url: `/xapi/file/downloadFile`,
-    method: "GET",
-    params: {
-      id,
-      projectId:localStorage.getItem('pid'),
-    },
-    responseType:'blob'
-  });
-}

+ 7 - 0
src/api/news.js

@@ -0,0 +1,7 @@
+import request from "../utils/request";
+export function getNewsList() {
+    return request({
+        url: `/news/allNews`,
+        method: "GET"
+    });
+}

+ 0 - 23
src/api/project.js

@@ -1,23 +0,0 @@
-import request from "../utils/request";
-
-export function projectListGet(id, keyword) {
-  return request({
-    url: `/xapi/project/list`,
-    method: "GET",
-    params: {
-      id,
-      keyword,
-    },
-  });
-}
-
-export function projectCreate(name, description) {
-  return request({
-    url: `/xapi/project/create`,
-    method: "POST",
-    data: {
-      name,
-      description,
-    },
-  });
-}

+ 0 - 70
src/api/testCase.js

@@ -1,70 +0,0 @@
-import request from "../utils/request";
-
-export function caseListGet(casesetId) {
-  return request({
-    url: `/xapi/testcase/list`,
-    method: "GET",
-    params: {
-      casesetId,
-    },
-  });
-}
-
-export function caseSetListGet(keyword) {
-  return request({
-    url: `/xapi/caseset/list`,
-    method: "GET",
-    params: {
-      keyword,
-    },
-  });
-}
-
-// export function caseCreate(file) {
-//   return request({
-//     url: `/api/case/create`,
-//     method: "POST",
-//     data: {
-//       file,
-//     },
-//   });
-// }
-
-export function caseSetCreate(name, description) {
-  return request({
-    url: `/xapi/caseset/create`,
-    method: "POST",
-    data: {
-      name,
-      description,
-    },
-  });
-}
-
-export function casefileUpload(fd) {
-  return request({
-    url: `/xapi/testcase/upload`,
-    method: "POST",
-    data: fd,
-  });
-}
-
-// export function caseSetDetailGet(caseSetId) {
-//   return request({
-//     url: `/api/caseSet/detail`,
-//     method: "GET",
-//     params: {
-//       id,
-//     },
-//   });
-// }
-
-export function caseSort(casesetId) {
-  return request({
-    url: `/xapi/testcase/sort`,
-    method: "POST",
-    params: {
-      casesetId,
-    },
-  });
-}

+ 116 - 112
src/assets/dataset/data.js

@@ -1,113 +1,117 @@
 export const information = {
-    cite: "吴佩文, 2020-3-29, \"全球地表气温变化的数据\", http://hdl.handle.net/TEST/10353 南京大学 [发布者] V1 [Version]",
-    detail: [
-        {
-            title: "标题",
-            content: "全球地表气温变化的数据"
-        },
-        {
-            title: "课题全局ID",
-            content: "hdl:TEST/10353"
-        },
-        {
-            title: "作者",
-            content: "吴佩文 (南京大学)"
-        },
-        {
-            title: "生成者",
-            content: "吴佩文, 南京大学"
-        },
-        {
-            title: "生成日期",
-            content: "March 29, 2020"
-        },
-        {
-            title: "出版发布者/机构",
-            content: "南京大学, 南京大学"
-        }, {
-            title: "提交日期",
-            content: "March 29, 2020"
-        },
-        {
-            title: "出处",
-            content: "全球地表气温变化的数据 数据集"
-        }
-    ],
-    des: {
-            title: "描述",
-            content: "记录了1750年至2013年全球地表气温变化的数据(按月份记录)这些记录的气温数据来自记录地表温度最权威的三家机构:英国HadCrut、美国NASA和NOAA。\n"
-        },
-    intro: [
-        {
-            title: "描述日期",
-            content: "March 29, 2020"
-        }, {
-            title: "关键字",
-            content: "全球地表气温记录"
-        }, {
-            title: "主题分类",
-            content: "气候"
-        }, {
-            title: "覆盖的时间周期",
-            content: "1750 - 2013"
-        }, {
-            title: "地理覆盖面",
-            content: "全球"
-        }
-    ],
-    policy: "数据使用协议\n" +
-        "\n" +
-        "南京大学人文社科大数据平台使用者应当严格遵守南京大学人文社科大数据平台所制定的数据使用的各项规定,具体包括但不限于:\n" +
-        "\n" +
-        "    1 数据使用者需保证数据仅供本人使用,不得提供给任何第三方,亦不得以任何形式公布、发表所获之原始数据。\n" +
-        "\n" +
-        "    2 数据使用者不得将数据用于任何商业性或盈利性目的。如有此目的,需在申请数据使用权时告知数据提供方并获得其书面授权后方可使用。\n" +
-        "\n" +
-        "    3 数据使用者不得窜改数据、不得对数据进行恶意的歪曲性使用和分析,不得冒用调查元数据的名义提出伪造的数据分析结果。\n" +
-        "\n" +
-        "    4 数据使用者有义务保护和尊重数据库中所牵涉受访者的隐私,不可探究、公开、或散布可能确认受访者身份的信息。\n" +
-        "\n" +
-        "    5 本平台开放共享的数据是经数据提供方初次清理后的数据,但不能保证数据中没有任何错误(如逻辑错误、输入错误),若数据使用者在使用过程中发现错误,有义务向本平台及时反馈,以促进数据质量的改善。\n" +
-        "\n" +
-        "    6 用户在申请数据时,应填写真实资料,如用户资料发生变更,应及时更改相关资料。若提供的资料不齐全或不正确,数据平台有权拒绝提供服务。\n" +
-        "\n" +
-        "    7 本平台用户须遵守中华人民共和国计算机安全、互联网通讯的有关法律法规,用户不得利用数据中心网站传输、出版、上载、登载或流通任何非法、有害、恐吓、骚扰、侵权、毁谤、淫秽、中伤、违反他人隐私或宣传权、违反他人知识产权、或者任何其他具攻击性或令人不悦的资料;用户不得以任何方式篡改任何材料或数据,也不得以任何方式干扰本平台的运行;用户也不得利用社会科学数据共享平台的网站收集本站用户的资料。\n" +
-        "\n" +
-        "    8 数据使用者在数据分析过程所发现的疑似数据错误,有义务向数据提供方报告。\n" +
-        "\n" +
-        "    9 数据使用者对基于南京大学人文社科大数据平台提供的数据撰写的著作、论文、咨询报告等文献,均需标明出处,引用范例如下:\n" +
-        "\n" +
-        "数据引用规范:\n" +
-        "     路伟东, \"中国历史地理信息系统(CHGIS)1820年数据\", http://hdl.handle.net/11521/61732 路伟东 [发布者] V8 [版本]\n" +
-        "\n" +
-        "不论公开发表于否,都应在一个月内通过邮件向数据提供方提供所完成文献的标题、发表单位、发表时间(包括出版社名称、期刊年卷期、会议地点和名字、咨询报告接收方等),并由数据提供方统一发布至南京大学人文社科大数据平台。\n" +
-        "\n" +
-        "    数据使用者如根据平台相关规定或协议被要求销毁所获之南京大学人文社科大数据平台的数据, 应采取以下有效措施:\n" +
-        "\n" +
-        "    1) 彻底从计算机硬盘及存储设备 / 空间中删除;\n" +
-        "\n" +
-        "    2) 销毁数据文本文件;\n" +
-        "\n" +
-        "    3) 销毁原始物理介质。\n" +
-        "\n" +
-        "    对“我同意”的进行勾选,本人声明(1)本人已经阅读并理解上述每一条款;(2)本人所提供的以下陈述和信息是准确的;(3)本人同意受上述条款约束。",
-    download: [
-        {
-            name: "GlobalLandTemperatures数据集.zip",
-            type: "Zip Archive",
-            size: "83MB",
-            times: "4",
-            link: "https://skbigdata.nju.edu.cn/data/faces/study/TermsOfUsePage.xhtml?studyId=555&versionNumber=1&fileId=485&redirectPage=%2FFileDownload%2F%3FfileId%3D485%26vdcId%3D163%26xff%3D1%26versionNumber%3D1&tou=download&vdcId=163"
-        },
-        {
-            name: "GlobalLandTemperatures数据集数据字典.docx",
-            type: "application/octet-stream",
-            size: "22KB",
-            times: "5",
-            link: "https://skbigdata.nju.edu.cn/data/faces/study/TermsOfUsePage.xhtml?studyId=555&versionNumber=1&fileId=484&redirectPage=%2FFileDownload%2F%3FfileId%3D484%26vdcId%3D163%26xff%3D1%26versionNumber%3D1&tou=download&vdcId=163"
-        }
-
-    ]
-}
-
-
+  cite: '吴佩文, 2020-3-29, "全球地表气温变化的数据", http://hdl.handle.net/TEST/10353 南京大学 [发布者] V1 [Version]',
+  detail: [
+    {
+      title: "标题",
+      content: "全球地表气温变化的数据",
+    },
+    {
+      title: "课题全局ID",
+      content: "hdl:TEST/10353",
+    },
+    {
+      title: "作者",
+      content: "吴佩文 (南京大学)",
+    },
+    {
+      title: "生成者",
+      content: "吴佩文, 南京大学",
+    },
+    {
+      title: "生成日期",
+      content: "March 29, 2020",
+    },
+    {
+      title: "出版发布者/机构",
+      content: "南京大学, 南京大学",
+    },
+    {
+      title: "提交日期",
+      content: "March 29, 2020",
+    },
+    {
+      title: "出处",
+      content: "全球地表气温变化的数据 数据集",
+    },
+  ],
+  des: {
+    title: "描述",
+    content:
+      "记录了1750年至2013年全球地表气温变化的数据(按月份记录)这些记录的气温数据来自记录地表温度最权威的三家机构:英国HadCrut、美国NASA和NOAA。\n",
+  },
+  intro: [
+    {
+      title: "描述日期",
+      content: "March 29, 2020",
+    },
+    {
+      title: "关键字",
+      content: "全球地表气温记录",
+    },
+    {
+      title: "主题分类",
+      content: "气候",
+    },
+    {
+      title: "覆盖的时间周期",
+      content: "1750 - 2013",
+    },
+    {
+      title: "地理覆盖面",
+      content: "全球",
+    },
+  ],
+  policy:
+    "数据使用协议\n" +
+    "\n" +
+    "南京大学人文社科大数据平台使用者应当严格遵守南京大学人文社科大数据平台所制定的数据使用的各项规定,具体包括但不限于:\n" +
+    "\n" +
+    "    1 数据使用者需保证数据仅供本人使用,不得提供给任何第三方,亦不得以任何形式公布、发表所获之原始数据。\n" +
+    "\n" +
+    "    2 数据使用者不得将数据用于任何商业性或盈利性目的。如有此目的,需在申请数据使用权时告知数据提供方并获得其书面授权后方可使用。\n" +
+    "\n" +
+    "    3 数据使用者不得窜改数据、不得对数据进行恶意的歪曲性使用和分析,不得冒用调查元数据的名义提出伪造的数据分析结果。\n" +
+    "\n" +
+    "    4 数据使用者有义务保护和尊重数据库中所牵涉受访者的隐私,不可探究、公开、或散布可能确认受访者身份的信息。\n" +
+    "\n" +
+    "    5 本平台开放共享的数据是经数据提供方初次清理后的数据,但不能保证数据中没有任何错误(如逻辑错误、输入错误),若数据使用者在使用过程中发现错误,有义务向本平台及时反馈,以促进数据质量的改善。\n" +
+    "\n" +
+    "    6 用户在申请数据时,应填写真实资料,如用户资料发生变更,应及时更改相关资料。若提供的资料不齐全或不正确,数据平台有权拒绝提供服务。\n" +
+    "\n" +
+    "    7 本平台用户须遵守中华人民共和国计算机安全、互联网通讯的有关法律法规,用户不得利用数据中心网站传输、出版、上载、登载或流通任何非法、有害、恐吓、骚扰、侵权、毁谤、淫秽、中伤、违反他人隐私或宣传权、违反他人知识产权、或者任何其他具攻击性或令人不悦的资料;用户不得以任何方式篡改任何材料或数据,也不得以任何方式干扰本平台的运行;用户也不得利用社会科学数据共享平台的网站收集本站用户的资料。\n" +
+    "\n" +
+    "    8 数据使用者在数据分析过程所发现的疑似数据错误,有义务向数据提供方报告。\n" +
+    "\n" +
+    "    9 数据使用者对基于南京大学人文社科大数据平台提供的数据撰写的著作、论文、咨询报告等文献,均需标明出处,引用范例如下:\n" +
+    "\n" +
+    "数据引用规范:\n" +
+    '     路伟东, "中国历史地理信息系统(CHGIS)1820年数据", http://hdl.handle.net/11521/61732 路伟东 [发布者] V8 [版本]\n' +
+    "\n" +
+    "不论公开发表于否,都应在一个月内通过邮件向数据提供方提供所完成文献的标题、发表单位、发表时间(包括出版社名称、期刊年卷期、会议地点和名字、咨询报告接收方等),并由数据提供方统一发布至南京大学人文社科大数据平台。\n" +
+    "\n" +
+    "    数据使用者如根据平台相关规定或协议被要求销毁所获之南京大学人文社科大数据平台的数据, 应采取以下有效措施:\n" +
+    "\n" +
+    "    1) 彻底从计算机硬盘及存储设备 / 空间中删除;\n" +
+    "\n" +
+    "    2) 销毁数据文本文件;\n" +
+    "\n" +
+    "    3) 销毁原始物理介质。\n" +
+    "\n" +
+    "    对“我同意”的进行勾选,本人声明(1)本人已经阅读并理解上述每一条款;(2)本人所提供的以下陈述和信息是准确的;(3)本人同意受上述条款约束。",
+  download: [
+    {
+      name: "GlobalLandTemperatures数据集.zip",
+      type: "Zip Archive",
+      size: "83MB",
+      times: "4",
+      link: "https://skbigdata.nju.edu.cn/data/faces/study/TermsOfUsePage.xhtml?studyId=555&versionNumber=1&fileId=485&redirectPage=%2FFileDownload%2F%3FfileId%3D485%26vdcId%3D163%26xff%3D1%26versionNumber%3D1&tou=download&vdcId=163",
+    },
+    {
+      name: "GlobalLandTemperatures数据集数据字典.docx",
+      type: "application/octet-stream",
+      size: "22KB",
+      times: "5",
+      link: "https://skbigdata.nju.edu.cn/data/faces/study/TermsOfUsePage.xhtml?studyId=555&versionNumber=1&fileId=484&redirectPage=%2FFileDownload%2F%3FfileId%3D484%26vdcId%3D163%26xff%3D1%26versionNumber%3D1&tou=download&vdcId=163",
+    },
+  ],
+};

+ 17 - 4
src/components/InfoCard.vue

@@ -1,7 +1,7 @@
 <template>
 <el-card :body-style="{ padding: '0px' }" shadow="hover">
   <div class="imgWrapper">
-    <img :src="require('@/assets/department/'+pic)" class="image" />
+    <img :src="pic != null ? pic : require('@/assets/department/im/1.jpg')" class="image" />
   </div>
   <div class="textWrapper">
     <h3>{{name}}</h3>
@@ -21,11 +21,24 @@
 </template>
 
 <script>
-import {textFilter} from "@/utils/filter"
+import { textFilter } from "@/utils/filter"
+
+import { Card, Button, Tag, Rate } from "element-ui";
 export default {
+
   name: "InfoCard",
-  filters:{textFilter},
+  components: {
+    "el-card": Card,
+    "el-button": Button,
+    "el-tag": Tag,
+    "el-rate": Rate
+  },
+  filters: { textFilter },
   props: {
+    id: {
+      type: String,
+      default: "1"
+    },
     name: {
       type: String,
       default: ""
@@ -49,7 +62,7 @@ export default {
   },
   methods:{
     peek(){
-      this.$router.push("/dataset/1");
+      this.$router.push("/dataset/"+this.id);
     }
   },
   mounted() {

+ 0 - 126
src/layout/NavMenu.vue

@@ -1,126 +0,0 @@
-<template>
-  <!--    <div class="test" style="border-right:0px !important;">-->
-  <el-menu default-active="" router class="el-menu-vertical-demo" :collapse="isCollapse">
-    <el-menu-item index="/home">
-      <el-header style=" display:flex; justify-content: space-around;">
-        <div class="leftHeader">
-          <div class="leftHeader_left">
-            <img v-show="!isCollapse" src="../assets/logo3.jpg" width="240" height="100%">
-            <img v-show="isCollapse" src="../assets/logo3.jpg" width="60">
-          </div>
-        </div>
-      </el-header>
-
-    </el-menu-item>
-    <el-menu-item index="/home">
-      <i class="el-icon-s-home"></i>
-      <span slot="title">首页</span>
-    </el-menu-item>
-    <el-submenu index="1">
-      <template slot="title">
-        <i class="el-icon-coin"></i>
-        <span>船舶APP精准测试</span>
-      </template>
-      <el-menu-item index="/project/manage">
-        <i class="el-icon-s-marketing"></i>
-        <span slot="title">船舶APP项目管理</span>
-      </el-menu-item>
-      <el-menu-item index="/project/code">
-        <i class="el-icon--code"></i>
-        <span slot="title">船舶APP代码管理</span>
-      </el-menu-item>
-      <el-menu-item index="/project/file">
-        <i class="el-icon-files"></i>
-        <span slot="title">船舶APP文件管理</span>
-      </el-menu-item>
-      <el-menu-item index="/project/testCaseSet">
-        <i class="el-icon-receiving"></i>
-        <span slot="title">船舶APP用例管理</span>
-      </el-menu-item>
-
-      <el-menu-item index="/project/predict">
-        <i class="el-icon-cpu"></i>
-        <span slot="title">船舶APP缺陷预测</span>
-      </el-menu-item>
-    </el-submenu>
-    <el-submenu index="2">
-      <template slot="title">
-        <i class="el-icon-s-opportunity"></i>
-        <span>智能化精准测试模型</span>
-      </template>
-      <el-menu-item index="/model/code">
-        <i class="el-icon-cpu"></i>
-        <span slot="title">船舶APP缺陷预测模型</span>
-      </el-menu-item>
-      <el-menu-item index="/model/case">
-        <i class="el-icon-sort"></i>
-        <span slot="title">船舶APP用例选择模型</span>
-      </el-menu-item>
-      <el-menu-item index="/model/recommend">
-        <i class="el-icon-s-grid"></i>
-        <span slot="title">船舶APP代码推荐模型</span>
-      </el-menu-item>
-    </el-submenu>
-    <el-menu-item index="/help">
-      <i class="el-icon-s-help"></i>
-      <span slot="title">帮助</span>
-    </el-menu-item>
-  </el-menu>
-  <!--    </div>-->
-</template>
-<script>
-export default {
-  props: {
-    isCollapse: {
-      type: Boolean
-    }
-  }
-}
-</script>
-<style scoped>
-.el-menu-item {
-  font-size: 16px !important;
-  font-weight: 600;
-}
-
-
-.el-submenu__title {
-  font-size: 16px !important;
-  font-weight: 600;
-}
-
-.leftHeader {
-  /*flex 布局*/
-  display: flex;
-  /*实现垂直居中*/
-  align-items: center;
-  /*实现水平居中*/
-  justify-content: center;
-  line-height: 50px;
-  font-size: 20px;
-  font-weight: 600;
-  /* background-color: #4086F5; */
-
-}
-
-.leftHeader_left {
-  width: 100%;
-  height: 50px;
-  /*margin-top: -20px;*/
-  /*background-color: #4086F5;*/
-  /*border-radius: 30px;*/
-  /*color: white;*/
-  /*text-align: center;*/
-}
-
-.leftHeader_right {
-  line-height: 24px;
-  margin-left: 7px;
-  text-align: center;
-  /*color: #0d46a1;*/
-}
-
-.el-header {
-  padding: 0;
-}
-</style>

+ 30 - 4
src/layout/mainContainer.vue

@@ -26,22 +26,36 @@
             <i class="el-icon-s-opportunity"></i>
             <span>院系</span>
           </template>
-          <el-menu-item index="/department/1">
-            <i class="el-icon-cpu"></i>
-            <span slot="title">信管</span>
-          </el-menu-item>
+          <div v-for="item in departments" :v-model="departments" :key="item.id">
+            <el-menu-item :index="'/department/'+item.id">
+              <i class="el-icon-cpu"></i>
+              <span slot="title">{{item.name}}</span>
+            </el-menu-item>
+          </div>
         </el-submenu>
       </el-menu>
+
     </el-header>
     <el-main>
       <router-view v-if="isReload" class="rightMain"></router-view>
+
     </el-main>
+
   </div>
+  
 </template>
 
 <script>
+import { getFacultyList } from '@/api/department.js'
+import { Menu, MenuItem, Submenu ,Header} from 'element-ui';
 export default {
   name: 'MainContainer',
+  components: {
+    'el-header':Header,
+    'el-menu': Menu,
+    'el-menu-item': MenuItem,
+    'el-submenu': Submenu,
+  },
   provide() {
     return {
       reload: this.reload,
@@ -50,9 +64,21 @@ export default {
   data() {
     return {
       isReload: true,
+      departments:[]
     }
   },
+  created() {
+    this.init();
+  },
   methods: {
+    initDepartment() {
+      getFacultyList().then(res => {
+        this.departments = res.data;
+      })
+    },
+    init() {
+      this.initDepartment();
+    },
     reload() {
       this.isReload = false;
       this.$nextTick(() => {

+ 34 - 32
src/main.js

@@ -3,46 +3,48 @@
 import Vue from "vue";
 // 引入app组件,它是所有组件的父组件
 import App from "./App.vue";
-import Element from "element-ui";
-import "element-ui/lib/theme-chalk/index.css";
+// import "element-ui/lib/theme-chalk/index.css";
 import router from "./router/index.js";
-import echarts from "echarts";
-// 引入Highlight高亮
-import VueHighlightJS from "vue-highlightjs";
-import "highlight.js/styles/atom-one-dark.css";
-//baidu
-import BaiduMap from "vue-baidu-map";
-Vue.use(BaiduMap, {
-  ak: 'drz9Gli0oXf0MpoAkpOl4mZoisacLUX9'
-});
 
-Vue.use(VueHighlightJS);
+// 引入Highlight高亮
+// import VueHighlightJS from "vue-highlightjs";
+// Vue.use(VueHighlightJS);
+// import "highlight.js/styles/atom-one-dark.css";
 
+// baidu, 现在使用的是图片,不需要了
+// import BaiduMap from "vue-baidu-map";
+// Vue.use(BaiduMap, {
+//   ak: "drz9Gli0oXf0MpoAkpOl4mZoisacLUX9",
+// });
 
 //引入ACE代码编辑器
-import ace from "ace-builds";
-Vue.use(ace);
-
-// <!-- 引入样式 -->
-// <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
-// <!-- 引入组件库 -->
-// <script src="https://unpkg.com/element-ui/lib/index.js"></script>
+// import ace from "ace-builds";
+// Vue.use(ace);
 
 Vue.config.productionTip = false;
 // 使用echarts
-Vue.prototype.$echarts = echarts;
-Vue.use(Element);
-
-// new Vue({
-//   render(h) {
-//     return h("h1", "Hello");
-//   },
-//   // render: (h) => h(App),
-//   router,
-// }).$mount("#app");
-
-new Vue({
-  el:"#app",
+// import echarts from "echarts";
+// Vue.prototype.$echarts = echarts;
+
+// import Element from "element-ui";
+// Vue.use(Element);
+// async function loadCommon() {
+//   const common = await import(
+//     /* webpackChunkName: 'element-ui-common' */
+//     "element-ui/lib/common"
+//   );
+
+//   common.install(Vue);
+// }
+
+// loadCommon().then(() => {
+//   new Vue({
+//     render: (h) => h(App),
+//   }).$mount("#app");
+// });
+
+const app = new Vue({
+  el: "#app",
   render: (h) => h(App),
   router,
 }).$mount("#app");

+ 18 - 0
src/mock/dataset_list.json

@@ -0,0 +1,18 @@
+[
+    {
+        "name": "开放知识论坛",
+        "pic": "1.jpg"
+    },
+    {
+        "name": "企业信息技术投入数据",
+        "pic": "2.jpg"
+    },
+    {
+        "name": "开放学术数据",
+        "pic": "3.jpg"
+    },
+    {
+        "name": "海淘数据",
+        "pic": "4.jpg"
+    }
+]

+ 102 - 0
src/mock/mockServer.js

@@ -0,0 +1,102 @@
+const Mock = require("mockjs");
+
+// import datasetList from './dataset_list.json'
+// import newsList from './news_list.json'
+
+// //第一个参数:接口的地址
+// //第二个参数:向这个接口发送请求获取到的数据
+
+// // 中间默认是get请求
+// Mock.mock('/news/allNews', { code: 200, data: newsList })
+
+// //mock插件:中间默认是get请求
+// Mock.mock('/mock/floor',{code:200,data:floor})
+const newsList = require("./news_list.json");
+
+// module.exports = function (app) {
+//     console.log('mockServer invoked');
+//     app.get('/news/allNews', (req, res) => {
+//         const data = Mock.mock({
+//             code: 200,
+//             data: newsList
+//         });
+//         res.json(data);
+//     });
+//     app.get('/api/users', (req, res) => {
+//       const data = Mock.mock({
+//         'data|2': [
+//           { 'id|+1': 1, name: '@name' }
+//         ]
+//       });
+//       res.json(data);
+//     });
+// };
+module.exports = function (middlewares, devServer) {
+  if (!devServer) {
+    throw new Error("webpack-dev-server is not defined");
+  }
+  console.log("mockServer invoked");
+  // console.log(middlewares);
+  //middlewares.unshift就是之前的before,middlewares.push是after
+  middlewares.unshift(
+    {
+      name: "mock",
+      // `path` 是可选的
+      path: "/user/userInfo",
+      middleware: (req, res) => {
+        // let json = getJsonFile('./userinfo.json') //mock数据的样式,自己新建。
+        res.send("hello world");
+      },
+    },
+    {
+      name: "news",
+      path: "/news/allNews",
+      middleware: (req, res) => {
+        const data = Mock.mock({
+          code: 200,
+          data: newsList,
+        });
+        res.json(data);
+      },
+    },
+    {
+      name: "digital",
+      path: "/digital/getTopByActive/^",
+      middleware: (req, res) => {
+        const data = Mock.mock({
+          code: 200,
+          data: newsList,
+        });
+        res.json(data);
+      },
+    }
+  );
+  //return别忘了
+  return middlewares;
+};
+// const mocks = {
+//     'GET /users': {
+//       list: [{id: 1, name: 'Tom'}]
+//     },
+
+//     'GET /orders': {
+//       list: [{id: 1, price: 100}]
+//     }
+// }
+// export default function mockAPI(app) {
+//     // ...
+// }
+// export default (req, res) => {
+//     const { url, method } = req
+
+//     const mock = mocks[method + ' ' + url]
+
+//     if(mock) {
+//         res.json(mock)
+//     }
+// }
+//引入mockjs开始模拟数据
+// 在webpack中,图片json不需要对外暴露(里面不能书写export关键字)
+// 这些资源默认对外暴露
+
+//引入数据

+ 44 - 0
src/mock/news_list.json

@@ -0,0 +1,44 @@
+[
+    {
+        "title": "国家社会科学基金重大项目开题汇报交流会成功举办",
+        "releaseTime": "2023-07-08",
+        "abstract": "2023年7月3日上午,由信息管理学院朱庆华教授担任首席专家的2022年度国家社会科学基金重大项目“面向健康中国战略的智慧养老数据资源体系建设研究(22&ZD327)”开题汇报交流会在信息管理学院211会议室举行。",
+        "pic": "2_3.jpg",
+        "link": "https://im.nju.edu.cn/a8/88/c26270a632968/page.htm"
+    },
+    {
+        "title": "我院师生积极参加第十六届中国夏季信息管理研讨会(CSWIM 2023)",
+        "abstract": "2023年6月24日至25日,由中南大学商学院承办的第十六届中国夏季信息管理研讨会(China Summer Workshop on Information Management 2023, CSWIM2023)在长沙隆重举行。",
+        "pic": "2_4.jpg",
+        "releaseTime": "2023-07-02",
+        "link": "https://im.nju.edu.cn/a0/92/c26270a630930/page.htm"
+    },
+    {
+        "title": "信息管理学院党委举办毕业生党员主题教育活动",
+        "releaseTime": "2023-06-06",
+        "abstract": "6月2日上午,信息管理学院党委以“在砥砺奋进中放飞梦想”为主题举办2023届毕业生党员主题教育活动。学院党委书记姜迎春,党委副书记刘千里,党委秘书、专职组织员朱敏及全体2023届毕业生党员参加活动。",
+        "pic": "2_5.jpg",
+        "link": "https://im.nju.edu.cn/94/31/c26270a627761/page.htm"
+    },
+    {
+        "title": "“5·20”校庆学术报告会博士生专场成功举办",
+        "releaseTime": "2023-05-26",
+        "abstract": "5月24日下午,信息管理学院“5·20”校庆学术报告会博士生专场在学院222会议室举办。学术报告会由朱庆华教授主持,胡广伟教授和康乐乐副教授为点评嘉宾。",
+        "pic": "2_1.jpg",
+        "link": "https://im.nju.edu.cn/8d/de/c26270a626142/page.htm"
+    },
+    {
+        "title": "“中国信息资源管理学科发展论坛”在我校召开",
+        "releaseTime": "2023-05-22",
+        "abstract": "2023年5月20日,由国务院学位委员会信息资源管理学科评议组发起、南京大学信息管理学院和南京大学数据智能与交叉创新实验室联合承办的“中国信息资源管理学科发展论坛”在南京大学召开,中国科学院院士、南京大学校长谈哲敏到会发表讲话。",
+        "pic": "2_8.jpg",
+        "link": "https://im.nju.edu.cn/a8/88/c26270a632968/page.htm"
+    },
+    {
+        "title": "南京大学信息管理学院党委在江西方志敏干部学院启动主题教育活动",
+        "releaseTime": "2023-04-21",
+        "abstract": "为贯彻落实《中共南京大学委员会关于开展学习贯彻习近平新时代中国特色社会主义思想主题教育的实施方案》,教育引导师生党员凝心铸魂筑牢根本、锤炼品格强化忠诚,信息管理学院党委于4月14日至4月16日组织教师党员以及党团学生骨干前往江西方志敏干部学院启动主题教育活动。",
+        "pic": "2_9.jpg",
+        "link": "https://im.nju.edu.cn/60/57/c26270a614487/page.htm"
+    }
+]

+ 17 - 20
src/router/index.js

@@ -1,14 +1,14 @@
 import Vue from "vue";
 import VueRouter from "vue-router";
 
-import XianlinMap from "@/views/map/XianlinMap";
-import gulou from "@/views/map/gulou";
-import ProjectFile from "@/views/map/ProjectFile";
-import mainContainer from "@/layout/mainContainer";
+// import XianlinMap from "@/views/map/XianlinMap";
+// import gulou from "@/views/map/gulou";
+// import mainContainer from "@/layout/mainContainer";
+
+// import department from "@/views/department/department";
+// import home from "@/views/home";
+// import datasetDetail from "@/views/resource/detail";
 
-import department from "@/views/department/department";
-import home from "@/views/home";
-import datasetDetail from "@/views/resource/detail";
 Vue.use(VueRouter);
 
 export default new VueRouter({
@@ -17,32 +17,29 @@ export default new VueRouter({
     {
       path: "/",
       redirect: "/home",
-      component: mainContainer,
+      component: () => import("@/layout/mainContainer"),
       children: [
         {
-          path:"home",
-          component:home
+          path: "home",
+          component: () => import("@/views/home"),
         },
         {
           path: "xianlin",
-          component: XianlinMap,
+          component: () => import("@/views/map/XianlinMap"),
         },
         {
           path: "gulou",
-          component: gulou,
+          component: () => import("@/views/map/gulou"),
         },
         {
-          path: "file",
-          component: ProjectFile,
-        }, {
           path: "department/:id",
-          component: department
-        }, {
+          component: () => import("@/views/department/department"),
+        },
+        {
           path: "dataset/:id",
-          component: datasetDetail
-        }
+          component: () => import("@/views/resource/detail"),
+        },
       ],
     },
-
   ],
 });

+ 18 - 18
src/utils/request.js

@@ -1,13 +1,13 @@
 import axios from "axios";
-import {  Message } from "element-ui";
+// import { Message } from "element-ui";
 axios.defaults.withCredentials = true;
 
 // create an axios instance
 const service = axios.create({
   //API
-  baseURL: "",
-  withCredentials: true, // send cookies when cross-domain requests
-  timeout: 100000 // request timeout
+  baseURL: "/api",
+  withCredentinpmals: true, // send cookies when cross-domain requests
+  timeout: 100000, // request timeout
 });
 
 // response interceptor
@@ -20,28 +20,28 @@ service.interceptors.response.use(
   /**
    * 可以通过自定义状态码进行全局的拦截控制,没有约定的话就不做处理
    */
-  response => {
+  (response) => {
     const res = response.data;
     // console.log(res, "res requestjs response");
     // if (res.code !== undefined && res.code !== 200 &&res.code !==20000) {
-    if (res.code===0) {
-      Message({
-        message: res.message || 'Error',
-        type: 'error',
-        duration: 3 * 1000
-      })
+    if (res.code === 0) {
+      // Message({
+      //   message: res.message || "Error",
+      //   type: "error",
+      //   duration: 3 * 1000,
+      // });
       return;
     }
     return res;
   },
-  error => {
+  (error) => {
     console.log("err requestjs err", error); // for debug
     if (error.response.data.length > 1000) {
-    //   Message({
-    //     message: "服务器出错",
-    //     type: "error",
-    //     duration: 3 * 1000
-    //   });
+      //   Message({
+      //     message: "服务器出错",
+      //     type: "error",
+      //     duration: 3 * 1000
+      //   });
     } else {
       // Message({
       //   message: error.response.data.message,
@@ -55,7 +55,7 @@ service.interceptors.response.use(
 );
 // request interceptor
 
-service.interceptors.request.use(function(config) {
+service.interceptors.request.use(function (config) {
   let token = window.localStorage.getItem("accessToken");
   if (token) {
     config.headers.accessToken = token;

+ 0 - 16
src/views/dataset/DatasetDetail.vue

@@ -1,16 +0,0 @@
-<template>
-<div>
-
-</div>
-</template>
-
-<script>
-export default {
-name: "DatasetDetail",
-
-}
-</script>
-
-<style scoped>
-
-</style>

+ 56 - 16
src/views/department/department.vue

@@ -3,12 +3,12 @@
     <div class="titleCard">
       <div style="width: 60%">
         <h1>{{ name }}</h1>
-        <span class="titleInfo">{{ info }}</span>
+        <span class="titleInfo">{{ intro }}</span>
       </div>
       <!--        官网和图片-->
       <div style="width: 30%">
         <a :href="official_link" target="_blank">
-          <img width="140px" :src="require('@/assets/department/'+name_+'/'+imgPath)"/>
+          <img width="140px" :src="logoUrl"/>
         </a>
       </div>
     </div>
@@ -16,15 +16,15 @@
     <div v-for="(lab,i) in labList" :key="i" class="labCard">
       <div class="labCardTitle">{{ lab.name }}</div>
       <el-row :gutter="20">
-        <el-col :xs="20" :sm="11" :md="8" :lg="6" :xl="6" v-for="(r,i) in lab.rList" :key="i">
+        <el-col :xs="20" :sm="11" :md="8" :lg="6" :xl="6" v-for="(r,i) in lab.digitalList" :key="i">
           <InfoCard
             class="infoCard"
-            :pic="getImgUrl(r.pic)"
-            :name="r.name"
-            :info="r.info"
-            :date="r.date"
-            :activity="r.activity"
-
+            :id="r.id"
+            :pic="r.imgUrl"
+            :name="r.title"
+            :info="r.intro"
+            :date="r.date != null ? r.date.substring(0,10) : '--- --, ----'"
+            :activity="r.active"
           >
           </InfoCard>
         </el-col>
@@ -35,23 +35,63 @@
 
 <script>
 import InfoCard from "@/components/InfoCard";
-import {labList} from "@/assets/department/im/lab";
-
+// import {labList} from "@/assets/department/im/lab";
+import { getFacultyById, getLabAndDigitalByFacultyId } from "@/api/department";
+import {Row, Col} from "element-ui";
 export default {
   name: "departmentPage",
-  components: {InfoCard},
+  components: {
+    "el-row": Row,
+    "el-col": Col,
+    InfoCard
+  },
   data() {
     return {
+      id:"1",
       pre: "@/assets/department/",
-      labList: labList,
       name: "信息管理学院",
-      name_: "im",
-      imgPath: "logo.png",
+      labList:[],
+      logoUrl: "logo.png",
       official_link: "https://im.nju.edu.cn/main.psp",
-      info: "南京大学信息管理学院是南京大学历史最悠久的学科之一,也是信息管理教育的优先序列学科,在国内稳居前列,在中国同类学科院系居于引领发展地位,具有良好的品牌专业建设基础和发展优势。"
+      intro: "南京大学信息管理学院是南京大学历史最悠久的学科之一,也是信息管理教育的优先序列学科,在国内稳居前列,在中国同类学科院系居于引领发展地位,具有良好的品牌专业建设基础和发展优势。"
+    }
+  },
+  mounted() {
+    this.init();
+  },
+  watch: {
+    '$route.params.id': function(newId, oldId) {
+      if (newId !== oldId) {
+        this.init();
+      }
     }
   },
   methods: {
+    initId() {
+      //获取url最后的id
+      this.id = this.$route.params.id;
+    },
+    initDepartment() {
+      getFacultyById(this.id).then(res => {
+        this.name = res.data.name;
+        this.logoUrl = res.data.logoUrl;
+        this.intro = res.data.intro;
+
+      })
+    },
+    initLabList() {
+      const that = this
+      getLabAndDigitalByFacultyId(that.id).then(res => {
+        console.log(res.data)
+        this.labList = res.data;
+      })
+    },
+    init() {
+      this.initId();
+      this.initDepartment();
+      this.initLabList();
+
+    },
     getImgUrl(str) {
       return this.name_ + "/" + str;
     }

+ 46 - 9
src/views/home.vue

@@ -7,9 +7,14 @@
       <div class="newsWrapper">
         <div style="width: 600px">
           <el-carousel :interval="5000" arrow="always" height="400px">
-            <el-carousel-item v-for="(n,i) in news" :key="i">
+            <!-- <el-carousel-item v-for="(n,i) in news" :key="i">
               <a :href="n.link"><img :src="require('@/assets/home/'+n.pic)" height="100%"/></a>
+            </el-carousel-item> -->
+            <!-- 需要动态绑定news 上面的方法无法动态更新并展示news-->
+            <el-carousel-item v-for="(n,i) in news" :key="i" width="100%" height="100%">
+              <img :src=n.picturePath height="100%"/>
             </el-carousel-item>
+
           </el-carousel>
         </div>
         <!-- 通知公告新闻列表 -->
@@ -17,7 +22,7 @@
           <ul>
             <li class='lieBiao liPointer' :key='index' v-for='(item, index) in news' @click="goto(item.link)">
               <div class='time'>
-                {{ item.releaseTime }}
+                {{ item.generateDate != null ? item.generateDate.substring(0,10) : '' }}
               </div>
               <div class='title'>
                 {{ item.title }}
@@ -35,9 +40,9 @@
       <div class="menu_cn">数据精选</div>
       <div class="menu_en">Data selection</div>
       <div class="datasetWrapper">
-        <div v-for="(n,i) in datasets" :key="i" :span="6" class="imgWrapper">
-          <img :src="require('@/assets/home/'+n.pic)" class="dataset_pic"/>
-          <span class="dataset_name">{{ n.name }}</span>
+        <div v-for="(n,i) in datasets" :v-model="datasets" :key="i" :span="6" class="imgWrapper" @click="goto('/dataset/'+n.id)">
+          <img :src="n.imgUrl" class="dataset_pic"/>
+          <span class="dataset_name">{{ n.title }}</span>
         </div>
       </div>
     </div>
@@ -45,18 +50,50 @@
 </template>
 
 <script>
-import {datasetList} from "@/assets/home/data";
-import {newsList} from "@/assets/home/data";
+import { Carousel, CarouselItem } from 'element-ui'
+// import {datasetList} from "@/assets/home/data";
+// import {newsList} from "@/assets/home/data";
 
+import { getNewsList } from "@/api/news";
+import { getDigitalTop } from "@/api/digital"
 export default {
   name: "homePage",
+  components: {
+    'el-carousel': Carousel,
+    'el-carousel-item': CarouselItem
+  },
   data() {
     return {
-      datasets: datasetList,
-      news: newsList
+      datasets: [],
+      news: []
     }
   },
+  created() {
+    this.init()
+  },
   methods: {
+    initDigitalTop() {
+      getDigitalTop(5).then(res => {
+        this.datasets = res.data;
+        for (let i = 0; i < this.datasets.length; i++) {
+          if (this.datasets[i].imgUrl == null) {
+            // 随机1~3
+            let random = Math.floor(Math.random() * 3) + 1;
+            this.datasets[i].imgUrl = require('@/assets/department/im/' + random + '.jpg');
+          }
+        }
+      })
+    },
+    initNewsList() {
+      getNewsList().then(res => {
+        this.news = res.data;
+      })
+    },
+    init() {
+      this.initDigitalTop();
+      this.initNewsList();
+    },
+
     goto(target) {
       window.open(target);
     }

+ 0 - 87
src/views/map/ProjectFile.vue

@@ -1,87 +0,0 @@
-<template>
-  <div class="BaiDuMap">
-    <baidu-map
-        :center="center"
-        :zoom="zoom"
-        :mapStyle="mapStyle"
-        :scroll-wheel-zoom="true"
-        style="width: 100%; height: 100%"
-        @ready="handler"
-        @click="getClickInfo"
-        @moving="syncCenterAndZoom"
-        @moveend="syncCenterAndZoom"
-        @zoomend="syncCenterAndZoom"
-    >
-      <!-- 必须给容器指高度,不然地图将显示在一个高度为0的容器中,看不到 -->
-      <bm-navigation anchor="BMAP_ANCHOR_TOP_RIGHT"></bm-navigation>
-      <bm-geolocation
-          anchor="BMAP_ANCHOR_BOTTOM_RIGHT"
-          :showAddressBar="true"
-          :autoLocation="true"
-      ></bm-geolocation>
-      <bm-city-list anchor="BMAP_ANCHOR_TOP_LEFT"></bm-city-list>
-    </baidu-map>
-  </div>
-</template>
-<script>
-import  {customMapStyle}  from '@/assets/map/map_style.js';
-
-export default {
-  data() {
-    return {
-      // 地址信息
-      address: null,
-      center: { lng: 0, lat: 0 },
-      //地图展示级别
-      zoom: 18,
-      mapStyle: { styleJson:customMapStyle},
-      // customMapStyle:[
-      //   {
-      //     "featureType": "poi",
-      //     "elementType": "labels",
-      //     "stylers": [
-      //       {
-      //         "visibility": "off"
-      //       }
-      //     ]
-      //   }]
-    };
-  },
-
-  methods: {
-    handler({ BMap, map }) {
-      this.center.lng = 118.786007;
-      this.center.lat = 32.06143;
-      this.zoom = this.zoom;
-      // map.enableScrollWheelZoom(true);
-    },
-    getClickInfo(e) {
-      // 创建地理编码实例
-      const myGeo = new BMap.Geocoder();
-      // 根据坐标逆解析地址
-      myGeo.getLocation(new BMap.Point(e.point.lng, e.point.lat), (result) => {
-        console.log(result, "result-->>>>");
-        if (result) {
-          this.address = result.address;
-        }
-      });
-      this.center.lng = e.point.lng;
-      this.center.lat = e.point.lat;
-    },
-    syncCenterAndZoom(e) {
-      console.log(e)
-      const { lng, lat } = e.target.getCenter();
-      this.zoom = e.target.getZoom();
-    },
-    clickHandler(e){
-      alert(`单击点的坐标为:${e.point.lng}, ${e.point.lat}`);
-    }
-  },
-};
-</script>
-<style scoped>
-.BaiDuMap {
-  width: 100%;
-  height: 80vh;
-}
-</style>

+ 164 - 5
src/views/resource/detail.vue

@@ -22,6 +22,59 @@
               <!--  detail        -->
               <div class="cardWrapper">
                 <div>
+                  <!-- "data": {
+    "digitalId": 4,
+    "title": "全球地表气温变化的数据",
+    "globalId": "hdl:TEST/10353",
+    "author": "吴佩文 (南京大学)",
+    "creator": "吴佩文, 南京大学",
+    "createDate": "2020-03-28T16:00:00.000+00:00",
+    "publisher": "南京大学, 南京大学",
+    "submitDate": "2020-03-28T16:00:00.000+00:00",
+    "source": "<a class=\"iceOutLnk\" href=\"/data/dv/GlobalLandTemperatures/faces/study/StudyPage.xhtml;jsessionid=49139985ce9b7d5e7b4a0d9f8331?studyId=555&amp;versionNumber=1\" id=\"studyForm:tabSet1:0:j_idt291\"><span class=\"iceOutTxt\" id=\"studyForm:tabSet1:0:j_idt292\">全球地表气温变化的数据 数据集",
+    "description": "<p>记录了1750年至2013年全球地表气温变化的数据(按月份记录)这些记录的气温数据来自记录地表温度最权威的三家机构:英国HadCrut、美国NASA和NOAA。",
+    "descriptionDate": "2020-03-28T16:00:00.000+00:00",
+    "keyword": "全球地表气温记录",
+    "subject": "气候",
+    "timeCoverage": "1750 - 2013",
+    "geoCoverage": "全球",
+    "agreement": "<br/><center style=\"color:#000\"><h1>数据使用协议"
+  } -->
+                  <!-- <div class="itemWrapper">
+                    <div class="item_title">标题</div>
+                    <div class="item_content">{{ mainData.title }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">课题全局ID</div>
+                    <div class="item_content">{{ mainData.globalId }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">作者</div>
+                    <div class="item_content">{{ mainData.author }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">生成者</div>
+                    <div class="item_content">{{ mainData.creator }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">生成日期</div>
+                    <div class="item_content">{{ mainData.createDate }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">出版发布者/机构</div>
+                    <div class="item_content">{{ mainData.publisher }}</div>
+                  </div>
+
+                  <div class="itemWrapper">
+                    <div class="item_title">提交日期</div>
+                    <div class="item_content">{{ mainData.submitDate }}</div>
+                  </div> -->
+
                   <div v-for="(item,i) in mainData.detail" :key="i" class="itemWrapper">
                     <div class="item_title">{{ item.title }}</div>
                     <div class="item_content">{{ item.content }}</div>
@@ -64,18 +117,18 @@
       </el-tab-pane>
       <!--      下载-->
       <el-tab-pane label="下载" name="2">
-        <el-card v-for="(item,i) in mainData.download" :key="i">
+        <el-card v-for="(item,i) in files" :key="i">
           <div class="downloadWrapper">
             <div>
               <div class="download_title">
                 {{ item.name }}
               </div>
               <div class="download_content">
-                <span>{{ item.type }}</span><span>{{ item.size }}</span><span>下载{{ item.times }}次</span>
+                <span>{{ item.type }}</span><span>{{ (item.size /1024/1024).toFixed(3) }} MB</span><span>下载{{ item.download }}次</span>
               </div>
             </div>
             <div>
-              <el-button @click="goto(item.link)">
+              <el-button @click="goto(item.url)">
                 <i class="el-icon-download"/> 下载
               </el-button>
             </div>
@@ -86,7 +139,7 @@
       <!--      引用-->
       <el-tab-pane label="引用" name="3">
         <div class="cite_instruction">如果您使用这些数据,请在您的学术参考文献中添加以下引用。</div>
-        <div class="cite_content">{{ mainData.cite }}</div>
+        <div class="cite_content">{{ cite }}</div>
       </el-tab-pane>
       <!--      <el-tab-pane label="引用" name="3">-->
       <!--        <div class="cite_instruction">如果您使用这些数据,请在您的学术参考文献中添加以下引用。</div>-->
@@ -98,20 +151,126 @@
 
 <script>
 import {information} from "@/assets/dataset/data";
+import {getDigitalById,getDatasetByDigitalId,getFilesByDigitalId} from "@/api/digital";
+import { Tag, Tabs, Card, TabPane, Collapse, CollapseItem, Rate } from "element-ui";
 
 export default {
   name: "datasetDetail",
+  components: {
+    'el-tag': Tag,
+    'el-tabs': Tabs,
+    'el-tab-pane': TabPane,
+    'el-card': Card,
+    'el-collapse': Collapse,
+    'el-collapse-item': CollapseItem,
+    'el-rate': Rate
+  },
   data() {
     return {
+      id:1,
       mainData: information,
       name: "全球地表气温变化的数据",
       activity: 3,
       releaseTime: "March 29, 2020",
       activeName: "1",
-      activeNames: ['1_1', '1_2', '1_3']
+      activeNames: ['1_1', '1_2', '1_3'],
+      cite: "",
+      files:[],
+    }
+  },
+  watch: {
+    '$route.params.id': function(newId, oldId) {
+      if (newId !== oldId) {
+        this.init();
+      }
     }
   },
+  mounted() {
+    this.init()
+  },
   methods: {
+    initId() {
+      this.id = this.$route.params.id;
+    },
+    initDetail() {
+      getDigitalById(this.id).then(res => {
+        console.log(res.data)
+        this.name = res.data.title;
+        this.releaseTime = res.data.date != null ? res.data.date.substring(0,10) : '--- --, ----';
+        this.activity = res.data.active;
+
+        this.cite = res.data.ref;
+
+        //根据类型获取详细信息
+        const digitalType = res.data.type;
+        if (digitalType == null || digitalType == "dataset") {
+          getDatasetByDigitalId(this.id).then(res => {
+            console.log(res.data)
+            this.convertToMainData(res.data);
+          })
+        }
+
+        //根据id获取文件列表
+        getFilesByDigitalId(this.id).then(res => {
+          console.log(res.data)
+          this.files = res.data;
+        })
+      })
+    },
+    init() {
+      this.initId();
+      this.initDetail();
+    },
+    convertToMainData(data) {
+      console.log(data)
+      const detailTitleMap = {
+        "标题": "title",
+        "课题全局ID": "globalId",
+        "作者": "author",
+        "生成者": "creator",
+        "生成日期": "createDate",
+        "出版发布者/机构": "publisher",
+        "提交日期": "submitDate",
+        "出处": "source",
+      }
+      const introTitleMap = {
+        "描述日期": "descriptionDate",
+        "关键字": "keyword",
+        "主题分类": "subject",
+        "覆盖的时间周期": "timeCoverage",
+        "地理范围": "geoCoverage",
+      }
+      let res = {}
+
+      res.detail = []
+      for (let key in detailTitleMap) {
+        if (data[detailTitleMap[key]] == null) {
+          continue;
+        }
+        res.detail.push({
+          title: key,
+          content: data[detailTitleMap[key]]
+        })
+      }
+
+      res.des = {
+        title: "描述",
+        content: data.description
+      },
+
+      res.intro = []
+      for (let key in introTitleMap) {
+        if (data[introTitleMap[key]] == null) {
+          continue;
+        }
+        res.intro.push({
+          title: key,
+          content: data[introTitleMap[key]]
+        })
+      }
+      res.policy = data.agreement
+      this.mainData = res
+    },
     goto(link) {
       window.open(link);
     }

+ 97 - 26
vue.config.js

@@ -1,47 +1,118 @@
 const { defineConfig } = require("@vue/cli-service");
+// const path = require("path");
+const BundleAnalyzerPlugin =
+  require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
+// const CompressionWebpackPlugin = require("compression-webpack-plugin");
 module.exports = defineConfig({
   // transpileDependencies: true,
   lintOnSave: false,
-  transpileDependencies: [
-    // 设置这个就不会报错,初始化cli的时候这个默认为true
-    "vuetify", // vuetify is a dependency of @vue/cli-plugin-vuetify
-  ],
+
   devServer: {
     host: "0.0.0.0",
     port: 8003,
     open: true,
     hot: true,
-    // disableHostCheck: true,
-    // before: require('./mock/mock-server.js')
+    //使用setupMiddleware来设置mock数据
+    // setupMiddlewares: (middlewares, devServer) => {
+    //   return mockServer(middlewares, devServer);
+    // },
     proxy: {
-      "/xapi": {
-        target: "http://124.222.95.170:9990/",
+      "/api": {
+        target: "http://121.40.252.139:8089",
         changeOrigin: true, // //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样客户端端和服务端进行数据的交互就不会有跨域问题
+        ws: true,
         pathRewrite: {
           //// 思路是如果是开发环境,就给所有要代理的接口统一加上前缀,然后代理请求时再统一通过rewrite去掉
-          "^/xapi": "",
-        },
-      },
-      // "/cases": {
-      //   target: "http://101.35.139.78:9090/",
-      //   changeOrigin: true, // //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样客户端端和服务端进行数据的交互就不会有跨域问题
-      //   pathRewrite: {
-      //     //// 思路是如果是开发环境,就给所有要代理的接口统一加上前缀,然后代理请求时再统一通过rewrite去掉
-      //     "^/cases": "",
-      //   },
-      // },
-      "/codePredict": {
-        target: "http://47.99.63.119:9100/",
-        changeOrigin: true, // //开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,这样客户端端和服务端进行数据的交互就不会有跨域问题
-        pathRewrite: {
-          //// 思路是如果是开发环境,就给所有要代理的接口统一加上前缀,然后代理请求时再统一通过rewrite去掉
-          "^/codePredict": "",
+          "^/api": "",
         },
       },
     },
   },
-});
+  chainWebpack: (config) => {
+    config.plugin("webpack-bundle-analyzer").use(BundleAnalyzerPlugin);
 
+    // 修改src目录的默认路径
+    // config.resolve.alias.set("@", path.resolve(__dirname, "src"));
 
+    // // 添加新的入口文件和分块规则
+    // config.entry("app").clear().add("./src/main.js");
+    // config.optimization.splitChunks({
+    //   cacheGroups: {
+    //     // 创建一个新的块,用于处理src目录下的文件
+    //     src: {
+    //       test: /[\\/]src[\\/]/,
+    //       name: "src",
+    //       chunks: "all",
+    //       priority: 10,
+    //       enforce: true,
+    //     },
+    //   },
+    // });
 
+    // config.plugin("compression").use(CompressionWebpackPlugin, [
+    //   {
+    //     filename: "[path][base].gz",
+    //     algorithm: "gzip",
+    //     test: /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i,
+    //     threshold: 10240,
+    //     minRatio: 0.8,
+    //     deleteOriginalAssets: false,
+    //   },
+    // ]);
+  },
+  // 优化因为vuetify导致的打包后chunk-vendors.js过大的问题
+  // configureWebpack: {
+  //   optimization: {
+  //     splitChunks: {
+  //       cacheGroups: {
+  //         vuetify: {
+  //           test: /[\\/]node_modules[\\/]vuetify[\\/]/,
+  //           name: "vuetify",
+  //           chunks: "all",
+  //         },
+  //       },
+  //     },
+  //   },
+  // },
 
+  // productionSourceMap: true,
+  //拆分过大的js,优化加载速度
+  configureWebpack: {
+    // devtool: "cheap-module-source-map",
+    externals: {
+      // vue: "Vue",
+      // vuex: "Vuex",
+      // "vue-router": "VueRouter",
+      // axios: "axios",
+      // "element-ui": "ELEMENT",
+    },
+    optimization: {
+      splitChunks: {
+        chunks: "all",
+        minSize: 60000,
+        minRemainingSize: 0,
+        maxSize: 100000,
+        minChunks: 1,
+        maxAsyncRequests: 6,
+        maxInitialRequests: 4,
+        enforceSizeThreshold: 50000,
+        cacheGroups: {
+          vendors: {
+            // 打包除了element-ui之外的其他第三方库
+            test: /[\\/]node_modules[\\/](?!element-ui)/,
+            priority: -10,
+            minSize: 30000,
+            maxSize: 60000,
+          },
+          common: {
+            // 打包src目录下的代码
+            test: /[\\/]src[\\/]/,
+            priority: -20,
+            minSize: 20000,
+            maxSize: 40000,
+          },
+        },
+      },
+    },
+  },
+});

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