Răsfoiți Sursa

完成数据节点添加修改删除

yukai 3 ani în urmă
părinte
comite
c261d23834

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

@@ -10,6 +10,13 @@ export default {
     detail: (sourceId: number) => get('/source/detail', { sourceId }),
     deploy: (data: object) => post('/source/deploy', data),
     undeploy: (data: object) => post('/source/undeploy', data),  
-    }
+    },
+   
+   node:{
+      getList: (params: object) => get('/source/node/list', params),
+      add: (data: object) => post('/source/node/add', data),
+      delete: (nodeId: number) => del('/source/node/del', { nodeId }),
+      edit: (data: object) => put('/source/node/edit', data),
+   } 
   
 }

+ 6 - 4
src/views/datahub/source/component/edit.vue

@@ -111,8 +111,10 @@ export default defineComponent({
 	components: { Delete, Minus, Right },
 
 	setup(prop, { emit }) {
+		const editDicRef = ref();
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
+			
 			isShowDialog: false,
 			config: {},
 			ruledata: [
@@ -241,11 +243,11 @@ export default defineComponent({
 
 			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
+				    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.value = item.params[Object.keys(item.params)];

+ 260 - 0
src/views/datahub/source/component/editNode.vue

@@ -0,0 +1,260 @@
+<template>
+	<div class="system-edit-dic-container">
+		<el-dialog :title="(ruleForm.nodeId !== 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>
+				<el-form-item label="数据节点名称" prop="name">
+					<el-input v-model="ruleForm.name" placeholder="请输入数据节点名称" />
+				</el-form-item>
+
+			<el-form-item label="数据类型" prop="dataType">
+					<el-input v-model="ruleForm.dataType" placeholder="请输入数据类型" />
+				</el-form-item>
+
+				<el-form-item label="取值项" prop="value">
+					<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="表达式" prop="expression">
+						<el-input v-model="item.expression" placeholder="请输入规则表达式" />
+					</el-form-item>
+
+					<el-form-item label="参数" prop="params">
+						<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>
+			<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>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script lang="ts">
+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 {
+	nodeId: number;
+	name: string;
+	from: number;
+	key: string;
+	dataType: string;
+	value: string;
+	description: string;
+	status: number;
+}
+interface DicState {
+	isShowDialog: boolean;
+	ruleForm: RuleFormState;
+	rules: {};
+}
+
+export default defineComponent({
+	name: 'Edit',
+	components: { Delete, Minus, Right },
+
+	setup(prop, { emit }) {
+		const editDicRef = ref();
+		const formRef = ref<HTMLElement | null>(null);
+		const state = reactive<DicState>({
+			
+			isShowDialog: false,
+			config: {},
+			ruledata: [
+				{
+					expression: '',
+					params: {},
+				},
+			],
+			rule: [
+				{
+					expression: '',
+					params: {
+						name: '',
+						value: '',
+					},
+				},
+			],
+			
+		
+
+		
+			ruleForm: {
+				nodeId: 0,
+				name: '',
+				key: '',
+				dataType:'',
+				value:'',
+				rule: [],
+				
+				description: '',
+			},
+			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)];
+					});
+			}
+
+			state.ruleForm = row;
+			state.isShowDialog = true;
+		};
+		const resetForm = () => {
+			state.ruleForm = {
+				nodeId: 0,
+				name: '',
+				from: 1,
+				key: '',
+				rule: [],
+				
+				description: '',
+			};
+		};
+		// 关闭弹窗
+		const closeDialog = () => {
+			state.isShowDialog = false;
+		};
+		// 取消
+		const onCancel = () => {
+			closeDialog();
+		};
+		// 新增
+		const onSubmit = () => {
+			const formWrap = unref(formRef) as any;
+			if (!formWrap) return;
+			formWrap.validate((valid: boolean) => {
+				if (valid) {
+					//修改rule数据
+					state.rule.forEach((item, index) => {
+						state.ruledata[index].expression = item.expression;
+						state.ruledata[index].params[item.params.name] = item.params.value;
+					});
+
+					state.ruleForm.rule = state.ruledata;
+
+					if (state.ruleForm.nodeId !== 0) {
+						//修改
+						api.node.edit(state.ruleForm).then(() => {
+							ElMessage.success('数据节点类型修改成功');
+							closeDialog(); // 关闭弹窗
+							emit('typeList');
+						});
+					} else {
+						//添加
+
+						api.node.add(state.ruleForm).then(() => {
+							ElMessage.success('数据节点类型添加成功');
+							closeDialog(); // 关闭弹窗
+							emit('typeList');
+						});
+					}
+				}
+			});
+		};
+
+		return {
+			addRule,
+			delRule,
+			openDialog,
+			closeDialog,
+			onCancel,
+			onSubmit,
+			formRef,
+			...toRefs(state),
+		};
+	},
+});
+</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>

+ 82 - 3
src/views/datahub/source/detail.vue

@@ -87,7 +87,34 @@
                     </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>
@@ -96,7 +123,7 @@
 
 
         </div>
-
+ <EditDic ref="editDicRef" @typeList="typeList" />
 	</div>
 </template>            
 <script lang="ts">
@@ -104,6 +131,7 @@ import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { Delete, Edit, Search, Share, Upload } from '@element-plus/icons-vue';
 import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 import { useRoute } from 'vue-router';
+import EditDic from './component/editNode.vue';
 import api from '/@/api/datahub';
 
 interface TableDataState {
@@ -124,7 +152,10 @@ interface TableDataState {
 }
 export default defineComponent({
     name: 'dataDetail',
+    components: { EditDic },
     setup(prop, context) {
+        		const editDicRef = ref();
+
 		const route = useRoute();
         const state = reactive<TableDataState>({
             config: {},
@@ -163,6 +194,7 @@ export default defineComponent({
 				param: {
 					pageNum: 1,
 					pageSize: 10,
+                    sourceId: route.params && route.params.sourceId,
 					status: '',
 					dateRange: [],
 				},
@@ -187,9 +219,16 @@ export default defineComponent({
            	
 			});
 
-	
+                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){
@@ -208,8 +247,48 @@ export default defineComponent({
 			console.log(tab, event);
 		};
 
+        	const onRowDel = (row: TableDataRow) => {
+			let msg = '你确定要删除所选数据?';
+			let ids: number[] = [];
+			if (row) {
+				msg = `此操作将永久删除数据节点:“${row.name}”,是否继续?`;
+				ids = row.nodeId;
+			} else {
+				ids = state.ids;
+			}
+			if (ids.length === 0) {
+				ElMessage.error('请选择要删除的数据。');
+				return;
+			}
+			ElMessageBox.confirm(msg, '提示', {
+				confirmButtonText: '确认',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(() => {
+					api.node.delete(ids).then(() => {
+						ElMessage.success('删除成功');
+						typeList();
+					});
+				})
+				.catch(() => {});
+		};
+
+        	// 打开修改数据源弹窗
+		const onOpenEdit = () => {
+			editDicRef.value.openDialog({ sourceId: route.params.sourceId, nodeId: 0 });
+		};
+        const onOpenEdit1 = (row: TableDataRow) => {
+			editDicRef.value.openDialog(row);
+		};
+
         	return {
 			Edit,
+            editDicRef,
+            typeList,
+            onRowDel,
+            onOpenEdit,
+            onOpenEdit1,
             handleClick,
 			CkOption,
 			...toRefs(state),

+ 0 - 4
src/views/datahub/source/index.vue

@@ -59,10 +59,6 @@
 		  	<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>