提交 e835964b 编写于 作者: aaronchen2k2k's avatar aaronchen2k2k

get interpreter info by lang

上级 97c0e46f
......@@ -32,7 +32,8 @@ var (
"commentsTag": "//",
"printGrammar": "console.log(\"#\")",
"interpreter": "C:\\Program Files\\nodejs\\node.exe",
"versionCmd": "node -v",
"whereCmd": "where node",
"versionCmd": "%s -v",
},
"lua": {
"name": "Lua",
......@@ -40,7 +41,8 @@ var (
"commentsTag": "--",
"printGrammar": "print('#')",
"interpreter": "C:\\Program Files (x86)\\Lua\\5.1\\lua.exe",
"versionCmd": "lua -v",
"whereCmd": "where lua",
"versionCmd": "%s -v",
},
"perl": {
"name": "Perl",
......@@ -48,7 +50,8 @@ var (
"commentsTag": "#",
"printGrammar": "print \"#\\n\";",
"interpreter": "C:\\Perl64\\bin\\perl.exe",
"versionCmd": "perl -v",
"whereCmd": "where perl",
"versionCmd": "%s -v",
},
"php": {
"name": "PHP",
......@@ -56,7 +59,8 @@ var (
"commentsTag": "//",
"printGrammar": "echo \"#\\n\";",
"interpreter": "C:\\php-7.3.9-Win32-VC15-x64\\php.exe",
"versionCmd": "php -v",
"whereCmd": "where php",
"versionCmd": "%s -v",
},
"python": {
"name": "Python",
......@@ -64,7 +68,8 @@ var (
"commentsTag": "#",
"printGrammar": "print(\"#\")",
"interpreter": "C:\\Users\\admin\\AppData\\Local\\Programs\\Python\\Python37-32\\python.exe",
"versionCmd": "python --version",
"whereCmd": "where python",
"versionCmd": "%s --version",
},
"ruby": {
"name": "Ruby",
......@@ -72,7 +77,8 @@ var (
"commentsTag": "#",
"printGrammar": "print(\"#\\n\")",
"interpreter": "C:\\Ruby26-x64\\bin\\ruby.exe",
"versionCmd": "ruby -v",
"whereCmd": "where ruby",
"versionCmd": "%s -v",
},
"tcl": {
"name": "TCL",
......@@ -80,7 +86,8 @@ var (
"commentsTag": "#",
"printGrammar": "set hello \"#\"; \n puts [set hello];",
"interpreter": "C:\\ActiveTcl\\bin\\tclsh.exe",
"versionCmd": "echo puts $tcl_version;exit 0 | tclsh",
"whereCmd": "where tclsh",
"versionCmd": "echo puts $tcl_version;exit 0 | %s",
},
}
......
......@@ -26,6 +26,18 @@ func (c *InterpreterCtrl) GetLangSettings(ctx iris.Context) {
ctx.JSON(c.SuccessResp(data))
}
func (c *InterpreterCtrl) GetLangInterpreter(ctx iris.Context) {
language := ctx.URLParam("language")
data, err := c.InterpreterService.GetLangInterpreter(language)
if err != nil {
ctx.JSON(c.ErrResp(commConsts.CommErr, err.Error()))
return
}
ctx.JSON(c.SuccessResp(data))
}
func (c *InterpreterCtrl) List(ctx iris.Context) {
data, err := c.InterpreterService.List()
if err != nil {
......
......@@ -27,6 +27,7 @@ func (m *InterpreterModule) Party() module.WebModule {
index.Delete("/{id:int}", m.InterpreterCtrl.Delete).Name = "删除"
index.Get("/getLangSettings", m.InterpreterCtrl.GetLangSettings).Name = "获取语言配置项"
index.Get("/getLangInterpreter", m.InterpreterCtrl.GetLangInterpreter).Name = "获取语言运行环境"
}
return module.NewModule("/interpreters", handler)
......
......@@ -6,8 +6,10 @@ import (
commConsts "github.com/aaronchen2k/deeptest/internal/comm/consts"
langHelper "github.com/aaronchen2k/deeptest/internal/comm/helper/lang"
fileUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/file"
shellUtils "github.com/aaronchen2k/deeptest/internal/pkg/lib/shell"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/model"
"github.com/aaronchen2k/deeptest/internal/server/modules/v1/repo"
"strings"
)
type InterpreterService struct {
......@@ -70,3 +72,34 @@ func (s *InterpreterService) GetLangSettings() (mp map[string]interface{}, err e
return
}
func (s *InterpreterService) GetLangInterpreter(language string) (mp map[string]interface{}, err error) {
langSettings := commConsts.LangMap[language]
whereCmd := strings.TrimSpace(langSettings["whereCmd"])
versionCmd := strings.TrimSpace(langSettings["versionCmd"])
path := langSettings["interpreter"]
info := ""
if whereCmd == "" {
return
}
output, err := shellUtils.ExeSysCmd(whereCmd)
if err != nil {
return
}
path = output
info, err = shellUtils.ExeSysCmd(fmt.Sprintf(versionCmd, path))
if err != nil {
return
}
mp = map[string]interface{}{}
mp["path"] = path
mp["info"] = info
return
}
......@@ -6,6 +6,9 @@
.t-hidden {
display: none !important;
}
.t-italic {
font-style:italic;
}
.t-link-blue {
cursor: pointer;
color: #1890ff;
......
......@@ -2,26 +2,6 @@ import moment from "moment";
import {AutoTestTools, ScriptLanguages, TestTools, BuildTools} from "@/utils/const";
import request from "@/utils/request";
export async function getInterpreters() {
const json: any = await request({
url: '/interpreters/getLangSettings',
method: 'GET',
})
if (json.code === 0) {
const data = json.data
return data
}
// ScriptLanguages.forEach(name => {
// const key = name.toLowerCase()
// languages.push(key)
// languageMap[key] = {name: name, path: path}
// })
return {languages: [], languageMap: {}}
}
export function getUnitTestFrameworks(): any {
const list = new Array<string>()
const map = {}
......
<template>
<a-form :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item :label="t('script_lang')" v-bind="validateInfos.lang">
<a-select v-model:value="modelRef.lang">
<a-select v-model:value="modelRef.lang" @change="selectLang">
<a-select-option key="" value="">&nbsp;</a-select-option>
<a-select-option v-for="item in languages" :key="item" :value="item">{{ languageMap[item].name }}</a-select-option>
</a-select>
......@@ -19,7 +19,17 @@
<a-input v-if="!isElectron" v-model:value="modelRef.path" spellcheck="false"
@blur="validate('path', { trigger: 'blur' }).catch(() => {})"/>
<span v-if="interpreterPath">例如:{{interpreterPath}}</span>
<div v-if="languageSettings?.path" class="t-italic">
<div>当前{{modelRef.lang}}运行环境:</div>
<div>路径{{languageSettings.path}}</div>
<div>信息{{languageSettings.info}}</div>
</div>
<div v-if="!languageSettings?.path && interpreterPath" class="t-italic">
<div>{{languageMap[modelRef.lang]?.name}}可执行文件的路径类似:</div>
<div>{{interpreterPath}}</div>
</div>
</a-form-item>
<a-form-item :wrapper-col="{ span: wrapperCol.span, offset: labelCol.span }">
......@@ -36,8 +46,8 @@ import {useI18n} from "vue-i18n";
import {validateInfos} from 'ant-design-vue/lib/form/useForm';
import {Form} from 'ant-design-vue';
import {saveInterpreter} from "@/views/interpreter/service";
import {getInterpreters} from "@/utils/testing";
import {getLangInterpreter, saveInterpreter} from "@/views/interpreter/service";
import {getLangSettings} from "../service";
const useForm = Form.useForm;
......@@ -45,6 +55,7 @@ interface EditInterpreterFormSetupData {
t: (key: string | number) => string;
validate: any
validateInfos: validateInfos;
selectLang: (v) => void
selectDir: () => void
save: () => Promise<void>;
reset: () => Promise<void>;
......@@ -53,6 +64,7 @@ interface EditInterpreterFormSetupData {
modelRef: Ref;
languages: Ref<[]>,
languageMap: Ref,
languageSettings: Ref
isElectron: Ref<boolean>;
labelCol: any
......@@ -77,11 +89,12 @@ export default defineComponent({
const {t} = useI18n();
const isElectron = ref(!!window.require)
let languages = ref<any>({})
let languageMap = ref<any>({})
const languages = ref<any>({})
const languageMap = ref<any>({})
const languageSettings = ref({})
const getInterpretersA = async () => {
const data = await getInterpreters()
const data = await getLangSettings()
languages.value = data.languages
languageMap.value = data.languageMap
}
......@@ -104,6 +117,10 @@ export default defineComponent({
const {resetFields, validate, validateInfos} = useForm(modelRef, rulesRef);
const selectLang = async (item) => {
console.log('selectLang', item)
languageSettings.value = await getLangInterpreter(item)
}
const selectDir = () => {
console.log('selectDir')
......@@ -145,12 +162,14 @@ export default defineComponent({
validate,
validateInfos,
modelRef,
selectLang,
selectDir,
save,
reset,
languages,
languageMap,
languageSettings,
labelCol: {span: 6},
wrapperCol: {span: 18},
}
......
......@@ -43,7 +43,7 @@
v-if="formVisible"
:visible="true"
:onCancel="onCancel"
width="600px"
width="800px"
:destroy-on-close="true"
:mask-closable="false"
>
......@@ -65,7 +65,7 @@ import {message, Empty} from 'ant-design-vue';
import EditInterpreterForm from './component/edit.vue';
import {getInterpreters} from "@/utils/testing";
import {getLangSettings} from "./service";
import {listInterpreter, removeInterpreter} from "@/views/interpreter/service";
import {momentUtcDef} from "@/utils/datetime";
......@@ -102,7 +102,7 @@ export default defineComponent({
let languageMap = ref<any>({})
const getInterpretersA = async () => {
const data = await getInterpreters()
const data = await getLangSettings()
languageMap.value = data.languageMap
}
getInterpretersA()
......
......@@ -3,6 +3,36 @@ import request from "@/utils/request";
const apiPath = 'interpreters';
export async function getLangSettings() {
const json: any = await request({
url: '/interpreters/getLangSettings',
method: 'GET',
})
if (json.code === 0) {
const data = json.data
return data
}
return {languages: [], languageMap: {}}
}
export async function getLangInterpreter(lang) {
const params = {language: lang}
const json: any = await request({
url: '/interpreters/getLangInterpreter',
method: 'GET',
params,
})
if (json.code === 0) {
const data = json.data
return data
}
return {path: '', info: ''}
}
export async function listInterpreter(params?: QueryParams): Promise<any> {
return request({
url: `/${apiPath}`,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册