ソースを参照

Merge remote-tracking branch 'origin/master' into feature/master

# Conflicts:
#	src/api/introduce.js
#	src/router.js
yanglingling 11 ヶ月 前
コミット
b4f2357e6a

+ 1 - 1
src/api/common.js

@@ -12,5 +12,5 @@ const basePath = $GlobalConfig.VUE_APP_AdminPath;
 
 // 登录方法
 export function postCommonApi(srvName, funcName, data) {
-  return request.postRequestWithClientInfo(basePath, srvName, funcName, data);
+  return request.postRequest(basePath, srvName, funcName, data);
 }

+ 5 - 5
src/api/instr/index.js

@@ -12,7 +12,7 @@ const basePath = $GlobalConfig.VUE_APP_INSTR_PATH;
 
 // 获取仪器列表
 export function getInstrList(data) {
-  return request.postRequestWithClientInfo(
+  return request.postRequest(
     basePath,
     "JiangSuUniversity",
     "GetList",
@@ -21,7 +21,7 @@ export function getInstrList(data) {
 }
 // 获取仪器详情
 export function getInstrDetails(data) {
-  return request.postRequestWithClientInfo(
+  return request.postRequest(
     basePath,
     "JiangSuUniversity",
     "GetEntityById",
@@ -30,7 +30,7 @@ export function getInstrDetails(data) {
 }
 // 获取附件列表 
 export function getFileTable(data) {
-  return request.postRequestWithClientInfo(
+  return request.postRequest(
     basePath,
     "JiangSuUniversity",
     "GetDocumentListByInst",
@@ -39,7 +39,7 @@ export function getFileTable(data) {
 }
 // 获取公告列表 
 export function getNoticeTable(data) {
-  return request.postRequestWithClientInfo(
+  return request.postRequest(
     basePath,
     "JiangSuUniversity",
     "GetNoticeListByInst",
@@ -48,7 +48,7 @@ export function getNoticeTable(data) {
 }
 // 获取型号数量
 export function getInstNameEnCount(data) {
-  return request.postRequestWithClientInfo(
+  return request.postRequest(
     basePath,
     "JiangSuUniversity",
     "GetInstNameEnCount",

+ 12 - 11
src/api/introduce.js

@@ -2,7 +2,7 @@
  * @Author: wanglj wanglijie@dashoo.cn
  * @Date: 2025-01-09 14:55:46
  * @LastEditors: wanglj
- * @LastEditTime: 2025-01-09 15:31:35
+ * @LastEditTime: 2025-01-10 17:51:19
  * @Description: file content
  * @FilePath: \labsop_website\src\api\introduce.js
  */
@@ -20,41 +20,42 @@ const basePath = $GlobalConfig.VUE_APP_SETTING_PATH;
 
 // 获取平台简介
 export function getCenterIntroduction(data) {
-  return request.postRequestWithClientInfo(basePath, "CenterIntroduction", "GetCenterIntroduction", data);
+  return request.postRequest(basePath, "CenterIntroduction", "GetCenterIntroduction", data);
 }
 // 保存中心简介(新增+更新)
 export function updateCenterIntroduction(data) {
-  return request.postRequestWithClientInfo(basePath, "CenterIntroduction", "UpdateCenterIntroduction", data);
+  return request.postRequest(basePath, "CenterIntroduction", "UpdateCenterIntroduction", data);
 }
 // 更新中心简介点击量
 export function viewCenterIntroduction(data) {
-  return request.postRequestWithClientInfo(basePath, "CenterIntroduction", "ViewCenterIntroduction", data);
+  return request.postRequest(basePath, "CenterIntroduction", "ViewCenterIntroduction", data);
 }
 // 获取中心人员
 export function getCenterStaff(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterStaff", "GetCenterStaff", data);
+  return request.postRequest(basePath, "WesCenterStaff", "GetCenterStaff", data);
 }
 // 保存中心人员(新增+更新)
 export function updateCenterStaff(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterStaff", "UpdateCenterStaff", data);
+  return request.postRequest(basePath, "WesCenterStaff", "UpdateCenterStaff", data);
 }
 // 更新中心人员点击量接口
 export function viewCenterStaff(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterStaff", "ViewCenterStaff", data);
+  return request.postRequest(basePath, "WesCenterStaff", "ViewCenterStaff", data);
 }
 // 获取技术平台列表
 export function getCenterPlatformList(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterPlatform", "GetCenterPlatformList", data);
+  return request.postRequest(basePath, "WesCenterPlatform", "GetCenterPlatformList", data);
 }
 // 获取平台简介信息接口
 export function getCenterPlatform(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterPlatform", "GetCenterPlatform", data);
+  return request.postRequest(basePath, "WesCenterPlatform", "GetCenterPlatform", data);
 }
 // 保存平台简介(新增+更新)
 export function updateCenterPlatform(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterPlatform", "UpdateCenterPlatform", data);
+  return request.postRequest(basePath, "WesCenterPlatform", "UpdateCenterPlatform", data);
 }
 // 更新平台简介点击量
 export function viewCenterPlatform(data) {
-  return request.postRequestWithClientInfo(basePath, "WesCenterPlatform", "ViewCenterPlatform", data);
+  return request.postRequest(basePath, "WesCenterPlatform", "ViewCenterPlatform", data);
 }
+

+ 6 - 2
src/api/login.js

@@ -2,7 +2,7 @@
  * @Author: wanglj
  * @Date: 2022-04-25 10:38:19
  * @LastEditors: wanglj
- * @LastEditTime: 2025-01-10 09:35:57
+ * @LastEditTime: 2025-01-11 09:13:02
  * @Description: file content
  * @FilePath: \labsop_website\src\api\login.js
  */
@@ -20,5 +20,9 @@ export function signOut(data) {
 }
  // 根据用户名获取用户信息
 export function getUserByUserName(data) {
-  return request.postRequestWithClientInfo(basePath, "User", "GetUserByUserName", data);
+  return request.postRequest(basePath, "User", "GetUserByUserName", data);
+}
+// 通知公告列表
+export function getNoticeList(query) {
+  return request.postRequest(basePath,'Notice','GetList', query)
 }

BIN
src/assets/img/equip-1.jpg


BIN
src/assets/img/equip-2.jpg


BIN
src/assets/img/equip-3.png


BIN
src/assets/img/equip-4.jpg


BIN
src/assets/img/home-equip.jpg


+ 39 - 38
src/assets/styles/index.scss

@@ -120,7 +120,7 @@ body,
 
 .el-card {
   border-radius: 8px !important;
-
+  
   .header {
     display: flex;
     align-items: center;
@@ -245,48 +245,49 @@ body,
     }
   }
 
-  .link-list {
-    display: flex;
-    flex-direction: column;
-    height: 100%;
-    overflow-y: auto;
-
-    >ul {
-      flex: 1;
-
-      li {
-        display: flex;
-        justify-content: space-between;
-        padding: 12px;
-        border-bottom: 1px dashed #ebf1f6;
-        cursor: pointer;
-        transition: all 0.3s;
-
-        &:hover {
-          background-color: #e7f1ff;
-        }
-
-        div {
-          font-weight: 400;
-          font-size: 16px;
-          color: #585858;
-        }
-
-        span {
-          font-weight: 400;
-          font-size: 16px;
-          color: #b5c1d8;
-        }
+  
+}
+.link-list {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  overflow-y: auto;
+  >ul {
+    flex: 1;
+    li {
+      display: flex;
+      justify-content: space-between;
+      padding: 12px;
+      border-bottom: 1px dashed #ebf1f6;
+      cursor: pointer;
+      transition: all 0.3s;
+      &:hover {
+        background-color: #e7f1ff;
+      }
+      div {
+        font-weight: 400;
+        font-size: 16px;
+        color: #585858;
+        flex: 1;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+      }
+      span {
+        font-weight: 400;
+        font-size: 16px;
+        color: #b5c1d8;
+        flex: 0 0 90px;
+        text-align: right;
       }
     }
+  }
 
-    .el-pagination {
-      display: flex;
-      justify-content: center;
-    }
+  .el-pagination {
+    display: flex;
+    justify-content: center;
   }
 }
-
 .def-tabs-wrap {
   .el-tabs__nav-scroll {
     background: #f3f6fb;

+ 38 - 32
src/router.js

@@ -1,17 +1,18 @@
-import Vue from 'vue'
-import Router from 'vue-router'
+import Vue from "vue";
+import Router from "vue-router";
 import { getToken } from "@/utils/auth";
-import store from './store'
-import { getUserByUserName } from '@/api/login'
-import awaitTo from 'await-to-js'
+import store from "./store";
+import { getUserByUserName } from "@/api/login";
+import awaitTo from "await-to-js";
 
 Vue.use(Router);
 
 let router = new Router({
-  routes: [{
-      path: '/',
-      name: 'home',
-      component: () => import('./views/Home.vue')
+  routes: [
+    {
+      path: "/",
+      name: "home",
+      component: () => import("./views/Home.vue"),
     },
     {
       path: "/introduce",
@@ -19,12 +20,12 @@ let router = new Router({
       component: () => import("./views/Introduce.vue"),
     },
     {
-      path: '/news',
-      name: 'news',
+      path: "/news",
+      name: "news",
       meta: {
         // requireAuth: true
       },
-      component: () => import('./views/News.vue'),
+      component: () => import("./views/News.vue"),
     },
     {
       path: "/newsdetails/:id",
@@ -75,29 +76,34 @@ let router = new Router({
       component: () => import("./views/Download.vue"),
     },
     {
-      path: '/register',
-      name: 'register',
-      component: () => import('./views/Register.vue')
+      path: "/register",
+      name: "register",
+      component: () => import("./views/Register.vue"),
+    },
+    {
+      path: '/login',
+      name: 'login',
+      component: () => import('./views/Login.vue')
     },
     {
-      path: '/personal-center',
-      name: 'personal',
+      path: "/personal-center",
+      name: "personal",
       meta: {
-        requireAuth: true
+        requireAuth: true,
       },
-      component: () => import('./views/PersonalCenter.vue')
+      component: () => import("./views/PersonalCenter.vue"),
     },
     {
-      path: '/contact-us',
-      name: 'contactUs',
+      path: "/contact-us",
+      name: "contactUs",
       meta: {
-        requireAuth: true
+        requireAuth: true,
       },
-      component: () => import('./views/ContactUs.vue')
+      component: () => import("./views/ContactUs.vue"),
     },
     {
-      path: '/admin',
-      name: 'admin',
+      path: "/admin",
+      name: "admin",
       meta: {
         requireAuth: true,
       },
@@ -155,18 +161,18 @@ let router = new Router({
 
 // 判断是否需要登录权限 以及是否登录
 router.beforeEach(async (to, from, next) => {
-  const token = getToken()
+  const token = getToken();
   // 拉取用户信息
-  if(token && !store.getters.userInfo.id) {
-    const [err, res] = await awaitTo(getUserByUserName())
-    if(err) return
-    store.dispatch('setUserInfo', res.data.userInfo)
+  if (token && !store.getters.userInfo.id) {
+    const [err, res] = await awaitTo(getUserByUserName());
+    if (err) return;
+    store.dispatch("setUserInfo", res.data.userInfo);
   }
   // 判断是否需要登录权限
   if (to.matched.some((res) => res.meta.requireAuth)) {
     // 判断是否登录
     if (token) {
-      next()
+      next();
     } else {
       // 没登录则跳转到登录界面
       next({
@@ -181,4 +187,4 @@ router.beforeEach(async (to, from, next) => {
   }
 });
 
-export default router
+export default router;

+ 3 - 2
src/utils/micro_request.js

@@ -1,7 +1,7 @@
 /*
  * @Date: 2021-11-27 15:27:19
  * @LastEditors: wanglj
- * @LastEditTime: 2025-01-10 09:40:12
+ * @LastEditTime: 2025-01-11 10:42:17
  * @FilePath: \labsop_website\src\utils\micro_request.js
  * @Description: file content
  */
@@ -11,6 +11,7 @@ import store from "@/store";
 import { getToken, getProject } from "@/utils/auth";
 import errorCode from "@/utils/errorCode";
 import Cookies from "js-cookie";
+import router from '../router'
 
 axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
 
@@ -177,7 +178,7 @@ function processResponse(res) {
       }
     ).then(() => {
       store.dispatch("logOut").then(() => {
-        location.reload();
+        router.push('/')
       });
     });
   } else if (code === 500) {

+ 1 - 0
src/views/ContactUs.vue

@@ -99,6 +99,7 @@ export default {
           font-weight: bold;
           font-size: 18px;
           color: #323232;
+          margin-bottom: 4px;
         }
         span {
           font-weight: 400;

+ 278 - 28
src/views/Home.vue

@@ -9,7 +9,7 @@
     </swiper>
     <div class="common-container">
       <el-container>
-        <header>
+        <!-- <header>
           <ul>
             <li>
               <img src=""
@@ -36,27 +36,141 @@
               </div>
             </li>
           </ul>
-        </header>
-        <div class="flex mt24">
-          <el-card class="flex-6">
-            <div slot="header" class="header">
-              <h4>通知公告</h4>
-              <el-button style="float: right; padding: 3px 0" type="text">查看更多</el-button>
-            </div>
-          </el-card>
-          <el-card class="flex-4 ml24">
-            <div slot="header" class="header">
-              <h4>卡片名称</h4>
-              <el-button style="float: right; padding: 3px 0" type="text">cha</el-button>
-            </div>
-          </el-card>
-        </div>
-        <el-card class="mt24">
-          <div slot="header" class="header">
-            <h4>卡片名称</h4>
-            <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
-          </div>
-        </el-card>
+        </header> -->
+        <el-row :gutter="12"
+                class="mt12">
+          <el-col :span="8">
+            <el-card>
+              <div slot="header"
+                   class="header">
+                <h4>通知公告</h4>
+              </div>
+              <div class="link-list">
+                <ul>
+                  <li v-for="item in noticeList"
+                      :key="item.id">
+                    <div>
+                      {{ item.noticeTitle }}
+                    </div>
+                    <span>{{ item.noticeTime.split(' ')[0] }}</span>
+                  </li>
+                </ul>
+              </div>
+            </el-card>
+          </el-col>
+          <el-col :span="8">
+            <el-card>
+              <div slot="header"
+                   class="header">
+                <h4>新闻动态</h4>
+              </div>
+              <div class="link-list">
+                <ul>
+                  <li v-for="item in noticeList"
+                      :key="item.id">
+                    <div>
+                      {{ item.noticeTitle }}
+                    </div>
+                    <span>{{ item.noticeTime.split(' ')[0] }}</span>
+                  </li>
+                </ul>
+              </div>
+            </el-card>
+          </el-col>
+          <el-col :span="8">
+            <el-card>
+              <div slot="header"
+                   class="header">
+                <h4>技术服务</h4>
+              </div>
+              <div class="link-list">
+                <ul>
+                  <li v-for="item in noticeList"
+                      :key="item.id">
+                    <div>
+                      {{ item.noticeTitle }}
+                    </div>
+                    <span>{{ item.noticeTime.split(' ')[0] }}</span>
+                  </li>
+                </ul>
+              </div>
+            </el-card>
+          </el-col>
+        </el-row>
+      </el-container>
+      <div class="equip">
+        <el-container>
+          <h2>主要设备</h2>
+          <p>中心集中了学校大型贵重仪器设备,实现实验设施、仪器设备、实验方法和实验技术的优势互补、资源共享。拥有各类仪器设备240余台件,价值省内同类科研领域领先水平。</p>
+          <ul>
+            <li>
+              <img src="../assets/img/equip-1.jpg" />
+              <span>超敏多因子电化学发光分析仪</span>
+            </li>
+            <li>
+              <img src="../assets/img/equip-2.jpg" />
+              <span>多功能酶标仪</span>
+            </li>
+            <li>
+              <img src="../assets/img/equip-3.png" />
+              <span>微流控毛细管电泳系统</span>
+            </li>
+            <li>
+              <img src="../assets/img/equip-4.jpg" />
+              <span>全自动核酸提取纯化仪</span>
+            </li>
+          </ul>
+        </el-container>
+      </div>
+      <el-container class="mb12">
+        <el-row :gutter="12">
+          <el-col :span="9">
+            <el-card>
+              <div slot="header"
+                   class="header">
+                <h4>规章制度</h4>
+              </div>
+              <div class="link-list">
+                <ul>
+                  <li v-for="item in institutionList"
+                      :key="item.id">
+                    <div>
+                      {{ item.title }}
+                    </div>
+                    <span>{{ item.time }}</span>
+                  </li>
+                </ul>
+              </div>
+            </el-card>
+          </el-col>
+          <el-col :span="9">
+            <el-card>
+              <div slot="header"
+                   class="header">
+                <h4>下载专区</h4>
+              </div>
+              <div class="link-list">
+                <ul>
+                  <li v-for="item in downloadList"
+                      :key="item.id">
+                    <div>
+                      {{ item.title }}
+                    </div>
+                    <span>{{ item.time }}</span>
+                  </li>
+                </ul>
+              </div>
+            </el-card>
+          </el-col>
+          <el-col :span="6">
+            <ul class="btn-list">
+              <li>大型仪器共享平台</li>
+              <li>安全准入考试系统</li>
+              <li>图书馆</li>
+              <li>教务管理</li>
+            </ul>
+          </el-col>
+        </el-row>
       </el-container>
     </div>
   </div>
@@ -64,6 +178,8 @@
  
 <script>
 import { swiper, swiperSlide } from "vue-awesome-swiper";
+import { getNoticeList } from "@/api/login";
+import to from "await-to-js";
 export default {
   name: "HelloWorld",
   components: {
@@ -109,6 +225,9 @@ export default {
           // }
         },
       },
+      noticeList: [],
+      institutionList: [],
+      downloadList: []
     };
   },
   created() {},
@@ -119,6 +238,48 @@ export default {
     },
   },
   mounted() {
+    this.getNotice();
+    this.getInstitutionList()
+    this.getDownloadList()
+  },
+  methods: {
+    async getNotice() {
+      const [err, res] = await to(getNoticeList());
+      if (err) return;
+      this.noticeList = res.data.list || [];
+    },
+    getInstitutionList() {
+      this.institutionList = [
+        {
+          title: "科研实验室管理工作例会制度",
+          time: "2024-06-03",
+        },
+        {
+          title: "《关于建立校级教学平台与校级教学平台建设方案》",
+          time: "2024-05-01",
+        },
+        {
+          title: "《关于建立校级教学平台与校级教学平台建设方案》",
+          time: "2024-05-01",
+        }
+      ]
+    },
+    getDownloadList() {
+      this.downloadList = [
+        {
+          title: "入室登记表-学生版",
+          time: "2024-11-15",
+        },
+        {
+          title: "实验管理中心细胞室使用申请表",
+          time: "2024-06-03",
+        },
+        {
+          title: "实验管理中心仪器设备使用申请表",
+          time: "2024-02-22",
+        }
+      ]
+    }
   },
 };
 </script>
@@ -149,7 +310,7 @@ export default {
     width: 1200px;
     margin-top: -50px;
     background: #ffffff;
-    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, .1);
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
     border-radius: 16px;
     position: relative;
     z-index: 999;
@@ -176,12 +337,101 @@ export default {
       }
     }
   }
-  .flex {
-    .flex-6 {
-      flex: 6;
+}
+.link-list {
+  height: 272px;
+  overflow: hidden;
+}
+.equip {
+  width: 100%;
+  height: 350px;
+  background: url(../assets/img/home-equip.jpg) center;
+  background-size: cover;
+  margin: 12px auto;
+  padding-top: 20px;
+  h2 {
+    color: #0066cc;
+    font-size: 28px;
+    line-height: 60px;
+    height: 60px;
+    display: block;
+    text-align: center;
+  }
+  p {
+    color: #0066cc;
+    font-size: 14px;
+    line-height: 24px;
+    text-align: center;
+  }
+  ul {
+    height: 220px;
+    display: flex;
+    li {
+      flex: 1;
+      margin: 10px;
+      position: relative;
+      overflow: hidden;
+      transition: all 0.3s;
+      cursor: pointer;
+      &:hover {
+        img {
+          transform: scale(1.2);
+        }
+        span {
+          background-color: #ea6914;
+        }
+      }
+      img {
+        width: 100%;
+        height: 200px;
+        transition: all 0.3s;
+      }
+      span {
+        position: absolute;
+        bottom: 0;
+        left: 0;
+        right: 0;
+        height: 40px;
+        line-height: 40px;
+        background: #0066cc;
+        opacity: 0.8;
+        text-align: center;
+        color: #fff;
+      }
+    }
+  }
+}
+.btn-list {
+  height: 374px;
+  display: flex;
+  flex-direction: column;
+  li {
+    flex: 1;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    color: #ffffff;
+    font-size: 20px;
+    font-weight: bold;
+    border-radius: 6px;
+    background: #11a0ac;
+    user-select: none;
+    cursor: pointer;
+    transition: all .3s;
+    &:hover {
+      opacity: .7;
+    }
+    & + li {
+      margin-top: 15px;
+    }
+    &:nth-child(2) {
+      background-color: #df9514;
+    }
+    &:nth-child(3) {
+      background-color: #1675d4;
     }
-    .flex-4 {
-      flex: 4;
+    &:nth-child(4) {
+      background-color: #cc1355;
     }
   }
 }

+ 174 - 24
src/views/PersonalCenter.vue

@@ -18,20 +18,67 @@
           <el-row class="flex mt12"
                   :gutter="12">
             <el-col :span="12">
-              <el-card header="科研仪器">
-
+              <el-card>
+                <div slot="header" class="header">
+                  <h4>科研仪器</h4>
+                </div>
+                <ul class="cage-list">
+                  <li>
+                    <header>
+                      <p>人类血液成分检测仪</p>
+                      <el-tag type="primary"
+                              size="mini">状态有效</el-tag>
+                    </header>
+                    <p>剩余次数:3次 累计使用:3次</p>
+                    <p>下次预约时间:2月1日</p>
+                  </li>
+                  <li>
+                    <header>
+                      <p>人类血液成分检测仪</p>
+                      <el-tag type="primary"
+                              size="mini">状态有效</el-tag>
+                    </header>
+                   <p>剩余次数:3次 累计使用:3次</p>
+                    <p>下次预约时间:2月1日</p>
+                  </li>
+                  <li>
+                    <header>
+                      <p>人类血液成分检测仪</p>
+                      <el-tag type="primary"
+                              size="mini">状态有效</el-tag>
+                    </header>
+                   <p>剩余次数:3次 累计使用:3次</p>
+                    <p>下次预约时间:2月1日</p>
+                  </li>
+                </ul>
               </el-card>
             </el-col>
             <el-col :span="12">
               <el-card header="通知公告">
-
+                <div slot="header" class="header">
+                  <h4>通知公告</h4>
+                </div>
+                <div class="link-list">
+                  <ul>
+                    <li v-for="item in noticeList"
+                        :key="item.id">
+                      <div>
+                        {{ item.noticeTitle }}
+                      </div>
+                      <span>{{ item.noticeTime.split(' ')[0] }}</span>
+                    </li>
+                  </ul>
+                </div>
               </el-card>
             </el-col>
           </el-row>
           <el-row class="flex mt12"
                   :gutter="12">
             <el-col :span="12">
-              <el-card header="科研平台">
+              <el-card>
+                <div slot="header" class="header">
+                  <h4>科研平台</h4>
+                </div>
                 <ul class="platform-list">
                   <li>
                     <div class="text">
@@ -45,7 +92,7 @@
                     <div class="btn">
                       <header>
                         <p>剩余时长</p>
-                        <p>2天18小时</p>
+                        <p class="remain-time">2天18小时</p>
                       </header>
                       小计:¥300
                     </div>
@@ -62,15 +109,17 @@
                     <div class="btn">
                       <header>
                         <p>剩余时长</p>
-                        <p>2天18小时</p>
+                        <p class="remain-time">2天18小时</p>
                       </header>
                       小计:¥300
                     </div>
                   </li>
                 </ul>
               </el-card>
-              <el-card header="笼位管理(共3个)"
-                       class="mt12">
+              <el-card class="mt12">
+                <div slot="header" class="header">
+                  <h4>笼位管理(共3个)</h4>
+                </div>
                 <ul class="cage-list">
                   <li>
                     <header>
@@ -103,8 +152,10 @@
               </el-card>
             </el-col>
             <el-col :span="12">
-              <el-card header="日程安排"
-                       class="calendar">
+              <el-card class="calendar">
+                <div slot="header" class="header">
+                  <h4>日程安排</h4>
+                </div>
                 <FullCalendar class="fullCalendar"
                               ref="fullCalendar" :options="calendarOptions" />
                 <ul>
@@ -114,8 +165,10 @@
                   <li>技术:约李老师进行第三次技术咨询</li>
                 </ul>
               </el-card>
-              <el-card header="费用统计"
-                       class="mt12 cost">
+              <el-card class="mt12 cost">
+                <div slot="header" class="header">
+                  <h4>费用统计</h4>
+                </div>
                 <div class="chart-container">
                   <div class="text">
                     <header>课题组:人血球免疫蛋白应用研究课题组</header>
@@ -130,11 +183,33 @@
               </el-card>
             </el-col>
           </el-row>
-          <el-row class="flex mt12"
+          <el-row class="flex mt12 technical"
                   :gutter="12">
             <el-col :span="24">
-              <el-card header="日程安排">
-
+              <el-card>
+                <div slot="header" class="header">
+                  <h4>技术服务</h4>
+                </div>
+                <p>技术服务 - No.123456  - 李老师</p>
+                <ul>
+                  <li>11-20:委托发起</li>
+                  <li>11-21:项目确定</li>
+                  <li>11-23:项目开始</li>
+                  <li>11-23:阶段性结果</li>
+                  <li>当前:结尾验收</li>
+                  <li>费用结算</li>
+                  <li>结果上传</li>
+                </ul>
+                <p>技术服务 - No.123456  - 李老师</p>
+                <ul>
+                  <li>11-20:委托发起</li>
+                  <li>11-21:项目确定</li>
+                  <li>11-23:项目开始</li>
+                  <li>11-23:阶段性结果</li>
+                  <li>当前:结尾验收</li>
+                  <li>费用结算</li>
+                  <li>结果上传</li>
+                </ul>
               </el-card>
             </el-col>
           </el-row>
@@ -152,6 +227,8 @@ import * as echarts from "echarts";
 import FullCalendar from '@fullcalendar/vue'
 import dayGridPlugin from '@fullcalendar/daygrid'
 import interactionPlugin from '@fullcalendar/interaction'
+import { getNoticeList } from "@/api/login";
+import to from "await-to-js";
 export default {
   name: "PersonalCenter",
   components: {
@@ -171,13 +248,7 @@ export default {
         },
         {
           label: "预约信息",
-        },
-        {
-          label: "通知模块",
-        },
-        {
-          label: "财务中心",
-        },
+        }
       ],
       routeList: [
         {
@@ -219,11 +290,13 @@ export default {
         events: [],
         dateClick: this.handleDateClick, // 当用户单击日期或时间时,触发该回调,触发此回调,您必须加载interaction插件
       },
+      noticeList: []
     };
   },
   mounted() {
     this.tabSelect(this.options[0], 0);
     this.initChart();
+    this.getNotice()
   },
   methods: {
     // 选择tab
@@ -232,6 +305,11 @@ export default {
       this.selectTab = { ...row };
       this.breadList = [...this.routeList, { name: this.selectTab.label }];
     },
+    async getNotice() {
+      const [err, res] = await to(getNoticeList());
+      if (err) return;
+      this.noticeList = res.data.list || [];
+    },
     initChart() {
       let chart = echarts.init(document.getElementById("chart"));
       const options = {
@@ -366,14 +444,20 @@ export default {
       height: 300px;
     }
   }
+  &.technical .el-card{
+    height: auto;
+    ::v-deep .el-card__body {
+      height: auto;
+    }
+  }
 }
 .cage-list {
   display: flex;
   flex-wrap: wrap;
   list-style: none;
   li {
-    height: 138px;
-    width: 198px;
+    height: 160px;
+    width: 221px;
     font-size: 14px;
     border: 1px solid #ebeef5;
     border-radius: 6px;
@@ -403,6 +487,33 @@ export default {
   li {
     flex: 1;
     display: flex;
+    align-items: center;
+    margin: 12px;
+    border-radius: 8px;
+    overflow: hidden;
+    border: 1px solid #ebeef5;
+    .text {
+      flex: 1;
+      height: 100%;
+      padding: 12px;
+    }
+    .btn {
+      width: 120px;
+      height: 100%;
+      color: #fff;
+      font-size: 20px;
+      background-color: #73b9b9;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: space-around;
+      header {
+        font-size: 14px;
+      }
+      .remain-time {
+        color: #F56C6C;
+      }
+    }
   }
 }
 .chart-container {
@@ -433,4 +544,43 @@ export default {
     height: 220px;
   }
 }
+.technical {
+  p {
+    font-size: 16px;
+    height: 24px;
+    line-height: 24px;
+  }
+  ul {
+    display: flex;
+    height: 50px;
+    line-height: 50px;
+    border-radius: 4px;
+    overflow: hidden;
+    margin: 20px 0;
+    li {
+      flex: 1;
+      text-align: center;
+      background-color: #d9fba5;
+      box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
+      &:nth-child(2) {
+        background-color: #98ca49;
+      }
+      &:nth-child(3) {
+        background-color: #a4dffa;
+      }
+      &:nth-child(4) {
+        background-color: #48bff4;
+      }
+      &:nth-child(5) {
+        background-color: #b6b6f1;
+      }
+      &:nth-child(6) {
+        background-color: #ebcda7;
+      }
+      &:nth-child(7) {
+        background-color: #f2a4ad;
+      }
+    }
+  }
+}
 </style>

+ 6 - 2
src/views/Register.vue

@@ -124,7 +124,8 @@
             </el-select>
           </el-form-item>
           <el-form-item label="所在时间"
-                        prop="projectId">
+                        prop="projectId" 
+                        v-show="type === 'person'">
             <el-date-picker v-model="form.projectDate"
                             type="daterange"
                             class="w100"
@@ -137,7 +138,7 @@
         <div class="buttons">
           <el-button size="mini"
                      v-if="active > 0"
-                     @click="nextStep">上一步</el-button>
+                     @click="preStep">上一步</el-button>
           <el-button size="mini"
                      type="primary"
                      @click="nextStep">下一步</el-button>
@@ -250,6 +251,9 @@ export default {
       const nodes = this.$refs.casc.getCheckedNodes();
       this.form.deptName = nodes[0].label;
     },
+    preStep() {
+      this.active--
+    },
     nextStep() {
       if (this.active < 3) {
         let form = "loginInfoRef";