sige 1 year ago
parent
commit
fd54b3f591
  1. 59
      package-lock.json
  2. 3
      package.json
  3. 19
      src/components/ServiceConfiguration.vue
  4. 62
      src/components/ServiceConfigurationActionLog.vue
  5. 1
      src/utils/ApiClient.js

59
package-lock.json

@ -12,6 +12,7 @@
"ant-design-vue": "^4.2.3",
"axios": "^1.7.2",
"core-js": "^3.8.3",
"echarts": "^5.5.1",
"vue": "^3.2.13",
"vue-router": "^4.4.0"
},
@ -5548,6 +5549,20 @@
"node": ">=6.0.0"
}
},
"node_modules/echarts": {
"version": "5.5.1",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
"dependencies": {
"tslib": "2.3.0",
"zrender": "5.6.0"
}
},
"node_modules/echarts/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@ -12650,6 +12665,19 @@
"resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true
},
"node_modules/zrender": {
"version": "5.6.0",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
"dependencies": {
"tslib": "2.3.0"
}
},
"node_modules/zrender/node_modules/tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
},
"dependencies": {
@ -16755,6 +16783,22 @@
"integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
"dev": true
},
"echarts": {
"version": "5.5.1",
"resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.5.1.tgz",
"integrity": "sha512-Fce8upazaAXUVUVsjgV6mBnGuqgO+JNDlcgF79Dksy4+wgGpQB2lmYoO4TSweFg/mZITdpGHomw/cNBJZj1icA==",
"requires": {
"tslib": "2.3.0",
"zrender": "5.6.0"
},
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
}
},
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@ -21942,6 +21986,21 @@
"dev": true
}
}
},
"zrender": {
"version": "5.6.0",
"resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.0.tgz",
"integrity": "sha512-uzgraf4njmmHAbEUxMJ8Oxg+P3fT04O+9p7gY+wJRVxo8Ge+KmYv0WJev945EH4wFuc4OY2NLXz46FZrWS9xJg==",
"requires": {
"tslib": "2.3.0"
},
"dependencies": {
"tslib": {
"version": "2.3.0",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
"integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
}
}
}
}
}

3
package.json

@ -12,6 +12,7 @@
"ant-design-vue": "^4.2.3",
"axios": "^1.7.2",
"core-js": "^3.8.3",
"echarts": "^5.5.1",
"vue": "^3.2.13",
"vue-router": "^4.4.0"
},
@ -41,7 +42,7 @@
},
"rules": {
"no-debugger": "off",
"no-undef" : "off"
"no-undef": "off"
}
},
"browserslist": [

19
src/components/ServiceConfiguration.vue

@ -23,6 +23,7 @@
</a-col>
</a-row>
<div class="p-1">
<a-button class="mr-1" @click="actionServiceParamReset">重置</a-button>
<a-button class="mr-1" @click="actionServiceParamReload">刷新</a-button>
<a-button @click="actionServiceParamSave">保存</a-button>
</div>
@ -31,12 +32,12 @@
<fieldset v-for="(group,groupIndex) in actions" :key="groupIndex" class="border my-1 p-1">
<legend>{{ group.name }}</legend>
<div v-for="action in group.items" :key="action.key" :class="{'inline-block ml-1':0 === action.params.length}">
<a-button v-if="0 === action.params.length" class="my-1"
<a-button v-if="0 === action.params.length" class="my-1 w-64 text-left"
:loading="action.isExecuting"
@click="actionServiceExecute(action)"
>{{ action.name }}</a-button>
<div v-else class="border rounded-md my-1 px-3 bg-white">
<span>{{ action.name }}</span>
<div v-else class="border rounded-md my-1 pr-3 bg-white">
<a-button class="m-1 w-64 text-left" :loading="action.isExecuting" @click="actionServiceExecute(action)">{{ action.name }}</a-button>
<div class="inline-block mx-2" v-for="actionParam in action.params" :key="actionParam.key">
{{ actionParam.name }} :
<a-switch v-if="'java.lang.Boolean' === actionParam.type" v-model:checked="actionParam.value" />
@ -47,7 +48,6 @@
</a-select>
<span v-else>{{ actionParam }}</span>
</div>
<a-button class="m-1" :loading="action.isExecuting" @click="actionServiceExecute(action)">执行</a-button>
</div>
</div>
</fieldset>
@ -149,6 +149,15 @@ async function actionServiceParamSave() {
} catch ( e ) {/** nothing to do here */}
}
// service param reset
async function actionServiceParamReset() {
try {
let client = ApiClient.getClient();
await client.call('service-config/service-params-reset', {serviceKey:props.serviceKey});
await actionServiceParamReload();
} catch ( e ) {/** nothing to do here */}
}
// service actions reload
async function serviceActionReload() {
try {
@ -162,7 +171,7 @@ async function serviceActionReload() {
actions.value.push(group);
}
group.items.push(item);
group.items.sort((a,b) => a.params.length - b.params.length);
group.items.sort((a,b) => b.order - a.order || a.params.length - b.params.length);
}
actions.value.sort((a,b) => a.name.localeCompare(b.name));
} catch ( e ) {/** nothing to do here */}

62
src/components/ServiceConfigurationActionLog.vue

@ -1,5 +1,5 @@
<template>
<div v-if="null !== props.log">
<div v-if="null !== props.log" class="h-full flex flex-col">
<div class="border rounded p-3 whitespace-pre bg-white mb-3">
执行动作 : {{ props.log.action }}
</div>
@ -11,15 +11,73 @@
</div>
</div>
<div class="border rounded p-3 whitespace-pre bg-white mb-3">
<div v-if="chartEnable" ref="chartContainer" class="h-96 w-full bg-white mb-3 border rounded"></div>
<div class="border rounded p-3 whitespace-pre bg-white mb-3 h-0 grow overflow-y-auto">
<div>响应内容</div>
<div>{{ JSON.stringify(props.log.response, null, 2) }}</div>
</div>
</div>
</template>
<script setup>
import * as echarts from 'echarts';
import { ref, nextTick, watch } from 'vue';
/** @var {Object} */
const props = defineProps({
log: Object,
});
/** @var {Element} */
const chartContainer = ref(null);
/** @var {Boolean} */
const chartEnable = ref(false);
/** @var {echarts} */
let chart = null;
// watch log
watch(() => props.log, handleLogChange, {deep:true});
// handle log change
async function handleLogChange() {
chartEnable.value = false;
if ( null !== chart ) {
chart.dispose();
chart = null;
}
if ( null === props.log || null === props.log.response ) {
return ;
}
if ( 'A8kScanCurve' === props.log.response.$dataType ) {
chartEnable.value = true;
let refLine = props.log.response.refLine.map((v,i) => [i,v]);
let scanDataCurve = props.log.response.scanDataCurve.map((v,i) => [i,v]);
let refCurve = props.log.response.refCurve || [];
refCurve = refCurve.map(v => ({xAxis:v}));
await nextTick();
chart = echarts.init(chartContainer.value);
chart.setOption({
xAxis: {type: 'value', axisLabel : {show:false}},
yAxis: {type: 'value', axisLabel : {show:false}},
grid: {left: '3%', right: '4%', bottom: '3%', top:'3%', containLabel: true},
series: [{
name: 'RefLine',
type: 'line',
data: refLine
}, {
name: 'ScanDataCurve',
type: 'line',
data: scanDataCurve,
markLine : {
slient : true,
symbol : 'none',
data : refCurve,
label:{show:false},
lineStyle : {normal:{type:'solid'}}
},
}]
});
}
}
</script>

1
src/utils/ApiClient.js

@ -29,6 +29,7 @@ export default class ApiClient {
Modal.error({title: '请求错误',content:content,width:800});
throw new Error(`API【${name}】调用失败 : ${response.data}`);
}
response.data.data.$dataType = response.data.dataType;
return response.data.data;
}
}
Loading…
Cancel
Save