Explorar o código

修改企业详情

zs hai 1 ano
pai
achega
4b00844813
Modificáronse 2 ficheiros con 313 adicións e 165 borrados
  1. 2 1
      src/layout/index.vue
  2. 311 164
      src/views/company/detail.vue

+ 2 - 1
src/layout/index.vue

@@ -39,8 +39,9 @@
                 <template #dropdown>
                   <el-dropdown-menu>
                     <el-dropdown-item>发布需求</el-dropdown-item>
-                    <el-dropdown-item>发布成果</el-dropdown-item>
                     <el-dropdown-item>发布项目</el-dropdown-item>
+                    <el-dropdown-item>发布赛事</el-dropdown-item>
+                    <el-dropdown-item>发布成果</el-dropdown-item>
                   </el-dropdown-menu>
                 </template>
               </el-dropdown>

+ 311 - 164
src/views/company/detail.vue

@@ -3,7 +3,118 @@
     <el-row>
       <el-col :span="24" class="main animate__animated animate__backInRight" v-loading="loading">
         <div class="w_1200">
-          <el-col :span="24" class="one"> 企业详情 </el-col>
+          <el-col :span="24" class="one">
+            <el-col :span="24" class="oneText">
+              <el-col :span="4" class="left">
+                <el-image class="image" :src="info.url" fit="fill" />
+              </el-col>
+              <el-col :span="20" class="right">
+                <el-col :span="24" class="right_1">
+                  <el-col :span="4" class="tags">
+                    <el-tooltip effect="dark" :content="info.name" placement="top">
+                      {{ info.name || '暂无名称' }}
+                    </el-tooltip>
+                  </el-col>
+                  <el-col :span="16" class="tags">
+                    <el-tag :type="[info.status == '0' ? 'success' : 'info']">{{
+                      getDict(info.status, 'status')
+                    }}</el-tag>
+                  </el-col>
+                  <el-col :span="4" class="time" style="text-align: right">
+                    {{ info.create_time || '暂无' }}更新
+                  </el-col>
+                </el-col>
+                <el-col :span="24" class="right_2">
+                  <el-tag v-for="(val, indexs) in info.tags" :key="indexs" type="primary">{{
+                    val
+                  }}</el-tag>
+                </el-col>
+                <el-col :span="24" class="right_3">
+                  <el-col :span="8" class="info">
+                    统一社会信用代码:{{ info.code || '暂无' }}
+                  </el-col>
+                  <el-col :span="8" class="info">电话:{{ info.phone || '暂无' }}</el-col>
+                  <el-col :span="8" class="info"
+                    >所属行业:{{ getDict(info.field || '暂无技术领域', 'field') }}</el-col
+                  >
+                </el-col>
+                <el-col :span="24" class="right_3">
+                  <el-col :span="8" class="info"
+                    >法定代表人:{{ info.representative || '暂无' }}</el-col
+                  >
+                  <el-col :span="8" class="info">邮箱:{{ info.email || '暂无' }}</el-col>
+                  <el-col :span="8" class="info">员工人数:{{ info.number || '暂无' }}</el-col>
+                </el-col>
+                <el-col :span="24" class="right_3">
+                  <el-col :span="8" class="info">注册资本:{{ info.register || '暂无' }}</el-col>
+                  <el-col :span="8" class="info">官网:{{ info.email || '暂无' }}</el-col>
+                  <el-col :span="8" class="info">营业收入:{{ info.money || '暂无' }}</el-col>
+                </el-col>
+                <el-col :span="24" class="right_3">
+                  <el-col :span="8" class="info">成立日期:{{ info.create_time || '暂无' }}</el-col>
+                  <el-col :span="16" class="info">地址:{{ info.address || '暂无' }}</el-col>
+                </el-col>
+                <el-col :span="24" class="right_3">
+                  <el-col :span="24" class="two_3">
+                    <el-col :span="21" class="file" @click="toCollection">
+                      <el-icon><Star /></el-icon>
+                      收藏
+                    </el-col>
+                    <el-col :span="3" class="file">
+                      <a-button type="primary" @click="toChat"> 在线洽谈 </a-button>
+                    </el-col>
+                  </el-col>
+                </el-col>
+              </el-col>
+            </el-col>
+            <el-col :span="24" class="twoText">
+              <el-col :span="24" class="title">公司简介</el-col>
+              <el-col :span="24" class="brief">{{ info.brief || '暂无相关简介' }}</el-col>
+            </el-col>
+            <el-col :span="24" class="twoText">
+              <el-col :span="24" class="title">相关成果</el-col>
+              <el-col :span="24" class="content">
+                <a-list :loading="loading" :grid="{ gutter: 16, 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>
+                      </el-col>
+                      <el-col :span="24" class="two_1">
+                        <span>技术领域:</span>{{ getDict(item.field || '暂无技术领域', 'field') }}
+                      </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>{{ item.user || '暂无单位' }}
+                      </el-col>
+                      <el-col :span="24" class="bottom">
+                        <a-button size="small" type="primary" @click="toView(item)">
+                          查看详情
+                        </a-button>
+                      </el-col>
+                    </el-col>
+                  </template>
+                </a-list>
+                <el-col :span="24" class="page">
+                  <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>
+            </el-col>
+          </el-col>
         </div>
       </el-col>
     </el-row>
@@ -15,29 +126,49 @@
 import { get } from 'lodash-es'
 const $checkRes = inject('$checkRes')
 // 接口
-import { DemandStore } from '@/store/api/platform/demand'
+import { AchievementStore } from '@/store/api/platform/achievement'
 import { DictDataStore } from '@/store/api/system/dictData'
-const store = DemandStore()
+const store = AchievementStore()
 const dictDataStore = DictDataStore()
 import { UserStore } from '@/store/user'
 const userStore = UserStore()
 const user = computed(() => userStore.user)
+// 图片引入
+import science from '@/assets/bg.png'
 // 路由
 const route = useRoute()
 // 加载中
 const loading = ref(false)
-const info = ref({})
-const unit = ref({ name: '吉林大学', contacts: '陈老师' })
+const info = ref({
+  name: '努比亚技术有限公司 ',
+  url: science,
+  tags: ['战略投资', '国家高新技术企业', '创新型中小企业', '国家级专利奖'],
+  code: ' 914403007320587423',
+  phone: '075************',
+  type: '0',
+  representative: '倪飞',
+  email: 'xie.giang@nubia.com',
+  person: '1万人以上',
+  address: '深圳市南山区桃源街道福光社区留仙大道3370号南山智园崇文园区2号楼1801',
+  create_time: '2001-09-12',
+  status: '0'
+})
 // 字典表
-const methodList = ref([])
-const urgentList = ref([])
+const educationList = ref([])
 const fieldList = ref([])
-const demandList = ref([])
+const statusList = ref([])
+const titleList = ref([])
+// 成果列表
+const list = ref([])
+let skip = 0
+let limit = inject('limit')
+const total = ref(0)
 // 请求
 onMounted(async () => {
   loading.value = true
   await searchOther()
   await search()
+  await searchAchieve({ skip, limit })
   loading.value = false
 })
 const search = async () => {
@@ -47,31 +178,43 @@ const search = async () => {
     if (res.errcode == '0') info.value = res.data
   }
 }
+const searchAchieve = async (query = { skip: 0, limit }) => {
+  const info = {
+    skip: query.skip,
+    limit: query.limit,
+    is_use: '0',
+    status: '1'
+  }
+  const res = await store.query(info)
+  if (res.errcode == '0') {
+    list.value = res.data
+    total.value = res.total
+  }
+}
 const searchOther = async () => {
   let result
-  // 合作方式
-  result = await dictDataStore.query({ code: 'method', is_use: '0' })
-  if ($checkRes(result)) methodList.value = result.data
-  // 需求紧急度
-  result = await dictDataStore.query({ code: 'urgent', is_use: '0' })
-  if ($checkRes(result)) urgentList.value = result.data
+  // 学历
+  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
+  // 企业状态
+  result = await dictDataStore.query({ code: 'companyStatus', is_use: '0' })
+  if ($checkRes(result)) statusList.value = result.data
 }
 // 字典数据转换
 const getDict = (data, model) => {
   let res
-  if (model == 'method') res = methodList.value.find((f) => f.value == data)
-  else if (model == 'urgent') res = urgentList.value.find((f) => f.value == data)
+  if (model == 'education') res = educationList.value.find((f) => f.value == data)
   else if (model == 'field') res = fieldList.value.find((f) => f.value == data)
-  else if (model == 'demand') res = demandList.value.find((f) => f.value == data)
+  else if (model == 'title') res = titleList.value.find((f) => f.value == data)
+  else if (model == 'status') res = statusList.value.find((f) => f.value == data)
   return get(res, 'label')
 }
-// 时间
-const getTime = (data) => {
-  if (data) return `${data[0]} 至 ${data[1]}`
-}
 // 地区
 const getArea = (data) => {
   if (data) return data.join(',')
@@ -80,176 +223,180 @@ const getArea = (data) => {
 const toChat = () => {
   console.log('在线洽谈')
 }
-// 我要对接
-const toDocking = () => {
-  console.log('我要对接')
-}
 // 收藏
 const toCollection = () => {
   console.log('收藏')
 }
+const currentPage = ref(1)
+// 分页
+const changePage = (page = currentPage.value) => {
+  searchAchieve({ skip: (page - 1) * limit, limit: limit })
+}
+const sizeChange = (limits) => {
+  console.log(limits)
+  limit = limits
+  currentPage.value = 1
+  searchAchieve({ skip: 0, limit: limit })
+}
 </script>
 <style scoped lang="scss">
 .main {
+  background: #f7f7f7;
   .one {
-    margin: 10px 0 0 0;
-    background: #f7f7f7;
+    margin: 10px 0;
+    background-color: #fff;
     padding: 24px;
     border-top: 6px solid #2374ff;
     overflow: hidden;
     border-radius: 0 0 5px 5px;
 
-    .one_1 {
-      margin: 0 0 10px 0;
-
-      .title {
-        font-size: 18px;
-        font-weight: 700;
-        color: #383b40;
+    .oneText {
+      display: flex;
+      padding: 20px;
+      margin: 10px 0;
+      border-radius: 10px;
+      border: 1px solid #edeff2;
+      .left {
+        .image {
+          width: 150px;
+          height: 150px;
+          border-radius: 90px;
+        }
       }
-
-      .file {
-        display: flex;
-        align-items: center;
-        justify-content: end;
-        font-family: PingFangSC-Regular;
-        font-size: 14px;
-        color: #2374ff;
-        text-align: right;
+      .right {
+        padding: 5px;
+        .right_1 {
+          display: flex;
+          align-items: center;
+          .name {
+            word-break: break-all;
+            font-size: 18px;
+            font-family:
+              PingFangSC-Regular,
+              PingFang SC;
+            font-weight: 500;
+            line-height: 24px;
+            width: 175px;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            display: -webkit-box;
+            -webkit-line-clamp: 2;
+            -webkit-box-orient: vertical;
+          }
+          .tags {
+            grid-gap: 0.5rem;
+            gap: 0.5rem;
+            display: flex;
+            margin: 10px 0;
+          }
+          .time {
+            font-size: 14px;
+            font-family:
+              PingFangSC-Regular,
+              PingFang SC;
+            color: #666;
+          }
+        }
+        .right_2 {
+          grid-gap: 0.5rem;
+          gap: 0.5rem;
+          display: flex;
+          margin: 10px 0;
+        }
+        .right_3 {
+          display: flex;
+          margin: 10px 0;
+          font-size: 14px;
+          font-family:
+            PingFangSC-Regular,
+            PingFang SC;
+          color: #666;
+          .info {
+            span {
+              color: #2171f6;
+            }
+          }
+          .two_3 {
+            display: flex;
+            align-items: center;
+            .file {
+              display: flex;
+              align-items: center;
+              justify-content: flex-end;
+            }
+          }
+        }
       }
     }
-
-    .one_2 {
-      display: inline-block;
-      font-size: 12px;
-      background: rgba(18, 172, 117, 0.05);
-      color: #12ac75;
-      padding: 0 15px;
-      height: 20px;
-      line-height: 20px;
+    .twoText {
+      padding: 20px;
       border-radius: 10px;
-      margin-bottom: 2px;
-    }
-  }
-
-  .two {
-    background: #f9fafb;
-    border-radius: 2px;
-    padding: 30px;
-    margin: 34px 0 20px;
-    font-family: PingFangSC-Medium;
-    font-size: 14px;
-    color: #383b40;
-    line-height: 14px;
-  }
-
-  .thr {
-    margin: 0 0 10px 0;
-
-    .thr_1 {
-      width: 100%;
-      height: 40px;
-      line-height: 40px;
-      border-bottom: 2px solid #2374ff;
-      margin: 20px 0;
-      background: #f7f7f7;
+      margin: 10px 0;
+      border: 1px solid #edeff2;
 
-      p {
-        float: left;
-        padding: 0 20px;
-        height: 40px;
-        border-bottom: 2px solid #2374ff;
-        color: #fff;
-        font-size: 18px;
-        background: #2374ff;
+      .title {
+        font-size: 20px;
+        color: #383b40;
+        letter-spacing: 0;
+        line-height: 20px;
+        font-weight: 600;
+        margin-bottom: 30px;
       }
-    }
+      .content {
+        margin-top: 20px;
 
-    .thr_2 {
-      display: flex;
-      justify-content: space-between;
-      align-items: center;
-      background: #fff;
-      border: 1px solid #edeff2;
-      box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.03);
-      border-radius: 2px;
-      padding: 30px 20px;
-
-      .left {
-        .name {
-          height: 20px;
-          font-family: PingFangSC-Semibold;
-          font-size: 18px;
-          color: #383b40;
-          line-height: 20px;
-          font-weight: 700;
-          margin-bottom: 8px;
-        }
+        .list {
+          border: 1px solid #edeff2;
+          background: #fff;
+          box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.03);
+          border-radius: 2px;
+          width: 270px;
+          height: 180px;
+          margin-bottom: 15px;
+          cursor: pointer;
+          transition: all 0.3s;
+          padding: 15px;
+          .name {
+            font-size: 16px;
+            color: #121834;
+            height: 16px;
+            line-height: 13px;
+            font-weight: 500;
+            margin: 10px 0;
+          }
 
-        .other {
-          height: 14px;
-          font-family: PingFangSC-Medium;
-          font-size: 14px;
-          color: #383b40;
-          line-height: 14px;
-          font-weight: 700;
+          .name:hover {
+            color: #2374ff;
+          }
 
-          span {
-            height: 14px;
-            font-family: PingFangSC-Regular;
-            font-size: 14px;
-            color: #7e8288;
-            line-height: 14px;
+          .two_1 {
+            font-size: 12px;
+            text-align: justify;
+            line-height: 12px;
             font-weight: 400;
-            margin-right: 16px;
+            letter-spacing: 0;
+            color: #8f97a3;
+            margin-top: 15px;
+
+            span:last-child {
+              color: #525a68;
+            }
+          }
+          .bottom {
+            text-align: right;
           }
         }
-      }
-
-      .right {
-        display: flex;
-        justify-content: space-between;
-      }
-    }
-  }
 
-  .four {
-    margin: 0 0 10px 0;
-
-    .four_1 {
-      width: 100%;
-      height: 40px;
-      line-height: 40px;
-      border-bottom: 2px solid #2374ff;
-      margin: 20px 0;
-      background: #f7f7f7;
+        .list:hover {
+          background: #f0f7ff;
+          box-shadow: 0 0 16px rgba(205, 205, 205, 0.6);
+        }
 
-      p {
-        float: left;
-        padding: 0 20px;
-        height: 40px;
-        border-bottom: 2px solid #2374ff;
-        color: #fff;
-        font-size: 18px;
-        background: #2374ff;
-      }
-    }
-  }
-  .pointer {
-    display: flex;
-    align-items: center;
-    justify-content: flex-end;
-    font-family: PingFangSC-Regular;
-    font-size: 14px;
-    color: #7e8288;
-    margin: 10px 0 0 0;
-    .money {
-      margin: 0 10px 0 0;
-      span {
-        font-family: PingFangSC-Semibold;
-        font-size: 20px;
-        color: #e94643;
-        line-height: 20px;
+        .page {
+          display: flex;
+          flex-direction: row-reverse;
+          padding: 20px;
+        }
       }
     }
   }