尾部导航

This commit is contained in:
cxc
2022-11-17 17:29:47 +08:00
parent c2327f30cb
commit 7dc27a03ea
54 changed files with 956 additions and 433 deletions

View File

@ -1,6 +1,5 @@
<template>
<div class="activity" v-loading="loading">
<!-- <webReleaseActive v-model:dialogVisible="dialogVisible"></webReleaseActive> -->
<el-dialog title="发布活动" v-model="dialogVisible" width="380px">
<div class="contact-admin">
<qrcode-vue :value="`tel:${mobile}`" :size="300" level="H" />
@ -70,7 +69,7 @@
<p class="text_hidden">{{ item.title }}</p>
<div class="_time">活动时间{{ item.beginTime }}</div>
<div class="_time">收费金额{{ item.amount }}</div>
<div class="_info">
<div class="_info" style="visibility: hidden">
<!-- <span class="fl"
><span class="x_blue">{{ item.user }}</span> 人报名</span
> -->

View File

@ -119,7 +119,8 @@
</template>
<script setup>
import { onMounted, reactive } from "vue";
// TODO:成果搜索添加按成果介绍搜索,需求搜索添加按需求描述搜索,添加实验室搜索
import { onMounted, reactive, watch } from "vue";
import { banner } from "@/api/website/home/index";
import { useRouter } from "vue-router";
import { getAllCount } from "../../../../api/website/home";
@ -135,7 +136,7 @@ const router = useRouter();
const queryParams = reactive({
queryType: undefined,
keyword: "",
queryType: "1",
queryType: "2",
});
const queryRules = reactive({
queryType: [{ required: true, trigger: "change", message: "请选择搜索类型" }],
@ -148,7 +149,7 @@ const searchTypeList = ref([
"lab",
"patent",
"expert",
"serviceDemand",
// "serviceDemand",
"technologyDemand",
]);
// const patentQueryTypeList = ;
@ -179,13 +180,9 @@ const queryTypeList = [
{ value: "3", label: "通过关键词搜索" },
],
[{ value: "1", label: "通过标题搜索" }],
[{ value: "1", label: "通过标题搜索" }],
// [{ value: "1", label: "通过标题搜索" }],
];
const switchTab = (index) => {
state.tabIndex = index;
// queryParams.queryType = undefined
queryRef.value.resetFields("queryType");
};
const handleDetail = async (mode, keyword, queryType) => {
await queryRef.value.validate();
const routeData = router.resolve({
@ -213,8 +210,8 @@ const state = reactive({
"找实验室",
"找专利",
"找专家",
"接服务需求",
"接技术需求",
// "接服务需求",
"接需求",
],
tabIndex: 0,
banner: "",
@ -228,6 +225,22 @@ const state = reactive({
},
});
const switchTab = (index) => {
state.tabIndex = index;
// queryParams.queryType = undefined
// if(index)
queryRef.value.resetFields("queryType");
};
watch(
() => state.tabIndex,
(val) => {
console.log(val);
// return [2, 0][val];
queryParams.queryType = ["2", "1", "0", "2", "2", "1"][val];
},
{ immediate: true }
);
onMounted(() => {
banner({ locals: "首页背景" }).then((resp) => {
// console.log(resp);

View File

@ -213,7 +213,7 @@ const handleLogin = async () => {
userStore
.login(formData)
.then(() => {
router.push({ path: redirect.value || "/" });
router.push({ path: redirect.value || "/identity/index" });
})
.catch(() => {
loading.value = false;

View File

@ -23,10 +23,10 @@
<div>{{ state.expertDetail.introduce }}</div>
</template>
</achievementItem>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
<div class="detail">
<!-- <div style="padding: 20px 0">
@ -44,6 +44,7 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
@ -59,7 +60,8 @@ import productItem from "./components/productItem.vue";
import { searchAchievementDetail } from "../../../api/website/home";
import { useRoute, useRouter } from "vue-router";
import { reactive, ref } from "vue";
import docking from "./components/docking.vue";
const showDocking = ref(false);
const loading = ref(true);
const state = reactive({
pageNum: 1,

View File

@ -24,6 +24,14 @@
"未知"
}}</span>
</div>
<div class="line">
联系人
<span>中科云平台</span>
</div>
<div class="line">
联系方式(微信同号)
<span>18156053255</span>
</div>
</div>
<div>
<div class="keywords">
@ -86,7 +94,7 @@ function createdData(arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -0,0 +1,30 @@
<template>
<el-dialog
width="400px"
:modelValue="visible"
title="预约对接"
align-center
@close="closeDialog"
>
<p>如需对接请联系我们</p>
<p>联系人中科云平台</p>
<p>联系电话18156053255微信同号</p>
<template #footer>
<el-button type="primary" @click="closeDialog">关闭</el-button>
</template>
</el-dialog>
</template>
<script setup>
const props = defineProps({
visible: {
type: Boolean,
required: true,
},
});
const emit = defineEmits(["update:visible"]);
const closeDialog = () => {
emit("update:visible", false);
};
</script>

View File

@ -84,7 +84,7 @@ function createdData(arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -68,7 +68,7 @@ function createdData (arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -54,7 +54,7 @@ function createdData (arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -84,7 +84,7 @@ function createdData(arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -21,8 +21,12 @@
<span>{{ data.kind }}</span>
</div>
<div class="line">
联系方式
<span>{{ data.mobile }}</span>
联系
<span>中科云平台</span>
</div>
<div class="line">
联系方式(微信同号)
<span>18156053255</span>
</div>
</div>
<div>
@ -83,7 +87,7 @@ function createdData(arr) {
<style lang="scss" scoped>
.box {
width: 100%;
height: 190px;
// height: 190px;
background: #ffffff;
padding: 20px;
box-sizing: border-box;

View File

@ -63,10 +63,10 @@
:data="createdData(state.companyDetail.keywords)"
></wordcloud>
</div>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
</el-row>
</div>
@ -154,10 +154,12 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
<script setup>
import docking from "./components/docking.vue";
import webContact from "@/components/webContact/index.vue";
import request from "@/utils/request";
import { searchEnterpriseDetail } from "@/api/website/home";
@ -171,6 +173,7 @@ import { search } from "../../../api/website/home";
const router = useRouter();
const route = useRoute();
const loading = ref(true);
const showDocking = ref(false);
const state = reactive({
pageNum: 1,
pageSize: 4,
@ -233,9 +236,8 @@ function createdData(arr) {
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/enterprise/detail/${id}`,
query: { keyword: state.keyword, queryType: route.query.queryType },
query: { keyword: route.query.keyword, queryType: route.query.queryType },
});
// window.open(routeData.href, "_blank");
router.push(routeData);
}
@ -286,7 +288,8 @@ function getDataList() {
queryType: route.query.queryType,
}).then((resp) => {
const recommendList = resp.list.filter(
(el) => el.id != state.companyDetail.id
// (el) => el.id != state.companyDetail.id
(el) => el.id != id
);
state.list = recommendList;
state.total = resp.total;

View File

@ -19,10 +19,10 @@
<el-row type="flex" style="padding-bottom: 20px">
<div style="flex: 1">
<expertItem :data="state.expertDetail"></expertItem>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
<div class="detail">
<div style="padding: 20px 0">
@ -325,20 +325,23 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
<script setup>
import webContact from "@/components/webContact/index.vue";
import expertItem from "./components/expertItem.vue";
import loadMore from "./components/loadMore.vue";
import request from "@/utils/request";
// import loadMore from "./components/loadMore.vue";
// import request from "@/utils/request";
import { searchExpertDetail } from "@/api/website/home";
import { onMounted, reactive, ref } from "vue";
import searchContainer from "./components/searchContainer.vue";
import wordcloud from "./components/wordcloud.vue";
import productItem from "./components/productItem.vue";
// import wordcloud from "./components/wordcloud.vue";
// import productItem from "./components/productItem.vue";
import { useRoute, useRouter } from "vue-router";
import docking from "./components/docking.vue";
const showDocking = ref(false);
const router = useRouter();
const route = useRoute();
const loading = ref(true);
@ -361,103 +364,6 @@ const state = reactive({
activeName: "first",
});
// 建议 列表前4条
function recommend() {
return request({
url: "/v1/search",
method: "post",
data: {
mode: 5,
page_num: state.pageNum,
page_size: state.pageSize,
keyword: state.keyword,
},
});
}
// 专家详情
function expert(id) {
return request({
url: "/v1/manage/expert",
method: "post",
data: { expert_id: id },
});
}
// 合作成果
function achievement(data) {
return request({
url: "/v1/manage/expert/achievement",
method: "post",
data,
});
}
// 科研项目
function project(data) {
return request({
url: "/v1/manage/expert/project",
method: "post",
data,
});
}
// 代表专利
function patent(data) {
return request({
url: "/v1/manage/expert/patent",
method: "post",
data,
});
}
// 代表论文
function paper(data) {
return request({
url: "/v1/manage/expert/paper",
method: "post",
data,
});
}
// 合作企业
function cooperate(data) {
return request({
url: "/v1/manage/expert/cooperate",
method: "post",
data,
});
}
async function cooperateDetail(item, type) {
item["loading"] = true;
let { code, msg, data } = await request({
url: "/v1/manage/expert/cooperate/detail",
method: "post",
data: { id: item.id },
});
if (200 == code) {
item[type] = data[type];
}
item["loading"] = false;
}
function createdData(arr) {
let l = [];
let snap = JSON.parse(JSON.stringify(arr));
snap.map((e) => {
l.push({ name: e, value: 30 });
return { name: e, value: 30 };
});
return l;
}
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/0/detail/${id}`,
query: { keyword: state.keyword },
});
window.open(routeData.href, "_blank");
}
function handleList(mode, query) {
router.push({
path: `/searchList/${mode}`,
@ -507,7 +413,16 @@ function getDataList() {
// })
searchExpertDetail(id)
.then((resp) => {
state.expertDetail = resp.data;
const data = resp.data;
// data.expertDetail.introduce = data.expertDetail.introduce?.replace(
// "\n",
// "</br>"
// );
data.introduce = data.introduce
?.replaceAll("\n", "</br>")
?.replaceAll(" ", "&ensp;");
// console.log(data.introduce.replaceAll("\n", "</br>"));
state.expertDetail = data;
loading.value = false;
})
.catch(() => {

View File

@ -58,10 +58,10 @@
:data="createdData(state.patentDetail.keywords)"
></wordcloud>
</div>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
</el-row>
</div>
@ -145,6 +145,7 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
@ -157,6 +158,8 @@ import searchContainer from "./components/searchContainer.vue";
import wordcloud from "./components/wordcloud.vue";
import productItem from "./components/productItem.vue";
import { useRoute, useRouter } from "vue-router";
import docking from "./components/docking.vue";
const showDocking = ref(false);
const router = useRouter();
const route = useRoute();
const loading = ref(true);

View File

@ -62,10 +62,10 @@
:data="createdData(state.demandDetail.keywords)"
></wordcloud>
</div>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
</el-row>
</div>
@ -149,6 +149,7 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
@ -161,6 +162,8 @@ import searchContainer from "./components/searchContainer.vue";
import wordcloud from "./components/wordcloud.vue";
import productItem from "./components/productItem.vue";
import { useRoute, useRouter } from "vue-router";
import docking from "./components/docking.vue";
const showDocking = ref(false);
const router = useRouter();
const route = useRoute();
const loading = ref(true);

View File

@ -62,10 +62,10 @@
:data="createdData(state.demandDetail.keywords)"
></wordcloud>
</div>
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="btns">
<div class="order" @click="showDocking = true">预约对接</div>
<div class="share">一键分享</div>
</div> -->
</div>
</el-row>
</div>
@ -84,6 +84,7 @@
</el-row>
</template>
</searchContainer>
<docking v-model:visible="showDocking"></docking>
</div>
</template>
@ -96,6 +97,8 @@ import searchContainer from "./components/searchContainer.vue";
import wordcloud from "./components/wordcloud.vue";
import productItem from "./components/productItem.vue";
import { useRoute, useRouter } from "vue-router";
import docking from "./components/docking.vue";
const showDocking = ref(false);
const router = useRouter();
const route = useRoute();
const loading = ref(true);

View File

@ -99,6 +99,7 @@ import webFooter from "@/components/webFooter/index.vue";
import { banner } from "@/api/website/home/index";
import { useRoute, useRouter } from "vue-router";
import { getCase } from "@/api/website/solution";
// import { getCategory } from "../../../api/website/solution";
const router = useRouter();
@ -110,13 +111,13 @@ function handlePath(id) {
let moreData = ref([]);
const loading = ref(true);
const oneLevelTitle = ref({});
const modeDict = { small: 101, large: 102, government: 103, scientific: 104 };
const keyDict = {
small: "解决方案>中小型企业服务",
large: "解决方案>大型企业服务",
government: "解决方案>政府区域服务",
scientific: "解决方案>政府区域服务",
};
// const modeDict = { small: 101, large: 102, government: 103, scientific: 104 };
// const keyDict = {
// small: "解决方案>中小型企业服务",
// large: "解决方案>大型企业服务",
// government: "解决方案>政府区域服务",
// scientific: "解决方案>政府区域服务",
// };
const isShowMore = ref(false);
const activeId = ref("");
const itemRefs = [];
@ -141,18 +142,19 @@ onMounted(() => {
});
//
function initData() {
let name = route.params.name;
if (!name) return;
let mode = modeDict[name];
let key = keyDict[name];
async function initData() {
let name = route.query.name;
// if (!name) return;
let mode = route.params.mode;
// let key = keyDict[name];
getCase({ mode }).then((res) => {
state.caseList = res.data;
initScroll();
// loading.value = false;
});
loading.value = true;
banner({ locals: key })
banner({ locals: `解决方案>${name}` })
.then((resp) => {
state.banner = resp.data[0].images;
loading.value = false;

View File

@ -2,7 +2,7 @@
<div class="index">
<WebsiteHeader></WebsiteHeader>
<div class="content">
<router-view />
<router-view :key="route.fullPath" />
</div>
<el-backtop />
</div>
@ -10,6 +10,8 @@
<script setup name="WebsiteLayout">
import WebsiteHeader from "@/components/WebsiteHeader";
import { useRoute } from "vue-router";
const route = useRoute();
</script>
<style lang="scss" scoped>