Browse Source

Merge branch 'master' of https://gitee.com/godoos/godoos

master
godo 6 months ago
parent
commit
a6ff725478
  1. 1
      frontend/components.d.ts
  2. 1
      frontend/src/components.d.ts
  3. 17
      frontend/src/components/window/IframeFile.vue
  4. 54
      frontend/src/components/window/MenuFooter.vue
  5. 18
      frontend/src/components/window/WindowTemplate.vue
  6. 26
      frontend/src/stores/choose.ts
  7. 6
      frontend/src/system/window/BrowserWindow.ts

1
frontend/components.d.ts

@ -115,6 +115,7 @@ declare module 'vue' {
LockDesktop: typeof import('./src/components/desktop/LockDesktop.vue')['default']
Magnet: typeof import('./src/components/taskbar/Magnet.vue')['default']
MenuBar: typeof import('./src/components/window/MenuBar.vue')['default']
MenuFooter: typeof import('./src/components/window/MenuFooter.vue')['default']
MenuList: typeof import('./src/components/taskbar/MenuList.vue')['default']
MessageCenterPop: typeof import('./src/components/taskbar/MessageCenterPop.vue')['default']
MessageIcon: typeof import('./src/components/taskbar/MessageIcon.vue')['default']

1
frontend/src/components.d.ts

@ -41,6 +41,7 @@ declare module 'vue' {
LockDesktop: typeof import('./components/desktop/LockDesktop.vue')['default']
Magnet: typeof import('./components/taskbar/startMenu/components/Magnet.vue')['default']
MenuBar: typeof import('./components/window/components/MenuBar.vue')['default']
MenuFooter: typeof import('./components/window/components/MenuFooter.vue')['default']
MenuList: typeof import('./components/taskbar/startMenu/components/MenuList.vue')['default']
MessageCenterPop: typeof import('./components/taskbar/popover/MessageCenterPop.vue')['default']
MessageIcon: typeof import('./components/taskbar/barUnit/MessageIcon.vue')['default']

17
frontend/src/components/window/IframeFile.vue

@ -9,6 +9,7 @@ import { base64ToBuffer, isBase64 } from "@/util/file";
import { isShareFile } from "@/util/sharePath.ts";
import { inject, onMounted, onUnmounted, ref, toRaw } from "vue";
import { askAi } from "@/hook/useAi";
import { useChooseStore } from "@/stores/choose";
const SP = getSplit();
const sys: any = inject<System>("system");
@ -34,9 +35,10 @@ const props = defineProps({
// let currentPath = ref('')
const storeRef = ref<HTMLIFrameElement | null>(null);
let hasInit = false;
const choose = useChooseStore();
const eventHandler = async (e: MessageEvent) => {
const eventData = e.data;
if (eventData.type == props.eventType) {
let data = JSON.parse(eventData.data);
let title = data.title;
@ -51,10 +53,9 @@ const eventHandler = async (e: MessageEvent) => {
if (title.indexOf('.' + ext) > -1) {
title = title.replace('.' + ext, "");
}
// console.log(ext)
// console.log(data)
if (win.config && win.config.path) {
path = win.config.path;
//1
let fileTitleArr = path.split(SP).pop().split(".");
let oldExt = fileTitleArr.pop();
@ -66,6 +67,7 @@ const eventHandler = async (e: MessageEvent) => {
path = path.replace("." + oldExt, "." + ext);
}
} else {
choose.saveFile('选择地址','*')
path = `${SP}C${SP}Users${SP}Desktop${SP}${title}.${ext}`;
}
//
@ -219,15 +221,6 @@ const eventHandler = async (e: MessageEvent) => {
"*"
);
}
// else if (eventData.type == 'aiReciver') {
// storeRef.value?.contentWindow?.postMessage(
// {
// type: eventData.type,
// data: '----AI-----',
// },
// "*"
// );
// }
};
//
const delFileInputPwd = async () => {

54
frontend/src/components/window/MenuFooter.vue

@ -0,0 +1,54 @@
<template>
<div class="menubar">
<div class="file-detail">
<label for="">文件名称</label>
<el-input v-model="fileName"/>
</div>
<el-button @click="cancleSave" type="primary" size="small">取消</el-button>
<el-button @click="saveFile" size="small">保存</el-button>
</div>
</template>
<script lang="ts" setup>
import { BrowserWindow } from "@/system/window/BrowserWindow";
import { UnwrapNestedRefs, ref } from "vue";
// import { emitEvent } from "@/system/event";
const props = defineProps<{
browserWindow: UnwrapNestedRefs<BrowserWindow>;
}>();
let fileName = ref('未命名文件')
//console.log('', props.browserWindow);
function cancleSave() {
props.browserWindow.close()
}
function saveFile() {
}
</script>
<style lang="scss" scoped>
.menubar {
// width: 100%;
height: 70px;
padding: 10px 30px;
background-color: aliceblue;
.file-detail {
width: 100%;
font-size: 14px;
label {
width: 80px;
}
.el-input {
width: calc(100% - 80px);
min-width: 100px;
height: 30px;
}
}
.el-button {
width: 60px;
height: 30px;
float: right;
margin: 5px;
}
}
</style>

18
frontend/src/components/window/WindowTemplate.vue

@ -51,11 +51,14 @@
@mousedown.stop.prevent="startScale($event, border.type)"
@touchstart.stop.passive="startScale($event, border.type)"
></div>
<div class="wintmp_footer" v-if="browserWindow.windowInfo.footer">
<MenuFooter :browser-window="browserWindow"></MenuFooter>
</div>
</div>
</template>
<script lang="ts" setup>
import { useSystem } from "@/system";
import { emitEvent } from "@/system/event";
import { emitEvent } from "@/system/event";""
import {
BrowserWindow,
WindowStateEnum,
@ -76,11 +79,17 @@
browserWindow: UnwrapNestedRefs<BrowserWindow>;
}>();
const browserWindow = props.browserWindow;
// console.log('', browserWindow);
const windowInfo = browserWindow.windowInfo;
provide("browserWindow", browserWindow);
provide("system", sys);
// let filePath = ref(inject('saveFilePath'))
// watch(filePath, (newVal) => {
// console.log('', newVal);
// })
function predown() {
browserWindow.moveTop();
emitEvent("window.content.click", browserWindow);
@ -211,6 +220,9 @@
overflow: hidden;
contain: content;
}
.wintmp_footer {
position: relative;
}
}
.topwin {
@ -232,8 +244,8 @@
transition: left 0.1s ease-in-out, top 0.1s ease-in-out,
width 0.1s ease-in-out, height 0.1s ease-in-out;
}
.disable {
.wintmp_footer,
.wintmp_uper,
.wintmp_main {
pointer-events: none;

26
frontend/src/stores/choose.ts

@ -5,6 +5,7 @@ export const useChooseStore = defineStore('chooseStore', () => {
const win:any = ref()
const path:any = ref([])
const ifShow = ref(false)
//const savePath:any = ref('')
const select = (title = '选择文件', fileExt:any) => {
win.value = new BrowserWindow({
@ -26,6 +27,28 @@ export const useChooseStore = defineStore('chooseStore', () => {
win.value.show()
ifShow.value = true
}
const saveFile = (title: string, fileExt: any) => {
// console.log('保存文件');
win.value = new BrowserWindow({
title,
content: "Computer",
config: {
ext: fileExt,
path: '/'
},
icon: "gallery",
width: 700,
height: 500,
x: 100,
y: 100,
center: true,
minimizable: false,
resizable: true,
footer: true
});
win.value.show()
// ifShow.value = true
}
const close = () => {
ifShow.value = false
win.value.close()
@ -36,7 +59,8 @@ export const useChooseStore = defineStore('chooseStore', () => {
path,
ifShow,
select,
close
close,
saveFile
}
})

6
frontend/src/system/window/BrowserWindow.ts

@ -32,6 +32,7 @@ export interface BrowserWindowConstructorOptions {
alwaysOnTop: boolean;
skipTaskbar: boolean;
backgroundColor: string;
footer: boolean;
}
export interface WindowInfo extends BrowserWindowConstructorOptions {
state: WindowStateEnum;
@ -39,6 +40,7 @@ export interface WindowInfo extends BrowserWindowConstructorOptions {
zindex: number;
isCreated: boolean;
disable: boolean;
footer: boolean;
}
export type BrowserWindowOption = Partial<Omit<BrowserWindowConstructorOptions, 'content'>> & {
content?: BrowserWindowContent;
@ -59,13 +61,14 @@ class BrowserWindow {
alwaysOnTop: false,
skipTaskbar: false,
backgroundColor: '#fff',
footer: false
};
public static defaultInfo: Omit<WindowInfo, keyof BrowserWindowConstructorOptions> = {
state: WindowStateEnum.normal,
istop: false,
zindex: 0,
isCreated: false,
disable: false,
disable: false
};
readonly windowInfo: WindowInfo;
private _option: BrowserWindowConstructorOptions;
@ -111,6 +114,7 @@ class BrowserWindow {
this._builtin = {
previousState: this.windowInfo.state,
};
this.windowInfo.footer = option?.footer || false
}
_setZindex() {

Loading…
Cancel
Save