Browse Source

Merge branch 'master' of http://git.mydig.net/Sagoo-Cloud/sagoo-admin-ui

picasso 3 years ago
parent
commit
0eed580aef

+ 16 - 1
src/api/datahub/index.ts

@@ -17,6 +17,21 @@ export default {
       add: (data: object) => post('/source/node/add', data),
       delete: (nodeId: number) => del('/source/node/del', { nodeId }),
       edit: (data: object) => put('/source/node/edit', data),
-   } 
+   },
+
+   template:{
+      getList: (params: object) => get('/source/template/search', params),
+      add: (data: object) => post('/source/template/add', data),
+      delete: (ids: number) => del('/source/template/del', { ids }),
+      edit: (data: object) => put('/source/template/edit', data),
+      detail: (id: number) => get('/source/template/detail', { id }),
+   } ,
+
+   tnode:{
+      getList: (params: object) => get('/source/template/node/list', params),
+      add: (data: object) => post('/source/template/node/add', data),
+      delete: (id: number) => del('/source/template/node/del', { id }),
+      edit: (data: object) => put('/source/template/node/edit', data),
+   },
   
 }

+ 29 - 4
src/views/assess/totalIndex/component/setTask.vue

@@ -22,8 +22,8 @@
 						<el-form-item class="inline-row" label="取值周期:" prop="get_time">
 							<el-input v-model="ruleForm.get_time" placeholder="请输入取值周期" clearable></el-input>
 							<div class="tip"  @click="isShow=!isShow" >
-								<span v-if="!isShow" class="ico_up"></span>
-								<span  v-else class="ico_down"></span>
+								<span v-if="!isShow" class="ico_down"></span>
+								<span v-else class="ico_up"></span>
 								帮助
 							</div>
 						</el-form-item>
@@ -127,7 +127,12 @@
 								<el-radio size="large" :label="1">启用</el-radio>
 								<el-radio size="large" :label="2">禁用</el-radio>
 							</el-radio-group>
-							<el-button style="margin-left: 20px" size="small" type="primary">检测</el-button>
+							<el-button v-if="ruleForm.uri&&ruleForm.object" @click="test" style="margin-left: 20px" size="small" type="primary">检测</el-button>
+						</el-form-item>
+					</el-col>
+					<el-col v-if="testRes || testRes.toString()" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+						<el-form-item label="测试结果:">
+							<span>数据源返回数据值:{{testRes}}</span>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -164,6 +169,7 @@ interface ItemState {
 	status: number;
 	item_code: string;
 	isShow: boolean;
+	testRes: string;
 }
 
 export default defineComponent({
@@ -180,7 +186,8 @@ export default defineComponent({
 			},
 			status: 0,
 			item_code: '',
-			isShow: false
+			isShow: false,
+			testRes: ''
 		});
 		const formSize = ref('default');
 		const ruleFormRef = ref<FormInstance>();
@@ -214,6 +221,7 @@ export default defineComponent({
 			api.addDataSourceInfo(params).then((res: any) => {
 				ElMessage.success('数据提交成功');
 				closeDialog();
+				state.isShow = false
 			});
 		};
 		// 编辑数据
@@ -221,14 +229,30 @@ export default defineComponent({
 			api.editataSourceInfo(params).then((res: any) => {
 				ElMessage.success('数据提交成功');
 				closeDialog();
+				state.isShow = false
 			});
 		};
 		// 打开弹窗
 		const openDialog = (row: RuleFormRow, item_code: string) => {
 			// state.ruleForm = row;
 			state.isShowDialog = true;
+			state.testRes = ''
 			getDataSourceInfo(row, item_code);
 		};
+		// 检测
+		const test = () => {
+			let params = {
+				uri: state.ruleForm.uri,
+				object: state.ruleForm.object
+			}
+			api.testDataSource(params).then((res: any) => {
+				console.log(res)
+				state.testRes = res
+				// ElMessage.success('数据提交成功');
+				// closeDialog();
+				// state.isShow = false
+			});
+		};
 		// 获取数据源配置数据
 		const getDataSourceInfo = (row: any, item_code: string) => {
 			let params = {
@@ -277,6 +301,7 @@ export default defineComponent({
 			getDataSourceInfo,
 			addDataSourceInfo,
 			editataSourceInfo,
+			test,
 			...toRefs(state),
 			formSize,
 			ruleFormRef,

+ 23 - 130
src/views/datahub/modeling/component/edit.vue

@@ -1,23 +1,22 @@
 <template>
 	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.sourceId !== 0 ? '修改' : '添加') + '自建表'" v-model="isShowDialog" width="769px">
+		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '模型'" v-model="isShowDialog" width="769px">
 			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
-				<el-form-item label="自建表标识" prop="key">
-					<el-input v-model="ruleForm.key" placeholder="请输入自建表名称" />
+				<el-form-item label="模型标识" prop="key">
+					<el-input v-model="ruleForm.key" placeholder="请输入模型名称" />
 				</el-form-item>
-				<el-form-item label="自建表名称" prop="name">
-					<el-input v-model="ruleForm.name" placeholder="请输入自建表名称" />
+				<el-form-item label="模型名称" prop="name">
+					<el-input v-model="ruleForm.name" placeholder="请输入模型名称" />
 				</el-form-item>
 
 				<el-form-item label="描述" prop="description">
-					<el-input v-model="ruleForm.description" type="textarea" placeholder="请输入内容"></el-input>
+					<el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入内容"></el-input>
 				</el-form-item>
-
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.sourceId !== 0 ? '修 改' : '添 加' }}</el-button>
+					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
@@ -28,14 +27,12 @@
 import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
 import api from '/@/api/datahub';
 import { ElMessage } from 'element-plus';
-import { Delete, Minus, Right } from '@element-plus/icons-vue';
 
 interface RuleFormState {
-	id: number;
+	id?: number;
 	name: string;
 	key: string;
-	description: string;
-	status: number;
+	desc: string;
 }
 interface DicState {
 	isShowDialog: boolean;
@@ -45,99 +42,40 @@ interface DicState {
 
 export default defineComponent({
 	name: 'Edit',
-	components: { Delete, Minus, Right },
 
 	setup(prop, { emit }) {
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
-			
 			isShowDialog: false,
-			
-
 			ruleForm: {
-				sourceId: 0,
+				id: 0,
 				name: '',
-				from: 1,
 				key: '',
-				rule: [],
-				config: {
-					method: '',
-					url: '',
-					interval: '',
-					intervalUnit: '',
-					requestParams: [],
-				},
-				description: '',
+
+				desc: '',
 			},
 			rules: {
-				key: [{ required: true, message: '自建表标识不能为空', trigger: 'blur' }],
-				name: [{ required: true, message: '自建表名称不能为空', trigger: 'blur' }],
-				from: [{ required: true, message: '自建表类型不能为空', trigger: 'blur' }],
-			
+				key: [{ required: true, message: '模型标识不能为空', trigger: 'blur' }],
+				name: [{ required: true, message: '模型名称不能为空', trigger: 'blur' }],
 			},
 		});
-		const delParams = (index) => {
-			state.requestParams.splice(index, 1);
-		};
-
-		const addParams = () => {
-			state.requestParams.push({
-				type: '',
-				key: '',
-				name: '',
-				value: '',
-			});
-		};
-
-		const delRule = (index) => {
-			state.rule.splice(index, 1);
-		};
 
-		const addRule = () => {
-			state.rule.push({
-				expression: '',
-				params: {
-					name: '',
-					value: '',
-				},
-			});
-		};
 		// 打开弹窗
 		const openDialog = (row: RuleFormState | null) => {
 			resetForm();
 
 			if (row) {
-				 api.common.detail(row.sourceId).then((res:any)=>{
-				    state.ruleForm = res.data
-					state.config=res.data.apiConfig
-					state.requestParams=res.data.apiConfig.requestParams
-
-           			res.data.sourceRule.forEach((item, index) => {
-						state.rule[index].expression = item.expression;
-						state.rule[index].params.name =Object.keys(item.params) ;
-						state.rule[index].params.value = item.params[Object.keys(item.params)];
-					});
-
-
-				 })
+				state.ruleForm = row;
 			}
 			state.isShowDialog = true;
 		};
 		const resetForm = () => {
 			state.ruleForm = {
-						sourceId: 0,
+				id: 0,
 				name: '',
-				from: 1,
 				key: '',
-				rule: [],
-				config: {
-					method: '',
-					url: '',
-					interval: '',
-					intervalUnit: '',
-					requestParams: [],
-				},
-				description: '',
+
+				desc: '',
 			};
 		};
 		// 关闭弹窗
@@ -154,29 +92,18 @@ export default defineComponent({
 			if (!formWrap) return;
 			formWrap.validate((valid: boolean) => {
 				if (valid) {
-					//修改rule数据
-					state.rule.forEach((item, index) => {
-						item.params[item.params.name] = item.params.value;
-						delete item.params.name;
-						delete item.params.value;
-					});
-
-					state.ruleForm.rule = state.rule;
-					state.config.requestParams = state.requestParams;
-					state.ruleForm.config = state.config;
-
-					if (state.ruleForm.sourceId !== 0) {
+					if (state.ruleForm.id !== 0) {
 						//修改
-						api.common.edit(state.ruleForm).then(() => {
-							ElMessage.success('自建表类型修改成功');
+						api.template.edit(state.ruleForm).then(() => {
+							ElMessage.success('模型类型修改成功');
 							closeDialog(); // 关闭弹窗
 							emit('typeList');
 						});
 					} else {
 						//添加
 
-						api.common.add(state.ruleForm).then(() => {
-							ElMessage.success('自建表类型添加成功');
+						api.template.add(state.ruleForm).then(() => {
+							ElMessage.success('模型类型添加成功');
 							closeDialog(); // 关闭弹窗
 							emit('typeList');
 						});
@@ -186,10 +113,6 @@ export default defineComponent({
 		};
 
 		return {
-			addRule,
-			delRule,
-			addParams,
-			delParams,
 			openDialog,
 			closeDialog,
 			onCancel,
@@ -200,34 +123,4 @@ export default defineComponent({
 	},
 });
 </script>
-<style>
-.el-input__wrapper {
-	width: 98%;
-}
 
-.box-content {
-	border: 1px solid #e8e8e8;
-	margin: 10px;
-	padding: 10px;
-}
-
-.content-f {
-	display: flex;
-	margin-bottom: 10px;
-}
-.content-f .el-input__wrapper {
-	margin-right: 5px;
-}
-.addbutton {
-	width: 100%;
-	margin-top: 10px;
-}
-.conicon {
-	width: 55px;
-	height: 25px;
-
-	font-size: 28px;
-	line-height: 28px;
-	cursor: pointer;
-}
-</style>

+ 140 - 175
src/views/datahub/modeling/component/editNode.vue

@@ -1,7 +1,34 @@
 <template>
 	<div class="system-edit-dic-container">
-		<el-dialog :title="(ruleForm.nodeId !== 0 ? '修改' : '添加') + '字段节点'" v-model="isShowDialog" width="769px">
+		<el-dialog :title="(ruleForm.id !== 0 ? '修改' : '添加') + '字段节点'" v-model="isShowDialog" width="769px">
 			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
+				<el-form-item label="类型" prop="from">
+					<el-radio-group v-model="ruleForm.from">
+						<el-radio :label="1">自定义</el-radio>
+						<el-radio :label="2">数据源</el-radio>
+					</el-radio-group>
+				</el-form-item>
+
+				<div v-if="ruleForm.from == 2">
+					<el-form-item label="数据源" prop="sourceId">
+						<el-select v-model="ruleForm.sourceId" filterable placeholder="请选择数据源" @change="getNodeList">
+							<el-option v-for="item in sourceData" :key="item.sourceId" :label="item.key" :value="item.sourceId">
+								<span style="float: left">{{ item.key }}</span>
+								<span style="float: right; font-size: 13px">{{ item.name }}</span>
+							</el-option>
+						</el-select>
+					</el-form-item>
+
+					<el-form-item label="数据源节点" prop="nodeId">
+						<el-select v-model="ruleForm.nodeId" filterable placeholder="请选择数据源" @change="setNode">
+							<el-option v-for="item in nodeData" :key="item.nodeId" :label="item.key" :value="item.nodeId">
+								<span style="float: left">{{ item.key }}</span>
+								<span style="float: right; font-size: 13px">{{ item.name }}</span>
+							</el-option>
+						</el-select>
+					</el-form-item>
+				</div>
+
 				<el-form-item label="字段节点标识" prop="key">
 					<el-input v-model="ruleForm.key" placeholder="请输入字段节点名称" />
 				</el-form-item>
@@ -9,55 +36,24 @@
 					<el-input v-model="ruleForm.name" placeholder="请输入字段节点名称" />
 				</el-form-item>
 
-
-					
-			<el-form-item label="数据类型" prop="dataType">
-					<el-select v-model="ruleForm.dataType" filterable placeholder="请选择数据类型" >
-						<el-option
-						v-for="item in tabData"
-						:key="item.value"
-						:label="item.label"
-						:value="item.value"
-						/>
+				<el-form-item label="数据类型" prop="dataType">
+					<el-select v-model="ruleForm.dataType" filterable placeholder="请选择数据类型">
+						<el-option v-for="item in tabData" :key="item.value" :label="item.label" :value="item.value" />
 					</el-select>
 				</el-form-item>
 
-				<el-form-item label="取值项" prop="value">
-					<el-input v-model="ruleForm.value" placeholder="请输入取值项" />
+				<el-form-item label="默认值" prop="default">
+					<el-input v-model="ruleForm.default" placeholder="请输入取值项" />
 				</el-form-item>
 
-		
-
-				<el-divider content-position="left">规则表达式</el-divider>
-
-				<div v-for="(item, index) in rule" :key="index">
-					<el-form-item label="表达式" >
-						<el-input v-model="item.expression" placeholder="请输入规则表达式" />
-					</el-form-item>
-
-					<el-form-item label="参数" >
-						<el-input v-model="rule[index].params.name" placeholder="请输入键值" class="w-35" />
-						<el-input v-model="rule[index].params.value" placeholder="请输入值" class="w-35" />
-						<div class="conicon">
-							<el-icon @click="delRule(index)" v-if="index > 0"><Delete /></el-icon>
-						</div>
-					</el-form-item>
-				</div>
-				<div style="padding: 10px">
-					<el-button type="primary" class="addbutton" @click="addRule">增加</el-button>
-				</div>
-
-	
-
-			
-			
-
-			
+				<el-form-item label="描述" prop="desc">
+					<el-input v-model="ruleForm.desc" type="textarea" placeholder="请输入内容"></el-input>
+				</el-form-item>
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
 					<el-button @click="onCancel" size="default">取 消</el-button>
-					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.nodeId !== 0 ? '修 改' : '添 加' }}</el-button>
+					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
@@ -71,13 +67,15 @@ import { ElMessage } from 'element-plus';
 import { Delete, Minus, Right } from '@element-plus/icons-vue';
 
 interface RuleFormState {
-	nodeId: number;
+	id: number;
 	name: string;
 	from: number;
+	sourceId: number;
+	nodeId: number;
 	key: string;
 	dataType: string;
-	value: string;
-	description: string;
+	default: string;
+	desc: string;
 	status: number;
 }
 interface DicState {
@@ -94,125 +92,130 @@ export default defineComponent({
 		const editDicRef = ref();
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
-			
 			isShowDialog: false,
-			config: {},
-			tabData:[{
-				label: 'varchar',
-				value: 'varchar',
-			},{
-				label: 'string',
-				value: 'string',
-			},{
-				label: 'int',
-				value: 'int',
-			},{
-				label: 'bigint',
-				value: 'bigint',
-			},{
-				label: 'tinyint',
-				value: 'tinyint',
-			},{
-				label: 'float',
-				value: 'float',
-			},{
-				label: 'double',
-				value: 'double',
-			},{
-				label: 'text',
-				value: 'text',
-			},{
-				label: 'datetime',
-				value: 'datetime',
-			},{
-				label: 'timestamp',
-				value: 'timestamp',
-			}],
-			ruledata:  [
+			tabData: [
 				{
-					expression: '',
-					params: {
-						name: '',
-						value: '',
-					},
+					label: 'varchar',
+					value: 'varchar',
+				},
+				{
+					label: 'string',
+					value: 'string',
+				},
+				{
+					label: 'int',
+					value: 'int',
+				},
+				{
+					label: 'bigint',
+					value: 'bigint',
+				},
+				{
+					label: 'tinyint',
+					value: 'tinyint',
+				},
+				{
+					label: 'float',
+					value: 'float',
+				},
+				{
+					label: 'double',
+					value: 'double',
+				},
+				{
+					label: 'text',
+					value: 'text',
 				},
-			],
-			rule: [
 				{
-					expression: '',
-					params: {
-						name: '',
-						value: '',
-					},
+					label: 'datetime',
+					value: 'datetime',
+				},
+				{
+					label: 'timestamp',
+					value: 'timestamp',
 				},
 			],
-			
-		
 
-		
+			sourceData: [],
+			nodeData: [],
+
 			ruleForm: {
+				id: 0,
+				sourceId: 0,
 				nodeId: 0,
 				name: '',
 				key: '',
-				dataType:'',
-				value:'',
-				rule: [],
-				
-				description: '',
+				from: 1,
+				default: '',
+				desc: '',
 			},
 			rules: {
 				key: [{ required: true, message: '字段节点标识不能为空', trigger: 'blur' }],
 				name: [{ required: true, message: '字段节点名称不能为空', trigger: 'blur' }],
 				dataType: [{ required: true, message: '字段节点类型不能为空', trigger: 'blur' }],
 				value: [{ required: true, message: '字段节点取值项不能为空', trigger: 'blur' }],
-			
 			},
 		});
-		
 
-		const delRule = (index) => {
-			state.rule.splice(index, 1);
-		};
-
-		const addRule = () => {
-			state.rule.push({
-				expression: '',
-				params: {
-					name: '',
-					value: '',
-				},
-			});
-		};
 		// 打开弹窗
 		const openDialog = (row: RuleFormState | null) => {
 			resetForm();
 
-			if (row?.nodeId) {
-
-				  state.ruleForm = row
-
-				 var data=JSON.parse(row.rule)
-           			 console.log(data);
-
-					data.forEach((item, index) => {
-						state.rule[index].expression = item.expression;
-						state.rule[index].params.name =Object.keys(item.params) ;
-						state.rule[index].params.value = item.params[Object.keys(item.params)];
-					});
+			console.log(row);
+			if (row?.id) {
+				state.ruleForm = row;
 			}
 
+			if (row.sourceId) {
+				getNodeList(row.sourceId);
+			}
 			state.ruleForm = row;
 			state.isShowDialog = true;
+
+			getSouData();
+		};
+
+		const getSouData = () => {
+			api.common
+				.getList({
+					pageNum: 1,
+					pageSize: 50,
+				})
+				.then((res: any) => {
+					state.sourceData = res.list;
+				});
+		};
+
+		const getNodeList = (event) => {
+			api.node
+				.getList({
+					pageNum: 1,
+					pageSize: 50,
+					sourceId: event,
+				})
+				.then((res: any) => {
+					state.nodeData = res.list;
+				});
+		};
+		const setNode = (event) => {
+			state.nodeData.forEach((item, index) => {
+				if (item.nodeId == event) {
+					state.ruleForm.name = item.name;
+					state.ruleForm.key = item.key;
+					state.ruleForm.dataType = item.dataType;
+				}
+			});
 		};
 		const resetForm = () => {
 			state.ruleForm = {
-				nodeId: 0,
+				id: 0,
 				name: '',
-				from: 1,
+				sourceId: 0,
+				nodeId: 0,
 				key: '',
-				rule: [],
-				
-				description: '',
+				from: 1,
+				default: '',
+				desc: '',
 			};
 		};
 		// 关闭弹窗
@@ -228,19 +231,10 @@ export default defineComponent({
 			const formWrap = unref(formRef) as any;
 			if (!formWrap) return;
 			formWrap.validate((valid: boolean) => {
-			if (valid) {
-					//修改rule数据
-					state.rule.forEach((item, index) => {
-						item.params[item.params.name] = item.params.value;
-						delete item.params.name;
-						delete item.params.value;
-					});
-
-					state.ruleForm.rule = state.rule;
-
-					if (state.ruleForm.nodeId !== 0) {
+				if (valid) {
+					if (state.ruleForm.id !== 0) {
 						//修改
-						api.node.edit(state.ruleForm).then(() => {
+						api.tnode.edit(state.ruleForm).then(() => {
 							ElMessage.success('字段节点类型修改成功');
 							closeDialog(); // 关闭弹窗
 							emit('typeList');
@@ -248,7 +242,7 @@ export default defineComponent({
 					} else {
 						//添加
 
-						api.node.add(state.ruleForm).then(() => {
+						api.tnode.add(state.ruleForm).then(() => {
 							ElMessage.success('字段节点类型添加成功');
 							closeDialog(); // 关闭弹窗
 							emit('typeList');
@@ -259,8 +253,9 @@ export default defineComponent({
 		};
 
 		return {
-			addRule,
-			delRule,
+			getSouData,
+			getNodeList,
+			setNode,
 			openDialog,
 			closeDialog,
 			onCancel,
@@ -271,34 +266,4 @@ export default defineComponent({
 	},
 });
 </script>
-<style>
-.el-input__wrapper {
-	width: 98%;
-}
-
-.box-content {
-	border: 1px solid #e8e8e8;
-	margin: 10px;
-	padding: 10px;
-}
-
-.content-f {
-	display: flex;
-	margin-bottom: 10px;
-}
-.content-f .el-input__wrapper {
-	margin-right: 5px;
-}
-.addbutton {
-	width: 100%;
-	margin-top: 10px;
-}
-.conicon {
-	width: 55px;
-	height: 25px;
 
-	font-size: 28px;
-	line-height: 28px;
-	cursor: pointer;
-}
-</style>

+ 110 - 114
src/views/datahub/modeling/detail.vue

@@ -2,83 +2,91 @@
 	<div class="system-dic-container">
 		<div class="content">
 			<div class="cont_box">
-				<div class="title">数据表名称:{{ detail.name }}</div>
-				<div class="title">数据表表名:{{ detail.name }}</div>
-		
+				<div class="title">模型标识:{{ detail.key }}</div>
+				<div class="title" style="margin-left: 20px">模型表名:{{ detail.name }}</div>
 			</div>
 		</div>
 
 		<div class="content-box">
+			<div class="wu-box">
+				<div class="system-user-search mb15">
+					<el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="130px">
+						<el-form-item label="字段节点标题" prop="key">
+							<el-input
+								v-model="tableData.param.key"
+								placeholder="请输入字段节点标题"
+								clearable
+								size="default"
+								style="width: 240px"
+								@keyup.enter.native="typeList"
+							/>
+						</el-form-item>
+						<el-form-item label="字段节点名称" prop="name">
+							<el-input
+								v-model="tableData.param.name"
+								placeholder="请输入字段节点名称"
+								clearable
+								size="default"
+								style="width: 240px"
+								@keyup.enter.native="typeList"
+							/>
+						</el-form-item>
 
-
-                        <div class="wu-box">
-						 <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" label-width="68px">
-          <el-form-item label="字段标题" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入产品名称" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
-          </el-form-item>
-          <el-form-item label="字段名称" prop="deviceType">
-            <el-input v-model="tableData.param.deviceType" placeholder="请输入设备类型" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
-          </el-form-item>
-        
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" type="success" class="ml10" @click="onOpenAddDic">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增字段
-            </el-button>
-            <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
+						<el-form-item>
+							<el-button size="default" type="primary" class="ml10" @click="typeList">
+								<el-icon>
+									<ele-Search />
+								</el-icon>
+								查询
+							</el-button>
+							<el-button size="default" @click="resetQuery(queryRef)">
+								<el-icon>
+									<ele-Refresh />
+								</el-icon>
+								重置
+							</el-button>
+							<el-button size="default" type="success" class="ml10" @click="onOpenAdd">
+								<el-icon>
+									<ele-FolderAdd />
+								</el-icon>
+								新增字段节点
+							</el-button>
+							<!-- <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
               <el-icon>
                 <ele-Delete />
               </el-icon>
               删除
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-                       
+            </el-button> -->
+						</el-form-item>
+					</el-form>
+				</div>
 
-                         <el-table :data="tableData.data" style="width: 100%" >
-        <el-table-column label="ID" align="center" prop="nodeId" width="80" />
-        <el-table-column label="字段标题" prop="key" :show-overflow-tooltip="true" />
-        <el-table-column label="字段名称" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="字段类型" prop="dataType" :show-overflow-tooltip="true" />
-        <el-table-column label="字段长度" prop="value" :show-overflow-tooltip="true" />
-        <el-table-column label="默认值" prop="value" :show-overflow-tooltip="true" />
-        <el-table-column label="备注说明" prop="value" :show-overflow-tooltip="true" />
-		  <el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column> 
+				<el-table :data="tableData.data" style="width: 100%">
+					<el-table-column label="ID" align="center" prop="id" width="80" />
+					<el-table-column label="字段节点标题" prop="key" :show-overflow-tooltip="true" />
+					<el-table-column label="字段节点名称" prop="name" :show-overflow-tooltip="true" />
+					<el-table-column label="字段节点类型" prop="dataType" :show-overflow-tooltip="true" />
+					<el-table-column label="默认值" prop="default" :show-overflow-tooltip="true" />
+					<el-table-column label="备注说明" prop="value" :show-overflow-tooltip="true" />
+					<el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column>
 
-        <el-table-column label="操作" width="200" align="center">
-          <template #default="scope">
-	
-
-            <el-button size="small" text type="warning" @click="onOpenEdit1(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-           </div>         
-                  
-
-
-
-
-        </div>
- <EditDic ref="editDicRef" @typeList="typeList" />
+					<el-table-column label="操作" width="200" align="center">
+						<template #default="scope">
+							<el-button size="small" text type="warning" @click="onOpenEdit(scope.row)">修改</el-button>
+							<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
+						</template>
+					</el-table-column>
+				</el-table>
+				<pagination
+					v-show="tableData.total > 0"
+					:total="tableData.total"
+					v-model:page="tableData.param.pageNum"
+					v-model:limit="tableData.param.pageSize"
+					@pagination="typeList"
+				/>
+			</div>
+		</div>
+		<EditDic ref="editDicRef" @typeList="typeList" />
 	</div>
 </template>            
 <script lang="ts">
@@ -106,18 +114,18 @@ interface TableDataState {
 	};
 }
 export default defineComponent({
-    name: 'dataDetail',
-    components: { EditDic },
-    setup(prop, context) {
-        		const editDicRef = ref();
+	name: 'dataDetail',
+	components: { EditDic },
+	setup(prop, context) {
+		const editDicRef = ref();
 
 		const route = useRoute();
-        const state = reactive<TableDataState>({
-            config: {},
-		
+		const state = reactive<TableDataState>({
+			config: {},
+
 			isShowDialog: false,
 			detail: [],
-            
+
 			tableData: {
 				data: [],
 				total: 0,
@@ -125,52 +133,39 @@ export default defineComponent({
 				param: {
 					pageNum: 1,
 					pageSize: 10,
-                    sourceId: route.params && route.params.sourceId,
+					tid: route.params && route.params.id,
 					status: '',
 					dateRange: [],
 				},
 			},
 		});
 
+		onMounted(() => {
+			const ids = route.params && route.params.id;
+			api.template.detail(ids).then((res: any) => {
+				state.detail = res.data;
+			});
 
-
-        onMounted(() => {
-			
-
-                typeList();
+			typeList();
 		});
 
-        const typeList = () => {
-			api.node.getList(state.tableData.param).then((res: any) => {
+		const typeList = () => {
+			api.tnode.getList(state.tableData.param).then((res: any) => {
 				state.tableData.data = res.list;
-				state.tableData.total = res.Total;
+				//state.tableData.total = res.Total;
 			});
 		};
 
-
-        const CkOption=()=>{
-                if(state.developer_status==1){
-                    api.common.undeploy({sourceId:route.params.sourceId}).then((res: any) => {
-                        ElMessage.success('操作成功');
-                        state.developer_status=0;
-                    });
-                }else{
-                    api.common.deploy({sourceId:route.params.sourceId}).then((res: any) => {
-                        ElMessage.success('操作成功');
-                        state.developer_status=1;
-                    });
-                }
-		}
-        const handleClick = (tab: TabsPaneContext, event: Event) => {
+		const handleClick = (tab: TabsPaneContext, event: Event) => {
 			console.log(tab, event);
 		};
 
-        	const onRowDel = (row: TableDataRow) => {
+		const onRowDel = (row: TableDataRow) => {
 			let msg = '你确定要删除所选数据?';
 			let ids: number[] = [];
 			if (row) {
 				msg = `此操作将永久删除数据节点:“${row.name}”,是否继续?`;
-				ids = row.nodeId;
+				ids = row.id;
 			} else {
 				ids = state.ids;
 			}
@@ -184,7 +179,7 @@ export default defineComponent({
 				type: 'warning',
 			})
 				.then(() => {
-					api.node.delete(ids).then(() => {
+					api.tnode.delete(ids).then(() => {
 						ElMessage.success('删除成功');
 						typeList();
 					});
@@ -192,24 +187,27 @@ export default defineComponent({
 				.catch(() => {});
 		};
 
-        	// 打开修改数据源弹窗
-        const onOpenEdit = (row: TableDataRow) => {
+		// 打开修改数据源弹窗
+		const onOpenEdit = (row: TableDataRow) => {
 			editDicRef.value.openDialog(row);
 		};
 
-        	return {
+		const onOpenAdd = () => {
+			editDicRef.value.openDialog({ tid: route.params.id, id: 0, from: 1 });
+		};
+
+		return {
 			Edit,
-            editDicRef,
-            typeList,
-            onRowDel,
-            onOpenEdit,
-            handleClick,
-			CkOption,
+			editDicRef,
+			onOpenAdd,
+			typeList,
+			onRowDel,
+			onOpenEdit,
+			handleClick,
 			...toRefs(state),
 		};
-    },
+	},
 });
-
 </script>
 <style>
 .content {
@@ -268,6 +266,4 @@ export default defineComponent({
 	border: 0px;
 	color: #1890ff;
 }
-
-
 </style>

+ 96 - 99
src/views/datahub/modeling/index.vue

@@ -1,74 +1,90 @@
 <template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" >
+	<div class="system-dic-container">
+		<el-card shadow="hover">
+			<div class="system-user-search mb15">
+				<el-form :model="tableData.param" ref="queryRef" :inline="true">
+					<el-form-item label="模型标识" prop="key">
+						<el-input
+							v-model="tableData.param.key"
+							placeholder="请输入模型标识"
+							clearable
+							size="default"
+							style="width: 240px"
+							@keyup.enter.native="typeList"
+						/>
+					</el-form-item>
+					<el-form-item label="模型名称" prop="name">
+						<el-input
+							v-model="tableData.param.name"
+							placeholder="请输入模型名称"
+							clearable
+							size="default"
+							style="width: 240px"
+							@keyup.enter.native="typeList"
+						/>
+					</el-form-item>
+					<el-form-item>
+						<el-button size="default" type="primary" class="ml10" @click="typeList">
+							<el-icon>
+								<ele-Search />
+							</el-icon>
+							查询
+						</el-button>
+						<el-button size="default" @click="resetQuery(queryRef)">
+							<el-icon>
+								<ele-Refresh />
+							</el-icon>
+							重置
+						</el-button>
+						<el-button size="default" type="success" class="ml10" @click="onOpenAdd">
+							<el-icon>
+								<ele-FolderAdd />
+							</el-icon>
+							新增模型
+						</el-button>
+						<el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
+							<el-icon>
+								<ele-Delete />
+							</el-icon>
+							删除
+						</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+			<el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
+				<el-table-column type="selection" width="55" align="center" />
+				<el-table-column label="ID" align="center" prop="id" width="80" />
+				<el-table-column label="模型标识" prop="key" :show-overflow-tooltip="true" />
+				<el-table-column label="模型名称" prop="name" :show-overflow-tooltip="true" />
 
-		 
-          <el-form-item label="自建表名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入自建表名称" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
-          </el-form-item>
-		 
-         
-      
-        
-         
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" type="success" class="ml10" @click="onOpenAdd">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增自建表
-            </el-button>
-       <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              删除
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="ID" align="center" prop="sourceId" width="80" />
-        <el-table-column label="自建表名称" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="自建表表名" prop="name" :show-overflow-tooltip="true" />
-        
-      
+				<el-table-column prop="createdAt" label="创建时间" align="center"></el-table-column>
 
-		  <el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column> 
+				<el-table-column label="操作" width="200" align="center">
+					<template #default="scope">
+						<router-link
+							:to="'/datahub/modeling/detail/' + scope.row.id"
+							class="link-type"
+							style="padding-right: 12px; font-size: 12px; color: #409eff"
+						>
+							<span>字段管理</span>
+						</router-link>
 
-        <el-table-column label="操作" width="200" align="center">
-          <template #default="scope">
-		   	<router-link :to="'/datahub/modeling/detail/' + scope.row.sourceId" class="link-type" style="padding-right: 12px;
-    font-size: 12px;color: #409eff;">
-              <span>字段管理</span>
-            </router-link>
-
-            <el-button size="small" text type="warning" @click="onOpenEdit(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-    <EditDic ref="editDicRef" @typeList="typeList" />
-	    <Detail ref="detailRef"  />
-
-  </div>
+						<el-button size="small" text type="warning" @click="onOpenEdit(scope.row)">修改</el-button>
+						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<pagination
+				v-show="tableData.total > 0"
+				:total="tableData.total"
+				v-model:page="tableData.param.pageNum"
+				v-model:limit="tableData.param.pageSize"
+				@pagination="typeList"
+			/>
+		</el-card>
+		<EditDic ref="editDicRef" @typeList="typeList" />
+		<Detail ref="detailRef" />
+	</div>
 </template>
 
 <script lang="ts">
@@ -79,11 +95,10 @@ import api from '/@/api/datahub';
 
 // 定义接口来定义对象的类型
 interface TableDataRow {
-	sourceId: number;
+	id: number;
 	name: string;
 	key: string;
-	status: number;
-	from: string;
+
 	createBy: string;
 }
 interface TableDataState {
@@ -97,8 +112,6 @@ interface TableDataState {
 			pageSize: number;
 			name: string;
 			key: string;
-			from: string;
-			
 		};
 	};
 }
@@ -111,21 +124,6 @@ export default defineComponent({
 		const editDicRef = ref();
 		const queryRef = ref();
 		const state = reactive<TableDataState>({
-			typeData: [
-				{
-					label: 'api导入',
-					value: '1',
-				},
-				{
-					label: '数据库',
-					value: '2',
-				},
-				{
-					label: '文件',
-					value: '3',
-				},
-			],
-			ids: [],
 			tableData: {
 				data: [],
 				total: 0,
@@ -134,8 +132,7 @@ export default defineComponent({
 					pageNum: 1,
 					pageSize: 10,
 					name: '',
-					types: '',
-					status:'',
+					key: '',
 				},
 			},
 		});
@@ -144,16 +141,16 @@ export default defineComponent({
 			typeList();
 		};
 		const typeList = () => {
-			api.common.getList(state.tableData.param).then((res: any) => {
+			api.template.getList(state.tableData.param).then((res: any) => {
 				state.tableData.data = res.list;
 				state.tableData.total = res.Total;
 			});
 		};
-		// 打开新增自建表弹窗
-		const onOpenAdd = () => {
-			editDicRef.value.openDialog();
+		// 打开新增菜单弹窗
+		const onOpenAdd = (row?: TableDataRow) => {
+			editDicRef.value.openDialog(row?.id);
 		};
-		// 打开修改自建表弹窗
+		// 打开修改模型弹窗
 		const onOpenEdit = (row: TableDataRow) => {
 			editDicRef.value.openDialog(row);
 		};
@@ -161,8 +158,8 @@ export default defineComponent({
 			let msg = '你确定要删除所选数据?';
 			let ids: number[] = [];
 			if (row) {
-				msg = `此操作将永久删除自建表:“${row.name}”,是否继续?`;
-				ids = [row.sourceId];
+				msg = `此操作将永久删除模型:“${row.name}”,是否继续?`;
+				ids = [row.id];
 			} else {
 				ids = state.ids;
 			}
@@ -176,7 +173,7 @@ export default defineComponent({
 				type: 'warning',
 			})
 				.then(() => {
-					api.common.delete(ids).then(() => {
+					api.template.delete(ids).then(() => {
 						ElMessage.success('删除成功');
 						typeList();
 					});
@@ -195,9 +192,9 @@ export default defineComponent({
 		};
 		// 多选框选中数据
 		const handleSelectionChange = (selection: TableDataRow[]) => {
-			state.ids = selection.map((item) => item.sourceId);
+			state.ids = selection.map((item) => item.id);
 		};
-	
+
 		return {
 			addDicRef,
 			editDicRef,

+ 12 - 16
src/views/datahub/source/component/edit.vue

@@ -28,7 +28,7 @@
 						<el-input v-model="item.expression" placeholder="请输入规则表达式" />
 					</el-form-item>
 
-					<el-form-item label="参数" >
+					<el-form-item label="参数">
 						<el-input v-model="item.params.name" placeholder="请输入键值" class="w-35" />
 						<el-input v-model="item.params.value" placeholder="请输入值" class="w-35" />
 						<div class="conicon">
@@ -41,17 +41,17 @@
 				</div>
 				<el-divider content-position="left">数据源配置</el-divider>
 
-				<el-form-item label="请求方法" >
+				<el-form-item label="请求方法">
 					<el-select v-model="config.method" placeholder="请选择请求方法">
 						<el-option v-for="item in methodData" :key="item.value" :label="item.label" :value="item.value" />
 					</el-select>
 				</el-form-item>
 
-				<el-form-item label="请求地址" >
+				<el-form-item label="请求地址">
 					<el-input v-model="config.url" placeholder="请输入请求地址" />
 				</el-form-item>
 
-				<el-form-item label="更新时间" >
+				<el-form-item label="更新时间">
 					<el-input v-model="config.interval" placeholder="请输入更新时间" class="w-35" />
 					<el-select v-model="config.intervalUnit" placeholder="请选择单位">
 						<el-option v-for="item in unitData" :key="item.value" :label="item.label" :value="item.value" />
@@ -113,7 +113,6 @@ export default defineComponent({
 	setup(prop, { emit }) {
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
-			
 			isShowDialog: false,
 			config: {},
 			ruledata: [
@@ -207,7 +206,6 @@ export default defineComponent({
 				key: [{ required: true, message: '数据源标识不能为空', trigger: 'blur' }],
 				name: [{ required: true, message: '数据源名称不能为空', trigger: 'blur' }],
 				from: [{ required: true, message: '数据源类型不能为空', trigger: 'blur' }],
-			
 			},
 		});
 		const delParams = (index) => {
@@ -241,25 +239,23 @@ export default defineComponent({
 			resetForm();
 
 			if (row) {
-				 api.common.detail(row.sourceId).then((res:any)=>{
-				    state.ruleForm = res.data
-					state.config=res.data.apiConfig
-					state.requestParams=res.data.apiConfig.requestParams
+				api.common.detail(row.sourceId).then((res: any) => {
+					state.ruleForm = res.data;
+					state.config = res.data.apiConfig;
+					state.requestParams = res.data.apiConfig.requestParams;
 
-           			res.data.sourceRule.forEach((item, index) => {
+					res.data.sourceRule.forEach((item, index) => {
 						state.rule[index].expression = item.expression;
-						state.rule[index].params.name =Object.keys(item.params) ;
+						state.rule[index].params.name = Object.keys(item.params);
 						state.rule[index].params.value = item.params[Object.keys(item.params)];
 					});
-
-
-				 })
+				});
 			}
 			state.isShowDialog = true;
 		};
 		const resetForm = () => {
 			state.ruleForm = {
-						sourceId: 0,
+				sourceId: 0,
 				name: '',
 				from: 1,
 				key: '',

+ 64 - 74
src/views/datahub/source/component/editNode.vue

@@ -15,15 +15,10 @@
 						<el-radio :label="1">是</el-radio>
 					</el-radio-group>
 				</el-form-item>
-					
-			<el-form-item label="数据类型" prop="dataType">
-					<el-select v-model="ruleForm.dataType" filterable placeholder="请选择数据类型" >
-						<el-option
-						v-for="item in tabData"
-						:key="item.value"
-						:label="item.label"
-						:value="item.value"
-						/>
+
+				<el-form-item label="数据类型" prop="dataType">
+					<el-select v-model="ruleForm.dataType" filterable placeholder="请选择数据类型">
+						<el-option v-for="item in tabData" :key="item.value" :label="item.label" :value="item.value" />
 					</el-select>
 				</el-form-item>
 
@@ -31,16 +26,14 @@
 					<el-input v-model="ruleForm.value" placeholder="请输入取值项" />
 				</el-form-item>
 
-		
-
 				<el-divider content-position="left">规则表达式</el-divider>
 
 				<div v-for="(item, index) in rule" :key="index">
-					<el-form-item label="表达式" >
+					<el-form-item label="表达式">
 						<el-input v-model="item.expression" placeholder="请输入规则表达式" />
 					</el-form-item>
 
-					<el-form-item label="参数" >
+					<el-form-item label="参数">
 						<el-input v-model="rule[index].params.name" placeholder="请输入键值" class="w-35" />
 						<el-input v-model="rule[index].params.value" placeholder="请输入值" class="w-35" />
 						<div class="conicon">
@@ -51,13 +44,6 @@
 				<div style="padding: 10px">
 					<el-button type="primary" class="addbutton" @click="addRule">增加</el-button>
 				</div>
-
-	
-
-			
-			
-
-			
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
@@ -100,41 +86,51 @@ export default defineComponent({
 		const editDicRef = ref();
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
-			
 			isShowDialog: false,
 			config: {},
-			tabData:[{
-				label: 'varchar',
-				value: 'varchar',
-			},{
-				label: 'string',
-				value: 'string',
-			},{
-				label: 'int',
-				value: 'int',
-			},{
-				label: 'bigint',
-				value: 'bigint',
-			},{
-				label: 'tinyint',
-				value: 'tinyint',
-			},{
-				label: 'float',
-				value: 'float',
-			},{
-				label: 'double',
-				value: 'double',
-			},{
-				label: 'text',
-				value: 'text',
-			},{
-				label: 'datetime',
-				value: 'datetime',
-			},{
-				label: 'timestamp',
-				value: 'timestamp',
-			}],
-			ruledata:  [
+			tabData: [
+				{
+					label: 'varchar',
+					value: 'varchar',
+				},
+				{
+					label: 'string',
+					value: 'string',
+				},
+				{
+					label: 'int',
+					value: 'int',
+				},
+				{
+					label: 'bigint',
+					value: 'bigint',
+				},
+				{
+					label: 'tinyint',
+					value: 'tinyint',
+				},
+				{
+					label: 'float',
+					value: 'float',
+				},
+				{
+					label: 'double',
+					value: 'double',
+				},
+				{
+					label: 'text',
+					value: 'text',
+				},
+				{
+					label: 'datetime',
+					value: 'datetime',
+				},
+				{
+					label: 'timestamp',
+					value: 'timestamp',
+				},
+			],
+			ruledata: [
 				{
 					expression: '',
 					params: {
@@ -152,19 +148,16 @@ export default defineComponent({
 					},
 				},
 			],
-			
-		
 
-		
 			ruleForm: {
 				nodeId: 0,
-				isPk:0,
+				isPk: 0,
 				name: '',
 				key: '',
-				dataType:'',
-				value:'',
+				dataType: '',
+				value: '',
 				rule: [],
-				
+
 				description: '',
 			},
 			rules: {
@@ -173,10 +166,8 @@ export default defineComponent({
 				isPk: [{ required: true, message: '请选择是否主键', trigger: 'blur' }],
 				dataType: [{ required: true, message: '数据节点类型不能为空', trigger: 'blur' }],
 				value: [{ required: true, message: '数据节点取值项不能为空', trigger: 'blur' }],
-			
 			},
 		});
-		
 
 		const delRule = (index) => {
 			state.rule.splice(index, 1);
@@ -196,17 +187,16 @@ export default defineComponent({
 			resetForm();
 
 			if (row?.nodeId) {
+				state.ruleForm = row;
 
-				  state.ruleForm = row
+				var data = JSON.parse(row.rule);
+				console.log(data);
 
-				 var data=JSON.parse(row.rule)
-           			 console.log(data);
-
-					data.forEach((item, index) => {
-						state.rule[index].expression = item.expression;
-						state.rule[index].params.name =Object.keys(item.params) ;
-						state.rule[index].params.value = item.params[Object.keys(item.params)];
-					});
+				data.forEach((item, index) => {
+					state.rule[index].expression = item.expression;
+					state.rule[index].params.name = Object.keys(item.params);
+					state.rule[index].params.value = item.params[Object.keys(item.params)];
+				});
 			}
 
 			state.ruleForm = row;
@@ -216,11 +206,11 @@ export default defineComponent({
 			state.ruleForm = {
 				nodeId: 0,
 				name: '',
-				isPk:0,
+				isPk: 0,
 				from: 1,
 				key: '',
 				rule: [],
-				
+
 				description: '',
 			};
 		};
@@ -237,7 +227,7 @@ export default defineComponent({
 			const formWrap = unref(formRef) as any;
 			if (!formWrap) return;
 			formWrap.validate((valid: boolean) => {
-			if (valid) {
+				if (valid) {
 					//修改rule数据
 					state.rule.forEach((item, index) => {
 						item.params[item.params.name] = item.params.value;

+ 148 - 170
src/views/datahub/source/detail.vue

@@ -3,127 +3,111 @@
 		<div class="content">
 			<div class="cont_box">
 				<div class="title">数据源名称:{{ detail.name }}</div>
-				<div class="pro-status" ><span :class="developer_status==1?'on':'off'"></span>{{developer_status==1?'已发布':'未发布'}}</div>
-			
-				<div class="pro-option"  @click="CkOption"> {{developer_status==1?'停用':'发布'}}</div>
+				<div class="pro-status"><span :class="developer_status == 1 ? 'on' : 'off'"></span>{{ developer_status == 1 ? '已发布' : '未发布' }}</div>
+
+				<div class="pro-option" @click="CkOption">{{ developer_status == 1 ? '停用' : '发布' }}</div>
 			</div>
 		</div>
 
 		<div class="content-box">
-                <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
-
-                    <el-tab-pane label="数据源信息" name="1">
-                        
-                        <el-form size="default" label-width="110px" :inline="true">
-
-                        <el-divider content-position="left">基本信息</el-divider>
-
-                            <el-form-item label="数据源标识:">
-                                  {{detail.key}}
-                                </el-form-item>
-
-                                 <el-form-item label="数据源名称:">
-                                  {{detail.name}}
-                                </el-form-item>
-                                 <el-form-item label="数据源描述:">
-                                  {{detail.description}}
-                                </el-form-item>
-                                 <el-form-item label="数据来源:">
-                                 
-                                  <span v-if="detail.from==1">api导入</span>
-                                  <span v-if="detail.from==2">数据库</span>
-                                  <span v-if="detail.from==3">文件</span>
-                                </el-form-item>
-
-                                	<el-divider content-position="left">规则表达式</el-divider>
-
-
-                                    <div v-for="(item, index) in rule" :key="index">
-                                <el-form-item label="表达式:">
-                                   {{item.expression}}
-                                </el-form-item>
-
-                                <el-form-item label="参数:" >
-                                     {{item.params.name}}~ {{item.params.value}}
-                                   
-                                </el-form-item>
-
-                                <el-divider content-position="left">数据源配置</el-divider>
-
-                                <el-form-item label="请求方法:" prop="method">
-                                        {{config.method}}
-                                </el-form-item>
-                                <el-form-item label="请求地址:" prop="method">
-                                        {{config.url}}
-                                </el-form-item>
-                                 <el-form-item label="更新时间:" prop="method">
-                                        {{config.interval}}
-                                        {{config.intervalUnit}}
-                                </el-form-item>
-
-                                <el-divider content-position="left">请求参数</el-divider>
-
-                                <div class="content-f" v-for="(item, index) in requestParams" :key="index">
-
-                                <el-form-item label="参数类型:">
-                                        {{item.type}}
-                                </el-form-item>
-                                <el-form-item label="参数标题:">
-                                        {{item.name}}
-                                </el-form-item>
-                                 <el-form-item label="参数名:">
-                                        {{item.key}}
-                                </el-form-item>
-                                 <el-form-item label="参数值:">
-                                        {{item.value}}
-                                </el-form-item>
-
-                                    
-                                       
-                                    </div>
-                            </div>
-                        </el-form>
-
-                    </el-tab-pane>
-
-                    <el-tab-pane label="数据节点" name="2">
-                        <div class="wu-box">
-                            <div class="wu-title">
-									<div class="title">数据节点</div>
-									<div><el-button type="primary" @click="onOpenEdit()">添加</el-button></div>
-								</div>
-
-                         <el-table :data="tableData.data" style="width: 100%" >
-        <el-table-column label="ID" align="center" prop="nodeId" width="80" />
-        <el-table-column label="数据标识" prop="key" :show-overflow-tooltip="true" />
-        <el-table-column label="数据名称" prop="name" :show-overflow-tooltip="true" />
-        <el-table-column label="数据类型" prop="dataType" :show-overflow-tooltip="true" />
-        <el-table-column label="数据取值项" prop="value" :show-overflow-tooltip="true" />
-        
-   
-
-		  <el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column> 
-
-        <el-table-column label="操作" width="200" align="center">
-          <template #default="scope">
-	
-
-            <el-button size="small" text type="warning" @click="onOpenEdit1(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-           </div>         
-                    </el-tab-pane>
-
-                </el-tabs>
-
-
-
-
-        </div>
- <EditDic ref="editDicRef" @typeList="typeList" />
+			<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
+				<el-tab-pane label="数据源信息" name="1">
+					<el-form size="default" label-width="110px" :inline="true">
+						<el-divider content-position="left">基本信息</el-divider>
+
+						<el-form-item label="数据源标识:">
+							{{ detail.key }}
+						</el-form-item>
+
+						<el-form-item label="数据源名称:">
+							{{ detail.name }}
+						</el-form-item>
+						<el-form-item label="数据源描述:">
+							{{ detail.description }}
+						</el-form-item>
+						<el-form-item label="数据来源:">
+							<span v-if="detail.from == 1">api导入</span>
+							<span v-if="detail.from == 2">数据库</span>
+							<span v-if="detail.from == 3">文件</span>
+						</el-form-item>
+
+						<el-divider content-position="left">规则表达式</el-divider>
+
+						<div v-for="(item, index) in rule" :key="index">
+							<el-form-item label="表达式:">
+								{{ item.expression }}
+							</el-form-item>
+
+							<el-form-item label="参数:"> {{ item.params.name }}~ {{ item.params.value }} </el-form-item>
+
+							<el-divider content-position="left">数据源配置</el-divider>
+
+							<el-form-item label="请求方法:" prop="method">
+								{{ config.method }}
+							</el-form-item>
+							<el-form-item label="请求地址:" prop="method">
+								{{ config.url }}
+							</el-form-item>
+							<el-form-item label="更新时间:" prop="method">
+								{{ config.interval }}
+								{{ config.intervalUnit }}
+							</el-form-item>
+
+							<el-divider content-position="left">请求参数</el-divider>
+
+							<div class="content-f" v-for="(item, index) in requestParams" :key="index">
+								<el-form-item label="参数类型:">
+									{{ item.type }}
+								</el-form-item>
+								<el-form-item label="参数标题:">
+									{{ item.name }}
+								</el-form-item>
+								<el-form-item label="参数名:">
+									{{ item.key }}
+								</el-form-item>
+								<el-form-item label="参数值:">
+									{{ item.value }}
+								</el-form-item>
+							</div>
+						</div>
+					</el-form>
+				</el-tab-pane>
+
+				<el-tab-pane label="数据节点" name="2">
+					<div class="wu-box">
+						<div class="wu-title">
+							<div class="title">数据节点</div>
+							<div><el-button type="primary" @click="onOpenEdit()">添加</el-button></div>
+						</div>
+
+						<el-table :data="tableData.data" style="width: 100%">
+							<el-table-column label="ID" align="center" prop="nodeId" width="80" />
+							<el-table-column label="数据标识" prop="key" :show-overflow-tooltip="true" />
+							<el-table-column label="数据名称" prop="name" :show-overflow-tooltip="true" />
+							<el-table-column label="数据类型" prop="dataType" :show-overflow-tooltip="true" />
+							<el-table-column label="数据取值项" prop="value" :show-overflow-tooltip="true" />
+
+							<el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column>
+
+							<el-table-column label="操作" width="200" align="center">
+								<template #default="scope">
+									<el-button size="small" text type="warning" @click="onOpenEdit1(scope.row)">修改</el-button>
+									<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
+								</template>
+							</el-table-column>
+						</el-table>
+						<pagination
+							v-show="tableData.total > 0"
+							:total="tableData.total"
+							v-model:page="tableData.param.pageNum"
+							v-model:limit="tableData.param.pageSize"
+							@pagination="typeList"
+						/>
+					</div>
+				</el-tab-pane>
+			</el-tabs>
+		</div>
+		<EditDic ref="editDicRef" @typeList="typeList" />
 	</div>
 </template>            
 <script lang="ts">
@@ -151,14 +135,14 @@ interface TableDataState {
 	};
 }
 export default defineComponent({
-    name: 'dataDetail',
-    components: { EditDic },
-    setup(prop, context) {
-        		const editDicRef = ref();
+	name: 'dataDetail',
+	components: { EditDic },
+	setup(prop, context) {
+		const editDicRef = ref();
 
 		const route = useRoute();
-        const state = reactive<TableDataState>({
-            config: {},
+		const state = reactive<TableDataState>({
+			config: {},
 			ruledata: [
 				{
 					expression: '',
@@ -182,11 +166,11 @@ export default defineComponent({
 					value: '',
 				},
 			],
-          
+
 			isShowDialog: false,
 			detail: [],
-            activeName: '1',
-			developer_status:0,
+			activeName: '1',
+			developer_status: 0,
 			tableData: {
 				data: [],
 				total: 0,
@@ -194,60 +178,55 @@ export default defineComponent({
 				param: {
 					pageNum: 1,
 					pageSize: 10,
-                    sourceId: route.params && route.params.sourceId,
+					sourceId: route.params && route.params.sourceId,
 					status: '',
 					dateRange: [],
 				},
 			},
 		});
 
-
-
-        onMounted(() => {
+		onMounted(() => {
 			const ids = route.params && route.params.sourceId;
 			api.common.detail(ids).then((res: any) => {
 				state.detail = res.data;
-				state.developer_status=res.data.status
-				state.config=res.data.apiConfig
-				state.requestParams=res.data.apiConfig.requestParams
-                res.data.sourceRule.forEach((item, index) => {
-						state.rule[index].expression = item.expression;
-						state.rule[index].params.name =Object.keys(item.params) ;
-						state.rule[index].params.value = item.params[Object.keys(item.params)];
-					});
-
-           	
+				state.developer_status = res.data.status;
+				state.config = res.data.apiConfig;
+				state.requestParams = res.data.apiConfig.requestParams;
+				res.data.sourceRule.forEach((item, index) => {
+					state.rule[index].expression = item.expression;
+					state.rule[index].params.name = Object.keys(item.params);
+					state.rule[index].params.value = item.params[Object.keys(item.params)];
+				});
 			});
 
-                typeList();
+			typeList();
 		});
 
-        const typeList = () => {
+		const typeList = () => {
 			api.node.getList(state.tableData.param).then((res: any) => {
 				state.tableData.data = res.list;
 				state.tableData.total = res.Total;
 			});
 		};
 
-
-        const CkOption=()=>{
-                if(state.developer_status==1){
-                    api.common.undeploy({sourceId:route.params.sourceId}).then((res: any) => {
-                        ElMessage.success('操作成功');
-                        state.developer_status=0;
-                    });
-                }else{
-                    api.common.deploy({sourceId:route.params.sourceId}).then((res: any) => {
-                        ElMessage.success('操作成功');
-                        state.developer_status=1;
-                    });
-                }
-		}
-        const handleClick = (tab: TabsPaneContext, event: Event) => {
+		const CkOption = () => {
+			if (state.developer_status == 1) {
+				api.common.undeploy({ sourceId: route.params.sourceId }).then((res: any) => {
+					ElMessage.success('操作成功');
+					state.developer_status = 0;
+				});
+			} else {
+				api.common.deploy({ sourceId: route.params.sourceId }).then((res: any) => {
+					ElMessage.success('操作成功');
+					state.developer_status = 1;
+				});
+			}
+		};
+		const handleClick = (tab: TabsPaneContext, event: Event) => {
 			console.log(tab, event);
 		};
 
-        	const onRowDel = (row: TableDataRow) => {
+		const onRowDel = (row: TableDataRow) => {
 			let msg = '你确定要删除所选数据?';
 			let ids: number[] = [];
 			if (row) {
@@ -274,28 +253,27 @@ export default defineComponent({
 				.catch(() => {});
 		};
 
-        	// 打开修改数据源弹窗
+		// 打开修改数据源弹窗
 		const onOpenEdit = () => {
-			editDicRef.value.openDialog({ sourceId: route.params.sourceId, nodeId: 0 ,isPk:0});
+			editDicRef.value.openDialog({ sourceId: route.params.sourceId, nodeId: 0, isPk: 0 });
 		};
-        const onOpenEdit1 = (row: TableDataRow) => {
+		const onOpenEdit1 = (row: TableDataRow) => {
 			editDicRef.value.openDialog(row);
 		};
 
-        	return {
+		return {
 			Edit,
-            editDicRef,
-            typeList,
-            onRowDel,
-            onOpenEdit,
-            onOpenEdit1,
-            handleClick,
+			editDicRef,
+			typeList,
+			onRowDel,
+			onOpenEdit,
+			onOpenEdit1,
+			handleClick,
 			CkOption,
 			...toRefs(state),
 		};
-    },
+	},
 });
-
 </script>
 <style>
 .content {

+ 103 - 85
src/views/datahub/source/index.vue

@@ -1,91 +1,110 @@
 <template>
-  <div class="system-dic-container">
-    <el-card shadow="hover">
-      <div class="system-user-search mb15">
-        <el-form :model="tableData.param" ref="queryRef" :inline="true" >
+	<div class="system-dic-container">
+		<el-card shadow="hover">
+			<div class="system-user-search mb15">
+				<el-form :model="tableData.param" ref="queryRef" :inline="true">
+					<el-form-item label="数据源标识" prop="key">
+						<el-input
+							v-model="tableData.param.key"
+							placeholder="数据源标识"
+							clearable
+							size="default"
+							style="width: 240px"
+							@keyup.enter.native="typeList"
+						/>
+					</el-form-item>
+					<el-form-item label="数据源名称" prop="name">
+						<el-input
+							v-model="tableData.param.name"
+							placeholder="请输入数据源名称"
+							clearable
+							size="default"
+							style="width: 240px"
+							@keyup.enter.native="typeList"
+						/>
+					</el-form-item>
 
-		 <el-form-item label="数据源标识" prop="key">
-            <el-input v-model="tableData.param.key" placeholder="数据源标识" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
-          </el-form-item>
-          <el-form-item label="数据源名称" prop="name">
-            <el-input v-model="tableData.param.name" placeholder="请输入数据源名称" clearable size="default" style="width: 240px" @keyup.enter.native="typeList" />
-          </el-form-item>
-		 
-          <el-form-item label="数据源类型" prop="host">
-				<el-select v-model="tableData.param.from" placeholder="请选择数据源类型" @keyup.enter.native="typeList">
-						<el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
-					</el-select>
-          </el-form-item>
-      
-        
-         
-          <el-form-item>
-            <el-button size="default" type="primary" class="ml10" @click="typeList">
-              <el-icon>
-                <ele-Search />
-              </el-icon>
-              查询
-            </el-button>
-            <el-button size="default" @click="resetQuery(queryRef)">
-              <el-icon>
-                <ele-Refresh />
-              </el-icon>
-              重置
-            </el-button>
-            <el-button size="default" type="success" class="ml10" @click="onOpenAdd">
-              <el-icon>
-                <ele-FolderAdd />
-              </el-icon>
-              新增数据源
-            </el-button>
-       <el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
-              <el-icon>
-                <ele-Delete />
-              </el-icon>
-              删除
-            </el-button>
-          </el-form-item>
-        </el-form>
-      </div>
-      <el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55" align="center" />
-        <el-table-column label="ID" align="center" prop="sourceId" width="80" />
-        <el-table-column label="数据源标识" prop="key" :show-overflow-tooltip="true" />
-        <el-table-column label="数据源名称" prop="name" :show-overflow-tooltip="true" />
-         <el-table-column prop="from" label="数据源类型"  align="center">
-          <template #default="scope">
-		  	<span v-if="scope.row.from==1">api导入</span>
-		  	<span v-if="scope.row.from==2">数据库</span>
-		  	<span v-if="scope.row.from==3">文件</span>
-          </template>
-        </el-table-column>
-        <el-table-column prop="status" label="状态" width="120" align="center">
-          <template #default="scope">
-            <el-tag type="success" size="small" v-if="scope.row.status==1">已发布</el-tag>
-            <el-tag type="info" size="small" v-if="scope.row.status==0">未发布</el-tag>
-          </template>
-        </el-table-column>
+					<el-form-item label="数据源类型" prop="host">
+						<el-select v-model="tableData.param.from" placeholder="请选择数据源类型" @keyup.enter.native="typeList">
+							<el-option v-for="item in typeData" :key="item.value" :label="item.label" :value="item.value" />
+						</el-select>
+					</el-form-item>
 
-		  <el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column> 
+					<el-form-item>
+						<el-button size="default" type="primary" class="ml10" @click="typeList">
+							<el-icon>
+								<ele-Search />
+							</el-icon>
+							查询
+						</el-button>
+						<el-button size="default" @click="resetQuery(queryRef)">
+							<el-icon>
+								<ele-Refresh />
+							</el-icon>
+							重置
+						</el-button>
+						<el-button size="default" type="success" class="ml10" @click="onOpenAdd">
+							<el-icon>
+								<ele-FolderAdd />
+							</el-icon>
+							新增数据源
+						</el-button>
+						<el-button size="default" type="danger" class="ml10" @click="onRowDel(null)">
+							<el-icon>
+								<ele-Delete />
+							</el-icon>
+							删除
+						</el-button>
+					</el-form-item>
+				</el-form>
+			</div>
+			<el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
+				<el-table-column type="selection" width="55" align="center" />
+				<el-table-column label="ID" align="center" prop="sourceId" width="80" />
+				<el-table-column label="数据源标识" prop="key" :show-overflow-tooltip="true" />
+				<el-table-column label="数据源名称" prop="name" :show-overflow-tooltip="true" />
+				<el-table-column prop="from" label="数据源类型" align="center">
+					<template #default="scope">
+						<span v-if="scope.row.from == 1">api导入</span>
+						<span v-if="scope.row.from == 2">数据库</span>
+						<span v-if="scope.row.from == 3">文件</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="status" label="状态" width="120" align="center">
+					<template #default="scope">
+						<el-tag type="success" size="small" v-if="scope.row.status == 1">已发布</el-tag>
+						<el-tag type="info" size="small" v-if="scope.row.status == 0">未发布</el-tag>
+					</template>
+				</el-table-column>
 
-        <el-table-column label="操作" width="200" align="center">
-          <template #default="scope">
-		   	<router-link :to="'/datahub/source/detail/' + scope.row.sourceId" class="link-type" style="padding-right: 12px;
-    font-size: 12px;color: #409eff;">
-              <span>详情</span>
-            </router-link>
+				<el-table-column prop="createdAt" label="创建时间" align="center" width="180"></el-table-column>
 
-            <el-button size="small" text type="warning" @click="onOpenEdit(scope.row)">修改</el-button>
-            <el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-      <pagination v-show="tableData.total>0" :total="tableData.total" v-model:page="tableData.param.pageNum" v-model:limit="tableData.param.pageSize" @pagination="typeList" />
-    </el-card>
-    <EditDic ref="editDicRef" @typeList="typeList" />
-	    <Detail ref="detailRef"  />
+				<el-table-column label="操作" width="200" align="center">
+					<template #default="scope">
+						<router-link
+							:to="'/datahub/source/detail/' + scope.row.sourceId"
+							class="link-type"
+							style="padding-right: 12px; font-size: 12px; color: #409eff"
+						>
+							<span>详情</span>
+						</router-link>
 
-  </div>
+						<el-button size="small" text type="warning" @click="onOpenEdit(scope.row)">修改</el-button>
+						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button>
+					</template>
+				</el-table-column>
+			</el-table>
+			<pagination
+				v-show="tableData.total > 0"
+				:total="tableData.total"
+				v-model:page="tableData.param.pageNum"
+				v-model:limit="tableData.param.pageSize"
+				@pagination="typeList"
+			/>
+		</el-card>
+		<EditDic ref="editDicRef" @typeList="typeList" />
+		<Detail ref="detailRef" />
+	</div>
 </template>
 
 <script lang="ts">
@@ -115,7 +134,6 @@ interface TableDataState {
 			name: string;
 			key: string;
 			from: string;
-			
 		};
 	};
 }
@@ -152,7 +170,7 @@ export default defineComponent({
 					pageSize: 10,
 					name: '',
 					types: '',
-					status:'',
+					status: '',
 				},
 			},
 		});
@@ -214,7 +232,7 @@ export default defineComponent({
 		const handleSelectionChange = (selection: TableDataRow[]) => {
 			state.ids = selection.map((item) => item.sourceId);
 		};
-	
+
 		return {
 			addDicRef,
 			editDicRef,