<script lang="ts" setup>
import Login from '@/apps/app-bmc/Login/Login.vue';
import Navigate from '@/apps/app-bmc/Navigate/Navigate.vue';
import Home from '@/pages/Home/Home.vue';
import { downloadFileWithResponse } from '@/utils/common-service';
import { getStoreData, setStoreData } from '@/utils/composition';
import { ref } from 'vue';
const emit = defineEmits(['close']);
const selectView = ref('login');
const customizeStyle = JSON.parse(localStorage.getItem('customizeStyle') || '{}');
const lastTime = ref(`上次保存时间:${customizeStyle.time || '--'}`);
const navStyle = ref(getStoreData('loct', 'navStyle'));
const ptc = JSON.parse(localStorage.getItem('ptc') || '{}');
const sn = ref(ptc.software || 'openUBMC');
function generate() {
const data = JSON.parse(localStorage.getItem('customizeStyle') || '{}');
delete data.time;
const blob = new Blob([JSON.stringify(data)]);
downloadFileWithResponse(blob, 'style_config.json');
emit('close', true);
setStoreData('event', 'alertMessage', { type: 'success', message: '操作成功' });
}
function cancel() {
emit('close', false);
}
</script>
<template>
<div class="customize-tool">
<p class="text title">如何使定制方案生效完成定制?</p>
<p class="text">
使用本工具,您可将当前方案导出为.json文件并下载至本地。查看工具菜单页“如何使定制生效”,将json文件生效在您的软件内。
</p>
<div class="display-area">
<div class="display-overview">
<div v-if="selectView === 'login'" class="origin-size customize-login"><Login /></div>
<div v-else class="origin-size customize-home" :class="{ 'nav-left': navStyle === 'left' }">
<Navigate :show-el-message="false" />
<Home :is-preview="true" />
</div>
</div>
<div class="display-info">
<p class="info-title">当前方案信息</p>
<p class="info-text">{{ '软件名称:' + sn }}</p>
<p class="info-text">{{ lastTime }}</p>
<div class="select-area">
<el-tooltip content="登录页预览" placement="top" trigger-keys>
<div
class="small-overview"
:class="{ selected: selectView === 'login' }"
@click="selectView = 'login'"
>
<div class="overlay"></div>
<div class="origin-size customize-login">
<Login />
</div>
</div>
</el-tooltip>
<el-tooltip content="首页预览" placement="top" trigger-keys>
<div
class="small-overview"
:class="{ selected: selectView !== 'login' }"
@click="selectView = 'home'"
>
<div class="overlay"></div>
<div class="origin-size customize-home">
<Navigate :show-el-message="false" />
<Home :is-preview="true" />
</div>
</div>
</el-tooltip>
</div>
</div>
</div>
<div class="operate-button">
<el-button type="primary" size="large" @click="generate">生成</el-button>
<el-button size="large" @click="cancel">取消</el-button>
</div>
</div>
</template>
<style lang="scss">
.customize-tool {
.nav-container {
#homeIbmc {
display: none !important;
}
.layout-with-sider {
display: none !important;
}
#leftNavCollapse {
height: 1180px !important;
}
}
#homeIbmc {
pointer-events: none;
margin-top: -80px;
}
.navbar {
pointer-events: none;
}
#leftNavCollapseBox {
pointer-events: none;
}
.customize-login {
pointer-events: none;
}
.nav-left {
#homeIbmc {
margin-left: 256px;
width: calc(100% - 256px);
}
.footer {
bottom: -130px !important;
}
}
.dashboard-overview {
margin-top: 64px;
}
.text {
font-size: 12px;
color: var(--o-text-color-secondary);
letter-spacing: 0;
line-height: 16px;
margin-bottom: 8px;
}
.title {
font-weight: 900;
}
.info-title {
font-size: 16px;
font-weight: 900;
color: var(--o-text-color-primary);
letter-spacing: 0;
line-height: 24px;
margin-bottom: 16px;
}
.info-text {
font-size: 12px;
color: var(--o-text-color-primary);
letter-spacing: 0;
line-height: 16px;
margin-bottom: 8px;
}
.login-left-img img {
margin-top: 0;
}
.origin-size {
width: 1920px;
height: 1080px;
}
.display-area {
display: flex;
background: var(--o-bg-color-light);
border-radius: 4px;
margin-top: 24px;
.display-overview {
width: 892px;
height: 504px;
padding: 2px;
.overlay {
width: 892px;
height: 504px;
}
.customize-login {
transform: scale(calc(888 / 1920));
margin-top: -290px;
margin-left: -516px;
}
.customize-home {
transform: scale(calc(888 / 1920));
margin-top: -289px;
margin-left: -516px;
background-color: var(--o-bg-color-dark);
overflow: auto;
}
}
.display-info {
padding: 24px;
position: relative;
.select-area {
display: flex;
bottom: 24px;
position: absolute;
.small-overview {
width: 98px;
height: 62px;
padding: 8px;
border: 1px solid var(--o-scrollbar-color);
border-radius: 2px;
&:first-child {
margin-right: 16px;
}
.overlay {
width: 98px;
height: 62px;
}
.customize-login {
transform: scale(calc(82 / 1920));
margin-top: -519px;
margin-left: -921px;
}
.customize-home {
transform: scale(calc(82 / 1920));
margin-top: -518px;
margin-left: -921px;
background-color: var(--o-bg-color-dark);
overflow: hidden;
}
&:hover {
border: 2px solid var(--o-color-primary-secondary);
border-radius: 2px;
padding: 7px;
}
}
.selected {
border: 2px solid var(--o-color-primary);
border-radius: 2px;
padding: 7px;
}
}
}
.customize-home {
.customize-tool-icon {
display: none;
}
}
.overlay {
z-index: 100;
position: absolute;
}
.login-copyright {
bottom: 78px;
}
}
.operate-button {
margin-top: 24px;
margin-left: 516px;
}
}
</style>