Forráskód Böngészése

fix: 修复执行日志请求接口

yanglzh 5 hónapja
szülő
commit
cf3ff04976

+ 2 - 1
src/api/modules/policy.ts

@@ -1,4 +1,5 @@
 import { get, post, del } from '/@/utils/request';
+import { get as getRule } from '/@/utils/request_rule';
 export default {
   getList: (data: any) => get('/policy/policy/list', data),
   del: (id: number) => del(`/policy/policy/delete?id=${id}`),
@@ -7,6 +8,6 @@ export default {
   detail: (id: number) => get(`/policy/policy/detail?id=${id}`),
   saveParam: (data: object) => post('/policy/policy/saveParam', data),
   log: {
-    getList: (data: any) => get(import.meta.env.VITE_RULE_SERVER_URL + "/api/v1/logs/runs", data),
+    getList: (data: any) => getRule("/api/v1/logs/runs", data),
   }
 } 

+ 6 - 0
src/utils/origin.ts

@@ -33,6 +33,12 @@ export function getOtherServersOrigin(urlStr: string = '') {
   return origin + nginxProxy + urlStr
 }
 
+// 规则引擎
+export function getRuleServerOrigin(urlStr: string = '') {
+  const origin = import.meta.env.VITE_SERVER_ORIGIN || window.location.origin
+  return origin + urlStr
+}
+
 export function getSSEOrigin(urlStr: string = '') {
   const origin = import.meta.env.VITE_SERVER_ORIGIN || window.location.origin
   const nginxProxy = import.meta.env.VITE_NGINX_PROXY

+ 141 - 0
src/utils/request_rule.ts

@@ -0,0 +1,141 @@
+import axios from 'axios';
+import { ElMessage, ElMessageBox } from 'element-plus';
+import { getRuleServerOrigin } from '/@/utils/origin'
+import { cacheClear, getToken, removeToken } from "/@/utils/auth";
+
+// 配置新建一个 axios 实例
+const service = axios.create({
+	baseURL: getRuleServerOrigin(import.meta.env.VITE_RULE_SERVER_URL),
+	timeout: 120000,
+	headers: { 'Content-Type': 'application/json' },
+});
+
+// 添加请求拦截器
+service.interceptors.request.use(
+	(config) => {
+		// 在发送请求之前做些什么 token
+		if (getToken()) {
+			(<any>config.headers).common['Authorization'] = `Bearer ${getToken()}`;
+		}
+		return config;
+	},
+	(error) => {
+		// 对请求错误做些什么
+		return Promise.reject(error);
+	}
+);
+
+// 添加响应拦截器
+service.interceptors.response.use(
+	(response) => {
+		// 对响应数据做点什么
+		const res = response.data;
+		const code = response.data.code
+		if (code === 401) {
+			ElMessageBox.alert('登录状态已过期,请重新登录', '提示',
+				{ confirmButtonText: '确定', showCancelButton: false, closeOnHashChange: false, closeOnPressEscape: false, closeOnClickModal: false, showClose: false })
+				.then(() => {
+					cacheClear()
+					removeToken()
+					window.location.href = '/'; // 去登录页
+				})
+				.catch(() => { });
+		} else if (code === undefined && res.message === undefined) { // 可能是下载文件
+			return response
+		} else if (code !== 0) {
+			ElMessage.closeAll()
+			ElMessage.error(res.message)
+			return Promise.reject(new Error(res.message))
+		} else {
+			// 分页的数据
+			if (res.data?.Total !== undefined) {
+				return {
+					list: res.data.Data,
+					total: res.data.Total,
+					page: res.data.currentPage,
+					...res.data,
+				}
+			}
+			// if (res.data?.Data) {
+			// 	return res.data.Data
+			// }
+			if (res.data?.Info && res.data?.Data) { // currentUser接口
+				return res.data
+			}
+			if (res.data?.Data === undefined) {
+				return res.data
+			}
+			return res.data.Data
+		}
+	},
+	(error) => {
+		ElMessage.closeAll()
+		// 对响应错误做点什么
+		if (error.message.indexOf('timeout') != -1) {
+			ElMessage.error('网络超时');
+		} else if (error.message == 'Network Error') {
+			ElMessage.error('网络连接错误');
+		} else {
+			if (error.response?.data) ElMessage.error(error.response?.statusText);
+			else ElMessage.error('接口路径找不到');
+		}
+		return Promise.reject(error);
+	}
+);
+
+// 导出 axios 实例
+export default service;
+
+export function get(url: string, params?: any, config?: any): any {
+	return service({
+		url,
+		method: "get",
+		...config,
+		params
+	})
+}
+
+export function post(url: string, data?: any, config?: any): any {
+	return service({
+		url,
+		method: "post",
+		...config,
+		data
+	})
+}
+
+export function put(url: string, data?: any): any {
+	return service({
+		url,
+		method: "put",
+		data
+	})
+}
+export function del(url: string, data?: any): any {
+	return service({
+		url,
+		method: "delete",
+		data
+	})
+}
+
+
+export function file(url: string, params?: any, method: 'get' | 'post' = 'get'): any {
+	if (method === 'get') {
+		return service({
+			url,
+			method,
+			params,
+			timeout: 120000,
+			responseType: 'arraybuffer',
+		});
+	} else {
+		return service({
+			url,
+			method,
+			timeout: 120000,
+			data: params,
+			responseType: 'blob',
+		});
+	}
+}

+ 0 - 128
src/views/modules/policy/runLog/edit.vue

@@ -1,128 +0,0 @@
-<template>
-	<el-dialog class="api-edit" v-model="showDialog" :title="`${formData.id ? '编辑应用' : '新增应用'}`" width="600px"
-		:close-on-click-modal="false" :close-on-press-escape="false">
-		<el-form ref="formRef" :model="formData" :rules="ruleForm" label-width="80px">
-			<el-form-item label="应用标识" prop="appId" v-if="formData.id">
-				<el-input v-model="formData.appId" placeholder="请输入应用标识"  disabled/>
-			</el-form-item>
-			<el-form-item label="应用名称" prop="name">
-				<el-input v-model="formData.name" placeholder="请输入应用名称" />
-			</el-form-item>
-			<el-form-item label="应用图标" prop="icon">
-				<uploadVue :img="formData.icon" @set-img="handleAvatarSuccess"></uploadVue>
-			</el-form-item>
-			<el-form-item label="AK" prop="accessKey">
-				<el-input v-model="formData.accessKey" placeholder="请输入ak,应用接入认证" />
-			</el-form-item>
-			<el-form-item label="SK" prop="secureKey">
-				<el-input v-model="formData.secureKey" placeholder="请输入sk,应用接入认证" />
-			</el-form-item>
-			<el-form-item label="组织" prop="orgId">
-				<el-cascader :options="deptData"
-					:props="{ checkStrictly: true, emitPath: false, value: 'deptId', label: 'deptName' }"
-					placeholder="请选择组织" clearable class="w100" v-model="formData.orgId
-						">
-					<template #default="{ node, data }">
-						<span>{{ data.deptName }}</span>
-						<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-					</template>
-				</el-cascader>
-			</el-form-item>
-			<el-form-item label="应用描述" prop="desc">
-				<el-input v-model="formData.desc" type="textarea" :rows="3" />
-			</el-form-item>
-			<!-- <el-form-item label="应用类型" prop="name">
-				<el-input v-model="formData.name" placeholder="请输入应用类型" />
-			</el-form-item> -->
-			<el-form-item label="应用状态" prop="status">
-				<el-radio-group v-model="formData.status">
-					<el-radio :label="1">启用</el-radio>
-					<el-radio :label="0">未启用</el-radio>
-				</el-radio-group>
-			</el-form-item>
-		</el-form>
-		<el-form-item label="回调地址" prop="callbackUri">
-			<el-input v-model="formData.callbackUri" placeholder="请输入回调地址" />
-		</el-form-item>
-		<template #footer>
-			<div class="dialog-footer">
-				<el-button @click="showDialog = false">取消</el-button>
-				<el-button type="primary" @click="onSubmit">确定</el-button>
-			</div>
-		</template>
-	</el-dialog>
-</template>
-<script lang="ts" setup>
-import { ref, reactive, nextTick } from 'vue';
-import api from '/@/api/application'
-import { ruleRequired } from '/@/utils/validator';
-import { ElMessage, UploadProps } from 'element-plus';
-import uploadVue from '/@/components/upload/index.vue'
-const emit = defineEmits(['getList']);
-const showDialog = ref(false);
-const formRef = ref();
-const props = defineProps({
-	deptData: {
-		type: Array,
-		default: () => [],
-	},
-})
-const baseForm = {
-	id: undefined,
-	appId:'',
-	name: '',
-	icon: '',
-	accessKey: '',
-	secureKey: '',
-	orgId: '',
-	roleId: '',
-	desc: '',
-	status: 1,
-	callbackUri:''
-};
-const formData = reactive({
-	...baseForm,
-});
-const ruleForm = {
-	name: [ruleRequired('应用名称不能为空')],
-	icon: [ruleRequired('应用图标不能为空')],
-	accessKey: [ruleRequired('AK不能为空')],
-	secureKey: [ruleRequired('SK不能为空')],
-	orgId: [ruleRequired('组织不能为空')],
-	roleId: [ruleRequired('角色不能为空')],
-};
-const onSubmit = async () => {
-	await formRef.value.validate();
-	const theApi = formData.id ? api.edit : api.add;
-	await theApi(formData);
-	ElMessage.success('操作成功');
-	resetForm();
-	showDialog.value = false;
-	emit('getList');
-};
-const handleAvatarSuccess: UploadProps['onSuccess'] = (response) => {
-	formData.icon = response
-}
-const resetForm = async () => {
-	Object.assign(formData, { ...baseForm });
-	formRef.value && formRef.value.resetFields();
-};
-
-const open = async (row: any) => {
-	resetForm();
-	showDialog.value = true;
-	nextTick(() => {
-		Object.assign(formData, { ...row });
-		console.log(formData);
-
-	});
-};
-
-defineExpose({ open });
-</script>
-<style scoped>
-.vertical-form-item {
-	display: block;
-	margin-bottom: 10px;
-	/* 可选,设置间距 */
-}</style>