This commit is contained in:
cxc
2022-10-31 17:46:09 +08:00
parent 652ce4c9d3
commit c2327f30cb
63 changed files with 1698 additions and 479 deletions

View File

@ -31,8 +31,8 @@
<script setup>
import wordcloud from "./wordcloud.vue";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const route = useRoute();
const router = useRouter();
const props = defineProps({
data: {
@ -50,7 +50,13 @@ function createdData(arr) {
return l;
}
function handleDetail(id) {
let routeData = router.resolve({ path: `/searchList/1/detail/${id}` });
let routeData = router.resolve({
path: `/searchList/enterprise/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
window.open(routeData.href, "_blank");
}
</script>
@ -62,7 +68,7 @@ function handleDetail(id) {
display: flex;
align-items: center;
justify-content: center;
img {
:deep(.el-image) {
width: 90px;
height: 90px;
border-radius: 50%;

View File

@ -55,9 +55,9 @@ import { insertClientUser, updateEnterprise } from "@/api/admin/enterprise";
// import { expert } from "@/api/identity/index";
import EnterpriseForm from "@/views/components/EnterpriseForm";
import { ElMessage } from "element-plus";
import { useRouter } from "vue-router";
// import { useRouter } from "vue-router";
const router = useRouter();
// const router = useRouter();
const data = reactive({
PersonalInfoForm: {}, // 个人基本资料
enterpriseInfoForm: {
@ -97,7 +97,6 @@ const data = reactive({
const { PersonalInfoForm, rules, enterpriseInfoForm } = toRefs(data);
const labelWidth = 140;
// let enterpriseInfoForm = ref({});
// 获取基础信息用于回显
const getBasicInfo = async () => {

View File

@ -125,6 +125,7 @@ const route = useRoute();
const data = reactive({
form: {
check: [],
status: 0,
},
queryParams: {
pageNum: 1,
@ -202,9 +203,20 @@ function addCheck() {
}
}
onActivated(() => {
onMounted(() => {
formRef.value.resetFields();
if (route.query.id) {
getDemand({ id: route.query.id }).then((resp) => {
if (resp.data.kinds) {
resp.data.kinds.forEach((el, index) => {
if (!checkList.find((item) => item.name == el)) {
checkList.push({
id: index,
name: el,
});
}
});
}
form.value = resp.data;
});
}

View File

@ -20,7 +20,7 @@
<el-row>
<el-col :span="24">
<!-- <el-checkbox label="0" @change="handleCheck">其他</el-checkbox> -->
<el-form-item label="需求类别:">
<el-form-item label="需求类别:" prop="kinds">
<el-checkbox-group v-model="form.kinds">
<el-checkbox
v-for="item in checkList"
@ -47,7 +47,6 @@
<el-row>
<el-col :span="24">
<el-form-item label="需求描述:" prop="introduce">
<!-- <Editor v-model="form.add" :minHeight="150" /> -->
<wangEditor
v-model="form.introduce"
width="100%"
@ -57,11 +56,6 @@
</el-col>
</el-row>
<!-- <CityOptions
v-model="form"
:labelWidth="labelWidth"
ref="cityForm"
/> -->
<FieldOptions
v-model="form"
:labelWidth="labelWidth"
@ -161,9 +155,13 @@
</el-col>
</el-row>
</el-form>
<div :style="{ marginLeft: labelWidth + 'px' }">
<!-- <div :style="{ marginLeft: labelWidth + 'px' }">
<el-button @click="router.go(-1)">取消</el-button>
<el-button type="primary" @click="submitForm">提交</el-button>
</div> -->
<div :style="{ marginLeft: labelWidth + 'px' }">
<el-button type="primary" @click="submitForm(3)">保存草稿</el-button>
<el-button type="primary" @click="submitForm(0)">提交审核</el-button>
</div>
</el-card>
</div>
@ -181,6 +179,7 @@ import {
updateTechnologyDemand,
insertTechnologyDemand,
} from "@/api/admin/enterprise/demand";
import { onMounted } from "vue";
const router = useRouter();
const route = useRoute();
const data = reactive({
@ -204,6 +203,9 @@ const data = reactive({
commitUserName: [
{ required: true, message: "需求提交人不能为空", trigger: "blur" },
],
kinds: [
{ required: true, message: "至少选择一个需求类别", trigger: "change" },
],
budget: [{ required: true, message: "需求预算不能为空", trigger: "blur" }],
deadline: [
{
@ -246,13 +248,14 @@ const formRef = ref(null);
const fieldFormRef = ref(null);
const directionsFormRef = ref(null);
const checkInput = ref("");
const submitForm = async () => {
const submitForm = async (status) => {
let formValid;
try {
formValid = await formRef.value.validate();
} catch (error) {
formValid = false;
}
form.value.status = status;
const fieldFormValid = await fieldFormRef.value.validateForm();
const directionsFormValid = await directionsFormRef.value.validateForm();
if (formValid && fieldFormValid && directionsFormValid) {
@ -303,16 +306,28 @@ function addCheck() {
checkInput.value = "";
}
}
onMounted(() => {
formRef.value.resetFields();
if (route.query.id) {
getTechnologyDemand({ id: route.query.id }).then((resp) => {
form.value = resp.data;
if (!form.value.kinds) {
form.value.kinds = resp.data.kind?.split(",") ?? [];
}
if (!form.value.wants) {
form.value.wants = resp.data.want?.split(",") ?? [];
}
});
}
if (route.query.id) {
getTechnologyDemand({ id: route.query.id }).then((resp) => {
form.value = resp.data;
if (!form.value.kinds) {
form.value.kinds = resp.data.kind?.split(",") ?? [];
form.value.kinds.forEach((el, index) => {
if (!checkList.find((item) => item.name == el)) {
checkList.push({
id: index,
name: el,
});
}
});
}
if (!form.value.wants) {
form.value.wants = resp.data.want?.split(",") ?? [];
}
});
}
});
</script>

View File

@ -1 +1,147 @@
<template></template>
<template>
<div class="app-container">
<el-radio-group
v-model="queryParams.searchType"
size="small"
@change="handleQuery"
>
<el-badge :value="12" class="count-badge" :hidden="true">
<el-radio-button label="1">企业</el-radio-button>
</el-badge>
<el-radio-button label="2">成果</el-radio-button>
<el-radio-button label="4">专利</el-radio-button>
<el-radio-button label="5">专家</el-radio-button>
<el-radio-button label="6">服务需求</el-radio-button>
<el-radio-button label="7">技术需求</el-radio-button>
<!-- <el-radio-button label="4">实验室</el-radio-button> -->
</el-radio-group>
<div v-if="dataList.length" style="margin-top: 20px" v-loading="loading">
<section v-for="item in dataList" :key="item.id">
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
<enterpriseItem
:data="item"
v-if="queryParams.searchType == 1"
></enterpriseItem>
<AchievementItem
:data="item"
v-else-if="queryParams.searchType == 2"
></AchievementItem>
<gainItem
:data="item"
v-else-if="queryParams.searchType == 4"
></gainItem>
<expertItem
:data="item"
v-else-if="queryParams.searchType == 5"
></expertItem>
<serviceDemandItem
:data="item"
v-else-if="queryParams.searchType == 6"
></serviceDemandItem>
<TechnologyDemandItem
:data="item"
v-else-if="queryParams.searchType == 7"
></TechnologyDemandItem>
</div>
</section>
</div>
<el-empty v-else></el-empty>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script setup name="Post">
import { search } from "@/api/website/home/index";
import gainItem from "@/views/website/searchList/components/gainItem.vue";
import expertItem from "@/views/website/searchList/components/expertItem.vue";
import serviceDemandItem from "@/views/website/searchList/components/serviceDemandItem.vue";
import enterpriseItem from "../../components/enterpriseItem.vue";
import TechnologyDemandItem from "@/views/website/searchList/components/technologyDemandItem.vue";
import AchievementItem from "@/views/website/searchList/components/achievementItem.vue";
import { useRoute, useRouter } from "vue-router";
import { watch } from "vue";
const route = useRoute();
const router = useRouter();
const dataList = ref([]);
const loading = ref(true);
const total = ref(0);
const queryType = computed(() => {
if (queryParams.value.searchType == 1) {
return 2;
} else if (queryParams.value.searchType == 2) {
return 1;
} else if (queryParams.value.searchType == 4) {
return 2;
} else if (queryParams.value.searchType == 5) {
return 2;
} else if (queryParams.value.searchType == 6) {
return 1;
} else if (queryParams.value.searchType == 7) {
return 1;
}
});
// router.replace({
// path: "/extension/results",
// query: {
// keyword: route.query.keyword,
// queryType: queryType,
// },
// });
// watch(
// queryType,
// (val) => {
// console.log(val);
// },
// { immediate: true }
// );
const data = reactive({
queryParams: {
pageNum: 1,
pageSize: 10,
query: route.query.keyword,
searchType: "1",
queryType: queryType,
},
});
const { queryParams } = toRefs(data);
/** 查询列表 */
async function getList() {
const resp = await search(queryParams.value);
dataList.value = resp.list;
total.value = resp.total;
loading.value = false;
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
handleQuery();
</script>
<style lang="scss" scoped>
.btn_info {
height: 35px;
line-height: 35px;
text-align: center;
color: #fff;
background-color: #787878;
}
:deep(.count-badge) {
z-index: 99;
}
</style>

View File

@ -17,9 +17,9 @@
size="small"
@change="handleQuery"
>
<el-radio-button :label="1">待受理</el-radio-button>
<el-radio-button :label="2">已受理</el-radio-button>
<el-radio-button :label="3">已结束</el-radio-button>
<el-radio-button :label="0">待受理</el-radio-button>
<el-radio-button :label="1">已受理</el-radio-button>
<el-radio-button :label="2">已结束</el-radio-button>
</el-radio-group>
<el-table v-loading="loading" :data="dataList" style="margin-top: 20px">
@ -45,7 +45,7 @@
>
<template #default="scope">
<el-button
v-if="queryParams.type == 3"
v-if="queryParams.type == 2"
size="small"
type="text"
icon="Delete"
@ -53,7 +53,7 @@
>删除</el-button
>
<el-button
v-if="queryParams.type == 1"
v-if="queryParams.type == 0"
size="small"
type="text"
icon="Close"
@ -61,7 +61,7 @@
>取消发布</el-button
>
<el-button
v-if="queryParams.type != 3"
v-if="queryParams.type != 2"
size="small"
type="text"
icon="View"

View File

@ -13,10 +13,10 @@
size="small"
@change="handleQuery"
>
<el-radio-button :label="1">已发布</el-radio-button>
<el-radio-button :label="0">待审核</el-radio-button>
<el-radio-button :label="1">已发布</el-radio-button>
<el-radio-button :label="2">已驳回</el-radio-button>
<!-- <el-radio-button :label="3">草稿箱</el-radio-button> -->
<el-radio-button :label="3">草稿箱</el-radio-button>
</el-radio-group>
<el-table v-loading="loading" :data="dataList" style="margin-top: 20px">
@ -54,13 +54,13 @@
<template #default="{ row }">
<router-link
:to="{ path: './releaseTechnology', query: { id: row.id } }"
v-if="queryParams.status == 0"
v-if="queryParams.status == 3"
>
<el-button size="small" type="text" icon="Edit">编辑</el-button>
</router-link>
<el-button
v-if="queryParams.status != 1"
v-if="queryParams.status != 0"
size="small"
type="text"
icon="Delete"
@ -68,15 +68,15 @@
>删除</el-button
>
<el-button
v-if="queryParams.status == 2"
v-if="queryParams.status == 1"
size="small"
type="text"
icon="View"
@click="handleResults(row.id)"
@click="handleResults(row)"
>查看匹配结果</el-button
>
<el-button
v-if="queryParams.status == 1"
v-if="queryParams.status == 0"
size="small"
type="text"
icon="Close"
@ -194,8 +194,13 @@ function handleShelf(row) {
})
.catch(() => {});
}
function handleResults(id) {
router.push({ path: "./results" });
function handleResults(row) {
router.push({
path: "./results",
query: {
keyword: row.title,
},
});
}
getList();
</script>

View File

@ -102,9 +102,10 @@ import {
import { ElMessage, ElMessageBox } from "element-plus";
import { onActivated } from "vue";
import { useRouter } from "vue-router";
import useUserStore from "@/store/modules/user";
const router = useRouter();
const userStore = useUserStore();
const dataList = ref([]);
const loading = ref(true);
const showSearch = ref(true);

View File

@ -35,7 +35,7 @@ const { form } = toRefs(data);
const releaseFormRef = ref();
const submitForm = async (is_submit) => {
form.value["status"] = is_submit;
console.log(await releaseFormRef.value.validateForm());
// console.log(await releaseFormRef.value.validateForm());
const isValid = await releaseFormRef.value.validateForm();
if (isValid) {
if (route.query.id) {

View File

@ -5,7 +5,9 @@
size="small"
@change="handleQuery"
>
<el-radio-button label="1">企业</el-radio-button>
<el-badge :value="12" class="count-badge" :hidden="true">
<el-radio-button label="1">企业</el-radio-button>
</el-badge>
<el-radio-button label="2">成果</el-radio-button>
<el-radio-button label="4">专利</el-radio-button>
<el-radio-button label="5">专家</el-radio-button>
@ -101,10 +103,10 @@ import serviceDemandItem from "@/views/website/searchList/components/serviceDema
import enterpriseItem from "../../components/enterpriseItem.vue";
import TechnologyDemandItem from "@/views/website/searchList/components/technologyDemandItem.vue";
import AchievementItem from "@/views/website/searchList/components/achievementItem.vue";
import { useRoute } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const route = useRoute();
const router = useRouter();
const dataList = ref([]);
const loading = ref(true);
const total = ref(0);
@ -137,6 +139,19 @@ const data = reactive({
const { queryParams } = toRefs(data);
watch(
queryType,
(val) => {
router.replace({
path: route.path,
query: {
keyword: route.query.keyword,
queryType: val,
},
});
},
{ immediate: true }
);
/** 查询列表 */
async function getList() {
const resp = await search(queryParams.value);
@ -175,4 +190,7 @@ handleQuery();
color: #fff;
background-color: #787878;
}
:deep(.count-badge) {
z-index: 99;
}
</style>

View File

@ -0,0 +1,168 @@
<template>
<div class="app-container">
<div class="card-panel surplus-currency" :class="flag ? 'vip-box' : ''">
<div class="_tit">
<span style="visibility: hidden"> 会员banner图 </span>
<div class="fr" v-if="flag">
<div class="text-right">
{{ vipData.vipType == 1 ? "VIP" : "SVIP" }}
</div>
<div class="text-right">续期</div>
<div>升级VIP</div>
</div>
<div class="text-right" style="margin-top: 50px" v-if="flag">
会员到期时间:{{ vipData.expireTime }}
</div>
</div>
<span
class="pointer"
style="font-size: 14px"
v-if="flag"
@click="vipBenefits"
>
查看会员权益
</span>
<p class="text-center pointer" v-else>开通VIP</p>
</div>
<!--
<div class="card-panel surplus-currency">
<span style="margin-right: 50px; font-size: 16px; font-weight: 700"
>剩余创新币98</span
>
<el-button class="x_btns">创新币充值</el-button>
</div> -->
<el-card style="margin-top: 20px">
<template #header>
<div>快捷功能</div>
</template>
<el-row :gutter="20">
<el-col :span="4">
<router-link to="/extension/release">
<div class="menu-item">
<el-avatar :icon="Box" />
<div class="title">发布产品</div>
</div>
</router-link>
</el-col>
<el-col :span="4">
<router-link to="/demand/releaseService">
<div class="menu-item">
<el-avatar :icon="Help" />
<div class="title">发布服务需求</div>
</div>
</router-link>
</el-col>
<el-col :span="4">
<router-link to="/demand/releaseTechnology">
<div class="menu-item">
<el-avatar :icon="Goods" />
<div class="title">发布技术需求</div>
</div>
</router-link>
</el-col>
</el-row>
</el-card>
<!-- <el-card style="margin-top: 20px">
<template #header>
<div>快捷功能</div>
</template>
<el-row :gutter="20">
<el-col :span="3">
<router-link to="/extension/release">
<el-card shadow="never" class="text-center pointer">
发布产品
</el-card>
</router-link>
</el-col>
<el-col :span="21">
<el-card shadow="never" class="text-center">文字简介</el-card>
</el-col>
</el-row>
<el-row :gutter="20" class="mt20">
<el-col :span="3">
<router-link to="/demand/released">
<el-card shadow="never" class="text-center pointer">
发布需求
</el-card>
</router-link>
</el-col>
<el-col :span="21">
<el-card shadow="never" class="text-center">技术需求</el-card>
</el-col>
</el-row>
</el-card> -->
</div>
</template>
<script setup>
import { reactive, ref, toRefs } from "vue";
import { getInfo } from "@/api/login";
import { useRouter } from "vue-router";
import { Box, Help, Goods } from "@element-plus/icons-vue";
const router = useRouter();
const flag = ref(false);
// const vip
let data = reactive({
vipData: {},
});
const { vipData } = toRefs(data);
const getVipData = async () => {
const { data } = await getInfo();
if (data.vip) {
flag.value = true;
vipData.value = data.vip;
} else {
flag.value = false;
}
};
getVipData();
const vipBenefits = () => {
router.push({
path: "/account/joinMembership",
});
};
</script>
<style lang="scss" scoped>
:deep(el-card__header) {
padding-top: 0;
padding-bottom: 0;
div {
height: 40px;
line-height: 40px;
}
}
.surplus-currency {
background-image: url("@/assets/index_banner.png");
margin-bottom: 20px;
height: 150px;
color: white;
background-color: #f2f2f2;
padding: 20px 50px;
._tit {
font-size: 24px;
font-weight: 700;
color: #bebebe;
div {
font-size: 18px;
// color: #000;
}
}
}
.vip-box {
height: auto;
// background-color: yellow;
}
.menu-item {
display: flex;
flex-direction: column;
align-items: center;
:deep(.el-avatar--icon) {
background-color: #409eff;
}
.title {
margin-top: 20px;
}
}
</style>

View File

@ -17,6 +17,7 @@
<el-form-item label="手机:" prop="mobile">
<el-input
v-model="PersonalInfoForm.mobile"
maxlength="11"
placeholder="请输入手机号"
/>
</el-form-item>
@ -51,7 +52,7 @@
</template>
<script setup>
// import { expert } from "@/api/identity/index";
import { getInfo } from "@/api/login";
import { getInfo } from "../../../../api/admin/expert/account";
import { insertClientUser } from "@/api/admin/enterprise";
import { updateExpert } from "@/api/admin/expert/account";
import ExpertForm from "@/views/components/ExpertForm";
@ -101,8 +102,13 @@ const labelWidth = 140;
// 获取基础信息用于回显
const getBasicInfo = async () => {
const { data } = await getInfo();
if (data.casExpert) {
if (data.casExpert.research)
data.casExpert.researchs = data.casExpert.research?.split(",") ?? [];
if (data.casExpert.area) data.casExpert.district = data.casExpert.area;
}
PersonalInfoForm.value = data.user ?? {};
expertForm.value = data.enterprise ?? {};
expertForm.value = data.casExpert ?? {};
};
getBasicInfo();
@ -129,9 +135,10 @@ const submitPersonalInfo = async () => {
async function submitExpertForm(status) {
const valid = await expertFormRef.value.validateForm();
if (valid) {
expertForm.value.area = expertForm.value.district;
updateExpert(expertForm.value).then((res) => {
ElMessage.success("新增成功");
router.back();
ElMessage.success("修改成功");
// router.back();
});
} else {
console.log("校验未通过");

View File

@ -23,19 +23,29 @@
show-overflow-tooltip
width="200"
/>
<el-table-column label="关联论文" align="center" prop="paper_title">
<template #default="scope">
<el-table-column
label="关联论文"
align="center"
prop="paperStr"
show-overflow-tooltip
>
<!-- <template #default="scope">
<div v-for="(item, index) in scope.row.paper_title" :key="index">
<div class="ellipsis" v-if="index <= 2">{{ item }}</div>
</div>
</template>
</template> -->
</el-table-column>
<el-table-column label="关联专利" align="center" prop="patent_title">
<template #default="scope">
<el-table-column
label="关联专利"
align="center"
prop="patentStr"
show-overflow-tooltip
>
<!-- <template #default="scope">
<div v-for="(item, index) in scope.row.patent_title" :key="index">
<div class="ellipsis text-left" v-if="index <= 2">{{ item }}</div>
</div>
</template>
</template> -->
</el-table-column>
<el-table-column label="创建日期" align="center" prop="created_at">
<template #default="scope">
@ -61,7 +71,7 @@
size="small"
type="text"
icon="Delete"
@click="handleDelete(scope.row)"
@click="handleDelete(scope.row.id)"
>删除</el-button
>
</template>
@ -107,17 +117,18 @@
v-for="item in paperOptions"
:key="item.id"
:label="item.title"
:value="item"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="关联专利:" prop="patents">
<el-select
@change="changePattent"
style="width: 100%"
v-model="form.patents"
value-key="id"
multiple
value-key="id"
filterable
remote
reserve-keyword
@ -130,7 +141,7 @@
v-for="item in patentOptions"
:key="item.id"
:label="item.title"
:value="item"
:value="item.id"
>
</el-option>
</el-select>
@ -155,8 +166,17 @@
// } from "@/api/admin/expert/demand";
// 专利,论文
// import { patentSelect, paperSelect } from "@/api/admin/expert/technology";
import {
getExpertCooperateEnterpriseList,
insertExpertCooperateEnterprise,
updateExpertCooperateEnterprise,
deleteExpertCooperateEnterpriseByIds,
} from "@/api/admin/expert/demand";
import { search } from "@/api/website/home";
import dayjs from "dayjs";
import { ElMessage, ElMessageBox } from "element-plus";
import { paperList } from "@/api/admin/expert/technology";
// const router = useRouter();
// const { proxy } = getCurrentInstance();
@ -170,8 +190,8 @@ const title = ref("");
const data = reactive({
form: {},
queryParams: {
page_num: 1,
page_size: 10,
pageNum: 1,
pageSize: 10,
mode: 1,
},
rules: {
@ -197,14 +217,15 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data);
// 论文
const paperOptions = ref([]);
// const paperStr = ref("");
const paperSelectLoading = ref(false);
const formRef = ref();
const paperMethod = (title) => {
if (title) {
paperSelectLoading.value = true;
paperSelect({ title }).then((res) => {
paperList({ title, pageNum: 1, pageSize: 10 }).then((res) => {
paperSelectLoading.value = false;
paperOptions.value = res.data;
paperOptions.value = res.rows;
});
} else {
paperOptions.value = [];
@ -216,9 +237,15 @@ const patentSelectLoading = ref(false);
const patentMethod = (title) => {
if (title) {
patentSelectLoading.value = true;
patentSelect({ title }).then((res) => {
search({
searchType: 4,
queryType: 1,
query: title,
pageNum: 1,
pageSize: 10,
}).then((res) => {
patentSelectLoading.value = false;
patentOptions.value = res.data;
patentOptions.value = res.list;
});
} else {
patentOptions.value = [];
@ -226,8 +253,16 @@ const patentMethod = (title) => {
};
/** 查询数据列表 */
function getList() {
async function getList() {
loading.value = true;
try {
const resp = await getExpertCooperateEnterpriseList(queryParams.value);
dataList.value = resp.rows;
total.value = resp.total;
loading.value = false;
} catch (error) {
loading.value = false;
}
// enterprise(queryParams.value).then((response) => {
// response.data.data.map((item) => {
// item.paper_title = item.paper_title.split("&&");
@ -237,13 +272,17 @@ function getList() {
// total.value = response.data.count;
// loading.value = false;
// });
loading.value = false;
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
const changePattent = (val) => {
console.log(12313);
console.log(val);
};
/** 重置按钮操作 */
// function resetQuery() {
// // if()
@ -254,7 +293,7 @@ function handleQuery() {
function handleDelete(id) {
ElMessageBox.confirm('是否确认删除数据编号为"' + id + '"的数据项?')
.then(function () {
return enterpriseDelete({ id: id });
return deleteExpertCooperateEnterpriseByIds(id);
})
.then(() => {
getList();
@ -288,20 +327,39 @@ function handleUpdate(row) {
let formData = Object.assign({}, row);
let papers = [];
let patents = [];
formData.papers.map((item, index) => {
formData.papers = row.paper ? row.paper.split(",") : [];
formData.patents = row.patent ? row.patent.split(",") : [];
//TODO: // formData.papers.map((item, index) => {
//TODO: // papers.push({
//TODO: // id: item,
//TODO: // title: formData.paper_title[index],
//TODO: // });
//TODO: // });
//TODO: // formData.patents.map((item, index) => {
//TODO: // patents.push({
//TODO: // id: item,
//TODO: // title: formData.patent_title[index],
//TODO: // });
//TODO: // });
const paperStrs = row.paperStr ? row.paperStr.split(",") : [];
formData.papers.forEach((el, index) => {
papers.push({
id: item,
title: formData.paper_title[index],
id: el,
title: paperStrs[index],
});
});
formData.patents.map((item, index) => {
const patentStrs = row.patentStr ? row.patentStr.split(",") : [];
formData.patents.forEach((el, index) => {
patents.push({
id: item,
title: formData.patent_title[index],
id: el,
title: patentStrs[index],
});
});
paperOptions.value = formData.papers = papers;
patentOptions.value = formData.patents = patents;
paperOptions.value = papers;
patentOptions.value = patents;
form.value = formData;
open.value = true;
title.value = "修改数据";
@ -314,25 +372,28 @@ function handleUpdate(row) {
function submitForm() {
formRef.value.validate((valid) => {
if (valid) {
let formData = Object.assign({}, form.value);
let papers = [];
let patents = [];
formData.papers.map((item) => {
papers.push(item.id);
});
formData.patents.map((item) => {
patents.push(item.id);
});
formData.papers = papers;
formData.patents = patents;
// let formData = Object.assign({}, form.value);
// let papers = [];
// let patents = [];
// formData.papers.map((item) => {
// papers.push(item.id);
// });
// formData.patents.map((item) => {
// patents.push(item.id);
// });
// formData.papers = papers;
// formData.patents = patents;
form.value.patent = form.value.patents.join(",");
form.value.paper = form.value.papers.join(",");
if (form.value.id != undefined) {
enterpriseEdit(formData).then((response) => {
updateExpertCooperateEnterprise(form.value).then((response) => {
ElMessage.success("修改成功");
open.value = false;
getList();
});
} else {
enterpriseAdd(formData).then((response) => {
insertExpertCooperateEnterprise(form.value).then((response) => {
ElMessage.success("新增成功");
open.value = false;
getList();

View File

@ -117,6 +117,7 @@ import { useRoute, useRouter } from "vue-router";
const data = reactive({
formData: {
check: [],
status: 0,
},
queryParams: {
pageNum: 1,
@ -176,7 +177,7 @@ function submitForm() {
formRef.value.validate(async (valid) => {
const cityFormValid = cityFormRef.value.validateForm(); // 城市
if (valid && cityFormValid) {
console.log(formData.value);
// console.log(formData.value);
if (formData.value.id) {
// updatePost(form.value).then((response) => {
// proxy.$modal.msgSuccess("修改成功");

View File

@ -17,9 +17,9 @@
size="small"
@change="handleQuery"
>
<el-radio-button :label="1">待受理</el-radio-button>
<el-radio-button :label="2">已受理</el-radio-button>
<el-radio-button :label="3">已结束</el-radio-button>
<el-radio-button :label="0">待受理</el-radio-button>
<el-radio-button :label="1">已受理</el-radio-button>
<el-radio-button :label="2">已结束</el-radio-button>
</el-radio-group>
<el-table v-loading="loading" :data="dataList" style="margin-top: 20px">

View File

@ -57,7 +57,7 @@
:show-overflow-tooltip="true"
/>
<!-- province--city--district -->
<el-table-column label="所属领域" prop="territory" />
<el-table-column label="所属领域" prop="territoryStr" />
<el-table-column label="联系人" prop="contactUser" />
<el-table-column label="联系电话" prop="contactPhone" />
<!-- <el-table-column label="创建日期" align="center" prop="created_at">
@ -117,13 +117,15 @@
<el-form-item label="联系电话:">
<el-input v-model="form.contactPhone" placeholder="默认专家电话" />
</el-form-item>
<div class="hide_required">
<el-form-item label="所在地">
<el-input v-model="form.address" placeholder="请输入所在地" />
</el-form-item>
<!-- <div class="hide_required">
<CityOptions v-model="form" :labelWidth="100" :is_required="false" />
</div>
</div> -->
<div class="hide_required">
<FieldSingle v-model="form" :labelWidth="100" :is_required="false" />
<FieldSingle v-model="form" :labelWidth="100" />
</div>
<el-form-item label="合作内容:" prop="content">
@ -248,14 +250,18 @@ function handleUpdate(row) {
reset();
form.value = cloneDeep(row);
form.value.industrys =
form.value.industrys?.split(",").filter((el) => el != "") ?? [];
form.value.territory
?.split("-")
.filter((el) => el != "")
.map((el) => parseInt(el)) ?? [];
showEditDialog.value = true;
title.value = "修改数据";
}
/** 提交按钮 */
function submitForm() {
formRef.value.validate(async (valid) => {
form.value.territory = form.value.industrys.join(",");
form.value.territory = form.value.industrys.join("-");
if (valid) {
if (form.value.id) {
await updateExpertWantEnterprise(form.value);

View File

@ -1,6 +1,6 @@
<template>
<div class="app-container">
<div class="card-panel surplus-currency" :class="flag ? 'vip-box' : ''">
<!-- <div class="card-panel surplus-currency" :class="flag ? 'vip-box' : ''">
<div class="_tit">
<span style="visibility: hidden"> 会员banner图 </span>
<div class="fr" v-if="flag">
@ -15,7 +15,7 @@
查看会员权益
</span>
<p class="text-center pointer" v-else>开通VIP</p>
</div>
</div> -->
<!--
<div class="card-panel surplus-currency">
<span style="margin-right: 50px; font-size: 16px; font-weight: 700"
@ -29,28 +29,22 @@
<div>快捷功能</div>
</template>
<el-row :gutter="20">
<el-col :span="3">
<el-col :span="4">
<router-link to="/extension/release">
<el-card shadow="never" class="text-center pointer">
发布产品
</el-card>
<div class="menu-item">
<el-avatar :icon="Box" />
<div class="title">发布产品</div>
</div>
</router-link>
</el-col>
<el-col :span="21">
<el-card shadow="never" class="text-center">文字简介</el-card>
</el-col>
</el-row>
<el-row :gutter="20" class="mt20">
<el-col :span="3">
<router-link to="/demand/released">
<el-card shadow="never" class="text-center pointer">
发布需求
</el-card>
<el-col :span="4">
<router-link to="/demand/release">
<div class="menu-item">
<el-avatar :icon="Help" />
<div class="title">发布需求</div>
</div>
</router-link>
</el-col>
<el-col :span="21">
<el-card shadow="never" class="text-center">技术需求</el-card>
</el-col>
</el-row>
</el-card>
</div>
@ -58,6 +52,7 @@
<script setup>
import { ref } from "vue";
import { Box, Help } from "@element-plus/icons-vue";
const flag = ref(true);
</script>
@ -92,4 +87,15 @@ const flag = ref(true);
height: auto;
// background-color: yellow;
}
.menu-item {
display: flex;
flex-direction: column;
align-items: center;
:deep(.el-avatar--icon) {
background-color: #409eff;
}
.title {
margin-top: 20px;
}
}
</style>

View File

@ -13,8 +13,8 @@
size="small"
@change="handleQuery"
>
<el-radio-button :label="1">已发布</el-radio-button>
<el-radio-button :label="0">待审核</el-radio-button>
<el-radio-button :label="1">已发布</el-radio-button>
<el-radio-button :label="2">已驳回</el-radio-button>
<el-radio-button :label="3">草稿箱</el-radio-button>
</el-radio-group>
@ -23,7 +23,7 @@
<el-table-column label="数据编号" prop="id" />
<el-table-column label="成果名称" prop="title" />
<el-table-column label="成果领域" prop="industryStr" />
<el-table-column label="浏览量" prop="visitCount" />
<!-- <el-table-column label="浏览量" prop="visitCount" /> -->
<el-table-column label="发布时间" prop="createTime" width="180">
<template #default="{ row }">
<span>
@ -61,7 +61,7 @@
size="small"
type="text"
icon="View"
@click="handleResults(row.id)"
@click="handleResults(row)"
>查看匹配结果</el-button
>
<el-button
@ -96,6 +96,7 @@ import { ElMessage, ElMessageBox } from "element-plus";
import { update } from "lodash-unified";
import { useRouter } from "vue-router";
import { updateExpertAchievement } from "@/api/admin/expert/achievement";
import { onActivated } from "vue";
const router = useRouter();
const dataList = ref([]);
const loading = ref(true);
@ -165,8 +166,16 @@ const handleCancelPublish = (id) => {
// queryParams.value.status = "3";
// handleQuery();
};
function handleResults(id) {
router.push({ path: "./results" });
function handleResults(row) {
router.push({
path: "./results",
query: {
keyword: row.title,
},
});
}
getList();
onActivated(() => {
getList();
});
</script>

View File

@ -0,0 +1,244 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryRef"
v-show="showSearch"
:inline="true"
>
<el-form-item label="专利名称" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入专利名称"
clearable
size="small"
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<!-- <el-form-item label="申请人" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入申请人"
clearable
size="small"
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item>
<el-form-item label="发明人" prop="roleName">
<el-input
v-model="queryParams.roleName"
placeholder="请输入发明人"
clearable
size="small"
style="width: 240px"
@keyup.enter="handleQuery"
/>
</el-form-item> -->
<el-form-item>
<el-button
type="primary"
icon="Search"
size="small"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" size="small" @click="resetQuery"
>重置</el-button
>
</el-form-item>
</el-form>
<!-- 表格数据 -->
<el-table v-loading="loading" :data="dataList">
<el-table-column label="数据编号" prop="id" />
<el-table-column
label="专利名称"
prop="title"
:show-overflow-tooltip="true"
/>
<el-table-column
label="申请号"
prop="applyCode"
:show-overflow-tooltip="true"
/>
<el-table-column label="发明人" prop="inventor" />
<el-table-column label="申请(专利权)人" prop="applyName" />
<el-table-column label="申请日期" align="center" prop="applyAt">
<template #default="scope">
<span>{{ parseTime(scope.row.applyAt) }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="状态" align="center">
<template #default="scope">
<el-tag v-if="scope.row.is_bind">已认领</el-tag>
<el-tag type="danger" v-else>未认领</el-tag>
</template>
</el-table-column> -->
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template #default="scope">
<!-- v-if="!scope.row.is_bind" -->
<el-button
size="small"
type="text"
icon="el-icon-plus"
@click="handleBind(scope.row.id)"
>认领</el-button
>
<!-- <el-button
v-else
size="small"
type="text"
icon="el-icon-delete"
@click="handleUnbind(scope.row.id)"
>取消认领</el-button
> -->
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
v-model:page="queryParams.pageNum"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script setup>
import {
addRole,
changeRoleStatus,
dataScope,
delRole,
getRole,
listRole,
updateRole,
} from "@/api/system/role";
import {
getNoBindPatentList,
bindPatent,
} from "../../../../api/admin/expert/technology";
import { getInfo } from "../../../../api/admin/expert/account";
import {
roleMenuTreeselect,
treeselect as menuTreeselect,
} from "@/api/system/menu";
import {
treeselect as deptTreeselect,
roleDeptTreeselect,
} from "@/api/system/dept";
import { useRouter } from "vue-router";
import { ElMessage } from "element-plus";
const router = useRouter();
const { proxy } = getCurrentInstance();
const dataList = ref([]);
const open = ref(false);
const loading = ref(true);
const showSearch = ref(true);
const total = ref(0);
const title = ref("");
const data = reactive({
queryParams: {
// pageNum: 1,
// pageSize: 10,
// roleName: undefined,
// author:
},
});
const { queryParams, rules } = toRefs(data);
/** 查询数据列表 */
const getList = async () => {
loading.value = true;
getInfo()
.then((resp) => {
return resp.data.casExpert;
})
.then((casExpert) => {
queryParams.value.author = casExpert.name;
queryParams.value.expertId = casExpert.id;
getNoBindPatentList(queryParams.value).then((resp) => {
// total.value = resp.;
dataList.value = resp.data;
loading.value = false;
});
})
.catch((err) => {
console.log(err);
loading.value = false;
});
// listRole(queryParams.value).then(
// (response) => {
// dataList.value = response.rows;
// total.value = response.total;
// loading.value = false;
// }
// );
};
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
getList();
}
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
handleQuery();
}
/** 删除按钮操作 */
function handleDelete(row) {
proxy.$modal
.confirm('是否确认删除数据编号为"' + row.id + '"的数据项?')
.then(function () {
return delRole(roleIds);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
})
.catch(() => {});
}
function handleBind(id) {
getInfo()
.then((resp) => {
return resp.data.casExpert;
})
.then((casExpert) => {
bindPatent({
patentId: id,
expertId: casExpert.id,
}).then(() => {
getList();
ElMessage.success("认领专利成功");
});
});
// expertPatentBind({ id: this.queryParams.id, patent_ids: [id] }).then(
// (res) => {
// this.$modal.msgSuccess("修改成功");
// this.getList();
// }
// );
}
function handleUnbind(id) {
// expertPatentUnbind({ id: this.queryParams.id, patent_ids: [id] }).then(
// (res) => {
// this.$modal.msgSuccess("修改成功");
// this.getList();
// }
// );
}
getList();
</script>

View File

@ -60,9 +60,7 @@
<el-table-column label="关键词" align="center" prop="keyword" />
<el-table-column label="出版日期" align="center">
<template #default="{ row }">
<span>{{
dayjs(row.publishTime).format("YYYY-MM-DD HH:mm:ss")
}}</span>
<span>{{ dayjs(row.publishTime).format("YYYY-MM-DD") }}</span>
</template>
</el-table-column>
<el-table-column
@ -155,7 +153,7 @@ import {
insertCasPaper,
deleteCasPaper,
updateCasPaper,
} from "@/api/admin/expert";
} from "@/api/admin/expert/technology";
import dayjs from "dayjs";
import { cloneDeep } from "lodash";
import { useRouter } from "vue-router";

View File

@ -38,10 +38,14 @@
/>
</el-form-item> -->
<el-form-item>
<el-button type="primary" icon="Search" size="mini" @click="handleQuery"
<el-button
type="primary"
icon="Search"
size="small"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="Refresh" size="mini" @click="resetQuery"
<el-button icon="Refresh" size="small" @click="resetQuery"
>重置</el-button
>
</el-form-item>
@ -52,19 +56,19 @@
type="primary"
plain
icon="Plus"
size="mini"
size="small"
@click="handleAdd"
>新增</el-button
>
</el-col>
<!-- 无接口 暂时注释 -->
<!-- <el-col :span="1.5">
<router-link to="./claimPatent">
<el-button type="primary" plain icon="Plus" size="mini"
>认领</el-button
>
</router-link>
</el-col> -->
<el-col :span="1.5">
<router-link to="./claimPatent">
<el-button type="primary" plain icon="Plus" size="small"
>认领</el-button
>
</router-link>
</el-col>
<right-toolbar
v-model:showSearch="showSearch"
@queryTable="getList"
@ -81,14 +85,14 @@
/>
<el-table-column
label="申请号"
prop="apply_code"
prop="applyCode"
:show-overflow-tooltip="true"
/>
<el-table-column label="发明人" prop="inventor" />
<el-table-column label="申请(专利权)人" prop="apply_name" />
<el-table-column label="申请日期" align="center" prop="apply_at">
<template #default="scope">
<span>{{ dayjs(scope.row.apply_at).format("YYYY-MM-DD") }}</span>
<el-table-column label="申请(专利权)人" prop="applyName" />
<el-table-column label="申请日期" align="center" prop="applyAt">
<template #default="{ row }">
<span>{{ dayjs(row.applyAt).format("YYYY-MM-DD") }}</span>
</template>
</el-table-column>
<el-table-column
@ -96,19 +100,19 @@
align="center"
class-name="small-padding fixed-width"
>
<template #default="scope">
<template #default="{ row }">
<el-button
size="mini"
size="small"
type="text"
icon="Edit"
@click="handleUpdate(scope.row.id)"
@click="handleUpdate(row)"
>修改</el-button
>
<el-button
size="mini"
size="small"
type="text"
icon="Delete"
@click="handleDelete(scope.row)"
@click="handleDelete(row.id)"
>删除</el-button
>
</template>
@ -126,15 +130,15 @@
<!-- 添加或修改数据配置对话框 -->
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
<el-form ref="patentRef" :model="form" :rules="rules" label-width="100px">
<el-form-item label="申请人:" prop="apply_name">
<el-form-item label="申请人:" prop="applyName">
<el-input
v-model="form.apply_name"
v-model="form.applyName"
placeholder="请输入申请(专利权)人(多个请以 , 分割)"
/>
</el-form-item>
<el-form-item label="申请人地址:" prop="apply_address">
<el-form-item label="申请人地址:" prop="applyAddress">
<el-input
v-model="form.apply_address"
v-model="form.applyAddress"
placeholder="请输入申请人地址"
/>
</el-form-item>
@ -147,18 +151,18 @@
<el-form-item label="专利名称:" prop="title">
<el-input v-model="form.title" placeholder="请输入专利名称" />
</el-form-item>
<el-form-item label="申请号:" prop="apply_code">
<el-input v-model="form.apply_code" placeholder="请输入申请号" />
<el-form-item label="申请号:" prop="applyCode">
<el-input v-model="form.applyCode" placeholder="请输入申请号" />
</el-form-item>
<el-form-item label="公开号:" prop="open_code">
<el-input v-model="form.open_code" placeholder="请输入公开号" />
<el-form-item label="公开号:" prop="openCode">
<el-input v-model="form.openCode" placeholder="请输入公开号" />
</el-form-item>
<el-row>
<el-col :span="12">
<el-form-item label="申请日期:" prop="apply_at">
<el-form-item label="申请日期:" prop="applyAt">
<el-date-picker
style="width: 100%"
v-model="form.apply_at"
v-model="form.applyAt"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择申请日期"
@ -166,10 +170,10 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="公开日:" prop="open_at">
<el-form-item label="公开日:" prop="openAt">
<el-date-picker
style="width: 100%"
v-model="form.open_at"
v-model="form.openAt"
type="date"
value-format="YYYY-MM-DD"
placeholder="请选择公开日"
@ -197,12 +201,18 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="IPC分类号:" prop="ipc_code">
<el-input v-model="form.ipc_code" placeholder="请输入IPC分类号" />
<el-form-item label="IPC分类号:" prop="ipcCode">
<el-input v-model="form.ipcCode" placeholder="请输入IPC分类号" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="专利状态:" prop="status">
<el-radio-group v-model="form.status">
<el-radio label="1">授权</el-radio>
<el-radio label="2">实审</el-radio>
<el-radio label="3">公开</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="摘要:" prop="description">
<el-input
v-model="form.description"
@ -211,9 +221,9 @@
:autosize="{ minRows: 4, maxRows: 8 }"
/>
</el-form-item>
<el-form-item label="主权项:" prop="principal_claim">
<el-form-item label="主权项:" prop="principalClaim">
<el-input
v-model="form.principal_claim"
v-model="form.principalClaim"
placeholder="请输入主权项"
type="textarea"
:autosize="{ minRows: 4, maxRows: 8 }"
@ -231,14 +241,17 @@
</template>
<script setup>
// import {
// expertPatent,
// patentAdd,
// patentDetail,
// patentEdit,
// patentDelete,
// } from "@/api/admin/expert/technology";
import {
expertPatentList,
insertCasPatent,
updateCasPatent,
deleteCasPatentByIds,
} from "@/api/admin/expert/patent";
import { cloneDeep } from "lodash";
import { getInfo } from "@/api/admin/expert/account";
import dayjs from "dayjs";
import { ElMessage, ElMessageBox } from "element-plus";
import { patentOptions } from "@/utils/parameter";
import { useRouter } from "vue-router";
const router = useRouter();
@ -255,32 +268,33 @@ const data = reactive({
form: {},
queryParams: {
pageNum: 1,
page_size: 10,
pageSize: 10,
inventor: undefined,
},
rules: {
apply_name: [
{ required: true, message: "申请人不能为空", trigger: "blur" },
],
apply_address: [
applyName: [{ required: true, message: "申请人不能为空", trigger: "blur" }],
applyAddress: [
{ required: true, message: "申请人地址不能为空", trigger: "blur" },
],
open_code: [{ required: true, message: "公开号不能为空", trigger: "blur" }],
open_at: [{ required: true, message: "公开日不能为空", trigger: "blur" }],
openCode: [{ required: true, message: "公开号不能为空", trigger: "blur" }],
openAt: [{ required: true, message: "公开日不能为空", trigger: "blur" }],
inventor: [{ required: true, message: "发明人不能为空", trigger: "blur" }],
title: [{ required: true, message: "专利名称不能为空", trigger: "blur" }],
apply_code: [
{ required: true, message: "申请不能为空", trigger: "blur" },
],
apply_at: [
{ required: true, message: "申请日期不能为空", trigger: "blur" },
],
applyCode: [{ required: true, message: "申请号不能为空", trigger: "blur" }],
applyAt: [{ required: true, message: "申请日期不能为空", trigger: "blur" }],
kind: [{ required: true, message: "请选择专利类型", trigger: "change" }],
ipc_code: [
ipcCode: [
{ required: true, message: "IPC分类号不能为空", trigger: "blur" },
],
status: [
{
required: true,
message: "请选择专利状态",
trigger: "change",
},
],
description: [{ required: true, message: "摘要不能为空", trigger: "blur" }],
principal_claim: [
principalClaim: [
{ required: true, message: "主权项不能为空", trigger: "blur" },
],
},
@ -288,12 +302,20 @@ const data = reactive({
const { queryParams, form, rules } = toRefs(data);
const queryRef = ref();
const patentRef = ref();
const expertId = ref(undefined);
/** 查询数据列表 */
const getList = async () => {
loading.value = true;
expertPatent(queryParams.value).then((response) => {
dataList.value = response.data.data;
total.value = response.data.count;
const { data } = await getInfo();
form.value.expertId = data.casExpert.id;
const id = data.casExpert.id;
expertId.value = data.casExpert.id;
expertPatentList(id, queryParams.value).then((resp) => {
dataList.value = resp.rows;
total.value = resp.total;
loading.value = false;
});
};
@ -304,39 +326,40 @@ const handleQuery = () => {
};
/** 重置按钮操作 */
function resetQuery() {
proxy.resetForm("queryRef");
queryRef.value.resetFields();
handleQuery();
}
/** 删除按钮操作 */
function handleDelete(row) {
proxy.$modal
.confirm('是否确认删除数据编号为"' + row.id + '"的专利项?')
function handleDelete(id) {
ElMessageBox.confirm('是否确认删除数据编号为"' + id + '"的专利项?')
.then(function () {
return patentDelete({ id: row.id });
return deleteCasPatentByIds(id);
})
.then(() => {
getList();
proxy.$modal.msgSuccess("删除成功");
ElMessage.success("删除成功");
})
.catch(() => {});
.catch((err) => {
console.log(err);
});
}
/** 重置新增的表单以及其他数据 */
function reset() {
form.value = {
id: undefined,
apply_name: undefined,
apply_address: undefined,
applyName: undefined,
applyAddress: undefined,
inventor: undefined,
title: undefined,
apply_code: undefined,
open_code: undefined,
open_at: undefined,
apply_at: undefined,
applyCode: undefined,
openCode: undefined,
openAt: undefined,
applyAt: undefined,
kind: undefined,
ipc_code: undefined,
ipcCode: undefined,
description: undefined,
principal_claim: undefined,
principalClaim: undefined,
};
proxy.resetForm("patentRef");
}
@ -347,39 +370,36 @@ const handleAdd = () => {
title.value = "添加数据";
};
/** 修改数据 */
const handleUpdate = (id) => {
const handleUpdate = (row) => {
reset();
patentDetail({ id }).then((res) => {
form.value = res.data;
open.value = true;
title.value = "修改数据";
});
const data = cloneDeep(row);
// patentDetail({ id }).then((res) => {
form.value = data;
open.value = true;
title.value = "修改数据";
// });
};
/** 提交按钮 */
function submitForm() {
proxy.$refs["patentRef"].validate((valid) => {
if (valid) {
if (form.value.id != undefined) {
patentEdit(form.value).then((response) => {
proxy.$modal.msgSuccess("修改成功");
open.value = false;
getList();
});
} else {
patentAdd(form.value).then((response) => {
proxy.$modal.msgSuccess("新增成功");
open.value = false;
getList();
});
}
}
});
}
const submitForm = async () => {
await patentRef.value.validate();
if (form.value.id != undefined) {
await updateCasPatent({ ...form.value, expertId: expertId.value });
ElMessage.success("修改成功");
open.value = false;
getList();
} else {
await insertCasPatent({ ...form.value, expertId: expertId.value });
ElMessage.success("新增成功");
open.value = false;
getList();
}
};
/** 取消按钮 */
function cancel() {
open.value = false;
reset();
}
// getList();
getList();
</script>

View File

@ -81,7 +81,7 @@
type="text"
icon="Download"
@click="handleShelf(row)"
>下架</el-button
>{{ row.shelfStatus == 1 ? "下架" : "上架" }}</el-button
>
<el-button
size="small"
@ -271,17 +271,19 @@ function resetQuery() {
handleQuery();
}
function handleShelf(row) {
let text = row.shelf_status == 2 ? "上架" : "下架";
const text = row.shelfStatus == 2 ? "上架" : "下架";
ElMessageBox.confirm(`确认要${text}"${row.id}"的数据吗?`)
.then(function () {
let status = row.shelf_status == 1 ? 2 : 1;
return projectShelf({ id: row.id, status });
.then(() => {
const shelfStatus = row.shelfStatus == 1 ? 2 : 1;
return updateTechnologyProject({ id: row.id, shelfStatus });
})
.then(() => {
getList();
ElMessage.success(text + "成功");
})
.catch(() => {});
.catch((err) => {
console.log(err);
});
}
/** 删除按钮操作 */
function handleDelete(id) {

View File

@ -76,7 +76,8 @@
</template>
<script setup name="CityOptions">
import { provinceList, cityList, districtList } from "@/api/config";
import { reactive, ref, toRefs } from "vue";
import { reactive, ref, toRefs, watch } from "vue";
const props = defineProps({
modelValue: Object,
@ -138,15 +139,15 @@ const provinceChanged = () => {
citySelectList.value = [];
districtSelectList.value = [];
// 重新请求城市列表
modelValue.value.province &&
getCityListByProvinceId(modelValue.value.province);
// modelValue.value.province &&
// getCityListByProvinceId(modelValue.value.province);
};
// 当市改变时
const cityChanged = () => {
// 清除县区代码列表
modelValue.value.district = undefined;
districtSelectList.value = [];
modelValue.value.city && getAreaListByCityId(modelValue.value.city);
// modelValue.value.city && getAreaListByCityId(modelValue.value.city);
};
const validateForm = async () => {
@ -157,15 +158,40 @@ const validateForm = async () => {
}
};
watch(modelValue, (val) => {
if (val.province) {
getCityListByProvinceId(val.province);
}
if (val.city) {
getAreaListByCityId(val.city);
}
});
// watch(
// () => {
// return {
// province: modelValue.value.province,
// city: modelValue.value.city,
// };
// },
// (val) => {
// console.log("changed city");
// if (val.province) {
// getCityListByProvinceId(val.province);
// }
// if (val.city) {
// getAreaListByCityId(val.city);
// }
// },
// { deep: true }
// );
watch(
() => modelValue.value.province,
(val) => {
console.log("changed province");
getCityListByProvinceId(val);
}
);
watch(
() => modelValue.value.city,
(val) => {
console.log("changed city");
getAreaListByCityId(val);
}
);
getProvinceList();
defineExpose({

View File

@ -108,7 +108,17 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="营业执照:" prop="license">
<ImageUpload
v-model="modelValue.license"
:isShowTip="false"
:limit="1"
/>
</el-form-item>
</el-col>
</el-row>
<el-row v-if="isAdd">
<el-col :span="24">
<el-form-item label="营业执照:" prop="license">
@ -204,6 +214,13 @@ const data = reactive({
trigger: ["change", "blur"],
},
],
license: [
{
required: true,
message: "请上传",
trigger: ["blur", "change"],
},
],
},
});
const { rules } = toRefs(data);
@ -224,7 +241,7 @@ const validateForm = async () => {
const cityFormValid = await cityFormRef.value.validateForm(); // 城市选择表单验证
const fieldFormValid = await fieldFormRef.value.validateForm(); // 领域选择表单验证
const keywordsFormValid = await keywordsFormRef.value.validateForm(); // 关键词表单验证
console.log(cityFormValid);
// console.log(cityFormValid);
if (isAdd.value) {
const directionsFormValid = await directionsFormRef.value.validateForm();
return (

View File

@ -23,7 +23,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="手机号:" prop="mobile">
<el-input v-model="modelValue.mobile"></el-input>
<el-input v-model="modelValue.mobile" maxlength="11"></el-input>
</el-form-item>
</el-col>
</el-row>
@ -136,8 +136,8 @@
</el-col>
<el-col :span="12">
<el-form-item label="性别:" prop="gender">
<el-radio v-model="modelValue.gender" :label="1">男</el-radio>
<el-radio v-model="modelValue.gender" :label="2">女</el-radio>
<el-radio v-model="modelValue.gender" label="1">男</el-radio>
<el-radio v-model="modelValue.gender" label="2">女</el-radio>
</el-form-item>
</el-col>
</el-row>

View File

@ -7,7 +7,7 @@
>
<el-row>
<el-col :span="24">
<el-form-item label="所属领域:" required>
<el-form-item label="所属领域:">
<el-row type="flex" justify="space-between">
<el-col :span="7">
<el-form-item prop="industrys">
@ -67,7 +67,8 @@
<script setup>
import { listSysIndustry } from "@/api/config";
import { reactive, toRefs } from "vue";
// import { watch } from "fs";
import { reactive, toRefs, watch } from "vue";
const props = defineProps({
modelValue: Object,
labelWidth: {
@ -100,19 +101,60 @@ const getIndustryTreeData = async () => {
levelI.value = data;
};
// watch(
// modelValue,
// (val) => {
// if (val.industrys[1]) {
// // delete val.industrys[2];
// levelIII.value = levelII.value.find((el) => el.id === item).children;
// }
// if (val.industrys[0]) {
// // delete val.industrys[1];
// // delete val.industrys[2];
// // levelII.value = levelI.value.find((el) => {
// // return el.id === item;
// // }).children;
// console.log(123);
// }
// },
// { deep: true, immediate: true }
// );
const levelIChange = async (item) => {
delete modelValue.value.industrys[1];
delete modelValue.value.industrys[2];
levelII.value = levelI.value.find((el) => {
return el.id === item;
}).children;
// levelII.value = levelI.value.find((el) => {
// return el.id === item;
// }).children;
};
const levelIIChange = async (item) => {
delete modelValue.value.industrys[2];
levelIII.value = levelII.value.find((el) => el.id === item).children;
// levelIII.value = levelII.value.find((el) => el.id === item).children;
};
getIndustryTreeData();
getIndustryTreeData().then(() => {
watch(
() => modelValue.value.industrys[0],
(val) => {
// console.log(val);
levelII.value =
levelI.value.find((el) => {
return el.id === val;
})?.children ?? [];
},
{ immediate: true }
);
watch(
() => modelValue.value.industrys[1],
(val) => {
levelIII.value =
levelII.value.find((el) => {
return el.id === val;
})?.children ?? [];
},
{ immediate: true }
);
});
</script>
<!-- <script>
// import { industry } from "@/api/config";

View File

@ -86,7 +86,7 @@ const identityDict = {
};
onMounted(() => {
identity().then((res) => {
console.log(res.data);
// console.log(res.data);
res.data.forEach((item) => {
identityList.value.push({
id: item.roleId,
@ -117,7 +117,7 @@ function noClicking() {
}
// item.status -1>未入驻 0>审核中 1>通过 2拒绝
function handleStatus(item) {
console.log(item);
// console.log(item);
if (noClicking()) return ElMessageBox.alert("您已有入驻申请");
if (item.status === "4" || item.status === "2") {
if (item.id == 1) {

View File

@ -30,8 +30,8 @@
<router-view />
</div>
<!-- <div class="box conter1000" v-show="!isShow">
<el-row :gutter="10">
<div class="box conter1000" v-show="!isShow">
<el-row :gutter="10" v-if="false">
<el-col :span="5">
<el-select
v-model="queryParams.value"
@ -62,17 +62,18 @@
<div class="_l">
<el-image
style="width: 358px; height: 200px; vertical-align: middle"
:src="item.src"
:src="item.image"
fit="fill"
></el-image>
</div>
<div class="_r">
<p class="text_hidden">{{ item.title }}</p>
<div class="_time">活动时间{{ item.time }}</div>
<div class="_time">活动时间{{ item.beginTime }}</div>
<div class="_time">收费金额{{ item.amount }}</div>
<div class="_info">
<span class="fl"
<!-- <span class="fl"
><span class="x_blue">{{ item.user }}</span> 人报名</span
>
> -->
<el-button class="fr x_btns" v-if="item.status == 1" disabled
>已报名</el-button
>
@ -109,30 +110,27 @@
></webBreadcrumb>
<div class="_head">
<div class="_l">
<!-- src="https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg" -->
<el-image
style="width: 358px; height: 100%; vertical-align: middle"
src="https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg"
:src="selectedActivity.image"
fit="cover"
></el-image>
</div>
<div class="_r">
<p class="_title text_hidden">
订单利润模型构建企业利润机器人智能感知与控制专场 |
合肥高新区科技成果供需对接活动
{{ selectedActivity.title }}
</p>
<p class="_brief text_hidden">
活动简介订单利润模型构建企业利润机器人智能感知与控制专场 |
合肥高新企业利润机 区科技成果
供需对接活动订单利润模型构建企业利润机器人智能感知供需对接活动订单利润模型构建企业利润机器人智能感知
活动简介{{ selectedActivity.description }}
</p>
<p class="_classif">活动分类教育</p>
<p class="_time">
活动时间2021-10-14 13:30:00 ~ 2021-10-16 16:30:00
活动时间{{ selectedActivity.beginTime }} ~
{{ selectedActivity.finishTime }}
</p>
<p class="_place">
活动地点安徽省-合肥市-蜀山区 科学大道233号来福酒店1号会议厅
</p>
<p class="_user">
<p class="_place">活动地点{{ selectedActivity.address }}</p>
<p class="_user" style="display: none">
<el-button class="x_btns" disabled>已报名</el-button>
<span class="_num"><span class="x_blue">16</span> 人报名</span>
</p>
@ -141,18 +139,13 @@
<div class="_info">
<div class="_l">
<p class="_tit">活动详情</p>
<div class="_txt">
本项目将生产废水分质处理后提升进入曝气微电解反应器内通过铁碳原料在酸性情况下形成微电池首先对铜氨络合物破络其次对油墨等有机物质开环断链提高废水的可生化性更突出的是利用金属离子的活性铁置换其他金属离子从而从废水中除去然后经生化系统处理后出水各污染物指标稳定达标排放本项目具有处理效率高以废治废能耗低管理简单出水稳定达标等优点
出水各污染物指标稳定达标排放本项目具有处理效率高以废治废能耗低管理简单出水稳定达标等优点
</div>
<div class="_txt">
本项目将生产废水分质处理后提升进入曝气微电解反应器内通过铁碳原料在酸性情况下形成微电池首先对铜氨络合物破络其次对油墨等有机物质开环断链提高废水的可生化性更突出的是利用金属离子的活性铁置换其他金属离子从而从废水中除去然后经生化系统处理后出水各污染物指标稳定达标排放本项目具有处理效率高以废治废能耗低管理简单出水稳定达标等优点
出水各污染物指标稳定达标排放本项目具有处理效率高以废治废能耗低管理简单出水稳定达标等优点
</div>
<div class="_txt" v-html="selectedActivity.content"></div>
</div>
<div class="_r">
<WebContact />
</div>
<div class="_r">联系我</div>
</div>
</div> -->
</div>
<webFooter></webFooter>
</div>
</template>
@ -161,61 +154,47 @@ import QrcodeVue from "qrcode.vue";
import { banner } from "@/api/website/home/index";
import request from "@/utils/request";
import webFooter from "@/components/webFooter/index.vue";
// import webBreadcrumb from "@/components/webBreadcrumb/index.vue";
import { reactive, toRefs } from "vue";
import WebContact from "@/components/webContact";
import { activitysList } from "@/api/admin/enterprise";
import webBreadcrumb from "@/components/webBreadcrumb/index.vue";
// import webReleaseActive from "@/components/webReleaseActive/index.vue";
const dialogVisible = ref(false);
const loading = ref(true);
const total = ref(1);
const state = reactive({
banner: "",
});
const queryParams = reactive({});
let dataList = ref([]);
const isShow = ref(false);
let breadcrumbTitle = reactive({
id: null,
title: "",
twoTitle: "",
});
/** 查询 */
function getList() {
loading.value = true;
setTimeout(() => {
dataList.value = [
{
id: 1,
title:
"订单利润模型——构建企业利润机器人智能感知与控制专场 | 合肥高新区科技成果供需对接活动",
src: "https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg",
time: "2021-10-14 13:30:00 ~ 2021-10-16 16:30:00",
user: 16,
status: 1,
},
{
id: 2,
title:
"订单利润模型——构建企业利润机器人智能感知与控制专场 | 合肥高新区科技成果供需对接活动",
src: "https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg",
time: "2021-10-14 13:30:00 ~ 2021-10-16 16:30:00",
user: 17,
status: 2,
},
{
id: 3,
title:
"订单利润模型——构建企业利润机器人智能感知与控制专场 | 合肥高新区科技成果供需对接活动",
src: "https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg",
time: "2021-10-14 13:30:00 ~ 2021-10-16 16:30:00",
user: 18,
status: 3,
},
];
loading.value = false;
}, 500);
activitysList(queryParams).then((resp) => {
dataList.value = resp.rows;
total.value = resp.total;
});
}
const data = reactive({
selectedActivity: {},
});
const { selectedActivity } = toRefs(data);
function handleDetail(item) {
breadcrumbTitle.id = item.id;
breadcrumbTitle.title = "活动报名";
breadcrumbTitle.twoTitle = "活动报名详情";
selectedActivity.value = dataList.value.find((el) => el.id == item.id);
isShow.value = !isShow.value;
}

View File

@ -10,6 +10,7 @@
<div class="tab">
<div
v-for="(v, index) in state.tabList"
:style="v == '找实验室' ? `display:none` : ''"
:class="{ active: state.tabIndex == index }"
@click="switchTab(index)"
>
@ -134,6 +135,7 @@ const router = useRouter();
const queryParams = reactive({
queryType: undefined,
keyword: "",
queryType: "1",
});
const queryRules = reactive({
queryType: [{ required: true, trigger: "change", message: "请选择搜索类型" }],
@ -169,6 +171,7 @@ const queryTypeList = [
{ value: "1", label: "通过标题搜索" },
{ value: "2", label: "通过摘要搜索" },
{ value: "3", label: "通过主权项搜索" },
{ value: "4", label: "通过作者搜索" },
],
[
{ value: "1", label: "通过专家名称搜索" },
@ -189,11 +192,12 @@ const handleDetail = async (mode, keyword, queryType) => {
path: `/searchList/${mode}`,
query: { keyword, queryType },
});
window.open(routeData.href, "_blank");
// window.open(routeData.href, "_blank");
router.push(routeData);
};
function handleQuery() {
console.log(queryParams.keyword, state.tabIndex);
// console.log(queryParams.keyword, state.tabIndex);
handleDetail(
searchTypeList.value[state.tabIndex],
queryParams.keyword,
@ -226,7 +230,7 @@ const state = reactive({
onMounted(() => {
banner({ locals: "首页背景" }).then((resp) => {
console.log(resp);
// console.log(resp);
state.banner = resp.data[0].images;
});
// state.data = {

View File

@ -5,7 +5,7 @@
<div class="login-form">
<el-tabs v-model="loginForm.mode" v-if="isLogin == 1">
<el-tab-pane label="账号密码登录" name="102"></el-tab-pane>
<el-tab-pane label="手机快捷登录" name="101"></el-tab-pane>
<!-- <el-tab-pane label="手机快捷登录" name="101"></el-tab-pane> -->
</el-tabs>
<div v-if="isLogin == 1">
<el-form ref="loginRef" :model="loginForm" :rules="loginRules">
@ -98,7 +98,7 @@
>
<el-form-item prop="isCheck">
<div style="margin-top: 43px">
<div class="text_col">
<div class="text_col" style="display: none">
<div>其他登录方式</div>
<img
class="pointer"

View File

@ -63,8 +63,10 @@ const queryParams = reactive({
query: route.query.keyword,
});
function handleQuery(keyword) {
queryParams.query = keyword;
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}

View File

@ -23,19 +23,19 @@
<div>{{ state.expertDetail.introduce }}</div>
</template>
</achievementItem>
<div class="btns">
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
<div class="detail">
<div style="padding: 20px 0">
<!-- <div style="padding: 20px 0">
<div class="pointTit">技术视频</div>
</div>
</div> -->
<div style="padding: 20px 0">
<div class="pointTit">产品详情</div>
<div class="pointTit">成果简介</div>
</div>
<div class="html" v-html="state.expertDetail.introduce"></div>
<div class="html" v-html="state.expertDetail.description"></div>
</div>
</div>
<div class="r">
@ -56,6 +56,7 @@ import request from "@/utils/request";
import searchContainer from "./components/searchContainer.vue";
import wordcloud from "./components/wordcloud.vue";
import productItem from "./components/productItem.vue";
import { searchAchievementDetail } from "../../../api/website/home";
import { useRoute, useRouter } from "vue-router";
import { reactive, ref } from "vue";
@ -123,19 +124,23 @@ function handleDetail(id) {
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
router.push({
path: `/searchList/${mode}`,
query: { keyword, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
state.keyword = keyword;
function handleQuery(state) {
// queryParams.query = state.currentKeyword;
// queryParams.queryType = state.queryType;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("achievement", state.currentKeyword);
}
}
@ -143,14 +148,15 @@ function getDataList() {
loading.value = true;
let id = route.params.id;
if (!id) return;
// achievementDetail(id)
// .then((res) => {
// if (200 == res.code) {
// console.log(res.data);
// state.expertDetail = res.data;
// loading.value = false;
// }
// })
searchAchievementDetail(id)
// achievementDetail(id)
.then((res) => {
// if (200 == res.code) {
console.log(res.data);
state.expertDetail = res.data;
loading.value = false;
// }
});
// .catch(() => {
// loading.value = false;
// });

View File

@ -29,7 +29,7 @@
<div class="keywords">
<wordcloud
v-if="data.keywords"
:data="createdData(data.customers ?? [])"
:data="createdData(data.keywords ?? [])"
></wordcloud>
</div>
<!-- <collectAndVisit
@ -49,7 +49,8 @@
import wordcloud from "./wordcloud.vue";
// import collectAndVisit from "./collectAndVisit.vue";
import { maturityOptions } from "@/utils/parameter.js";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const route = useRoute();
const router = useRouter();
const props = defineProps({
@ -62,8 +63,13 @@ const props = defineProps({
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/achievement/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
window.open(routeData.href, "_blank");
router.push(routeData);
// window.open(routeData.href, "_blank");
}
function createdData(arr) {

View File

@ -39,7 +39,7 @@
</el-col>
</div>
<div class="line">
研究方向
研究信息
<span>{{ data.research }}</span>
</div>
<div
@ -66,9 +66,10 @@
<script setup name="ExpertItem">
import wordcloud from "./wordcloud.vue";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
// import collectAndVisit from "./collectAndVisit.vue";
const route = useRoute();
const router = useRouter();
const props = defineProps({
data: {
@ -78,8 +79,15 @@ const props = defineProps({
});
function handleDetail(id) {
let routeData = router.resolve({ path: `/searchList/expert/detail/${id}` });
window.open(routeData.href, "_blank");
let routeData = router.resolve({
path: `/searchList/expert/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
router.push(routeData);
// window.open(routeData.href, "_blank");
}
function createdData(arr) {

View File

@ -48,7 +48,8 @@
import { maturityOptions } from "@/utils/parameter";
import wordcloud from "./wordcloud.vue";
import collectAndVisit from "./collectAndVisit.vue";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const route = useRoute();
const router = useRouter();
const props = defineProps({
data: {
@ -58,8 +59,15 @@ const props = defineProps({
});
function handleDetail(id) {
let routeData = router.resolve({ path: `/searchList/patent/detail/${id}` });
window.open(routeData.href, "_blank");
let routeData = router.resolve({
path: `/searchList/patent/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
// window.open(routeData.href, "_blank");
router.push(routeData);
}
function createdData(arr) {

View File

@ -8,14 +8,37 @@
>
<div class="conter1000">
<div class="tit">{{ title }}</div>
<el-input
v-model.trim="state.currentKeyword"
placeholder="请输入检索词"
>
<template #append>
<el-button icon="Search" @click="handleQuery">搜索</el-button>
</template>
</el-input>
<el-form :model="state" :rules="queryRules" ref="queryRef">
<el-input
v-model.trim="state.currentKeyword"
placeholder="请输入检索词"
>
<template #suffix>
<el-form-item prop="queryType">
<el-select
v-model="state.queryType"
placeholder="请选择搜索类型"
class="search-type-select"
>
<el-option
v-for="item in queryTypeList[route.meta.searchType - 1]"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</template>
<template #append>
<el-button
:disabled="!state.currentKeyword"
icon="Search"
@click="handleQuery"
>搜索</el-button
>
</template>
</el-input>
</el-form>
</div>
</div>
<div class="conter1000">
@ -30,12 +53,25 @@ import webFooter from "@/components/webFooter/index.vue";
import { banner } from "@/api/website/home/index";
import { useRoute, useRouter } from "vue-router";
import { reactive, ref } from "vue";
import router from "../../../../router";
const route = useRoute();
// console.log(route.query.queryType);
// const queryType = route.query.queryType;
const loading = ref(true);
const state = reactive({
currentKeyword: "",
queryType: route.query.queryType,
});
// state.queryType = route.query.queryType;
// state.queryType = queryType;
const queryRules = reactive({
queryType: [{ required: true, trigger: "change", message: "请选择搜索类型" }],
keyword: [{ required: true, trigger: "blur", message: "请选择搜索关键词" }],
});
const queryRef = ref();
const props = defineProps({
title: {
type: String,
@ -49,8 +85,46 @@ const props = defineProps({
});
const emit = defineEmits();
function handleQuery() {
emit("handleQuery", state.currentKeyword);
const queryTypeList = [
[
{ value: "1", label: "通过企业名称搜索" },
{ value: "2", label: "通过企业简介搜索" },
{ value: "3", label: "通过关键词搜索" },
{ value: "4", label: "通过生产方向搜索" },
{ value: "5", label: "通过产品搜索" },
],
[
{
value: "1",
label: "通过成果名称搜索",
},
],
[],
[
{ value: "1", label: "通过标题搜索" },
{ value: "2", label: "通过摘要搜索" },
{ value: "3", label: "通过主权项搜索" },
],
[
{ value: "1", label: "通过专家名称搜索" },
{ value: "2", label: "通过个人简介搜索" },
{ value: "3", label: "通过关键词搜索" },
],
[{ value: "1", label: "通过标题搜索" }],
[{ value: "1", label: "通过标题搜索" }],
];
async function handleQuery() {
// state.queryType = route.query.queryType;
// await queryRef.value.validate();
router.replace({
path: route.path,
query: {
...route.query,
keyword: state.currentKeyword,
queryType: state.queryType,
},
});
emit("handleQuery", state);
}
onMounted(() => {
@ -67,6 +141,9 @@ onMounted(() => {
});
</script>
<style lang="scss" scoped>
:deep(.search-type-select) {
box-sizing: 0 0 0 0;
}
.searchContainer {
width: 100%;
min-height: 100%;

View File

@ -48,8 +48,9 @@
import { maturityOptions } from "@/utils/parameter";
import wordcloud from "./wordcloud.vue";
import collectAndVisit from "./collectAndVisit.vue";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const router = useRouter();
const route = useRoute();
const props = defineProps({
data: {
type: Object,
@ -60,8 +61,13 @@ const props = defineProps({
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/serviceDemand/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
window.open(routeData.href, "_blank");
// window.open(routeData.href, "_blank");
router.push(routeData);
}
function createdData(arr) {

View File

@ -48,8 +48,9 @@
import { maturityOptions } from "@/utils/parameter";
import wordcloud from "./wordcloud.vue";
import collectAndVisit from "./collectAndVisit.vue";
import { useRouter } from "vue-router";
import { useRoute, useRouter } from "vue-router";
const router = useRouter();
const route = useRoute();
const props = defineProps({
data: {
type: Object,
@ -60,8 +61,12 @@ const props = defineProps({
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/technologyDemand/detail/${id}`,
query: {
keyword: route.query.keyword,
queryType: route.query.queryType,
},
});
window.open(routeData.href, "_blank");
router.push(routeData);
}
function createdData(arr) {

View File

@ -18,7 +18,8 @@
<div class="item" v-for="item in searchResults" :key="item.id">
<el-row type="flex" style="padding: 40px 20px">
<div class="img">
<img :src="item.image" alt />
<!-- <img :src="item.image" alt /> -->
<el-image :src="item.image"></el-image>
</div>
<div class="content">
<div class="tit" @click="handleDetail(item.id)">
@ -34,7 +35,10 @@
</div>
<div class="line">
企业规模
<span>{{ item.kind_title || "后台暂没提供" }}</span>
<span>{{
enterpriseOptions.find((el) => el.key == item.kind)
?.value ?? "后台暂没提供"
}}</span>
</div>
<div class="line">
核心产品及应用场景 <span>{{ item.product }}</span>
@ -76,6 +80,7 @@
<script setup>
import WebContact from "@/components/webContact/index.vue";
import request from "@/utils/request";
import { enterpriseOptions } from "@/utils/parameter";
import { search } from "@/api/website/home/index";
import { onMounted } from "vue";
import searchContainer from "./components/searchContainer.vue";
@ -98,9 +103,9 @@ const queryParams = reactive({
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/enterprise/detail/${id}`,
query: { keyword: queryParams.query },
query: { keyword: queryParams.query, queryType: route.query.queryType },
});
window.open(routeData.href, "_blank");
router.push(routeData);
}
const loading = ref(true);
@ -160,9 +165,10 @@ function createdData(arr) {
// });
// }
function handleQuery(keyword) {
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}
function industryChange(industry) {
@ -224,7 +230,7 @@ const getDataList = async () => {
display: flex;
align-items: center;
justify-content: center;
img {
:deep(.el-image) {
width: 90px;
height: 90px;
border-radius: 50%;

View File

@ -21,11 +21,12 @@
<div class="item">
<el-row type="flex" style="padding: 40px 20px">
<div class="img">
<img :src="state.companyDetail.image" alt />
<el-image :src="state.companyDetail.image"></el-image>
<!-- <img :src="state.companyDetail.image" alt /> -->
</div>
<div class="content">
<div class="tit">
<div style="float: right">
<div style="float: right; visibility: hidden">
<span>匹配度</span>
<el-rate
style="display: inline-block"
@ -39,7 +40,11 @@
</div>
<div class="line">
企业规模:
<span>{{ state.companyDetail.kind_title }}</span>
<span>{{
enterpriseOptions.find(
(el) => el.key == state.companyDetail.kind
)?.value ?? "后台暂未提供"
}}</span>
</div>
<div class="line">
核心产品及应用场景:
@ -58,10 +63,10 @@
:data="createdData(state.companyDetail.keywords)"
></wordcloud>
</div>
<div class="btns">
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
</el-row>
</div>
@ -99,7 +104,8 @@
<div class="item" v-for="item in state.list" :key="item.id">
<el-row type="flex" style="padding: 40px 20px">
<div class="img">
<img :src="item.image" alt />
<!-- <img :src="item.image" alt /> -->
<el-image :src="item.image" />
</div>
<div class="content">
<div class="tit" @click="handleDetail(item.id)">
@ -117,7 +123,14 @@
</div>
<div class="line">
企业规模
<span>{{ item.kind_title || "后台暂没提供" }}</span>
<span>{{
enterpriseOptions.find((el) => el.key == item.kind)
?.value ?? "后台暂未提供"
}}</span>
<!-- <span>{{
enterpriseOptions.find((el) => el.key == item.kind)
.value || "后台暂没提供"
}}</span> -->
</div>
<div class="line">
核心产品及应用场景
@ -148,11 +161,13 @@
import webContact from "@/components/webContact/index.vue";
import request from "@/utils/request";
import { searchEnterpriseDetail } from "@/api/website/home";
import { enterpriseOptions } from "@/utils/parameter";
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 { useRoute, useRouter } from "vue-router";
import { search } from "../../../api/website/home";
const router = useRouter();
const route = useRoute();
const loading = ref(true);
@ -217,26 +232,30 @@ function createdData(arr) {
function handleDetail(id) {
let routeData = router.resolve({
path: `/searchList/0/detail/${id}`,
query: { keyword: state.keyword },
path: `/searchList/enterprise/detail/${id}`,
query: { keyword: state.keyword, queryType: route.query.queryType },
});
window.open(routeData.href, "_blank");
// window.open(routeData.href, "_blank");
router.push(routeData);
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
router.push({
path: `/searchList/${mode}`,
query: { keyword, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
state.keyword = keyword;
function handleQuery(state) {
state.keyword = state.currentKeyword;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("enterprise", state.currentKeyword);
}
}
@ -261,6 +280,17 @@ function getDataList() {
console.log(err);
loading.value = false;
});
search({
query: route.query.keyword,
searchType: 1,
queryType: route.query.queryType,
}).then((resp) => {
const recommendList = resp.list.filter(
(el) => el.id != state.companyDetail.id
);
state.list = recommendList;
state.total = resp.total;
});
// companyProduct(id).then((res) => {
// if (200 == res.code) {
// state.companyProduct = res.data.data;
@ -367,7 +397,7 @@ function getDataList() {
display: flex;
align-items: center;
justify-content: center;
img {
:deep(.el-image) {
width: 90px;
height: 90px;
border-radius: 50%;

View File

@ -92,8 +92,10 @@ const queryParams = reactive({
// return l;
// }
function handleQuery(keyword) {
queryParams.query = keyword;
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}

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="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
<div class="detail">
<div style="padding: 20px 0">
@ -32,17 +32,21 @@
<div style="padding: 20px 0">
<div class="pointTit">研究方向</div>
</div>
<section v-if="state.expertDetail.researchs">
<section v-if="state.expertDetail.research">
<div
v-for="item in state.expertDetail.researchs"
v-for="item in state.expertDetail.research?.split(',') ?? []"
class="describe"
>
{{ item }}
</div>
</section>
<div style="padding: 20px 0">
<div class="pointTit">专家视频</div>
<!-- <div style="padding: 20px 0">
<div class="pointTit">联系方式</div>
</div>
<div>{{ state.expertDetail.mobile }}</div> -->
<!-- <div style="padding: 20px 0">
<div class="pointTit">专家视频</div>
</div> -->
</div>
<div v-if="state.expertDetail.id" style="padding: 20px 0">
<el-tabs v-model="state.activeName">
@ -306,14 +310,14 @@
</el-tabs>
</div>
<div style="padding: 20px 0">
<!-- <div style="padding: 20px 0">
<div class="pointTit">专家推荐</div>
</div>
<div>
<section v-for="item in state.list" :key="item.id">
<expertItem :data="item"></expertItem>
</section>
</div>
</div> -->
</div>
<div class="r">
<webContact />
@ -454,22 +458,25 @@ function handleDetail(id) {
window.open(routeData.href, "_blank");
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
function handleList(mode, query) {
router.push({
path: `/searchList/${mode}`,
query: { query, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
function handleQuery(state) {
// loading.value = false;
// return;
state.keyword = keyword;
state.keyword = state.currentKeyword;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("expert", state.currentKeyword);
}
}

View File

@ -87,9 +87,10 @@ const getSearchResult = async () => {
const resp = await search(queryParams);
console.log(resp);
};
function handleQuery(keyword) {
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}
function industryChange(industry) {

View File

@ -58,10 +58,10 @@
:data="createdData(state.patentDetail.keywords)"
></wordcloud>
</div>
<div class="btns">
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
</el-row>
</div>
@ -178,7 +178,9 @@ const state = reactive({
},
],
});
const queryParams = reactive({
query: "1313",
});
// 建议 列表前4条
function recommend() {
return request({
@ -228,19 +230,22 @@ function handleDetail(id) {
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
router.push({
path: `/searchList/${mode}`,
query: { keyword, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
state.keyword = keyword;
function handleQuery(state) {
state.keyword = state.currentKeyword;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("patent", state.currentKeyword);
}
}

View File

@ -64,8 +64,10 @@ const queryParams = reactive({
query: route.query.keyword,
});
function handleQuery(keyword) {
queryParams.query = keyword;
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}

View File

@ -62,10 +62,10 @@
:data="createdData(state.demandDetail.keywords)"
></wordcloud>
</div>
<div class="btns">
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
</el-row>
</div>
@ -194,19 +194,22 @@ function createdData(arr) {
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
router.push({
path: `/searchList/${mode}`,
query: { keyword, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
state.keyword = keyword;
function handleQuery(state) {
state.keyword = state.currentKeyword;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("serviceDemand", state.currentKeyword);
}
}

View File

@ -63,8 +63,10 @@ const queryParams = reactive({
query: route.query.keyword,
});
function handleQuery(keyword) {
queryParams.value = keyword;
function handleQuery(state) {
// state.keyword = keyword;
queryParams.query = state.currentKeyword;
queryParams.queryType = state.queryType;
getDataList();
}

View File

@ -62,10 +62,10 @@
:data="createdData(state.demandDetail.keywords)"
></wordcloud>
</div>
<div class="btns">
<!-- <div class="btns">
<div class="order">预约对接</div>
<div class="share">一键分享</div>
</div>
</div> -->
</el-row>
</div>
@ -129,19 +129,22 @@ function createdData(arr) {
}
function handleList(mode, keyword) {
router.push({ path: `/searchList/${mode}`, query: { keyword } });
router.push({
path: `/searchList/${mode}`,
query: { keyword, queryType: route.query.queryType },
});
}
// 首次加载数据,其后跳转页面
let flag = true;
function handleQuery(keyword) {
state.keyword = keyword;
function handleQuery(state) {
state.keyword = state.currentKeyword;
if (flag) {
getDataList();
flag = false;
} else {
handleList(0, keyword);
handleList("technologyDemand", state.currentKeyword);
}
}

View File

@ -296,6 +296,7 @@ function handleShowMore(item) {
margin-top: 86px;
> ul {
display: flex;
justify-content: center;
li {
cursor: pointer;
width: calc(100% / 6);
@ -323,6 +324,8 @@ function handleShowMore(item) {
}
._liBtn {
margin-top: 36px;
display: flex;
justify-content: center;
}
}
}