소스 검색

发布数据源增加关联设置的功能

yukai 2 년 전
부모
커밋
516df0bd80
3개의 변경된 파일165개의 추가작업 그리고 13개의 파일을 삭제
  1. 3 0
      src/api/datahub/index.ts
  2. 131 0
      src/views/system/datahub/modeling/component/relation.vue
  3. 31 13
      src/views/system/datahub/modeling/detail.vue

+ 3 - 0
src/api/datahub/index.ts

@@ -46,6 +46,9 @@ export default {
       getDictData: (params: object) => get('/common/dict/data/getDictData',  params ),
       cityTree: (params: object) => get('/common/city/tree',  params ),
       copy: (params: object) => post('/source/template/copy', params),
+      relation_check: (id: number) => get('/source/template/relation_check', { id }),
+      source_list: (id: number) => get('/source/template/source_list', { id }),
+      relation: (data: object) => post('/source/template/relation', data),
       
    } ,
 

+ 131 - 0
src/views/system/datahub/modeling/component/relation.vue

@@ -0,0 +1,131 @@
+<template>
+	<div class="system-edit-dic-container">
+		<el-dialog title="设置主源、关联字段" v-model="isShowDialog" width="769px">
+			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
+
+				<el-form-item label="数据源节点" prop="mainSourceId">
+						<el-select v-model="ruleForm.mainSourceId" filterable placeholder="请选择数据源" @change="setNode">
+							<el-option v-for="item in data" :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>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="onCancel" size="default">取 消</el-button>
+					<el-button type="primary" @click="onSubmit" size="default">设置</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 { stat } from 'fs';
+
+interface RuleFormState {
+	id?: number;
+	mainSourceId: string;
+	sourceNodeKey: string;
+}
+interface DicState {
+	isShowDialog: boolean;
+	ruleForm: RuleFormState;
+	rules: {};
+	data: {};
+}
+
+export default defineComponent({
+	name: 'relation',
+	setup(prop, { emit }) {
+		const formRef = ref<HTMLElement | null>(null);
+		const state = reactive<DicState>({
+			isShowDialog: false,
+			data:[],
+			ruleForm: {
+				id: 0,
+				mainSourceId: '',
+				sourceNodeKey: '',
+			},
+			rules: {
+				mainSourceId: [{ required: true, message: '请选择数据源', trigger: 'blur' }],
+				
+			},
+		});
+
+		// 打开弹窗
+		const openDialog = (row: RuleFormState | null) => {
+			resetForm();
+			api.template.source_list(row.id).then((res: any) => {
+				state.data = res.List;
+				
+			});
+
+			if (row) {
+				state.ruleForm = row;
+			}
+			state.isShowDialog = true;
+		};
+		const resetForm = () => {
+			state.ruleForm = {
+				id: 0,
+				mainSourceId: '',
+				sourceNodeKey: '',
+			};
+		};
+
+
+
+
+		// 关闭弹窗
+		const closeDialog = () => {
+			state.isShowDialog = false;
+		};
+		// 取消
+		const onCancel = () => {
+			closeDialog();
+		};
+
+		const setNode = (event) => {
+			state.data.forEach((item, index) => {
+				if (item.sourceId == event) {
+					state.ruleForm.sourceNodeKey = item.key;
+				}
+			});
+		};
+		// 新增
+		const onSubmit = () => {
+			const formWrap = unref(formRef) as any;
+			if (!formWrap) return;
+			formWrap.validate((valid: boolean) => {
+				if (valid) {
+					api.template.relation(state.ruleForm).then(() => {
+						ElMessage.success('设置成功');
+						closeDialog(); // 关闭弹窗
+						emit('typeList');
+					});
+				}
+			});
+		};
+	
+
+		return {
+			setNode,
+			openDialog,
+			closeDialog,
+			onCancel,
+			onSubmit,
+			formRef,
+			...toRefs(state),
+		};
+	},
+});
+</script>
+

+ 31 - 13
src/views/system/datahub/modeling/detail.vue

@@ -83,6 +83,7 @@
       </div>
     </div>
     <EditDic ref="editDicRef" @typeList="typeList" />
+    <RelationDic ref="relationRef" @typeList="typeList" />
   </div>
 </template>
 <script lang="ts">
@@ -91,6 +92,7 @@ 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 RelationDic from './component/relation.vue';
 import api from '/@/api/datahub';
 
 interface TableDataState {
@@ -111,10 +113,10 @@ interface TableDataState {
 }
 export default defineComponent({
   name: 'dataDetail',
-  components: { EditDic },
+  components: { EditDic,RelationDic },
   setup(prop, context) {
     const editDicRef = ref();
-
+    const relationRef=ref();
     const route = useRoute();
     const state = reactive<TableDataState>({
       config: {},
@@ -198,22 +200,38 @@ export default defineComponent({
     };
 
     const CkOption = () => {
-      if (state.developer_status == 1) {
-        api.tnode.undeploy({ id: route.params.id }).then((res: any) => {
-          ElMessage.success('操作成功');
-          state.developer_status = 0;
-        });
-      } else {
-        api.tnode.deploy({ id: route.params.id }).then((res: any) => {
-          ElMessage.success('操作成功');
-          state.developer_status = 1;
-        });
-      }
+      //检测是否需要设置关联
+      api.template.relation_check(route.params.id).then((res: any) => {
+          if(res.yes){
+            let ids={
+              id:route.params.id,
+            }
+            relationRef.value.openDialog(ids);
+          }else{
+            if (state.developer_status == 1) {
+                api.tnode.undeploy({ id: route.params.id }).then((res: any) => {
+                  ElMessage.success('操作成功');
+                  state.developer_status = 0;
+                });
+              } else {
+                api.tnode.deploy({ id: route.params.id }).then((res: any) => {
+                  ElMessage.success('操作成功');
+                  state.developer_status = 1;
+                });
+              }
+          }
+        
+       });
+
+   
+
+
     };
 
     return {
       Edit,
       CkOption,
+      relationRef,
       editDicRef,
       onOpenAdd,
       typeList,