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