提交 f1d3d7e1 编写于 作者: 璃白.'s avatar 璃白. 🌻

Merge branch 'feature/ding' into 'master'

Feature/ding

See merge request weixin_43881430/quicker!3
{
"name": "Quicker",
"version": "0.0.2",
"version": "0.0.4",
"author": "libai",
"description": "An electron-vue project",
"license": null,
......@@ -17,7 +17,7 @@
"build": {
"asar": true,
"productName": "Quicker",
"appId": "com.muwoo.rubick",
"appId": "com.layyback.quicker",
"compression": "maximum",
"directories": {
"output": "build"
......
......@@ -61,20 +61,22 @@ module.exports = () => {
});
};
let createWindow = () => {
let createWindow = mainWindow => {
console.log("create window");
session.defaultSession.cookies
.get({
url: url
})
.then((cookies, err) => {
console.log("cookies", cookies);
// console.log("cookies", cookies);
});
win = new BrowserWindow({
frame: true,
autoHideMenuBar: true,
title: false,
parent: mainWindow,
modal: true,
width: 460,
height: 400,
show: false,
......@@ -103,7 +105,7 @@ module.exports = () => {
});
// 打包后,失焦隐藏
win.on("blur", () => {
// win.hide();
win.close();
});
win.webContents.on("did-stop-loading", () => {
win.webContents.insertCSS(
......@@ -120,7 +122,7 @@ module.exports = () => {
.quicker_loading { height: 100vh; }
`
);
win.openDevTools()
win.openDevTools();
win.show();
});
};
......
......@@ -15,13 +15,14 @@ module.exports = () => {
: `file://${__dirname}/index.html`;
win = new BrowserWindow({
height: 82, // client_height
height: 74, // client_height
useContentSize: true,
resizable: true,
width: 920,
frame: false,
// backgroundColor: "#fff",
title: "拉比克",
show: false,
show: true,
skipTaskbar: true,
webPreferences: {
webSecurity: false,
......@@ -50,12 +51,13 @@ module.exports = () => {
}
);
win.once("ready-to-show", () => win.show());
// win.once("ready-to-show", () => win.show());
win.on("closed", () => {
win = undefined;
});
win.on("blur", () => {
// win.hide();
const childWindows = win.getChildWindows();
if (!childWindows.length) win.hide();
});
};
......
......@@ -12,7 +12,7 @@ const defaultConfigForAnyPlatform = {
shortCut: {
showAndHidden: "Option+R",
separate: "Ctrl+D",
quit: "Shift+Escape"
quit: "Shift+Escape",
},
common: {
start: true,
......
......@@ -62,6 +62,7 @@ class Listener {
registerShortCut(mainWindow) {
const config = global.opConfig.get();
globalShortcut.unregisterAll();
this.registerQuitPluginShortCut(mainWindow)
// 注册偏好快捷键
globalShortcut.register(config.perf.shortCut.showAndHidden, () => {
const { x, y } = screen.getCursorScreenPoint();
......@@ -124,7 +125,8 @@ class Listener {
this.setAutoLogin();
this.colorPicker();
this.initPlugin();
this.initPlugin(mainWindow);
this.registerQuitPluginShortCut(mainWindow)
this.lockScreen();
this.separate();
this.initCapture();
......@@ -217,7 +219,9 @@ class Listener {
console.log("win", win);
if (win === null || win === undefined) {
login.createWindow();
login.createWindow(mainWindow);
} else {
win.show();
}
});
}
......@@ -303,12 +307,18 @@ class Listener {
});
}
initPlugin() {
initPlugin(mainWindow) {
ipcMain.on("optionPlugin", (e, args) => {
this.optionPlugin = args;
});
}
registerQuitPluginShortCut(mainWindow) {
globalShortcut.register("Esc", () => {
mainWindow.webContents.send("quitPlugin");
});
}
lockScreen() {
// 锁屏
ipcMain.on("lock-screen", () => {
......
......@@ -29,6 +29,7 @@ class initApp {
this.onReady();
this.onRunning();
this.onQuit();
// main.registerQuitPluginShortCut()
}
}
......
<template>
<div id="app" @mousedown="drag">
<a-layout id="components-layout">
<a-layout id="components-layout" :class="[{ mac: isMac }]">
<div v-if="!searchType" class="rubick-select">
<div v-if="selected" class="tag-container">
<template v-if="isWebview">
......@@ -39,9 +39,7 @@
<a-input
id="search"
:placeholder="
subPlaceHolder && selected && selected.key === 'plugin-container'
? subPlaceHolder
: 'Hello, Quicker'
subPlaceHolder && selected ? subPlaceHolder : 'Hello, Quicker'
"
@mousedown.stop="dragWhenInput"
class="main-input"
......@@ -91,7 +89,7 @@
:src="userInfo.UserAvatar"
alt=""
/>
<a-icon v-else class="icon-more" type="more" />
<a-icon v-else class="icon-more" type="appstore" />
</div>
</div>
</a-input>
......@@ -157,7 +155,7 @@
</template>
<script>
import quickApps from "./pages/quick-apps/app-list.vue";
import { mapActions, mapMutations, mapState } from "vuex";
import { mapActions, mapMutations, mapState, mapGetters } from "vuex";
import { ipcRenderer, remote, clipboard } from "electron";
import {
getWindowHeight,
......@@ -188,10 +186,18 @@ export default {
pluginInfo: pluginInfo
});
};
// document.addEventListener("keydown", e => {
// console.log(e);
// if (e.keyCode === 27) {
// this.closeTag();
// this.changeMode("view");
// }
// });
},
mounted() {
ipcRenderer.on("init-rubick", this.closeTag);
ipcRenderer.on("new-window", this.newWindow);
ipcRenderer.on("quitPlugin", this.quitPlugin);
// 超级面板打开插件
ipcRenderer.on("superPanel-openPlugin", (e, args) => {
this.closeTag();
......@@ -369,11 +375,14 @@ export default {
return `<div>${result[0]}</div>`;
}
},
quitPlugin() {
this.closeTag();
this.changeMode("view");
},
checkNeedInit(e) {
// 如果搜索栏无内容,且按了删除键,则清空 tag
if (this.searchValue === "" && e.keyCode === 8) {
this.closeTag();
this.changeMode("view");
this.quitPlugin();
}
},
changePath({ key }) {
......@@ -394,7 +403,7 @@ export default {
});
this.setHideOnBlur(true);
ipcRenderer.send("changeWindowSize-rubick", {
height: getWindowHeight([])
height: getWindowHeight([], this.dingApp)
});
if (this.$router.history.current.fullPath !== "/home") {
// 该if是为了避免跳转到相同路由而报错。
......@@ -488,6 +497,10 @@ export default {
"userInfo",
"pluginLoading"
]),
...mapGetters("main", ["dingApp"]),
isMac() {
return commonConst.macOS();
},
isWebview() {
return this.pluginInfo.subType === "webview";
},
......@@ -540,7 +553,7 @@ body {
}
#app {
padding: 10px;
padding: 6px;
box-sizing: border-box;
}
......@@ -548,6 +561,9 @@ body {
overflow: auto;
// margin-top: 14px;
background: #fff;
&.mac {
-webkit-app-region: drag;
}
::-webkit-scrollbar {
width: 0;
}
......@@ -605,14 +621,13 @@ body {
border: none;
box-shadow: none;
}
.options {
position: absolute;
top:82px;
top: 78px;
left: 0;
width: 100%;
z-index: 99;
max-height: calc(~"100vh - 96px"); // client_height
max-height: calc(~"100vh - 86px"); // client_height
overflow: auto;
padding: 0 14px;
box-sizing: border-box;
......@@ -630,7 +645,7 @@ body {
}
}
.rubick-select-subMenu {
-webkit-app-region: drag;
// -webkit-app-region: drag;
background: #eee;
height: 50px;
padding-left: 200px;
......@@ -667,6 +682,7 @@ body {
font-size: 26px;
font-weight: bold;
cursor: pointer;
color: #999;
}
.loading {
position: absolute;
......
const WINDOW_MAX_HEIGHT = 800;
const WINDOW_MIN_HEIGHT = 82; // client_height
const WINDOW_MIN_HEIGHT = 74; // client_height
const WINDOW_MIN_HEIGHT_WITH_APP = 126; // client_height
const PRE_ITEM_HEIGHT = 60;
const SYSTEM_PLUGINS = [
......@@ -55,4 +56,4 @@ const SYSTEM_PLUGINS = [
const APP_FINDER_PATH = process.platform === 'darwin' ? ['/System/Applications', '/Applications', '/System/Library/PreferencePanes'] : [];
export { WINDOW_MAX_HEIGHT, WINDOW_MIN_HEIGHT, PRE_ITEM_HEIGHT, SYSTEM_PLUGINS, APP_FINDER_PATH };
export { WINDOW_MAX_HEIGHT, WINDOW_MIN_HEIGHT, WINDOW_MIN_HEIGHT_WITH_APP, PRE_ITEM_HEIGHT, SYSTEM_PLUGINS, APP_FINDER_PATH };
import {
WINDOW_MAX_HEIGHT,
WINDOW_MIN_HEIGHT,
WINDOW_MIN_HEIGHT_WITH_APP,
PRE_ITEM_HEIGHT,
SYSTEM_PLUGINS
} from "./constans";
......@@ -22,9 +23,10 @@ const store = new Store();
getApp.init();
const fileLists = getApp.fileLists;
function getWindowHeight(searchList) {
function getWindowHeight(searchList, dingAppList = []) {
if (!searchList) return WINDOW_MAX_HEIGHT;
if (!searchList.length) return WINDOW_MIN_HEIGHT;
if (!searchList.length)
return dingAppList.length ? WINDOW_MIN_HEIGHT_WITH_APP : WINDOW_MIN_HEIGHT;
return searchList.length * PRE_ITEM_HEIGHT + WINDOW_MIN_HEIGHT + 5 >
WINDOW_MAX_HEIGHT
? WINDOW_MAX_HEIGHT
......@@ -51,6 +53,11 @@ function existOrNot(path) {
});
}
function isMdFile(str) {
if (!str) return false;
return /\.md$/i.test(str);
}
const appPath = getLocalDataFile();
async function downloadZip(downloadRepoUrl, name) {
......@@ -208,5 +215,6 @@ export {
downloadZip,
downloadZipFromGitCode,
fileLists,
debounce
debounce,
isMdFile
};
......@@ -39,6 +39,8 @@ export default {
};
},
mounted() {
this.setSubPlaceHolder("按 Esc 键退出插件");
// this.setSubPlaceHolder("按 ⌫ 键退出插件");
this.webview = document.querySelector("webview");
// if (!this.webview) return;
this.webview.addEventListener("dom-ready", () => {
......@@ -53,7 +55,6 @@ export default {
pluginLoading: false
});
});
this.setSubPlaceHolder("Hello, Quicker");
this.webview.addEventListener("ipc-message", event => {
if (event.channel === "insertCSS") {
this.webview.addEventListener("dom-ready", () => {
......@@ -172,6 +173,6 @@ export default {
<style lang="less">
#webview {
width: 100%;
height: calc(~"100vh - 84px");
height: calc(~"100vh - 74px");
}
</style>
......@@ -35,13 +35,14 @@
<script>
import app from "./components/app.vue";
import { shell, ipcRenderer } from "electron";
import { mapState, mapMutations, mapActions } from "vuex";
import { mapState, mapMutations, mapActions, mapGetters } from "vuex";
export default {
components: {
app
},
computed: {
...mapState("main", ["mode", "installs", "userInfo", "devPlugins"]),
...mapGetters("main", ["dingApp"]),
isEditMode() {
return this.mode === "edit";
},
......@@ -55,13 +56,6 @@ export default {
url: "https://yre5673znb.feishu.cn/docs/doccnMnLv3iZ3epFvjXprnPum3b",
icon: "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg95.699pic.com%2Felement%2F40053%2F1100.png_860.png%21%2Ffw%2F562&refer=http%3A%2F%2Fimg95.699pic.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1642577880&t=84032418744ad3e05d175dd6dd309c99"
};
},
dingApp() {
return [
...this.devPlugins.filter(plugin => {
return plugin.ding === true;
})
];
}
},
created() {
......@@ -85,7 +79,7 @@ export default {
// alert(123)
if (!this.isHome) return;
ipcRenderer.send("changeWindowSize-rubick", {
height: this.dingApp.length ? 126 : 82
height: this.dingApp.length ? 126 : 74
});
},
helpDoc() {
......
......@@ -40,7 +40,7 @@ export default {
bottom: -10px;
transition: all 0.3s;
box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.1);
-webkit-app-region: no-drag;
// -webkit-app-region: no-drag;
z-index: 2;
}
.app_name {
......
......@@ -149,7 +149,7 @@ export default {
</script>
<style lang="less" scoped>
webview {
height: calc(~"100vh - 84px");
height: calc(~"100vh - 112px");
width: 100%;
}
.ant-tabs {
......
......@@ -4,7 +4,7 @@
<a-menu :selectedKeys="current" mode="horizontal" @select="changePath">
<a-menu-item key="market">
<a-icon type="appstore" />
<a-badge :dot="showUpdateBadge"> 插件中心 </a-badge>
<a-badge :dot="showUpdateBadge"> 插件市场 </a-badge>
</a-menu-item>
<a-menu-item key="plugin">
<a-icon type="heart" />
......@@ -31,7 +31,11 @@ export default {
name: "search",
methods: {
...mapActions("main", ["onSearch", "showMainUI"]),
...mapMutations("main", ["commonUpdate", "changeMode"]),
...mapMutations("main", [
"commonUpdate",
"changeMode",
"setSubPlaceHolder"
]),
changePath({ key }) {
this.$router.push({ path: `/home/${key}` });
this.commonUpdate({
......@@ -44,6 +48,10 @@ export default {
}
}
},
mounted() {
this.setSubPlaceHolder("按 Esc 键退出");
// this.setSubPlaceHolder("按 ⌫ 键退出");
},
computed: {
...mapState("main", [
"showMain",
......
......@@ -142,7 +142,7 @@ export default {
<style lang="less">
.dev-container {
height: calc(~'100vh - 110px');
// height: calc(~'100vh - 80px');
width: 100%;
.ant-menu-item {
height: 60px !important;
......
......@@ -112,7 +112,8 @@ import api from "../../../assets/api";
import { mapActions, mapMutations, mapState } from "vuex";
import marked from "marked";
import { shell } from "electron";
import path from "path";
import axios from "axios";
import { isMdFile } from "../../../assets/common/utils";
const rendererMD = new marked.Renderer();
export default {
......@@ -129,24 +130,28 @@ export default {
this.getPlugins();
// this.bannerList = bannerRes.result;
},
methods: {
getPlugins() {
api.getPlugins().then(async ({ data: res }) => {
res.forEach(async plugin => {
const pluginItem = await this.getPluginDetail(plugin);
const pluginItem = await this.getPluginDetail(plugin.name);
this.pluginList.push(pluginItem);
});
});
},
async getPluginDetail(plugin) {
async getPluginDetail(name) {
const {
data: { version, pluginName, description, logo }
} = await api.getPluginDetail(plugin.name);
plugin.pluginName = pluginName;
plugin.description = description;
plugin.version = version;
plugin.logo = `https://gitlab.com/layyback/quicker-market/-/raw/master/plugins/${plugin.name}/${logo}`;
data: plugin
} = await api.getPluginDetail(name);
if (plugin.detail && isMdFile(plugin.detail)) {
const { readme } = await axios.get(
`https://gitlab.com/layyback/quicker-market/-/raw/master/plugins/${plugin.name}/${plugin.detail}`
);
plugin.readme = readme;
} else {
plugin.readme = plugin.detail;
}
plugin.logo = `https://gitlab.com/layyback/quicker-market/-/raw/master/plugins/${plugin.name}/${plugin.logo}`;
// plugin.logo = `https://gitcode.net/weixin_43881430/quicker-market/-/raw/master/plugins/${plugin.name}/${logo}`;
plugin.downloadUrl = `https://gitlab.com/api/v4/projects/layyback%2Fquicker-market/repository/archive.zip?path=plugins%2F${plugin.name}`;
// plugin.downloadUrl =
......@@ -180,8 +185,6 @@ export default {
plugin => plugin.name === item.name && plugin.type === "prod"
);
if (!plugin) return "download";
console.log(plugin, item);
if (plugin && plugin.version !== item.version) {
this.changeUpdateBadge(true);
return "update";
......@@ -227,7 +230,9 @@ export default {
smartypants: false
});
try {
return marked(this.currentSelect.detail);
console.log(123, this.currentSelect);
return marked(this.currentSelect.readme);
} catch (e) {
return "暂无描述信息";
}
......
......@@ -142,7 +142,7 @@ export default {
<style lang="less">
.dev-container {
height: calc(~"100vh - 110px");
height: calc(~"100vh - 124px");
overflow: auto;
.dev-detail {
display: flex;
......
......@@ -37,12 +37,17 @@
<div
class="value"
tabIndex="-1"
@click="shortCutChange = true"
@keyup="e => changeShortCut(e, 'showAndHidden')"
>
{{ config.perf.shortCut.showAndHidden }}
{{
shortCutChange
? "输入快捷组合键"
: config.perf.shortCut.showAndHidden
}}
</div>
</div>
<div class="settings-item-li">
<!-- <div class="settings-item-li">
<div class="label">插件分离快捷键</div>
<div
class="value"
......@@ -51,8 +56,8 @@
>
{{ config.perf.shortCut.separate }}
</div>
</div>
<div class="settings-item-li">
</div> -->
<!-- <div class="settings-item-li">
<div class="label">返回主界面</div>
<div
class="value"
......@@ -61,14 +66,15 @@
>
{{ config.perf.shortCut.quit }}
</div>
</div>
</div> -->
</div>
<div class="setting-item">
<div class="title">通用</div>
<div class="settings-item-li">
<div class="label">开机启动</div>
<a-switch
v-model:checked="config.perf.common.start"
:default-checked="config.perf.common.start"
@change="changeStart"
checked-children="开"
un-checked-children="关"
></a-switch>
......@@ -76,7 +82,8 @@
<div class="settings-item-li">
<div class="label">空格执行</div>
<a-switch
v-model:checked="config.perf.common.space"
:default-checked="config.perf.common.space"
@change="changeSpace"
checked-children="开"
un-checked-children="关"
></a-switch>
......@@ -87,7 +94,8 @@
<div class="settings-item-li">
<div class="label">搜索启动应用&文件</div>
<a-switch
v-model:checked="config.perf.local.search"
:default-checked="config.perf.local.search"
@change="changeSearch"
checked-children="开"
un-checked-children="关"
></a-switch>
......@@ -184,6 +192,7 @@ export default {
currentSelect: [3],
config: { ...opConfig.get() },
signLoading: false,
shortCutChange: false,
examples: [
{
title: "快捷键 「 Alt + W」 关键字 「 微信」",
......@@ -210,6 +219,18 @@ export default {
created() {},
methods: {
...mapMutations("main", ["setUserInfo"]),
changeStart(v) {
this.config.perf.common.start = v;
this.saveConfig();
},
changeSpace(v) {
this.config.perf.common.space = v;
this.saveConfig();
},
changeSearch(v) {
this.config.perf.local.search = v;
this.saveConfig();
},
login() {
this.signLoading = true;
setTimeout(() => {
......@@ -224,27 +245,30 @@ export default {
ipcRenderer.send("logout");
},
changeShortCut(e, key) {
let change = false;
// let change = false;
if (e.altKey && e.keyCode !== 18) {
const compose = `Option+${keycodes[e.keyCode].toUpperCase()}`;
this.config.perf.shortCut[key] = compose;
change = true;
// change = true;
}
if (e.ctrlKey && e.keyCode !== 17) {
const compose = `Ctrl+${keycodes[e.keyCode].toUpperCase()}`;
this.config.perf.shortCut[key] = compose;
change = true;
// change = true;
}
if (e.shiftKey && e.keyCode !== 16) {
const compose = `Shift+${keycodes[e.keyCode].toUpperCase()}`;
this.config.perf.shortCut[key] = compose;
change = true;
// change = true;
}
if (e.metaKey && e.keyCode !== 93) {
const compose = `Command+${keycodes[e.keyCode].toUpperCase()}`;
this.config.perf.shortCut[key] = compose;
change = true;
// change = true;
}
this.saveConfig();
this.config = { ...opConfig.get() };
this.shortCutChange = false;
},
addConfig() {
this.config.global.push({
......@@ -279,26 +303,21 @@ export default {
},
changeGlobalValue(index, value) {
this.$set(this.config.global[index], "value", value);
}
},
watch: {
config: {
deep: true,
handler() {
saveConfig() {
opConfig.set("perf", this.config.perf);
opConfig.set("superPanel", this.config.superPanel);
opConfig.set("global", this.config.global);
ipcRenderer.send("re-register");
}
}
}
};
</script>
<style lang="less">
@import "../../../assets/style/varable.less";
.pg-settings {
height: calc(~"100vh - 128px");
height: calc(~"100vh - 120px");
overflow: auto;
.dev-detail {
height: 100%;
......
......@@ -172,6 +172,16 @@ const state = {
})()
};
const getters = {
dingApp(state, getters) {
return [
...state.devPlugins.filter(plugin => {
return plugin.ding === true;
})
];
}
};
const mutations = {
changeMode(state, val) {
state.mode = val;
......@@ -280,7 +290,7 @@ const actions = {
/**
* @param {Object} payload payload.filePath为配置文件的绝对路径。payload.value为搜索栏文字值。
*/
async onSearch({ commit }, payload) {
async onSearch({ commit, getters }, payload) {
if (state.selected && state.selected.key !== "plugin-container") {
commit("commonUpdate", { searchValue: "" });
return;
......@@ -442,7 +452,7 @@ const actions = {
options
});
ipcRenderer.send("changeWindowSize-rubick", {
height: getWindowHeight(state.options)
height: getWindowHeight(state.options, getters.dingApp)
});
},
async downloadPlugin({ commit }, payload) {
......@@ -510,8 +520,6 @@ const actions = {
if (index !== -1) {
devPlugins[index] = pluginConfig;
}
console.log(111, devPlugins);
commit("commonUpdate", {
devPlugins: devPlugins
});
......@@ -580,6 +588,7 @@ const actions = {
export default {
namespaced: true,
state,
getters,
mutations,
actions
};
......@@ -62,7 +62,7 @@
text-decoration: none;
cursor: pointer;
position: relative;
border-bottom: 1px dashed;
border-bottom: 1px dashed #fc5531;
padding-bottom: 2px;
box-sizing: border-box;
color: inherit;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册