💄 UI 升级

This commit is contained in:
muwoo 2023-10-12 14:04:10 +08:00
parent 0d0f745fc1
commit 3cf0d3471f
98 changed files with 1475 additions and 14012 deletions

View File

@ -1,5 +1,5 @@
<template>
<div :class="[platform, 'detach']">
<div :class="[process.platform, 'detach']">
<div class="info">
<img :src="plugInfo.logo"/>
<input

View File

@ -1,3 +1,22 @@
module.exports = {
presets: ["@vue/cli-plugin-babel/preset"],
presets: ['@vue/cli-plugin-babel/preset'],
plugins: [
[
'import',
{
libraryName: 'ant-design-vue',
style: 'css', // or 'css'
},
'ant-design-vue',
],
[
'import',
{
libraryName: '@ant-design/icons-vue',
libraryDirectory: 'lib/icons',
camel2DashComponentName: false,
},
'@ant-design/icons-vue',
],
],
};

13020
feature/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -5,22 +5,27 @@
"scripts": {
"serve": "vue-cli-service serve --port 8081",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
"lint": "vue-cli-service lint",
"report": "vue-cli-service build --report"
},
"dependencies": {
"@ant-design/icons-vue": "^6.0.1",
"@vue/cli-service": "~4.5.0",
"ant-design-vue": "3.2.14",
"axios": "^0.24.0",
"babel-plugin-import": "^1.13.8",
"core-js": "^3.6.5",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
"markdown-it": "^12.2.0",
"nanoid": "^4.0.2",
"vue": "3.2.45",
"vue-i18n": "^9.2.2",
"vue-i18n": "9.2.2",
"vue-router": "^4.0.0-0",
"vuex": "^4.0.0-0"
"vue3-carousel": "^0.3.1",
"vue3-lottie": "^3.1.0",
"vuex": "^4.0.0-0",
"webpack-bundle-analyzer": "^4.9.1"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^4.18.0",

View File

@ -9,7 +9,7 @@
"pluginType": "ui",
"features": [
{
"code": "market",
"code": "finder",
"explain": "插件市场",
"cmds":[
"插件市场"

View File

@ -1,91 +1,226 @@
<template>
<div class="main-container">
<div class="slider-bar">
<div class="left-menu">
<a-menu
v-model:selectedKeys="active"
mode="horizontal"
@select="({ key }) => changeMenu(key)"
:selectedKeys="active"
mode="vertical"
>
<a-menu-item key="market">
<a-menu-item key="finder">
<template #icon>
<AppstoreOutlined />
<StarOutlined style="font-size: 18px;" />
</template>
{{ $t('feature.market.title') }}
{{ $t('feature.market.explore') }}
</a-menu-item>
<a-menu-item key="installed">
<a-menu-item key="worker">
<template #icon>
<HeartOutlined />
<SendOutlined style="transform: rotate(-45deg); font-size: 18px;" />
</template>
{{ $t('feature.installed.title') }}
{{ $t('feature.market.efficiency') }}
</a-menu-item>
<a-menu-item key="settings">
<a-menu-item key="tools">
<template #icon>
<SettingOutlined />
<SearchOutlined style="font-size: 18px;" />
</template>
{{ $t('feature.settings.title') }}
{{ $t('feature.market.searchTool') }}
</a-menu-item>
<a-menu-item key="dev">
<a-menu-item key="image">
<template #icon>
<BugOutlined />
<FileImageOutlined style="font-size: 18px;" />
</template>
{{ $t('feature.dev.title') }}
{{ $t('feature.market.imageTool') }}
</a-menu-item>
<a-menu-item key="devPlugin">
<template #icon>
<CodeOutlined style="font-size: 18px;" />
</template>
{{ $t('feature.market.developTool') }}
</a-menu-item>
<a-menu-item key="system">
<template #icon>
<DatabaseOutlined style="font-size: 18px;" />
</template>
{{ $t('feature.market.systemTool') }}
</a-menu-item>
<a-sub-menu class="user-info">
<template #icon>
<a-avatar :size="32">
<template #icon>
<img :src="perf.custom.logo" />
</template>
</a-avatar>
</template>
<template #title>{{ perf.custom.username }}</template>
<a-menu-item key="settings">
<template #icon>
<SettingOutlined />
</template>
{{ $t('feature.settings.title') }}
</a-menu-item>
<a-menu-item key="installed">
<template #icon>
<HeartOutlined />
</template>
{{ $t('feature.installed.title') }}
</a-menu-item>
<a-menu-item key="dev">
<template #icon>
<BugOutlined />
</template>
{{ $t('feature.dev.title') }}
</a-menu-item>
</a-sub-menu>
</a-menu>
</div>
<router-view />
<div :class="['finder', 'result', 'devPlugin', 'image', 'tools', 'worker', 'system'].includes(active[0]) ? 'container' : 'more'">
<keep-alive>
<router-view />
</keep-alive>
</div>
</div>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import { computed } from 'vue';
import { useRouter } from 'vue-router';
import {
HeartOutlined,
AppstoreOutlined,
StarOutlined,
SendOutlined,
SearchOutlined,
FileImageOutlined,
DatabaseOutlined,
CodeOutlined,
SettingOutlined,
HeartOutlined,
BugOutlined,
} from '@ant-design/icons-vue';
import { useStore } from 'vuex';
import localConfig from '@/confOp';
const store = useStore();
const router = useRouter();
const active = ref(['market']);
const active = computed(() => store.state.active);
const { perf } = localConfig.getConfig();
const changeMenu = (key: any) => {
store.commit('commonUpdate', {active: [key]})
router.push(key);
};
window.rubick.onPluginEnter(({ code }: { code: string }) => {
changeMenu(code);
active.value = [code];
store.commit('commonUpdate', {active: [code]})
});
const store = useStore();
window.rubick.setSubInput((e: any) => {
if (
[
'finder',
'result',
'devPlugin',
'image',
'tools',
'worker',
'system',
].includes(active.value[0])
) {
if (e.text) {
store.commit('setSearchValue', e.text);
router.push('result');
} else {
store.commit('commonUpdate', {active: ['finder']})
router.push('finder');
}
}
}, '搜索插件');
const init = () => store.dispatch('init');
init();
</script>
<style lang="less" scoped>
* {
margin: 0;
padding: 0;
}
.main-container {
-webkit-app-region: no-drag;
display: flex;
align-items: flex-start;
background: var(--color-body-bg);
flex-direction: column;
.slider-bar {
width: 100%;
.ant-menu {
background: var(--color-body-bg);
border-color: var(--color-border-light);
:deep(.ant-menu-item) {
&:not(.ant-menu-item-selected) {
color: var(--color-text-primary);
}
<style lang="less">
.ant-menu-submenu-popup {
.ant-menu {
background: var(--color-body-bg2) !important;
height: 100%;
border-right: none;
.ant-menu-item, .ant-menu-submenu, .ant-menu-submenu-arrow {
color: var(--color-text-content);
&:active {
background: none;
}
}
.ant-menu-item-selected, .ant-menu-submenu-selected {
background-color: var(--color-list-hover);
color: var(--ant-primary-color);
.ant-menu-submenu-arrow {
color: var(--ant-primary-color);
}
&:after {
display: none;
}
}
}
}
</style>
<style lang="less" scoped>
@import '~@/assets/common.less';
* {
margin: 0;
padding: 0;
}
.main-container {
-webkit-app-region: no-drag;
display: flex;
background: var(--color-body-bg);
border-top: 1px solid var(--color-border-light);
height: 100vh;
box-sizing: border-box;
align-items: flex-start;
width: 100%;
overflow: hidden;
background: var(--color-menu-bg);
.search {
:deep(.ant-btn),
:deep(.ant-input),
:deep(.ant-input-group-addon) {
color: var(--ant-primary-color) !important;
background: var(--color-input-hover);
border-color: var(--color-border-light);
}
}
.container,
.more {
background: var(--color-body-bg);
width: calc(~'100% - 183px');
height: 100%;
box-sizing: border-box;
padding: 16px;
position: relative;
overflow: auto;
}
.more {
background: var(--color-body-bg2);
}
.left-menu {
padding: 24px 16px;
position: relative;
height: 100vh;
:deep(.ant-menu-item) {
padding-left: 12px !important;
}
:deep(.ant-menu-item-selected),
:deep(.ant-menu-submenu-selected) {
background-color: var(--color-list-hover);
border-radius: 6px;
color: var(--ant-primary-color);
}
:deep(.user-info) {
position: absolute;
bottom: 32px;
}
:deep(.ant-avatar) {
background: transparent;
}
}
}
</style>

View File

@ -8,9 +8,10 @@
--color-text-content: #141414;
--color-text-desc: rgba(0, 0, 0, 0.45);
// 背景色
--color-body-bg2: #eee;
--color-body-bg: #fff;
--color-menu-bg: #f3efef;
--color-list-hover: #e2e2e2;
--color-menu-bg: rgba(248, 248, 248, 1);
--color-list-hover: rgba(233, 233, 233, 1);
--color-input-hover: #fff;
// 边框
--color-border-light: #f0f0f0;
@ -22,9 +23,10 @@
--color-text-desc: #8f8fa6;
// 背景色
--color-body-bg: #1c1c28;
--color-body-bg2: #2c2f3b;
--color-menu-bg: #1c1c28;
--color-list-hover: #33333d;
--color-input-hover: #33333d;
--color-list-hover: #2c2f3b;
--color-input-hover: #444d;
// 边框
--color-border-light: #33333d;
--color-border-light: #444d;
}

View File

@ -1,5 +1,5 @@
.left-menu {
width: 200px;
width: 183px;
// height: 100vh;
border-right: 1px solid var(--color-border-light);
.search-container {
@ -20,15 +20,18 @@
background: var(--color-menu-bg);
height: 100%;
border-right: none;
.ant-menu-item {
.ant-menu-item, .ant-menu-submenu, .ant-menu-submenu-arrow {
color: var(--color-text-content);
&:active {
background: none;
}
}
.ant-menu-item-selected {
.ant-menu-item-selected, .ant-menu-submenu-selected {
background-color: var(--color-list-hover);
color: var(--color-text-primary);
color: var(--ant-primary-color);
.ant-menu-submenu-arrow {
color: var(--ant-primary-color);
}
&:after {
display: none;
}

View File

@ -0,0 +1,35 @@
export const SPRING = {
theme: 'SPRING',
primaryColor: '#ff4ea4',
errorColor: '#ed6d46',
warningColor: '#e5a84b',
successColor: '#c0d695',
infoColor: '#aa8eeB',
};
export const SUMMER = {
theme: 'SUMMER',
primaryColor: '#6078ea',
errorColor: '#ed6d46',
warningColor: '#e5a84b',
successColor: '#c0d695',
infoColor: '#aa8eeB',
};
export const AUTUMN = {
theme: 'AUTUMN',
primaryColor: '#f55555',
errorColor: '#ed6d46',
warningColor: '#e5a84b',
successColor: '#c0d695',
infoColor: '#aa8eeB',
};
export const WINTER = {
theme: 'WINTER',
primaryColor: '#00b294',
errorColor: '#e94829',
warningColor: '#ed6d3d',
successColor: '#c3d94e',
infoColor: '#bfa782',
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -12,6 +12,7 @@ try {
}
const instance = axios.create({
timeout: 4000,
baseURL:
baseURL || 'https://gitcode.net/rubickcenter/rubick-database/-/raw/master',
});
@ -61,7 +62,7 @@ export default {
},
async getPluginDetail(url: string) {
const res = await axios.get(url);
const res = await instance.get(url);
return res.data;
},

View File

@ -12,8 +12,9 @@ export default {
developTool: 'Develop Tools',
systemTool: 'System Tools',
finder: {
must: 'Necessary',
recommended: 'Recommended',
lastUpdated: 'Last Updated',
lastUpdated: 'Total',
},
install: 'Install',
},
@ -37,17 +38,17 @@ export default {
tips1: 'rubick',
tips2:
'After the software preferences are set, please restart the software. Please go to the mini program set avatar and nickname.',
themeColor: 'Theme Color',
primaryColor: 'Primary Color',
errorColor: 'Error Color',
warningColor: 'Warning Color',
successColor: 'Success Color',
infoColor: 'Info Color',
themeColor: 'Theme Setting',
spring: 'Spring',
summer: 'Summer',
autumn: 'Autumn',
winter: 'Winter',
personalized: 'Personalized',
greeting: 'Search Box Greeting',
logo: 'Logo',
logo: 'Avatar',
replace: 'Repalce Logo',
reset: 'Reset Default',
name: 'User Name',
},
basic: {
title: 'Basic',

View File

@ -12,8 +12,9 @@ export default {
developTool: '开发者',
systemTool: '系统',
finder: {
must: '必备',
recommended: '推荐',
lastUpdated: '最近更新',
lastUpdated: '全部',
},
install: '安装',
},
@ -35,17 +36,17 @@ export default {
accountInfo: '账户信息',
tips1: 'rubick 用户',
tips2: '软件偏好设置完成后需重启软件,头像和昵称请前往小程序设置',
themeColor: '主题色设置',
primaryColor: '主色调',
errorColor: '错误色',
warningColor: '警告色',
successColor: '成功色',
infoColor: '提醒色',
personalized: '用户个性化设置',
greeting: '主搜索框欢迎语',
logo: '界面 logo',
replace: '点我替换',
themeColor: '主题设置',
spring: '立春',
summer: '立夏',
autumn: '立秋',
winter: '立冬',
personalized: '用户设置',
greeting: '搜索框欢迎语',
logo: '头像',
replace: '替换',
reset: '恢复默认设置',
name: '用户名',
},
basic: {
title: '基本设置',

View File

@ -1,5 +1,28 @@
import { createApp } from 'vue';
import Antd, { ConfigProvider } from 'ant-design-vue';
import Vue3Lottie from 'vue3-lottie';
import {
ConfigProvider,
Button,
Divider,
Row,
Col,
Dropdown,
Menu,
Form,
Input,
Radio,
Select,
Switch,
Avatar,
Collapse,
List,
Tooltip,
Alert,
Drawer,
Modal,
Result,
Spin,
} from 'ant-design-vue';
import App from './App.vue';
import router from './router';
import store from './store';
@ -14,4 +37,36 @@ ConfigProvider.config({
theme: config.perf.custom || {},
});
createApp(App).use(registerI18n).use(store).use(Antd).use(router).mount('#app');
window.rubick.changeTheme = () => {
const config: any = localConfig.getConfig();
ConfigProvider.config({
theme: config.perf.custom || {},
});
};
createApp(App)
.use(registerI18n)
.use(store)
.use(Button)
.use(Divider)
.use(Row)
.use(Col)
.use(Dropdown)
.use(Menu)
.use(Form)
.use(Input)
.use(Radio)
.use(Select)
.use(Switch)
.use(Avatar)
.use(Collapse)
.use(List)
.use(Tooltip)
.use(Alert)
.use(Drawer)
.use(Modal)
.use(Result)
.use(Spin)
.use(router)
.use(Vue3Lottie)
.mount('#app');

View File

@ -1,40 +1,65 @@
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
import Market from '../views/market/index.vue';
import Installed from '../views/installed/index.vue';
import Account from '../views/account/index.vue';
import Settings from '../views/settings/user.vue';
import Dev from '../views/dev/index.vue';
const routes: Array<RouteRecordRaw> = [
{
path: '/market',
name: 'market',
component: Market,
path: '/result',
name: 'result',
component: () => import('../views/market/components/result.vue'),
},
{
path: '/devPlugin',
name: 'devPlugin',
component: () => import('../views/market/components/devlopment.vue'),
},
{
path: '/image',
name: 'image',
component: () => import('../views/market/components/image.vue'),
},
{
path: '/tools',
name: 'tools',
component: () => import('../views/market/components/tools.vue'),
},
{
path: '/worker',
name: 'worker',
component: () => import('../views/market/components/worker.vue'),
},
{
path: '/system',
name: 'system',
component: () => import('../views/market/components/system.vue'),
},
{
path: '/finder',
name: 'finder',
component: () => import('../views/market/components/finder.vue'),
},
{
path: '/installed',
name: 'installed',
component: Installed,
component: () => import('../views/installed/index.vue'),
},
{
path: '/account',
name: 'account',
component: Account,
component: () => import('../views/account/index.vue'),
},
{
path: '/settings',
name: 'settings',
component: Settings,
component: () => import('../views/settings/user.vue'),
},
{
path: '/dev',
name: 'dev',
component: Dev,
component: () => import('../views/dev/index.vue'),
},
{
path: '/:catchAll(.*)',
name: 'market',
component: Market,
name: 'finder',
component: () => import('../views/market/components/finder.vue'),
},
];

View File

@ -17,6 +17,7 @@ export default createStore({
totalPlugins: [],
localPlugins: [],
searchValue: '',
active: ['finder'],
},
mutations: {
commonUpdate(state: any, payload) {

View File

@ -1,30 +1,33 @@
<template>
<div class="dev">
<a-alert
style="margin-bottom: 40px"
:message="$t('feature.dev.tips')"
type="warning"
/>
<a-form
ref="formRef"
:model="formState"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-form-item :label="$t('feature.dev.pluginName')" name="name">
<a-input v-model:value="formState.name" />
</a-form-item>
<a-form-item :wrapper-col="{ span: 14, offset: 4 }">
<a-button :loading="loading" type="primary" @click="onSubmit">
{{ $t('feature.dev.install') }}
</a-button>
<a-button @click="refresh" style="margin-left: 10px">
{{ $t('feature.dev.refreshPlugins') }}
</a-button>
</a-form-item>
</a-form>
<div class="view-title">{{ $t('feature.dev.title') }}</div>
<div class="view-container">
<a-alert
style="margin-bottom: 40px"
:message="$t('feature.dev.tips')"
type="warning"
/>
<a-form
ref="formRef"
:model="formState"
:rules="rules"
:label-col="labelCol"
:wrapper-col="wrapperCol"
>
<a-form-item :label="$t('feature.dev.pluginName')" name="name">
<a-input v-model:value="formState.name" />
</a-form-item>
<a-form-item :wrapper-col="{ span: 14, offset: 4 }">
<a-button :loading="loading" type="primary" @click="onSubmit">
{{ $t('feature.dev.install') }}
</a-button>
<a-button @click="refresh" style="margin-left: 10px">
{{ $t('feature.dev.refreshPlugins') }}
</a-button>
</a-form-item>
</a-form>
</div>
</div>
</template>
@ -81,9 +84,21 @@ const wrapperCol = { span: 14 };
box-sizing: border-box;
width: 100%;
overflow-x: hidden;
background: var(--color-body-bg);
height: calc(~'100vh - 46px');
padding: 20px;
height: calc(~'100vh - 34px');
.view-title {
font-size: 16px;
font-weight: 500;
margin-bottom: 16px;
color: var(--color-text-primary);
}
.view-container {
padding: 10px;
box-sizing: border-box;
border-radius: 8px;
background: var(--color-body-bg);
overflow: auto;
height: calc(~'100vh - 84px');
}
:deep(label) {
color: var(--color-text-content);
}

View File

@ -1,111 +1,106 @@
<template>
<div class="installed">
<div v-if="!localPlugins.length">
<a-result
status="404"
:title="$t('feature.installed.tips1')"
:sub-title="$t('feature.installed.tips2')"
/>
</div>
<div class="container" v-else>
<div class="installed-list">
<div
:class="currentSelect[0] === index ? 'item active' : 'item'"
:key="index"
@click="currentSelect = [index]"
v-for="(plugin, index) in localPlugins"
<div class="view-title">{{ $t('feature.installed.title') }}</div>
<div class="view-container">
<div v-if="!localPlugins.length">
<a-result
class="error-content"
sub-title="哎呀,暂时还没有安装任何插件!"
>
<img :src="plugin.logo" />
<div class="info">
<div class="title">
{{ plugin.pluginName }}
<span class="desc">v{{ plugin.version }}</span>
</div>
<div class="desc">{{ plugin.description }}</div>
</div>
</div>
<template #icon>
<Vue3Lottie :animationData="emptyJson" :height="240" :width="240" />
</template>
<template #extra>
<a-button @click="gotoFinder" key="console" type="primary">去插件市场看看吧</a-button>
</template>
</a-result>
</div>
<div class="plugin-detail">
<div class="plugin-top">
<div class="left">
<div class="title">
{{ pluginDetail.pluginName }}
<a-tag>{{ pluginDetail.version }}</a-tag>
<div class="container" v-else>
<div class="installed-list">
<div
:class="currentSelect[0] === plugin.name ? 'item active' : 'item'"
:key="index"
@click="currentSelect = [plugin.name]"
v-for="(plugin, index) in localPlugins"
>
<img :src="plugin.logo" />
<div class="info">
<div class="title">
{{ plugin.pluginName }}
</div>
<div class="desc">{{ plugin.description }}</div>
</div>
<div class="desc">
{{ $t('feature.installed.developer') }}{{
`${pluginDetail.author || $t('feature.installed.unknown')}`
}}
</div>
<div class="desc">
{{ pluginDetail.description }}
</div>
</div>
<div class="right">
<a-button
type="danger"
size="small"
shape="round"
:loading="pluginDetail.isloading"
@click="deletePlugin(pluginDetail)"
>
{{ $t('feature.installed.remove') }}
</a-button>
</div>
</div>
<a-tabs default-active-key="1">
<a-tab-pane key="1" :tab="$t('feature.installed.functionKey')">
<div class="feature-container">
<div
class="desc-item"
:key="index"
v-for="(item, index) in pluginDetail.features"
>
<div>{{ item.explain }}</div>
<a-tag
:key="cmd"
v-for="cmd in item.cmds"
:class="{ executable: !cmd.label }"
>
<span
@click="
!cmd.label &&
openPlugin({
code: item.code,
cmd,
})
"
>
{{ cmd.label || cmd }}
</span>
<template v-if="!cmd.label" #icon>
<a-tooltip
v-if="!hasAdded(cmd)"
placement="topLeft"
:title="$t('feature.installed.addToPanel')"
>
<PlusCircleOutlined
@click="addCmdToSuperPanel({ code: item.code, cmd })"
/>
</a-tooltip>
<a-tooltip
v-else
placement="topLeft"
:title="$t('feature.installed.removeFromPanel')"
>
<MinusCircleOutlined
@click="removePluginToSuperPanel({ cmd })"
/>
</a-tooltip>
</template>
</a-tag>
<div class="plugin-detail">
<div class="plugin-top">
<div class="left">
<div class="title">
{{ pluginDetail.pluginName }}
<a-tag>{{ pluginDetail.version }}</a-tag>
</div>
<div class="desc">
{{ $t('feature.installed.developer') }}{{
`${pluginDetail.author || $t('feature.installed.unknown')}`
}}
</div>
<div class="desc">
{{ pluginDetail.description }}
</div>
</div>
</a-tab-pane>
<a-tab-pane key="2" :tab="$t('feature.installed.detailInfo')">
<div class="detail-container" v-html="readme"></div>
</a-tab-pane>
</a-tabs>
<div class="right">
<a-button
type="primary"
size="small"
shape="round"
:loading="pluginDetail.isloading"
@click="deletePlugin(pluginDetail)"
>
{{ $t('feature.installed.remove') }}
</a-button>
</div>
</div>
<div class="feature-container">
<template
:key="index"
v-for="(item, index) in pluginDetail.features"
>
<div
class="desc-item"
v-if="item.cmds.filter(cmd => !cmd.label).length > 0"
>
<div>{{ item.explain }}</div>
<template :key="cmd" v-for="cmd in item.cmds">
<a-dropdown
v-if="!cmd.label"
:class="{ executable: !cmd.label }"
>
<template #overlay>
<a-menu @click="({key}) => handleMenuClick(key, item, cmd)">
<a-menu-item key="open">
<CaretRightOutlined />
运行
</a-menu-item>
<a-menu-item v-if="!hasAdded(cmd)" key="add">
<PushpinOutlined />
固定到超级面板
</a-menu-item>
<a-menu-item v-else key="remove">
<PushpinFilled />
从超级面板中取消固定
</a-menu-item>
</a-menu>
</template>
<a-button size="small" class="keyword-tag">
{{ cmd.label || cmd }}
<DownOutlined />
</a-button>
</a-dropdown>
</template>
</div>
</template>
</div>
</div>
</div>
</div>
</div>
@ -113,22 +108,31 @@
<script setup>
import { useStore } from 'vuex';
import { computed, ref, toRaw } from 'vue';
import { computed, ref, toRaw, watch } from 'vue';
import { useRoute, useRouter } from 'vue-router';
import path from 'path';
import MarkdownIt from 'markdown-it';
import { PlusCircleOutlined, MinusCircleOutlined } from '@ant-design/icons-vue';
import {
PushpinOutlined,
PushpinFilled,
CaretRightOutlined,
DownOutlined,
} from '@ant-design/icons-vue';
import { message } from 'ant-design-vue';
import emptyJson from '@/assets/lottie/empty.json';
const { ipcRenderer } = window.require('electron');
const remote = window.require('@electron/remote');
const fs = window.require('fs');
const md = new MarkdownIt();
const appPath = remote.app.getPath('userData');
const baseDir = path.join(appPath, './rubick-plugins');
const store = useStore();
const route = useRoute();
const router = useRouter();
const localPlugins = computed(() =>
store.state.localPlugins.filter(
(plugin) => plugin.name !== 'rubick-system-feature'
@ -138,10 +142,16 @@ const updateLocalPlugin = () => store.dispatch('updateLocalPlugin');
const startUnDownload = (name) => store.dispatch('startUnDownload', name);
const errorUnDownload = (name) => store.dispatch('errorUnDownload', name);
const currentSelect = ref([0]);
const currentSelect = ref([route.query.plugin || localPlugins?.value[0]?.name]);
watch(localPlugins, () => {
currentSelect.value = [localPlugins?.value[0]?.name];
});
const pluginDetail = computed(() => {
return localPlugins.value[currentSelect.value] || {};
return (
localPlugins.value.find((v) => v.name === currentSelect.value[0]) || {}
);
});
const superPanelPlugins = ref(
@ -151,6 +161,19 @@ const superPanelPlugins = ref(
}
);
const handleMenuClick = (key, item, cmd) => {
if(key === 'open') {
openPlugin({
code: item.code,
cmd,
});
} else if (key === 'add') {
addCmdToSuperPanel({cmd, code: item.code});
} else {
removePluginToSuperPanel({cmd, name: item.name})
}
};
const addCmdToSuperPanel = ({ cmd, code }) => {
const plugin = {
...toRaw(pluginDetail.value),
@ -203,21 +226,6 @@ const openPlugin = ({ cmd, code }) => {
);
};
const readme = computed(() => {
if (!pluginDetail.value.name) return '';
const readmePath = path.resolve(
baseDir,
'node_modules',
pluginDetail.value.name,
'README.md'
);
if (fs.existsSync(readmePath)) {
const str = fs.readFileSync(readmePath, 'utf-8');
return md.render(str);
}
return '';
});
const deletePlugin = async (plugin) => {
startUnDownload(plugin.name);
const timer = setTimeout(() => {
@ -230,7 +238,10 @@ const deletePlugin = async (plugin) => {
clearTimeout(timer);
};
const gotoFinder = () => {
router.push('/finder');
store.commit('commonUpdate', { active: ['finder'] });
};
</script>
<style lang="less" scoped>
@ -238,14 +249,29 @@ const deletePlugin = async (plugin) => {
box-sizing: border-box;
width: 100%;
overflow: hidden;
background: var(--color-body-bg);
height: calc(~'100vh - 46px');
height: calc(~'100vh - 34px');
.view-title {
font-size: 16px;
font-weight: 500;
margin-bottom: 16px;
color: var(--color-text-primary);
}
.view-container {
border-radius: 8px;
background: var(--color-body-bg);
overflow: auto;
height: calc(~'100vh - 84px');
}
:deep(.ant-result-title) {
color: var(--color-text-primary);
}
:deep(.ant-result-subtitle) {
color: var(--color-text-desc);
}
.keyword-tag {
font-size: 13px;
margin: 4px;
}
.container {
box-sizing: border-box;
@ -257,7 +283,7 @@ const deletePlugin = async (plugin) => {
}
.installed-list {
width: 40%;
width: 38%;
background: var(--color-body-bg);
height: 100%;
padding: 10px 0;
@ -269,17 +295,29 @@ const deletePlugin = async (plugin) => {
display: flex;
align-items: center;
color: var(--color-text-content);
border-bottom: 1px dashed var(--color-border-light);
cursor: pointer;
&:last-child {
border-bottom: none;
}
img {
width: 40px;
height: 40px;
margin-right: 20px;
width: 34px;
height: 34px;
margin-right: 12px;
}
.desc {
font-size: 12px;
color: var(--color-text-desc);
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
-webkit-line-clamp: 2;
text-overflow: ellipsis;
}
&.active {
color: var(--ant-primary-color);
background: var(--color-list-hover);
}
}
@ -288,16 +326,18 @@ const deletePlugin = async (plugin) => {
.plugin-detail {
padding: 20px 20px 0 20px;
box-sizing: border-box;
width: 60%;
width: 62%;
height: 100%;
background: var(--color-body-bg);
.plugin-top {
display: flex;
align-items: flex-start;
justify-content: space-between;
border-bottom: 1px solid #eee;
padding-bottom: 12px;
margin-bottom: 12px;
.title {
font-size: 20px;
font-size: 16px;
display: flex;
align-items: center;
color: var(--color-text-primary);
@ -314,12 +354,6 @@ const deletePlugin = async (plugin) => {
color: var(--color-text-desc);
}
}
.ant-tabs {
:deep(.ant-tabs-bar) {
color: var(--color-text-content);
border-bottom: 1px solid var(--color-border-light);
}
}
.detail-container,
.feature-container {
@ -332,7 +366,6 @@ const deletePlugin = async (plugin) => {
}
.desc-item {
border-bottom: 1px solid var(--color-border-light);
padding: 10px 0;
color: var(--color-text-content);
.ant-tag {

View File

@ -42,7 +42,6 @@ const dev = computed(() => {
<style lang="less">
.system {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
}

View File

@ -1,20 +1,17 @@
<template>
<div class="finder">
<a-carousel arrows>
<template #prevArrow>
<div class="custom-slick-arrow" style="left: 10px; z-index: 1">
<left-circle-outlined />
</div>
</template>
<template #nextArrow>
<div class="custom-slick-arrow" style="right: 10px">
<right-circle-outlined />
</div>
</template>
<div :key="index" v-for="(banner, index) in data.banners || []">
<img @click="jumpTo(banner.link)" width="100%" :src="banner.src" />
</div>
</a-carousel>
<Carousel :itemsToShow="2" :transition="500">
<Slide :key="index" v-for="(banner, index) in data.banners || []">
<img class="carousel__item" @click="jumpTo(banner.link)" :src="banner.src" />
</Slide>
</Carousel>
<a-divider />
<PluginList
v-if="must && !!must.length"
@downloadSuccess="downloadSuccess"
:title="$t('feature.market.finder.must')"
:list="must"
/>
<PluginList
v-if="recommend && !!recommend.length"
@downloadSuccess="downloadSuccess"
@ -30,8 +27,9 @@
</template>
<script setup>
import { LeftCircleOutlined, RightCircleOutlined } from '@ant-design/icons-vue';
import { ref, computed, onBeforeMount } from 'vue';
import 'vue3-carousel/dist/carousel.css';
import { Carousel, Slide } from 'vue3-carousel';
import request from '../../../assets/request/index';
import PluginList from './plugin-list.vue';
@ -45,6 +43,24 @@ onBeforeMount(async () => {
data.value = await request.getFinderDetail();
});
const must = computed(() => {
const defaultData = data.value.must || [];
if (!defaultData.length) return [];
return defaultData.map((plugin) => {
let searchInfo = null;
totalPlugins.value.forEach((t) => {
if (t.name === plugin) {
searchInfo = t;
}
});
return searchInfo;
});
});
const jumpTo = (url) => {
window.rubick.shellOpenExternal(url);
};
const recommend = computed(() => {
const defaultData = data.value.recommend || [];
if (!defaultData.length) return [];
@ -76,47 +92,46 @@ const newList = computed(() => {
<style lang="less">
.finder {
position: relative;
width: 100%;
height: 100%;
overflow-x: hidden;
box-sizing: border-box;
&::-webkit-scrollbar {
width: 0;
}
.ant-carousel .slick-slide {
text-align: center;
height: 235px;
line-height: 160px;
overflow: hidden;
border-radius: 4px;
img {
width: 100%;
height: 235px;
}
}
.ant-carousel .custom-slick-arrow {
width: 25px;
height: 25px;
font-size: 25px;
color: #fff;
background-color: rgba(31, 45, 61, 0.11);
opacity: 0.3;
}
.ant-carousel .custom-slick-arrow.slick-next:focus {
color: #fff;
}
.ant-carousel .custom-slick-arrow:before {
display: none;
}
.ant-carousel .custom-slick-arrow:hover {
opacity: 0.5;
}
.ant-carousel .slick-slide h3 {
color: #fff;
.ant-divider-horizontal {
margin: 17px 0;
}
}
.carousel__item {
cursor: pointer;
min-height: 180px;
width: 100%;
background-color: var(--vc-clr-primary);
color: var(--vc-clr-white);
font-size: 20px;
border-radius: 8px;
display: flex;
justify-content: center;
align-items: center;
}
.carousel__track {
margin-bottom: 0;
}
.carousel__slide {
padding-right: 6px;
&:last-child {
padding-left: 6px;
}
}
.carousel__prev,
.carousel__next {
box-sizing: content-box;
border: 5px solid white;
}
</style>

View File

@ -42,7 +42,6 @@ const system = computed(() => {
<style lang="less">
.system {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
}

View File

@ -15,10 +15,15 @@
:loading="item.isloading"
>
<CloudDownloadOutlined
v-show="!item.isloading && !item.isdownload"
v-if="!item.isloading && !item.isdownload"
@click.stop="downloadPlugin(item, index)"
style="font-size: 20px; cursor: pointer"
/>
<SelectOutlined
v-else
@click.stop="openPlugin(item)"
style="font-size: 18px; cursor: pointer"
/>
</a-button>
</template>
<a-list-item-meta>
@ -36,68 +41,82 @@
</template>
</a-list>
</div>
</div>
<a-drawer
width="100%"
placement="right"
:closable="false"
:visible="visible"
:get-container="false"
class="plugin-info"
:style="{ position: 'absolute' }"
@close="visible = false"
>
<template #title>
<div class="plugin-title-info">
<div class="back-icon" @click="visible = false">
<ArrowLeftOutlined />
</div>
<div class="info">
<img :src="detail.logo" class="plugin-icon" />
<div class="plugin-desc">
<div class="title">
{{ detail.pluginName }}
<a-drawer
width="77%"
v-if="visible"
placement="right"
:closable="false"
:visible="visible"
class="plugin-info"
:style="{ position: 'absolute' }"
@close="visible = false"
>
<template #title>
<div class="plugin-title-info">
<div class="info">
<img :src="detail.logo" class="plugin-icon" />
<div class="plugin-desc">
<div>
<div class="title">
{{ detail.pluginName }}
</div>
<div class="desc">
{{ detail.description }}
</div>
</div>
<a-button
v-if="!detail.isdownload"
@click.stop="downloadPlugin(detail)"
shape="round"
type="primary"
:loading="detail.isloading"
>
<template #icon>
<CloudDownloadOutlined
v-show="!detail.isloading && !detail.isdownload"
/>
</template>
{{ $t('feature.market.install') }}
</a-button>
</div>
<div class="desc">
{{ detail.description }}
</div>
<a-button
v-if="!detail.isdownload"
@click.stop="downloadPlugin(detail)"
shape="round"
type="primary"
:loading="detail.isloading"
>
<template #icon>
<CloudDownloadOutlined
v-show="!detail.isloading && !detail.isdownload"
/>
</template>
{{ $t('feature.market.install') }}
</a-button>
</div>
</div>
</div>
</template>
<div v-html="content" class="home-page-container"></div>
</a-drawer>
</template>
<a-spin :spinning="!content" tip="内容加载中...">
<div v-if="content !== 'error'" v-html="content" class="home-page-container"></div>
<a-result
class="error-content"
v-else
sub-title="插件主页内容走丢啦!"
>
<template #icon>
<Vue3Lottie :animationData="notFountJson" :height="240" :width="240" />
</template>
</a-result>
</a-spin>
</a-drawer>
</div>
</template>
<script setup>
import {
CloudDownloadOutlined,
ArrowLeftOutlined,
SelectOutlined
} from '@ant-design/icons-vue';
import { defineProps, ref } from 'vue';
import { useStore } from 'vuex';
import { message } from 'ant-design-vue';
import MarkdownIt from 'markdown-it';
import request from '../../../assets/request/index';
import { useRouter } from 'vue-router';
import request from '@/assets/request/index';
import notFountJson from '@/assets/lottie/404.json';
import { useI18n } from 'vue-i18n';
const { t } = useI18n();
const store = useStore();
const router = useRouter();
const startDownload = (name) => store.dispatch('startDownload', name);
const successDownload = (name) => store.dispatch('successDownload', name);
@ -113,7 +132,7 @@ defineProps({
const downloadPlugin = async (plugin) => {
startDownload(plugin.name);
await window.market.downloadPlugin(plugin);
message.success(t('feature.dev.installSuccess', { pluginName: plugin.name }));
message.success(t('feature.dev.installSuccess', { pluginName: plugin.pluginName }));
successDownload(plugin.name);
};
@ -125,11 +144,24 @@ const content = ref('');
const showDetail = async (item) => {
visible.value = true;
detail.value = item;
content.value = '';
let mdContent = '暂无内容';
if (item.homePage) {
mdContent = await request.getPluginDetail(item.homePage);
try {
if (item.homePage) {
mdContent = await request.getPluginDetail(item.homePage);
}
content.value = markdown.render(mdContent);
} catch (e) {
content.value = 'error';
}
content.value = markdown.render(mdContent);
};
const openPlugin = (item) => {
store.commit('commonUpdate', {active: ['installed']})
router.push({
path: '/installed',
query: {plugin: item.name}
});
};
</script>
@ -138,7 +170,7 @@ const showDetail = async (item) => {
width: 0;
}
.panel-item {
margin: 20px 0;
margin-bottom: 17px;
.download-plugin-btn {
color: var(--ant-primary-color);
}
@ -170,7 +202,9 @@ const showDetail = async (item) => {
}
&:last-child {
border-bottom: none;
&:after {
border-bottom: none;
}
}
}
.plugin-info {
@ -199,23 +233,23 @@ const showDetail = async (item) => {
.plugin-title-info {
display: flex;
align-items: flex-start;
.back-icon {
font-size: 16px;
margin-right: 40px;
}
width: 100%;
.info {
width: 100%;
display: flex;
align-items: center;
align-items: flex-start;
.plugin-icon {
width: 100px;
height: 100px;
width: 40px;
height: 40px;
margin-right: 20px;
}
.plugin-desc {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
.title {
font-size: 18px;
font-weight: bold;
@ -225,14 +259,18 @@ const showDetail = async (item) => {
.desc {
font-size: 12px;
font-weight: normal;
margin-top: 5px;
margin-bottom: 20px;
color: var(--color-text-desc);
}
}
}
}
.error-content {
&.ant-result {
padding: 0;
}
}
.home-page-container {
min-height: 200px;
* {
color: var(--color-text-content);
}

View File

@ -6,11 +6,21 @@
:title="$t('feature.market.searchResult')"
:list="result"
/>
<a-result
class="error-content"
v-else
sub-title="哎呀,暂时还没有这个插件哟!"
>
<template #icon>
<Vue3Lottie :animationData="emptyJson" :height="240" :width="240" />
</template>
</a-result>
</div>
</template>
<script setup>
import { computed } from 'vue';
import emptyJson from '@/assets/lottie/empty.json';
import PluginList from './plugin-list.vue';
import { useStore } from 'vuex';
@ -38,8 +48,10 @@ const result = computed(() => {
<style lang="less">
.result {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
.error-content {
padding-top: 40px;
}
}
</style>

View File

@ -42,7 +42,6 @@ const system = computed(() => {
<style lang="less">
.system {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
}

View File

@ -42,7 +42,6 @@ const tools = computed(() => {
<style lang="less">
.worker {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
}

View File

@ -42,7 +42,6 @@ const system = computed(() => {
<style lang="less">
.worker {
width: 100%;
height: 100vh;
overflow-x: hidden;
box-sizing: border-box;
}

View File

@ -1,133 +0,0 @@
<template>
<div class="market">
<div class="left-menu">
<div class="search-container">
<a-input-search
v-model:value="searchValue"
:placeholder="$t('feature.market.search')"
style="width: 100%"
class="search"
@search="onSearch"
/>
</div>
<a-menu v-model:selectedKeys="current" mode="inline">
<a-menu-item key="finder">
<template #icon>
<StarOutlined />
</template>
{{ $t('feature.market.explore') }}
</a-menu-item>
<a-menu-item key="worker">
<template #icon>
<SendOutlined style="transform: rotate(-45deg)" />
</template>
{{ $t('feature.market.efficiency') }}
</a-menu-item>
<a-menu-item key="tools">
<template #icon>
<SearchOutlined />
</template>
{{ $t('feature.market.searchTool') }}
</a-menu-item>
<a-menu-item key="image">
<template #icon>
<FileImageOutlined />
</template>
{{ $t('feature.market.imageTool') }}
</a-menu-item>
<a-menu-item key="dev">
<template #icon>
<CodeOutlined />
</template>
{{ $t('feature.market.developTool') }}
</a-menu-item>
<a-menu-item key="system">
<template #icon>
<DatabaseOutlined />
</template>
{{ $t('feature.market.systemTool') }}
</a-menu-item>
</a-menu>
</div>
<div class="container">
<component :totalPlugins="totalPlugins" :is="Components[current[0]]" />
</div>
</div>
</template>
<script lang="ts" setup>
import {
StarOutlined,
SendOutlined,
SearchOutlined,
FileImageOutlined,
DatabaseOutlined,
CodeOutlined,
} from '@ant-design/icons-vue';
import { reactive, toRefs, computed } from 'vue';
import { useStore } from 'vuex';
import Finder from './components/finder.vue';
import System from './components/system.vue';
import Worker from './components/worker.vue';
import Tools from './components/tools.vue';
import Dev from './components/devlopment.vue';
import Image from './components/image.vue';
import Result from './components/result.vue';
const Components = {
finder: Finder,
system: System,
worker: Worker,
image: Image,
tools: Tools,
dev: Dev,
result: Result,
};
const state = reactive({
searchValue: '',
current: ['finder'],
});
const store = useStore();
const totalPlugins = computed(() => store.state.totalPlugins);
const { searchValue, current } = toRefs(state);
const onSearch = (searchValue: string) => {
state.current = ['result'];
store.commit('setSearchValue', searchValue);
};
</script>
<style lang="less" scoped>
@import '~@/assets/common.less';
.market {
display: flex;
box-sizing: border-box;
align-items: flex-start;
width: 100%;
overflow: hidden;
background: var(--color-menu-bg);
height: calc(~'100vh - 46px');
.search {
:deep(.ant-btn),
:deep(.ant-input),
:deep(.ant-input-group-addon) {
color: var(--ant-primary-color) !important;
background: var(--color-input-hover);
border-color: var(--color-border-light);
}
}
.container {
background: var(--color-body-bg);
width: calc(~'100% - 200px');
height: 100%;
box-sizing: border-box;
padding: 10px 20px;
position: relative;
}
}
</style>

View File

@ -1,239 +1,221 @@
<template>
<div class="settings">
<div class="left-menu">
<a-menu v-model:selectedKeys="currentSelect" mode="inline">
<div class="view-title"> {{ $t('feature.settings.title') }}</div>
<div class="view-container">
<a-menu v-model:selectedKeys="currentSelect" mode="horizontal">
<a-menu-item key="userInfo">
<template #icon>
<UserOutlined />
</template>
{{ $t('feature.settings.account.accountInfo') }}
</a-menu-item>
<a-menu-item key="normal">
<template #icon>
<ToolOutlined />
</template>
{{ $t('feature.settings.basic.title') }}
</a-menu-item>
<a-menu-item key="localstart">
<template #icon>
<FolderOpenOutlined />
</template>
{{ $t('feature.settings.localstart.title') }}
</a-menu-item>
<a-menu-item key="global">
<template #icon>
<LaptopOutlined />
</template>
{{ $t('feature.settings.global.title') }}
</a-menu-item>
<!-- <a-menu-item key="superpanel">-->
<!-- <template #icon>-->
<!-- <FileAddOutlined />-->
<!-- </template>-->
<!-- {{ $t('feature.settings.superPanel.title') }}-->
<!-- </a-menu-item>-->
<!-- <a-menu-item key="superpanel">-->
<!-- <template #icon>-->
<!-- <FileAddOutlined />-->
<!-- </template>-->
<!-- {{ $t('feature.settings.superPanel.title') }}-->
<!-- </a-menu-item>-->
<a-menu-item key="database">
<template #icon>
<DatabaseOutlined />
</template>
{{ $t('feature.settings.database.title') }}
</a-menu-item>
<a-menu-item key="localhost">
<template #icon>
<SafetyOutlined />
</template>
{{ $t('feature.settings.intranet.title') }}
</a-menu-item>
</a-menu>
</div>
<div class="settings-detail">
<UserInfo v-if="currentSelect[0] === 'userInfo'" />
<div v-if="currentSelect[0] === 'normal'">
<div class="setting-item">
<div class="title">
{{ $t('feature.settings.basic.shortcutKey') }}
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.showOrHiddle') }}
<div class="settings-detail">
<UserInfo v-if="currentSelect[0] === 'userInfo'" />
<div v-if="currentSelect[0] === 'normal'">
<div class="setting-item">
<div class="title">
{{ $t('feature.settings.basic.shortcutKey') }}
</div>
<a-tooltip placement="top" trigger="click">
<template #title>
<span>{{ tipText }}</span>
<template v-if="isWindows">
<br />
<span
style="cursor: pointer; text-decoration: underline"
@click="resetDefault('Alt')"
>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.showOrHiddle') }}
</div>
<a-tooltip placement="top" trigger="click">
<template #title>
<span>{{ tipText }}</span>
<template v-if="isWindows">
<br />
<span
style="cursor: pointer; text-decoration: underline"
@click="resetDefault('Alt')"
>
Alt+Space
</span>
<span
style="
<span
style="
cursor: pointer;
margin-left: 8px;
text-decoration: underline;
"
@click="resetDefault('Ctrl')"
>
@click="resetDefault('Ctrl')"
>
Ctrl+Space
</span>
</template>
</template>
</template>
<div
class="value"
tabIndex="-1"
@keyup="(e) => changeShortCut(e, 'showAndHidden')"
>
{{ shortCut.showAndHidden }}
<div
class="value"
tabIndex="-1"
@keyup="(e) => changeShortCut(e, 'showAndHidden')"
>
{{ shortCut.showAndHidden }}
</div>
</a-tooltip>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.screenCapture') }}
</div>
</a-tooltip>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.screenCapture') }}
</div>
<a-tooltip placement="top" trigger="click">
<template #title>
<span>{{ tipText }}</span>
</template>
<div
class="value"
tabIndex="-1"
@keyup="(e) => changeShortCut(e, 'capture')"
>
{{ shortCut.capture }}
</div>
</a-tooltip>
</div>
</div>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.common') }}</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.autoPaste') }}
</div>
<a-switch
v-model:checked="common.autoPast"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
<div class="settings-item-li">
<div class="label">{{ $t('feature.settings.basic.autoBoot') }}</div>
<a-switch
v-model:checked="common.start"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.spaceExec') }}
</div>
<a-switch
v-model:checked="common.space"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
</div>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.theme') }}</div>
<div class="settings-item-li">
<div class="label">{{ $t('feature.settings.basic.darkMode') }}</div>
<a-switch
v-model:checked="common.darkMode"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
</div>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.language') }}</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.changeLang') }}
</div>
<a-select
v-model:value="state.common.lang"
label-in-value
style="width: 240px"
:options="options"
@change="changeLanguage"
></a-select>
</div>
</div>
</div>
<div v-if="currentSelect[0] === 'global'">
<a-collapse>
<a-collapse-panel
key="1"
:header="$t('feature.settings.global.instructions')"
>
<div>
{{ $t('feature.settings.global.tips') }}
</div>
<h3 style="margin-top: 10px">
{{ $t('feature.settings.global.example') }}
</h3>
<a-divider style="margin: 5px 0" />
<a-list item-layout="horizontal" :data-source="examples">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta :description="item.desc">
<template #title>
<div>{{ item.title }}</div>
</template>
</a-list-item-meta>
</a-list-item>
</template>
</a-list>
</a-collapse-panel>
</a-collapse>
<div class="feature-container">
<div class="keywords item">
<div>{{ $t('feature.settings.global.shortcutKey') }}</div>
<template :key="index" v-for="(item, index) in global">
<a-tooltip placement="top" trigger="click">
<template #title>
<span>{{ tipText }}</span>
</template>
<div
class="value"
tabIndex="2"
@keyup="(e) => changeGlobalKey(e, index)"
tabIndex="-1"
@keyup="(e) => changeShortCut(e, 'capture')"
>
{{ item.key }}
<MinusCircleOutlined
@click.stop="deleteGlobalKey(e, index)"
/>
{{ shortCut.capture }}
</div>
</a-tooltip>
</template>
</div>
</div>
<div class="short-cut item">
<div>{{ $t('feature.settings.global.funtionKey') }}</div>
<template v-for="(item, index) in global" :key="index">
<a-input
:value="item.value"
class="value"
allowClear
:disabled="!item.key"
@change="(e) => changeGlobalValue(index, e.target.value)"
/>
</template>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.common') }}</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.autoPaste') }}
</div>
<a-switch
v-model:checked="common.autoPast"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
<div class="settings-item-li">
<div class="label">{{ $t('feature.settings.basic.autoBoot') }}</div>
<a-switch
v-model:checked="common.start"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.spaceExec') }}
</div>
<a-switch
v-model:checked="common.space"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
</div>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.theme') }}</div>
<div class="settings-item-li">
<div class="label">{{ $t('feature.settings.basic.darkMode') }}</div>
<a-switch
v-model:checked="common.darkMode"
:checked-children="$t('feature.settings.basic.on')"
:un-checked-children="$t('feature.settings.basic.off')"
></a-switch>
</div>
</div>
<div class="setting-item">
<div class="title">{{ $t('feature.settings.basic.language') }}</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.basic.changeLang') }}
</div>
<a-select
v-model:value="state.common.lang"
label-in-value
style="width: 240px"
:options="options"
@change="changeLanguage"
></a-select>
</div>
</div>
</div>
<div @click="addConfig" class="add-global">
<PlusCircleOutlined />
{{ $t('feature.settings.global.addShortcutKey') }}
<div v-if="currentSelect[0] === 'global'">
<a-collapse>
<a-collapse-panel
key="1"
:header="$t('feature.settings.global.instructions')"
>
<div>
{{ $t('feature.settings.global.tips') }}
</div>
<h3 style="margin-top: 10px">
{{ $t('feature.settings.global.example') }}
</h3>
<a-divider style="margin: 5px 0" />
<a-list item-layout="horizontal" :data-source="examples">
<template #renderItem="{ item }">
<a-list-item>
<a-list-item-meta :description="item.desc">
<template #title>
<div>{{ item.title }}</div>
</template>
</a-list-item-meta>
</a-list-item>
</template>
</a-list>
</a-collapse-panel>
</a-collapse>
<div class="feature-container">
<div class="keywords item">
<div>{{ $t('feature.settings.global.shortcutKey') }}</div>
<template :key="index" v-for="(item, index) in global">
<a-tooltip placement="top" trigger="click">
<template #title>
<span>{{ tipText }}</span>
</template>
<div
class="value"
tabIndex="2"
@keyup="(e) => changeGlobalKey(e, index)"
>
{{ item.key }}
<MinusCircleOutlined
@click.stop="deleteGlobalKey(e, index)"
/>
</div>
</a-tooltip>
</template>
</div>
<div class="short-cut item">
<div>{{ $t('feature.settings.global.funtionKey') }}</div>
<template v-for="(item, index) in global" :key="index">
<a-input
:value="item.value"
class="value"
allowClear
:disabled="!item.key"
@change="(e) => changeGlobalValue(index, e.target.value)"
/>
</template>
</div>
</div>
<div @click="addConfig" class="add-global">
<PlusCircleOutlined />
{{ $t('feature.settings.global.addShortcutKey') }}
</div>
</div>
<Localhost v-if="currentSelect[0] === 'localhost'" />
<LocalStart v-if="currentSelect[0] === 'localstart'" />
<DataBase v-if="currentSelect[0] === 'database'" />
</div>
<SuperPanel v-if="currentSelect[0] === 'superpanel'" />
<Localhost v-if="currentSelect[0] === 'localhost'" />
<LocalStart v-if="currentSelect[0] === 'localstart'" />
<DataBase v-if="currentSelect[0] === 'database'" />
</div>
</div>
</template>
@ -253,7 +235,6 @@ import debounce from 'lodash.debounce';
import { ref, reactive, watch, toRefs, computed } from 'vue';
import keycodes from './keycode';
import Localhost from './localhost.vue';
import SuperPanel from './super-panel.vue';
import UserInfo from './user-info';
import LocalStart from './local-start';
import DataBase from './database';
@ -453,10 +434,23 @@ const changeLanguage = (value) => {
box-sizing: border-box;
width: 100%;
overflow-x: hidden;
background: var(--color-body-bg);
height: calc(~'100vh - 46px');
display: flex;
background: var(--color-body-bg2);
height: calc(~'100vh - 34px');
.ant-menu-horizontal {
border-bottom: 1px solid var(--color-border-light);
}
.view-title {
font-size: 16px;
font-weight: 500;
margin-bottom: 16px;
color: var(--color-text-primary);
}
.view-container {
border-radius: 8px;
background: var(--color-body-bg);
overflow: auto;
height: calc(~'100vh - 84px');
}
.ant-menu {
background: var(--color-body-bg) !important;
color: var(--color-text-content) !important;
@ -467,7 +461,6 @@ const changeLanguage = (value) => {
box-sizing: border-box;
flex: 1;
overflow: auto;
height: 100%;
background: var(--color-body-bg);
.setting-item {
@ -479,7 +472,7 @@ const changeLanguage = (value) => {
.title {
color: var(--ant-primary-color);
font-size: 15px;
font-size: 14px;
margin-bottom: 10px;
}
@ -592,7 +585,6 @@ const changeLanguage = (value) => {
.ant-collapse {
background: var(--color-input-hover);
.ant-collapse-content {
background: var(--color-input-hover);
color: var(--color-text-content);

View File

@ -98,7 +98,7 @@ const checkDrop = (e) => {
width: 100%;
overflow-x: hidden;
background: var(--color-body-bg);
height: calc(~'100vh - 106px');
height: calc(~'100vh - 180px');
.del-title {
text-decoration-line: line-through;
text-decoration-color: var(--ant-error-color);

View File

@ -1,103 +1,17 @@
<template>
<div class="user-info">
<!-- <div class="info-container">-->
<!-- <a-result-->
<!-- class="user-info-result"-->
<!-- :title="userInfo.name || $t('feature.settings.account.tips1')"-->
<!-- :sub-title="$t('feature.settings.account.tips2')"-->
<!-- >-->
<!-- <template #icon>-->
<!-- <a-avatar :size="64" v-if="!userInfo.avatar">-->
<!-- <template #icon><UserOutlined /></template>-->
<!-- </a-avatar>-->
<!-- <a-avatar :src="userInfo.avatar" :size="64" v-else />-->
<!-- </template>-->
<!-- </a-result>-->
<!-- </div>-->
<div class="settings-container">
<div class="setting-item">
<div class="title">
{{ $t('feature.settings.account.themeColor') }}
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.primaryColor') }}
</div>
<a-input v-model:value="custom.primaryColor" class="value">
<template #prefix>
<div
:style="{
background: custom.primaryColor,
width: '10px',
height: '10px',
}"
></div>
</template>
</a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.errorColor') }}
</div>
<a-input v-model:value="custom.errorColor" class="value">
<template #prefix>
<div
:style="{
background: custom.errorColor,
width: '10px',
height: '10px',
}"
></div>
</template>
</a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.warningColor') }}
</div>
<a-input v-model:value="custom.warningColor" class="value">
<template #prefix>
<div
:style="{
background: custom.warningColor,
width: '10px',
height: '10px',
}"
></div>
</template>
</a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.successColor') }}
</div>
<a-input v-model:value="custom.successColor" class="value">
<template #prefix>
<div
:style="{
background: custom.successColor,
width: '10px',
height: '10px',
}"
></div>
</template>
</a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.infoColor') }}
</div>
<a-input v-model:value="custom.infoColor" class="value">
<template #prefix>
<div
:style="{
background: custom.infoColor,
width: '10px',
height: '10px',
}"
></div>
</template>
</a-input>
<a-radio-group @change="changeTheme" v-model:value="theme" button-style="solid">
<a-radio-button value="SPRING">{{ $t('feature.settings.account.spring') }}</a-radio-button>
<a-radio-button value="SUMMER">{{ $t('feature.settings.account.summer') }}</a-radio-button>
<a-radio-button value="AUTUMN">{{ $t('feature.settings.account.autumn') }}</a-radio-button>
<a-radio-button value="WINTER">{{ $t('feature.settings.account.winter') }}</a-radio-button>
</a-radio-group>
</div>
</div>
<div class="setting-item">
@ -110,34 +24,33 @@
</div>
<a-input v-model:value="custom.placeholder" class="value"></a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.name') }}
</div>
<a-input v-model:value="custom.username" class="value"></a-input>
</div>
<div class="settings-item-li">
<div class="label">
{{ $t('feature.settings.account.logo') }}
</div>
<div class="img-container">
<img class="custom-img" :src="custom.logo" />
<a-button @click="changeLogo" size="small" type="link">
<a-button class="btn" @click="changeLogo" shape="round" size="small" type="primary">
{{ $t('feature.settings.account.replace') }}
</a-button>
</div>
</div>
</div>
<!-- <div class="footer-btn">-->
<!-- <a-button @click="reset" type="danger">-->
<!-- {{ $t('feature.settings.account.reset') }}-->
<!-- </a-button>-->
<!-- </div>-->
</div>
</div>
</template>
<script setup>
import { reactive, ref, toRefs, watch } from 'vue';
import { reactive, toRefs, watch, ref } from 'vue';
import debounce from 'lodash.debounce';
import localConfig from '@/confOp';
import service from '../../assets/service';
import * as Themes from '@/assets/constans';
const { ipcRenderer } = window.require('electron');
const state = reactive({
@ -146,14 +59,10 @@ const state = reactive({
const { perf } = localConfig.getConfig();
const theme = ref(perf.custom.theme);
state.custom = perf.custom || {};
const userInfo = ref(window.rubick.dbStorage.getItem('rubick-user-info'));
// service.getUserInfo({ openId: userInfo.value.openId }).then((res) => {
// userInfo.value = res;
// });
const setConfig = debounce(() => {
localConfig.setConfig(
JSON.parse(
@ -180,6 +89,13 @@ const changeLogo = () => {
state.custom.logo = `file://${logoPath}`;
};
const changeTheme = () => {
state.custom = {
...state.custom,
...Themes[theme.value],
};
};
// const reset = () => {
// Modal.warning({
// title: '',
@ -194,11 +110,17 @@ const changeLogo = () => {
</script>
<style lang="less">
.settings-container {
margin-top: 18px;
.ant-radio-button-wrapper {
background: var(--color-body-bg);
color: var(--color-text-content);
}
.user-info-result {
padding: 0;
.theme-preview {
width: 20px;
height: 20px;
border-radius: 100%;
}
&.ant-result {
padding: 24px;
}
@ -214,6 +136,10 @@ const changeLogo = () => {
}
.img-container {
width: 300px;
.btn {
margin-left: 10px;
font-size: 12px;
}
}
.custom-img {
width: 60px;

View File

@ -77,7 +77,6 @@ watch([visible], () => {
width: 100%;
overflow-x: hidden;
background: var(--color-body-bg);
height: calc(~'100vh - 46px');
:deep(.ant-result-title) {
color: var(--color-text-primary);
}

View File

@ -1,13 +1,22 @@
const path = require("path");
const path = require('path');
module.exports = {
css: { // 配置css模块
loaderOptions: { // 向预处理器 Loader 传递配置选项
less: { // 配置less其他样式解析用法一致
javascriptEnabled: true // 设置为true
}
}
css: {
// 配置css模块
loaderOptions: {
// 向预处理器 Loader 传递配置选项
less: {
// 配置less其他样式解析用法一致
javascriptEnabled: true, // 设置为true
},
},
},
outputDir: path.join(__dirname, '../public/feature'),
publicPath: process.env.NODE_ENV === 'production' ? '' : '/',
chainWebpack: (config) => {
// 查看打包文件体积大小
config
.plugin('webpack-bundle-analyzer')
.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin);
},
outputDir: path.join(__dirname, "../public/feature"),
publicPath: process.env.NODE_ENV === "production" ? "" : "/",
};

View File

@ -968,6 +968,11 @@
resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32"
integrity sha512-ej5oVy6lykXsvieQtqZxCOaLT+xD4+QNarq78cIYISHmZXshCvROLudpQN3lfL8G0NL7plMSSK+zlyvCaIJ4Iw==
"@discoveryjs/json-ext@0.5.7":
version "0.5.7"
resolved "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
"@hapi/address@2.x.x":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@ -1009,6 +1014,44 @@
cssnano-preset-default "^4.0.0"
postcss "^7.0.0"
"@intlify/core-base@9.2.2":
version "9.2.2"
resolved "https://registry.npmmirror.com/@intlify/core-base/-/core-base-9.2.2.tgz#5353369b05cc9fe35cab95fe20afeb8a4481f939"
integrity sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==
dependencies:
"@intlify/devtools-if" "9.2.2"
"@intlify/message-compiler" "9.2.2"
"@intlify/shared" "9.2.2"
"@intlify/vue-devtools" "9.2.2"
"@intlify/devtools-if@9.2.2":
version "9.2.2"
resolved "https://registry.npmmirror.com/@intlify/devtools-if/-/devtools-if-9.2.2.tgz#b13d9ac4b4e2fe6d2e7daa556517a8061fe8bd39"
integrity sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==
dependencies:
"@intlify/shared" "9.2.2"
"@intlify/message-compiler@9.2.2":
version "9.2.2"
resolved "https://registry.npmmirror.com/@intlify/message-compiler/-/message-compiler-9.2.2.tgz#e42ab6939b8ae5b3d21faf6a44045667a18bba1c"
integrity sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==
dependencies:
"@intlify/shared" "9.2.2"
source-map "0.6.1"
"@intlify/shared@9.2.2":
version "9.2.2"
resolved "https://registry.npmmirror.com/@intlify/shared/-/shared-9.2.2.tgz#5011be9ca2b4ab86f8660739286e2707f9abb4a5"
integrity sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==
"@intlify/vue-devtools@9.2.2":
version "9.2.2"
resolved "https://registry.npmmirror.com/@intlify/vue-devtools/-/vue-devtools-9.2.2.tgz#b95701556daf7ebb3a2d45aa3ae9e6415aed8317"
integrity sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==
dependencies:
"@intlify/core-base" "9.2.2"
"@intlify/shared" "9.2.2"
"@jridgewell/gen-mapping@^0.1.0":
version "0.1.1"
resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996"
@ -1090,6 +1133,11 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@polka/url@^1.0.0-next.20":
version "1.0.0-next.23"
resolved "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.23.tgz#498e41218ab3b6a1419c735e5c6ae2c5ed609b6c"
integrity sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==
"@simonwep/pickr@~1.8.0":
version "1.8.2"
resolved "https://registry.yarnpkg.com/@simonwep/pickr/-/pickr-1.8.2.tgz#96dc86675940d7cad63d69c22083dd1cbb9797cb"
@ -1720,6 +1768,11 @@
resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.1.4.tgz#b4aec2f4b4599e11ba774a50c67fa378c9824e53"
integrity sha512-IiA0SvDrJEgXvVxjNkHPFfDx6SXw0b/TUkqMcDZWNg9fnCAHbTpoo59YfJ9QLFkwa3raau5vSlRVzMSLDnfdtQ==
"@vue/devtools-api@^6.2.1":
version "6.5.0"
resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.5.0.tgz#98b99425edee70b4c992692628fa1ea2c1e57d07"
integrity sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==
"@vue/eslint-config-prettier@^6.0.0":
version "6.0.0"
resolved "https://registry.yarnpkg.com/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz#ad5912b308f4ae468458e02a2b05db0b9d246700"
@ -1981,6 +2034,11 @@ acorn-walk@^7.1.1:
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
acorn-walk@^8.0.0:
version "8.2.0"
resolved "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
acorn@^6.4.1:
version "6.4.2"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6"
@ -1991,6 +2049,11 @@ acorn@^7.1.1, acorn@^7.4.0:
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
acorn@^8.0.4:
version "8.10.0"
resolved "https://registry.npmmirror.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
address@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/address/-/address-1.2.0.tgz#d352a62c92fee90f89a693eccd2a8b2139ab02d9"
@ -2334,6 +2397,13 @@ babel-plugin-dynamic-import-node@^2.3.3:
dependencies:
object.assign "^4.1.0"
babel-plugin-import@^1.13.8:
version "1.13.8"
resolved "https://registry.npmmirror.com/babel-plugin-import/-/babel-plugin-import-1.13.8.tgz#782c517f6bbf2de3b1f75aaafd6d20a491c4878c"
integrity sha512-36babpjra5m3gca44V6tSTomeBlPA7cHUynrE2WiQIm3rEGD9xy28MKsx5IdO45EbnpJY7Jrgd00C6Dwt/l/2Q==
dependencies:
"@babel/helper-module-imports" "^7.0.0"
babel-plugin-polyfill-corejs2@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz#440f1b70ccfaabc6b676d196239b138f8a2cfba5"
@ -3046,6 +3116,11 @@ commander@^2.12.1, commander@^2.18.0, commander@^2.20.0:
resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
commander@^7.2.0:
version "7.2.0"
resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
commander@~2.19.0:
version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
@ -3802,7 +3877,7 @@ dotenv@^8.2.0:
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
duplexer@^0.1.1:
duplexer@^0.1.1, duplexer@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6"
integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==
@ -3988,6 +4063,11 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
escape-string-regexp@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
eslint-config-prettier@^6.0.0:
version "6.15.0"
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz#7f93f6cb7d45a92f1537a70ecc06366e1ac6fed9"
@ -4861,6 +4941,13 @@ gzip-size@^5.0.0:
duplexer "^0.1.1"
pify "^4.0.1"
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==
dependencies:
duplexer "^0.1.2"
handle-thing@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
@ -5615,6 +5702,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4:
dependencies:
isobject "^3.0.1"
is-plain-object@^5.0.0:
version "5.0.0"
resolved "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
is-regex@^1.0.4, is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@ -5982,7 +6074,7 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
lodash-es@^4.17.15:
lodash-es@^4.17.15, lodash-es@^4.17.21:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
@ -5997,6 +6089,21 @@ lodash.defaultsdeep@^4.6.1:
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
lodash.escape@^4.0.1:
version "4.0.1"
resolved "https://registry.npmmirror.com/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98"
integrity sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==
lodash.flatten@^4.4.0:
version "4.4.0"
resolved "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==
lodash.invokemap@^4.6.0:
version "4.6.0"
resolved "https://registry.npmmirror.com/lodash.invokemap/-/lodash.invokemap-4.6.0.tgz#1748cda5d8b0ef8369c4eb3ec54c21feba1f2d62"
integrity sha512-CfkycNtMqgUlfjfdh2BhKO/ZXrP8ePOX5lEU/g0R3ItJcnuxWDwokMGKx1hWcfOikmyOVx6X9IwWnDGlgKl61w==
lodash.kebabcase@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
@ -6012,6 +6119,11 @@ lodash.memoize@^4.1.2:
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
lodash.pullall@^4.2.0:
version "4.2.0"
resolved "https://registry.npmmirror.com/lodash.pullall/-/lodash.pullall-4.2.0.tgz#9d98b8518b7c965b0fae4099bd9fb7df8bbf38ba"
integrity sha512-VhqxBKH0ZxPpLhiu68YD1KnHmbhQJQctcipvmFnqIBDYzcIHzf3Zpu0tpeOKtR4x76p9yohc506eGdOjTmyIBg==
lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
@ -6027,6 +6139,11 @@ lodash.uniq@^4.5.0:
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
lodash.uniqby@^4.7.0:
version "4.7.0"
resolved "https://registry.npmmirror.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302"
integrity sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==
lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.3:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
@ -6051,6 +6168,11 @@ loose-envify@^1.0.0:
dependencies:
js-tokens "^3.0.0 || ^4.0.0"
lottie-web@5.12.2:
version "5.12.2"
resolved "https://registry.npmmirror.com/lottie-web/-/lottie-web-5.12.2.tgz#579ca9fe6d3fd9e352571edd3c0be162492f68e5"
integrity sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==
lower-case@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
@ -6356,6 +6478,11 @@ move-concurrently@^1.0.1:
rimraf "^2.5.4"
run-queue "^1.0.3"
mrmime@^1.0.0:
version "1.0.1"
resolved "https://registry.npmmirror.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27"
integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@ -6720,7 +6847,7 @@ open@^6.3.0:
dependencies:
is-wsl "^1.1.0"
opener@^1.5.1:
opener@^1.5.1, opener@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==
@ -8170,6 +8297,15 @@ simple-swizzle@^0.2.2:
dependencies:
is-arrayish "^0.3.1"
sirv@^2.0.3:
version "2.0.3"
resolved "https://registry.npmmirror.com/sirv/-/sirv-2.0.3.tgz#ca5868b87205a74bef62a469ed0296abceccd446"
integrity sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==
dependencies:
"@polka/url" "^1.0.0-next.20"
mrmime "^1.0.0"
totalist "^3.0.0"
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
@ -8285,16 +8421,16 @@ source-map-url@^0.4.0:
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56"
integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==
source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.5.6:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
@ -8771,6 +8907,11 @@ toposort@^1.0.0:
resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
totalist@^3.0.0:
version "3.0.1"
resolved "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz#ba3a3d600c915b1a97872348f79c127475f6acf8"
integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==
tough-cookie@~2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
@ -9117,11 +9258,6 @@ uuid@^8.3.2:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
uuid@^9.0.0:
version "9.0.0"
resolved "https://registry.npmmirror.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
@ -9177,6 +9313,16 @@ vue-hot-reload-api@^2.3.0:
resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz#532955cc1eb208a3d990b3a9f9a70574657e08f2"
integrity sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==
vue-i18n@9.2.2:
version "9.2.2"
resolved "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-9.2.2.tgz#aeb49d9424923c77e0d6441e3f21dafcecd0e666"
integrity sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==
dependencies:
"@intlify/core-base" "9.2.2"
"@intlify/shared" "9.2.2"
"@intlify/vue-devtools" "9.2.2"
"@vue/devtools-api" "^6.2.1"
"vue-loader-v16@npm:vue-loader@^16.1.0":
version "16.8.3"
resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-16.8.3.tgz#d43e675def5ba9345d6c7f05914c13d861997087"
@ -9224,6 +9370,19 @@ vue-types@^3.0.0:
dependencies:
is-plain-object "3.0.1"
vue3-carousel@^0.3.1:
version "0.3.1"
resolved "https://registry.npmmirror.com/vue3-carousel/-/vue3-carousel-0.3.1.tgz#d001be7dea416dc2f4e66afc4d56af66696dc117"
integrity sha512-86vUkNPBzL2PVuR9w6hUsI90ccFjLp+K8cSFpRTISf+SjUQY3fMHc5CFF5MUL62v1xYYm27zEBmQupO9VQx9Kw==
vue3-lottie@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/vue3-lottie/-/vue3-lottie-3.1.0.tgz#39e2a595a83a7401f3308dfc923b28b0bb91a214"
integrity sha512-dS6/cjEuAoN/CWYqthPjGVVaeW5jRVB1yGEcFQbBcbDfCeMlVhC7pzn0Qatdz7gasOUIvZcJCmhfUe681GwhSg==
dependencies:
lodash-es "^4.17.21"
lottie-web "5.12.2"
vue@3.2.45:
version "3.2.45"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.45.tgz#94a116784447eb7dbd892167784619fef379b3c8"
@ -9300,6 +9459,29 @@ webpack-bundle-analyzer@^3.8.0:
opener "^1.5.1"
ws "^6.0.0"
webpack-bundle-analyzer@^4.9.1:
version "4.9.1"
resolved "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.1.tgz#d00bbf3f17500c10985084f22f1a2bf45cb2f09d"
integrity sha512-jnd6EoYrf9yMxCyYDPj8eutJvtjQNp8PHmni/e/ulydHBWhT5J3menXt3HEkScsu9YqMAcG4CfFjs3rj5pVU1w==
dependencies:
"@discoveryjs/json-ext" "0.5.7"
acorn "^8.0.4"
acorn-walk "^8.0.0"
commander "^7.2.0"
escape-string-regexp "^4.0.0"
gzip-size "^6.0.0"
is-plain-object "^5.0.0"
lodash.debounce "^4.0.8"
lodash.escape "^4.0.1"
lodash.flatten "^4.4.0"
lodash.invokemap "^4.6.0"
lodash.pullall "^4.2.0"
lodash.uniqby "^4.7.0"
opener "^1.5.2"
picocolors "^1.0.0"
sirv "^2.0.3"
ws "^7.3.1"
webpack-chain@^6.4.0:
version "6.5.1"
resolved "https://registry.yarnpkg.com/webpack-chain/-/webpack-chain-6.5.1.tgz#4f27284cbbb637e3c8fbdef43eef588d4d861206"
@ -9519,6 +9701,11 @@ ws@^6.0.0, ws@^6.2.1:
dependencies:
async-limiter "~1.0.0"
ws@^7.3.1:
version "7.5.9"
resolved "https://registry.npmmirror.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
xtend@^4.0.0, xtend@~4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.worker{width:100%;overflow-x:hidden;box-sizing:border-box}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
.worker{width:100%;overflow-x:hidden;box-sizing:border-box}

View File

@ -0,0 +1 @@
::-webkit-scrollbar{width:0}.panel-item{margin-bottom:17px}.panel-item .download-plugin-btn{color:var(--ant-primary-color)}.panel-item .title{margin-bottom:30px;color:var(--color-text-primary)}.panel-item .ellipse{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;color:var(--color-text-content)}.panel-item .ellipse.desc{color:var(--color-text-desc)}.panel-item:after{content:" ";display:block;width:100%;height:1px;border-bottom:1px solid var(--color-border-light);transform:scaleY(.5)}.panel-item .ant-list-item{display:flex!important}.panel-item:last-child:after{border-bottom:none}.plugin-info{width:100%}.plugin-info .ant-drawer-content-wrapper{box-shadow:none!important}.plugin-info .ant-drawer-content-wrapper .ant-drawer-content{background:var(--color-body-bg)}.plugin-info .ant-drawer-content-wrapper .ant-drawer-header{background:var(--color-body-bg);border-bottom:1px solid var(--color-border-light)}.dark .plugin-title-info .back-icon{filter:invert(1) brightness(200%)}.plugin-title-info,.plugin-title-info .info{display:flex;align-items:flex-start;width:100%}.plugin-title-info .info .plugin-icon{width:40px;height:40px;margin-right:20px}.plugin-title-info .info .plugin-desc{flex:1;display:flex;align-items:center;justify-content:space-between}.plugin-title-info .info .plugin-desc .title{font-size:18px;font-weight:700;color:var(--color-text-primary)}.plugin-title-info .info .plugin-desc .desc{font-size:12px;font-weight:400;color:var(--color-text-desc)}.error-content.ant-result{padding:0}.home-page-container{min-height:200px}.home-page-container *{color:var(--color-text-content)}.home-page-container img{width:100%}

View File

@ -0,0 +1 @@
.result{width:100%;overflow-x:hidden;box-sizing:border-box}.result .error-content{padding-top:100px}

View File

@ -0,0 +1 @@
.system{width:100%;overflow-x:hidden;box-sizing:border-box}

View File

@ -0,0 +1 @@
.dev[data-v-6fb0031c]{box-sizing:border-box;width:100%;overflow-x:hidden;height:calc(100vh - 34px)}.dev .view-title[data-v-6fb0031c]{font-size:16px;font-weight:500;margin-bottom:16px;color:var(--color-text-primary)}.dev .view-container[data-v-6fb0031c]{padding:10px;box-sizing:border-box;border-radius:8px;background:var(--color-body-bg);overflow:auto;height:calc(100vh - 84px)}.dev[data-v-6fb0031c] label{color:var(--color-text-content)}.dev[data-v-6fb0031c] .ant-input{background:var(--color-input-hover);color:var(--color-text-content)}

View File

@ -0,0 +1 @@
.account[data-v-2bc021e6]{box-sizing:border-box;width:100%;overflow-x:hidden;background:var(--color-body-bg);height:calc(100vh - 46px)}.account[data-v-2bc021e6] .ant-result-title{color:var(--color-text-primary)}.account[data-v-2bc021e6] .ant-result-subtitle{color:var(--color-text-desc)}

View File

@ -0,0 +1 @@
:root{--vc-clr-primary:#000;--vc-clr-secondary:rgba(9,15,32,0.4980392156862745);--vc-clr-white:#fff;--vc-icn-width:1.2em;--vc-nav-width:30px;--vc-nav-height:30px;--vc-nav-border-radius:0;--vc-nav-color:var(--vc-clr-primary);--vc-nav-color-hover:var(--vc-clr-secondary);--vc-nav-background:transparent;--vc-pgn-width:12px;--vc-pgn-height:4px;--vc-pgn-margin:4px;--vc-pgn-border-radius:0;--vc-pgn-background-color:var(--vc-clr-secondary);--vc-pgn-active-color:var(--vc-clr-primary)}.carousel__next,.carousel__prev{background:var(--vc-nav-background);border-radius:var(--vc-nav-border-radius);width:var(--vc-nav-width);height:var(--vc-nav-height);text-align:center;font-size:var(--vc-nav-height);padding:0;color:var(--vc-nav-color);display:flex;justify-content:center;align-items:center;position:absolute;border:0;cursor:pointer;margin:0 10px;top:50%;transform:translateY(-50%)}.carousel__next:hover,.carousel__prev:hover{color:var(--vc-nav-color-hover)}.carousel__next--disabled,.carousel__prev--disabled{cursor:not-allowed;opacity:.5}.carousel__prev{left:0}.carousel__next{right:0}.carousel--rtl .carousel__prev{left:auto;right:0}.carousel--rtl .carousel__next{right:auto;left:0}.carousel{position:relative;text-align:center;box-sizing:border-box;touch-action:pan-y;-ms-scroll-chaining:none;overscroll-behavior:none}.carousel.is-dragging{touch-action:none}.carousel *{box-sizing:border-box}.carousel__track{display:flex;padding:0!important;position:relative}.carousel__viewport{overflow:hidden}.carousel__sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.carousel__icon{width:var(--vc-icn-width);height:var(--vc-icn-width);fill:currentColor}.carousel__pagination{display:flex;justify-content:center;list-style:none;line-height:0;margin:10px 0 0}.carousel__pagination-button{display:block;border:0;margin:0;cursor:pointer;padding:var(--vc-pgn-margin);background:transparent}.carousel__pagination-button:after{display:block;content:"";width:var(--vc-pgn-width);height:var(--vc-pgn-height);border-radius:var(--vc-pgn-border-radius);background-color:var(--vc-pgn-background-color)}.carousel__pagination-button--active:after,.carousel__pagination-button:hover:after{background-color:var(--vc-pgn-active-color)}.carousel__slide{scroll-snap-stop:auto;flex-shrink:0;margin:0;position:relative;display:flex;justify-content:center;align-items:center;transform:translateZ(0)}.finder{position:relative;width:100%;overflow-x:hidden;box-sizing:border-box}.finder::-webkit-scrollbar{width:0}.finder .ant-divider-horizontal{margin:17px 0}.carousel__item{cursor:pointer;min-height:180px;width:100%;background-color:var(--vc-clr-primary);color:var(--vc-clr-white);font-size:20px;border-radius:8px;display:flex;justify-content:center;align-items:center}.carousel__track{margin-bottom:0}.carousel__slide{padding-right:6px}.carousel__slide:last-child{padding-left:6px}.carousel__next,.carousel__prev{box-sizing:content-box;border:5px solid #fff}

View File

@ -0,0 +1 @@
.installed[data-v-6aedeb48]{box-sizing:border-box;width:100%;overflow:hidden;height:calc(100vh - 34px)}.installed .view-title[data-v-6aedeb48]{font-size:16px;font-weight:500;margin-bottom:16px;color:var(--color-text-primary)}.installed .view-container[data-v-6aedeb48]{border-radius:8px;background:var(--color-body-bg);overflow:auto;height:calc(100vh - 84px)}.installed[data-v-6aedeb48] .ant-result-title{color:var(--color-text-primary)}.installed[data-v-6aedeb48] .ant-result-subtitle{color:var(--color-text-desc)}.installed .keyword-tag[data-v-6aedeb48]{font-size:13px;margin:4px}.installed .container[data-v-6aedeb48]{box-sizing:border-box;width:100%;overflow:hidden;background:#f3efef;height:100%;display:flex}.installed .installed-list[data-v-6aedeb48]{width:38%;background:var(--color-body-bg);height:100%;padding:10px 0;border-right:1px solid var(--color-border-light);overflow:auto}.installed .installed-list .item[data-v-6aedeb48]{padding:10px 20px;display:flex;align-items:center;color:var(--color-text-content);border-bottom:1px dashed var(--color-border-light);cursor:pointer}.installed .installed-list .item[data-v-6aedeb48]:last-child{border-bottom:none}.installed .installed-list .item img[data-v-6aedeb48]{width:34px;height:34px;margin-right:12px}.installed .installed-list .item .desc[data-v-6aedeb48]{font-size:12px;color:var(--color-text-desc);display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden;-webkit-line-clamp:2;text-overflow:ellipsis}.installed .installed-list .item.active[data-v-6aedeb48]{color:var(--ant-primary-color);background:var(--color-list-hover)}.installed .plugin-detail[data-v-6aedeb48]{padding:20px 20px 0 20px;box-sizing:border-box;width:62%;height:100%;background:var(--color-body-bg)}.installed .plugin-detail .plugin-top[data-v-6aedeb48]{display:flex;align-items:flex-start;justify-content:space-between;border-bottom:1px solid #eee;padding-bottom:12px;margin-bottom:12px}.installed .plugin-detail .plugin-top .title[data-v-6aedeb48]{font-size:16px;display:flex;align-items:center;color:var(--color-text-primary)}.installed .plugin-detail .plugin-top .title .ant-tag[data-v-6aedeb48]{background:var(--color-input-hover);border:1px solid var(--color-border-light);color:var(--color-text-content);margin-left:8px}.installed .plugin-detail .plugin-top .desc[data-v-6aedeb48]{font-size:13px;color:var(--color-text-desc)}.installed .plugin-detail .detail-container[data-v-6aedeb48],.installed .plugin-detail .feature-container[data-v-6aedeb48]{height:380px;overflow:auto;color:var(--color-text-content)}.installed .plugin-detail .detail-container img[data-v-6aedeb48],.installed .plugin-detail .feature-container img[data-v-6aedeb48]{width:100%}.installed .plugin-detail .desc-item[data-v-6aedeb48]{padding:10px 0;color:var(--color-text-content)}.installed .plugin-detail .desc-item .ant-tag[data-v-6aedeb48]{margin-top:6px}.installed .plugin-detail .desc-item .ant-tag.executable[data-v-6aedeb48]{cursor:pointer;color:var(--ant-info-color)}.installed .plugin-detail .desc-item .ant-tag.executable[data-v-6aedeb48]:hover{transform:translateY(-2px)}.installed .plugin-detail .desc-item .desc-title[data-v-6aedeb48]{display:flex;align-items:center;justify-content:space-between}.installed .plugin-detail .desc-item .desc-info[data-v-6aedeb48]{color:var(--color-text-desc)}

View File

@ -0,0 +1 @@
.system{width:100%;overflow-x:hidden;box-sizing:border-box}

View File

@ -0,0 +1 @@
.system{width:100%;overflow-x:hidden;box-sizing:border-box}

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -1 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>feature</title><link href="css/app.4e3502cb.css" rel="preload" as="style"><link href="css/chunk-vendors.7f9dcb72.css" rel="preload" as="style"><link href="js/app.5fe607e9.js" rel="preload" as="script"><link href="js/chunk-vendors.73a23bae.js" rel="preload" as="script"><link href="css/chunk-vendors.7f9dcb72.css" rel="stylesheet"><link href="css/app.4e3502cb.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but feature doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.73a23bae.js"></script><script src="js/app.5fe607e9.js"></script></body></html>
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="favicon.ico"><title>feature</title><link href="css/chunk-111de227.2450c00b.css" rel="prefetch"><link href="css/chunk-15a45f31.f40ad637.css" rel="prefetch"><link href="css/chunk-1af68a6e.2450c00b.css" rel="prefetch"><link href="css/chunk-2ab2dd18.830bb4d6.css" rel="prefetch"><link href="css/chunk-322da6db.cb08d5f6.css" rel="prefetch"><link href="css/chunk-596c6184.9be2495c.css" rel="prefetch"><link href="css/chunk-82ca94ea.b470edf6.css" rel="prefetch"><link href="css/chunk-a1c10494.a43ed20b.css" rel="prefetch"><link href="css/chunk-a2b32e48.67429700.css" rel="prefetch"><link href="css/chunk-ca86664e.dd10748e.css" rel="prefetch"><link href="css/chunk-cf61e458.9be2495c.css" rel="prefetch"><link href="css/chunk-f69c766e.9be2495c.css" rel="prefetch"><link href="js/chunk-111de227.0ad80221.js" rel="prefetch"><link href="js/chunk-15a45f31.36dccd15.js" rel="prefetch"><link href="js/chunk-1af68a6e.c1d36c0f.js" rel="prefetch"><link href="js/chunk-2ab2dd18.69b0e89c.js" rel="prefetch"><link href="js/chunk-322da6db.f9b18700.js" rel="prefetch"><link href="js/chunk-596c6184.83021bf7.js" rel="prefetch"><link href="js/chunk-82ca94ea.71d77dba.js" rel="prefetch"><link href="js/chunk-a1c10494.7497b556.js" rel="prefetch"><link href="js/chunk-a2b32e48.f483e0e9.js" rel="prefetch"><link href="js/chunk-ca86664e.b3dc97d9.js" rel="prefetch"><link href="js/chunk-cf61e458.d98b4577.js" rel="prefetch"><link href="js/chunk-f69c766e.7fe57a21.js" rel="prefetch"><link href="css/app.d8360197.css" rel="preload" as="style"><link href="css/chunk-vendors.7f9dcb72.css" rel="preload" as="style"><link href="js/app.0d80f1c1.js" rel="preload" as="script"><link href="js/chunk-vendors.31673d31.js" rel="preload" as="script"><link href="css/chunk-vendors.7f9dcb72.css" rel="stylesheet"><link href="css/app.d8360197.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but feature doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="js/chunk-vendors.31673d31.js"></script><script src="js/app.0d80f1c1.js"></script></body></html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-111de227"],{3271:function(t,e,n){},be50:function(t,e,n){"use strict";n.r(e);var c=n("c7eb"),a=n("1da1"),r=(n("d81d"),n("d3b7"),n("159b"),n("b0c0"),n("7a23")),o=n("0eaf"),u=n("be89"),s=n("5502"),b={class:"tools"},i={__name:"tools",setup:function(t){var e=Object(s["b"])(),n=Object(r["j"])((function(){return e.state.totalPlugins})),i=Object(r["Q"])([]);Object(r["D"])(Object(a["a"])(Object(c["a"])().mark((function t(){return Object(c["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return t.next=2,o["a"].getSearchDetail();case 2:i.value=t.sent;case 3:case"end":return t.stop()}}),t)}))));var l=Object(r["j"])((function(){var t=i.value||[];return t.length?t.map((function(t){var e=null;return n.value.forEach((function(n){n.name===t&&(e=n)})),e})):[]}));return function(t,e){return Object(r["L"])(),Object(r["n"])("div",b,[Object(r["bb"])(l)&&Object(r["bb"])(l).length?(Object(r["L"])(),Object(r["l"])(u["a"],{key:0,onDownloadSuccess:t.downloadSuccess,title:t.$t("feature.market.searchTool"),list:Object(r["bb"])(l)},null,8,["onDownloadSuccess","title","list"])):Object(r["m"])("",!0)])}}};n("f1e9");const l=i;e["default"]=l},d81d:function(t,e,n){"use strict";var c=n("23e7"),a=n("b727").map,r=n("1dde"),o=r("map");c({target:"Array",proto:!0,forced:!o},{map:function(t){return a(this,t,arguments.length>1?arguments[1]:void 0)}})},f1e9:function(t,e,n){"use strict";n("3271")}}]);
//# sourceMappingURL=chunk-111de227.0ad80221.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/market/components/tools.vue","webpack:///./src/views/market/components/tools.vue?bbe3","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./src/views/market/components/tools.vue?df38"],"names":["store","useStore","totalPlugins","computed","state","data","ref","onBeforeMount","request","getSearchDetail","value","tools","defaultData","length","map","plugin","searchInfo","forEach","t","name","__exports__","$","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","callbackfn","this","arguments","undefined"],"mappings":"0TAiBA,IAAMA,EAAQC,iBACRC,EAAeC,gBAAS,kBAAMH,EAAMI,MAAMF,gBAE1CG,EAAOC,eAAI,IAEjBC,eAAa,sCAAC,4GACOC,OAAQC,kBADf,OACZJ,EAAKK,MADO,mDAId,IAAMC,EAAQR,gBAAS,WACrB,IAAMS,EAAcP,EAAKK,OAAS,GAClC,OAAKE,EAAYC,OACVD,EAAYE,KAAI,SAACC,GACtB,IAAIC,EAAa,KAMjB,OALAd,EAAaQ,MAAMO,SAAQ,SAACC,GACtBA,EAAEC,OAASJ,IACbC,EAAaE,MAGVF,KARuB,M,0VCvBlC,MAAMI,EAAc,EAEL,gB,kCCNf,IAAIC,EAAI,EAAQ,QACZC,EAAO,EAAQ,QAAgCR,IAC/CS,EAA+B,EAAQ,QAEvCC,EAAsBD,EAA6B,OAKvDF,EAAE,CAAEI,OAAQ,QAASC,OAAO,EAAMC,QAASH,GAAuB,CAChEV,IAAK,SAAac,GAChB,OAAON,EAAKO,KAAMD,EAAYE,UAAUjB,OAAS,EAAIiB,UAAU,QAAKC,O,kCCZxE","file":"js/chunk-111de227.0ad80221.js","sourcesContent":["<template>\n <div class=\"tools\">\n <PluginList\n v-if=\"tools && !!tools.length\"\n @downloadSuccess=\"downloadSuccess\"\n :title=\"$t('feature.market.searchTool')\"\n :list=\"tools\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onBeforeMount } from 'vue';\nimport request from '../../../assets/request/index';\nimport PluginList from './plugin-list.vue';\n\nimport { useStore } from 'vuex';\nconst store = useStore();\nconst totalPlugins = computed(() => store.state.totalPlugins);\n\nconst data = ref([]);\n\nonBeforeMount(async () => {\n data.value = await request.getSearchDetail();\n});\n\nconst tools = computed(() => {\n const defaultData = data.value || [];\n if (!defaultData.length) return [];\n return defaultData.map((plugin) => {\n let searchInfo = null;\n totalPlugins.value.forEach((t) => {\n if (t.name === plugin) {\n searchInfo = t;\n }\n });\n return searchInfo;\n });\n});\n</script>\n\n<style lang=\"less\">\n.worker {\n width: 100%;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n</style>\n","import script from \"./tools.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./tools.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./tools.vue?vue&type=style&index=0&id=6bc47f78&lang=less\"\n\nconst __exports__ = script;\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./tools.vue?vue&type=style&index=0&id=6bc47f78&lang=less\""],"sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1af68a6e"],{5458:function(e,t,n){"use strict";n.r(t);var c=n("c7eb"),a=n("1da1"),r=(n("d81d"),n("d3b7"),n("159b"),n("b0c0"),n("7a23")),u=n("0eaf"),o=n("be89"),b=n("5502"),i={class:"worker"},s={__name:"worker",setup:function(e){var t=Object(b["b"])(),n=Object(r["j"])((function(){return t.state.totalPlugins})),s=Object(r["Q"])([]);Object(r["D"])(Object(a["a"])(Object(c["a"])().mark((function e(){return Object(c["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,u["a"].getWorkerDetail();case 2:s.value=e.sent;case 3:case"end":return e.stop()}}),e)}))));var l=Object(r["j"])((function(){var e=s.value||[];return e.length?e.map((function(e){var t=null;return n.value.forEach((function(n){n.name===e&&(t=n)})),t})):[]}));return function(e,t){return Object(r["L"])(),Object(r["n"])("div",i,[Object(r["bb"])(l)&&Object(r["bb"])(l).length?(Object(r["L"])(),Object(r["l"])(o["a"],{key:0,onDownloadSuccess:e.downloadSuccess,title:e.$t("feature.market.efficiency"),list:Object(r["bb"])(l)},null,8,["onDownloadSuccess","title","list"])):Object(r["m"])("",!0)])}}};n("b63b");const l=s;t["default"]=l},"6a1f":function(e,t,n){},b63b:function(e,t,n){"use strict";n("6a1f")},d81d:function(e,t,n){"use strict";var c=n("23e7"),a=n("b727").map,r=n("1dde"),u=r("map");c({target:"Array",proto:!0,forced:!u},{map:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}})}}]);
//# sourceMappingURL=chunk-1af68a6e.c1d36c0f.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/market/components/worker.vue","webpack:///./src/views/market/components/worker.vue?ab7e","webpack:///./src/views/market/components/worker.vue?b4e5","webpack:///./node_modules/core-js/modules/es.array.map.js"],"names":["store","useStore","totalPlugins","computed","state","data","ref","onBeforeMount","request","getWorkerDetail","value","system","defaultData","length","map","plugin","searchInfo","forEach","t","name","__exports__","$","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","callbackfn","this","arguments","undefined"],"mappings":"qSAiBA,IAAMA,EAAQC,iBACRC,EAAeC,gBAAS,kBAAMH,EAAMI,MAAMF,gBAE1CG,EAAOC,eAAI,IAEjBC,eAAa,sCAAC,4GACOC,OAAQC,kBADf,OACZJ,EAAKK,MADO,mDAId,IAAMC,EAASR,gBAAS,WACtB,IAAMS,EAAcP,EAAKK,OAAS,GAClC,OAAKE,EAAYC,OACVD,EAAYE,KAAI,SAACC,GACtB,IAAIC,EAAa,KAMjB,OALAd,EAAaQ,MAAMO,SAAQ,SAACC,GACtBA,EAAEC,OAASJ,IACbC,EAAaE,MAGVF,KARuB,M,0VCvBlC,MAAMI,EAAc,EAEL,gB,2DCPf,W,kCCCA,IAAIC,EAAI,EAAQ,QACZC,EAAO,EAAQ,QAAgCR,IAC/CS,EAA+B,EAAQ,QAEvCC,EAAsBD,EAA6B,OAKvDF,EAAE,CAAEI,OAAQ,QAASC,OAAO,EAAMC,QAASH,GAAuB,CAChEV,IAAK,SAAac,GAChB,OAAON,EAAKO,KAAMD,EAAYE,UAAUjB,OAAS,EAAIiB,UAAU,QAAKC","file":"js/chunk-1af68a6e.c1d36c0f.js","sourcesContent":["<template>\n <div class=\"worker\">\n <PluginList\n v-if=\"system && !!system.length\"\n @downloadSuccess=\"downloadSuccess\"\n :title=\"$t('feature.market.efficiency')\"\n :list=\"system\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onBeforeMount } from 'vue';\nimport request from '../../../assets/request/index';\nimport PluginList from './plugin-list.vue';\n\nimport { useStore } from 'vuex';\nconst store = useStore();\nconst totalPlugins = computed(() => store.state.totalPlugins);\n\nconst data = ref([]);\n\nonBeforeMount(async () => {\n data.value = await request.getWorkerDetail();\n});\n\nconst system = computed(() => {\n const defaultData = data.value || [];\n if (!defaultData.length) return [];\n return defaultData.map((plugin) => {\n let searchInfo = null;\n totalPlugins.value.forEach((t) => {\n if (t.name === plugin) {\n searchInfo = t;\n }\n });\n return searchInfo;\n });\n});\n</script>\n\n<style lang=\"less\">\n.worker {\n width: 100%;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n</style>\n","import script from \"./worker.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./worker.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./worker.vue?vue&type=style&index=0&id=81c5c93e&lang=less\"\n\nconst __exports__ = script;\n\nexport default __exports__","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./worker.vue?vue&type=style&index=0&id=81c5c93e&lang=less\"","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-596c6184"],{"10dc":function(e,t,n){"use strict";n.r(t);var c=n("c7eb"),a=n("1da1"),r=(n("d81d"),n("d3b7"),n("159b"),n("b0c0"),n("7a23")),u=n("0eaf"),o=n("be89"),b=n("5502"),s={class:"system"},i={__name:"devlopment",setup:function(e){var t=Object(b["b"])(),n=Object(r["j"])((function(){return t.state.totalPlugins})),i=Object(r["Q"])([]);Object(r["D"])(Object(a["a"])(Object(c["a"])().mark((function e(){return Object(c["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,u["a"].getDevDetail();case 2:i.value=e.sent;case 3:case"end":return e.stop()}}),e)}))));var l=Object(r["j"])((function(){var e=i.value||[];return e.length?e.map((function(e){var t=null;return n.value.forEach((function(n){n.name===e&&(t=n)})),t})):[]}));return function(e,t){return Object(r["L"])(),Object(r["n"])("div",s,[Object(r["bb"])(l)&&Object(r["bb"])(l).length?(Object(r["L"])(),Object(r["l"])(o["a"],{key:0,onDownloadSuccess:e.downloadSuccess,title:e.$t("feature.market.developTool"),list:Object(r["bb"])(l)},null,8,["onDownloadSuccess","title","list"])):Object(r["m"])("",!0)])}}};n("edb3");const l=i;t["default"]=l},b7d6:function(e,t,n){},d81d:function(e,t,n){"use strict";var c=n("23e7"),a=n("b727").map,r=n("1dde"),u=r("map");c({target:"Array",proto:!0,forced:!u},{map:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}})},edb3:function(e,t,n){"use strict";n("b7d6")}}]);
//# sourceMappingURL=chunk-596c6184.83021bf7.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/market/components/devlopment.vue","webpack:///./src/views/market/components/devlopment.vue?c17b","webpack:///./node_modules/core-js/modules/es.array.map.js","webpack:///./src/views/market/components/devlopment.vue?3da4"],"names":["store","useStore","totalPlugins","computed","state","data","ref","onBeforeMount","request","getDevDetail","value","dev","defaultData","length","map","plugin","searchInfo","forEach","t","name","__exports__","$","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","callbackfn","this","arguments","undefined"],"mappings":"2SAiBA,IAAMA,EAAQC,iBACRC,EAAeC,gBAAS,kBAAMH,EAAMI,MAAMF,gBAE1CG,EAAOC,eAAI,IAEjBC,eAAa,sCAAC,4GACOC,OAAQC,eADf,OACZJ,EAAKK,MADO,mDAId,IAAMC,EAAMR,gBAAS,WACnB,IAAMS,EAAcP,EAAKK,OAAS,GAClC,OAAKE,EAAYC,OACVD,EAAYE,KAAI,SAACC,GACtB,IAAIC,EAAa,KAMjB,OALAd,EAAaQ,MAAMO,SAAQ,SAACC,GACtBA,EAAEC,OAASJ,IACbC,EAAaE,MAGVF,KARuB,M,2VCvBlC,MAAMI,EAAc,EAEL,gB,yDCNf,IAAIC,EAAI,EAAQ,QACZC,EAAO,EAAQ,QAAgCR,IAC/CS,EAA+B,EAAQ,QAEvCC,EAAsBD,EAA6B,OAKvDF,EAAE,CAAEI,OAAQ,QAASC,OAAO,EAAMC,QAASH,GAAuB,CAChEV,IAAK,SAAac,GAChB,OAAON,EAAKO,KAAMD,EAAYE,UAAUjB,OAAS,EAAIiB,UAAU,QAAKC,O,kCCZxE","file":"js/chunk-596c6184.83021bf7.js","sourcesContent":["<template>\n <div class=\"system\">\n <PluginList\n v-if=\"dev && !!dev.length\"\n @downloadSuccess=\"downloadSuccess\"\n :title=\"$t('feature.market.developTool')\"\n :list=\"dev\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onBeforeMount } from 'vue';\nimport request from '../../../assets/request/index';\nimport PluginList from './plugin-list.vue';\n\nimport { useStore } from 'vuex';\nconst store = useStore();\nconst totalPlugins = computed(() => store.state.totalPlugins);\n\nconst data = ref([]);\n\nonBeforeMount(async () => {\n data.value = await request.getDevDetail();\n});\n\nconst dev = computed(() => {\n const defaultData = data.value || [];\n if (!defaultData.length) return [];\n return defaultData.map((plugin) => {\n let searchInfo = null;\n totalPlugins.value.forEach((t) => {\n if (t.name === plugin) {\n searchInfo = t;\n }\n });\n return searchInfo;\n });\n});\n</script>\n\n<style lang=\"less\">\n.system {\n width: 100%;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n</style>\n","import script from \"./devlopment.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./devlopment.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./devlopment.vue?vue&type=style&index=0&id=fbcc4bb8&lang=less\"\n\nconst __exports__ = script;\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./devlopment.vue?vue&type=style&index=0&id=fbcc4bb8&lang=less\""],"sourceRoot":""}

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-82ca94ea"],{"44e73":function(e,t,n){"use strict";n.r(t);var a=n("c7eb"),c=n("1da1"),u=(n("b0c0"),n("7a23")),r=n("f64c"),i=n("47e2"),l={class:"dev"},s={class:"view-title"},o={class:"view-container"},b={__name:"index",setup:function(e){var t=Object(i["b"])(),n=t.t,b=Object(u["Q"])(),f=Object(u["P"])({name:void 0}),d={name:{required:!0,message:"Please input name"}},j=function(){b.value.validate().then((function(){O(f.name)}))},p=Object(u["Q"])(!1),O=function(){var e=Object(c["a"])(Object(a["a"])().mark((function e(t){return Object(a["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return p.value=!0,e.next=3,window.market.downloadPlugin({name:t,isDev:!0});case 3:r["a"].success(n("feature.dev.installSuccess",{pluginName:t})),p.value=!1;case 5:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),m=function(){b.value.validate().then((function(){window.market.refreshPlugin({name:f.name}),r["a"].success(n("feature.dev.refreshSuccess",{pluginName:f.name}))}))},v={span:4},g={span:14};return function(e,t){var n=Object(u["U"])("a-alert"),a=Object(u["U"])("a-input"),c=Object(u["U"])("a-form-item"),r=Object(u["U"])("a-button"),i=Object(u["U"])("a-form");return Object(u["L"])(),Object(u["n"])("div",l,[Object(u["o"])("div",s,Object(u["X"])(e.$t("feature.dev.title")),1),Object(u["o"])("div",o,[Object(u["q"])(n,{style:{"margin-bottom":"40px"},message:e.$t("feature.dev.tips"),type:"warning"},null,8,["message"]),Object(u["q"])(i,{ref_key:"formRef",ref:b,model:f,rules:d,"label-col":v,"wrapper-col":g},{default:Object(u["gb"])((function(){return[Object(u["q"])(c,{label:e.$t("feature.dev.pluginName"),name:"name"},{default:Object(u["gb"])((function(){return[Object(u["q"])(a,{value:f.name,"onUpdate:value":t[0]||(t[0]=function(e){return f.name=e})},null,8,["value"])]})),_:1},8,["label"]),Object(u["q"])(c,{"wrapper-col":{span:14,offset:4}},{default:Object(u["gb"])((function(){return[Object(u["q"])(r,{loading:p.value,type:"primary",onClick:j},{default:Object(u["gb"])((function(){return[Object(u["p"])(Object(u["X"])(e.$t("feature.dev.install")),1)]})),_:1},8,["loading"]),Object(u["q"])(r,{onClick:m,style:{"margin-left":"10px"}},{default:Object(u["gb"])((function(){return[Object(u["p"])(Object(u["X"])(e.$t("feature.dev.refreshPlugins")),1)]})),_:1})]})),_:1})]})),_:1},8,["model"])])])}}},f=(n("ef18"),n("6b0d")),d=n.n(f);const j=d()(b,[["__scopeId","data-v-6fb0031c"]]);t["default"]=j},ef18:function(e,t,n){"use strict";n("f44a")},f44a:function(e,t,n){}}]);
//# sourceMappingURL=chunk-82ca94ea.71d77dba.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/dev/index.vue","webpack:///./src/views/dev/index.vue?465d","webpack:///./src/views/dev/index.vue?35c7"],"names":["useI18n","t","formRef","ref","formState","reactive","name","undefined","rules","required","message","onSubmit","value","validate","then","downloadPlugin","loading","pluginName","window","market","isDev","success","refresh","refreshPlugin","labelCol","span","wrapperCol","__exports__"],"mappings":"4SAqCA,MAAcA,iBAANC,EAAR,EAAQA,EAEFC,EAAUC,iBACVC,EAAYC,eAAS,CACzBC,UAAMC,IAEFC,EAAQ,CACZF,KAAM,CACJG,UAAU,EACVC,QAAS,sBAGPC,EAAW,WACfT,EAAQU,MAAMC,WAAWC,MAAK,WAC5BC,EAAeX,EAAUE,UAIvBU,EAAUb,gBAAI,GACdY,EAAc,uDAAG,WAAOE,GAAP,sFACrBD,EAAQJ,OAAQ,EADK,SAEfM,OAAOC,OAAOJ,eAAe,CACjCT,KAAMW,EACNG,OAAO,IAJY,OAMrBV,OAAQW,QAAQpB,EAAE,6BAA8B,CAAEgB,WAAYA,KAC9DD,EAAQJ,OAAQ,EAPK,2CAAH,sDAUdU,EAAU,WACdpB,EAAQU,MAAMC,WAAWC,MAAK,WAC5BI,OAAOC,OAAOI,cAAc,CAC1BjB,KAAMF,EAAUE,OAElBI,OAAQW,QACNpB,EAAE,6BAA8B,CAAEgB,WAAYb,EAAUE,YAKxDkB,EAAW,CAAEC,KAAM,GACnBC,EAAa,CAAED,KAAM,I,8zCCxE3B,MAAME,EAA2B,IAAgB,EAAQ,CAAC,CAAC,YAAY,qBAExD,gB,kCCRf,W","file":"js/chunk-82ca94ea.71d77dba.js","sourcesContent":["<template>\n <div class=\"dev\">\n <div class=\"view-title\">{{ $t('feature.dev.title') }}</div>\n <div class=\"view-container\">\n <a-alert\n style=\"margin-bottom: 40px\"\n :message=\"$t('feature.dev.tips')\"\n type=\"warning\"\n />\n <a-form\n ref=\"formRef\"\n :model=\"formState\"\n :rules=\"rules\"\n :label-col=\"labelCol\"\n :wrapper-col=\"wrapperCol\"\n >\n <a-form-item :label=\"$t('feature.dev.pluginName')\" name=\"name\">\n <a-input v-model:value=\"formState.name\" />\n </a-form-item>\n \n <a-form-item :wrapper-col=\"{ span: 14, offset: 4 }\">\n <a-button :loading=\"loading\" type=\"primary\" @click=\"onSubmit\">\n {{ $t('feature.dev.install') }}\n </a-button>\n <a-button @click=\"refresh\" style=\"margin-left: 10px\">\n {{ $t('feature.dev.refreshPlugins') }}\n </a-button>\n </a-form-item>\n </a-form>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { reactive, ref } from 'vue';\nimport { message } from 'ant-design-vue';\nimport { useI18n } from 'vue-i18n';\nconst { t } = useI18n();\n\nconst formRef = ref();\nconst formState = reactive({\n name: undefined,\n});\nconst rules = {\n name: {\n required: true,\n message: 'Please input name',\n },\n};\nconst onSubmit = () => {\n formRef.value.validate().then(() => {\n downloadPlugin(formState.name);\n });\n};\n\nconst loading = ref(false);\nconst downloadPlugin = async (pluginName) => {\n loading.value = true;\n await window.market.downloadPlugin({\n name: pluginName,\n isDev: true,\n });\n message.success(t('feature.dev.installSuccess', { pluginName: pluginName }));\n loading.value = false;\n};\n\nconst refresh = () => {\n formRef.value.validate().then(() => {\n window.market.refreshPlugin({\n name: formState.name,\n });\n message.success(\n t('feature.dev.refreshSuccess', { pluginName: formState.name })\n );\n });\n};\n\nconst labelCol = { span: 4 };\nconst wrapperCol = { span: 14 };\n</script>\n\n<style lang=\"less\" scoped>\n.dev {\n box-sizing: border-box;\n width: 100%;\n overflow-x: hidden;\n height: calc(~'100vh - 34px');\n .view-title {\n font-size: 16px;\n font-weight: 500;\n margin-bottom: 16px;\n color: var(--color-text-primary);\n }\n .view-container {\n padding: 10px;\n box-sizing: border-box;\n border-radius: 8px;\n background: var(--color-body-bg);\n overflow: auto;\n height: calc(~'100vh - 84px');\n }\n :deep(label) {\n color: var(--color-text-content);\n }\n :deep(.ant-input) {\n background: var(--color-input-hover);\n color: var(--color-text-content);\n }\n}\n</style>\n","import script from \"./index.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./index.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./index.vue?vue&type=style&index=0&id=6fb0031c&lang=less&scoped=true\"\n\nimport exportComponent from \"/Users/muwoo/rubick-wks/rubick/feature/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-6fb0031c\"]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./index.vue?vue&type=style&index=0&id=6fb0031c&lang=less&scoped=true\""],"sourceRoot":""}

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-a1c10494"],{"3e1f":function(e,t,n){"use strict";n.r(t);var c=n("7a23"),r=n("e1bd"),a=n("f64c"),u=n("f5e0"),s={class:"account"},i=["src"],o={__name:"index",setup:function(e){var t=Object(c["Q"])(window.rubick.dbStorage.getItem("rubick-user-info")),n=Object(c["Q"])(""),o=Object(r["a"])(),b=Object(c["Q"])(!1),l=function(){b.value=!0,n.value||t.value||u["a"].getScanCode({scene:o}).then((function(e){n.value="data:image/png;base64,".concat(e.dataUrl)}))},d=null;return Object(c["eb"])([b],(function(){b.value?d=setInterval((function(){u["a"].checkLoginStatus({scene:o}).then((function(e){console.log(e),e.openId&&(window.rubick.dbStorage.setItem("rubick-user-info",e),t.value=e,a["a"].success("登录成功!"),b.value=!1,clearInterval(d),d=null)}))}),2e3):(clearInterval(d),d=null)})),function(e,r){var a=Object(c["U"])("a-button"),u=Object(c["U"])("a-result"),o=Object(c["U"])("a-modal");return Object(c["L"])(),Object(c["n"])("div",s,[t.value?Object(c["m"])("",!0):(Object(c["L"])(),Object(c["l"])(u,{key:0,title:"请先登录","sub-title":"用户暂未登录,无法体验更多设置"},{extra:Object(c["gb"])((function(){return[Object(c["q"])(a,{onClick:l,type:"primary"},{default:Object(c["gb"])((function(){return[Object(c["p"])(" 使用微信小程序登录 ")]})),_:1})]})),_:1})),Object(c["q"])(o,{footer:null,visible:b.value,"onUpdate:visible":r[0]||(r[0]=function(e){return b.value=e})},{default:Object(c["gb"])((function(){return[Object(c["q"])(u,{title:"请使用微信扫码登录!","sub-title":"使用微信扫描上面的 rubick 小程序二维码进行授权登录"},{icon:Object(c["gb"])((function(){return[Object(c["o"])("img",{width:"200",src:n.value},null,8,i)]})),_:1})]})),_:1},8,["visible"])])}}},b=(n("7251"),n("6b0d")),l=n.n(b);const d=l()(o,[["__scopeId","data-v-2bc021e6"]]);t["default"]=d},7251:function(e,t,n){"use strict";n("9d3e")},"9d3e":function(e,t,n){},e1bd:function(e,t,n){"use strict";n.d(t,"a",(function(){return c}));let c=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce((e,t)=>(t&=63,e+=t<36?t.toString(36):t<62?(t-26).toString(36).toUpperCase():t>62?"-":"_",e),"")},f5e0:function(e,t,n){"use strict";var c=n("c7eb"),r=n("1da1"),a=n("bc3a"),u=n.n(a),s=u.a.create({baseURL:"https://rubick.vip/api/"});t["a"]={getScanCode:function(e){return Object(r["a"])(Object(c["a"])().mark((function t(){var n,r;return Object(c["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return n=e.scene,t.next=3,s.get("/users/getScanCode",{params:{scene:n}});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})))()},checkLoginStatus:function(e){return Object(r["a"])(Object(c["a"])().mark((function t(){var n,r;return Object(c["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return n=e.scene,t.next=3,s.post("/users/checkLoginStatus",{scene:n});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})))()},getUserInfo:function(e){return Object(r["a"])(Object(c["a"])().mark((function t(){var n,r;return Object(c["a"])().wrap((function(t){while(1)switch(t.prev=t.next){case 0:return n=e.openId,t.next=3,s.post("/users/getUserInfo",{openId:n});case 3:return r=t.sent,t.abrupt("return",r.data);case 5:case"end":return t.stop()}}),t)})))()}}}}]);
//# sourceMappingURL=chunk-a1c10494.7497b556.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-cf61e458"],{"166f":function(e,t,n){},"5e94":function(e,t,n){"use strict";n("166f")},b805:function(e,t,n){"use strict";n.r(t);var c=n("c7eb"),a=n("1da1"),r=(n("d81d"),n("d3b7"),n("159b"),n("b0c0"),n("7a23")),u=n("0eaf"),o=n("be89"),s=n("5502"),b={class:"system"},i={__name:"image",setup:function(e){var t=Object(s["b"])(),n=Object(r["j"])((function(){return t.state.totalPlugins})),i=Object(r["Q"])([]);Object(r["D"])(Object(a["a"])(Object(c["a"])().mark((function e(){return Object(c["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,u["a"].getImageDetail();case 2:i.value=e.sent;case 3:case"end":return e.stop()}}),e)}))));var l=Object(r["j"])((function(){var e=i.value||[];return e.length?e.map((function(e){var t=null;return n.value.forEach((function(n){n.name===e&&(t=n)})),t})):[]}));return function(e,t){return Object(r["L"])(),Object(r["n"])("div",b,[Object(r["bb"])(l)&&Object(r["bb"])(l).length?(Object(r["L"])(),Object(r["l"])(o["a"],{key:0,onDownloadSuccess:e.downloadSuccess,title:e.$t("feature.market.imageTool"),list:Object(r["bb"])(l)},null,8,["onDownloadSuccess","title","list"])):Object(r["m"])("",!0)])}}};n("5e94");const l=i;t["default"]=l},d81d:function(e,t,n){"use strict";var c=n("23e7"),a=n("b727").map,r=n("1dde"),u=r("map");c({target:"Array",proto:!0,forced:!u},{map:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}})}}]);
//# sourceMappingURL=chunk-cf61e458.d98b4577.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/market/components/image.vue?4c36","webpack:///./src/views/market/components/image.vue","webpack:///./src/views/market/components/image.vue?eb79","webpack:///./node_modules/core-js/modules/es.array.map.js"],"names":["store","useStore","totalPlugins","computed","state","data","ref","onBeforeMount","request","getImageDetail","value","system","defaultData","length","map","plugin","searchInfo","forEach","t","name","__exports__","$","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","callbackfn","this","arguments","undefined"],"mappings":"2IAAA,W,sNCiBA,IAAMA,EAAQC,iBACRC,EAAeC,gBAAS,kBAAMH,EAAMI,MAAMF,gBAE1CG,EAAOC,eAAI,IAEjBC,eAAa,sCAAC,4GACOC,OAAQC,iBADf,OACZJ,EAAKK,MADO,mDAId,IAAMC,EAASR,gBAAS,WACtB,IAAMS,EAAcP,EAAKK,OAAS,GAClC,OAAKE,EAAYC,OACVD,EAAYE,KAAI,SAACC,GACtB,IAAIC,EAAa,KAMjB,OALAd,EAAaQ,MAAMO,SAAQ,SAACC,GACtBA,EAAEC,OAASJ,IACbC,EAAaE,MAGVF,KARuB,M,yVCvBlC,MAAMI,EAAc,EAEL,gB,kCCNf,IAAIC,EAAI,EAAQ,QACZC,EAAO,EAAQ,QAAgCR,IAC/CS,EAA+B,EAAQ,QAEvCC,EAAsBD,EAA6B,OAKvDF,EAAE,CAAEI,OAAQ,QAASC,OAAO,EAAMC,QAASH,GAAuB,CAChEV,IAAK,SAAac,GAChB,OAAON,EAAKO,KAAMD,EAAYE,UAAUjB,OAAS,EAAIiB,UAAU,QAAKC","file":"js/chunk-cf61e458.d98b4577.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./image.vue?vue&type=style&index=0&id=02d11799&lang=less\"","<template>\n <div class=\"system\">\n <PluginList\n v-if=\"system && !!system.length\"\n @downloadSuccess=\"downloadSuccess\"\n :title=\"$t('feature.market.imageTool')\"\n :list=\"system\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onBeforeMount } from 'vue';\nimport request from '../../../assets/request/index';\nimport PluginList from './plugin-list.vue';\n\nimport { useStore } from 'vuex';\nconst store = useStore();\nconst totalPlugins = computed(() => store.state.totalPlugins);\n\nconst data = ref([]);\n\nonBeforeMount(async () => {\n data.value = await request.getImageDetail();\n});\n\nconst system = computed(() => {\n const defaultData = data.value || [];\n if (!defaultData.length) return [];\n return defaultData.map((plugin) => {\n let searchInfo = null;\n totalPlugins.value.forEach((t) => {\n if (t.name === plugin) {\n searchInfo = t;\n }\n });\n return searchInfo;\n });\n});\n</script>\n\n<style lang=\"less\">\n.system {\n width: 100%;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n</style>\n","import script from \"./image.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./image.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./image.vue?vue&type=style&index=0&id=02d11799&lang=less\"\n\nconst __exports__ = script;\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n"],"sourceRoot":""}

View File

@ -0,0 +1,2 @@
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-f69c766e"],{2957:function(e,t,n){"use strict";n("aed9e")},"83d4":function(e,t,n){"use strict";n.r(t);var c=n("c7eb"),a=n("1da1"),r=(n("d81d"),n("d3b7"),n("159b"),n("b0c0"),n("7a23")),u=n("0eaf"),s=n("be89"),o=n("5502"),b={class:"system"},i={__name:"system",setup:function(e){var t=Object(o["b"])(),n=Object(r["j"])((function(){return t.state.totalPlugins})),i=Object(r["Q"])([]);Object(r["D"])(Object(a["a"])(Object(c["a"])().mark((function e(){return Object(c["a"])().wrap((function(e){while(1)switch(e.prev=e.next){case 0:return e.next=2,u["a"].getSystemDetail();case 2:i.value=e.sent;case 3:case"end":return e.stop()}}),e)}))));var l=Object(r["j"])((function(){var e=i.value||[];return e.length?e.map((function(e){var t=null;return n.value.forEach((function(n){n.name===e&&(t=n)})),t})):[]}));return function(e,t){return Object(r["L"])(),Object(r["n"])("div",b,[Object(r["bb"])(l)&&Object(r["bb"])(l).length?(Object(r["L"])(),Object(r["l"])(s["a"],{key:0,onDownloadSuccess:e.downloadSuccess,title:e.$t("feature.market.systemTool"),list:Object(r["bb"])(l)},null,8,["onDownloadSuccess","title","list"])):Object(r["m"])("",!0)])}}};n("2957");const l=i;t["default"]=l},aed9e:function(e,t,n){},d81d:function(e,t,n){"use strict";var c=n("23e7"),a=n("b727").map,r=n("1dde"),u=r("map");c({target:"Array",proto:!0,forced:!u},{map:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}})}}]);
//# sourceMappingURL=chunk-f69c766e.7fe57a21.js.map

View File

@ -0,0 +1 @@
{"version":3,"sources":["webpack:///./src/views/market/components/system.vue?d800","webpack:///./src/views/market/components/system.vue","webpack:///./src/views/market/components/system.vue?ea4f","webpack:///./node_modules/core-js/modules/es.array.map.js"],"names":["store","useStore","totalPlugins","computed","state","data","ref","onBeforeMount","request","getSystemDetail","value","system","defaultData","length","map","plugin","searchInfo","forEach","t","name","__exports__","$","$map","arrayMethodHasSpeciesSupport","HAS_SPECIES_SUPPORT","target","proto","forced","callbackfn","this","arguments","undefined"],"mappings":"gHAAA,Y,yNCiBA,IAAMA,EAAQC,iBACRC,EAAeC,gBAAS,kBAAMH,EAAMI,MAAMF,gBAE1CG,EAAOC,eAAI,IAEjBC,eAAa,sCAAC,4GACOC,OAAQC,kBADf,OACZJ,EAAKK,MADO,mDAId,IAAMC,EAASR,gBAAS,WACtB,IAAMS,EAAcP,EAAKK,OAAS,GAClC,OAAKE,EAAYC,OACVD,EAAYE,KAAI,SAACC,GACtB,IAAIC,EAAa,KAMjB,OALAd,EAAaQ,MAAMO,SAAQ,SAACC,GACtBA,EAAEC,OAASJ,IACbC,EAAaE,MAGVF,KARuB,M,0VCvBlC,MAAMI,EAAc,EAEL,gB,0DCNf,IAAIC,EAAI,EAAQ,QACZC,EAAO,EAAQ,QAAgCR,IAC/CS,EAA+B,EAAQ,QAEvCC,EAAsBD,EAA6B,OAKvDF,EAAE,CAAEI,OAAQ,QAASC,OAAO,EAAMC,QAASH,GAAuB,CAChEV,IAAK,SAAac,GAChB,OAAON,EAAKO,KAAMD,EAAYE,UAAUjB,OAAS,EAAIiB,UAAU,QAAKC","file":"js/chunk-f69c766e.7fe57a21.js","sourcesContent":["export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--11-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--11-oneOf-1-1!../../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--11-oneOf-1-2!../../../../node_modules/less-loader/dist/cjs.js??ref--11-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./system.vue?vue&type=style&index=0&id=48de9761&lang=less\"","<template>\n <div class=\"system\">\n <PluginList\n v-if=\"system && !!system.length\"\n @downloadSuccess=\"downloadSuccess\"\n :title=\"$t('feature.market.systemTool')\"\n :list=\"system\"\n />\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onBeforeMount } from 'vue';\nimport request from '../../../assets/request/index';\nimport PluginList from './plugin-list.vue';\n\nimport { useStore } from 'vuex';\nconst store = useStore();\nconst totalPlugins = computed(() => store.state.totalPlugins);\n\nconst data = ref([]);\n\nonBeforeMount(async () => {\n data.value = await request.getSystemDetail();\n});\n\nconst system = computed(() => {\n const defaultData = data.value || [];\n if (!defaultData.length) return [];\n return defaultData.map((plugin) => {\n let searchInfo = null;\n totalPlugins.value.forEach((t) => {\n if (t.name === plugin) {\n searchInfo = t;\n }\n });\n return searchInfo;\n });\n});\n</script>\n\n<style lang=\"less\">\n.system {\n width: 100%;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n</style>\n","import script from \"./system.vue?vue&type=script&setup=true&lang=js\"\nexport * from \"./system.vue?vue&type=script&setup=true&lang=js\"\n\nimport \"./system.vue?vue&type=style&index=0&id=48de9761&lang=less\"\n\nconst __exports__ = script;\n\nexport default __exports__","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n"],"sourceRoot":""}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -9,7 +9,7 @@
"pluginType": "ui",
"features": [
{
"code": "market",
"code": "finder",
"explain": "插件市场",
"cmds":[
"插件市场"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
export const WINDOW_WIDTH = 688;
export const WINDOW_HEIGHT = 60;

View File

@ -1,14 +1,16 @@
export default {
version: 0,
version: 4,
perf: {
custom: {
theme: 'SPRING',
primaryColor: '#ff4ea4',
errorColor: '#ed6d46',
warningColor: '#e5a84b',
successColor: '#c0d695',
infoColor: '#aa8eeB',
logo: `file://${__static}/logo.png`,
placeholder: '你好 rubick',
placeholder: '你好Rubick请输入插件关键词',
username: 'Rubick',
},
shortCut: {
showAndHidden: 'Option+R',

View File

@ -1,7 +1,7 @@
const WINDOW_MAX_HEIGHT = 600;
const WINDOW_MIN_HEIGHT = 60;
const PRE_ITEM_HEIGHT = 60;
const HISTORY_HEIGHT = 80;
const HISTORY_HEIGHT = 70;
export default (searchList: Array<any>, historyList): number => {
const defaultHeight = historyList.length ? HISTORY_HEIGHT : 0;

View File

@ -169,6 +169,8 @@ class AdapterHandler {
cwd: this.baseDir,
});
console.log(args);
let output = '';
npm.stdout
.on('data', (data: string) => {

View File

@ -3,6 +3,7 @@ import path from 'path';
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib';
// import versonHandler from '../common/versionHandler';
import localConfig from '@/main/common/initLocalConfig';
import { WINDOW_HEIGHT, WINDOW_WIDTH } from '@/common/constans/common';
// eslint-disable-next-line @typescript-eslint/no-var-requires
require('@electron/remote/main').initialize();
@ -17,10 +18,10 @@ export default () => {
const createWindow = async () => {
win = new BrowserWindow({
height: 60,
height: WINDOW_HEIGHT,
useContentSize: true,
resizable: true,
width: 800,
width: WINDOW_WIDTH,
frame: false,
title: '拉比克',
show: false,

View File

@ -57,8 +57,8 @@ export default () => {
const viewReadyFn = async (window, { pluginSetting, ext }) => {
if (!view) return;
const height = pluginSetting && pluginSetting.height;
window.setSize(800, height || 660);
view.setBounds({ x: 0, y: 60, width: 800, height: height || 600 });
window.setSize(800, height || 600);
view.setBounds({ x: 0, y: 60, width: 800, height: height || 540 });
view.setAutoResize({ width: true });
executeHooks('PluginEnter', ext);
executeHooks('PluginReady', ext);

View File

@ -6,7 +6,7 @@ const db = new DBInstance();
const localConfig = {
async init(): Promise<any> {
const localConfig = await db.dbGet({ data: { id: LOCAL_CONFIG_KEY } });
const localConfig: any = await db.dbGet({ data: { id: LOCAL_CONFIG_KEY } });
if (
!localConfig ||
!localConfig.data ||
@ -16,8 +16,8 @@ const localConfig = {
_id: LOCAL_CONFIG_KEY,
data: defaultConfig,
};
if (localConfig && localConfig.data) {
data._rev = localConfig.data._rev;
if (localConfig && localConfig) {
data._rev = localConfig._rev;
}
await db.dbPut({
data: { data },

View File

@ -3,7 +3,6 @@ import {
nativeTheme,
BrowserWindow,
BrowserView,
screen,
ipcMain,
app,
Notification,
@ -21,6 +20,14 @@ const registerHotKey = (mainWindow: BrowserWindow): void => {
openAsHidden: true,
});
};
const setTheme = async () => {
mainWindow.webContents.executeJavaScript(`window.rubick.changeTheme()`);
mainWindow.getBrowserViews().forEach((view: BrowserView) => {
view.webContents.executeJavaScript(`window.rubick.changeTheme()`);
});
};
// 设置暗黑模式
const setDarkMode = async () => {
const config = await localConfig.getConfig();
@ -51,6 +58,7 @@ const registerHotKey = (mainWindow: BrowserWindow): void => {
const init = async () => {
await setAutoLogin();
await setDarkMode();
await setTheme();
const config = await localConfig.getConfig();
globalShortcut.unregisterAll();
// 注册偏好快捷键

View File

@ -4,8 +4,8 @@
--color-text-desc: rgba(0, 0, 0, 0.45);
// 背景色
--color-body-bg: #fff;
--color-menu-bg: #f3efef;
--color-list-hover: #ebeee8;
--color-menu-bg: rgb(248, 248, 248);
--color-list-hover: rgba(247, 247, 247);
--color-input-hover: #fff;
// 边框
--color-border-light: #f0f0f0;
@ -18,8 +18,8 @@
// 背景色
--color-body-bg: #1c1c28;
--color-menu-bg: #1c1c28;
--color-list-hover: #33333d;
--color-input-hover: #33333d;
--color-list-hover: #2c2f3b;
--color-input-hover: #444d;
// 边框
--color-border-light: #33333d;
}

View File

@ -13,7 +13,7 @@
v-for="(item, index) in pluginHistory"
:key="index"
>
<a-avatar style="border-radius: 0" :src="item.icon" />
<a-avatar style="width: 28px; height: 28px;" :src="item.icon" />
<div class="name ellpise">{{item.pluginName || item._name || item.name}}</div>
</a-col>
</a-row>
@ -117,21 +117,23 @@ const sort = (options) => {
background: var(--color-body-bg);
.history-plugins {
width: 100%;
border-top: 1px dashed #ddd;
border-top: 1px dashed var(--color-border-light);
box-sizing: border-box;
.history-item {
box-sizing: border-box;
height: 79px;
height: 69px;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
border-right: 1px dashed #ddd;
color: var(--color-text-content);
border-right: 1px dashed var(--color-border-light);
&.active {
background: var(--color-list-hover);
}
}
.name {
font-size: 12px;
margin-top: 4px;
width: 100%;
text-align: center;
@ -146,7 +148,7 @@ const sort = (options) => {
background: var(--color-body-bg);
color: var(--color-text-content);
border-color: var(--color-border-light);
border-bottom: 1px solid var(--color-border-light);
border-bottom: 1px solid var(--color-border-light) !important;
&.active {
background: var(--color-list-hover);
}

View File

@ -1,51 +1,51 @@
<template>
<div class="rubick-select">
<div class="select-tag" v-show="currentPlugin.cmd">
{{ currentPlugin.cmd }}
<div :class="currentPlugin.cmd ? 'rubick-tag' : ''">
<img
@click="() => emit('openMenu')"
class="rubick-logo"
:src="currentPlugin.logo || config.perf.custom.logo"
/>
<div class="select-tag" v-show="currentPlugin.cmd">
{{ currentPlugin.cmd }}
</div>
</div>
<div
:class="clipboardFile[0].name ? 'clipboard-tag' : 'clipboard-img'"
v-if="!!clipboardFile.length"
>
<img :src="getIcon()" />
<img style="margin-right: 8px" :src="getIcon()" />
<div class="ellipse">{{ clipboardFile[0].name }}</div>
<a-tag color="#aaa" v-if="clipboardFile.length > 1">{{
clipboardFile.length
}}</a-tag>
<a-tag color="#aaa" v-if="clipboardFile.length > 1">
{{ clipboardFile.length }}
</a-tag>
</div>
<a-input
id="search"
ref="mainInput"
class="main-input"
@input="e => changeValue(e)"
@keydown.down="e => keydownEvent(e, 'down')"
@keydown.tab="e => keydownEvent(e, 'down')"
@keydown.up="e => keydownEvent(e, 'up')"
@keydown="e => checkNeedInit(e)"
@input="(e) => changeValue(e)"
@keydown.down="(e) => keydownEvent(e, 'down')"
@keydown.tab="(e) => keydownEvent(e, 'down')"
@keydown.up="(e) => keydownEvent(e, 'up')"
@keydown="(e) => checkNeedInit(e)"
:value="searchValue"
:placeholder="placeholder || config.perf.custom.placeholder"
@keypress.enter="e => keydownEvent(e, 'enter')"
@keypress.space="e => keydownEvent(e, 'space')"
:placeholder="
pluginLoading
? '更新检测中...'
: placeholder || config.perf.custom.placeholder
"
@keypress.enter="(e) => keydownEvent(e, 'enter')"
@keypress.space="(e) => keydownEvent(e, 'space')"
@focus="emit('focus')"
>
<template #suffix>
<div class="suffix-tool">
<MoreOutlined v-show="!pluginLoading" @click="showSeparate()" class="icon-more" />
<div
v-if="currentPlugin && currentPlugin.logo"
style="position: relative"
>
<div v-show="pluginLoading" class="update-tips">检测更新中...</div>
<a-spin v-show="pluginLoading" class="loading">
<template #indicator>
<LoadingOutlined style="font-size: 42px" />
</template>
</a-spin>
<img class="icon-tool" :src="currentPlugin.logo" />
</div>
<div @click="() => emit('openMenu')" v-else class="rubick-logo">
<img :src="config.perf.custom.logo" />
</div>
<MoreOutlined
v-show="!pluginLoading"
@click="showSeparate()"
class="icon-more"
/>
</div>
</template>
</a-input>
@ -55,11 +55,11 @@
<script setup lang="ts">
import { defineProps, defineEmits, ref } from 'vue';
import { ipcRenderer } from 'electron';
import { LoadingOutlined, MoreOutlined } from '@ant-design/icons-vue';
import { MoreOutlined } from '@ant-design/icons-vue';
const remote = window.require('@electron/remote');
import localConfig from '../confOp';
const { Menu, app } = remote;
const { Menu } = remote;
const config: any = ref(localConfig.getConfig());
@ -78,8 +78,8 @@ const props: any = defineProps({
clipboardFile: (() => [])(),
});
const changeValue = e => {
if (props.currentPlugin.name === 'rubick-system-feature') return;
const changeValue = (e) => {
// if (props.currentPlugin.name === 'rubick-system-feature') return;
targetSearch({ value: e.target.value });
emit('onSearch', e);
};
@ -109,7 +109,9 @@ const keydownEvent = (e, key: string) => {
modifiers,
},
});
const runPluginDisable = ((e.target.value === '' && !props.pluginHistory.length) || props.currentPlugin.name) ;
const runPluginDisable =
(e.target.value === '' && !props.pluginHistory.length) ||
props.currentPlugin.name;
switch (key) {
case 'up':
emit('changeCurrent', -1);
@ -130,7 +132,7 @@ const keydownEvent = (e, key: string) => {
}
};
const checkNeedInit = e => {
const checkNeedInit = (e) => {
const { ctrlKey, metaKey } = e;
if (e.target.value === '' && e.keyCode === 8) {
@ -262,7 +264,7 @@ window.rubick.hooks.onHide = () => {
<style lang="less">
.rubick-select {
display: flex;
padding-left: 10px;
padding-left: 16px;
background: var(--color-body-bg);
position: fixed;
top: 0;
@ -278,20 +280,21 @@ window.rubick.hooks.onHide = () => {
white-space: nowrap;
max-width: 200px;
}
.rubick-tag {
display: flex;
align-items: center;
justify-content: space-between;
padding: 4px 8px;
height: 40px;
border-radius: 9px;
background: var(--color-list-hover);
}
.select-tag {
white-space: pre;
user-select: none;
font-size: 18px;
border-radius: 16px;
height: 32px;
position: relative;
color: #fff;
background-color: var(--ant-primary-color);
display: inline-flex;
align-items: center;
margin-right: 1px;
padding: 0 10px;
font-size: 16px;
color: var(--color-text-primary);
margin-left: 8px;
}
.main-input {
@ -302,18 +305,23 @@ window.rubick.hooks.onHide = () => {
outline: none;
box-shadow: none !important;
background: var(--color-body-bg);
padding-left: 8px;
.ant-select-selection,
.ant-input,
.ant-select-selection__rendered {
caret-color: var(--ant-primary-color);
height: 100% !important;
font-size: 22px;
font-size: 16px;
border: none !important;
background: var(--color-body-bg);
color: var(--color-text-primary);
}
}
.rubick-logo,
.rubick-logo {
width: 32px;
border-radius: 100%;
}
.icon-tool {
width: 40px;
height: 40px;

View File

@ -9,6 +9,7 @@ import {
ConfigProvider,
Row,
Col,
Divider,
} from 'ant-design-vue';
import App from './App.vue';
import localConfig from './confOp';
@ -21,6 +22,13 @@ ConfigProvider.config({
theme: config.perf.custom || {},
});
window.rubick.changeTheme = () => {
const config: any = localConfig.getConfig();
ConfigProvider.config({
theme: config.perf.custom || {},
});
};
createApp(App)
.use(Button)
.use(List)
@ -30,4 +38,5 @@ createApp(App)
.use(Tag)
.use(Row)
.use(Col)
.use(Divider)
.mount('#app');