sige 1 year ago
parent
commit
fd54b3f591
  1. 59
      package-lock.json
  2. 1
      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", "ant-design-vue": "^4.2.3",
"axios": "^1.7.2", "axios": "^1.7.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"echarts": "^5.5.1",
"vue": "^3.2.13", "vue": "^3.2.13",
"vue-router": "^4.4.0" "vue-router": "^4.4.0"
}, },
@ -5548,6 +5549,20 @@
"node": ">=6.0.0" "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": { "node_modules/ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", "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", "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==",
"dev": true "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": { "dependencies": {
@ -16755,6 +16783,22 @@
"integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==",
"dev": true "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": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@ -21942,6 +21986,21 @@
"dev": true "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=="
}
}
} }
} }
} }

1
package.json

@ -12,6 +12,7 @@
"ant-design-vue": "^4.2.3", "ant-design-vue": "^4.2.3",
"axios": "^1.7.2", "axios": "^1.7.2",
"core-js": "^3.8.3", "core-js": "^3.8.3",
"echarts": "^5.5.1",
"vue": "^3.2.13", "vue": "^3.2.13",
"vue-router": "^4.4.0" "vue-router": "^4.4.0"
}, },

19
src/components/ServiceConfiguration.vue

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

62
src/components/ServiceConfigurationActionLog.vue

@ -1,5 +1,5 @@
<template> <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"> <div class="border rounded p-3 whitespace-pre bg-white mb-3">
执行动作 : {{ props.log.action }} 执行动作 : {{ props.log.action }}
</div> </div>
@ -11,15 +11,73 @@
</div> </div>
</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>响应内容</div>
<div>{{ JSON.stringify(props.log.response, null, 2) }}</div> <div>{{ JSON.stringify(props.log.response, null, 2) }}</div>
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup>
import * as echarts from 'echarts';
import { ref, nextTick, watch } from 'vue';
/** @var {Object} */ /** @var {Object} */
const props = defineProps({ const props = defineProps({
log: Object, 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> </script>

1
src/utils/ApiClient.js

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