'debug:调试代码编辑器'

This commit is contained in:
zjc 2023-07-08 17:58:00 +08:00
parent 612c6e03f9
commit 25395415c1
8 changed files with 13035 additions and 18879 deletions

View File

@ -35,6 +35,7 @@
"mobx": "^6.9.0", "mobx": "^6.9.0",
"mobx-react": "^7.6.0", "mobx-react": "^7.6.0",
"mobx-react-lite": "^3.4.3", "mobx-react-lite": "^3.4.3",
"monaco-editor": "^0.40.0",
"qs": "^6.11.0", "qs": "^6.11.0",
"react": "^16.14.0", "react": "^16.14.0",
"react-beautiful-dnd": "^13.0.0", "react-beautiful-dnd": "^13.0.0",
@ -46,12 +47,14 @@
"react-dom": "^16.14.0", "react-dom": "^16.14.0",
"react-draft-wysiwyg": "^1.14.5", "react-draft-wysiwyg": "^1.14.5",
"react-loadable": "^5.5.0", "react-loadable": "^5.5.0",
"react-monaco-editor": "^0.53.0",
"react-router-dom": "^5.1.2", "react-router-dom": "^5.1.2",
"react-scripts": "3.4.1", "react-scripts": "3.4.1",
"react-transition-group": "^4.4.1", "react-transition-group": "^4.4.1",
"redux-thunk": "^2.3.0", "redux-thunk": "^2.3.0",
"tslib": "^2.6.0", "tslib": "^2.6.0",
"typescript": "~4.2.3" "typescript": "~4.2.3",
"vite-plugin-monaco-editor": "^1.1.0"
}, },
"devDependencies": { "devDependencies": {
"@types/lodash": "^4.14.195", "@types/lodash": "^4.14.195",

View File

@ -0,0 +1,47 @@
import React, {ChangeEvent, Component} from "react";
import {Input, InputNumber, Switch} from "antd";
import style from "./Http.module.less"
import MonacoEditor from 'react-monaco-editor';
// import "monaco-editor/min/vs/editor/editor.main.css"
// import scheme from "monaco-editor/min/vs/basic-languages/scheme/scheme"
// import js from "monaco-editor/min/vs/basic-languages/javascript/javascript"
// import "monaco-editor/min/vs/language/css/cssWorker"
class Body extends Component<HttpProps<BodyData>,HttpState<BodyData>>{
constructor(props:HttpProps<BodyData>) {
super(props);
this.state = {
options:Object.assign({},this.props.data)
}
}
editorDidMount(editor, monaco) {
console.log('editorDidMount', editor);
editor.focus();
}
onChange(newValue, e) {
console.log('onChange', newValue, e);
}
render() {
const options = {
selectOnLineNumbers: true,
language:"javascript",
theme:"vs-dark"
};
const code = this.state.options.code
return <div >
body
<div>
<MonacoEditor
width="800"
height="600"
language="javascript"
theme="vs-dark"
value={code}
options={options}
onChange={this.onChange}
editorDidMount={this.editorDidMount}
/>
</div>
</div>;
}
}
export default Body

View File

@ -1,22 +1,50 @@
import {Component} from "react"; import {ChangeEvent, Component} from "react";
import {Input} from "antd"; import {Input, InputNumber} from "antd";
import style from "./Http.module.less" import style from "./Http.module.less"
class Host extends Component<any,any>{ class Host extends Component<HttpProps<HostData>,HttpState<HostData>>{
constructor(props:HttpProps<HostData>) {
super(props);
this.state = {
options:Object.assign({},this.props.data)
}
}
domChange(e:ChangeEvent<HTMLInputElement>,key:string){
const value = e.target.value
const options = this.state.options
options[key] =value
this.setState({options:Object.assign({},{...this.state.options},options)})
this.change()
}
valueChange(value:string|number|boolean,key:string){
const options = this.state.options
options[key] =value
this.setState({options:Object.assign({},{...this.state.options},options)})
this.change()
}
change(){
this.props.onchange("options",this.state.options)
}
render() { render() {
return <div> return <div>
<div className={style.HttpFLex}> <div className={style.HttpFLex}>
<span className={style.HttpLabel}></span> <span className={style.HttpLabel}></span>
<span className={style.HttpFLex1}><Input placeholder="" /></span> <span className={style.HttpFLex1}><Input value={this.state.options.agreement} onChange={(e)=>this.domChange(e,"agreement")} placeholder="" /></span>
</div> </div>
<div className={style.HttpFLex}> <div className={style.HttpFLex}>
<span className={style.HttpLabel}></span> <span className={style.HttpLabel}></span>
<span className={style.HttpFLex1}><Input placeholder="" /></span> <span className={style.HttpFLex1}><Input value={this.state.options.host} onChange={(e)=>this.domChange(e,"host")} placeholder="" /></span>
</div> </div>
<div className={style.HttpFLex}> <div className={style.HttpFLex}>
<span className={style.HttpLabel}></span> <span className={style.HttpLabel}></span>
<span className={style.HttpFLex1}><Input placeholder="" /></span> <span className={style.HttpFLex1} style={{width:"100%"}}>
<InputNumber
style={{width:"100%"}}
value={this.state.options.port}
onChange={(e)=>this.valueChange(e,"port")} placeholder="" />
</span>
</div> </div>
</div>; </div>;

View File

@ -10,14 +10,14 @@ const defaultData:OptionsData = {
} }
class Options extends Component<HttpOptionsProps,any>{ class Options extends Component<HttpProps<OptionsData>,HttpState<OptionsData>>{
constructor(props:HttpOptionsProps) { constructor(props:HttpProps<OptionsData>) {
super(props); super(props);
this.state = { this.state = {
options:Object.assign({},defaultData,this.props.data) options:Object.assign({},defaultData,this.props.data)
} }
} }
domChange(e:ChangeEvent<HTMLInputElement>,key:string){ domChange(e:ChangeEvent<HTMLInputElement>,key:OptionsDataType){
const value = e.target.value const value = e.target.value
const options = this.state.options const options = this.state.options
options[key] =value options[key] =value

View File

@ -11,6 +11,7 @@ import Extract from "@/component/step/http/Extract";
import Options from "@/component/step/http/Options"; import Options from "@/component/step/http/Options";
import style from "@/component/step/http/Http.module.less"; import style from "@/component/step/http/Http.module.less";
import {stepProps} from "@/component/step/type"; import {stepProps} from "@/component/step/type";
import Body from "./Body";
interface State { interface State {
data:HttpData data:HttpData
@ -53,7 +54,7 @@ class HttpEditComponent extends Component<stepProps, State> {
key: 'Host', key: 'Host',
label: `Host`, label: `Host`,
closable: false, closable: false,
children: <Host/>, children: <Host data={this.state.data.host} onchange={this.onChange} />,
}, },
{ {
key: 'Headers', key: 'Headers',
@ -66,6 +67,11 @@ class HttpEditComponent extends Component<stepProps, State> {
label: `Params`, label: `Params`,
closable: false, closable: false,
children: <Params/>, children: <Params/>,
},{
key: 'Body',
label: `Body`,
closable: false,
children: <Body data={this.state.data.body} onchange={this.onChange}/>,
}, { }, {
key: 'Path', key: 'Path',
label: `Path`, label: `Path`,
@ -125,7 +131,7 @@ class HttpEditComponent extends Component<stepProps, State> {
return (<div> return (<div>
{this.HttpMetod()} {this.HttpMetod()}
<div className={style.HttpTab}> <div className={style.HttpTab}>
<Tabs defaultActiveKey="Options" type="editable-card" items={this.items()} onChange={this.tabChange}/> <Tabs defaultActiveKey="Body" type="editable-card" items={this.items()} onChange={this.tabChange}/>
</div> </div>
</div>) </div>)
} }

View File

@ -12,9 +12,12 @@ interface HttpChilProps{
data:allData data:allData
onchange:(data:HttpMethod)=>void onchange:(data:HttpMethod)=>void
} }
interface HttpOptionsProps{ interface HttpProps<T extends allData>{
data:OptionsData data:T
onchange:(key:string,data:HttpMethod)=>void onchange:(key:string,data:T)=>void
}
interface HttpState<T extends allData>{
options:T
} }
interface HttpData { interface HttpData {
@ -26,11 +29,19 @@ interface HttpData {
check:CheckData check:CheckData
options:OptionsData options:OptionsData
extract:ExtractData extract:ExtractData
body:BodyData
[key:string]:allData [key:string]:allData
} }
interface HostData { interface HostData {
agreement:string
port:number
host:string
} }
type HostDataType = keyof HostData
interface BodyData {
code:string
}
type BodyDataType = keyof BodyData
interface CheckData { interface CheckData {
} }
@ -46,13 +57,15 @@ interface BeforeRequestData {
interface ResponseData { interface ResponseData {
} }
interface OptionsData {
type OptionsData = {
code:string code:string
uploadType:string uploadType:string
requestSwitch:boolean requestSwitch:boolean
timeout:number timeout:number
redirect:boolean redirect:boolean
} }
type OptionsDataType = keyof OptionsData
interface ExtractData { interface ExtractData {
} }

View File

@ -6,6 +6,7 @@ import React from '@vitejs/plugin-react'
import qiankun from "vite-plugin-qiankun" import qiankun from "vite-plugin-qiankun"
// @ts-ignore // @ts-ignore
import path, {resolve} from 'path' import path, {resolve} from 'path'
import monacoEditorPlugin from "vite-plugin-monaco-editor"
const pathResolve = (dir: string): any => { const pathResolve = (dir: string): any => {
return resolve(__dirname, dir) return resolve(__dirname, dir)
@ -52,6 +53,9 @@ export default ({command}: ConfigEnv): UserConfigExport => {
} }
}, },
plugins: [ plugins: [
monacoEditorPlugin({
languageWorkers:["json","typescript","editorWorkerService"],
}),
React({ React({
babel: { babel: {
plugins: [ plugins: [

File diff suppressed because it is too large Load Diff