bugfix and performance improvements
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
:8007 {
|
||||
handle_path /api/* {
|
||||
reverse_proxy http://192.168.0.201:1618
|
||||
:8006 {
|
||||
handle /api/* {
|
||||
reverse_proxy http://101.34.251.155
|
||||
}
|
||||
handle {
|
||||
root * "/Volumes/iMac Doc/WebstormProjects/cas_cloud_web_i18n/dist"
|
||||
|
@ -222,7 +222,7 @@
|
||||
<div id="loader"></div>
|
||||
<div class="loader-section section-left"></div>
|
||||
<div class="loader-section section-right"></div>
|
||||
<div class="load_title">正在加载系统资源,请耐心等待</div>
|
||||
<!--<div class="load_title">正在加载系统资源,请耐心等待</div>-->
|
||||
</div>
|
||||
</div>
|
||||
<script src="/src/main.js" type="module"></script>
|
||||
|
@ -24,3 +24,30 @@ export const deleteAchievements = (ids) => {
|
||||
method: "DELETE",
|
||||
});
|
||||
};
|
||||
|
||||
// 实验室成果详情
|
||||
export const achievementInfo = (params) => {
|
||||
return request({
|
||||
url: `/app/laboratory/achievementInfo`,
|
||||
method: "GET",
|
||||
params,
|
||||
});
|
||||
};
|
||||
|
||||
// 实验室成果新增
|
||||
export const insertAchievement = (data) => {
|
||||
return request({
|
||||
url: `/app/laboratory/insertAchievement`,
|
||||
method: "POST",
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
||||
// 实验室成果修改
|
||||
export const updateAchievement = (data) => {
|
||||
return request({
|
||||
url: `/app/laboratory/updateAchievement`,
|
||||
method: "PUT",
|
||||
data,
|
||||
});
|
||||
};
|
||||
|
@ -7,6 +7,7 @@ export function getAllCount() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 分布专家信息
|
||||
export function getExpert() {
|
||||
return request({
|
||||
@ -14,6 +15,7 @@ export function getExpert() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 分布实验室信息
|
||||
export function laboratory() {
|
||||
return request({
|
||||
@ -62,6 +64,7 @@ export function industry() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端搜索
|
||||
export function search(params) {
|
||||
return request({
|
||||
@ -70,6 +73,7 @@ export function search(params) {
|
||||
params,
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端专利搜索结果详情
|
||||
export function searchPatentDetail(id) {
|
||||
return request({
|
||||
@ -77,6 +81,7 @@ export function searchPatentDetail(id) {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端企业搜索结果详情
|
||||
export function searchEnterpriseDetail(id) {
|
||||
return request({
|
||||
@ -84,6 +89,7 @@ export function searchEnterpriseDetail(id) {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端成果搜索结果详情
|
||||
export function searchAchievementDetail(id) {
|
||||
return request({
|
||||
@ -91,6 +97,14 @@ export function searchAchievementDetail(id) {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
export function searchProductDetail(id) {
|
||||
return request({
|
||||
url: `/search/enterpriseProduct/${id}`,
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端实验室搜索结果详情
|
||||
export function searchLaboratoryDetail(id) {
|
||||
return request({
|
||||
@ -98,6 +112,7 @@ export function searchLaboratoryDetail(id) {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端专家搜索结果详情
|
||||
export function searchExpertDetail(id) {
|
||||
return request({
|
||||
@ -105,6 +120,7 @@ export function searchExpertDetail(id) {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 客户端服务需求搜索结果详情
|
||||
export function searchServiceDemandDetail(id) {
|
||||
return request({
|
||||
@ -128,6 +144,7 @@ export function countExpertByProvince() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[市]专家分布
|
||||
export function countExpertByCity(provinceCode) {
|
||||
return request({
|
||||
@ -138,6 +155,7 @@ export function countExpertByCity(provinceCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[县]专家分布
|
||||
export function countExpertByArea(cityCode) {
|
||||
return request({
|
||||
@ -148,6 +166,7 @@ export function countExpertByArea(cityCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[省]企业分布
|
||||
export function countEnterpriseByProvince() {
|
||||
return request({
|
||||
@ -155,6 +174,7 @@ export function countEnterpriseByProvince() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[市]企业分布
|
||||
export function countEnterpriseByCity(provinceCode) {
|
||||
return request({
|
||||
@ -165,6 +185,7 @@ export function countEnterpriseByCity(provinceCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[县]企业分布
|
||||
export function countEnterpriseByArea(cityCode) {
|
||||
return request({
|
||||
@ -175,6 +196,7 @@ export function countEnterpriseByArea(cityCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[省]需求分布
|
||||
export function countDemandByProvince() {
|
||||
return request({
|
||||
@ -182,6 +204,7 @@ export function countDemandByProvince() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[市]需求分布
|
||||
export function countDemandByCity(provinceCode) {
|
||||
return request({
|
||||
@ -192,6 +215,7 @@ export function countDemandByCity(provinceCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[县]需求分布
|
||||
export function countDemandByArea(cityCode) {
|
||||
return request({
|
||||
@ -202,6 +226,7 @@ export function countDemandByArea(cityCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[省]成果分布
|
||||
export function countAchievementByProvince() {
|
||||
return request({
|
||||
@ -209,6 +234,7 @@ export function countAchievementByProvince() {
|
||||
method: "get",
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[市]成果分布
|
||||
export function countAchievementByCity(provinceCode) {
|
||||
return request({
|
||||
@ -219,6 +245,7 @@ export function countAchievementByCity(provinceCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取[县]成果分布
|
||||
export function countAchievementByArea(cityCode) {
|
||||
return request({
|
||||
@ -229,6 +256,7 @@ export function countAchievementByArea(cityCode) {
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
// 获取尾部导航
|
||||
export function getCasNavigation() {
|
||||
return request({
|
||||
|
@ -98,7 +98,10 @@ watch(
|
||||
fileList.value = list.map((item) => {
|
||||
if (typeof item === "string") {
|
||||
if (item.indexOf(baseUrl) === -1) {
|
||||
item = { name: baseUrl + item, url: baseUrl + item };
|
||||
item = {
|
||||
name: baseUrl + "/file" + item,
|
||||
url: baseUrl + "/file" + item,
|
||||
};
|
||||
} else {
|
||||
item = { name: item, url: item };
|
||||
}
|
||||
@ -120,7 +123,10 @@ function handleRemove(file, files) {
|
||||
|
||||
// 上传成功回调
|
||||
function handleUploadSuccess(res) {
|
||||
uploadList.value.push({ name: res.fileName, url: res.url });
|
||||
uploadList.value.push({
|
||||
name: res.fileName,
|
||||
url: res.fileName,
|
||||
});
|
||||
if (uploadList.value.length === number.value) {
|
||||
fileList.value = fileList.value
|
||||
.filter((f) => f.url !== undefined)
|
||||
|
@ -174,7 +174,7 @@
|
||||
<div class="switch-locale">
|
||||
<el-button round @click="switchLocale">
|
||||
<!-- {{ localeDict.find((item) => item.value === locale)?.label }}-->
|
||||
{{ locale === "zh" ? "Русский" : "简体中文" }}
|
||||
{{ locale === "zh" ? "ru" : "zh" }}
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
@ -216,11 +216,12 @@ watch(
|
||||
pagePath.value = route.path;
|
||||
|
||||
const switchLocale = () => {
|
||||
if (settingsStore.locale === "zh") {
|
||||
settingsStore.setLocale("ru");
|
||||
} else if (settingsStore.locale === "ru") {
|
||||
settingsStore.setLocale("zh");
|
||||
}
|
||||
settingsStore.toggleLocale()
|
||||
// if (settingsStore.locale === "zh") {
|
||||
// settingsStore.setLocale("ru");
|
||||
// } else if (settingsStore.locale === "ru") {
|
||||
// settingsStore.setLocale("zh");
|
||||
// }
|
||||
};
|
||||
|
||||
function handlePage() {
|
||||
|
@ -33,7 +33,7 @@ export const serviceDemandStatusDict = [
|
||||
* 技术需求dict
|
||||
* @type {[{label: string, value: string, elTagType: string},{label: string, value: string, elTagType: string},{label: string, value: string, elTagType: string},{label: string, value: string, elTagType: string},{label: string, value: string, elTagType: string}]}
|
||||
*/
|
||||
export const technologyDemandStatusDict = [
|
||||
/*export const technologyDemandStatusDict = [
|
||||
{
|
||||
value: "0",
|
||||
label: "待受理",
|
||||
@ -59,7 +59,7 @@ export const technologyDemandStatusDict = [
|
||||
label: "已结束",
|
||||
elTagType: "warning",
|
||||
},
|
||||
];
|
||||
];*/
|
||||
|
||||
// 1->专利|2->成果|3->服务需求|4->专家|5->科研项目|6->论文
|
||||
export const seeLogTypeDict = [
|
||||
@ -109,12 +109,16 @@ export const orderTypeDict = [
|
||||
label: "创新币充值",
|
||||
i18n: "coinRecharge",
|
||||
elTagType: "primary",
|
||||
zh: "创新币充值",
|
||||
ru: "Пополнение монеты инноваций",
|
||||
},
|
||||
{
|
||||
value: "2",
|
||||
label: "活动报名",
|
||||
i18n: "activityRegistration",
|
||||
elTagType: "success",
|
||||
zh: "活动报名",
|
||||
ru: "Регистрация на мероприятие",
|
||||
},
|
||||
];
|
||||
|
||||
@ -147,46 +151,20 @@ export const subjectRoleDict = [
|
||||
label: "承担单位",
|
||||
i18n: "undertakingUnit",
|
||||
elTagType: "primary",
|
||||
zh: "承担单位",
|
||||
ru: "Исполнительная единица",
|
||||
},
|
||||
{
|
||||
value: "2",
|
||||
label: "参与单位",
|
||||
i18n: "participatingUnit",
|
||||
elTagType: "success",
|
||||
zh: "参与单位",
|
||||
ru: "Участвующая единица",
|
||||
},
|
||||
];
|
||||
|
||||
export const localeDict = [
|
||||
{
|
||||
value: "zh",
|
||||
label: "简体中文",
|
||||
},
|
||||
{
|
||||
value: "en",
|
||||
label: "English",
|
||||
},
|
||||
{
|
||||
value: "ru",
|
||||
label: "русский",
|
||||
},
|
||||
{
|
||||
value: "fr",
|
||||
label: "français",
|
||||
},
|
||||
{
|
||||
value: "ja",
|
||||
label: "日本語",
|
||||
},
|
||||
];
|
||||
|
||||
const countryDict = [
|
||||
{
|
||||
zh: "中国",
|
||||
ru: "Китай",
|
||||
},
|
||||
];
|
||||
|
||||
// 成果推广 关键成果解决 对接专家院士 上市辅导
|
||||
/*// 成果推广 关键成果解决 对接专家院士 上市辅导
|
||||
export const achievementPromotionDict = [
|
||||
{
|
||||
value: 1,
|
||||
@ -208,7 +186,7 @@ export const achievementPromotionDict = [
|
||||
label: "上市辅导",
|
||||
i18n: "listingGuidance",
|
||||
},
|
||||
];
|
||||
];*/
|
||||
|
||||
// 成果难题解决 成果储备/项目投资 新成果开发 检验检测
|
||||
export const techinicalDemandTypeDict = [
|
||||
|
@ -92,6 +92,7 @@ const messages = {
|
||||
noData: "暂无",
|
||||
serviceSite: "全国服务站点",
|
||||
more: "查看更多",
|
||||
people: "人数",
|
||||
},
|
||||
activity: activity_zh,
|
||||
innovation: {
|
||||
@ -162,7 +163,7 @@ const messages = {
|
||||
changeAvatar: "Сменить аватар",
|
||||
},
|
||||
footer: {
|
||||
copyRight: "Все права защищены",
|
||||
copyRight: "Чжункейун Авторское право",
|
||||
},
|
||||
webSearch: webSearch_ru,
|
||||
webContact: webContact_ru,
|
||||
@ -213,6 +214,8 @@ const messages = {
|
||||
noData: "Нет данных",
|
||||
serviceSite: "Сервисный сайт по всей стране",
|
||||
more: "Подробнее",
|
||||
// 人数
|
||||
people: "человек",
|
||||
},
|
||||
activity: activity_ru,
|
||||
innovation: {
|
||||
|
@ -38,7 +38,7 @@ const table = {
|
||||
draftBox: "Черновик",
|
||||
quickFunction: "Быстрые функции",
|
||||
putOn: "В продаже",
|
||||
pullOff: "Снять с продажи",
|
||||
putOff: "Снять с продажи",
|
||||
claim: "Претензия",
|
||||
startDate: "Дата начала",
|
||||
endDate: "Дата окончания",
|
||||
|
@ -38,7 +38,7 @@ const table = {
|
||||
draftBox: "草稿箱",
|
||||
quickFunction: "快捷功能",
|
||||
putOn: "上架",
|
||||
pullOff: "下架",
|
||||
putOff: "下架",
|
||||
claim: "认领",
|
||||
startDate: "开始日期",
|
||||
endDate: "结束日期",
|
||||
|
@ -37,6 +37,7 @@ const webSearch = {
|
||||
expertIntroduction: "Описание экспертов",
|
||||
expertLeadership: "Ведущие эксперты",
|
||||
expertLibrary: "Библиотека экспертов",
|
||||
productLibrary: "Библиотека продуктов",
|
||||
findAchievement: "Найти достижение",
|
||||
findAchievementNum: "достижений",
|
||||
findCompany: "Найти компанию",
|
||||
@ -51,7 +52,11 @@ const webSearch = {
|
||||
findPatent: "Найти патент",
|
||||
findPatentNum: "патентов",
|
||||
findServiceDemand: "Найти потребность в услугах",
|
||||
findServiceDemandNum: "потребностей в услугах",
|
||||
findTechnologyDemand: "Найти потребность в технологиях",
|
||||
findTechnologyDemandNum: "потребностей в технологиях",
|
||||
findProduct: "Найти продукт",
|
||||
findProductNum: "продуктов",
|
||||
findTechnologyNum: "технологий",
|
||||
industry: "Отрасль",
|
||||
industryField: "Отраслевая область",
|
||||
@ -60,6 +65,8 @@ const webSearch = {
|
||||
ipc: "Классификационный номер IPC",
|
||||
lab: "Лаборатория",
|
||||
labDetails: "Детали лабораторий",
|
||||
productDetails: "Детали продуктов",
|
||||
productIntroduction: "Описание продуктов",
|
||||
labIntroduction: "Описание лабораторий",
|
||||
labLeadership: "Ведущие лаборатории",
|
||||
labLibrary: "Библиотека лабораторий",
|
||||
@ -112,6 +119,8 @@ const webSearch = {
|
||||
patentStatus: "Статус патента",
|
||||
// 后台暂未提供
|
||||
noDataFromBackground: "Нет данных из фона",
|
||||
// 中科云平台
|
||||
zhongkeyunPlatform: "Платформа Чжункейюнь",
|
||||
};
|
||||
|
||||
export default webSearch;
|
||||
|
@ -37,6 +37,7 @@ const webSearch = {
|
||||
expertIntroduction: "专家简介",
|
||||
expertLeadership: "专家领先性",
|
||||
expertLibrary: "专家库",
|
||||
productLibrary: "产品库",
|
||||
findAchievement: "找成果",
|
||||
findAchievementNum: "项成果",
|
||||
findCompany: "找企业",
|
||||
@ -51,7 +52,11 @@ const webSearch = {
|
||||
findPatent: "找专利",
|
||||
findPatentNum: "项专利",
|
||||
findServiceDemand: "找服务需求",
|
||||
findServiceDemandNum: "项服务需求",
|
||||
findTechnologyDemand: "找技术需求",
|
||||
findTechnologyDemandNum: "项技术需求",
|
||||
findProduct: "找产品",
|
||||
findProductNum: "项产品",
|
||||
findTechnologyNum: "项技术",
|
||||
industry: "所属领域",
|
||||
industryField: "所属行业领域",
|
||||
@ -60,6 +65,8 @@ const webSearch = {
|
||||
ipc: "IPC分类号",
|
||||
lab: "实验室",
|
||||
labDetails: "实验室详情",
|
||||
productDetails: "产品详情",
|
||||
productIntroduction: "产品简介",
|
||||
labIntroduction: "实验室简介",
|
||||
labLeadership: "实验室领先性",
|
||||
labLibrary: "实验室库",
|
||||
@ -112,5 +119,7 @@ const webSearch = {
|
||||
patentStatus: "专利状态",
|
||||
// 后台暂未提供
|
||||
noDataFromBackground: "后台暂未提供",
|
||||
// 中科云平台
|
||||
zhongkeyunPlatform: "中科云平台",
|
||||
};
|
||||
export default webSearch;
|
||||
|
@ -68,7 +68,7 @@
|
||||
<el-dropdown-item command="setLocale">
|
||||
<span>{{
|
||||
// ru zh
|
||||
locale === "zh" ? "Русский" : "简体中文"
|
||||
locale === "zh" ? "ru" : "zh"
|
||||
}}</span>
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item command="setLayout">
|
||||
|
@ -864,6 +864,17 @@ export const laboratoryRoutes = [
|
||||
},
|
||||
name: "LabAchievement",
|
||||
},
|
||||
{
|
||||
path: "release",
|
||||
component: () => import("@/views/admin/laboratory/research/achievement/release"),
|
||||
hidden: true,
|
||||
name: "Release",
|
||||
meta: {
|
||||
title: "发布成果",
|
||||
icon: "list",
|
||||
i18nStr: "routes.expert.publishAchievement",
|
||||
},
|
||||
},
|
||||
{
|
||||
path: "service-demand",
|
||||
component: () =>
|
||||
|
@ -57,6 +57,7 @@ const useSettingsStore = defineStore("settings", {
|
||||
},
|
||||
toggleLocale() {
|
||||
this.locale = this.locale === "zh" ? "ru" : "zh";
|
||||
window.location.reload();
|
||||
},
|
||||
},
|
||||
persist: [
|
||||
|
@ -1,5 +1,5 @@
|
||||
// 归属导航
|
||||
export const modeOptions = [
|
||||
/*export const modeOptions = [
|
||||
{
|
||||
value: 101,
|
||||
label: "中小企业服务",
|
||||
@ -16,45 +16,86 @@ export const modeOptions = [
|
||||
value: 104,
|
||||
label: "科研院所服务",
|
||||
},
|
||||
];
|
||||
];*/
|
||||
// 学历
|
||||
export const educationOptions = [
|
||||
{ key: 1, text: "小学" },
|
||||
{ key: 2, text: "初中" },
|
||||
{ key: 3, text: "高中" },
|
||||
{ key: 4, text: "大专" },
|
||||
{ key: 5, text: "本科" },
|
||||
{ key: 6, text: "研究生" },
|
||||
{ key: 7, text: "博士" },
|
||||
{
|
||||
key: 1,
|
||||
text: "小学",
|
||||
zh: "小学",
|
||||
ru: "Начальная школа",
|
||||
},
|
||||
{
|
||||
key: 2,
|
||||
text: "初中",
|
||||
zh: "初中",
|
||||
ru: "Средняя школа",
|
||||
},
|
||||
{
|
||||
key: 3,
|
||||
text: "高中",
|
||||
zh: "高中",
|
||||
ru: "Старшая школа",
|
||||
},
|
||||
{
|
||||
key: 4,
|
||||
text: "大专",
|
||||
zh: "大专",
|
||||
ru: "Колледж",
|
||||
},
|
||||
{
|
||||
key: 5,
|
||||
text: "本科",
|
||||
zh: "本科",
|
||||
ru: "Бакалавр",
|
||||
},
|
||||
{
|
||||
key: 6,
|
||||
text: "研究生",
|
||||
zh: "研究生",
|
||||
ru: "Аспирант",
|
||||
},
|
||||
{
|
||||
key: 7,
|
||||
text: "博士",
|
||||
zh: "博士",
|
||||
ru: "Доктор",
|
||||
},
|
||||
];
|
||||
// 企业类型
|
||||
export const enterpriseOptions = [
|
||||
{ key: "101", value: "上市企业" },
|
||||
{ key: "102", value: "独角兽企业" },
|
||||
{ key: "103", value: "国家级专精特新企业" },
|
||||
{ key: "104", value: "高新技术企业" },
|
||||
{ key: "105", value: "科技企业" },
|
||||
{
|
||||
key: "101",
|
||||
value: "上市企业",
|
||||
zh: "上市企业",
|
||||
ru: "Публичное предприятие",
|
||||
},
|
||||
{
|
||||
key: "102",
|
||||
value: "独角兽企业",
|
||||
zh: "独角兽企业",
|
||||
ru: "Единорог предприятие",
|
||||
},
|
||||
{
|
||||
key: "103",
|
||||
value: "国家级专精特新企业",
|
||||
zh: "国家级专精特新企业",
|
||||
ru: "Национальный уровень специализированных и новых предприятий",
|
||||
},
|
||||
{
|
||||
key: "104",
|
||||
value: "高新技术企业",
|
||||
zh: "高新技术企业",
|
||||
ru: "Предприятие высоких технологий",
|
||||
},
|
||||
{
|
||||
key: "105",
|
||||
value: "科技企业",
|
||||
zh: "科技企业",
|
||||
ru: "Научно - техническое предприятие",
|
||||
},
|
||||
];
|
||||
|
||||
// 基金对接-Фонд стыкуется
|
||||
// 委托研发-Поручить разработку
|
||||
// 海外留学生培养-Обучение иностранных студентов
|
||||
// 贷款-Кредиты
|
||||
// 对接专家院士-Академик - специалист по стыковке
|
||||
// 人才培养-Подготовка кадров
|
||||
// 一带一路国际合作-Международное сотрудничество
|
||||
// 上市辅导-Консультирование по листингу
|
||||
// 成果产业化-Индустриализация результатов
|
||||
// 国家级科研平台合作-Сотрудничество национальных научно - исследовательских платформ
|
||||
// 研发项目立项评估-Оценка проектов НИОКР
|
||||
// 科技查新-Новые технологии.
|
||||
// 产业链上下游对接-Промышленная цепочка вверх и вниз по течению
|
||||
// 知识产权布局-Распределение интеллектуальной собственности
|
||||
// 高价值专利培育-Высокая стоимость патентов
|
||||
// 技术咨询-Технические консультации
|
||||
// 对接政府项目落地-Посадка на правительственный проект
|
||||
// 设立院士工作站-Создание академической рабочей станции
|
||||
|
||||
// 需求类型
|
||||
export const demandCategoryList = [
|
||||
{
|
||||
@ -155,35 +196,169 @@ export const demandCategoryList = [
|
||||
// ]
|
||||
// 成果成熟度 技术
|
||||
export const maturityOptions = [
|
||||
{ key: "1", value: "正在研发" },
|
||||
{ key: "2", value: "小试阶段" },
|
||||
{ key: "3", value: "通过小试" },
|
||||
{ key: "4", value: "中试阶段" },
|
||||
{ key: "5", value: "通过中试" },
|
||||
{ key: "6", value: "可规模生产" },
|
||||
{
|
||||
key: "1",
|
||||
value: "正在研发",
|
||||
valueRu: "В процессе разработки",
|
||||
zh: "正在研发",
|
||||
ru: "В процессе разработки",
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
value: "小试阶段",
|
||||
valueRu: "Этап малого тестирования",
|
||||
zh: "小试阶段",
|
||||
ru: "Этап малого тестирования",
|
||||
},
|
||||
{
|
||||
key: "3",
|
||||
value: "通过小试",
|
||||
valueRu: "Прошел малый тест",
|
||||
zh: "通过小试",
|
||||
ru: "Прошел малый тест",
|
||||
},
|
||||
{
|
||||
key: "4",
|
||||
value: "中试阶段",
|
||||
valueRu: "Этап среднего тестирования",
|
||||
zh: "中试阶段",
|
||||
ru: "Этап среднего тестирования",
|
||||
},
|
||||
{
|
||||
key: "5",
|
||||
value: "通过中试",
|
||||
valueRu: "Прошел средний тест",
|
||||
zh: "通过中试",
|
||||
ru: "Прошел средний тест",
|
||||
},
|
||||
{
|
||||
key: "6",
|
||||
value: "可规模生产",
|
||||
valueRu: "Может быть массовым производством",
|
||||
zh: "可规模生产",
|
||||
ru: "Может быть массовым производством",
|
||||
},
|
||||
];
|
||||
// 成果领先型 领先标准
|
||||
export const leadOptions = [
|
||||
{ key: "1", value: "国内先进" },
|
||||
{ key: "2", value: "国内领先" },
|
||||
{ key: "3", value: "国际先进" },
|
||||
{ key: "4", value: "国际领先" },
|
||||
{
|
||||
key: "1",
|
||||
value: "国内先进",
|
||||
valueRu: "Национально ведущий",
|
||||
zh: "国内先进",
|
||||
ru: "Национально ведущий",
|
||||
// value: this[locale],
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
value: "国内领先",
|
||||
valueRu: "Национально ведущий",
|
||||
zh: "国内领先",
|
||||
ru: "Национально ведущий",
|
||||
},
|
||||
{
|
||||
key: "3",
|
||||
value: "国际先进",
|
||||
valueRu: "Международно ведущий",
|
||||
zh: "国际先进",
|
||||
ru: "Международно ведущий",
|
||||
},
|
||||
{
|
||||
key: "4",
|
||||
value: "国际领先",
|
||||
valueRu: "Международно ведущий",
|
||||
zh: "国际领先",
|
||||
ru: "Международно ведущий",
|
||||
},
|
||||
];
|
||||
// 专利类型
|
||||
export const patentOptions = [
|
||||
{ key: "1", value: "发明专利" },
|
||||
{ key: "2", value: "外观设计" },
|
||||
{ key: "3", value: "实用新型" },
|
||||
{
|
||||
key: "1",
|
||||
value: "发明专利",
|
||||
valueRu: "Изобретение",
|
||||
zh: "发明专利",
|
||||
ru: "Изобретение",
|
||||
},
|
||||
{
|
||||
key: "2",
|
||||
value: "外观设计",
|
||||
valueRu: "Дизайн",
|
||||
zh: "外观设计",
|
||||
ru: "Дизайн",
|
||||
},
|
||||
{
|
||||
key: "3",
|
||||
value: "实用新型",
|
||||
valueRu: "Полезная модель",
|
||||
zh: "实用新型",
|
||||
ru: "Полезная модель",
|
||||
},
|
||||
];
|
||||
// 合作模式
|
||||
export const cooperationOptions = [
|
||||
{ key: "101", value: "技术转让" },
|
||||
{ key: "102", value: "技术许可" },
|
||||
{ key: "103", value: "技术入股" },
|
||||
{ key: "104", value: "合作开发" },
|
||||
{ key: "105", value: "融资" },
|
||||
{ key: "106", value: "公司" },
|
||||
{ key: "107", value: "代理加盟" },
|
||||
{ key: "108", value: "市场推广" },
|
||||
{ key: "109", value: "其他" },
|
||||
{
|
||||
key: "101",
|
||||
value: "技术转让",
|
||||
valueRu: "Технологический трансфер",
|
||||
zh: "技术转让",
|
||||
ru: "Технологический трансфер",
|
||||
},
|
||||
{
|
||||
key: "102",
|
||||
value: "技术许可",
|
||||
valueRu: "Техническая лицензия",
|
||||
zh: "技术许可",
|
||||
ru: "Техническая лицензия",
|
||||
},
|
||||
|
||||
{
|
||||
key: "103",
|
||||
value: "技术入股",
|
||||
valueRu: "Технические акции",
|
||||
zh: "技术入股",
|
||||
ru: "Технические акции",
|
||||
},
|
||||
{
|
||||
key: "104",
|
||||
value: "合作开发",
|
||||
valueRu: "Совместная разработка",
|
||||
zh: "合作开发",
|
||||
ru: "Совместная разработка",
|
||||
},
|
||||
{
|
||||
key: "105",
|
||||
value: "融资",
|
||||
valueRu: "Финансирование",
|
||||
zh: "融资",
|
||||
ru: "Финансирование",
|
||||
},
|
||||
{
|
||||
key: "106",
|
||||
value: "公司",
|
||||
valueRu: "Компания",
|
||||
zh: "公司",
|
||||
ru: "Компания",
|
||||
},
|
||||
{
|
||||
key: "107",
|
||||
value: "代理加盟",
|
||||
valueRu: "Агентство",
|
||||
zh: "代理加盟",
|
||||
ru: "Агентство",
|
||||
},
|
||||
{
|
||||
key: "108",
|
||||
value: "市场推广",
|
||||
valueRu: "Маркетинг",
|
||||
zh: "市场推广",
|
||||
ru: "Маркетинг",
|
||||
},
|
||||
{
|
||||
key: "109",
|
||||
value: "其他",
|
||||
valueRu: "Другие",
|
||||
zh: "其他",
|
||||
ru: "Другие",
|
||||
},
|
||||
];
|
||||
|
@ -10,7 +10,7 @@ import RightToolbar from "@/components/RightToolbar/index.vue";
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const showSearch = ref(true);
|
||||
const tableData = ref([]); // 表格数据
|
||||
const total = ref(0); // 总条数
|
||||
@ -231,8 +231,9 @@ getList();
|
||||
>
|
||||
<template #default="{ row }">
|
||||
{{
|
||||
orderTypeDict.find((item) => item.value === row.orderType)?.label ??
|
||||
"-"
|
||||
orderTypeDict.find((item) => item.value === row.orderType)?.[
|
||||
locale
|
||||
] ?? "-"
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -30,14 +30,14 @@
|
||||
locale === 'zh'
|
||||
? item.name
|
||||
: locale === 'ru'
|
||||
? item.nameRu
|
||||
? item[labelField]
|
||||
: null
|
||||
"
|
||||
>{{
|
||||
locale === "zh"
|
||||
? item.name
|
||||
: locale === "ru"
|
||||
? item.nameRu
|
||||
? item[labelField]
|
||||
: null
|
||||
}}
|
||||
</el-checkbox>
|
||||
@ -260,6 +260,10 @@ const data = reactive({
|
||||
|
||||
const { form, rules } = toRefs(data);
|
||||
|
||||
const labelField = computed(() => {
|
||||
return locale.value === "zh" ? "name" : `name${toTitleCase(locale.value)}`;
|
||||
});
|
||||
|
||||
const labelWidth = 140;
|
||||
const checkList = reactive([...demandCategoryList]);
|
||||
const checkInput = ref("");
|
||||
@ -294,14 +298,12 @@ const backToList = () => {
|
||||
function addCheck() {
|
||||
if (!checkInput.value.trim().length) return ElMessage.error(t("input.input"));
|
||||
const flag = checkList.some((item) => {
|
||||
return item.name.trim() == checkInput.value.trim();
|
||||
return item[labelField.value].trim() == checkInput.value.trim();
|
||||
});
|
||||
if (!flag) {
|
||||
const nameField =
|
||||
locale.value === "zh" ? "name" : `name${toTitleCase(locale.value)}`;
|
||||
checkList.push({
|
||||
id: checkList.length + 1,
|
||||
[nameField]: checkInput.value,
|
||||
[labelField.value]: checkInput.value,
|
||||
});
|
||||
checkInput.value = "";
|
||||
}
|
||||
@ -317,16 +319,12 @@ onMounted(() => {
|
||||
});
|
||||
tab.updatePage(obj);
|
||||
getDemand({ id: route.query.id }).then((resp) => {
|
||||
// const nameField = locale === "zh" ? "name" : "nameRu";
|
||||
console.log(locale.value);
|
||||
const nameField =
|
||||
locale.value === "zh" ? "name" : `name${toTitleCase(locale.value)}`;
|
||||
if (resp.data.kinds) {
|
||||
resp.data.kinds.forEach((el, index) => {
|
||||
if (!checkList.find((item) => item[nameField] === el)) {
|
||||
if (!checkList.find((item) => item[labelField.value] === el)) {
|
||||
checkList.push({
|
||||
id: index,
|
||||
[nameField]: el,
|
||||
[labelField.value]: el,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -63,19 +63,18 @@
|
||||
</el-button>
|
||||
</router-link>
|
||||
|
||||
<el-button
|
||||
v-if="queryParams.status == 1"
|
||||
size="small"
|
||||
type="text"
|
||||
:icon="row.shelfStatus == 2 ? 'Upload' : 'Download'"
|
||||
@click="handleShelf(row)"
|
||||
>{{
|
||||
row.shelfStatus == 2
|
||||
? t("admin.table.putOn")
|
||||
: t("admin.table.putOff")
|
||||
}}
|
||||
) }}
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- v-if="queryParams.status == 1"-->
|
||||
<!-- size="small"-->
|
||||
<!-- type="text"-->
|
||||
<!-- :icon="row.shelfStatus == 2 ? 'Upload' : 'Download'"-->
|
||||
<!-- @click="handleShelf(row)"-->
|
||||
<!-- >{{-->
|
||||
<!-- row.shelfStatus == 2-->
|
||||
<!-- ? t("admin.table.putOn")-->
|
||||
<!-- : t("admin.table.putOff")-->
|
||||
<!-- }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button
|
||||
v-if="queryParams.status != 1"
|
||||
size="small"
|
||||
@ -93,15 +92,15 @@
|
||||
@click="handleResults(row)"
|
||||
>{{ t("webSearch.viewMatchingResults") }}
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="queryParams.status == 1"
|
||||
disabled
|
||||
size="small"
|
||||
type="text"
|
||||
icon="View"
|
||||
@click="checkEnterpriseInfo(row.id)"
|
||||
>{{ t("tips.browseEnterpriseInformation") }}
|
||||
</el-button>
|
||||
<!-- <el-button-->
|
||||
<!-- v-if="queryParams.status == 1"-->
|
||||
<!-- disabled-->
|
||||
<!-- size="small"-->
|
||||
<!-- type="text"-->
|
||||
<!-- icon="View"-->
|
||||
<!-- @click="checkEnterpriseInfo(row.id)"-->
|
||||
<!-- >{{ t("tips.browseEnterpriseInformation") }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button
|
||||
v-if="queryParams.status == 0"
|
||||
size="small"
|
||||
@ -147,7 +146,7 @@ const data = reactive({
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
status: 0, // 状态(0-待审核1-通过2-驳回3-草稿)
|
||||
status: 1, // 状态(0-待审核1-通过2-驳回3-草稿)
|
||||
},
|
||||
});
|
||||
|
||||
|
@ -19,8 +19,8 @@
|
||||
style="margin-top: 50px"
|
||||
v-if="vipData.vipType == 1 || vipData.vipType == 2"
|
||||
>
|
||||
{{ vipData.vipType == 1 ? "VIP" : "SVIP"
|
||||
}} {{ t("home.expirationTime") }}:{{ vipData.expireTime }}
|
||||
{{ vipData.vipType == 1 ? "VIP" : "SVIP" }}
|
||||
{{ t("home.expirationTime") }}:{{ vipData.expireTime }}
|
||||
</div>
|
||||
</div>
|
||||
<span class="pointer" style="font-size: 14px" @click="vipBenefits">
|
||||
|
@ -134,7 +134,7 @@
|
||||
<el-option
|
||||
v-for="item in maturityOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -160,7 +160,7 @@
|
||||
<el-option
|
||||
v-for="item in leadOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -183,7 +183,7 @@
|
||||
<el-option
|
||||
v-for="item in cooperationOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -294,7 +294,7 @@ import {
|
||||
import { computed, reactive, ref, toRefs } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
isAdd: {
|
||||
|
@ -33,8 +33,8 @@
|
||||
<el-checkbox
|
||||
v-for="item in checkList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
>{{ item.name }}
|
||||
:label="locale === 'zh' ? item.name : item[labelField]"
|
||||
>{{ locale === "zh" ? item.name : item[labelField] }}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
<el-row :gutter="20">
|
||||
@ -155,15 +155,15 @@ import {
|
||||
} from "@/api/admin/expert/demand";
|
||||
import { demandCategoryList } from "@/utils/parameter";
|
||||
import { uniqueId } from "lodash";
|
||||
import tab from "@/plugins/tab";
|
||||
// import CityOptions from "@/views/components/CityOptions";
|
||||
import tab from "@/plugins/tab"; // import CityOptions from "@/views/components/CityOptions";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute } from "vue-router";
|
||||
import { updateCount } from "@/api/admin/count.js";
|
||||
import { computed, reactive, ref, toRefs } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { toTitleCase } from "@/utils/string";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const data = reactive({
|
||||
formData: {
|
||||
check: [],
|
||||
@ -273,6 +273,9 @@ const { queryParams, formData, rules } = toRefs(data);
|
||||
const route = useRoute();
|
||||
const formRef = ref();
|
||||
|
||||
const labelField = computed(() => {
|
||||
return locale.value === "zh" ? "name" : `name${toTitleCase(locale.value)}`;
|
||||
});
|
||||
const back = () => {
|
||||
tab.closeOpenPage({ path: "/demand/serviceDemand" });
|
||||
};
|
||||
@ -299,12 +302,12 @@ async function submitForm() {
|
||||
function addCheck() {
|
||||
if (!checkInput.value.trim().length) return ElMessage.error(t("input.input"));
|
||||
const flag = checkList.some((item) => {
|
||||
return item.name.trim() == checkInput.value.trim();
|
||||
return item[labelField.value].trim() == checkInput.value.trim();
|
||||
});
|
||||
if (!flag) {
|
||||
checkList.push({
|
||||
id: checkList.length + 1,
|
||||
name: checkInput.value,
|
||||
[labelField.value]: checkInput.value,
|
||||
});
|
||||
checkInput.value = "";
|
||||
}
|
||||
@ -314,8 +317,8 @@ const getDetail = async () => {
|
||||
const resp = await getDemandById(route.query.id);
|
||||
formData.value = resp.data;
|
||||
for (const item of resp.data.kinds) {
|
||||
if (!checkList.find((el) => el.name === item)) {
|
||||
checkList.push({ id: uniqueId("unq-"), name: item });
|
||||
if (!checkList.find((el) => el[labelField.value] === item)) {
|
||||
checkList.push({ id: uniqueId("unq-"), [labelField.value]: item });
|
||||
}
|
||||
}
|
||||
};
|
||||
|
@ -37,6 +37,7 @@
|
||||
/>
|
||||
<el-table-column :label="t('admin.form.keywords')" prop="keyword" />
|
||||
<!-- <el-zh-column label="浏览量" prop="visitCount" /> -->
|
||||
<el-table-column :label="t('admin.form.industry')" prop="industryStr" />
|
||||
<el-table-column
|
||||
:label="t('admin.table.publishTime')"
|
||||
prop="createTime"
|
||||
|
@ -250,7 +250,7 @@
|
||||
<el-option
|
||||
v-for="item in patentOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -334,7 +334,7 @@ import { useRouter } from "vue-router";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { computed, getCurrentInstance, reactive, ref, toRefs } from "vue";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
@ -31,6 +31,7 @@ import { useRoute, useRouter } from "vue-router";
|
||||
import { updateCount } from "@/api/admin/count";
|
||||
import ReleaseForm from "../components/ReleaseForm";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import {updateAchievement} from "@/api/admin/laboratory/achievement";
|
||||
|
||||
const labelWidth = 140;
|
||||
|
||||
@ -64,7 +65,7 @@ if (id) {
|
||||
const submitForm = async (status) => {
|
||||
if (await releaseFormRef.value.validateForm()) {
|
||||
if (id) {
|
||||
await updateExpertAchievement({ ...form.value, status });
|
||||
await updateAchievement({ ...form.value, status });
|
||||
ElMessage.success(t("admin.common.editSuccess"));
|
||||
// router.back();
|
||||
} else {
|
||||
|
@ -1,63 +1,63 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card style="width: 55%; margin: 0 auto">
|
||||
<p>
|
||||
<b> {{ t("admin.form.basicData") }}</b>
|
||||
</p>
|
||||
<el-form
|
||||
ref="personFormRef"
|
||||
:model="personForm"
|
||||
:rules="rules"
|
||||
label-width="100px"
|
||||
>
|
||||
<el-form-item :label="t('admin.form.fullName')" prop="nickName">
|
||||
<el-input
|
||||
v-model="personForm.nickName"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.fullName') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.mobile')" prop="mobile">
|
||||
<!-- :maxlength="11"-->
|
||||
<el-input
|
||||
v-model="personForm.mobile"
|
||||
oninput="value = value.replace(/\D/,'')"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.mobile') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||
<el-input
|
||||
v-model="personForm.email"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.email') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.position')" prop="post">
|
||||
<el-input
|
||||
v-model="personForm.post"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.position') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item :label="t('admin.form.phone')" prop="phone">
|
||||
<el-input
|
||||
v-model="personForm.phone"
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.form.phone') })
|
||||
"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="submitPersonalInfo"
|
||||
>{{ t("admin.common.submit") }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<!-- <p>-->
|
||||
<!-- <b> {{ t("admin.form.basicData") }}</b>-->
|
||||
<!-- </p>-->
|
||||
<!-- <el-form-->
|
||||
<!-- ref="personFormRef"-->
|
||||
<!-- :model="personForm"-->
|
||||
<!-- :rules="rules"-->
|
||||
<!-- label-width="100px"-->
|
||||
<!-- >-->
|
||||
<!-- <el-form-item :label="t('admin.form.fullName')" prop="nickName">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="personForm.nickName"-->
|
||||
<!-- :placeholder="-->
|
||||
<!-- t('admin.form.placeholder', { type: t('admin.form.fullName') })-->
|
||||
<!-- "-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item :label="t('admin.form.mobile')" prop="mobile">-->
|
||||
<!-- <!– :maxlength="11"–>-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="personForm.mobile"-->
|
||||
<!-- oninput="value = value.replace(/\D/,'')"-->
|
||||
<!-- :placeholder="-->
|
||||
<!-- t('admin.form.placeholder', { type: t('admin.form.mobile') })-->
|
||||
<!-- "-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item :label="t('admin.form.email')" prop="email">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="personForm.email"-->
|
||||
<!-- :placeholder="-->
|
||||
<!-- t('admin.form.placeholder', { type: t('admin.form.email') })-->
|
||||
<!-- "-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item :label="t('admin.form.position')" prop="post">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="personForm.post"-->
|
||||
<!-- :placeholder="-->
|
||||
<!-- t('admin.form.placeholder', { type: t('admin.form.position') })-->
|
||||
<!-- "-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item :label="t('admin.form.phone')" prop="phone">-->
|
||||
<!-- <el-input-->
|
||||
<!-- v-model="personForm.phone"-->
|
||||
<!-- :placeholder="-->
|
||||
<!-- t('admin.form.placeholder', { type: t('admin.form.phone') })-->
|
||||
<!-- "-->
|
||||
<!-- />-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item>-->
|
||||
<!-- <el-button type="primary" @click="submitPersonalInfo"-->
|
||||
<!-- >{{ t("admin.common.submit") }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-form>-->
|
||||
<p>
|
||||
<b>{{ t("admin.form.data", { type: t("admin.common.lab") }) }}</b>
|
||||
</p>
|
||||
@ -102,7 +102,7 @@ const data = reactive({
|
||||
});
|
||||
const { form, personForm, rules } = toRefs(data);
|
||||
const labFormRef = ref();
|
||||
const personFormRef = ref();
|
||||
// const personFormRef = ref();
|
||||
const labelWidth = ref(140);
|
||||
|
||||
// 获取基础信息用于回显
|
||||
@ -117,7 +117,7 @@ const getBasicInfo = async () => {
|
||||
|
||||
const submitPersonalInfo = async () => {
|
||||
try {
|
||||
await personFormRef.value.validate();
|
||||
// await personFormRef.value.validate();
|
||||
await insertClientUser(personForm.value);
|
||||
ElMessage.success(t("admin.common.updatePersonalInformationSuccess"));
|
||||
const { data } = await getInfo();
|
||||
|
@ -40,13 +40,22 @@
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<!-- <el-col v-if="route.name === 'LabAchievement'" :span="1.5">-->
|
||||
<!-- <el-button-->
|
||||
<!-- icon="UploadFilled"-->
|
||||
<!-- size="small"-->
|
||||
<!-- type="primary"-->
|
||||
<!-- @click="handleImport"-->
|
||||
<!-- >{{ t("admin.form.importAchievement") }}-->
|
||||
<!-- </el-button>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col v-if="route.name === 'LabAchievement'" :span="1.5">
|
||||
<el-button
|
||||
icon="UploadFilled"
|
||||
size="small"
|
||||
type="primary"
|
||||
@click="handleImport"
|
||||
>{{ t("admin.form.importAchievement") }}
|
||||
<el-button icon="plus" size="small" type="primary" @click="handleAdd"
|
||||
>{{
|
||||
t("admin.form.add", {
|
||||
type: t("admin.common.achievement"),
|
||||
})
|
||||
}}
|
||||
</el-button>
|
||||
</el-col>
|
||||
<right-toolbar
|
||||
@ -197,6 +206,7 @@ import importTip from "@/assets/achievement_import_description.txt?url";
|
||||
import { saveAs } from "file-saver";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import dayjs from "dayjs";
|
||||
import modal from "@/plugins/modal";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
@ -257,13 +267,14 @@ function resetQuery() {
|
||||
* @param id
|
||||
*/
|
||||
function handleDelete(id) {
|
||||
ElMessageBox.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
type: t("admin.common.achievement"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
modal
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.common.delete"),
|
||||
type: t("admin.common.achievement"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteAchievements(id);
|
||||
})
|
||||
@ -329,5 +340,14 @@ function submitFileForm() {
|
||||
uploadRef.value.submit();
|
||||
}
|
||||
|
||||
const handleAdd = () => {
|
||||
router.push({
|
||||
path: "./release",
|
||||
// query: {
|
||||
// id: "",
|
||||
// },
|
||||
});
|
||||
};
|
||||
|
||||
getList();
|
||||
</script>
|
81
src/views/admin/laboratory/research/achievement/release.vue
Normal file
81
src/views/admin/laboratory/research/achievement/release.vue
Normal file
@ -0,0 +1,81 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<el-card shadow="always" style="width: 55%; margin: 0 auto">
|
||||
<ReleaseForm
|
||||
ref="releaseFormRef"
|
||||
v-model="form"
|
||||
:isAdd="false"
|
||||
:labelWidth="labelWidth"
|
||||
/>
|
||||
<div :style="{ marginLeft: labelWidth + 'px' }">
|
||||
<!-- <el-button type="primary" @click="submitForm(`3`)"-->
|
||||
<!-- >{{ t("admin.form.saveDraft") }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button type="primary" @click="submitForm(`1`)"
|
||||
>{{ t("admin.common.submitAudit") }}
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
<script name="ReleaseAchievement" setup>
|
||||
import {
|
||||
insertAchievement,
|
||||
updateAchievement,
|
||||
achievementInfo,
|
||||
} from "@/api/admin/laboratory/achievement";
|
||||
import tab from "@/plugins/tab";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { reactive, ref, toRefs } from "vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { updateCount } from "@/api/admin/count";
|
||||
import ReleaseForm from "@/views/admin/expert/components/ReleaseForm";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const labelWidth = 140;
|
||||
|
||||
const data = reactive({
|
||||
form: { mode: 1, shelfStatus: "2" },
|
||||
});
|
||||
const formData = reactive({});
|
||||
|
||||
const { form } = toRefs(data);
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const releaseFormRef = ref();
|
||||
const { id } = route.query;
|
||||
const { t } = useI18n();
|
||||
if (id) {
|
||||
const obj = Object.assign({}, route, {
|
||||
title: t("admin.form.edit", {
|
||||
type: t("admin.common.achievement"),
|
||||
}),
|
||||
});
|
||||
tab.updatePage(obj);
|
||||
achievementInfo({ id }).then((resp) => {
|
||||
form.value = resp.data;
|
||||
form.value.keywords =
|
||||
form.value.keyword?.split(",").filter((el) => el !== "") ?? [];
|
||||
form.value.customers =
|
||||
form.value.customer?.split(",").filter((el) => el !== "") ?? [];
|
||||
});
|
||||
}
|
||||
|
||||
const submitForm = async (status) => {
|
||||
if (await releaseFormRef.value.validateForm()) {
|
||||
if (id) {
|
||||
await updateAchievement({ ...form.value, status });
|
||||
ElMessage.success(t("admin.common.editSuccess"));
|
||||
// router.back();
|
||||
} else {
|
||||
await insertAchievement({ ...form.value, status });
|
||||
ElMessage.success(t("admin.common.addSuccess"));
|
||||
// router.back();
|
||||
}
|
||||
updateCount("achievement");
|
||||
void tab.closeOpenPage({ path: "/admin/research/lab-achievement" });
|
||||
} else {
|
||||
console.log("validation failed");
|
||||
}
|
||||
};
|
||||
</script>
|
@ -8,7 +8,7 @@
|
||||
@submit.prevent
|
||||
>
|
||||
<el-form-item
|
||||
:label="t('admin.form.name', { type: t('admin.common.achievement') })"
|
||||
:label="t('admin.form.name', { type: t('admin.common.expert') })"
|
||||
prop="title"
|
||||
>
|
||||
<el-input
|
||||
@ -16,8 +16,8 @@
|
||||
clearable
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.common.name', {
|
||||
type: t('admin.common.achievement'),
|
||||
type: t('admin.form.name', {
|
||||
type: t('admin.common.expert'),
|
||||
}),
|
||||
})
|
||||
"
|
||||
@ -76,7 +76,7 @@
|
||||
clearable
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', {
|
||||
type: t('admin.common.name', {
|
||||
type: t('admin.form.name', {
|
||||
type: t('admin.common.expert'),
|
||||
}),
|
||||
})
|
||||
@ -278,6 +278,7 @@ import {
|
||||
import Pagination from "@/components/Pagination/index.vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import dayjs from "dayjs";
|
||||
import modal from "@/plugins/modal";
|
||||
|
||||
const router = useRouter();
|
||||
const { t } = useI18n();
|
||||
@ -332,13 +333,14 @@ function resetQuery() {
|
||||
|
||||
/** 删除按钮操作 */
|
||||
function handleDeleteBind(id) {
|
||||
ElMessageBox.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.table.cancelRelation"),
|
||||
type: t("admin.common.expert"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
modal
|
||||
.confirm(
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.table.cancelRelation"),
|
||||
type: t("admin.common.expert"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return deleteBindExpert(id);
|
||||
})
|
||||
@ -417,14 +419,15 @@ const resetNotBindExpertQuery = () => {
|
||||
* @param id
|
||||
*/
|
||||
const submitBind = (id) => {
|
||||
ElMessageBox.confirm(
|
||||
/*"是否确认关联该专家?"*/
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.table.relation"),
|
||||
type: t("admin.common.expert"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
modal
|
||||
.confirm(
|
||||
/*"是否确认关联该专家?"*/
|
||||
t("admin.common.confirmAction", {
|
||||
action: t("admin.table.relation"),
|
||||
type: t("admin.common.expert"),
|
||||
number: id,
|
||||
})
|
||||
)
|
||||
.then(function () {
|
||||
return bindExpert(id);
|
||||
})
|
||||
|
@ -63,7 +63,9 @@
|
||||
<!-- <el-zh-column :label="t('admin.form.belongExpert')" prop="inventor" />-->
|
||||
<el-table-column :label="t('admin.table.topicRole')">
|
||||
<template #default="{ row }">
|
||||
{{ subjectRoleDict.find((item) => item.value === row.role)?.label }}
|
||||
{{
|
||||
subjectRoleDict.find((item) => item.value === row.role)?.[locale]
|
||||
}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('admin.form.topicLeader')" prop="director" />
|
||||
@ -113,7 +115,7 @@
|
||||
|
||||
<script setup>
|
||||
import dayjs from "dayjs";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { ElMessage } from "element-plus";
|
||||
import modal from "@/plugins/modal";
|
||||
import { useRouter } from "vue-router";
|
||||
import { getCurrentInstance, reactive, ref, toRefs } from "vue";
|
||||
@ -123,7 +125,8 @@ import {
|
||||
} from "@/api/admin/laboratory/research-project";
|
||||
import { subjectRoleDict } from "@/constant/dict";
|
||||
import { useI18n } from "vue-i18n";
|
||||
const { t } = useI18n();
|
||||
|
||||
const { t, locale } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
@ -131,7 +131,7 @@ import { reactive, ref, toRefs } from "vue";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { useRoute } from "vue-router";
|
||||
import tab from "@/plugins/tab";
|
||||
import { serviceDemandInfo } from "@/api/admin/research/service-demand";
|
||||
import { serviceDemandInfo } from "@/api/admin/laboratory/service-demand";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
|
@ -8,14 +8,14 @@
|
||||
@submit.prevent
|
||||
>
|
||||
<el-form-item
|
||||
:label="t('admin.form.name', { type: t('admin.common.achievement') })"
|
||||
:label="t('admin.form.name', { type: t('admin.common.demand') })"
|
||||
prop="title"
|
||||
>
|
||||
<el-input
|
||||
v-model="queryParams.title"
|
||||
clearable
|
||||
:placeholder="
|
||||
t('admin.form.placeholder', { type: t('admin.common.patent') })
|
||||
t('admin.form.placeholder', { type: t('admin.common.demand') })
|
||||
"
|
||||
size="small"
|
||||
style="width: 240px"
|
||||
@ -86,9 +86,9 @@
|
||||
:label="t('admin.common.operation')"
|
||||
>
|
||||
<template #default="{ row }">
|
||||
<el-button icon="FolderRemove" size="small" type="text" @click=""
|
||||
>{{ t("admin.table.cancelPublish") }}
|
||||
</el-button>
|
||||
<!-- <el-button icon="FolderRemove" size="small" type="text" @click=""-->
|
||||
<!-- >{{ t("admin.table.cancelPublish") }}-->
|
||||
<!-- </el-button>-->
|
||||
<el-button
|
||||
icon="view"
|
||||
size="small"
|
||||
@ -122,6 +122,7 @@ import { serviceDemandStatusDict } from "@/constant/dict";
|
||||
import DictTag from "@/components/DictTag/index.vue";
|
||||
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
|
@ -70,7 +70,7 @@
|
||||
<el-table-column align="center" :label="t('admin.table.topicRole')">
|
||||
<template #default="{ row }">
|
||||
<span>{{
|
||||
subjectRoleDict.find((item) => item.value === row.role)?.label
|
||||
subjectRoleDict.find((item) => item.value === row.role)?.[locale]
|
||||
}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
@ -136,7 +136,7 @@ import {
|
||||
import { subjectRoleDict } from "@/constant/dict";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
@ -91,7 +91,7 @@
|
||||
<el-option
|
||||
v-for="item in enterpriseOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -221,7 +221,7 @@ import { computed, reactive, ref, toRefs } from "vue";
|
||||
import ImageUpload from "@/components/ImageUpload/index.vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
isAdd: {
|
||||
|
@ -114,9 +114,9 @@
|
||||
>
|
||||
<el-option
|
||||
v-for="item in educationOptions"
|
||||
:key="item.text"
|
||||
:label="item.text"
|
||||
:value="item.text"
|
||||
:key="item.key"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
@ -220,7 +220,7 @@ import { educationOptions } from "@/utils/parameter";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { computed, toRefs } from "vue";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
|
@ -20,7 +20,7 @@
|
||||
<el-option
|
||||
v-for="item in levelI"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:label="item[labelField]"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
@ -37,7 +37,7 @@
|
||||
<el-option
|
||||
v-for="item in levelII"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:label="item[labelField]"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
@ -52,7 +52,7 @@
|
||||
<el-option
|
||||
v-for="item in levelIII"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:label="item[labelField]"
|
||||
:value="item.id"
|
||||
>
|
||||
</el-option>
|
||||
@ -71,7 +71,7 @@ import { listSysIndustry } from "@/api/config";
|
||||
import { computed, reactive, ref, toRefs, watch } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
labelWidth: {
|
||||
@ -80,6 +80,9 @@ const props = defineProps({
|
||||
},
|
||||
});
|
||||
const { modelValue, labelWidth } = toRefs(props);
|
||||
const labelField = computed(() =>
|
||||
locale.value === "zh" ? "name" : `${locale.value}Name`
|
||||
);
|
||||
const data = reactive({
|
||||
rules: {
|
||||
"industrys.2": [
|
||||
|
@ -11,7 +11,8 @@
|
||||
{{ t("admin.form.basicInfo") }}
|
||||
</div>
|
||||
|
||||
<el-row v-if="isAdd">
|
||||
<!-- v-if="isAdd"-->
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-form-item
|
||||
:label="t('admin.form.name', { type: t('admin.common.lab') })"
|
||||
|
@ -103,7 +103,7 @@
|
||||
<el-option
|
||||
v-for="item in maturityOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -125,7 +125,7 @@
|
||||
<el-option
|
||||
v-for="item in leadOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -149,7 +149,7 @@
|
||||
<el-option
|
||||
v-for="item in cooperationOptions"
|
||||
:key="item.key"
|
||||
:label="item.value"
|
||||
:label="item[locale]"
|
||||
:value="item.key"
|
||||
>
|
||||
</el-option>
|
||||
@ -222,7 +222,7 @@ import { computed, reactive, toRefs } from "vue"; // import VideoUpload from "@/
|
||||
// import { researchSelect, laboratorySelect } from "@/api/identity/index";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const props = defineProps({
|
||||
modelValue: Object,
|
||||
isAdd: {
|
||||
|
@ -66,7 +66,7 @@ const methods = [
|
||||
{
|
||||
name: "enterprise",
|
||||
// title: "企业分布地图",
|
||||
title: computed(() => t("map.enterpriseMap")),
|
||||
title: computed(() => t("map.companyMap")),
|
||||
byProvince: countEnterpriseByProvince,
|
||||
byCity: countEnterpriseByCity,
|
||||
byArea: countEnterpriseByArea,
|
||||
@ -256,7 +256,10 @@ const mapClick = (ev) => {
|
||||
const playScrollAnimation = (direction, start) => {
|
||||
const pageWrap = document.querySelector(".page-wrap");
|
||||
const rootWrap = document.querySelector(".root-container");
|
||||
html2canvas(pageWrap).then((canvas) => {
|
||||
html2canvas(pageWrap, {
|
||||
// width: pageWrap.offsetWidth / 5,
|
||||
// height: pageWrap.offsetHeight / 5,
|
||||
}).then((canvas) => {
|
||||
canvas.addEventListener("wheel", (ev) => {
|
||||
ev.stopPropagation();
|
||||
ev.preventDefault();
|
||||
@ -346,11 +349,23 @@ watch(locale, (newVal) => {
|
||||
<div class="table">
|
||||
<div class="head">
|
||||
<div class="th">
|
||||
<div class="title">地区</div>
|
||||
<div class="count">人数</div>
|
||||
<div class="title">{{ t("map.area") }}</div>
|
||||
<div class="count">{{ t("map.people") }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div
|
||||
v-if="areaCountPaged.length === 0"
|
||||
class="tr"
|
||||
style="
|
||||
height: 36px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
{{ t("map.noData") }}
|
||||
</div>
|
||||
<div v-for="item in areaCountPaged" :key="item.adcode" class="tr">
|
||||
<div class="title">{{ item.name }}</div>
|
||||
<div class="count">{{ item.count }}</div>
|
||||
@ -367,11 +382,23 @@ watch(locale, (newVal) => {
|
||||
<div class="table">
|
||||
<div class="head">
|
||||
<div class="th">
|
||||
<div class="title">领域</div>
|
||||
<div class="count">人数</div>
|
||||
<div class="title">{{ t("map.field") }}</div>
|
||||
<div class="count">{{ t("map.people") }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body">
|
||||
<div
|
||||
v-if="industryCountPaged.length === 0"
|
||||
class="tr"
|
||||
style="
|
||||
height: 36px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
"
|
||||
>
|
||||
{{ t("map.noData") }}
|
||||
</div>
|
||||
<div
|
||||
v-for="item in industryCountPaged"
|
||||
:key="item.adcode"
|
||||
|
@ -138,7 +138,7 @@
|
||||
</div>
|
||||
|
||||
<!-- 底部 -->
|
||||
<div class="foot">Copyright © 2007-2021 中科云 版权所有</div>
|
||||
<div class="foot">Copyright © 2007-2021 {{ t('footer.copyRight') }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div v-loading="loading">
|
||||
<searchContainer
|
||||
bannerKey="首页>成果库>成果详情"
|
||||
title="成果库"
|
||||
:title="t('webSearch.achievementLibrary')"
|
||||
@handleQuery="handleQuery"
|
||||
>
|
||||
<template v-slot>
|
||||
@ -23,76 +23,83 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<el-row type="flex" style="padding-bottom: 20px">
|
||||
<div style="flex: 1">
|
||||
<achievementItem :data="state.expertDetail">
|
||||
<template v-slot:des>
|
||||
<div>{{ state.expertDetail.introduce }}</div>
|
||||
</template>
|
||||
</achievementItem>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
{{ t("webSearch.appointment") }}
|
||||
<el-col :span="16">
|
||||
<div>
|
||||
<achievementItem :data="state.expertDetail">
|
||||
<template v-slot:des>
|
||||
<div>{{ state.expertDetail.introduce }}</div>
|
||||
</template>
|
||||
</achievementItem>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">{{ t("webSearch.share") }}</div>
|
||||
</div>
|
||||
<div class="share">{{ t("webSearch.share") }}</div>
|
||||
</div>
|
||||
|
||||
<div class="detail">
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">技术视频</div>
|
||||
</div> -->
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">成果简介</div>
|
||||
</div>
|
||||
<div class="html" v-html="state.expertDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">成果领先性</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
leadOptions.find(
|
||||
(el) => el.key == state.expertDetail.leadStandard
|
||||
)?.value
|
||||
}}
|
||||
<div class="detail">
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">技术视频</div>
|
||||
</div> -->
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
{{ t("webSearch.achievementIntroduction") }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">{{ t("webSearch.cooperationMode") }}</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
cooperationOptions.find(
|
||||
(el) => el.key == state.expertDetail.cooperationMode
|
||||
)?.value
|
||||
}}
|
||||
<div class="html" v-html="state.expertDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
{{ t("webSearch.achievementLeadership") }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">应用客户</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{ state.expertDetail.customer }}
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
leadOptions.find(
|
||||
(el) => el.key == state.expertDetail.leadStandard
|
||||
)?.[locale]
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
{{ t("webSearch.cooperationMode") }}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">所在地</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
cooperationOptions.find(
|
||||
(el) => el.key == state.expertDetail.cooperationMode
|
||||
)?.[locale]
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
{{ t("webSearch.applicationCustomers") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{ state.expertDetail.customer }}
|
||||
</div>
|
||||
</section>
|
||||
<!-- -->
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">{{ t("webSearch.unit") }}</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.expertDetail.unit }}
|
||||
</section>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.localtion }}
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">所属单位</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.expertDetail.unit }}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -102,25 +109,21 @@
|
||||
|
||||
<script setup>
|
||||
import webContact from "@/components/webContact/index.vue";
|
||||
import achievementItem from "./components/achievementItem.vue";
|
||||
import loadMore from "./components/loadMore.vue";
|
||||
import request from "@/utils/request";
|
||||
// import { onMounted } from "vue";
|
||||
import achievementItem from "./components/achievementItem.vue"; // import { onMounted } from "vue";
|
||||
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";
|
||||
import { computed, reactive, ref } from "vue";
|
||||
import docking from "./components/docking.vue";
|
||||
import { getCity } from "@/utils/city";
|
||||
import { leadOptions, cooperationOptions } from "@/utils/parameter";
|
||||
import { useI18n } from "vue-i18n";
|
||||
const { t } = useI18n();
|
||||
import { cooperationOptions, leadOptions } from "@/utils/parameter";
|
||||
|
||||
const { t, locale } = useI18n();
|
||||
const leadValueField = computed(() =>
|
||||
locale.value === "zh" ? "value" : "valueRu"
|
||||
);
|
||||
const showDocking = ref(false);
|
||||
const loading = ref(true);
|
||||
// import {lead}
|
||||
const state = reactive({
|
||||
pageNum: 1,
|
||||
pageSize: 4,
|
||||
@ -214,11 +217,11 @@ function getDataList() {
|
||||
// if (200 == res.code) {
|
||||
console.log(resp.data);
|
||||
state.expertDetail = resp.data;
|
||||
state.localtion = await getCity(
|
||||
resp.data.province,
|
||||
resp.data.city,
|
||||
resp.data.district
|
||||
);
|
||||
// state.localtion = await getCity(
|
||||
// resp.data.province,
|
||||
// resp.data.city,
|
||||
// resp.data.district
|
||||
// );
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
@ -269,13 +272,13 @@ function getDataList() {
|
||||
|
||||
.r {
|
||||
display: inline-block;
|
||||
width: 325px;
|
||||
width: 100%;
|
||||
margin-left: 14px;
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.detail {
|
||||
width: 661px;
|
||||
//width: 661px;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
|
@ -46,7 +46,7 @@
|
||||
<div class="line">
|
||||
<!-- 联系人-->
|
||||
{{ t("webSearch.contact") }}
|
||||
<span>中科云平台</span>
|
||||
<span>{{ t("webSearch.zhongkeyunPlatform") }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
{{ t("webSearch.contactInformation") }}({{ t("webSearch.wechat") }}):
|
||||
|
@ -28,14 +28,14 @@
|
||||
<div class="line">
|
||||
<!-- 联系人-->
|
||||
{{ t("webSearch.contact") }}
|
||||
<span>中科云平台</span>
|
||||
<span>{{ t("webSearch.zhongkeyunPlatform") }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系方式-->
|
||||
{{ t("webSearch.contactInformation") }}
|
||||
(
|
||||
<!-- 微信同号-->
|
||||
{{ t("webSearch.WeChat") }}
|
||||
{{ t("webSearch.wechat") }}
|
||||
):
|
||||
<span>18156053255</span>
|
||||
</div>
|
||||
|
@ -41,8 +41,9 @@
|
||||
{{ t("webSearch.companySize") }}
|
||||
:
|
||||
<span>{{
|
||||
enterpriseOptions.find((el) => el.key == item.kind)
|
||||
?.value ?? t("webSearch.noData")
|
||||
enterpriseOptions.find((el) => el.key == item.kind)?.[
|
||||
locale
|
||||
] ?? t("webSearch.noData")
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
@ -103,7 +104,7 @@ import { useRoute, useRouter } from "vue-router";
|
||||
import { ref } from "vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const searchResults = ref([]);
|
||||
|
@ -53,7 +53,7 @@
|
||||
<span>{{
|
||||
enterpriseOptions.find(
|
||||
(el) => el.key == state.companyDetail.kind
|
||||
)?.value ?? t("webSearch.noData")
|
||||
)?.[locale] ?? t("webSearch.noData")
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
@ -218,8 +218,9 @@
|
||||
{{ t("webSearch.companySize") }}
|
||||
:
|
||||
<span>{{
|
||||
enterpriseOptions.find((el) => el.key == item.kind)
|
||||
?.value ?? t("webSearch.noData")
|
||||
enterpriseOptions.find((el) => el.key == item.kind)?.[
|
||||
locale
|
||||
] ?? t("webSearch.noData")
|
||||
}}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
@ -267,7 +268,7 @@ import { search } from "@/api/website/home";
|
||||
import { getCity } from "@/utils/city";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const loading = ref(true);
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="index">
|
||||
<searchContainer
|
||||
bannerKey="首页>专家库>专家列表"
|
||||
title="专家库"
|
||||
:title="t('webSearch.expertLibrary')"
|
||||
@handleQuery="handleQuery"
|
||||
>
|
||||
<template v-slot>
|
||||
@ -11,7 +11,8 @@
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span> 位专家
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span>
|
||||
{{ t("webSearch.findExpertNum") }}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
@ -34,7 +35,9 @@
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r"><WebContact /></div>
|
||||
<div class="r">
|
||||
<WebContact />
|
||||
</div>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -121,6 +124,7 @@ const getDataList = async () => {
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
margin-bottom: 20px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #0054ff;
|
||||
|
@ -98,7 +98,11 @@
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{ state.expertDetail.education }}
|
||||
{{
|
||||
educationOptions.find(
|
||||
(item) => item.key == state.expertDetail.education
|
||||
)?.[locale]
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
@ -424,8 +428,9 @@ import searchContainer from "./components/searchContainer.vue";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import docking from "./components/docking.vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { educationOptions } from "../../../utils/parameter";
|
||||
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const showDocking = ref(false);
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="index">
|
||||
<searchContainer
|
||||
bannerKey="首页>实验室库>实验室列表"
|
||||
title="实验室库"
|
||||
:title="t('webSearch.labLibrary')"
|
||||
@handleQuery="handleQuery"
|
||||
>
|
||||
<template v-slot>
|
||||
@ -12,7 +12,7 @@
|
||||
<industrySelect @industryChange="industryChange"></industrySelect>
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }}
|
||||
<span>{{ state.total }}</span> 个实验室
|
||||
<span>{{ state.total }}</span> {{t('webSearch.findLabNum')}}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in state.list" :key="item.id">
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="index">
|
||||
<searchContainer
|
||||
bannerKey="首页>实验室库>实验室列表"
|
||||
title="实验室库"
|
||||
:title="t('webSearch.labLibrary')"
|
||||
@handleQuery="handleQuery"
|
||||
>
|
||||
<template v-slot>
|
||||
@ -11,7 +11,7 @@
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span> 个实验室
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span> {{t('webSearch.findLabNum')}}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
|
@ -7,34 +7,38 @@
|
||||
>
|
||||
<template v-slot>
|
||||
<el-row type="flex" style="padding: 20px 0">
|
||||
<div style="flex: 1">
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span> 个专利
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<gainItem :data="item"></gainItem>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<el-col :span="16">
|
||||
<div style="flex: 1">
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span>
|
||||
{{ t("webSearch.findPatentNum") }}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<gainItem :data="item"></gainItem>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<pagination
|
||||
class="pagination"
|
||||
:total="total"
|
||||
:pageSizes="[10, 10 << 1, 10 << 2, 10 << 3]"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:autoScroll="false"
|
||||
@pagination="getDataList"
|
||||
/>
|
||||
<pagination
|
||||
class="pagination"
|
||||
:total="total"
|
||||
:pageSizes="[10, 10 << 1, 10 << 2, 10 << 3]"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:autoScroll="false"
|
||||
@pagination="getDataList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r">
|
||||
<WebContact />
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<WebContact /></div
|
||||
></el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -64,6 +68,7 @@ const queryParams = reactive({
|
||||
queryType: route.query.queryType,
|
||||
query: route.query.keyword,
|
||||
});
|
||||
|
||||
function handleDetail(id) {
|
||||
let routeData = router.resolve({
|
||||
path: `/searchList/0/detail/${id}`,
|
||||
@ -76,6 +81,7 @@ const loading = ref(false);
|
||||
|
||||
const searchResults = ref([]);
|
||||
const total = ref(0);
|
||||
|
||||
function createdData(arr) {
|
||||
let l = [];
|
||||
let snap = JSON.parse(JSON.stringify(arr));
|
||||
@ -90,12 +96,14 @@ const getSearchResult = async () => {
|
||||
const resp = await search(queryParams);
|
||||
console.log(resp);
|
||||
};
|
||||
|
||||
function handleQuery(state) {
|
||||
// state.keyword = keyword;
|
||||
queryParams.query = state.currentKeyword;
|
||||
queryParams.queryType = state.queryType;
|
||||
getDataList();
|
||||
}
|
||||
|
||||
function industryChange(industry) {
|
||||
if (industry.id1) {
|
||||
state.id1 = industry.id1;
|
||||
@ -129,6 +137,7 @@ const getDataList = async () => {
|
||||
font-weight: 500;
|
||||
color: #333333;
|
||||
margin-bottom: 20px;
|
||||
|
||||
span {
|
||||
font-size: 30px;
|
||||
color: #0054ff;
|
||||
@ -137,7 +146,7 @@ const getDataList = async () => {
|
||||
|
||||
.r {
|
||||
display: inline-block;
|
||||
width: 325px;
|
||||
width: 100%;
|
||||
margin-left: 14px;
|
||||
min-height: 200px;
|
||||
// background-color: #fff;
|
||||
@ -155,21 +164,25 @@ const getDataList = async () => {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
img {
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
}
|
||||
|
||||
.content {
|
||||
display: inline-block;
|
||||
width: 390px;
|
||||
width: 100%;
|
||||
|
||||
.line {
|
||||
font-size: 16px;
|
||||
font-family: Source Han Sans CN;
|
||||
font-weight: 400;
|
||||
color: #666666;
|
||||
margin: 10px 0;
|
||||
|
||||
span {
|
||||
font-size: 16px;
|
||||
font-family: Source Han Sans CN;
|
||||
@ -178,15 +191,18 @@ const getDataList = async () => {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.keywords {
|
||||
flex: 1;
|
||||
width: 129px;
|
||||
height: 129px;
|
||||
}
|
||||
|
||||
.tit {
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
cursor: pointer;
|
||||
|
||||
.text {
|
||||
margin-right: 200px;
|
||||
overflow: hidden;
|
||||
|
@ -123,7 +123,7 @@
|
||||
<section>
|
||||
{{
|
||||
patentOptions.find((el) => el.key == state.patentDetail.kind)
|
||||
?.value
|
||||
?.[locale]
|
||||
}}
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
@ -233,7 +233,7 @@ import { useRoute, useRouter } from "vue-router";
|
||||
import docking from "./components/docking.vue";
|
||||
import { useI18n } from "vue-i18n";
|
||||
const showDocking = ref(false);
|
||||
const { t } = useI18n();
|
||||
const { t,locale } = useI18n();
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const loading = ref(true);
|
||||
|
@ -22,95 +22,90 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<el-row type="flex" style="padding-bottom: 20px">
|
||||
<div style="flex: 1">
|
||||
<achievementItem :data="state.expertDetail">
|
||||
<template v-slot:des>
|
||||
<div>{{ state.expertDetail.introduce }}</div>
|
||||
</template>
|
||||
</achievementItem>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
<el-col :span="16">
|
||||
<div>
|
||||
<achievementItem :data="state.expertDetail">
|
||||
<template v-slot:des>
|
||||
<div>{{ state.expertDetail.introduce }}</div>
|
||||
</template>
|
||||
</achievementItem>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="detail">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 产品简介-->
|
||||
{{ t("webSearch.productIntroduction") }}
|
||||
<div class="detail">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 产品简介-->
|
||||
{{ t("webSearch.productIntroduction") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="html" v-html="state.expertDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所属单位-->
|
||||
{{ t("webSearch.unit") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.expertDetail.unit }}
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 产品领先性-->
|
||||
{{ t("admin.form.productLeadership") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
leadOptions.find(
|
||||
(el) => el.key === state.expertDetail.leadStandard
|
||||
)?.[locale]
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 合作模式-->
|
||||
{{ t("webSearch.cooperationMode") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
cooperationOptions.find(
|
||||
(el) => el.key == state.expertDetail.cooperationMode
|
||||
)?.[locale]
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 应用客户-->
|
||||
{{ t("webSearch.applicationCustomers") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{ state.expertDetail.customer }}
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<div class="html" v-html="state.expertDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所属单位-->
|
||||
{{ t("webSearch.unit") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.expertDetail.unit }}
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 产品领先性-->
|
||||
{{ t("webSearch.productLeadership") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
leadOptions.find(
|
||||
(el) => el.key == state.expertDetail.leadStandard
|
||||
)?.value
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 合作模式-->
|
||||
{{ t("webSearch.cooperationMode") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{
|
||||
cooperationOptions.find(
|
||||
(el) => el.key == state.expertDetail.cooperationMode
|
||||
)?.value
|
||||
}}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 应用客户-->
|
||||
{{ t("webSearch.applicationCustomer") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
<div>
|
||||
{{ state.expertDetail.customer }}
|
||||
</div>
|
||||
</section>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所在地-->
|
||||
{{ t("webSearch.location") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.localtion }}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -128,17 +123,20 @@ 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 { searchProductDetail } from "@/api/website/home";
|
||||
import { useRoute, useRouter } from "vue-router";
|
||||
import { reactive, ref } from "vue";
|
||||
import { computed, reactive, ref } from "vue";
|
||||
import docking from "./components/docking.vue";
|
||||
import { getCity } from "@/utils/city";
|
||||
import { leadOptions, cooperationOptions } from "@/utils/parameter";
|
||||
import { cooperationOptions, leadOptions } from "@/utils/parameter";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const showDocking = ref(false);
|
||||
const { t } = useI18n();
|
||||
const { t, locale } = useI18n();
|
||||
const loading = ref(true);
|
||||
|
||||
const leadValueField = computed(() =>
|
||||
locale.value === "zh" ? "value" : "valueRu"
|
||||
);
|
||||
// import {lead}
|
||||
const state = reactive({
|
||||
pageNum: 1,
|
||||
@ -227,17 +225,17 @@ function getDataList() {
|
||||
loading.value = true;
|
||||
let id = route.params.id;
|
||||
if (!id) return;
|
||||
searchAchievementDetail(id)
|
||||
searchProductDetail(id)
|
||||
// achievementDetail(id)
|
||||
.then(async (resp) => {
|
||||
// if (200 == res.code) {
|
||||
console.log(resp.data);
|
||||
state.expertDetail = resp.data;
|
||||
state.localtion = await getCity(
|
||||
resp.data.province,
|
||||
resp.data.city,
|
||||
resp.data.district
|
||||
);
|
||||
// state.localtion = await getCity(
|
||||
// resp.data.province,
|
||||
// resp.data.city,
|
||||
// resp.data.district
|
||||
// );
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
@ -294,7 +292,7 @@ function getDataList() {
|
||||
}
|
||||
|
||||
.detail {
|
||||
width: 661px;
|
||||
//width: 661px;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
|
@ -23,154 +23,158 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<el-row type="flex">
|
||||
<div style="flex: 1">
|
||||
<div class="item">
|
||||
<el-row type="flex" style="padding: 40px 20px">
|
||||
<div class="img">
|
||||
<img :src="state.demandDetail.image" alt />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="tit">
|
||||
<!-- <div style="float: right">
|
||||
<span>匹配度</span>
|
||||
<el-rate
|
||||
style="display: inline-block"
|
||||
v-model="state.val"
|
||||
disabled
|
||||
></el-rate>
|
||||
</div> -->
|
||||
<div class="text" style="flex: 1">
|
||||
{{ state.demandDetail.title }}
|
||||
</div>
|
||||
<el-col :span="16">
|
||||
<div style="flex: 1">
|
||||
<div class="item">
|
||||
<el-row type="flex" style="padding: 40px 20px">
|
||||
<div class="img">
|
||||
<img :src="state.demandDetail.image" alt />
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 需求类型-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
:
|
||||
<span>{{ state.demandDetail.kind }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 申请日-->
|
||||
{{ t("webSearch.applicationDate") }}
|
||||
<span>{{ state.demandDetail.createTime }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 提交人-->
|
||||
{{ t("webSearch.submitter") }}
|
||||
<!-- <a :href="state.demandDetail.applyName"> -->
|
||||
<span>{{ state.demandDetail.commitUserName }}</span>
|
||||
<!-- </a> -->
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系方式-->
|
||||
{{ t("webSearch.contactInformation") }}
|
||||
<span>{{ state.demandDetail.mobile }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud
|
||||
v-if="state.demandDetail.keywords"
|
||||
:data="createdData(state.demandDetail.keywords)"
|
||||
></wordcloud>
|
||||
</div>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div class="product">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 需求描述-->
|
||||
{{ t("webSearch.demandDescription") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="html" v-html="state.demandDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 主要应用-->
|
||||
{{ t("webSearch.mainApplication") }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="html"
|
||||
v-html="state.demandDetail.principalClaim"
|
||||
></div>
|
||||
<!-- <section v-if="state.demandDetail.directions">
|
||||
<div
|
||||
v-for="(item, index) in state.demandDetail.directions"
|
||||
:key="index"
|
||||
class="describe"
|
||||
>
|
||||
{{ item }}
|
||||
</div>
|
||||
</section> -->
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">产品列表</div>
|
||||
</div>
|
||||
<section v-for="item in state.companyProduct" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<productItem :data="item"></productItem>
|
||||
</div>
|
||||
</section> -->
|
||||
</div>
|
||||
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">企业推荐</div>
|
||||
</div>
|
||||
<div>
|
||||
<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 />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="tit" @click="handleDetail(item.id)">
|
||||
<div style="float: right">
|
||||
<div class="content">
|
||||
<div class="tit">
|
||||
<!-- <div style="float: right">
|
||||
<span>匹配度</span>
|
||||
<el-rate
|
||||
style="display: inline-block"
|
||||
v-model="state.val"
|
||||
disabled
|
||||
></el-rate>
|
||||
</div>
|
||||
<div class="text" style="flex: 1">
|
||||
{{ item.name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
企业规模:
|
||||
<span>{{ item.kind_title || "后台暂没提供" }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
核心产品及应用场景:
|
||||
<span>{{ item.product }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
企业网站:
|
||||
<a :href="item.url">
|
||||
<span>{{ item.url || "后台暂没提供" }}</span>
|
||||
</a>
|
||||
</div> -->
|
||||
<div class="text" style="flex: 1">
|
||||
{{ state.demandDetail.title }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud :data="createdData(item.keywords)"></wordcloud>
|
||||
<div class="line">
|
||||
<!-- 需求类型-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
:
|
||||
<span>{{ state.demandDetail.kind }}</span>
|
||||
</div>
|
||||
</el-row>
|
||||
<div class="line">
|
||||
<!-- 申请日-->
|
||||
{{ t("webSearch.applicationDate") }}
|
||||
<span>{{ state.demandDetail.createTime }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 提交人-->
|
||||
{{ t("webSearch.submitter") }}
|
||||
<!-- <a :href="state.demandDetail.applyName"> -->
|
||||
<span>{{ state.demandDetail.commitUserName }}</span>
|
||||
<!-- </a> -->
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系方式-->
|
||||
{{ t("webSearch.contactInformation") }}
|
||||
<span>{{ state.demandDetail.mobile }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud
|
||||
v-if="state.demandDetail.keywords"
|
||||
:data="createdData(state.demandDetail.keywords)"
|
||||
></wordcloud>
|
||||
</div>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div class="product">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 需求描述-->
|
||||
{{ t("webSearch.demandDescription") }}
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
<div class="html" v-html="state.demandDetail.description"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 主要应用-->
|
||||
{{ t("webSearch.mainApplication") }}
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="html"
|
||||
v-html="state.demandDetail.principalClaim"
|
||||
></div>
|
||||
<!-- <section v-if="state.demandDetail.directions">
|
||||
<div
|
||||
v-for="(item, index) in state.demandDetail.directions"
|
||||
:key="index"
|
||||
class="describe"
|
||||
>
|
||||
{{ item }}
|
||||
</div>
|
||||
</section> -->
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">产品列表</div>
|
||||
</div>
|
||||
<section v-for="item in state.companyProduct" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<productItem :data="item"></productItem>
|
||||
</div>
|
||||
</section> -->
|
||||
</div>
|
||||
|
||||
<!-- <div style="padding: 20px 0">
|
||||
<div class="pointTit">企业推荐</div>
|
||||
</div>
|
||||
<div>
|
||||
<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 />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="tit" @click="handleDetail(item.id)">
|
||||
<div style="float: right">
|
||||
<span>匹配度</span>
|
||||
<el-rate
|
||||
style="display: inline-block"
|
||||
v-model="state.val"
|
||||
disabled
|
||||
></el-rate>
|
||||
</div>
|
||||
<div class="text" style="flex: 1">
|
||||
{{ item.name }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
企业规模:
|
||||
<span>{{ item.kind_title || "后台暂没提供" }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
核心产品及应用场景:
|
||||
<span>{{ item.product }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
企业网站:
|
||||
<a :href="item.url">
|
||||
<span>{{ item.url || "后台暂没提供" }}</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud :data="createdData(item.keywords)"></wordcloud>
|
||||
</div>
|
||||
</el-row>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -290,13 +294,13 @@ function getDataList() {
|
||||
|
||||
.r {
|
||||
display: inline-block;
|
||||
width: 325px;
|
||||
width: 100%;
|
||||
margin-left: 14px;
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.product {
|
||||
width: 661px;
|
||||
//width: 661px;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
|
@ -7,35 +7,39 @@
|
||||
>
|
||||
<template v-slot>
|
||||
<el-row type="flex" style="padding: 20px 0">
|
||||
<div style="flex: 1">
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span>
|
||||
{{ t("webSearch.findDemandNum") }}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<TechnologyDemandItem :data="item"></TechnologyDemandItem>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<el-col :span="16">
|
||||
<div style="flex: 1">
|
||||
<div style="position: relative">
|
||||
<!-- <industrySelect @industryChange="industryChange"></industrySelect> -->
|
||||
<div class="total">
|
||||
{{ t("webSearch.findNum") }} <span>{{ total }}</span>
|
||||
{{ t("webSearch.findDemandNum") }}
|
||||
</div>
|
||||
<div v-loading="loading">
|
||||
<section v-for="item in searchResults" :key="item.id">
|
||||
<div style="border: 1px solid #dcdcdc; margin-bottom: 10px">
|
||||
<TechnologyDemandItem :data="item"></TechnologyDemandItem>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<pagination
|
||||
class="pagination"
|
||||
:total="total"
|
||||
:pageSizes="[10, 10 << 1, 10 << 2, 10 << 3]"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:autoScroll="false"
|
||||
@pagination="getDataList"
|
||||
/>
|
||||
<pagination
|
||||
class="pagination"
|
||||
:total="total"
|
||||
:pageSizes="[10, 10 << 1, 10 << 2, 10 << 3]"
|
||||
v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize"
|
||||
:autoScroll="false"
|
||||
@pagination="getDataList"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
|
@ -23,95 +23,99 @@
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
<el-row type="flex">
|
||||
<div style="flex: 1">
|
||||
<div class="item">
|
||||
<el-row type="flex" style="padding: 40px 20px">
|
||||
<!-- <technologyDemandItem
|
||||
:data="state.demandDetail"
|
||||
></technologyDemandItem> -->
|
||||
<div class="img">
|
||||
<img :src="state.demandDetail.image" alt />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="tit">
|
||||
<!-- <div style="float: right">
|
||||
<span>匹配度</span>
|
||||
<el-rate
|
||||
style="display: inline-block"
|
||||
v-model="state.val"
|
||||
disabled
|
||||
></el-rate>
|
||||
</div> -->
|
||||
<div class="text" style="flex: 1">
|
||||
{{ state.demandDetail.title }}
|
||||
<el-col :span="16">
|
||||
<div style="flex: 1">
|
||||
<div class="item">
|
||||
<el-row type="flex" style="padding: 40px 20px">
|
||||
<!-- <technologyDemandItem
|
||||
:data="state.demandDetail"
|
||||
></technologyDemandItem> -->
|
||||
<div class="img">
|
||||
<img :src="state.demandDetail.image" alt />
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="tit">
|
||||
<!-- <div style="float: right">
|
||||
<span>匹配度</span>
|
||||
<el-rate
|
||||
style="display: inline-block"
|
||||
v-model="state.val"
|
||||
disabled
|
||||
></el-rate>
|
||||
</div> -->
|
||||
<div class="text" style="flex: 1">
|
||||
{{ state.demandDetail.title }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 需求类型-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
:
|
||||
<span>{{ state.demandDetail.kind }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系人-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
<span>{{ t("webSearch.zhongkeyunPlatform") }}</span>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系方式-->
|
||||
{{ t("webSearch.contactInformation") }}
|
||||
({{ t("webSearch.wechat") }}):
|
||||
<span>18156053255</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 需求类型-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
:
|
||||
<span>{{ state.demandDetail.kind }}</span>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud
|
||||
v-if="state.demandDetail.keywords"
|
||||
:data="createdData(state.demandDetail.keywords)"
|
||||
></wordcloud>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系人-->
|
||||
{{ t("webSearch.demandType") }}
|
||||
<span>中科云平台</span>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="line">
|
||||
<!-- 联系方式-->
|
||||
{{ t("webSearch.contactInformation") }}
|
||||
({{ t("webSearch.WeChat") }}):
|
||||
<span>18156053255</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="keywords" style="flex: 1">
|
||||
<wordcloud
|
||||
v-if="state.demandDetail.keywords"
|
||||
:data="createdData(state.demandDetail.keywords)"
|
||||
></wordcloud>
|
||||
</div>
|
||||
<div class="btns">
|
||||
<div class="order" @click="showDocking = true">
|
||||
<!-- 预约对接-->
|
||||
{{ t("webSearch.appointment") }}
|
||||
</div>
|
||||
<div class="share">
|
||||
<!-- 一键分享-->
|
||||
{{ t("webSearch.share") }}
|
||||
</div>
|
||||
</div>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<div class="product">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所属领域-->
|
||||
{{ t("webSearch.industry") }}
|
||||
<div class="product">
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所属领域-->
|
||||
{{ t("webSearch.industry") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>{{ state.demandDetail.industryStr }}</div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 需求描述-->
|
||||
{{ t("webSearch.demandDescription") }}
|
||||
<div>{{ state.demandDetail.industryStr }}</div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 需求描述-->
|
||||
{{ t("webSearch.demandDescription") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="html" v-html="state.demandDetail.introduce"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所在地-->
|
||||
{{ t("webSearch.location") }}
|
||||
<div class="html" v-html="state.demandDetail.introduce"></div>
|
||||
<div style="padding: 20px 0">
|
||||
<div class="pointTit">
|
||||
<!-- 所在地-->
|
||||
{{ t("webSearch.location") }}
|
||||
</div>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.localtion }}
|
||||
</section>
|
||||
</div>
|
||||
<section>
|
||||
{{ state.localtion }}
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<div class="r">
|
||||
<webContact />
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</searchContainer>
|
||||
@ -240,13 +244,13 @@ function getDataList() {
|
||||
|
||||
.r {
|
||||
display: inline-block;
|
||||
width: 325px;
|
||||
width: 100%;
|
||||
margin-left: 14px;
|
||||
min-height: 200px;
|
||||
}
|
||||
|
||||
.product {
|
||||
width: 661px;
|
||||
//width: 661px;
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
background: #fff;
|
||||
|
Reference in New Issue
Block a user