|
@@ -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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|