mirror of
https://github.com/rubickCenter/rubick
synced 2025-06-14 15:26:56 +08:00
Merge branch 'master' of https://github.com/rubickCenter/rubick
This commit is contained in:
commit
e8d947f18a
2
.github/workflows/main.yml
vendored
2
.github/workflows/main.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [macos-latest, windows-2019, ubuntu-latest]
|
||||
os: [macos-11, windows-2019, ubuntu-latest]
|
||||
|
||||
# create steps
|
||||
steps:
|
||||
|
28
README.md
28
README.md
@ -27,7 +27,7 @@ English | [简体中文](./README.zh-CN.md)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
Based on electron open source toolbox, free integration of rich plug-ins, to create the ultimate desktop efficiency tool。Rubick is one of the heroes of Dota ,The core skill is the ability to use other heroes as plug-ins,Finished the walk 。Very consistent with the design concept of this tool,So named Rubick。
|
||||
An open-source toolbox based on Electron, freely integrating rich plugins to create the ultimate desktop productivity tool. Rubick is one of the heroes in Dota, whose core skill is the ability to use the skills of other heroes through plugins, and then move on. This aligns perfectly with the design philosophy of this tool, which is why it is named Rubick.
|
||||
|
||||
## Sponsor
|
||||
我们通过有偿的方式积累高质量的常见问题、最佳实践文档,加入星球后可以和作者进行互动和答疑。我们提供技术支持、答疑解惑、定制化插件开发、二次定制化开发 rubick 等等官方服务。
|
||||
@ -43,14 +43,12 @@ Based on electron open source toolbox, free integration of rich plug-ins, to cre
|
||||
|
||||
|
||||
## Feature list
|
||||
- [x] Plug-in management based on npm package mode, installing plugins is as easy as installing npm packages.
|
||||
- [x] Support system plug-ins, as long as rubick is running, plug-ins can be used at any time.
|
||||
- [x] Support global shortcut key settings
|
||||
- [x] Support clipboard file search
|
||||
- [x] Support searching for locally installed apps or preferences
|
||||
- [x] Support MacOS
|
||||
- [x] Support Windows
|
||||
- [x] Support Linux
|
||||
- [x] Plugin management based on the npm package pattern, installing plugins is as simple as installing npm packages.
|
||||
- [x] Supports WebDAV for multi-device data synchronization, ensuring true data security synchronization.
|
||||
- [x] A unique system plugin mode that allows plugins to become an integral part of Rubick.
|
||||
- [x] Supports the quick launch of local apps, files, and folders.
|
||||
- [x] Supports enterprise-level intranet deployment.
|
||||
- [x] Supports multiple languages.
|
||||
|
||||
## Docs
|
||||
|
||||
@ -59,18 +57,18 @@ Based on electron open source toolbox, free integration of rich plug-ins, to cre
|
||||
[Rubick Docs](https://rubickCenter.github.io/rubick/)
|
||||
|
||||
|
||||
## Core function
|
||||
## Core functionality showcase.
|
||||
### 1. Search system application
|
||||
Support pinyin and abbreviations to search system applications:
|
||||
|
||||

|
||||

|
||||
|
||||
### 2. UI plug-in installation
|
||||
Click the `rubick` icon on the right side of the search box to enter the plug-in market, select the desired plug-in, and click the download button to download. After the download is complete, you can find the installed plug-in under the Installed tab
|
||||
|
||||
After the installation is complete, enter the plug-in call up command to use the corresponding plug-in:
|
||||
|
||||

|
||||

|
||||
|
||||
### 3. System plug-in installation
|
||||
The system plug-in installation method is the same as that of the UI category. In the plug-in market, select the `system category` and find the system plug-in that suits you to install it.
|
||||
@ -78,10 +76,10 @@ The system plug-in installation method is the same as that of the UI category. I
|
||||
After the system plug-in is installed successfully, rubick needs to be restarted to take effect
|
||||
```
|
||||
|
||||
### 4. The input box focus automatically matches the plug-in according to the clipboard content
|
||||
Search for `Preferences` in `rubick`, and then turn on the `Auto Paste` function to match the clipboard content and automatically match the plug-in for use.
|
||||
### 4. Multi-device data synchronization based on WebDAV.
|
||||
In "Rubick," search for "Preferences," go to "Account and Settings," and then select "Multi-Device Data Synchronization." You can export and import data for the use of Rubick plugins.
|
||||
|
||||

|
||||

|
||||
|
||||
### More features
|
||||
If you need more features, please come here to give us suggestions:[issues](https://github.com/rubickCenter/rubick/issues) 。
|
||||
|
@ -44,13 +44,11 @@
|
||||
|
||||
## 支持能力
|
||||
- [x] 基于 npm 包模式的插件管理,安装插件和安装 npm 包一样简单
|
||||
- [x] 支持系统插件,只要在 rubick 运行时,插件可以随时使用
|
||||
- [x] 支持全局快捷键设置
|
||||
- [x] 支持剪贴板文件搜索
|
||||
- [x] 支持搜索本地已安装 app 或 偏好设置
|
||||
- [x] 支持 MacOS
|
||||
- [x] 支持 Windows
|
||||
- [x] 支持 Linux
|
||||
- [x] 支持 webdav 多端数据同步,真正的数据安全同步
|
||||
- [x] 独一无二的系统插件模式,让插件成为 rubick 的一部分
|
||||
- [x] 支持快速启动本地 app、文件、文件夹
|
||||
- [x] 支持企业化内网部署
|
||||
- [x] 支持多语言
|
||||
|
||||
## 使用文档
|
||||
|
||||
@ -59,17 +57,17 @@
|
||||
[Rubick Docs](https://rubickCenter.github.io/rubick/)
|
||||
|
||||
|
||||
## 目前支持能力
|
||||
## 核心功能展示
|
||||
### 1. 搜索系统应用
|
||||
支持拼音和缩写来搜索系统安装应用:
|
||||
|
||||

|
||||

|
||||
|
||||
### 2. UI类插件安装
|
||||
点击搜索框右侧 `rubick` 图标,进入插件市场,选择所需插件,点击下载按钮即可下载,下载完成后在已安装 tab 下可以找到安装插件。
|
||||
安装完成后,输入插件呼起命令即可使用对应插件:
|
||||
|
||||

|
||||

|
||||
|
||||
### 3. 系统类插件安装
|
||||
系统插件安装方式和UI类一样,在插件市场选择`系统分类`,寻找适合自己的系统插件安装即可。
|
||||
@ -78,10 +76,10 @@
|
||||
系统插件安装成功后,需要重启 rubick 才能生效
|
||||
```
|
||||
|
||||
### 4. 输入框聚焦自动根据剪切板内容匹配插件
|
||||
在 `rubick` 内搜索`偏好设置`,然后开启`自动粘贴` 功能,即可匹配剪切板内容自动匹配适合插件进行使用。
|
||||
### 4. 基于 webdav 的多端数据同步
|
||||
在 `rubick` 内搜索`偏好设置` 进入 `账户和设置` -> `多端数据同步`;即可对 `rubick` 插件使用数据进行 `导出` 和 `导入`。
|
||||
|
||||

|
||||

|
||||
|
||||
### 更多功能
|
||||
如果您还需要更多功能,欢迎来这里给我们提建议:[issues](https://github.com/rubickCenter/rubick/issues) 。
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<div :class="[platform, 'detach']">
|
||||
<div :class="[process.platform, 'detach']">
|
||||
<div class="info">
|
||||
<img :src="plugInfo.logo"/>
|
||||
<input
|
||||
@ -15,7 +15,7 @@
|
||||
<div class="handle">
|
||||
<div class="devtool" @click="openDevTool" title="开发者工具"></div>
|
||||
</div>
|
||||
<div class="window-handle" v-if="platform !== 'darwin'">
|
||||
<div class="window-handle" v-if="process.platform !== 'darwin'">
|
||||
<div class="minimize" @click="minimize"></div>
|
||||
<div class="maximize" @click="maximize"></div>
|
||||
<div class="close" @click="close"></div>
|
||||
@ -30,7 +30,7 @@ import { ref } from 'vue';
|
||||
|
||||
const { ipcRenderer } = window.require('electron');
|
||||
|
||||
const platform = ref(window.process.platform);
|
||||
const process = window.require('process');
|
||||
const showInput = ref(false);
|
||||
|
||||
const storeInfo = localStorage.getItem('rubick-system-detach') || '{}';
|
||||
|
@ -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
13020
feature/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -12,15 +12,19 @@
|
||||
"@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",
|
||||
|
@ -9,7 +9,7 @@
|
||||
"pluginType": "ui",
|
||||
"features": [
|
||||
{
|
||||
"code": "market",
|
||||
"code": "finder",
|
||||
"explain": "插件市场",
|
||||
"cmds":[
|
||||
"插件市场"
|
||||
|
@ -36,4 +36,11 @@ window.market = {
|
||||
removeLocalStartPlugin(plugin) {
|
||||
ipcSend('removeLocalStartPlugin', { plugin });
|
||||
},
|
||||
dbDump(target) {
|
||||
ipcSend('dbDump', { target });
|
||||
},
|
||||
|
||||
dbImport(target) {
|
||||
ipcSend('dbImport', { target });
|
||||
},
|
||||
};
|
||||
|
@ -1,91 +1,228 @@
|
||||
<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;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
: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>
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
35
feature/src/assets/constans.ts
Normal file
35
feature/src/assets/constans.ts
Normal 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',
|
||||
};
|
BIN
feature/src/assets/error.png
Normal file
BIN
feature/src/assets/error.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 3.2 KiB |
1
feature/src/assets/lottie/404.json
Normal file
1
feature/src/assets/lottie/404.json
Normal file
File diff suppressed because one or more lines are too long
1
feature/src/assets/lottie/empty.json
Normal file
1
feature/src/assets/lottie/empty.json
Normal file
File diff suppressed because one or more lines are too long
@ -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;
|
||||
},
|
||||
|
||||
|
@ -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',
|
||||
@ -99,6 +100,9 @@ export default {
|
||||
localstart: {
|
||||
title: 'Local Start',
|
||||
},
|
||||
database: {
|
||||
title: 'Data Synchronization',
|
||||
},
|
||||
},
|
||||
dev: {
|
||||
title: 'Developer',
|
||||
|
@ -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: '基本设置',
|
||||
@ -97,6 +98,9 @@ export default {
|
||||
localstart: {
|
||||
title: '本地启动',
|
||||
},
|
||||
database: {
|
||||
title: '多端数据同步',
|
||||
},
|
||||
},
|
||||
dev: {
|
||||
title: '开发者',
|
||||
|
@ -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');
|
||||
|
@ -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'),
|
||||
},
|
||||
];
|
||||
|
||||
|
@ -17,6 +17,7 @@ export default createStore({
|
||||
totalPlugins: [],
|
||||
localPlugins: [],
|
||||
searchValue: '',
|
||||
active: ['finder'],
|
||||
},
|
||||
mutations: {
|
||||
commonUpdate(state: any, payload) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -42,7 +42,6 @@ const dev = computed(() => {
|
||||
<style lang="less">
|
||||
.system {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -42,7 +42,6 @@ const system = computed(() => {
|
||||
<style lang="less">
|
||||
.system {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -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-if="!item.isloading && item.isdownload"
|
||||
@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);
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -42,7 +42,6 @@ const system = computed(() => {
|
||||
<style lang="less">
|
||||
.system {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -42,7 +42,6 @@ const tools = computed(() => {
|
||||
<style lang="less">
|
||||
.worker {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -42,7 +42,6 @@ const system = computed(() => {
|
||||
<style lang="less">
|
||||
.worker {
|
||||
width: 100%;
|
||||
height: 100vh;
|
||||
overflow-x: hidden;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
@ -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>
|
268
feature/src/views/settings/database.vue
Normal file
268
feature/src/views/settings/database.vue
Normal file
@ -0,0 +1,268 @@
|
||||
<template>
|
||||
<div class="export-header">
|
||||
<a-button @click="exportData" size="small" type="primary" style="margin-right: 10px;">
|
||||
导出数据
|
||||
<template #icon>
|
||||
<ExportOutlined />
|
||||
</template>
|
||||
</a-button>
|
||||
<a-button @click="importData" danger size="small" style="margin-right: 10px;">
|
||||
导入数据
|
||||
<template #icon>
|
||||
<ImportOutlined />
|
||||
</template>
|
||||
</a-button>
|
||||
<a-button type="link" size="small" @click="showSetting = true">
|
||||
<template #icon>
|
||||
<SettingOutlined />
|
||||
</template>
|
||||
</a-button>
|
||||
</div>
|
||||
<a-list item-layout="horizontal" :data-source="dataPlugins">
|
||||
<template #renderItem="{ item }">
|
||||
<a-list-item>
|
||||
<template #actions>
|
||||
<a v-if="!item.plugin.isdownload && !item.plugin.isloading" key="list-loadmore-edit"
|
||||
@click="() => downloadPlugin(item.plugin)">
|
||||
<CloudDownloadOutlined style="font-size: 18px;"/>
|
||||
</a>
|
||||
<a v-if="item.plugin.isloading" key="list-loadmore-edit">
|
||||
<LoadingOutlined style="font-size: 18px;"/>
|
||||
</a>
|
||||
<a key="list-loadmore-edit" @click="() => showKeys(item)">
|
||||
<DatabaseOutlined style="font-size: 18px;"/>
|
||||
</a>
|
||||
</template>
|
||||
<a-list-item-meta :description="`${item.keys.length} 份文档`">
|
||||
<template #title>
|
||||
<div>
|
||||
<span>{{ item.plugin.pluginName }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #avatar>
|
||||
<a-avatar shape="square" :src="item.plugin.logo"/>
|
||||
</template>
|
||||
</a-list-item-meta>
|
||||
</a-list-item>
|
||||
</template>
|
||||
</a-list>
|
||||
<a-drawer
|
||||
v-model:visible="open"
|
||||
width="400"
|
||||
:closable="false"
|
||||
:title="currentSelect.plugin.pluginName"
|
||||
placement="right"
|
||||
>
|
||||
<p
|
||||
class="key-item"
|
||||
:key="key"
|
||||
@click="() => showDetail(key)"
|
||||
v-for="key in currentSelect.keys"
|
||||
>
|
||||
{{ key }}
|
||||
</p>
|
||||
</a-drawer>
|
||||
<a-modal
|
||||
centered
|
||||
bodyStyle="max-height: 500px; overflow: auto"
|
||||
:footer="null"
|
||||
:closable="false"
|
||||
v-model:visible="show"
|
||||
>
|
||||
<pre>{{ JSON.stringify(detail, null, 2) }}</pre>
|
||||
</a-modal>
|
||||
<a-modal
|
||||
v-model:visible="showSetting"
|
||||
title="webdav 账户配置"
|
||||
:footer="null"
|
||||
>
|
||||
<a-alert v-if="formState.suport === 'jianguo'" style="margin-bottom: 20px;" type="info" show-icon>
|
||||
<template #message>
|
||||
<div
|
||||
@click="openHelp"
|
||||
class="openHelp">
|
||||
点击查看如何获取坚果云账号密码
|
||||
</div>
|
||||
</template>
|
||||
</a-alert>
|
||||
<a-form
|
||||
:model="formState"
|
||||
name="basic"
|
||||
:label-col="{ span: 8 }"
|
||||
:wrapper-col="{ span: 16 }"
|
||||
autocomplete="off"
|
||||
@finish="handleOk"
|
||||
>
|
||||
<a-form-item
|
||||
label="webdav 提供商"
|
||||
name="suport"
|
||||
>
|
||||
<a-select v-model:value="formState.suport">
|
||||
<a-select-option value="jianguo">坚果云</a-select-option>
|
||||
<a-select-option value="auto">自定义</a-select-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="服务器地址"
|
||||
name="url"
|
||||
v-show="formState.suport === 'auto'"
|
||||
:rules="[{ required: true, message: '请填写服务器地址!' }]"
|
||||
>
|
||||
<a-input v-model:value="formState.url" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="账户"
|
||||
name="username"
|
||||
:rules="[{ required: true, message: '请填写 username!' }]"
|
||||
>
|
||||
<a-input v-model:value="formState.username" />
|
||||
</a-form-item>
|
||||
<a-form-item
|
||||
label="密码"
|
||||
name="password"
|
||||
:rules="[{ required: true, message: '请填写 password!' }]"
|
||||
>
|
||||
<a-input-password v-model:value="formState.password" />
|
||||
</a-form-item>
|
||||
<a-form-item :wrapper-col="{ offset: 8, span: 16 }">
|
||||
<a-button type="primary" html-type="submit">保存设置</a-button>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import { useStore } from 'vuex';
|
||||
import { computed, ref, reactive } from 'vue';
|
||||
import {
|
||||
DatabaseOutlined,
|
||||
CloudDownloadOutlined,
|
||||
LoadingOutlined,
|
||||
ExportOutlined,
|
||||
ImportOutlined,
|
||||
SettingOutlined,
|
||||
} from '@ant-design/icons-vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const open = ref(false);
|
||||
const show = ref(false);
|
||||
const showSetting = ref(false);
|
||||
const currentSelect = ref({ plugin: {} });
|
||||
const detail = ref({});
|
||||
|
||||
const defaultConfig = window.rubick.dbStorage.getItem(
|
||||
'rubick-db-jg-webdav'
|
||||
) || {
|
||||
url: 'https://dav.jianguoyun.com/dav/',
|
||||
username: '',
|
||||
password: '',
|
||||
};
|
||||
|
||||
if (!defaultConfig.suport) {
|
||||
defaultConfig.suport = 'jianguo';
|
||||
}
|
||||
|
||||
const formState = reactive(defaultConfig);
|
||||
|
||||
const showKeys = (item) => {
|
||||
open.value = true;
|
||||
currentSelect.value = item;
|
||||
};
|
||||
|
||||
const handleOk = () => {
|
||||
window.rubick.dbStorage.setItem(
|
||||
'rubick-db-jg-webdav',
|
||||
JSON.parse(JSON.stringify(formState))
|
||||
);
|
||||
message.success('保存成功');
|
||||
showSetting.value = false;
|
||||
};
|
||||
|
||||
const showDetail = (key) => {
|
||||
show.value = true;
|
||||
detail.value = window.rubick.db.get(key);
|
||||
};
|
||||
|
||||
const exportData = () => {
|
||||
if (!formState.password || !formState.username) {
|
||||
return showSetting.value = true;
|
||||
}
|
||||
window.market.dbDump(JSON.parse(JSON.stringify(formState)));
|
||||
};
|
||||
|
||||
const importData = () => {
|
||||
if (!formState.password || !formState.username) {
|
||||
return showSetting.value = true;
|
||||
}
|
||||
Modal.confirm({
|
||||
title: '导入确认',
|
||||
content: '导入坚果云数据将会覆盖本地数据,是否确认导入?',
|
||||
onOk() {
|
||||
window.market.dbImport(JSON.parse(JSON.stringify(formState)));
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
const openHelp = () => {
|
||||
window.rubick.shellOpenExternal('https://help.jianguoyun.com/?p=2064');
|
||||
};
|
||||
|
||||
const store = useStore();
|
||||
|
||||
const pluginsData = window.rubick.db.get('RUBICK_PLUGIN_INFO');
|
||||
|
||||
const totalPlugins = computed(() => store.state.totalPlugins);
|
||||
|
||||
const dataPlugins = computed(() => {
|
||||
if (!pluginsData) return [];
|
||||
return pluginsData.data.map((item) => {
|
||||
let plugin = null;
|
||||
if (['rubick-system-feature'].includes(item.name)) {
|
||||
plugin = {
|
||||
pluginName: '主程序',
|
||||
isdownload: true,
|
||||
logo: require('../../assets/logo.png'),
|
||||
};
|
||||
} else {
|
||||
plugin = totalPlugins.value.find((p) => p.name === item.name);
|
||||
}
|
||||
const data = item.keys.map((key) => window.rubick.db.get(key));
|
||||
return {
|
||||
...item,
|
||||
plugin,
|
||||
data,
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
const startDownload = (name) => store.dispatch('startDownload', name);
|
||||
const successDownload = (name) => store.dispatch('successDownload', name);
|
||||
|
||||
const downloadPlugin = async (plugin) => {
|
||||
startDownload(plugin.name);
|
||||
await window.market.downloadPlugin(plugin);
|
||||
message.success(t('feature.dev.installSuccess', { pluginName: plugin.name }));
|
||||
successDownload(plugin.name);
|
||||
};
|
||||
</script>
|
||||
<style lang="less">
|
||||
.openHelp {
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.export-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
border-bottom: 1px solid #eee;
|
||||
text-align: right;
|
||||
}
|
||||
.key-item {
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
color: var(--ant-primary-color);
|
||||
}
|
||||
}
|
||||
</style>
|
@ -1,232 +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">
|
||||
{{ $t('feature.settings.database.title') }}
|
||||
</a-menu-item>
|
||||
<a-menu-item key="localhost">
|
||||
<template #icon>
|
||||
<DatabaseOutlined />
|
||||
</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'" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@ -240,14 +229,15 @@ import {
|
||||
PlusCircleOutlined,
|
||||
UserOutlined,
|
||||
FolderOpenOutlined,
|
||||
SafetyOutlined,
|
||||
} from '@ant-design/icons-vue';
|
||||
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';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import localConfig from '@/confOp';
|
||||
|
||||
@ -444,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;
|
||||
@ -458,7 +461,6 @@ const changeLanguage = (value) => {
|
||||
box-sizing: border-box;
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
height: 100%;
|
||||
background: var(--color-body-bg);
|
||||
|
||||
.setting-item {
|
||||
@ -470,7 +472,7 @@ const changeLanguage = (value) => {
|
||||
|
||||
.title {
|
||||
color: var(--ant-primary-color);
|
||||
font-size: 15px;
|
||||
font-size: 14px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
@ -583,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);
|
||||
|
@ -27,6 +27,7 @@
|
||||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
const fs = window.require('fs');
|
||||
const process = window.require('process');
|
||||
|
||||
const dbId = 'rubick-local-start-app';
|
||||
|
||||
@ -97,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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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" ? "" : "/",
|
||||
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);
|
||||
// },
|
||||
};
|
||||
|
@ -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"
|
||||
|
20388
package-lock.json
generated
20388
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rubick",
|
||||
"version": "3.1.0",
|
||||
"version": "4.0.1",
|
||||
"author": "muwoo <2424880409@qq.com>",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
@ -31,13 +31,17 @@
|
||||
"get-mac-apps": "^1.0.2",
|
||||
"got": "^11.8.3",
|
||||
"lodash.throttle": "^4.1.1",
|
||||
"memorystream": "^0.3.1",
|
||||
"node-key-sender": "^1.0.11",
|
||||
"pinyin-match": "^1.2.4",
|
||||
"pouchdb": "^7.2.2",
|
||||
"pouchdb-load": "^1.4.6",
|
||||
"pouchdb-replication-stream": "^1.2.9",
|
||||
"simple-plist": "0.2.1",
|
||||
"vue": "^3.0.0",
|
||||
"vue-router": "^4.0.0-0",
|
||||
"vuex": "^4.0.0-0",
|
||||
"webdav": "4.11.3",
|
||||
"worker-loader": "^3.0.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
@ -69,6 +73,7 @@
|
||||
"worker-plugin": "^5.0.1"
|
||||
},
|
||||
"resolutions": {
|
||||
"vue-cli-plugin-electron-builder/electron-builder": "^23.0.3"
|
||||
"vue-cli-plugin-electron-builder/electron-builder": "^23.0.3",
|
||||
"leveldown": "6.0.3"
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because one or more lines are too long
2
public/feature/css/app.d8360197.css
Normal file
2
public/feature/css/app.d8360197.css
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/css/chunk-111de227.2450c00b.css
Normal file
1
public/feature/css/chunk-111de227.2450c00b.css
Normal file
@ -0,0 +1 @@
|
||||
.worker{width:100%;overflow-x:hidden;box-sizing:border-box}
|
1
public/feature/css/chunk-15a45f31.f40ad637.css
Normal file
1
public/feature/css/chunk-15a45f31.f40ad637.css
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/css/chunk-1af68a6e.2450c00b.css
Normal file
1
public/feature/css/chunk-1af68a6e.2450c00b.css
Normal file
@ -0,0 +1 @@
|
||||
.worker{width:100%;overflow-x:hidden;box-sizing:border-box}
|
1
public/feature/css/chunk-2ab2dd18.830bb4d6.css
Normal file
1
public/feature/css/chunk-2ab2dd18.830bb4d6.css
Normal 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%}
|
1
public/feature/css/chunk-322da6db.cb08d5f6.css
Normal file
1
public/feature/css/chunk-322da6db.cb08d5f6.css
Normal file
@ -0,0 +1 @@
|
||||
.result{width:100%;overflow-x:hidden;box-sizing:border-box}.result .error-content{padding-top:100px}
|
1
public/feature/css/chunk-596c6184.9be2495c.css
Normal file
1
public/feature/css/chunk-596c6184.9be2495c.css
Normal file
@ -0,0 +1 @@
|
||||
.system{width:100%;overflow-x:hidden;box-sizing:border-box}
|
1
public/feature/css/chunk-82ca94ea.b470edf6.css
Normal file
1
public/feature/css/chunk-82ca94ea.b470edf6.css
Normal 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)}
|
1
public/feature/css/chunk-a1c10494.a43ed20b.css
Normal file
1
public/feature/css/chunk-a1c10494.a43ed20b.css
Normal 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)}
|
1
public/feature/css/chunk-a2b32e48.67429700.css
Normal file
1
public/feature/css/chunk-a2b32e48.67429700.css
Normal 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}
|
1
public/feature/css/chunk-ca86664e.dd10748e.css
Normal file
1
public/feature/css/chunk-ca86664e.dd10748e.css
Normal 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)}
|
1
public/feature/css/chunk-cf61e458.9be2495c.css
Normal file
1
public/feature/css/chunk-cf61e458.9be2495c.css
Normal file
@ -0,0 +1 @@
|
||||
.system{width:100%;overflow-x:hidden;box-sizing:border-box}
|
1
public/feature/css/chunk-f69c766e.9be2495c.css
Normal file
1
public/feature/css/chunk-f69c766e.9be2495c.css
Normal file
@ -0,0 +1 @@
|
||||
.system{width:100%;overflow-x:hidden;box-sizing:border-box}
|
BIN
public/feature/img/error.bda0dc85.png
Normal file
BIN
public/feature/img/error.bda0dc85.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
@ -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>
|
2
public/feature/js/app.0d80f1c1.js
Normal file
2
public/feature/js/app.0d80f1c1.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/app.0d80f1c1.js.map
Normal file
1
public/feature/js/app.0d80f1c1.js.map
Normal file
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
2
public/feature/js/chunk-111de227.0ad80221.js
Normal file
2
public/feature/js/chunk-111de227.0ad80221.js
Normal 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
|
1
public/feature/js/chunk-111de227.0ad80221.js.map
Normal file
1
public/feature/js/chunk-111de227.0ad80221.js.map
Normal 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":""}
|
2
public/feature/js/chunk-15a45f31.36dccd15.js
Normal file
2
public/feature/js/chunk-15a45f31.36dccd15.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-15a45f31.36dccd15.js.map
Normal file
1
public/feature/js/chunk-15a45f31.36dccd15.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/feature/js/chunk-1af68a6e.c1d36c0f.js
Normal file
2
public/feature/js/chunk-1af68a6e.c1d36c0f.js
Normal 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
|
1
public/feature/js/chunk-1af68a6e.c1d36c0f.js.map
Normal file
1
public/feature/js/chunk-1af68a6e.c1d36c0f.js.map
Normal 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":""}
|
2
public/feature/js/chunk-2ab2dd18.69b0e89c.js
Normal file
2
public/feature/js/chunk-2ab2dd18.69b0e89c.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-2ab2dd18.69b0e89c.js.map
Normal file
1
public/feature/js/chunk-2ab2dd18.69b0e89c.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/feature/js/chunk-322da6db.f9b18700.js
Normal file
2
public/feature/js/chunk-322da6db.f9b18700.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-322da6db.f9b18700.js.map
Normal file
1
public/feature/js/chunk-322da6db.f9b18700.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/feature/js/chunk-596c6184.83021bf7.js
Normal file
2
public/feature/js/chunk-596c6184.83021bf7.js
Normal 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
|
1
public/feature/js/chunk-596c6184.83021bf7.js.map
Normal file
1
public/feature/js/chunk-596c6184.83021bf7.js.map
Normal 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":""}
|
2
public/feature/js/chunk-82ca94ea.71d77dba.js
Normal file
2
public/feature/js/chunk-82ca94ea.71d77dba.js
Normal 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
|
1
public/feature/js/chunk-82ca94ea.71d77dba.js.map
Normal file
1
public/feature/js/chunk-82ca94ea.71d77dba.js.map
Normal 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":""}
|
2
public/feature/js/chunk-a1c10494.7497b556.js
Normal file
2
public/feature/js/chunk-a1c10494.7497b556.js
Normal 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
|
1
public/feature/js/chunk-a1c10494.7497b556.js.map
Normal file
1
public/feature/js/chunk-a1c10494.7497b556.js.map
Normal file
File diff suppressed because one or more lines are too long
8
public/feature/js/chunk-a2b32e48.f483e0e9.js
Normal file
8
public/feature/js/chunk-a2b32e48.f483e0e9.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-a2b32e48.f483e0e9.js.map
Normal file
1
public/feature/js/chunk-a2b32e48.f483e0e9.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/feature/js/chunk-ca86664e.b3dc97d9.js
Normal file
2
public/feature/js/chunk-ca86664e.b3dc97d9.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-ca86664e.b3dc97d9.js.map
Normal file
1
public/feature/js/chunk-ca86664e.b3dc97d9.js.map
Normal file
File diff suppressed because one or more lines are too long
2
public/feature/js/chunk-cf61e458.d98b4577.js
Normal file
2
public/feature/js/chunk-cf61e458.d98b4577.js
Normal 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
|
1
public/feature/js/chunk-cf61e458.d98b4577.js.map
Normal file
1
public/feature/js/chunk-cf61e458.d98b4577.js.map
Normal 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":""}
|
2
public/feature/js/chunk-f69c766e.7fe57a21.js
Normal file
2
public/feature/js/chunk-f69c766e.7fe57a21.js
Normal 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
|
1
public/feature/js/chunk-f69c766e.7fe57a21.js.map
Normal file
1
public/feature/js/chunk-f69c766e.7fe57a21.js.map
Normal 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":""}
|
38
public/feature/js/chunk-vendors.31673d31.js
Normal file
38
public/feature/js/chunk-vendors.31673d31.js
Normal file
File diff suppressed because one or more lines are too long
1
public/feature/js/chunk-vendors.31673d31.js.map
Normal file
1
public/feature/js/chunk-vendors.31673d31.js.map
Normal file
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
@ -9,7 +9,7 @@
|
||||
"pluginType": "ui",
|
||||
"features": [
|
||||
{
|
||||
"code": "market",
|
||||
"code": "finder",
|
||||
"explain": "插件市场",
|
||||
"cmds":[
|
||||
"插件市场"
|
||||
|
@ -36,4 +36,11 @@ window.market = {
|
||||
removeLocalStartPlugin(plugin) {
|
||||
ipcSend('removeLocalStartPlugin', { plugin });
|
||||
},
|
||||
dbDump(target) {
|
||||
ipcSend('dbDump', { target });
|
||||
},
|
||||
|
||||
dbImport(target) {
|
||||
ipcSend('dbImport', { target });
|
||||
},
|
||||
};
|
||||
|
53
public/feature/report.html
Normal file
53
public/feature/report.html
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
13
public/installer.nsh
Normal file
13
public/installer.nsh
Normal file
@ -0,0 +1,13 @@
|
||||
!macro customInstall
|
||||
SetRegView 64
|
||||
WriteRegStr HKCR "*\shell\rubick" "" "open w&ith rubick"
|
||||
WriteRegStr HKCR "*\shell\rubick" "Icon" "$INSTDIR\rubick.exe"
|
||||
WriteRegStr HKCR "*\shell\rubick\command" "" '"$INSTDIR\rubick.exe" "search" "%1"'
|
||||
SetRegView 32
|
||||
WriteRegStr HKCR "*\shell\rubick" "" "open w&ith rubick"
|
||||
WriteRegStr HKCR "*\shell\rubick" "Icon" "$INSTDIR\rubick.exe"
|
||||
WriteRegStr HKCR "*\shell\rubick\command" "" '"$INSTDIR\rubick.exe" "search" "%1"'
|
||||
!macroend
|
||||
!macro customUninstall
|
||||
DeleteRegKey HKCR "*\shell\rubick"
|
||||
!macroend
|
31
public/rubick.workflow/Contents/Info.plist
Normal file
31
public/rubick.workflow/Contents/Info.plist
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>NSServices</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>NSBackgroundColorName</key>
|
||||
<string>background</string>
|
||||
<key>NSIconName</key>
|
||||
<string>NSTouchBarSend</string>
|
||||
<key>NSMenuItem</key>
|
||||
<dict>
|
||||
<key>default</key>
|
||||
<string>rubick 打开</string>
|
||||
</dict>
|
||||
<key>NSMessage</key>
|
||||
<string>runWorkflowAsService</string>
|
||||
<key>NSRequiredContext</key>
|
||||
<dict>
|
||||
<key>NSApplicationIdentifier</key>
|
||||
<string>com.apple.finder</string>
|
||||
</dict>
|
||||
<key>NSSendFileTypes</key>
|
||||
<array>
|
||||
<string>public.item</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
BIN
public/rubick.workflow/Contents/QuickLook/Thumbnail.png
Normal file
BIN
public/rubick.workflow/Contents/QuickLook/Thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
226
public/rubick.workflow/Contents/document.wflow
Normal file
226
public/rubick.workflow/Contents/document.wflow
Normal file
@ -0,0 +1,226 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>AMApplicationBuild</key>
|
||||
<string>512</string>
|
||||
<key>AMApplicationVersion</key>
|
||||
<string>2.10</string>
|
||||
<key>AMDocumentVersion</key>
|
||||
<string>2</string>
|
||||
<key>actions</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>action</key>
|
||||
<dict>
|
||||
<key>AMAccepts</key>
|
||||
<dict>
|
||||
<key>Container</key>
|
||||
<string>List</string>
|
||||
<key>Optional</key>
|
||||
<true/>
|
||||
<key>Types</key>
|
||||
<array>
|
||||
<string>com.apple.cocoa.string</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>AMActionVersion</key>
|
||||
<string>2.0.3</string>
|
||||
<key>AMApplication</key>
|
||||
<array>
|
||||
<string>自动操作</string>
|
||||
</array>
|
||||
<key>AMParameterProperties</key>
|
||||
<dict>
|
||||
<key>COMMAND_STRING</key>
|
||||
<dict/>
|
||||
<key>CheckedForUserDefaultShell</key>
|
||||
<dict/>
|
||||
<key>inputMethod</key>
|
||||
<dict/>
|
||||
<key>shell</key>
|
||||
<dict/>
|
||||
<key>source</key>
|
||||
<dict/>
|
||||
</dict>
|
||||
<key>AMProvides</key>
|
||||
<dict>
|
||||
<key>Container</key>
|
||||
<string>List</string>
|
||||
<key>Types</key>
|
||||
<array>
|
||||
<string>com.apple.cocoa.string</string>
|
||||
</array>
|
||||
</dict>
|
||||
<key>ActionBundlePath</key>
|
||||
<string>/System/Library/Automator/Run Shell Script.action</string>
|
||||
<key>ActionName</key>
|
||||
<string>运行Shell脚本</string>
|
||||
<key>ActionParameters</key>
|
||||
<dict>
|
||||
<key>COMMAND_STRING</key>
|
||||
<string>/Applications/rubick.app/Contents/MacOS/rubick search "$@" > /dev/null 2>&1 &</string>
|
||||
<key>CheckedForUserDefaultShell</key>
|
||||
<true/>
|
||||
<key>inputMethod</key>
|
||||
<integer>1</integer>
|
||||
<key>shell</key>
|
||||
<string>/bin/bash</string>
|
||||
<key>source</key>
|
||||
<string></string>
|
||||
</dict>
|
||||
<key>BundleIdentifier</key>
|
||||
<string>com.apple.RunShellScript</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2.0.3</string>
|
||||
<key>CanShowSelectedItemsWhenRun</key>
|
||||
<false/>
|
||||
<key>CanShowWhenRun</key>
|
||||
<true/>
|
||||
<key>Category</key>
|
||||
<array>
|
||||
<string>AMCategoryUtilities</string>
|
||||
</array>
|
||||
<key>Class Name</key>
|
||||
<string>RunShellScriptAction</string>
|
||||
<key>InputUUID</key>
|
||||
<string>7E11290E-3E3F-4D65-988B-3E2A8B597EEF</string>
|
||||
<key>Keywords</key>
|
||||
<array>
|
||||
<string>Shell</string>
|
||||
<string>脚本</string>
|
||||
<string>命令</string>
|
||||
<string>运行</string>
|
||||
<string>Unix</string>
|
||||
</array>
|
||||
<key>OutputUUID</key>
|
||||
<string>475C56B3-F23A-4D39-BB41-4B00F76B096B</string>
|
||||
<key>UUID</key>
|
||||
<string>BBBABDAB-D65B-41BF-B1EB-03ACA5AF4714</string>
|
||||
<key>UnlocalizedApplications</key>
|
||||
<array>
|
||||
<string>Automator</string>
|
||||
</array>
|
||||
<key>arguments</key>
|
||||
<dict>
|
||||
<key>0</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<integer>0</integer>
|
||||
<key>name</key>
|
||||
<string>inputMethod</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>0</string>
|
||||
</dict>
|
||||
<key>1</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<false/>
|
||||
<key>name</key>
|
||||
<string>CheckedForUserDefaultShell</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>1</string>
|
||||
</dict>
|
||||
<key>2</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>source</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>2</string>
|
||||
</dict>
|
||||
<key>3</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string></string>
|
||||
<key>name</key>
|
||||
<string>COMMAND_STRING</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>3</string>
|
||||
</dict>
|
||||
<key>4</key>
|
||||
<dict>
|
||||
<key>default value</key>
|
||||
<string>/bin/sh</string>
|
||||
<key>name</key>
|
||||
<string>shell</string>
|
||||
<key>required</key>
|
||||
<string>0</string>
|
||||
<key>type</key>
|
||||
<string>0</string>
|
||||
<key>uuid</key>
|
||||
<string>4</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>isViewVisible</key>
|
||||
<integer>1</integer>
|
||||
<key>location</key>
|
||||
<string>309.000000:305.000000</string>
|
||||
<key>nibPath</key>
|
||||
<string>/System/Library/Automator/Run Shell Script.action/Contents/Resources/Base.lproj/main.nib</string>
|
||||
</dict>
|
||||
<key>isViewVisible</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
</array>
|
||||
<key>connectors</key>
|
||||
<dict/>
|
||||
<key>workflowMetaData</key>
|
||||
<dict>
|
||||
<key>applicationBundleID</key>
|
||||
<string>com.apple.finder</string>
|
||||
<key>applicationBundleIDsByPath</key>
|
||||
<dict>
|
||||
<key>/System/Library/CoreServices/Finder.app</key>
|
||||
<string>com.apple.finder</string>
|
||||
</dict>
|
||||
<key>applicationPath</key>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
<key>applicationPaths</key>
|
||||
<array>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
</array>
|
||||
<key>inputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.fileSystemObject</string>
|
||||
<key>outputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.nothing</string>
|
||||
<key>presentationMode</key>
|
||||
<integer>15</integer>
|
||||
<key>processesInput</key>
|
||||
<false/>
|
||||
<key>serviceApplicationBundleID</key>
|
||||
<string>com.apple.finder</string>
|
||||
<key>serviceApplicationPath</key>
|
||||
<string>/System/Library/CoreServices/Finder.app</string>
|
||||
<key>serviceInputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.fileSystemObject</string>
|
||||
<key>serviceOutputTypeIdentifier</key>
|
||||
<string>com.apple.Automator.nothing</string>
|
||||
<key>serviceProcessesInput</key>
|
||||
<false/>
|
||||
<key>systemImageName</key>
|
||||
<string>NSTouchBarSend</string>
|
||||
<key>useAutomaticInputType</key>
|
||||
<false/>
|
||||
<key>workflowTypeIdentifier</key>
|
||||
<string>com.apple.Automator.servicesMenu</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
2
src/common/constans/common.ts
Normal file
2
src/common/constans/common.ts
Normal file
@ -0,0 +1,2 @@
|
||||
export const WINDOW_WIDTH = 688;
|
||||
export const WINDOW_HEIGHT = 60;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user