Api文档
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

134 lines
4.3 KiB

<?php
use Sc\Util\HtmlElement\El;
use Sc\Util\HtmlStructure\Html\Html;
use Sc\Util\HtmlStructure\Html\Js\JsFunc;
Html::create("Api文档");
Html::loadThemeResource('ElementUI');
Html::css()->load('https://unpkg.com/codemirror@5.65.17/lib/codemirror.css');
Html::css()->load('https://unpkg.com/codemirror@5.65.17/theme/material.css');
Html::css()->load('https://unpkg.com/codemirror@5.65.17/addon/hint/show-hint.css');
Html::css()->load('https://unpkg.com/codemirror@5.65.17/addon/lint/lint.css');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/lib/codemirror.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/mode/javascript/javascript.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/addon/hint/show-hint.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/addon/edit/closebrackets.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/addon/hint/javascript-hint.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/addon/lint/lint.js');
Html::js()->load('https://unpkg.com/codemirror@5.65.17/addon/lint/javascript-lint.js');
Html::js()->load('https://unpkg.com/jshint@2.13.2/dist/jshint.js');
Html::css()->addCss(<<<CSS
.CodeMirror{
height: calc(100vh - 20px);
border-top: 1px solid black; border-bottom: 1px solid black;
}
.CodeMirror pre > * {
text-indent: 0;
}
CSS);
$el = El::fromCode('<textarea id="ss"></textarea>');
$code = El::text(<<<JS
// =========================================
// 请求代码,可以修改其中代码发起自定义的请求
// =========================================
let url = request.url;
let method = request.method;
let data = request.data;
let dp = method === 'get' || method === 'GET' ? 'params' : 'data';
axios({
url: url,
method: method,
[dp]: data,
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + localStorage.getItem('token')
}
}).then(({data}) => {
this.setResponse(data);
if (typeof data !== 'object'){
return;
}
if(data.code === 1001){
localStorage.setItem('token', data.data.token);
}else if(data.data.hasOwnProperty('token')){
localStorage.setItem('token', data.data.token.token);
}
}).catch(error => {
this.setResponse(error.response.data);
})
JS
)->setRetraction(0);
Html::html()->append(
El::double('script')
->setId("requestCode")
->setRetraction(-4)
->setAttr('type', 'text/html')
->append($code)
);
Html::js()->vue->addMethod("init", JsFunc::anonymous()->code(<<<JS
let script = document.getElementById('ss');
this.requestScriptEditor = CodeMirror.fromTextArea(script, {
lineNumbers: true,
mode: 'text/javascript',
theme: 'material',
styleActiveLine: true,
lineWrapping: true,
matchBrackets: true,
autoCloseBrackets: true,
lint: {options: {esversion: 2021}},
hintOptions: {
completeSingle: false
}
});
this.\$nextTick(() => {
if (!localStorage.getItem('requestCode')){
localStorage.setItem('requestCode', document.getElementById('requestCode').innerText);
}
this.requestScriptEditor.setValue(localStorage.getItem('requestCode'));
this.requestScriptEditor.refresh();
});
this.requestScriptEditor.on('change', (codemirror,pos) => {
codemirror.refresh()
let char = '';
if (pos.origin === '+input' || pos.origin === '*compose'){
char = pos.text[0].substr(-1)
}else if (pos.origin === '+delete'){
let lineText = codemirror.getLine(pos.from.line);
// 确保光标位置在有效范围内
if (pos.from.ch - 1 < lineText.length) {
// 获取光标所在位置的字符
char = lineText.charAt(pos.from.ch - 1);
}
}
if (/\w/.test(char)){
this.requestScriptEditor.showHint();
}
localStorage.setItem('requestCode', this.requestScriptEditor.getValue());
});
let charWidth = this.requestScriptEditor.defaultCharWidth(), basePadding = 4;
this.requestScriptEditor.on("renderLine", function(cm, line, elt) {
var off = CodeMirror.countColumn(line.text, null, cm.getOption("tabSize")) * charWidth;
elt.style.textIndent = "-" + off + "px";
elt.style.paddingLeft = (basePadding + off) + "px";
});
JS
));
Html::js()->vue->event('mounted', 'this.init()');
return $el;