bugfix and performance improvements
This commit is contained in:
@ -22,7 +22,18 @@
|
|||||||
</el-icon>
|
</el-icon>
|
||||||
</el-upload>
|
</el-upload>
|
||||||
<!-- 上传提示 -->
|
<!-- 上传提示 -->
|
||||||
<div v-if="showTip" class="el-upload__tip">
|
|
||||||
|
<div v-if="showTip && locale === 'ru'" class="el-upload__tip">
|
||||||
|
Пожалуйста, загрузите файл
|
||||||
|
<template v-if="fileSize">
|
||||||
|
размером не более <b style="color: #f56c6c">{{ fileSize }}МБ</b>
|
||||||
|
</template>
|
||||||
|
<template v-if="fileType">
|
||||||
|
в формате <b style="color: #f56c6c">{{ fileType.join("/") }}</b>
|
||||||
|
</template>
|
||||||
|
<!-- 的文件-->
|
||||||
|
</div>
|
||||||
|
<div v-else-if="showTip" class="el-upload__tip">
|
||||||
请上传
|
请上传
|
||||||
<template v-if="fileSize">
|
<template v-if="fileSize">
|
||||||
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
|
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
|
||||||
@ -36,7 +47,7 @@
|
|||||||
<el-dialog
|
<el-dialog
|
||||||
v-model="dialogVisible"
|
v-model="dialogVisible"
|
||||||
append-to-body
|
append-to-body
|
||||||
title="预览"
|
:title="t('common.preview')"
|
||||||
width="800px"
|
width="800px"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
@ -49,7 +60,9 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { getToken } from "@/utils/auth";
|
import { getToken } from "@/utils/auth";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
const { locale, t } = useI18n();
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: [String, Object, Array],
|
modelValue: [String, Object, Array],
|
||||||
// 图片数量限制
|
// 图片数量限制
|
||||||
|
@ -29,9 +29,13 @@
|
|||||||
:class="
|
:class="
|
||||||
pagePath == `/solution/${item.id}` ? 'x_blue _active' : ''
|
pagePath == `/solution/${item.id}` ? 'x_blue _active' : ''
|
||||||
"
|
"
|
||||||
@click="handlePath(`/solution/${item.id}?name=${item.name}`)"
|
@click="
|
||||||
|
handlePath(
|
||||||
|
`/solution/${item.id}?name=${item[solutionNameField]}`
|
||||||
|
)
|
||||||
|
"
|
||||||
>
|
>
|
||||||
{{ item.name }}
|
{{ item[solutionNameField] }}
|
||||||
</div>
|
</div>
|
||||||
<!--
|
<!--
|
||||||
|
|
||||||
@ -181,7 +185,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { reactive, watch } from "vue";
|
import { computed, reactive, watch } from "vue";
|
||||||
import { useRoute, useRouter } from "vue-router";
|
import { useRoute, useRouter } from "vue-router";
|
||||||
|
|
||||||
import useUserStore from "@/store/modules/user";
|
import useUserStore from "@/store/modules/user";
|
||||||
@ -199,8 +203,11 @@ const router = useRouter();
|
|||||||
const baseUrl = ref(import.meta.env.VITE_APP_BASE_API);
|
const baseUrl = ref(import.meta.env.VITE_APP_BASE_API);
|
||||||
const categoryList = ref([]);
|
const categoryList = ref([]);
|
||||||
// 当前的语言
|
// 当前的语言
|
||||||
const currentLocale = ref("zh");
|
|
||||||
const { locale, t } = useI18n();
|
const { locale, t } = useI18n();
|
||||||
|
|
||||||
|
const solutionNameField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "name" : `${locale.value}Name`;
|
||||||
|
});
|
||||||
const settingsStore = useSettingsStore();
|
const settingsStore = useSettingsStore();
|
||||||
const loadCategoryList = async () => {
|
const loadCategoryList = async () => {
|
||||||
const { data } = await getCategory();
|
const { data } = await getCategory();
|
||||||
@ -239,6 +246,12 @@ function handlePage() {
|
|||||||
window.open(routeData.href, "_blank");
|
window.open(routeData.href, "_blank");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const showBoxHandlePath = (path) => {
|
||||||
|
if (path === "") {
|
||||||
|
}
|
||||||
|
handlePath(path);
|
||||||
|
};
|
||||||
|
|
||||||
function handlePath(path) {
|
function handlePath(path) {
|
||||||
pagePath.value = path;
|
pagePath.value = path;
|
||||||
router.push(path);
|
router.push(path);
|
||||||
@ -301,10 +314,11 @@ dt {
|
|||||||
.show_box {
|
.show_box {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 80px;
|
padding-top: 5px;
|
||||||
|
top: 75px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
background-color: red;
|
background-color: transparent;
|
||||||
|
|
||||||
div {
|
div {
|
||||||
// height: 42px;
|
// height: 42px;
|
||||||
|
@ -3,9 +3,9 @@
|
|||||||
<div class="wrap">
|
<div class="wrap">
|
||||||
<el-row type="flex" justify="center" :gutter="50">
|
<el-row type="flex" justify="center" :gutter="50">
|
||||||
<el-col :span="8" v-for="item in state.list" :key="item.id">
|
<el-col :span="8" v-for="item in state.list" :key="item.id">
|
||||||
<div class="tit">{{ item.title }}</div>
|
<div class="tit">{{ item[titleField] }}</div>
|
||||||
<p v-for="subItem in item.children" :key="subItem.id">
|
<p v-for="subItem in item.children" :key="subItem.id">
|
||||||
<a :href="`${subItem.link}`" target="_black">{{ subItem.title }}</a>
|
<a :href="`${subItem.link}`" target="_black">{{ subItem[titleField] }}</a>
|
||||||
</p>
|
</p>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- <el-col :span="4">
|
<!-- <el-col :span="4">
|
||||||
@ -37,8 +37,8 @@
|
|||||||
</el-row>
|
</el-row>
|
||||||
<div class="icp-beian">
|
<div class="icp-beian">
|
||||||
<el-link type="primary" href="https://beian.miit.gov.cn/"
|
<el-link type="primary" href="https://beian.miit.gov.cn/"
|
||||||
>皖ICP备18001784号</el-link
|
>{{ t('footer.recordNumber')}}
|
||||||
>
|
</el-link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -46,27 +46,40 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { onMounted, reactive, watch } from "vue";
|
import { computed, onMounted, reactive, watch } from "vue";
|
||||||
import { getCategory } from "@/api/website/solution";
|
import { getCategory } from "@/api/website/solution";
|
||||||
import { getCasNavigation } from "@/api/website/home";
|
import { getCasNavigation } from "@/api/website/home";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
const { t, locale } = useI18n();
|
||||||
|
const titleField = computed(() => {
|
||||||
|
if (locale.value === "zh") {
|
||||||
|
return "title";
|
||||||
|
} else {
|
||||||
|
return `${locale.value}Title`;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
function navigation() {
|
function navigation() {
|
||||||
return request({
|
return request({
|
||||||
url: "/v1/sys/navigation",
|
url: "/v1/sys/navigation",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function config(params) {
|
function config(params) {
|
||||||
return request({
|
return request({
|
||||||
url: "/v1/config",
|
url: "/v1/config",
|
||||||
params,
|
params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
list: [],
|
list: [],
|
||||||
mobile: "",
|
mobile: "",
|
||||||
email: "",
|
email: "",
|
||||||
address: "",
|
address: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
async function getNavigation() {
|
async function getNavigation() {
|
||||||
// navigation().then((res) => {
|
// navigation().then((res) => {
|
||||||
// if (200 == res.code) {
|
// if (200 == res.code) {
|
||||||
@ -241,6 +254,7 @@ async function getNavigation() {
|
|||||||
// };
|
// };
|
||||||
state.list = resp.data;
|
state.list = resp.data;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getConfig() {
|
async function getConfig() {
|
||||||
// const mobileData = await config({ key: "mobile" });
|
// const mobileData = await config({ key: "mobile" });
|
||||||
const mobileData = {
|
const mobileData = {
|
||||||
@ -276,6 +290,7 @@ async function getConfig() {
|
|||||||
// state.address = res.data.address.value;
|
// state.address = res.data.address.value;
|
||||||
// });
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
getNavigation();
|
getNavigation();
|
||||||
// getConfig();
|
// getConfig();
|
||||||
|
|
||||||
@ -300,16 +315,19 @@ loadsolutionCategoryList();
|
|||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
|
|
||||||
.tit {
|
.tit {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.qrcode {
|
.qrcode {
|
||||||
width: 88px;
|
width: 88px;
|
||||||
height: 88px;
|
height: 88px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.icp-beian {
|
.icp-beian {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,8 @@ const messages = {
|
|||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
copyRight: "中科云 版权所有",
|
copyRight: "中科云 版权所有",
|
||||||
|
// 皖ICP备18001784号
|
||||||
|
recordNumber: "皖公网安备 34011102000001号",
|
||||||
},
|
},
|
||||||
webSearch: webSearch_zh,
|
webSearch: webSearch_zh,
|
||||||
webContact: webContact_zh,
|
webContact: webContact_zh,
|
||||||
@ -164,6 +166,8 @@ const messages = {
|
|||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
copyRight: "Чжункейун Авторское право",
|
copyRight: "Чжункейун Авторское право",
|
||||||
|
// 皖ICP备18001784号
|
||||||
|
recordNumber: "Государственная сеть безопасности Аньхой 34011102000001",
|
||||||
},
|
},
|
||||||
webSearch: webSearch_ru,
|
webSearch: webSearch_ru,
|
||||||
webContact: webContact_ru,
|
webContact: webContact_ru,
|
||||||
|
@ -26,6 +26,7 @@ const form = {
|
|||||||
edit: "Изменить {type}",
|
edit: "Изменить {type}",
|
||||||
editData: "Изменить данные",
|
editData: "Изменить данные",
|
||||||
email: "Эл. адрес",
|
email: "Эл. адрес",
|
||||||
|
otherContact: "Другие контактные данные",
|
||||||
expertName: "Имя эксперта",
|
expertName: "Имя эксперта",
|
||||||
fullName: "Полное имя",
|
fullName: "Полное имя",
|
||||||
idCard: "Удостоверение личности",
|
idCard: "Удостоверение личности",
|
||||||
|
@ -26,6 +26,7 @@ const form = {
|
|||||||
edit: "修改{type}",
|
edit: "修改{type}",
|
||||||
editData: "修改数据",
|
editData: "修改数据",
|
||||||
email: "邮箱",
|
email: "邮箱",
|
||||||
|
otherContact: "其他联系方式",
|
||||||
expertName: "专家姓名",
|
expertName: "专家姓名",
|
||||||
fullName: "姓名",
|
fullName: "姓名",
|
||||||
idCard: "身份证",
|
idCard: "身份证",
|
||||||
|
@ -36,5 +36,7 @@ const common = {
|
|||||||
"Вы уверены, что хотите выйти из системы?",
|
"Вы уверены, что хотите выйти из системы?",
|
||||||
// 提示
|
// 提示
|
||||||
prompt: "Подсказка",
|
prompt: "Подсказка",
|
||||||
|
// 预览
|
||||||
|
preview: "Предварительный просмотр",
|
||||||
};
|
};
|
||||||
export default common;
|
export default common;
|
||||||
|
@ -34,6 +34,8 @@ export const common = {
|
|||||||
areYouSureYouWantToLogOutAndExitTheSystem: "确定注销并退出系统吗?",
|
areYouSureYouWantToLogOutAndExitTheSystem: "确定注销并退出系统吗?",
|
||||||
// 提示
|
// 提示
|
||||||
prompt: "提示",
|
prompt: "提示",
|
||||||
|
// 预览
|
||||||
|
preview: "预览",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default common;
|
export default common;
|
||||||
|
@ -1259,17 +1259,17 @@ export const agentRoutes = [
|
|||||||
i18nStr: "routes.broker.updateStatus",
|
i18nStr: "routes.broker.updateStatus",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
// {
|
||||||
path: "matching-demand",
|
// path: "matching-demand",
|
||||||
component: () =>
|
// component: () =>
|
||||||
import("@/views/admin/agent/service/matching-demand/index.vue"),
|
// import("@/views/admin/agent/service/matching-demand/index.vue"),
|
||||||
name: "EnterpriseDemandMatch",
|
// name: "EnterpriseDemandMatch",
|
||||||
meta: {
|
// meta: {
|
||||||
title: "企业需求匹配",
|
// title: "企业需求匹配",
|
||||||
icon: "list",
|
// icon: "list",
|
||||||
i18nStr: "routes.broker.enterpriseDemandMatching",
|
// i18nStr: "routes.broker.enterpriseDemandMatching",
|
||||||
},
|
// },
|
||||||
},
|
// },
|
||||||
{
|
{
|
||||||
path: "matching-demand-detail",
|
path: "matching-demand-detail",
|
||||||
component: () =>
|
component: () =>
|
||||||
|
@ -380,7 +380,7 @@ export const countryOptions = [
|
|||||||
ru: "Таджикистан",
|
ru: "Таджикистан",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "kg",
|
key: "tm",
|
||||||
zh: "土库曼斯坦",
|
zh: "土库曼斯坦",
|
||||||
ru: "Туркменистан",
|
ru: "Туркменистан",
|
||||||
},
|
},
|
||||||
@ -394,4 +394,9 @@ export const countryOptions = [
|
|||||||
zh: "哈萨克斯坦",
|
zh: "哈萨克斯坦",
|
||||||
ru: "Казахстан",
|
ru: "Казахстан",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: "kg",
|
||||||
|
zh: "吉尔吉斯斯坦",
|
||||||
|
ru: "Кыргызстан",
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
@ -222,13 +222,13 @@ getList();
|
|||||||
})
|
})
|
||||||
}}
|
}}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button link type="text">
|
<!-- <el-button link type="text">-->
|
||||||
{{
|
<!-- {{-->
|
||||||
t("admin.table.managementOf", {
|
<!-- t("admin.table.managementOf", {-->
|
||||||
type: t("admin.common.achievement"),
|
<!-- type: t("admin.common.achievement"),-->
|
||||||
})
|
<!-- })-->
|
||||||
}}
|
<!-- }}-->
|
||||||
</el-button>
|
<!-- </el-button>-->
|
||||||
<el-button link type="text" @click="handleDelete(row.id)">
|
<el-button link type="text" @click="handleDelete(row.id)">
|
||||||
{{ t("admin.common.delete") }}
|
{{ t("admin.common.delete") }}
|
||||||
</el-button>
|
</el-button>
|
||||||
|
@ -190,6 +190,13 @@
|
|||||||
>
|
>
|
||||||
<el-input v-model="form.bankPhone" placeholder="请输入开户行电话" />
|
<el-input v-model="form.bankPhone" placeholder="请输入开户行电话" />
|
||||||
</el-form-item> -->
|
</el-form-item> -->
|
||||||
|
|
||||||
|
<el-form-item :label="t('webContact.phone')" prop="phone">
|
||||||
|
<el-input
|
||||||
|
v-model="form.phone"
|
||||||
|
:placeholder="t('webContact.phonePlaceholder')"
|
||||||
|
/>
|
||||||
|
</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="form.email"
|
v-model="form.email"
|
||||||
@ -200,11 +207,9 @@
|
|||||||
"
|
"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('webContact.phone')" prop="phone">
|
<!-- 其他联系方式-->
|
||||||
<el-input
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
v-model="form.phone"
|
<el-input v-model="form.otherContact"></el-input>
|
||||||
:placeholder="t('webContact.phonePlaceholder')"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('admin.form.address')" prop="address">
|
<el-form-item :label="t('admin.form.address')" prop="address">
|
||||||
<el-input
|
<el-input
|
||||||
|
@ -101,14 +101,14 @@
|
|||||||
<!-- @click="checkEnterpriseInfo(row.id)"-->
|
<!-- @click="checkEnterpriseInfo(row.id)"-->
|
||||||
<!-- >{{ t("tips.browseEnterpriseInformation") }}-->
|
<!-- >{{ t("tips.browseEnterpriseInformation") }}-->
|
||||||
<!-- </el-button>-->
|
<!-- </el-button>-->
|
||||||
<el-button
|
<!-- TODO: <el-button
|
||||||
v-if="queryParams.status == 0"
|
v-if="queryParams.status == 0"
|
||||||
size="small"
|
size="small"
|
||||||
type="text"
|
type="text"
|
||||||
icon="Close"
|
icon="Close"
|
||||||
@click="releaseCancel(row.id)"
|
@click="releaseCancel(row.id)"
|
||||||
>{{ t("tips.moveToDraftBox") }}
|
>{{ t("tips.moveToDraftBox") }}
|
||||||
</el-button>
|
</el-button>-->
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -108,6 +108,21 @@
|
|||||||
:placeholder="t('admin.form.defaultExpertPhone')"
|
:placeholder="t('admin.form.defaultExpertPhone')"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input
|
||||||
|
:placeholder="t('input.inputEmail')"
|
||||||
|
v-model="form.email"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="form.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
<el-form-item :label="t('admin.form.location')">
|
<el-form-item :label="t('admin.form.location')">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="form.address"
|
v-model="form.address"
|
||||||
|
@ -198,6 +198,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 {UploadFilled} from "@element-plus/icons-vue";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -25,6 +25,24 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input :placeholder="t('input.inputEmail')" v-model="modelValue.email"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="modelValue.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-row v-if="isAdd">
|
<el-row v-if="isAdd">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
@ -69,7 +87,7 @@
|
|||||||
|
|
||||||
<el-row v-if="isAdd">
|
<el-row v-if="isAdd">
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item :label="t('admin.form.idCard')" required>
|
<el-form-item :label="t('admin.form.idCard')">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item prop="idImage.0">
|
<el-form-item prop="idImage.0">
|
||||||
@ -203,11 +221,11 @@ const rules = reactive({
|
|||||||
// },
|
// },
|
||||||
],
|
],
|
||||||
idCard: [
|
idCard: [
|
||||||
{
|
// {
|
||||||
required: true,
|
// required: true,
|
||||||
message: computed(() => t("admin.form.placeholder")),
|
// message: computed(() => t("admin.form.placeholder")),
|
||||||
trigger: "blur",
|
// trigger: "blur",
|
||||||
},
|
// },
|
||||||
],
|
],
|
||||||
wordAddress: [
|
wordAddress: [
|
||||||
{
|
{
|
||||||
@ -224,25 +242,25 @@ const rules = reactive({
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
"idImage.0": [
|
"idImage.0": [
|
||||||
{
|
// {
|
||||||
required: true,
|
// required: true,
|
||||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
// message: computed(() => t("admin.validation.pleaseUpload")),
|
||||||
trigger: ["blur", "change"],
|
// trigger: ["blur", "change"],
|
||||||
},
|
// },
|
||||||
],
|
],
|
||||||
"idImage.1": [
|
"idImage.1": [
|
||||||
{
|
// {
|
||||||
required: true,
|
// required: true,
|
||||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
// message: computed(() => t("admin.validation.pleaseUpload")),
|
||||||
trigger: ["blur", "change"],
|
// trigger: ["blur", "change"],
|
||||||
},
|
// },
|
||||||
],
|
],
|
||||||
"idImage.2": [
|
"idImage.2": [
|
||||||
{
|
// {
|
||||||
required: true,
|
// required: true,
|
||||||
message: computed(() => t("admin.validation.pleaseUpload")),
|
// message: computed(() => t("admin.validation.pleaseUpload")),
|
||||||
trigger: ["blur", "change"],
|
// trigger: ["blur", "change"],
|
||||||
},
|
// },
|
||||||
],
|
],
|
||||||
certificatePics: [
|
certificatePics: [
|
||||||
{
|
{
|
||||||
|
@ -45,21 +45,13 @@
|
|||||||
<!-- :maxlength="11"-->
|
<!-- :maxlength="11"-->
|
||||||
<el-input
|
<el-input
|
||||||
v-model="modelValue.phone"
|
v-model="modelValue.phone"
|
||||||
oninput="
|
|
||||||
value = value
|
|
||||||
.replace(/[^\d.]/g, '')
|
|
||||||
.replace(/\.{2,}/g, '.')
|
|
||||||
.replace('.', '$#$')
|
|
||||||
.replace(/\./g, '')
|
|
||||||
.replace('$#$', '.')
|
|
||||||
.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3')
|
|
||||||
.replace(/^\./g, '')
|
|
||||||
"
|
|
||||||
></el-input>
|
></el-input>
|
||||||
<!-- v-number -->
|
<!-- v-number -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item :label="t('admin.form.email')" prop="email">
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
@ -67,6 +59,14 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="modelValue.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
<!-- <el-row>
|
<!-- <el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item label="信用代码:" prop="code">
|
<el-form-item label="信用代码:" prop="code">
|
||||||
|
@ -30,6 +30,24 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input v-model="modelValue.email"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="modelValue.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<!-- <el-row>
|
<!-- <el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item :label="t('webSearch.unit')" prop="researchId">
|
<el-form-item :label="t('webSearch.unit')" prop="researchId">
|
||||||
|
@ -184,6 +184,24 @@
|
|||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input v-model="modelValue.email"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="modelValue.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="24">
|
<el-col :span="24">
|
||||||
<el-form-item
|
<el-form-item
|
||||||
|
@ -55,6 +55,26 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input v-model="modelValue.email"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<!-- TODO: -->
|
||||||
|
<!-- <el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.otherContact')" prop="otherContact">
|
||||||
|
<el-input v-model="modelValue.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>-->
|
||||||
|
|
||||||
<field-options
|
<field-options
|
||||||
v-model="modelValue"
|
v-model="modelValue"
|
||||||
:labelWidth="labelWidth"
|
:labelWidth="labelWidth"
|
||||||
|
@ -19,14 +19,14 @@
|
|||||||
:key="item.id"
|
:key="item.id"
|
||||||
@click="handleActive(index)"
|
@click="handleActive(index)"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item[titleField] }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_r">
|
<div class="_r">
|
||||||
<div
|
<div
|
||||||
v-if="state.data.length"
|
v-if="state.data.length"
|
||||||
class="html"
|
class="html"
|
||||||
v-html="state.data[kindId]['content']"
|
v-html="state.data[kindId][contentField]"
|
||||||
></div>
|
></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -39,12 +39,25 @@ import webFooter from "@/components/webFooter/index.vue";
|
|||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { banner } from "@/api/website/home/index";
|
import { banner } from "@/api/website/home/index";
|
||||||
import { getAboutList } from "../../../api/website/aboutUs";
|
import { getAboutList } from "../../../api/website/aboutUs";
|
||||||
|
import { useI18n } from "vue-i18n";
|
||||||
|
import { computed, onMounted, reactive, ref } from "vue";
|
||||||
|
|
||||||
|
const { t, locale } = useI18n();
|
||||||
|
const titleField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "title" : `${locale.value}Title`;
|
||||||
|
});
|
||||||
|
|
||||||
|
const contentField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "content" : `${locale.value}Content`;
|
||||||
|
});
|
||||||
|
|
||||||
function about() {
|
function about() {
|
||||||
return request({
|
return request({
|
||||||
url: "/v1/sys/about",
|
url: "/v1/sys/about",
|
||||||
method: "get",
|
method: "get",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
data: [],
|
data: [],
|
||||||
@ -74,9 +87,11 @@ function getData() {
|
|||||||
loading.value = false;
|
loading.value = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getData();
|
getData();
|
||||||
});
|
});
|
||||||
|
|
||||||
function handleActive(id) {
|
function handleActive(id) {
|
||||||
kindId.value = id;
|
kindId.value = id;
|
||||||
}
|
}
|
||||||
@ -85,13 +100,16 @@ function handleActive(id) {
|
|||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.about {
|
.about {
|
||||||
background-color: #f2f6ff;
|
background-color: #f2f6ff;
|
||||||
|
|
||||||
.box {
|
.box {
|
||||||
margin-bottom: 30px;
|
margin-bottom: 30px;
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
||||||
._l {
|
._l {
|
||||||
width: 230px;
|
width: 230px;
|
||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
|
|
||||||
._item {
|
._item {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 53px;
|
height: 53px;
|
||||||
@ -101,16 +119,19 @@ function handleActive(id) {
|
|||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
._r {
|
._r {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
padding: 20px 40px;
|
padding: 20px 40px;
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
|
@ -239,6 +239,28 @@
|
|||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<!-- ADDEMAIL-->
|
||||||
|
<!-- 邮箱-->
|
||||||
|
<el-row>
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item :label="t('admin.form.email')" prop="email">
|
||||||
|
<el-input
|
||||||
|
:placeholder="t('input.inputEmail')"
|
||||||
|
v-model="signUpForm.email"
|
||||||
|
></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<!-- 其他联系方式-->
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item
|
||||||
|
:label="t('admin.form.otherContact')"
|
||||||
|
prop="otherContact"
|
||||||
|
>
|
||||||
|
<el-input v-model="signUpForm.otherContact"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
|
||||||
<el-row :gutter="12">
|
<el-row :gutter="12">
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item :label="t('input.age')" prop="age">
|
<el-form-item :label="t('input.age')" prop="age">
|
||||||
|
@ -33,11 +33,15 @@ import request from "@/utils/request";
|
|||||||
import { onMounted, reactive } from "vue";
|
import { onMounted, reactive } from "vue";
|
||||||
import webFooter from "@/components/webFooter/index.vue";
|
import webFooter from "@/components/webFooter/index.vue";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
|
const { locale } = useI18n();
|
||||||
|
|
||||||
function platform() {
|
function platform() {
|
||||||
return request({
|
return request({
|
||||||
url: "/v1/sys/platform",
|
url: "/v1/sys/platform",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
platformInfo: {},
|
platformInfo: {},
|
||||||
@ -49,12 +53,13 @@ function getInfo() {
|
|||||||
message: "ok",
|
message: "ok",
|
||||||
data: {
|
data: {
|
||||||
340000: {
|
340000: {
|
||||||
name: "安徽省",
|
name:
|
||||||
|
locale.value === "zh" ? "安徽省" : /*俄语*/ "Аньхойская провинция",
|
||||||
code: "340000",
|
code: "340000",
|
||||||
domain: "",
|
domain: "",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
name: "合肥市",
|
name: locale.value === "zh" ? "合肥市" : /*俄语*/ "Хэфэй",
|
||||||
code: "340100",
|
code: "340100",
|
||||||
domain: "https://www.casshare.com",
|
domain: "https://www.casshare.com",
|
||||||
children: null,
|
children: null,
|
||||||
@ -68,6 +73,7 @@ function getInfo() {
|
|||||||
state.platformInfo = res.data;
|
state.platformInfo = res.data;
|
||||||
// });
|
// });
|
||||||
}
|
}
|
||||||
|
|
||||||
getInfo();
|
getInfo();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -78,6 +84,7 @@ getInfo();
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
||||||
.wrap {
|
.wrap {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -85,6 +92,7 @@ getInfo();
|
|||||||
background-size: 100% 50%;
|
background-size: 100% 50%;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: center bottom;
|
background-position: center bottom;
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@ -98,6 +106,7 @@ getInfo();
|
|||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tit {
|
.tit {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
@ -105,6 +114,7 @@ getInfo();
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
@ -115,6 +125,7 @@ getInfo();
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
& > div {
|
& > div {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
flex: 1;
|
flex: 1;
|
||||||
@ -123,9 +134,11 @@ getInfo();
|
|||||||
.item {
|
.item {
|
||||||
width: 66px;
|
width: 66px;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: #0054ff;
|
color: #0054ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
@ -134,6 +147,7 @@ getInfo();
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.more {
|
.more {
|
||||||
width: 150px;
|
width: 150px;
|
||||||
height: 46px;
|
height: 46px;
|
||||||
@ -146,6 +160,7 @@ getInfo();
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
}
|
}
|
||||||
|
@ -14,10 +14,10 @@
|
|||||||
</el-breadcrumb>
|
</el-breadcrumb>
|
||||||
</div>
|
</div>
|
||||||
<div class="_head">
|
<div class="_head">
|
||||||
<p class="text_hidden">{{ state.data.title }}</p>
|
<p class="text_hidden">{{ state.data[titleField] }}</p>
|
||||||
<div class="_tags">
|
<div class="_tags">
|
||||||
<el-tag class="x_fff x_bg_blue" size="small"
|
<el-tag class="x_fff x_bg_blue" size="small"
|
||||||
>{{ state.data.description }}
|
>{{ state.data[descriptionField] }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</div>
|
</div>
|
||||||
<div class="text-right">
|
<div class="text-right">
|
||||||
@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="_info">
|
<div class="_info">
|
||||||
<div class="_l">
|
<div class="_l">
|
||||||
<div class="html" v-html="state.data.content"></div>
|
<div class="html" v-html="state.data[contentField]"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_r">
|
<div class="_r">
|
||||||
<WebContact />
|
<WebContact />
|
||||||
@ -45,6 +45,7 @@ import webFooter from "@/components/webFooter/index.vue";
|
|||||||
import WebContact from "@/components/webContact/index.vue";
|
import WebContact from "@/components/webContact/index.vue";
|
||||||
import { getInovateInfo } from "../../../api/website/innovate";
|
import { getInovateInfo } from "../../../api/website/innovate";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
import { computed } from "vue";
|
||||||
// import request from '@/utils/request'
|
// import request from '@/utils/request'
|
||||||
// to do 创新服务详情
|
// to do 创新服务详情
|
||||||
// function detail (id) {
|
// function detail (id) {
|
||||||
@ -54,7 +55,19 @@ import { useI18n } from "vue-i18n";
|
|||||||
// data: { id }
|
// data: { id }
|
||||||
// })
|
// })
|
||||||
// }
|
// }
|
||||||
const { t } = useI18n();
|
const { t, locale } = useI18n();
|
||||||
|
|
||||||
|
const titleField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "title" : `${locale.value}Title`;
|
||||||
|
});
|
||||||
|
|
||||||
|
const descriptionField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "description" : `${locale.value}Description`;
|
||||||
|
});
|
||||||
|
// content
|
||||||
|
const contentField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "content" : `${locale.value}Content`;
|
||||||
|
});
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
|
|
||||||
const state = reactive({
|
const state = reactive({
|
||||||
|
@ -7,15 +7,15 @@
|
|||||||
:class="item.id == queryParams.kindId ? 'x_fff x_bg_blue' : ''"
|
:class="item.id == queryParams.kindId ? 'x_fff x_bg_blue' : ''"
|
||||||
v-for="item in state.kind"
|
v-for="item in state.kind"
|
||||||
:key="item.id"
|
:key="item.id"
|
||||||
@click="handleActive(item.id, item.title)"
|
@click="handleActive(item.id, item[titleField])"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item[titleField] }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_r">
|
<div class="_r">
|
||||||
<div style="width: 70%">
|
<div style="width: 70%">
|
||||||
<el-input
|
<el-input
|
||||||
v-model.trim="queryParams.title"
|
v-model.trim="queryParams[titleField]"
|
||||||
:placeholder="t('input.inputKeyword')"
|
:placeholder="t('input.inputKeyword')"
|
||||||
>
|
>
|
||||||
<template #append>
|
<template #append>
|
||||||
@ -28,11 +28,11 @@
|
|||||||
<div class="_list" v-loading="listLoading">
|
<div class="_list" v-loading="listLoading">
|
||||||
<div class="item pointer" v-for="item in state.list" :key="item.id">
|
<div class="item pointer" v-for="item in state.list" :key="item.id">
|
||||||
<div class="_info">
|
<div class="_info">
|
||||||
<p class="text_hidden">{{ item.title }}</p>
|
<p class="text_hidden">{{ item[titleField] }}</p>
|
||||||
<div class="_tags">
|
<div class="_tags">
|
||||||
<el-tooltip :content="item.description" placement="top">
|
<el-tooltip :content="item[descriptionField]" placement="top">
|
||||||
<el-tag class="x_fff x_bg_blue"
|
<el-tag class="x_fff x_bg_blue"
|
||||||
>{{ item.description }}
|
>{{ item[descriptionField] }}
|
||||||
</el-tag>
|
</el-tag>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
</div>
|
</div>
|
||||||
@ -60,12 +60,19 @@
|
|||||||
<script setup name="Innovate">
|
<script setup name="Innovate">
|
||||||
import webFooter from "@/components/webFooter/index.vue";
|
import webFooter from "@/components/webFooter/index.vue";
|
||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { reactive, ref } from "vue";
|
import { computed, reactive, ref } from "vue";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { getKinds, getInovateList } from "../../../api/website/innovate";
|
import { getKinds, getInovateList } from "../../../api/website/innovate";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t, locale } = useI18n();
|
||||||
|
const titleField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "title" : `${locale.value}Title`;
|
||||||
|
});
|
||||||
|
|
||||||
|
const descriptionField = computed(() => {
|
||||||
|
return locale.value === "zh" ? "description" : `${locale.value}Description`;
|
||||||
|
});
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
const listLoading = ref(true);
|
const listLoading = ref(true);
|
||||||
@ -152,8 +159,10 @@ function handleQuery() {
|
|||||||
|
|
||||||
._item {
|
._item {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
height: 53px;
|
//height: 53px;
|
||||||
line-height: 53px;
|
line-height: 1.5;
|
||||||
|
padding: 20px 0;
|
||||||
|
//line-height: 53px;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
color: #333;
|
color: #333;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
@ -197,6 +206,9 @@ function handleQuery() {
|
|||||||
margin-top: 14px;
|
margin-top: 14px;
|
||||||
margin-right: 14px;
|
margin-right: 14px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
|
||||||
&:nth-child(-n + 3) {
|
&:nth-child(-n + 3) {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
@ -205,6 +217,10 @@ function handleQuery() {
|
|||||||
._info {
|
._info {
|
||||||
padding: 30px 14px 0;
|
padding: 30px 14px 0;
|
||||||
|
|
||||||
|
.text_hidden {
|
||||||
|
min-height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: 16px;
|
font-size: 16px;
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
}}</span>
|
}}</span>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
<el-breadcrumb-item>
|
<el-breadcrumb-item>
|
||||||
<span class="_one">{{ oneLevelTitle.title }}</span>
|
<span class="_one">{{ oneLevelTitle[titleField] }}</span>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
<el-breadcrumb-item>
|
<el-breadcrumb-item>
|
||||||
<span class="_two">{{ twoLevelTitle }}</span>
|
<span class="_two">{{ twoLevelTitle ?? t('common.viewMore') }}</span>
|
||||||
</el-breadcrumb-item>
|
</el-breadcrumb-item>
|
||||||
</el-breadcrumb>
|
</el-breadcrumb>
|
||||||
<div>
|
<div>
|
||||||
@ -42,9 +42,13 @@
|
|||||||
// import request from "@/utils/request";
|
// import request from "@/utils/request";
|
||||||
import { useRouter } from "vue-router";
|
import { useRouter } from "vue-router";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
|
import { computed } from "vue";
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { t } = useI18n();
|
const { t, locale } = useI18n();
|
||||||
|
const titleField = computed(() =>
|
||||||
|
locale.value === "zh" ? "title" : `${locale.value}Title`
|
||||||
|
);
|
||||||
|
|
||||||
function handlePath(id) {
|
function handlePath(id) {
|
||||||
let routeData = router.resolve({ path: `/solution/detail/${id}/` });
|
let routeData = router.resolve({ path: `/solution/detail/${id}/` });
|
||||||
@ -90,7 +94,7 @@ const props = defineProps({
|
|||||||
},
|
},
|
||||||
twoLevelTitle: {
|
twoLevelTitle: {
|
||||||
type: String,
|
type: String,
|
||||||
default: "查看更多",
|
// default: "查看更多",
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
type: Array,
|
type: Array,
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="title">
|
<div class="title">
|
||||||
<div>{{ state.data.title }}</div>
|
<div>{{ state.data[titleField] }}</div>
|
||||||
|
|
||||||
<div class="description">
|
<div class="description">
|
||||||
<span class="visits"
|
<span class="visits"
|
||||||
@ -25,7 +25,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="html" v-html="state.data.content"></div>
|
<div class="html" v-html="state.data[contentField]"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<webFooter></webFooter>
|
<webFooter></webFooter>
|
||||||
@ -33,13 +33,23 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
import { nextTick, onMounted } from "vue";
|
import { computed, nextTick, onMounted } from "vue";
|
||||||
import seeMore from "./components/seeMore.vue";
|
import seeMore from "./components/seeMore.vue";
|
||||||
import { getInfo } from "@/api/website/solution/index";
|
import { getInfo } from "@/api/website/solution/index";
|
||||||
import webFooter from "@/components/webFooter/index.vue";
|
import webFooter from "@/components/webFooter/index.vue";
|
||||||
import request from "@/utils/request";
|
import request from "@/utils/request";
|
||||||
import { useI18n } from "vue-i18n";
|
import { useI18n } from "vue-i18n";
|
||||||
const { t } = useI18n();
|
|
||||||
|
const { t, locale } = useI18n();
|
||||||
|
|
||||||
|
const titleField = computed(() =>
|
||||||
|
locale.value === "zh" ? "title" : `${locale.value}Title`
|
||||||
|
);
|
||||||
|
|
||||||
|
const contentField = computed(() =>
|
||||||
|
locale.value === "zh" ? "content" : `${locale.value}Content`
|
||||||
|
);
|
||||||
|
|
||||||
function detail(id) {
|
function detail(id) {
|
||||||
return request({
|
return request({
|
||||||
url: "/v1/service/solution_case/detail",
|
url: "/v1/service/solution_case/detail",
|
||||||
@ -82,21 +92,26 @@ function getData() {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.conter1400 {
|
.conter1400 {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.head {
|
.head {
|
||||||
padding: 30px 0 20px 0;
|
padding: 30px 0 20px 0;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
.one {
|
.one {
|
||||||
color: #333333;
|
color: #333333;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.content {
|
.content {
|
||||||
background: #fff;
|
background: #fff;
|
||||||
margin-bottom: 40px;
|
margin-bottom: 40px;
|
||||||
@ -105,18 +120,21 @@ function getData() {
|
|||||||
.html {
|
.html {
|
||||||
padding: 30px 40px;
|
padding: 30px 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.title {
|
.title {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: #333333;
|
color: #333333;
|
||||||
border-bottom: 1px solid #dcdcdc;
|
border-bottom: 1px solid #dcdcdc;
|
||||||
|
|
||||||
.description {
|
.description {
|
||||||
padding-top: 20px;
|
padding-top: 20px;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-family: Source Han Sans CN;
|
font-family: Source Han Sans CN;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
color: #666666;
|
color: #666666;
|
||||||
|
|
||||||
.visits {
|
.visits {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 120px;
|
width: 120px;
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
:class="activeId == item.id ? '_active' : ''"
|
:class="activeId == item.id ? '_active' : ''"
|
||||||
@click="setScrollTop(item.id, index)"
|
@click="setScrollTop(item.id, index)"
|
||||||
>
|
>
|
||||||
{{ item.title }}
|
{{ item[titleField] }}
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@ -41,7 +41,7 @@
|
|||||||
class="_item"
|
class="_item"
|
||||||
>
|
>
|
||||||
<h3 class="_tit text-center" style="font-size: 24px; color: #333333">
|
<h3 class="_tit text-center" style="font-size: 24px; color: #333333">
|
||||||
{{ item.title }}
|
{{ item[titleField] }}
|
||||||
</h3>
|
</h3>
|
||||||
<div class="_info conter1000">
|
<div class="_info conter1000">
|
||||||
<div v-if="isOddEvenNumber(index)" class="_r">
|
<div v-if="isOddEvenNumber(index)" class="_r">
|
||||||
@ -52,10 +52,10 @@
|
|||||||
class="_l"
|
class="_l"
|
||||||
>
|
>
|
||||||
<h3 :class="isOddEvenNumber(index) ? 'text-right' : ''">
|
<h3 :class="isOddEvenNumber(index) ? 'text-right' : ''">
|
||||||
{{ item.title }}
|
{{ item[titleField] }}
|
||||||
</h3>
|
</h3>
|
||||||
<!-- <p>{{ item.description }}</p> -->
|
<!-- <p>{{ item.description }}</p> -->
|
||||||
<p>{{ item.description }}</p>
|
<p>{{ item[descriptionField] }}</p>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!isOddEvenNumber(index)" class="_r">
|
<div v-if="!isOddEvenNumber(index)" class="_r">
|
||||||
<img :src="item.image" alt srcset />
|
<img :src="item.image" alt srcset />
|
||||||
@ -73,8 +73,8 @@
|
|||||||
fit="cover"
|
fit="cover"
|
||||||
style="width: 100%; height: 135px"
|
style="width: 100%; height: 135px"
|
||||||
></el-image>
|
></el-image>
|
||||||
<div class="_head text_hidden">{{ child.title }}</div>
|
<div class="_head text_hidden">{{ child[titleField] }}</div>
|
||||||
<div class="_detail text_hidden">{{ child.description }}</div>
|
<div class="_detail text_hidden">{{ child[descriptionField] }}</div>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="_liBtn text-right">
|
<div class="_liBtn text-right">
|
||||||
@ -95,7 +95,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup>
|
<script setup>
|
||||||
import { nextTick, onMounted, reactive } from "vue";
|
import { computed, nextTick, onMounted, reactive, ref } from "vue";
|
||||||
import seeMore from "./components/seeMore.vue";
|
import seeMore from "./components/seeMore.vue";
|
||||||
import webFooter from "@/components/webFooter/index.vue";
|
import webFooter from "@/components/webFooter/index.vue";
|
||||||
import { banner } from "@/api/website/home/index";
|
import { banner } from "@/api/website/home/index";
|
||||||
@ -111,7 +111,14 @@ function handlePath(id) {
|
|||||||
window.open(routeData.href, "_blank");
|
window.open(routeData.href, "_blank");
|
||||||
}
|
}
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t, locale } = useI18n();
|
||||||
|
|
||||||
|
const titleField = computed(() =>
|
||||||
|
locale.value === "zh" ? "title" : `${locale.value}Title`
|
||||||
|
);
|
||||||
|
const descriptionField = computed(() =>
|
||||||
|
locale.value === "zh" ? "description" : `${locale.value}Description`
|
||||||
|
);
|
||||||
let moreData = ref([]);
|
let moreData = ref([]);
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
const oneLevelTitle = ref({});
|
const oneLevelTitle = ref({});
|
||||||
@ -311,11 +318,13 @@ function handleShowMore(item) {
|
|||||||
|
|
||||||
._r {
|
._r {
|
||||||
width: 420px;
|
width: 420px;
|
||||||
background: #f2f6ff;
|
//background: #f2f6ff;
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
img {
|
img {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
object-fit: contain;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user