<template>
<div v-if="isOpen" class="global-data-handler">
<plugin-setting title="全局设置" @cancel="close" @save="saveGlobalDataHandle">
<template #content>
<tiny-collapse v-model="activeNames">
<tiny-collapse-item title="请求参数处理函数(willFetch)" name="willFetch">
<data-handler-editor v-model="state.willFetchValue"></data-handler-editor>
</tiny-collapse-item>
<tiny-collapse-item title="请求完成回调函数(dataHandler)" name="dataHandler">
<data-handler-editor v-model="state.dataHandlerValue"></data-handler-editor>
</tiny-collapse-item>
<tiny-collapse-item title="请求失败后的回调函数(errorHandler)" name="errorHandler">
<data-handler-editor v-model="state.errorHandlerValue"></data-handler-editor>
</tiny-collapse-item>
</tiny-collapse>
</template>
</plugin-setting>
</div>
</template>
<script>
import DataHandlerEditor from './RemoteDataAdapterForm.vue'
import { watch, ref, nextTick, reactive } from 'vue'
import { requestGlobalDataHandler } from './js/http'
import { useModal, useResource, getMetaApi, META_SERVICE } from '@opentiny/tiny-engine-meta-register'
import { PluginSetting } from '@opentiny/tiny-engine-common'
import { Collapse, CollapseItem } from '@opentiny/vue'
import { constants } from '@opentiny/tiny-engine-utils'
const { DEFAULT_INTERCEPTOR } = constants
const isOpen = ref(false)
export const open = () => {
isOpen.value = true
}
export const close = () => {
isOpen.value = false
}
export default {
components: {
DataHandlerEditor,
PluginSetting,
TinyCollapse: Collapse,
TinyCollapseItem: CollapseItem
},
setup() {
const { confirm } = useModal()
const state = reactive({
dataHandlerValue: useResource().resState?.dataHandler?.value,
willFetchValue: useResource().resState.willFetch?.value,
errorHandlerValue: useResource().resState?.errorHandler?.value
})
const saveGlobalDataHandle = () => {
const id = getMetaApi(META_SERVICE.GlobalService).getBaseInfo().id
const handler = {
dataHandler: { type: 'JSFunction', value: state.dataHandlerValue || DEFAULT_INTERCEPTOR.dataHandler.value },
willFetch: { type: 'JSFunction', value: state.willFetchValue || DEFAULT_INTERCEPTOR.willFetch.value },
errorHandler: { type: 'JSFunction', value: state.errorHandlerValue || DEFAULT_INTERCEPTOR.errorHandler.value }
}
requestGlobalDataHandler(id, { data_source_global: handler }).then((data) => {
if (data) {
useResource().resState.dataHandler = { type: 'JSFunction', value: state.dataHandlerValue }
useResource().resState.willFetch = { type: 'JSFunction', value: state.willFetchValue }
useResource().resState.errorHandler = { type: 'JSFunction', value: state.errorHandlerValue }
confirm({
title: '提示',
message: '全局请求处理函数设置成功'
})
}
})
}
watch(
() => isOpen.value,
(value) => {
nextTick(() => {
value && window.dispatchEvent(new Event('resize'))
})
}
)
return {
isOpen,
close,
saveGlobalDataHandle,
state
}
}
}
</script>
<style lang="less" scoped>
.global-data-handler {
:deep(.plugin-setting) {
.monaco-editor {
height: calc(100% - 54px);
}
.plugin-setting-content {
padding: 0;
}
.tiny-collapse-item__wrap {
padding: 0 12px;
}
}
}
.tiny-collapse {
height: 100%;
display: flex;
flex-direction: column;
}
.is-active {
flex-grow: 2;
}
</style>