Просмотр исходного кода

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

vera_min 3 лет назад
Родитель
Сommit
189868027f

+ 2 - 2
.env.development

@@ -2,8 +2,8 @@
 ENV = 'development'
 
 # 本地环境接口地址
-VITE_API_URL = 'http://101.200.198.249:8899/api/v1'
+#VITE_API_URL = 'http://101.200.198.249:8899/api/v1'
 VITE_IMG_URL = 'http://101.200.198.249:8899/'
 VITE_ASSESS_URL = 'http://zhgy.sagoo.cn/base-api/assess/v1'
-#VITE_API_URL = 'http://sgadserver.wdeveloperw.xyz/api/v1'
+VITE_API_URL = 'http://sgadserver.wdeveloperw.xyz/api/v1'
 # VITE_IMG_URL = 'http://sgadserver.wdeveloperw.xyz/'

+ 2 - 0
package.json

@@ -17,6 +17,7 @@
     "@element-plus/icons-vue": "^2.0.9",
     "amis": "^2.1.1-beta.2",
     "axios": "^0.26.0",
+    "clipboard": "^2.0.11",
     "countup.js": "^2.1.0",
     "cropperjs": "^1.5.12",
     "echarts": "^5.3.0",
@@ -37,6 +38,7 @@
     "vue-grid-layout": "^3.0.0-beta1",
     "vue-i18n": "9.1.10",
     "vue-router": "^4.0.13",
+    "vue3-json-viewer": "^2.2.2",
     "vuex": "^4.0.2",
     "wangeditor": "^4.7.12"
   },

+ 1 - 0
plugins.d.ts

@@ -1,3 +1,4 @@
 declare module 'vue-grid-layout';
 declare module 'qrcodejs2-fixes';
 declare module 'splitpanes';
+declare module 'vue3-json-viewer';

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

@@ -10,6 +10,7 @@ export default {
     detail: (sourceId: number) => get('/source/detail', { sourceId }),
     deploy: (data: object) => post('/source/deploy', data),
     undeploy: (data: object) => post('/source/undeploy', data),  
+    api: (sourceId: number) => get('/source/api/get', { sourceId }),
     },
    
    node:{
@@ -17,6 +18,24 @@ 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 }),
+      getdata: (id: number) => get('/source/template/getdata', { 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),
+      deploy: (data: object) => post('/source/template/deploy', data),
+      undeploy: (data: object) => post('/source/template/undeploy', data),  
+   },
   
 }

+ 5 - 1
src/api/heatingDistrict/index.ts

@@ -8,6 +8,7 @@ export default {
     edit: (data: object) => put('/region/plot/edit', data),
     del: (id: number) => del('/region/plot/del', { id }),
     detail: (id: number) => get('/region/plot/detail', { id }),
+    setStatus: (id: number, status: number) => put('/region/plot/editStatus', { id, status }),
   },
   floor: {
     allList: (params: object) => get('/region/floor/all', params),
@@ -16,6 +17,7 @@ export default {
     edit: (data: object) => put('/region/floor/edit', data),
     del: (id: number) => del('/region/floor/del', { id }),
     detail: (id: number) => get('/region/floor/detail', { id }),
+    setStatus: (id: number, status: number) => put('/region/floor/editStatus', { id, status }),
   },
   unit: {
     getListByFloorId: (params: object) => get('/region/unit/getInfoByFloorId', params),
@@ -24,6 +26,7 @@ export default {
     edit: (data: object) => put('/region/unit/edit', data),
     del: (id: number) => del('/region/unit/del', { id }),
     detail: (id: number) => get('/region/unit/getInfoById', { id }),
+    setStatus: (id: number, status: number) => put('/region/unit/editStatus', { id, status }),
   },
   resident: {
     allList: (params: object) => get('/region/resident/all', params),
@@ -31,6 +34,7 @@ export default {
     add: (data: object) => post('/region/resident/add', data),
     edit: (data: object) => put('/region/resident/edit', data),
     del: (id: number) => del('/region/resident/del', { id }),
-    detail: (id: number) => get('/region/resident/detail', { id }),
+    detail: (id: number) => get('/region/resident/getInfoById', { id }),
+    setStatus: (id: number, status: number) => put('/region/resident/editStatus', { id, status }),
   }
 }

+ 6 - 1
src/main.ts

@@ -1,5 +1,5 @@
 import { createApp } from 'vue';
-import Vue from 'vue';
+// import Vue from 'vue';
 import App from './App.vue';
 import router from './router';
 import { store, key } from './store';
@@ -21,6 +21,10 @@ import 'amis/lib/themes/default.css';
 // 引入百度地图组件
 // import BaiduMap from 'vue-baidu-map-3x'
 
+//引入json数据展示
+import JsonViewer from "vue3-json-viewer"
+
+
 const app = createApp(App);
 
 directive(app);
@@ -31,6 +35,7 @@ app.use(router)
     .use(store, key)
     .use(ElementPlus, { i18n: i18n.global.t })
     .use(i18n)
+    .use(JsonViewer)
     .use(VueGridLayout)
     // .use(BaiduMap, { ak: 'Kp8XHK81HSF6rfRkYP7OxYKtK8IaG51d', type: 'WebGl', v: '2.0' })
     .mount('#app');

+ 18 - 0
src/views/configuration/tools.vue

@@ -0,0 +1,18 @@
+<template>
+  <div class="page-wrapper page-full">
+    <iframe class="iframe" :src="src" frameborder="0"></iframe>
+  </div>
+</template>
+
+<script setup lang="ts">
+import { Session } from '/@/utils/storage';
+const src = 'http://home.yanglizhi.cn:10001/?token=' + encodeURIComponent(Session.get('token'))
+</script>
+
+<style scoped lang="scss">
+  .iframe{
+    width: 100%;
+    height: 100%;
+    background: #fff;
+  }
+</style>

+ 87 - 0
src/views/datahub/modeling/component/detail.vue

@@ -0,0 +1,87 @@
+<template>
+	<div class="system-edit-dic-container">
+		<el-dialog title="数据记录" v-model="isShowDialog" width="75%">
+
+
+			<el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
+
+
+
+
+       <el-form-item :label="item+':'"  v-for="(item,index) in jData" >
+          {{jsonsData[index]}}
+        </el-form-item>
+
+
+        
+			</el-form>
+
+		</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";
+
+interface DicState {
+	isShowDialog: boolean;
+}
+
+export default defineComponent({
+	name: 'deviceEditPro',
+	setup(prop,{emit}) {
+    const formRef = ref<HTMLElement | null>(null);
+		const state = reactive<DicState>({
+			isShowDialog: false,
+      jsonsData:[],
+      jData:[]
+	
+ 
+		});
+		// 打开弹窗
+		const openDialog = (row: RuleFormState|null) => {
+      resetForm();
+      if (row){
+        api.template.getdata(row.id).then((res:any)=>{
+
+          const jsonData=JSON.parse(res.data);
+        
+          state.jData=Object.keys(jsonData);
+          console.log(state.jData);
+          state.jData.forEach((item, index) => {
+						state.jsonsData[index] = jsonData[item];
+					});
+
+          console.log(state.jsonsData);
+          //state.ruleForm = res.data.dictType
+        })
+        state.ruleForm = row;
+      }
+			state.isShowDialog = true;
+		};
+    const resetForm = ()=>{
+      state.jsonsData=[];
+      state.jData=[];
+    };
+		// 关闭弹窗
+		const closeDialog = () => {
+			state.isShowDialog = false;
+		};
+		// 取消
+		const onCancel = () => {
+			closeDialog();
+		};
+
+
+		return {
+			openDialog,
+			closeDialog,
+			onCancel,
+      formRef,
+			...toRefs(state),
+		};
+	},
+});
+</script>

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

@@ -1,23 +1,29 @@
 <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-form-item label="更新时间" prop="interval">
+					<el-input v-model="ruleForm.interval" placeholder="请输入更新时间" class="w-35" />
+					<el-select v-model="ruleForm.intervalUnit" placeholder="请选择单位">
+						<el-option v-for="item in unitData" :key="item.value" :label="item.label" :value="item.value" />
+					</el-select>
 				</el-form-item>
 
+				<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.sourceId !== 0 ? '修 改' : '添 加' }}</el-button>
+					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.id !== 0 ? '修 改' : '添 加' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
@@ -28,14 +34,13 @@
 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;
+	interval: string;
 	key: string;
-	description: string;
-	status: number;
+	desc: string;
 }
 interface DicState {
 	isShowDialog: boolean;
@@ -45,99 +50,59 @@ 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,
-			
-
+			unitData: [
+				{
+					label: '秒',
+					value: 'second',
+				},
+				{
+					label: '分',
+					value: 'minute',
+				},
+				{
+					label: '时',
+					value: 'hour',
+				},
+				{
+					label: '天',
+					value: 'day',
+				},
+			],
 			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' }],
+				interval: [{ 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 +119,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 +140,6 @@ export default defineComponent({
 		};
 
 		return {
-			addRule,
-			delRule,
-			addParams,
-			delParams,
 			openDialog,
 			closeDialog,
 			onCancel,
@@ -200,34 +150,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>

+ 161 - 172
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>
@@ -10,54 +37,34 @@
 				</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-select>
-				</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="表达式" >
-						<el-input v-model="item.expression" 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-select>
+				</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="method" v-if="ruleForm.dataType=='int' || ruleForm.dataType=='bigint' || ruleForm.dataType=='float' || ruleForm.dataType=='double'">
+					<el-select v-model="ruleForm.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="默认值" prop="default">
+					<el-input v-model="ruleForm.default" placeholder="请输入取值项" />
+				</el-form-item>
 
-			
+				<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 +78,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 +103,143 @@ 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:  [
+			methodData:[
 				{
-					expression: '',
-					params: {
-						name: '',
-						value: '',
-					},
-				},
+					label: 'max',
+					value: 'max',
+				},{
+					label: 'min',
+					value: 'min',
+				},{
+					label: 'avg',
+					value: 'avg',
+				}
 			],
-			rule: [
+			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',
+				},
 				{
-					expression: '',
-					params: {
-						name: '',
-						value: '',
-					},
+					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' }],
-			
+				method: [{ 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 +255,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 +266,7 @@ export default defineComponent({
 					} else {
 						//添加
 
-						api.node.add(state.ruleForm).then(() => {
+						api.tnode.add(state.ruleForm).then(() => {
 							ElMessage.success('字段节点类型添加成功');
 							closeDialog(); // 关闭弹窗
 							emit('typeList');
@@ -259,8 +277,9 @@ export default defineComponent({
 		};
 
 		return {
-			addRule,
-			delRule,
+			getSouData,
+			getNodeList,
+			setNode,
 			openDialog,
 			closeDialog,
 			onCancel,
@@ -271,34 +290,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>

+ 130 - 113
src/views/datahub/modeling/detail.vue

@@ -2,83 +2,95 @@
 	<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 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">
+			<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-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-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-button> -->
+						</el-form-item>
+					</el-form>
+				</div>
 
+				<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>
 
-
-
-        </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 +118,19 @@ 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: [],
-            
+			developer_status:0,
+
 			tableData: {
 				data: [],
 				total: 0,
@@ -125,52 +138,40 @@ 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;
+				state.developer_status=res.data.status
+			});
 
-
-        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 +185,7 @@ export default defineComponent({
 				type: 'warning',
 			})
 				.then(() => {
-					api.node.delete(ids).then(() => {
+					api.tnode.delete(ids).then(() => {
 						ElMessage.success('删除成功');
 						typeList();
 					});
@@ -192,24 +193,42 @@ 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 });
+		};
+
+		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;
+				});
+			}
+		};
+
+		return {
 			Edit,
-            editDicRef,
-            typeList,
-            onRowDel,
-            onOpenEdit,
-            handleClick,
 			CkOption,
+			editDicRef,
+			onOpenAdd,
+			typeList,
+			onRowDel,
+			onOpenEdit,
+			handleClick,
 			...toRefs(state),
 		};
-    },
+	},
 });
-
 </script>
 <style>
 .content {
@@ -268,6 +287,4 @@ export default defineComponent({
 	border: 0px;
 	color: #1890ff;
 }
-
-
 </style>

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

@@ -1,89 +1,108 @@
 <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="400" align="center">
+					<template #default="scope">
 
-        <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>
+						<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-button size="small" text type="success" @click="onOpenRecord(scope.row)" >数据记录</el-button>
+						<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">
 import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 import EditDic from './component/edit.vue';
+import Detail from './component/detail.vue';
 import api from '/@/api/datahub';
 
 // 定义接口来定义对象的类型
 interface TableDataRow {
-	sourceId: number;
+	id: number;
 	name: string;
 	key: string;
-	status: number;
-	from: string;
+
 	createBy: string;
 }
 interface TableDataState {
@@ -97,35 +116,19 @@ interface TableDataState {
 			pageSize: number;
 			name: string;
 			key: string;
-			from: string;
-			
 		};
 	};
 }
 
 export default defineComponent({
 	name: 'sourcelist',
-	components: { EditDic },
+	components: { EditDic,Detail },
 	setup() {
 		const addDicRef = ref();
 		const editDicRef = ref();
+		const detailRef=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 +137,7 @@ export default defineComponent({
 					pageNum: 1,
 					pageSize: 10,
 					name: '',
-					types: '',
-					status:'',
+					key: '',
 				},
 			},
 		});
@@ -144,25 +146,29 @@ 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);
 		};
+		//打开数据记录
+		const onOpenRecord=(row: TableDataRow)=>{
+			detailRef.value.openDialog(row);
+		};
 		const onRowDel = (row: TableDataRow) => {
 			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 +182,7 @@ export default defineComponent({
 				type: 'warning',
 			})
 				.then(() => {
-					api.common.delete(ids).then(() => {
+					api.template.delete(ids).then(() => {
 						ElMessage.success('删除成功');
 						typeList();
 					});
@@ -195,13 +201,15 @@ export default defineComponent({
 		};
 		// 多选框选中数据
 		const handleSelectionChange = (selection: TableDataRow[]) => {
-			state.ids = selection.map((item) => item.sourceId);
+			state.ids = selection.map((item) => item.id);
 		};
-	
+
 		return {
 			addDicRef,
 			editDicRef,
+			detailRef,
 			queryRef,
+			onOpenRecord,
 			onOpenAdd,
 			onOpenEdit,
 			onRowDel,

+ 58 - 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" />
@@ -76,17 +76,36 @@
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
+
+					<el-button @click="onTest" type="warning" size="default">测试</el-button>
 					<el-button @click="onCancel" size="default">取 消</el-button>
 					<el-button type="primary" @click="onSubmit" size="default">{{ ruleForm.sourceId !== 0 ? '修 改' : '添 加' }}</el-button>
 				</span>
 			</template>
 		</el-dialog>
+
+		<el-dialog
+				v-model="dialogVisible"
+				title="返回Json数据"
+				width="30%"
+				:before-close="handleClose"
+			>
+				<json-viewer :value="jsonData"  boxed sort :expand-depth=20 theme="my-awesome-json-theme" />
+
+				<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="dialogVisible = false">关闭</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';
 
@@ -113,9 +132,11 @@ export default defineComponent({
 	setup(prop, { emit }) {
 		const formRef = ref<HTMLElement | null>(null);
 		const state = reactive<DicState>({
-			
 			isShowDialog: false,
+			dialogVisible:false,
 			config: {},
+			sourceId:0,
+			jsonData:'',
 			ruledata: [
 				{
 					expression: '',
@@ -207,7 +228,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 +261,24 @@ 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
+				state.sourceId=row.sourceId
+				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: '',
@@ -282,6 +301,14 @@ export default defineComponent({
 		const onCancel = () => {
 			closeDialog();
 		};
+
+		const onTest=()=>{
+				api.common.api(state.sourceId).then((res: any) => {
+					state.jsonData=JSON.parse(res.data);
+					state.dialogVisible=true
+						console.log(res);
+				})
+		};
 		// 新增
 		const onSubmit = () => {
 			const formWrap = unref(formRef) as any;
@@ -320,6 +347,7 @@ export default defineComponent({
 		};
 
 		return {
+			onTest,
 			addRule,
 			delRule,
 			addParams,
@@ -335,6 +363,7 @@ export default defineComponent({
 });
 </script>
 <style>
+
 .el-input__wrapper {
 	width: 98%;
 }
@@ -364,4 +393,17 @@ export default defineComponent({
 	line-height: 28px;
 	cursor: pointer;
 }
+.jv-node{
+	margin-left: 25px;
+}
+.jv-my-awesome-json-theme {
+	background: #d9f1e9;
+  white-space: nowrap;
+  color: #525252;
+  font-size: 14px;
+  font-family: Consolas, Menlo, Courier, monospace;
+
+ 
+}
+
 </style>

+ 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,

+ 26 - 0
src/views/heatingDistrict/floorManage/index.vue

@@ -78,6 +78,12 @@
           </template>
         </el-table-column>
 	    	<el-table-column label="更新时间" prop="createdAt" />
+				<el-table-column prop="status" label="启用状态" width="120" align="center">
+					<template #default="scope">
+						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
+						</el-switch>
+					</template>
+				</el-table-column>
         <el-table-column label="操作" width="200" align="center">
           <template #default="scope">
             <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
@@ -163,6 +169,25 @@ export default defineComponent({
 			editDicRef.value.plotList = plotList.value
 			editDicRef.value.openDialog(row);
 		};
+		
+		// 状态修改
+		const handleStatusChange = (row: any) => {
+			let text = row.status === 1 ? '启用' : '停用';
+			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"楼宇吗?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(function () {
+					return api.floor.setStatus(row.id, row.status);
+				})
+				.then(() => {
+					ElMessage.success(text + '成功');
+				})
+				.catch(function () {
+					row.status = row.status === 0 ? 1 : 0;
+				});
+		};
 		// 删除产品
 		const onRowDel = (row: any) => {
 			// let msg = '你确定要删除所选数据?';
@@ -215,6 +240,7 @@ export default defineComponent({
 			resetQuery,
 			orgList,
 			plotList,
+			handleStatusChange,
 			...toRefs(state),
 		};
 	},

+ 26 - 0
src/views/heatingDistrict/regionalManage/index.vue

@@ -61,6 +61,12 @@
 					</template>
 				</el-table-column>
 	    	<el-table-column label="更新时间" prop="createdAt" />
+				<el-table-column prop="status" label="启用状态" width="120" align="center">
+					<template #default="scope">
+						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
+						</el-switch>
+					</template>
+				</el-table-column>
         <el-table-column label="操作" width="200" align="center">
           <template #default="scope">
             <el-button size="small" text type="warning" @click="onOpenEditDic(scope.row)">修改</el-button>
@@ -140,6 +146,25 @@ export default defineComponent({
 			editDicRef.value.orgList = orgList.value
 			editDicRef.value.openDialog(row);
 		};
+		
+		// 状态修改
+		const handleStatusChange = (row: any) => {
+			let text = row.status === 1 ? '启用' : '停用';
+			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"小区吗?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(function () {
+					return api.regionalManage.setStatus(row.id, row.status);
+				})
+				.then(() => {
+					ElMessage.success(text + '成功');
+				})
+				.catch(function () {
+					row.status = row.status === 0 ? 1 : 0;
+				});
+		};
 		// 删除产品
 		const onRowDel = (row: any) => {
 			// let msg = '你确定要删除所选数据?';
@@ -191,6 +216,7 @@ export default defineComponent({
 			queryList,
 			resetQuery,
 			orgList,
+			handleStatusChange,
 			...toRefs(state),
 		};
 	},

+ 2 - 2
src/views/heatingDistrict/residentManage/component/edit.vue

@@ -198,7 +198,7 @@ export default defineComponent({
 				});
 		};
 		const getDetail = () => {
-			api.floor.detail(state.ruleForm.id)
+			api.resident.detail(state.ruleForm.id)
 				.then((res: any) => {
 					state.ruleForm = {
 						...res
@@ -207,7 +207,7 @@ export default defineComponent({
 		}
 		// 获取楼宇
 		const getFloorList = () => {
-			api.floor.allList({})
+			api.floor.allList({ plotId: state.ruleForm.plotId })
 				.then((res: any) => {
 					state.floorList = res.Info || []
 				})

+ 44 - 5
src/views/heatingDistrict/residentManage/index.vue

@@ -86,12 +86,12 @@
         <el-table-column label="ID" align="center" prop="id" width="60" />
         <el-table-column label="组织名称" prop="">
           <template #default="{ row }">
-            {{ row.SysOrganization.name }}
+            {{ row.organizationInfo.name }}
           </template>
         </el-table-column>
         <el-table-column label="小区名称" prop="">
           <template #default="{ row }">
-            {{ row.ZhgyPlotInfo.name }}
+            {{ row.plotInfo.name }}
           </template>
         </el-table-column>
         <el-table-column label="楼宇名称" prop="">
@@ -99,10 +99,29 @@
             {{ row.floorInfo.name }}
           </template>
         </el-table-column>
-	    	<el-table-column label="单元名称" prop="name" />
-	    	<el-table-column label="单元号" prop="number" />
+	    	<el-table-column label="单元名称" prop="name">
+          <template #default="{ row }">
+            {{ row.unitInfo.name }}
+          </template>
+        </el-table-column>
+	    	<el-table-column label="单元号" prop="number">
+          <template #default="{ row }">
+            {{ row.unitInfo.number }}
+          </template>
+        </el-table-column>
 	    	<el-table-column label="住户姓名" prop="name" />
+	    	<el-table-column label="楼层" prop="floorLevel" />
+	    	<el-table-column label="房间号" prop="roomNumber" />
+	    	<el-table-column label="电话号码" prop="phone" />
+	    	<el-table-column label="建筑面积" prop="buildingArea" />
+	    	<el-table-column label="实供面积" prop="forRealArea" />
 	    	<el-table-column label="更新时间" prop="createdAt" />
+				<el-table-column prop="status" label="启用状态" width="120" align="center">
+					<template #default="scope">
+						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
+						</el-switch>
+					</template>
+				</el-table-column>
         <el-table-column label="操作" width="200" align="center">
           <template #default="scope">
             <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
@@ -193,7 +212,7 @@ export default defineComponent({
 		const queryList = () => {
 			api.resident.getList(state.tableData.param).then((res: any) => {
 				console.log(res);
-				state.tableData.data = res.Info || [];
+				state.tableData.data = res.Data || [];
 				state.tableData.total = res.Total;
 			});
 		};
@@ -223,6 +242,25 @@ export default defineComponent({
 			editDicRef.value.plotList = plotList.value
 			editDicRef.value.openDialog(row);
 		};
+		
+		// 状态修改
+		const handleStatusChange = (row: any) => {
+			let text = row.status === 1 ? '启用' : '停用';
+			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"住户吗?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(function () {
+					return api.resident.setStatus(row.id, row.status);
+				})
+				.then(() => {
+					ElMessage.success(text + '成功');
+				})
+				.catch(function () {
+					row.status = row.status === 0 ? 1 : 0;
+				});
+		};
 		// 删除产品
 		const onRowDel = (row: any) => {
 			let msg = `此操作将永久删除住户:“${row.name}”,是否继续?`;
@@ -270,6 +308,7 @@ export default defineComponent({
 			unitList,
 			onPlotChange,
 			onFloorChange,
+			handleStatusChange,
 			...toRefs(state),
 		};
 	},

+ 26 - 0
src/views/heatingDistrict/unitManage/index.vue

@@ -80,6 +80,12 @@
 	    	<el-table-column label="单元名称" prop="name" />
 	    	<el-table-column label="单元号" prop="number" />
 	    	<el-table-column label="更新时间" prop="updatedAt" />
+				<el-table-column prop="status" label="启用状态" width="120" align="center">
+					<template #default="scope">
+						<el-switch v-model="scope.row.status" inline-prompt :active-value="1" :inactive-value="0" active-text="启" inactive-text="禁" @change="handleStatusChange(scope.row)">
+						</el-switch>
+					</template>
+				</el-table-column>
         <el-table-column label="操作" width="200" align="center">
           <template #default="scope">
             <el-button size="small" text type="warning" @click="onOpenDialog(scope.row)">修改</el-button>
@@ -181,6 +187,25 @@ export default defineComponent({
 			editDicRef.value.plotList = plotList.value
 			editDicRef.value.openDialog(row);
 		};
+		
+		// 状态修改
+		const handleStatusChange = (row: any) => {
+			let text = row.status === 1 ? '启用' : '停用';
+			ElMessageBox.confirm('确认要"' + text + '":"' + row.name + '"单元吗?', '警告', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(function () {
+					return api.unit.setStatus(row.id, row.status);
+				})
+				.then(() => {
+					ElMessage.success(text + '成功');
+				})
+				.catch(function () {
+					row.status = row.status === 0 ? 1 : 0;
+				});
+		};
 		// 删除产品
 		const onRowDel = (row: any) => {
 			let msg = `此操作将永久删除单元:“${row.name}”,是否继续?`;
@@ -224,6 +249,7 @@ export default defineComponent({
 			plotList,
 			floorList,
 			onPlotChange,
+			handleStatusChange,
 			...toRefs(state),
 		};
 	},