'debug:调试代码编辑器'
This commit is contained in:
parent
612c6e03f9
commit
25395415c1
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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>;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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>)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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: [
|
||||||
|
|
|
||||||
31771
pnpm-lock.yaml
31771
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue