zs 1 tahun lalu
induk
melakukan
32b15c2e07

+ 4 - 4
src/layout/index.vue

@@ -2,15 +2,15 @@
   <div class="common-layout">
     <div class="top">
       <el-row :gutter="20" align="middle">
-        <el-col :span="7" class="top_1">
+        <el-col :span="6" class="top_1">
           <el-image class="image" :src="siteInfo.logoUrl" fit="fill" />
           <div class="content">
             <text class="title">{{ siteInfo.zhTitle }}</text>
-            <text class="english">{{ siteInfo.zhBrief }}</text>
+            <!-- <text class="english">{{ siteInfo.zhBrief }}</text> -->
           </div>
         </el-col>
-        <el-col :span="13">
-          <a-tabs v-model:activeKey="current" size="large" @tabClick="selectMenu">
+        <el-col :span="14">
+          <a-tabs size="small" v-model:activeKey="current" @tabClick="selectMenu">
             <a-tab-pane v-for="item in menuList" :key="item.href" :tab="item.title"> </a-tab-pane>
           </a-tabs>
         </el-col>

+ 2 - 2
src/views/achievement/index.vue

@@ -308,7 +308,7 @@ const sizeChange = (limits) => {
       border-bottom: #9d9898 1px dashed;
 
       .left {
-        background: #778cb3;
+        background: #2280ff;
         border-radius: 15px;
         line-height: 26px;
         color: #fff;
@@ -344,7 +344,7 @@ const sizeChange = (limits) => {
     padding: 15px;
 
     .list {
-      margin-bottom: 30px;
+      margin-bottom: 10px;
       border-bottom: 1px solid #ebebeb;
       padding-bottom: 10px;
 

+ 19 - 9
src/views/company/index.vue

@@ -35,12 +35,16 @@
               </el-col>
               <el-col :span="20" class="right">
                 <el-col :span="24" class="right_1">
-                  <el-tooltip effect="dark" :content="item.name" placement="top">
-                    {{ item.name || '暂无名称' }}
-                  </el-tooltip>
-                  <el-tag :type="[item.status == '0' ? 'success' : 'info']">{{
-                    getDict(item.status, 'status')
-                  }}</el-tag>
+                  <el-col :span="4" class="tags">
+                    <el-tooltip effect="dark" :content="item.name" placement="top">
+                      {{ item.name || '暂无名称' }}
+                    </el-tooltip>
+                  </el-col>
+                  <el-col :span="2" class="tags">
+                    <el-tag :type="[item.status == '0' ? 'success' : 'info']">{{
+                      getDict(item.status, 'status')
+                    }}</el-tag>
+                  </el-col>
                 </el-col>
                 <el-col :span="24" class="right_2">
                   <el-tag v-for="(val, indexs) in item.tags" :key="indexs" type="primary">{{
@@ -204,7 +208,7 @@ const list = ref([
 ])
 let skip = 0
 let limit = inject('limit')
-const total = ref(20)
+const total = ref(0)
 // 字典表
 const fieldList = ref([])
 const statusList = ref([])
@@ -350,7 +354,7 @@ const sizeChange = (limits) => {
       border-bottom: #9d9898 1px dashed;
 
       .left {
-        background: #778cb3;
+        background: #2280ff;
         border-radius: 15px;
         line-height: 26px;
         color: #fff;
@@ -403,7 +407,7 @@ const sizeChange = (limits) => {
         padding: 5px;
         .right_1 {
           display: flex;
-          align-content: center;
+          align-items: center;
           .name {
             word-break: break-all;
             font-size: 18px;
@@ -419,6 +423,12 @@ const sizeChange = (limits) => {
             -webkit-line-clamp: 2;
             -webkit-box-orient: vertical;
           }
+          .tags {
+            grid-gap: 0.5rem;
+            gap: 0.5rem;
+            display: flex;
+            margin: 10px 0;
+          }
         }
         .right_2 {
           grid-gap: 0.5rem;

+ 3 - 3
src/views/demand/index.vue

@@ -92,7 +92,7 @@ const searchForm = ref({})
 const list = ref([])
 let skip = 0
 let limit = inject('limit')
-const total = ref(20)
+const total = ref(0)
 // 字典表
 const fieldList = ref([])
 const searchList = ref([
@@ -241,7 +241,7 @@ const sizeChange = (limits) => {
       border-bottom: #9d9898 1px dashed;
 
       .left {
-        background: #778cb3;
+        background: #2280ff;
         border-radius: 15px;
         line-height: 26px;
         color: #fff;
@@ -277,7 +277,7 @@ const sizeChange = (limits) => {
     padding: 15px;
 
     .list {
-      margin-bottom: 30px;
+      margin-bottom: 10px;
       border-bottom: 1px solid #ebebeb;
       padding-bottom: 10px;
 

+ 144 - 88
src/views/expert/index.vue

@@ -23,36 +23,42 @@
             </el-row>
           </el-col>
           <el-col :span="24" class="two">
-            <el-col
-              :span="24"
-              class="list"
-              v-for="(item, index) in list"
-              :key="index"
-              @click="toView(item)"
-            >
-              <el-col :span="24" class="name">
-                <el-tooltip effect="dark" :content="item.name" placement="top">
-                  {{ item.name || '暂无需求名称' }}
-                </el-tooltip>
-              </el-col>
-              <el-row class="other">
-                <el-col :span="8" class="other_1">
-                  <span>技术领域:</span>
-                  {{ getDict(item.field || '暂无技术领域', 'field') }}
-                </el-col>
-                <el-col :span="8" class="other_1">
-                  <span>需求地区:</span>
-                  {{ getArea(item.area || '暂无需求地区') }}
-                </el-col>
-                <el-col :span="8" class="other_1">
-                  <span>单位:</span>
-                  {{ item.user || '暂无单位' }}
+            <a-list :loading="loading" :grid="{ gutter: 14, column: 4 }" :data-source="list">
+              <template #renderItem="{ item }">
+                <el-col :span="24" class="list" @click="toView(item)">
+                  <el-col :span="24" class="name textOver">
+                    <el-tooltip effect="dark" :content="item.name" placement="top">
+                      {{ item.name || '暂无姓名' }}
+                    </el-tooltip>
+                    <div class="tags">
+                      <el-tag type="primary" v-if="item.title">{{
+                        getDict(item.title || '暂无', 'title')
+                      }}</el-tag>
+                      <el-tag type="success" v-if="item.education">{{
+                        getDict(item.education || '暂无', 'education')
+                      }}</el-tag>
+                    </div>
+                  </el-col>
+                  <el-col :span="24" class="two_1">
+                    <span>所在地区:</span>
+                    {{ getArea(item.area || '暂无地区') }}
+                  </el-col>
+                  <el-col :span="24" class="two_1">
+                    <span>技术领域:</span>
+                    {{ getDict(item.field || '暂无', 'field') }}
+                  </el-col>
+                  <el-col :span="24" class="two_1 textOver">
+                    <span>研究方向:</span>
+                    {{ item.direction || '暂无' }}
+                  </el-col>
+                  <el-col :span="24" class="bottom">
+                    <el-button @click="toChat(item)" type="primary" size="small">
+                      联络专家
+                    </el-button>
+                  </el-col>
                 </el-col>
-              </el-row>
-              <el-col :span="24" class="brief textOver">
-                {{ item.brief || '没有更多需求简介' }}
-              </el-col>
-            </el-col>
+              </template>
+            </a-list>
           </el-col>
           <el-col :span="24" class="thr">
             <el-pagination
@@ -77,9 +83,9 @@
 const $checkRes = inject('$checkRes')
 import { get } from 'lodash-es'
 // 接口
-import { DemandStore } from '@/store/api/platform/demand'
+// import { DemandStore } from '@/store/api/platform/demand'
 import { DictDataStore } from '@/store/api/system/dictData'
-const store = DemandStore()
+// const store = DemandStore()
 const dictDataStore = DictDataStore()
 // 图片引入
 import demand from '@/assets/innovation.png'
@@ -89,12 +95,33 @@ const router = useRouter()
 const loading = ref(false)
 const searchForm = ref({})
 // 列表
-const list = ref([])
+const list = ref([
+  {
+    brief: '简介',
+    name: '徐教授',
+    title: '0',
+    education: '0',
+    area: ['吉林省', '长春市'],
+    field: '0',
+    direction: '主要研究方向为渔业资源评估和管理、渔业海洋学,主要从事渔业采样'
+  },
+  {
+    brief: '简介',
+    name: '徐教授',
+    title: '0',
+    education: '0',
+    area: ['吉林省', '长春市'],
+    field: '0',
+    direction: '主要研究方向为渔业资源评估和管理、渔业海洋学,主要从事渔业采样'
+  }
+])
 let skip = 0
 let limit = inject('limit')
-const total = ref(20)
+const total = ref(0)
 // 字典表
+const educationList = ref([])
 const fieldList = ref([])
+const titleList = ref([])
 const searchList = ref([
   {
     title: '技术领域',
@@ -114,17 +141,14 @@ const searchList = ref([
     ]
   },
   {
-    title: '合作方式',
+    title: '职称',
     list: [
-      { value: '0', label: '全部' },
-      { value: '1', label: '技术开发' },
-      { value: '2', label: '技术咨询' },
-      { value: '3', label: '技术服务' },
-      { value: '4', label: '许可转让' },
-      { value: '4', label: '完全转让' },
-      { value: '4', label: '技术入股' },
-      { value: '4', label: '合作开发' },
-      { value: '4', label: '其他' }
+      { value: '0', label: '高级工程师' },
+      { value: '1', label: '副教授' },
+      { value: '2', label: '教授' },
+      { value: '3', label: '副研究员' },
+      { value: '4', label: '研究员' },
+      { value: '5', label: '讲师' }
     ]
   },
   {
@@ -157,17 +181,18 @@ const searchList = ref([
     ]
   },
   {
-    title: '需求状态',
+    title: '学历',
     list: [
-      { value: '0', label: '全部' },
-      { value: '1', label: '洽谈中' },
-      { value: '2', label: '已结束' }
+      { value: '0', label: '本科' },
+      { value: '1', label: '博士' },
+      { value: '2', label: '硕士' },
+      { value: '3', label: '研究生' }
     ]
   }
 ])
 // 查看
 const toView = (item) => {
-  router.push({ path: '/demand/detail', query: { id: item.id || item._id } })
+  router.push({ path: '/expert/detail', query: { id: item.id || item._id } })
 }
 // 请求
 onMounted(async () => {
@@ -178,28 +203,36 @@ onMounted(async () => {
 })
 const searchOther = async () => {
   let result
+  // 学历
+  result = await dictDataStore.query({ code: 'education', is_use: '0' })
+  if ($checkRes(result)) educationList.value = result.data
   // 技术领域
   result = await dictDataStore.query({ code: 'field', is_use: '0' })
   if ($checkRes(result)) fieldList.value = result.data
+  // 职称
+  result = await dictDataStore.query({ code: 'title', is_use: '0' })
+  if ($checkRes(result)) titleList.value = result.data
 }
 const search = async (query = { skip: 0, limit }) => {
-  const info = {
-    skip: query.skip,
-    limit: query.limit,
-    ...searchForm.value,
-    is_use: '0',
-    status: '1'
-  }
-  const res = await store.query(info)
-  if (res.errcode == '0') {
-    list.value = res.data
-    total.value = res.total
-  }
+  // const info = {
+  //   skip: query.skip,
+  //   limit: query.limit,
+  //   ...searchForm.value,
+  //   is_use: '0',
+  //   status: '1'
+  // }
+  // const res = await store.query(info)
+  // if (res.errcode == '0') {
+  //   list.value = res.data
+  //   total.value = res.total
+  // }
 }
 // 字典数据转换
 const getDict = (data, model) => {
   let res
+  if (model == 'education') res = educationList.value.find((f) => f.value == data)
   if (model == 'field') res = fieldList.value.find((f) => f.value == data)
+  if (model == 'title') res = titleList.value.find((f) => f.value == data)
   return get(res, 'label')
 }
 // 地区显示
@@ -241,7 +274,7 @@ const sizeChange = (limits) => {
       border-bottom: #9d9898 1px dashed;
 
       .left {
-        background: #778cb3;
+        background: #2280ff;
         border-radius: 15px;
         line-height: 26px;
         color: #fff;
@@ -271,48 +304,71 @@ const sizeChange = (limits) => {
   }
 
   .two {
-    margin-top: 20px;
-    background: #ffffff;
-    border-radius: 10px;
-    padding: 15px;
-
+    margin: 15px;
     .list {
-      margin-bottom: 30px;
-      border-bottom: 1px solid #ebebeb;
-      padding-bottom: 10px;
+      background: #fff;
+      box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.03);
+      border-radius: 2px;
+      width: 285px;
+      height: 195px;
+      margin-bottom: 15px;
+      cursor: pointer;
+      transition: all 0.3s;
+      padding: 20px;
 
       .name {
-        color: #337ab7;
-        font-size: 18px;
-        font-weight: bold;
-        display: inline-block;
-        margin: 10px 0;
+        display: flex;
+        align-items: center;
+        font-size: 16px;
+        color: #121834;
+        font-weight: 500;
+        margin: 5px 0 0 0;
+        .tags {
+          grid-gap: 0.5rem;
+          gap: 0.5rem;
+          display: flex;
+          margin: 0 0 0 10px;
+        }
       }
 
       .name:hover {
         color: #2374ff;
       }
 
-      .other {
-        padding: 5px 0;
+      .two_1 {
+        font-size: 12px;
+        text-align: justify;
+        line-height: 12px;
+        font-weight: 400;
+        letter-spacing: 0;
+        color: #8f97a3;
+        margin-top: 10px;
 
-        .other_1 {
-          font-family: 'PingFangSC-Light', 'Microsoft YaHei', 'WenQuanYi Micro Hei', arial,
-            sans-serif;
-          font-size: 12px;
-          font-weight: normal;
+        span:last-child {
+          color: #525a68;
         }
+      }
 
-        .other_1:hover {
-          color: #2374ff;
+      .bottom {
+        margin: 20px 10px;
+        text-align: right;
+        .button {
+          font-size: 12px;
+          color: #fff;
+          text-align: center;
+          line-height: 12px;
+          font-weight: 500;
+          padding: 5px 12px;
+          background: #2374ff;
+          box-shadow: 0 3px 6px 0 rgba(35, 116, 255, 0.1);
+          border-radius: 2px;
         }
       }
+    }
 
-      .brief {
-        line-height: 30px;
-        color: #666;
-        font-size: 14px;
-      }
+    .list:hover {
+      background: #f0f7ff;
+      box-shadow: 0 0 16px rgba(205, 205, 205, 0.6);
     }
   }
 

+ 42 - 2
src/views/home/index.vue

@@ -2,8 +2,15 @@
   <div id="index">
     <el-row>
       <el-col :span="24" class="main animate__animated animate__backInRight" v-loading="loading">
-        <el-col :span="24" class="science">
+        <el-col :span="24" class="home">
           <el-image class="image" :src="science" fit="fill" />
+          <div class="input">
+            <a-input v-model:value="searchValue" placeholder="请输入想要搜索的内容">
+              <template #suffix>
+                <SearchOutlined :style="{ fontSize: '30px', color: '#ffffff' }" />
+              </template>
+            </a-input>
+          </div>
         </el-col>
         <div class="w_1200">
           <el-col :span="24" class="one">
@@ -206,6 +213,7 @@ import moment from 'moment'
 const $checkRes = inject('$checkRes')
 import { get } from 'lodash-es'
 const selectMenu = inject('selectMenu')
+import { SearchOutlined } from '@ant-design/icons-vue'
 // 接口
 import { DictDataStore } from '@/store/api/system/dictData'
 import { ProjectStore } from '@/store/api/platform/project'
@@ -522,11 +530,43 @@ const toChat = (item) => {
 </script>
 <style scoped lang="scss">
 .main {
-  .science {
+  .home {
+    position: relative;
+
     .image {
       width: 100%;
       height: 200px;
     }
+
+    .input {
+      width: 900px;
+      position: absolute;
+      left: 30%;
+      bottom: 40%;
+
+      :deep(.ant-input-affix-wrapper) {
+        background-color: transparent;
+        border: 3px solid #fff !important;
+      }
+
+      :deep(.ant-input) {
+        height: 45px;
+        line-height: 45px;
+        font-family: PingFangSC-Regular;
+        font-size: 16px;
+        padding-right: 24px;
+
+        border: none !important;
+        outline: none !important;
+        box-shadow: 0 0 0 0 !important;
+        text-shadow: 0 0 0 0 !important;
+        background-color: transparent !important;
+
+        &::placeholder {
+          color: #ffffff !important;
+        }
+      }
+    }
   }
   .one {
     padding: 25px 0;

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

@@ -39,8 +39,8 @@
                     </el-dropdown>
                   </el-col>
                   <el-col :span="4" v-else class="right_3">
-                    <el-button @click="toLogin(1)" type="primary" size="small">登录</el-button>
-                    <el-button @click="toLogin(2)" type="primary" size="small">注册</el-button>
+                    <el-button @click="toCommon(1)" type="primary" size="small">登录</el-button>
+                    <el-button @click="toCommon(2)" type="primary" size="small">注册</el-button>
                   </el-col>
                 </el-row>
               </el-col>

+ 1 - 1
src/views/innovation/index.vue

@@ -151,7 +151,7 @@ const input = ref('')
 const list = ref([])
 let skip = 0
 let limit = inject('limit')
-const total = ref(20)
+const total = ref(0)
 const typeList = ref([])
 const formList = ref([])
 const statusList = ref([])

+ 2 - 2
src/views/project/index.vue

@@ -84,7 +84,7 @@ const searchForm = ref({})
 const list = ref([])
 let skip = 0
 let limit = inject('limit')
-const total = ref(20)
+const total = ref(0)
 // 字典表
 // 字典表
 const projectList = ref([])
@@ -243,7 +243,7 @@ const sizeChange = (limits) => {
       border-bottom: #9d9898 1px dashed;
 
       .left {
-        background: #778cb3;
+        background: #2280ff;
         border-radius: 15px;
         line-height: 26px;
         color: #fff;