feat:backup

This commit is contained in:
1708-huayu 2024-09-10 19:12:24 +08:00
parent 72310d3278
commit 5d83324f50
39 changed files with 921 additions and 502 deletions

3
.gitignore vendored
View File

@ -2,4 +2,5 @@ node_modules/
rpm-4.18.0 rpm-4.18.0
out/ out/
ueditor-1.4.3.3/ ueditor-1.4.3.3/
ueditor/ ueditor/
asset-manifest.json

1
.npmrc
View File

@ -1 +0,0 @@
registry=https://registry.npm.taobao.org/

View File

@ -21,8 +21,8 @@ module.exports = {
configure: (webpackConfig, { env, paths }) => { configure: (webpackConfig, { env, paths }) => {
// 修改output.publicPath为'./' // 修改output.publicPath为'./'
// webpackConfig.output.publicPath = './'; // webpackConfig.output.publicPath = './';
webpackConfig.output.path = path.join(__dirname,); webpackConfig.output.path = path.join(__dirname,"/build");
webpackConfig.output.publicPath = ""; webpackConfig.output.publicPath = "./";
// webpackConfig.output.module // webpackConfig.output.module
// .rule("icons") // .rule("icons")
// .test(/\.svg$/) // .test(/\.svg$/)

1334
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -19,7 +19,7 @@
"@testing-library/jest-dom": "^5.16.5", "@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0", "@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0", "@testing-library/user-event": "^13.5.0",
"antd": "^4.24.8", "antd": "5.17.0",
"axios": "^1.3.3", "axios": "^1.3.3",
"concurrently": "^4.1.1", "concurrently": "^4.1.1",
"craco-less": "^2.0.0", "craco-less": "^2.0.0",
@ -52,10 +52,13 @@
"make": "electron-forge make" "make": "electron-forge make"
}, },
"dependencies": { "dependencies": {
"@ant-design/icons": "^5.3.7",
"cos-nodejs-sdk-v5": "^2.13.3", "cos-nodejs-sdk-v5": "^2.13.3",
"electron-is-dev": "^1.1.0", "electron-is-dev": "^1.1.0",
"electron-squirrel-startup": "^1.0.0", "electron-squirrel-startup": "^1.0.0",
"electron-store": "^8.1.0", "electron-store": "^8.1.0",
"less": "^4.2.0",
"less-loader": "^12.2.0",
"md5": "^2.3.0", "md5": "^2.3.0",
"mousetrap": "^1.6.5", "mousetrap": "^1.6.5",
"redux-persist": "^6.0.0" "redux-persist": "^6.0.0"

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -10,4 +10,11 @@ node version manage
## npm ## npm
node package manage node package manage
## nrm ## nrm
node remote manage npm remote manage nrm
npm install -g nrm
jpg转iconhttps://cn.pic2ico.com/
1. npm build 将react应用打包为html
2. 将打包出来的文件放到根目录下
3. npm package 将项目打包

View File

@ -1,7 +1,6 @@
import React from 'react'; import React from 'react';
import {Menu} from 'antd';
import {useDispatch} from "react-redux"; import {useDispatch} from "react-redux";
import {dirRemove} from "../../../redux/dirMessage_reducer"; import {dirRemove} from "@/redux/dirMessage_reducer";
function CloseDir (prop) { function CloseDir (prop) {
console.log("prop",prop) console.log("prop",prop)

View File

@ -1,10 +1,10 @@
import React, {useRef, useState} from 'react'; import React, {useRef, useState} from 'react';
import {Input, message, Modal} from 'antd'; import {Input, message, Modal} from 'antd';
import {useDispatch, useSelector} from "react-redux"; import {useDispatch, useSelector} from "react-redux";
import {newDir} from "../../../utils/File"; import {newDir} from "@/utils/File";
import {dirDirAdd} from "../../../redux/dirMessage_reducer"; import {dirDirAdd} from "@/redux/dirMessage_reducer";
import {isEmpty} from "../../../utils/ObjectUtils"; import {isEmpty} from "@/utils/ObjectUtils";
import {fileDirFormat} from "../../../utils/PathOperate"; import {fileDirFormat} from "@/utils/PathOperate";
const DirAddDir = (prop) => { const DirAddDir = (prop) => {
console.log("prop",prop) console.log("prop",prop)

View File

@ -1,11 +1,11 @@
import React, {useRef, useState} from 'react'; import React, {useRef, useState} from 'react';
import {Input, message, Modal} from 'antd'; import {Input, message, Modal} from 'antd';
import {useDispatch, useSelector} from "react-redux"; import {useDispatch, useSelector} from "react-redux";
import {newFile} from "../../../utils/File"; import {newFile} from "@/utils/File";
import {dirFileAdd} from "../../../redux/dirMessage_reducer"; import {dirFileAdd} from "@/redux/dirMessage_reducer";
import {addTableBarItem} from "../../../redux/tableBarItem_reducer"; import {addTableBarItem} from "@/redux/tableBarItem_reducer";
import {isEmpty} from "../../../utils/ObjectUtils"; import {isEmpty} from "@/utils/ObjectUtils";
import {fileNameFormat, fullFileNameFormat} from "../../../utils/PathOperate"; import {fileNameFormat, fullFileNameFormat} from "@/utils/PathOperate";
const DirAddFile = (prop) => { const DirAddFile = (prop) => {
console.log("prop",prop) console.log("prop",prop)

View File

@ -1,9 +1,9 @@
import React from 'react'; import React from 'react';
import {Popconfirm} from 'antd'; import {Popconfirm} from 'antd';
import {deleteFileAndDir} from "../../../utils/File"; import {deleteFileAndDir} from "@/utils/File";
import {useDispatch, useSelector} from "react-redux"; import {useDispatch, useSelector} from "react-redux";
import {dirFileRemove} from "../../../redux/dirMessage_reducer"; import {dirFileRemove} from "@/redux/dirMessage_reducer";
import {removeTableBarItem, setActiveKey} from "../../../redux/tableBarItem_reducer"; import {removeTableBarItem, setActiveKey} from "@/redux/tableBarItem_reducer";
const DirDeleteFile = (prop) => { const DirDeleteFile = (prop) => {
console.log("prop",prop) console.log("prop",prop)
const dispatch= useDispatch() const dispatch= useDispatch()

View File

@ -0,0 +1,6 @@
import React from 'react';
import {openInDir} from "@/utils/File"
const OpenInDir = (prop) => {
return <a className="menuItemClick" onClick={()=>openInDir(prop)}>文件夹中打开</a>
};
export default OpenInDir;

View File

@ -1,10 +1,10 @@
import React, {useRef, useState} from 'react'; import React, {useRef, useState} from 'react';
import {Input, Menu, Modal} from 'antd'; import {Input, Menu, Modal} from 'antd';
import {updateFileName} from "../../../utils/File"; import {updateFileName} from "@/utils/File";
import {useDispatch} from "react-redux"; import {useDispatch} from "react-redux";
import {updateFileName as updateFileNameRedux} from "../../../redux/dirMessage_reducer"; import {updateFileName as updateFileNameRedux} from "../../../redux/dirMessage_reducer";
import {updateFileName as updateFileNameBar} from "../../../redux/tableBarItem_reducer"; import {updateFileName as updateFileNameBar} from "../../../redux/tableBarItem_reducer";
import {replaceFileNameByFilePath} from "../../../utils/PathOperate"; import {replaceFileNameByFilePath} from "@/utils/PathOperate";
const UpdateFileName = (prop) => { const UpdateFileName = (prop) => {
console.log("prop",prop) console.log("prop",prop)

View File

@ -2,13 +2,13 @@ import React, {Fragment, useEffect, useMemo, useState} from 'react';
import {Input, Menu, Tree} from 'antd'; import {Input, Menu, Tree} from 'antd';
import {FolderOutlined, FileMarkdownOutlined, FileOutlined} from '@ant-design/icons'; import {FolderOutlined, FileMarkdownOutlined, FileOutlined} from '@ant-design/icons';
import "./index.less" import "./index.less"
import {getFileDirByPath, getFileFullNameByPath, getFileNameByPath} from "../../utils/PathOperate"; import {getFileDirByPath, getFileFullNameByPath, getFileNameByPath} from "@/utils/PathOperate";
const {Search} = Input; const {Search} = Input;
import {useSelector, useDispatch} from "react-redux"; import {useSelector, useDispatch} from "react-redux";
import {addExpandedKeys, addTableBarItem, setExpandedKeys} from "../../redux/tableBarItem_reducer"; import {addExpandedKeys, addTableBarItem, setExpandedKeys} from "@/redux/tableBarItem_reducer";
import {readDir} from "../../utils/File"; import {readDir} from "@/utils/File";
import {nextDirAdd,refreshDir as refreshDirReducer} from "../../redux/dirMessage_reducer"; import {nextDirAdd,refreshDir as refreshDirReducer} from "../../redux/dirMessage_reducer";
import {isEmpty} from "../../utils/ObjectUtils"; import {isEmpty} from "@/utils/ObjectUtils";
import UpdateFileName from "./UpdateFileName"; import UpdateFileName from "./UpdateFileName";
import RefreshDir from "./RefreshDir"; import RefreshDir from "./RefreshDir";
import CloseDir from "./CloseDir"; import CloseDir from "./CloseDir";
@ -17,6 +17,7 @@ import DirDeleteFile from "./DirDeleteFile";
import DirAddDir from "./DirAddDir"; import DirAddDir from "./DirAddDir";
import {createPortal} from "react-dom"; import {createPortal} from "react-dom";
import {isArray} from "@craco/craco/lib/utils"; import {isArray} from "@craco/craco/lib/utils";
import OpenInDir from "@/components/ItemTree/OpenInDir";
// //
const dataList = []; const dataList = [];
const generateList = (data) => { const generateList = (data) => {
@ -319,6 +320,7 @@ const ItemTree = (prop) => {
menuItem.push(getMenuItem('5',<UpdateFileName fileName={title} filePath={key}/>)) menuItem.push(getMenuItem('5',<UpdateFileName fileName={title} filePath={key}/>))
menuItem.push(getMenuItem('6',<DirDeleteFile filePath={key} />)) menuItem.push(getMenuItem('6',<DirDeleteFile filePath={key} />))
} }
menuItem.push(getMenuItem('7',<OpenInDir filePath={key} />))
return <Fragment> return <Fragment>
{createPortal( {createPortal(
<Menu style={tmpStyle} onClick={e => <Menu style={tmpStyle} onClick={e =>

0
src/pages/Note/Hlexical/images/icons/camera.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 613 B

After

Width:  |  Height:  |  Size: 613 B

View File

Before

Width:  |  Height:  |  Size: 708 B

After

Width:  |  Height:  |  Size: 708 B

0
src/pages/Note/Hlexical/images/icons/clipboard.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 469 B

After

Width:  |  Height:  |  Size: 469 B

0
src/pages/Note/Hlexical/images/icons/code.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 338 B

0
src/pages/Note/Hlexical/images/icons/download.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 400 B

0
src/pages/Note/Hlexical/images/icons/gear.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

0
src/pages/Note/Hlexical/images/icons/journal-code.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 742 B

After

Width:  |  Height:  |  Size: 742 B

0
src/pages/Note/Hlexical/images/icons/journal-text.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 729 B

0
src/pages/Note/Hlexical/images/icons/link.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 376 B

After

Width:  |  Height:  |  Size: 376 B

0
src/pages/Note/Hlexical/images/icons/list-ol.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 956 B

0
src/pages/Note/Hlexical/images/icons/list-ul.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 423 B

After

Width:  |  Height:  |  Size: 423 B

0
src/pages/Note/Hlexical/images/icons/pencil-fill.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 565 B

After

Width:  |  Height:  |  Size: 565 B

View File

Before

Width:  |  Height:  |  Size: 393 B

After

Width:  |  Height:  |  Size: 393 B

0
src/pages/Note/Hlexical/images/icons/type-bold.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 446 B

0
src/pages/Note/Hlexical/images/icons/type-h1.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 258 B

After

Width:  |  Height:  |  Size: 258 B

0
src/pages/Note/Hlexical/images/icons/type-h2.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 458 B

After

Width:  |  Height:  |  Size: 458 B

0
src/pages/Note/Hlexical/images/icons/type-h3.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 622 B

After

Width:  |  Height:  |  Size: 622 B

0
src/pages/Note/Hlexical/images/icons/type-h4.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 304 B

After

Width:  |  Height:  |  Size: 304 B

0
src/pages/Note/Hlexical/images/icons/type-h5.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 595 B

After

Width:  |  Height:  |  Size: 595 B

0
src/pages/Note/Hlexical/images/icons/type-h6.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

0
src/pages/Note/Hlexical/images/icons/type-italic.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 327 B

View File

Before

Width:  |  Height:  |  Size: 555 B

After

Width:  |  Height:  |  Size: 555 B

View File

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 310 B

View File

@ -31,7 +31,8 @@ import TableCellActionMenuPlugin from '@/pages/Note/Hlexical/plugins/TableAction
import ExcalidrawPlugin from "@/pages/Note/Hlexical/plugins/ExcalidrawPlugin"; import ExcalidrawPlugin from "@/pages/Note/Hlexical/plugins/ExcalidrawPlugin";
import TableOfContentsPlugin from "@/pages/Note/Hlexical/plugins/TableOfContentsPlugin"; import TableOfContentsPlugin from "@/pages/Note/Hlexical/plugins/TableOfContentsPlugin";
import ContextMenuPlugin from "@/pages/Note/Hlexical/plugins/ContextMenuPlugin" import ContextMenuPlugin from "@/pages/Note/Hlexical/plugins/ContextMenuPlugin"
import {Spin} from "antd"; import {Spin,FloatButton } from "antd";
import { CommentOutlined, CustomerServiceOutlined } from '@ant-design/icons';
import {useState} from "react"; import {useState} from "react";
import DragDropPaste from "@/pages/Note/Hlexical/plugins/DragDropPastePlugin"; import DragDropPaste from "@/pages/Note/Hlexical/plugins/DragDropPastePlugin";
import TreeViewPlugin from "@/pages/Note/Hlexical/plugins/TreeViewPlugin"; import TreeViewPlugin from "@/pages/Note/Hlexical/plugins/TreeViewPlugin";
@ -114,6 +115,17 @@ export default function Hlexical(props) {
<SaveFilePlugin filePath={props.filePath}/> <SaveFilePlugin filePath={props.filePath}/>
{/*文件操作导入文件*/} {/*文件操作导入文件*/}
{/*<ActionPlugin/>*/} {/*<ActionPlugin/>*/}
<FloatButton.Group
trigger="hover"
type="primary"
style={{
right: 94,
}}
icon={<CustomerServiceOutlined />}
>
<FloatButton />
<FloatButton icon={<CommentOutlined />} />
</FloatButton.Group>
</div> </div>
</div> </div>

View File

@ -1,5 +1,5 @@
const fs = window.require("fs").promises const fs = window.require("fs").promises
const {ipcRenderer} = window.require('electron') const {ipcRenderer,dialog} = window.require('electron')
const pathOp = window.require("path") const pathOp = window.require("path")
export async function readDir(filePath){ export async function readDir(filePath){
const files = await fs.readdir(filePath); const files = await fs.readdir(filePath);
@ -51,4 +51,8 @@ export async function updateFileName(oldFileName,newFileName){
export async function saveFileWithName(){ export async function saveFileWithName(){
return ipcRenderer.invoke("saveFileWithName" ) return ipcRenderer.invoke("saveFileWithName" )
}
export async function openInDir(filePath){
return dialog.showOpenDialog({defaultPath:"filePath",properties: ['openDirectory']} )
} }