zs 10 tháng trước cách đây
mục cha
commit
7490b156c3

BIN
public/images/bg-list_detail.jpg


BIN
public/images/bg-need-detail.jpg


BIN
public/images/icon-hzxq-state2.png


BIN
public/images/map.png


BIN
public/images/matchBg.jpg


BIN
public/images/match_6.jpg


BIN
public/images/new_4.png


+ 4 - 0
src/App.vue

@@ -12,6 +12,10 @@ body {
   width: 1200px;
   margin: 0 auto;
 }
+.w_1300 {
+  width: 1300px;
+  margin: 0 auto;
+}
 .textOne {
   overflow: hidden;
   text-overflow: ellipsis;

+ 6 - 3
src/components/custom/custom-layout.vue

@@ -75,7 +75,7 @@
         </div>
         <div class="right">
           <el-image class="image" :src="footInfo.Code" fit="fill" />
-          <div class="title">关于我们</div>
+          <div class="title" @click="toHelp">关于我们</div>
         </div>
       </div>
       <div class="footer_2">
@@ -109,7 +109,6 @@ const search = async () => {
     else val.hover = false
   }
   data.value = menuList
-  console.log(window.innerWidth)
   // 基础设置
   const result = await designStore.query({})
   if ($checkRes(result)) configInfo.value = result.data[0] || {}
@@ -125,6 +124,10 @@ const selectMenu = (item, query) => {
   }
   router.push({ path: `/${item}`, query })
 }
+// 关于我们
+const toHelp = () => {
+  router.push({ path: `/help` })
+}
 const handleMouseOver = (index) => {
   data.value[index].hover = true
   info.value = data.value[index]
@@ -174,7 +177,7 @@ const handleMouseLeave = (index) => {
         color: $global-color-107;
         cursor: pointer; /* 改变鼠标样式为手形 */
         span {
-          margin: 0 10px;
+          margin: 0 5px;
         }
       }
     }

+ 53 - 0
src/router/index.js

@@ -86,12 +86,65 @@ const router = createRouter({
       meta: { title: '产学研用协同创新数字化平台-行研产研' },
       component: () => import('@/views/thirteen/index.vue')
     },
+    {
+      path: '/news',
+      name: 'news',
+      meta: { title: '产学研用协同创新数字化平台-新闻列表' },
+      component: () => import('@/views/detail/news.vue')
+    },
+    {
+      path: '/news/detail',
+      name: 'newsDetail',
+      meta: { title: '产学研用协同创新数字化平台-新闻列表' },
+      component: () => import('@/views/detail/newsDetail.vue')
+    },
+    {
+      path: '/match/detail',
+      name: 'matchDetail',
+      meta: { title: '产学研用协同创新数字化平台-赛事详情' },
+      component: () => import('@/views/detail/matchDetail.vue')
+    },
+    {
+      path: '/demand/detail',
+      name: 'demandDetail',
+      meta: { title: '产学研用协同创新数字化平台-赛事详情' },
+      component: () => import('@/views/detail/demandDetail.vue')
+    },
+    {
+      path: '/project',
+      name: 'project',
+      meta: { title: '产学研用协同创新数字化平台-项目列表' },
+      component: () => import('@/views/detail/project.vue')
+    },
+    {
+      path: '/project/detail',
+      name: 'projectDetail',
+      meta: { title: '产学研用协同创新数字化平台-项目详情' },
+      component: () => import('@/views/detail/projectDetail.vue')
+    },
+    {
+      path: '/company',
+      name: 'company',
+      meta: { title: '产学研用协同创新数字化平台-企业列表' },
+      component: () => import('@/views/detail/company.vue')
+    },
+    {
+      path: '/company/detail',
+      name: 'companyDetail',
+      meta: { title: '产学研用协同创新数字化平台-企业详情' },
+      component: () => import('@/views/detail/companyDetail.vue')
+    },
     {
       path: '/login',
       name: 'login',
       meta: { title: '产学研用协同创新数字化平台' },
       component: () => import('@/views/login/index.vue')
     },
+    {
+      path: '/help',
+      meta: { title: '产学研用协同创新数字化平台-帮助中心' },
+      component: () => import('@/views/help/index.vue')
+    },
     {
       path: '/loading',
       name: 'loading',

+ 19 - 0
src/views/detail/company.vue

@@ -0,0 +1,19 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">首页 </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+</script>
+<style scoped lang="scss">
+.main {
+}
+</style>

+ 19 - 0
src/views/detail/companyDetail.vue

@@ -0,0 +1,19 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">首页 </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+</script>
+<style scoped lang="scss">
+.main {
+}
+</style>

+ 288 - 0
src/views/detail/demandDetail.vue

@@ -0,0 +1,288 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">
+      <div class="w_1200">
+        <div class="info_1"></div>
+        <div class="info_2">
+          <div class="area">
+            <el-icon color="#0085f5"><Location /></el-icon>
+            <span>{{ info.area || '暂无' }}</span>
+          </div>
+          <div class="name">{{ info.name || '暂无' }}</div>
+          <div class="other">
+            <span class="other_1">{{ info.type || '暂无' }}</span>
+            <div class="other_2">
+              <p>
+                资金预算:<span class="moeny">{{ info.money || '暂无' }}</span>
+              </p>
+              <p>
+                应用行业:<span>{{ info.field || '暂无' }} </span>
+              </p>
+              <p>
+                截止时间:<span class="time">{{ info.time || '暂无' }}</span>
+              </p>
+              <p>
+                联 系 人 :<span>{{ info.person || '暂无' }}</span>
+              </p>
+            </div>
+          </div>
+          <div class="state">待解决</div>
+        </div>
+        <div class="title"><i></i>需求描述</div>
+        <div class="info_3">
+          <p>{{ info.content || '暂无' }}</p>
+        </div>
+        <div class="title"><i></i>相关需求</div>
+        <div class="info_4">
+          <div class="list" v-for="(item, index) in list" :key="index" @click="toView(item)">
+            <h2 class="name textMore">
+              <span>{{ item.name || '暂无' }}</span>
+            </h2>
+            <div class="other">
+              <span class="other_1">{{ info.type || '暂无' }}</span>
+              <div class="other_2">
+                <span>应用行业:</span>
+                {{ info.field || '暂无' }}
+              </div>
+              <div class="other_2">
+                <span>资金预算:</span>
+                {{ info.money || '暂无' }}
+              </div>
+              <div class="other_2">
+                <el-icon color="#0085f5"><Location /></el-icon>
+                {{ info.area || '暂无' }}
+                <span class="state">{{ item.status }}</span>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import match_4 from '/images/match_4.jpg'
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+const info = ref({
+  name: '应用于空气膨胀压缩一体式制冷机的磁悬浮轴承关键技术需求',
+  money: '面议',
+  time: '2024-06-20',
+  field: '其他新能源',
+  person: '王**',
+  area: '吉林 长春市',
+  type: '技术难题',
+  status: '未解决',
+  content:
+    '磁悬浮轴承支撑的一体式制冷机电控系统研发、模拟测试平台研发,功率100kW,转速18 000-22 000 rpm,永磁电机效率大于95%'
+})
+const list = ref([
+  {
+    num: '1',
+    name: '关于异质结、钙钛矿电池的技术开发',
+    field: '其他新能源',
+    area: '吉林 长春市',
+    money: '100万元',
+    status: '未解决',
+    time: '2024-6-20'
+  },
+  {
+    num: '1',
+    name: '关于膜电极检测、双极板检测需求',
+    field: '其他新能源',
+    area: '吉林 长春市',
+    money: '100万元',
+    status: '未解决',
+    time: '2024-6-20'
+  },
+  {
+    num: '1',
+    name: '关于高效碱性电解槽的研发及集成需求',
+    field: '其他新能源',
+    area: '吉林 长春市',
+    money: '100万元',
+    status: '未解决',
+    time: '2024-6-20'
+  }
+])
+// 查看详情
+const toView = (item) => {
+  router.push({ path: '/demand/detail', query: { id: item.id || item._id } })
+}
+</script>
+<style scoped lang="scss">
+.main {
+  .one {
+    background: url(/images/bg-need-detail.jpg) no-repeat;
+    background-position: center top;
+    padding-bottom: 30px;
+    .info_1 {
+      padding: 30px 0;
+    }
+    .info_2 {
+      position: relative;
+      padding: 0 20px 0 50px;
+      background-color: #fff;
+      box-shadow: 0 0 13px 0 rgba(5, 88, 219, 0.18);
+      .area {
+        display: flex;
+        align-items: center;
+        justify-content: flex-end;
+        padding-top: 15px;
+        margin-right: 20px;
+        font-size: $global-font-size-16;
+        span {
+          margin: 0 0 0 5px;
+        }
+      }
+      .name {
+        margin-top: 15px;
+        font-size: $global-font-size-24;
+        line-height: 36px;
+        color: #2b2b2b;
+      }
+      .other {
+        margin-top: 25px;
+        .other_1 {
+          padding: 0 10px;
+          height: 25px;
+          background-color: #e6f2fd;
+          border-radius: 2px;
+          border: solid 1px #cae0f5;
+          font-size: $global-font-size-14;
+          line-height: 25px;
+          color: #0085f5;
+        }
+        .other_2 {
+          margin: 20px 0 0 0;
+          display: flex;
+          align-items: center;
+          flex-wrap: wrap;
+          p {
+            margin-right: 20px;
+            width: 45%;
+            font-size: $global-font-size-18;
+            color: #666;
+            .moeny {
+              font-family: keyifont;
+              color: #f60;
+            }
+            span {
+              color: #2b2b2b;
+            }
+          }
+        }
+      }
+      .state {
+        background: url(/images/icon-hzxq-state2.png);
+        position: absolute;
+        left: -36px;
+        top: 0;
+        padding: 17px 10px 0;
+        width: 36px;
+        height: 94px;
+        color: #fff;
+        font-size: $global-font-size-16;
+      }
+    }
+    .title {
+      margin-top: 30px;
+      font-size: $global-font-size-20;
+      line-height: 26px;
+      color: #333;
+      i {
+        display: inline-block;
+        vertical-align: middle;
+        margin-right: 20px;
+        width: 7px;
+        height: 22px;
+        background-color: #0085f5;
+        border-radius: 3px;
+      }
+    }
+    .info_3 {
+      margin-top: 20px;
+      padding: 50px;
+      background-color: #fff;
+      border: solid 1px #dedede;
+      font-size: $global-font-size-16;
+      line-height: 30px;
+      color: #333;
+    }
+    .info_4 {
+      display: flex;
+      margin-top: 20px;
+      .list {
+        position: relative;
+        margin-right: 30px;
+        width: 380px;
+        height: 233px;
+        box-shadow: 0 0 13px 0 rgba(5, 88, 219, 0.18);
+        .name {
+          padding: 10px 20px;
+          width: 380px;
+          height: 71px;
+          background-color: #dce5ff;
+          font-size: 16px;
+          line-height: 24px;
+          color: #0d0d0d;
+          display: flex;
+          align-items: center;
+        }
+        .other {
+          height: 162px;
+          padding: 10px 20px 0 20px;
+          .other_1 {
+            padding: 0 10px;
+            height: 25px;
+            background-color: #e6f2fd;
+            border-radius: 2px;
+            border: solid 1px #cae0f5;
+            font-size: $global-font-size-14;
+            line-height: 25px;
+            color: #0085f5;
+          }
+          .other_2 {
+            display: flex;
+            align-items: center;
+            margin-top: 15px;
+            font-size: $global-font-size-16;
+            span {
+              color: #909090;
+            }
+            .state {
+              position: absolute;
+              right: 20px;
+              bottom: 15px;
+              display: inline-block;
+              vertical-align: middle;
+              padding: 0 20px;
+              height: 30px;
+              line-height: 30px;
+              background-image: linear-gradient(90deg, #ff8a00 0, #ff5a00 100%),
+                linear-gradient(#ff7800, #ff7800);
+              background-blend-mode: normal, normal;
+              border-radius: 14px;
+              border: solid 1px #e5e5e5;
+              color: #fff;
+            }
+          }
+        }
+      }
+      .list:hover {
+        box-shadow: 0 0 5px 0 $global-color-107;
+        .name {
+          background-color: $global-color-107;
+          color: $global-color-fff;
+        }
+      }
+    }
+  }
+}
+</style>

+ 167 - 0
src/views/detail/matchDetail.vue

@@ -0,0 +1,167 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">
+      <div class="w_1200">
+        <div class="info_1">
+          <h3 class="name">{{ info.name || '暂无' }}</h3>
+          <p class="brief">{{ info.brief || '暂无' }}</p>
+          <div class="time">
+            <el-image class="image" :src="time" fit="fill"></el-image>
+            <span>{{ info.start_time || '暂无' }} ~ {{ info.end_time || '暂无' }}</span>
+          </div>
+          <div class="button">活动报名</div>
+        </div>
+        <div class="info_2">
+          <div class="title">活动介绍</div>
+          <div class="content">
+            <!-- 正文 -->
+            <div class="content_1">
+              {{ info.content || '暂无' }}
+            </div>
+            <!-- 封面 -->
+            <div class="image">
+              <el-image class="images" :src="info.url" fit="fill"></el-image>
+            </div>
+          </div>
+        </div>
+        <div class="info_3">
+          <div class="title">活动说明</div>
+          <div class="content">
+            <el-image class="images" :src="match_6" fit="fill"></el-image>
+            <div class="button">活动报名</div>
+          </div>
+        </div>
+      </div>
+    </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import time from '/images/time.png'
+import match_4 from '/images/match_4.jpg'
+import match_6 from '/images/match_6.jpg'
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+const info = ref({
+  name: '金牛区2024年就业创业大赛暨“骄创杯”大赛',
+  brief: '赢在成都·创在金牛',
+  start_time: '2024-05-27 00:00',
+  end_time: '2024-07-10 00:00',
+  url: match_4,
+  content:
+    '为落实国家创新驱动发展战略、就业优先战略及人才强国战略,鼓励创业带动就业,营造浓厚的创新创业氛围和良好的创业环境,搭建创新创业服务平台,决定举办“赢在成都·创在金牛”金牛区2024年科技创新、卫星互联网、大健康产业就业创业大赛暨“骄创杯”大赛。'
+})
+</script>
+<style scoped lang="scss">
+.main {
+  .one {
+    background: url(/images/matchBg.jpg) no-repeat;
+    background-position: center top;
+    .info_1 {
+      padding: 90px 80px 0 80px;
+      .name {
+        font-size: $global-font-size-36;
+        width: 50%;
+        font-weight: bold;
+      }
+      .brief {
+        font-size: $global-font-size-20;
+        margin-top: 25px;
+        color: #000;
+      }
+      .time {
+        display: flex;
+        margin-top: 60px !important;
+        color: #666;
+        .image {
+          margin: 0 5px 0 0;
+        }
+      }
+      .button {
+        margin-top: 70px !important;
+        justify-content: center;
+        display: flex !important;
+        align-items: center;
+        width: 136px;
+        height: 44px;
+        color: #fff;
+        font-size: 16px;
+        background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%),
+          linear-gradient(#0455da, #0455da);
+        background-blend-mode: normal, normal;
+        border-radius: 4px;
+      }
+    }
+    .info_2 {
+      padding: 0 80px;
+      margin-top: 70px !important;
+      .title {
+        color: #000;
+        display: inline-block;
+        margin-right: 80px;
+        padding-bottom: 20px;
+        font-size: $global-font-size-30;
+        color: #000000;
+        border-bottom: 5px solid #378cff;
+        cursor: pointer;
+      }
+      .content {
+        display: flex;
+        margin-top: 50px;
+        .content_1 {
+          width: 630px;
+          text-indent: 2em;
+          font-size: 16px;
+          line-height: 36px;
+          color: #333333;
+        }
+        .image {
+          margin-left: 66px;
+          width: 331px;
+          height: 182px;
+        }
+      }
+    }
+    .info_3 {
+      padding: 80px !important;
+      margin-top: 50px !important;
+      background: #fff;
+      .title {
+        color: #000;
+        display: inline-block;
+        margin-right: 80px;
+        padding-bottom: 20px;
+        font-size: $global-font-size-30;
+        color: #000000;
+        border-bottom: 5px solid #378cff;
+        cursor: pointer;
+      }
+      .content {
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        justify-content: center;
+        .button {
+          margin-top: 70px !important;
+          justify-content: center;
+          display: flex !important;
+          align-items: center;
+          width: 136px;
+          height: 44px;
+          color: #fff;
+          font-size: 16px;
+          background-image: linear-gradient(90deg, #0455da 0%, #378cff 100%),
+            linear-gradient(#0455da, #0455da);
+          background-blend-mode: normal, normal;
+          border-radius: 4px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 361 - 0
src/views/detail/news.vue

@@ -0,0 +1,361 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">
+      <div class="w_1300">
+        <el-col :span="24" class="one_1">
+          <h2 class="name">双高新闻资讯</h2>
+          <h5 class="remark">跟紧政策指引方向 &nbsp;&nbsp;&nbsp; 抓牢各地双高机遇</h5>
+          <div class="search">
+            <el-input
+              v-model="input1"
+              size="large"
+              placeholder="请输入关键字"
+              :suffix-icon="Search"
+            >
+              <template #append>
+                <el-button type="primary" size="large">搜索</el-button>
+              </template>
+            </el-input>
+          </div>
+        </el-col>
+        <el-col :span="24" class="one_2">
+          <el-col :span="24" class="two">
+            <el-col :span="18" class="left">
+              <el-col
+                :span="24"
+                class="list"
+                v-for="(item, index) in list"
+                :key="index"
+                @click="toView(item)"
+              >
+                <el-col :span="6" class="left">
+                  <el-image
+                    class="image"
+                    v-if="item.logo && item.logo.length > 0"
+                    :src="getUrl(item.logo)"
+                    fit="fill"
+                  >
+                    <template v-slot:error>
+                      <el-image class="image" :src="new_4" fit="fill" />
+                    </template>
+                  </el-image>
+                  <el-image class="image" v-else :src="new_4" fit="fill" />
+                </el-col>
+                <el-col :span="17" class="right">
+                  <el-col :span="24" class="right_1 textOver">
+                    {{ item.title || '暂无标题' }}
+                  </el-col>
+                  <el-col :span="24" class="right_2 textMore">
+                    <div v-html="removeHtmlStyle(item.content)"></div>
+                  </el-col>
+                  <el-col :span="24" class="right_3">
+                    {{ item.time || '暂无' }}
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="6" class="right">
+              <el-col :span="24" class="title">
+                <el-col :span="18" class="left">成果展示 </el-col>
+                <el-col :span="6" class="right" @click="toMore(0)"> 查看更多</el-col>
+              </el-col>
+              <el-col :span="24" class="content">
+                <a-timeline>
+                  <a-timeline-item
+                    v-for="(item, index) in achievementList"
+                    :key="index"
+                    @click="toCommon(item, '/achievement/detail')"
+                  >
+                    <div class="name textOver">{{ item.name }}</div>
+                    <div class="time">{{ item.time }}</div>
+                  </a-timeline-item>
+                </a-timeline>
+              </el-col>
+              <el-col :span="24" class="title">
+                <el-col :span="18" class="left">项目精选 </el-col>
+                <el-col :span="6" class="right" @click="toMore(1)"> 查看更多</el-col>
+              </el-col>
+              <el-col :span="24" class="content">
+                <a-timeline>
+                  <a-timeline-item
+                    v-for="(item, index) in projectList"
+                    :key="index"
+                    @click="toCommon(item, '/project/detail')"
+                  >
+                    <div class="name textOver">{{ item.name }}</div>
+                    <div class="time">{{ item.time }}</div>
+                  </a-timeline-item>
+                </a-timeline>
+              </el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="24" class="thr">
+            <el-pagination
+              background
+              layout="total, prev, pager, next"
+              :page-sizes="[10, 20, 50, 100, 200]"
+              :total="total"
+              :page-size="limit"
+              v-model:current-page="currentPage"
+              @current-change="changePage"
+              @size-change="sizeChange"
+            >
+            </el-pagination>
+          </el-col>
+        </el-col>
+      </div>
+    </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+// 接口
+import { NewsStore } from '@/store/api/platform/news'
+import { AchievementStore } from '@/store/api/platform/achievement'
+import { ProjectStore } from '@/store/api/platform/project'
+const store = NewsStore()
+const projectStore = ProjectStore()
+const achievementStore = AchievementStore()
+// 路由
+const router = useRouter()
+// 图片引入
+import new_4 from '/images/new_4.png'
+// 加载中
+const loading = ref(false)
+// 列表
+const list = ref([])
+let skip = 0
+let limit = inject('limit')
+const total = ref(0)
+const achievementList = ref([])
+const projectList = ref([])
+// 请求
+onMounted(async () => {
+  loading.value = true
+  await searchOther()
+  await search({ skip, limit })
+  loading.value = false
+})
+const searchOther = async () => {
+  const info = {
+    skip: 0,
+    limit: 6,
+    status: '1',
+    is_use: '0'
+  }
+  let res
+  res = await achievementStore.query(info)
+  if (res.errcode == '0') achievementList.value = res.data
+  res = await projectStore.query(info)
+  if (res.errcode == '0') projectList.value = res.data
+}
+const search = async (query = { skip: 0, limit }) => {
+  const info = {
+    skip: query.skip,
+    limit: query.limit,
+    status: '1',
+    is_use: '0'
+  }
+  const res = await store.query(info)
+  if (res.errcode == '0') {
+    list.value = res.data
+    total.value = res.total
+  }
+}
+// 查看
+const toView = (item) => {
+  router.push({ path: `/news/detail`, query: { id: item.id || item._id } })
+}
+// 查看更多
+const toMore = (type) => {
+  if (type == '0') router.push({ path: `/nine` })
+  else router.push({ path: `/project` })
+}
+// 详情
+const toCommon = (item, route) => {
+  router.push({ path: route, query: { id: item._id || item.id } })
+}
+const removeHtmlStyle = (html) => {
+  let relStyle = /style\s*?=\s*?([‘"])[\s\S]*?\1/g //去除样式
+  let relTag = /<.+?>/g //去除标签
+  let relClass = /class\s*?=\s*?([‘"])[\s\S]*?\1/g // 清除类名
+  let newHtml = ''
+  if (html) {
+    newHtml = html.replace(relStyle, '')
+    newHtml = newHtml.replace(relTag, '')
+    newHtml = newHtml.replace(relClass, '')
+  }
+  return newHtml
+}
+const currentPage = ref(1)
+// 分页
+const changePage = (page = currentPage.value) => {
+  search({ skip: (page - 1) * limit, limit: limit })
+}
+const sizeChange = (limits) => {
+  limit = limits
+  currentPage.value = 1
+  search({ skip: 0, limit: limit })
+}
+const getUrl = (item) => {
+  if (item) return `${import.meta.env.VITE_APP_HOST}${item[0].uri}`
+}
+</script>
+<style scoped lang="scss">
+.main {
+  .one {
+    background: url(/images/bg-list_detail.jpg) no-repeat;
+    .one_1 {
+      padding: 85px 0 0;
+      .name {
+        font-size: 33px !important;
+        font-weight: bold;
+        color: #ffffff;
+        text-align: center;
+      }
+      .remark {
+        margin: 27px 0 80px;
+        font-size: 14px;
+        color: #ffffff;
+        text-align: center;
+      }
+      .search {
+        margin: 0 auto;
+        width: 810px;
+        :deep(.el-input--large .el-input__inner) {
+          height: 60px !important;
+        }
+      }
+    }
+    .one_2 {
+      margin-top: 100px !important;
+      padding: 30px !important;
+      background-color: $global-color-fff;
+      .two {
+        display: flex;
+        width: 100%;
+        background-color: #fff;
+        border-radius: 10px;
+        .left {
+          .list {
+            display: flex;
+            align-items: center;
+            margin-bottom: 30px;
+            .left {
+              .image {
+                width: 216px;
+                height: 144px;
+              }
+            }
+            .right {
+              margin: 0 0 0 10px;
+              .right_1 {
+                height: 24px;
+                font-size: $global-font-size-20;
+                font-family:
+                  PingFangSC-Medium,
+                  PingFang SC;
+                font-weight: 500;
+                color: #111;
+                display: block;
+                line-height: 24px;
+                margin-bottom: 20px;
+              }
+              .right_2 {
+                margin-bottom: 20px;
+                height: 48px;
+                overflow: hidden;
+                font-size: $global-font-size-18;
+                font-family:
+                  PingFangSC-Regular,
+                  PingFang SC;
+                font-weight: 400;
+                color: #999;
+                line-height: 24px;
+                cursor: pointer;
+              }
+              .right_3 {
+                font-size: $global-font-size-14;
+                font-family:
+                  PingFangSC-Regular,
+                  PingFang SC;
+                font-weight: 400;
+                color: #999;
+                line-height: $global-font-size-14;
+                cursor: pointer;
+              }
+              .right_1:hover {
+                color: #2374ff;
+                cursor: pointer;
+              }
+            }
+          }
+        }
+        .right {
+          .title {
+            display: flex;
+            align-items: center;
+            justify-content: space-between;
+            background: linear-gradient(90deg, #d7e8ff, #fff);
+            width: 300px;
+            height: 64px;
+            padding-left: 21px;
+            box-sizing: border-box;
+            margin-bottom: 7px;
+            .left {
+              font-size: $global-font-size-26;
+              font-family:
+                PingFangSC-Medium,
+                PingFang SC;
+              font-weight: 500;
+              color: #111;
+              line-height: 24px;
+            }
+            .right {
+              text-align: right;
+              font-size: $global-font-size-16;
+              font-family:
+                PingFangSC-Regular,
+                PingFang SC;
+              font-weight: 400;
+              color: #666;
+              cursor: pointer;
+            }
+          }
+          .content {
+            margin: 10px 0 0 0;
+            .name {
+              max-height: 48px;
+              font-size: $global-font-size-18;
+              font-family:
+                PingFangSC-Medium,
+                PingFang SC;
+              font-weight: 500;
+              color: #111;
+              line-height: 24px;
+              display: block;
+              cursor: pointer;
+            }
+            .time {
+              margin-top: 8px;
+              font-size: $global-font-size-14;
+              font-family:
+                PingFangSC-Medium,
+                PingFang SC;
+              font-weight: 500;
+              color: #999;
+              line-height: 17px;
+              cursor: pointer;
+            }
+          }
+        }
+      }
+      .thr {
+        display: flex;
+        flex-direction: row-reverse;
+        padding: 20px;
+      }
+    }
+  }
+}
+</style>

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 398 - 0
src/views/detail/newsDetail.vue


+ 19 - 0
src/views/detail/project.vue

@@ -0,0 +1,19 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">首页 </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+</script>
+<style scoped lang="scss">
+.main {
+}
+</style>

+ 19 - 0
src/views/detail/projectDetail.vue

@@ -0,0 +1,19 @@
+<template>
+  <custom-layout class="main">
+    <el-col :span="24" class="one">首页 </el-col>
+  </custom-layout>
+</template>
+
+<script setup>
+import { UserStore } from '@/store/user'
+const userStore = UserStore()
+const user = computed(() => userStore.user)
+// 加载中
+const loading = ref(false)
+// 路由
+const router = useRouter()
+</script>
+<style scoped lang="scss">
+.main {
+}
+</style>

+ 3 - 7
src/views/five/index.vue

@@ -102,7 +102,7 @@
           </el-row>
         </el-col>
         <el-col :span="24" class="two_2">
-          <div class="list" v-for="(item, index) in list" :key="index" @click="toView(item)">
+          <div class="list" v-for="(item, index) in list" :key="index">
             <el-image class="image" :src="item.file" fit="cover"> </el-image>
             <div class="name">{{ item.name }}</div>
             <div class="other">
@@ -110,7 +110,7 @@
                 <el-image class="image" :src="time1" fit="fill" />
                 <div>{{ getTime(item.time) }}</div>
               </div>
-              <div class="button">查看 ></div>
+              <div class="button" @click="toView(item)">查看 ></div>
             </div>
           </div>
         </el-col>
@@ -694,7 +694,7 @@ const getDict = (data, model) => {
 }
 // 查看
 const toView = (item) => {
-  router.push({ path: '/innovation/detail', query: { id: item.id || item._id } })
+  router.push({ path: '/match/detail', query: { id: item.id || item._id } })
 }
 // 时间
 const getTime = (data) => {
@@ -756,10 +756,6 @@ const getUrl = (item) => {
 </script>
 <style scoped lang="scss">
 .main {
-  .w_1300 {
-    max-width: 1300px;
-    margin: 0 auto;
-  }
   .one {
     .image {
       width: 100%;

+ 13 - 9
src/views/four/parts/index.vue

@@ -3,7 +3,7 @@
     <el-col :span="24" class="one" v-loading="loadingTwo">
       <el-col :span="24" class="one_1">
         <el-col :span="12" class="left">汇聚各种行业政策法规</el-col>
-        <el-col :span="12" class="right">查看更多新闻</el-col>
+        <el-col :span="12" class="right" @click="toMore('0')">查看更多新闻</el-col>
       </el-col>
       <el-col :span="24" class="one_5">
         <el-col :span="3" class="left">
@@ -38,7 +38,7 @@
     <el-col :span="24" class="one" v-loading="loadingThr">
       <el-col :span="24" class="one_1">
         <el-col :span="12" class="left">汇聚科技创新的创新赛道</el-col>
-        <el-col :span="12" class="right">查看全部项目</el-col>
+        <el-col :span="12" class="right" @click="toMore('1')">查看全部项目</el-col>
       </el-col>
       <el-col :span="24" class="one_2">
         <el-col :span="4" class="left">
@@ -81,7 +81,7 @@
     <el-col :span="24" class="one" v-loading="loadingFour">
       <el-col :span="24" class="one_1">
         <el-col :span="12" class="left">汇聚各种行业的专家</el-col>
-        <el-col :span="12" class="right">查看更多专家</el-col>
+        <el-col :span="12" class="right" @click="toMore('2')">查看更多专家</el-col>
       </el-col>
       <el-col :span="24" class="one_3">
         <el-col :span="24" class="table_1">
@@ -139,7 +139,7 @@
     <el-col :span="24" class="one" v-loading="loadingFive">
       <el-col :span="24" class="one_1">
         <el-col :span="12" class="left">汇聚各类优质的企业</el-col>
-        <el-col :span="12" class="right">查看更多企业</el-col>
+        <el-col :span="12" class="right" @click="toMore('3')">查看更多企业</el-col>
       </el-col>
       <el-col :span="24" class="one_4">
         <el-col
@@ -190,7 +190,7 @@
     <el-col :span="24" class="one" v-loading="loadingSix">
       <el-col :span="24" class="one_1">
         <el-col :span="12" class="left">汇聚各类优质的成果</el-col>
-        <el-col :span="12" class="right">查看更多成果</el-col>
+        <el-col :span="12" class="right" @click="toMore('4')">查看更多成果</el-col>
       </el-col>
       <el-col :span="24" class="one_6">
         <el-col :span="10" class="left">
@@ -602,6 +602,14 @@ const toView = (item, type) => {
   else if (type == '4')
     router.push({ path: '/achievement/detail', query: { id: item.id || item._id } })
 }
+// 查看更多
+const toMore = (type) => {
+  if (type == '0') router.push({ path: '/news', query: { type } })
+  else if (type == '1') router.push({ path: '/project' })
+  else if (type == '2') router.push({ path: '/expert' })
+  else if (type == '3') router.push({ path: '/company' })
+  else if (type == '4') router.push({ path: '/nine' })
+}
 // 类型
 const mouseOver = async (item) => {
   active.value = item.type
@@ -630,10 +638,6 @@ const removeHtmlStyle = (html) => {
 </script>
 <style scoped lang="scss">
 .main {
-  .w_1300 {
-    margin: 0 auto;
-    width: 1300px;
-  }
   .home {
     position: relative;
 

+ 147 - 0
src/views/help/index.vue

@@ -0,0 +1,147 @@
+<template>
+  <custom-layout class="main" v-loading="loading">
+    <div class="w_1200">
+      <el-row class="help">
+        <el-col :span="6" class="left">
+          <a-menu
+            v-model:selectedKeys="selectedKeys"
+            style="width: 256px"
+            mode="inline"
+            :items="menuList"
+            @select="onOpenChange"
+          ></a-menu>
+        </el-col>
+        <el-col v-if="select === '1'" :span="18" class="right">
+          <h2>关于我们</h2>
+          <el-col :span="24" class="other">
+            <div v-html="configInfo.brief"></div>
+          </el-col>
+        </el-col>
+        <!-- <el-col v-else-if="select === '2'" :span="18" class="right">意见反馈</el-col> -->
+        <el-col v-else-if="select === '3'" :span="18" class="right">
+          <el-row :gutter="20">
+            <el-col :span="12" class="left">
+              <el-image class="image" :src="map" fit="fill" />
+            </el-col>
+            <el-col :span="12" class="right">
+              <el-col :span="24" class="other">
+                <el-icon color="#2374ff">
+                  <Message />
+                </el-icon>
+                <span>联系我们</span> {{ footInfo.Company }}
+              </el-col>
+              <el-col :span="24" class="other">
+                <el-icon color="#2374ff">
+                  <Location />
+                </el-icon>
+                <span>联系地址</span> {{ footInfo.Address }}
+              </el-col>
+              <el-col :span="24" class="other">
+                <el-icon color="#2374ff">
+                  <Iphone />
+                </el-icon>
+                <span>联系电话</span> {{ footInfo.Phone }}
+              </el-col>
+            </el-col>
+          </el-row>
+        </el-col>
+        <!-- <el-col v-else-if="select === '4'" :span="18" class="right">法律条款</el-col> -->
+      </el-row>
+    </div>
+  </custom-layout>
+</template>
+
+<script setup>
+import { footInfo } from '@/layout/site'
+const $checkRes = inject('$checkRes')
+// 接口
+import { DesignStore } from '@/store/api/platform/design'
+const designStore = DesignStore()
+// 图片引入
+import map from '/images/map.png'
+const route = useRoute()
+// 加载中
+const loading = ref(false)
+const selectedKeys = ref(['1'])
+const select = ref('1')
+const menuList = reactive([
+  {
+    key: '1',
+    label: '关于我们',
+    title: '关于我们'
+  },
+  // {
+  //   key: '2',
+  //   label: '意见反馈',
+  //   title: '意见反馈'
+  // },
+  {
+    key: '3',
+    label: '联系我们',
+    title: '联系我们'
+  }
+  // {
+  //   key: '4',
+  //   label: '法律条款',
+  //   title: '法律条款'
+  // }
+])
+const configInfo = ref({ footInfo: {} })
+// 请求
+onMounted(async () => {
+  loading.value = true
+  search()
+  loading.value = false
+})
+const search = async () => {
+  if (route.query.type) {
+    select.value = route.query.type
+    selectedKeys.value = [route.query.type]
+  }
+  // // 基础设置
+  // const result = await designStore.query({})
+  // if ($checkRes(result)) configInfo.value = result.data[0] || {}
+}
+const onOpenChange = (item) => {
+  select.value = item.key
+}
+</script>
+<style scoped lang="scss">
+.main {
+  .help {
+    padding: 10px 0;
+    min-height: 650px;
+
+    .left {
+      display: flex;
+      align-items: normal;
+    }
+
+    .right {
+      background: rgba(40, 77, 191, 0.03);
+      padding: 20px;
+
+      h2 {
+        font-size: 32px;
+        color: #284dbf;
+      }
+
+      .other {
+        margin-bottom: 10px;
+        font-family: PingFangSC-Regular;
+        font-size: $global-font-size-18;
+        color: #7e8288;
+        line-height: 25px;
+
+        span {
+          font-family: PingFangSC-Regular;
+          font-size: $global-font-size-18;
+          color: #383b40;
+          line-height: 25px;
+          margin: 0 5px;
+        }
+      }
+    }
+  }
+}
+</style>

+ 0 - 4
src/views/nine/index.vue

@@ -291,10 +291,6 @@ const toView = async (item) => {
 </script>
 <style scoped lang="scss">
 .main {
-  .w_1300 {
-    margin: 0 auto;
-    width: 1300px;
-  }
   .one {
     .image {
       width: 100%;

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 57 - 16
src/views/one/index.vue


+ 0 - 4
src/views/seven/index.vue

@@ -184,10 +184,6 @@ onMounted(async () => {
 .main {
   background: url(/images/pingtai.jpg) no-repeat top center;
   background-size: 100% 100%;
-  .w_1300 {
-    margin: 0 auto;
-    width: 1300px;
-  }
   .one {
     .image {
       width: 100%;

+ 0 - 4
src/views/six/index.vue

@@ -242,10 +242,6 @@ const sizeChange = (limits) => {
 </script>
 <style scoped lang="scss">
 .main {
-  .w_1300 {
-    max-width: 1300px;
-    margin: 0 auto;
-  }
   .one {
     .image {
       width: 100%;

+ 2 - 5
src/views/thr/index.vue

@@ -43,7 +43,7 @@ import { DemandStore } from '@/store/api/platform/demand'
 const demandStore = DemandStore()
 const dictDataStore = DictDataStore()
 // 路由
-const router = useRouter()
+const route = useRoute()
 // 字典表
 const isUseList = ref([])
 const statusList = ref([])
@@ -85,6 +85,7 @@ const toTab = async (status) => {
 }
 // 请求
 onMounted(async () => {
+  if (route.query.type) active.value = route.query.type
   getCity().then((response) => {
     cityList.value = response.address
   })
@@ -169,9 +170,5 @@ provide('cityList', cityList)
     background: url(/images/demand.png) no-repeat top center;
     background-size: 100% 100%;
   }
-  .w_1300 {
-    margin: 0 auto;
-    width: 1300px;
-  }
 }
 </style>

+ 12 - 1
src/views/thr/parts/demand.vue

@@ -60,7 +60,7 @@
           <div class="table-colunm">{{ item.money || '暂无' }}</div>
           <div class="table-colunm">{{ item.status || '暂无' }}</div>
           <div class="table-colunm">{{ item.time || '暂无' }}</div>
-          <div class="table-colunm">查看详情</div>
+          <div class="table-colunm button" @click="toView(item)">查看详情</div>
         </div>
       </div>
       <div class="demandTotal">
@@ -70,6 +70,7 @@
   </div>
 </template>
 <script setup>
+const router = useRouter()
 const plateList = inject('plateList')
 const typeList = inject('typeList')
 const cityList = inject('cityList')
@@ -186,6 +187,10 @@ const list = ref([
     time: '2024-6-20'
   }
 ])
+// 查看详情
+const toView = (item) => {
+  router.push({ path: '/demand/detail', query: { id: item.id || item._id } })
+}
 </script>
 <style scoped lang="scss">
 .demand {
@@ -272,6 +277,12 @@ const list = ref([
         .table-colunm2 {
           width: 220px !important;
         }
+        .button {
+          cursor: pointer; /* 改变鼠标样式为手形 */
+        }
+        .button:hover {
+          color: $global-color-107;
+        }
       }
       .value:nth-child(2n) {
         background-color: rgba(255, 255, 255, 0.1);

+ 12 - 1
src/views/thr/parts/supply.vue

@@ -60,7 +60,7 @@
           <div class="table-colunm">{{ item.money || '暂无' }}</div>
           <!-- <div class="table-colunm">{{ item.status || '暂无' }}</div> -->
           <div class="table-colunm">{{ item.time || '暂无' }}</div>
-          <div class="table-colunm">查看详情</div>
+          <div class="table-colunm button" @click="toView(item)">查看详情</div>
         </div>
       </div>
       <div class="demandTotal">
@@ -70,6 +70,7 @@
   </div>
 </template>
 <script setup>
+const router = useRouter()
 const plateList = inject('plateList')
 const typeList = inject('typeList')
 const cityList = inject('cityList')
@@ -186,6 +187,10 @@ const list = ref([
     time: '2024-6-20'
   }
 ])
+// 查看详情
+const toView = (item) => {
+  router.push({ path: '/demand/detail', query: { id: item.id || item._id } })
+}
 </script>
 <style scoped lang="scss">
 .demand {
@@ -272,6 +277,12 @@ const list = ref([
         .table-colunm2 {
           width: 220px !important;
         }
+        .button {
+          cursor: pointer; /* 改变鼠标样式为手形 */
+        }
+        .button:hover {
+          color: $global-color-107;
+        }
       }
       .value:nth-child(2n) {
         background-color: rgba(255, 255, 255, 0.1);

+ 6 - 6
src/views/two/index.vue

@@ -12,7 +12,7 @@
                 <el-image class="image" :src="xxzl" fit="fill"></el-image>
                 <span>需求列表</span>
               </div>
-              <div class="left_right">更多 ></div>
+              <div class="left_right" @click="toMore('0')">更多 ></div>
             </div>
             <div class="left_2">
               <div class="list" v-for="(item, index) in demandList" :key="index">
@@ -53,7 +53,7 @@
                 <el-image class="image" :src="xmdy" fit="fill"></el-image>
                 <span>供方列表</span>
               </div>
-              <div class="left_right">更多 ></div>
+              <div class="left_right" @click="toMore('1')">更多 ></div>
             </div>
             <div class="left_2">
               <div class="list" v-for="(item, index) in demandList" :key="index">
@@ -126,6 +126,10 @@ const demandList = ref([
   { url: url_11, title: '工业物联网', total: '101', follow: '63' },
   { url: url_12, title: '环保', total: '144', follow: '53' }
 ])
+// 查看更多
+const toMore = (type) => {
+  router.push({ path: '/thr', query: { type } })
+}
 </script>
 <style scoped lang="scss">
 .main {
@@ -136,10 +140,6 @@ const demandList = ref([
     background-position: center center;
     background-repeat: no-repeat;
     background-size: cover;
-    .w_1300 {
-      max-width: 1300px;
-      margin: 0 auto;
-    }
 
     .one_1 {
       display: flex;