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.
202 lines
7.7 KiB
202 lines
7.7 KiB
<template>
|
|
<div class="h-full flex flex-col">
|
|
<div class="bg-white border-b p-5">
|
|
<div v-for="(status,index) in statuses" :key="index" class="inline-block py-1 px-2 rounded border ml-1">
|
|
{{ status.name }} : {{ status.value }}
|
|
</div>
|
|
</div>
|
|
<a-row class="h-0 grow">
|
|
<a-col class="border-r h-full overflow-y-auto" :span="16">
|
|
<div class="p-5 border-t border-b" v-if="0 < params.length">
|
|
<a-row>
|
|
<a-col :span="8" v-for="group in params" :key="group.name" class="p-1">
|
|
<fieldset class="border">
|
|
<legend>{{ group.name }}</legend>
|
|
<div class="p-1" v-for="item in group.items" :key="item.key">
|
|
<service-configuration-param-value-edit
|
|
:param="item"
|
|
v-model:value="item.value"
|
|
@save-request="actionServiceParamSave"
|
|
></service-configuration-param-value-edit>
|
|
</div>
|
|
</fieldset>
|
|
</a-col>
|
|
</a-row>
|
|
<div class="p-1">
|
|
<a-button class="mr-1" @click="actionServiceParamReload">刷新</a-button>
|
|
<a-button @click="actionServiceParamSave">保存</a-button>
|
|
</div>
|
|
</div>
|
|
<div class="p-5">
|
|
<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"
|
|
: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 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" />
|
|
<a-input v-else-if="'java.lang.String' === actionParam.type" class="w-24" v-model:value="actionParam.value" />
|
|
<a-input-number v-else-if="'java.lang.Integer' === actionParam.type" class="w-24" v-model:value="actionParam.value" />
|
|
<a-select v-else-if="'Enum' === actionParam.type" v-model:value="actionParam.value" :dropdownMatchSelectWidth="false">
|
|
<a-select-option v-for="(enumItem,enumIndex) in actionParam.options" :key="enumIndex" :value="enumItem.value">{{ enumItem.name }}</a-select-option>
|
|
</a-select>
|
|
<span v-else>{{ actionParam }}</span>
|
|
</div>
|
|
<a-button class="m-1" :loading="action.isExecuting" @click="actionServiceExecute(action)">执行</a-button>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
</a-col>
|
|
<a-col :span="8" class="p-5 h-full">
|
|
<service-configuration-action-log :log="actionLog"/>
|
|
</a-col>
|
|
</a-row>
|
|
</div>
|
|
</template>
|
|
<script setup>
|
|
import { onUnmounted, ref, watch } from 'vue';
|
|
import ApiClient from '@/utils/ApiClient';
|
|
import ServiceConfigurationParamValueEdit from './ServiceConfigurationParamValueEdit.vue'
|
|
import ServiceConfigurationActionLog from './ServiceConfigurationActionLog.vue'
|
|
/** @var {Object} */
|
|
const props = defineProps({
|
|
serviceKey : String,
|
|
});
|
|
/** @var {Array} */
|
|
const params = ref([]);
|
|
/** @var {Array} */
|
|
const actions = ref([]);
|
|
/** @var {Array} */
|
|
const statuses = ref([]);
|
|
/** @var {Object} */
|
|
const actionLog = ref(null);
|
|
/** @var {Integer} */
|
|
let statusRefreshTimer = null;
|
|
// watch service key
|
|
watch(() => props.serviceKey, handleServiceKeyChange);
|
|
// on unmounted
|
|
onUnmounted(() => {
|
|
if ( null !== statusRefreshTimer ) {
|
|
clearTimeout(statusRefreshTimer);
|
|
statusRefreshTimer = false;
|
|
}
|
|
});
|
|
|
|
// on mounted
|
|
async function handleServiceKeyChange() {
|
|
actionLog.value = null;
|
|
if ( null !== statusRefreshTimer ) {
|
|
clearTimeout(statusRefreshTimer);
|
|
statusRefreshTimer = null;
|
|
}
|
|
if ( null === props.serviceKey ) {
|
|
return ;
|
|
}
|
|
|
|
await actionServiceParamReload();
|
|
await serviceActionReload();
|
|
await refreshServiceStatusList();
|
|
}
|
|
|
|
// refresh service status list
|
|
async function refreshServiceStatusList() {
|
|
try {
|
|
let client = ApiClient.getClient();
|
|
statuses.value = await client.call('service-config/service-status-list', {serviceKey:props.serviceKey});
|
|
if ( false !== statusRefreshTimer ) {
|
|
statusRefreshTimer = setTimeout(refreshServiceStatusList, 500);
|
|
}
|
|
} catch ( e ) {/** nothing to do here */}
|
|
}
|
|
|
|
// service param reload
|
|
async function actionServiceParamReload() {
|
|
try {
|
|
params.value = [];
|
|
let client = ApiClient.getClient();
|
|
let list = await client.call('service-config/service-params-list', {serviceKey:props.serviceKey});
|
|
for ( var item of list ) {
|
|
let groupName = item.group;
|
|
let group = params.value.find( i => i.name === groupName);
|
|
if ( undefined === group ) {
|
|
group = {name:groupName, items:[]};
|
|
params.value.push(group);
|
|
}
|
|
group.items.push(item);
|
|
}
|
|
params.value.sort((a,b) => b.items.length - a.items.length || b.name.localeCompare(a.name));
|
|
} catch ( e ) {/** nothing to do here */}
|
|
}
|
|
|
|
// service param save
|
|
async function actionServiceParamSave() {
|
|
try {
|
|
let values = {};
|
|
for ( let group of params.value ) {
|
|
for ( let item of group.items ) {
|
|
values[item.key] = item.value;
|
|
}
|
|
}
|
|
let client = ApiClient.getClient();
|
|
await client.call('service-config/service-params-update', {serviceKey:props.serviceKey,params:values});
|
|
await actionServiceParamReload();
|
|
} catch ( e ) {/** nothing to do here */}
|
|
}
|
|
|
|
// service actions reload
|
|
async function serviceActionReload() {
|
|
try {
|
|
actions.value = [];
|
|
let client = ApiClient.getClient();
|
|
let list = await client.call('service-config/service-action-list', {serviceKey:props.serviceKey});
|
|
for ( let item of list ) {
|
|
let group = actions.value.find(i => i.name === item.group);
|
|
if ( undefined === group ) {
|
|
group = {name:item.group, items:[]};
|
|
actions.value.push(group);
|
|
}
|
|
group.items.push(item);
|
|
group.items.sort((a,b) => a.params.length - b.params.length);
|
|
}
|
|
actions.value.sort((a,b) => a.name.localeCompare(b.name));
|
|
} catch ( e ) {/** nothing to do here */}
|
|
}
|
|
|
|
// service action execute
|
|
async function actionServiceExecute(action) {
|
|
try {
|
|
let client = ApiClient.getClient();
|
|
let params = {};
|
|
params.serviceKey = props.serviceKey;
|
|
params.action = action.key;
|
|
params.params = [];
|
|
params.paramTypes = [];
|
|
for ( let item of action.params ) {
|
|
params.params.push(item.value);
|
|
let type = item.type;
|
|
if ( 'Enum' === type ) {
|
|
type = item.typeEnum;
|
|
}
|
|
params.paramTypes.push(type);
|
|
}
|
|
|
|
actionLog.value = {};
|
|
actionLog.value.action = params.action;
|
|
actionLog.value.params = params.params;
|
|
actionLog.value.response = null;
|
|
action.isExecuting = true;
|
|
actionLog.value.response = await client.call('service-config/service-action-exec',params);
|
|
action.isExecuting = false;
|
|
} catch ( e ) {
|
|
/** nothing to do here */
|
|
} finally {
|
|
action.isExecuting = false;
|
|
}
|
|
}
|
|
</script>
|