Ver código fonte

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

# Conflicts:
文件冲突	src/api/datahub/index.ts
yukai 3 anos atrás
pai
commit
ba23435e4f

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

@@ -17,6 +17,7 @@ export default {
     getdevList: (params: object) => get('/product/device/list', params),
     getdata: (params: object) => get('/source/getdata', params),
     getLists: (params: object) => get('/source/list', params),
+    copy: (params: object) => post('/source/copy', params),
 
     },
    
@@ -38,6 +39,8 @@ export default {
       getdata: (params: object) => get('/source/template/getdata',  params ),
       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),
+      
    } ,
 
    tnode:{
@@ -54,5 +57,12 @@ export default {
       getWhichCityWeather: (params: object) => get('/region/weather/getInfoById', params),
       getTemperatureEchartById: (params: object) => get('/region/weather/getTemperatureEchartById', params),
       getWindpowerEchartById: (params: object) => get('/region/weather/getWindpowerEchartById', params),
+   },
+
+   statistics:{
+      getStatisticsChartData: (params: object) => get('/statistics/bar/chart/data', params),
+      getStatisticsLineChartData: (params: object) => get('/statistics/broken/line/data', params),
+      getStatisticsTotalData: (params: object) => get('/statistics/city/data', params),
+      getStatisticsPieData: (params: object) => get('/statistics/tempering/ratio/data', params),
    }
 }

+ 2 - 0
src/api/rule/index.ts

@@ -11,4 +11,6 @@ export default {
   add: (data: any) => post('/rule-engine/instance/add', data),
   // 编辑规则实例管理
   edit: (data: any) => put('/rule-engine/instance/edit', data),
+  // 修改规则实例流程状态
+  setStatus: (id: number, status: number) => post('/rule-engine/instance/status', { id, status }),
 }

BIN
src/assets/area.png


BIN
src/assets/area1.png


BIN
src/assets/ele.png


+ 1 - 0
src/assets/ele.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456136412" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6979" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M271.973 508.68l-0.467 0.516c-15.161 17.134-6.178 44.443 16.396 49.075l162.817 33.411-147.137 354.746c-12.63 30.449 26.067 55.938 49.027 32.294l410.916-423.155 0.486-0.511c15.79-16.999 6.974-44.925-15.926-49.613l-152.962-31.315L718.788 109.69c10.37-30.56-28.32-53.605-50.226-29.915L271.972 508.68z m345.075-285.15l-89.404 263.48-0.215 0.657c-5.298 16.85 5.123 34.684 22.518 38.245l132.675 27.162L418.71 824.845l101.086-243.71 0.25-0.621c6.7-17.199-3.668-36.397-21.844-40.127l-146.367-30.033L617.048 223.53z" fill="#333333" p-id="6980"></path></svg>

BIN
src/assets/ele1.png


+ 1 - 0
src/assets/ele1.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456136412" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6979" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M271.973 508.68l-0.467 0.516c-15.161 17.134-6.178 44.443 16.396 49.075l162.817 33.411-147.137 354.746c-12.63 30.449 26.067 55.938 49.027 32.294l410.916-423.155 0.486-0.511c15.79-16.999 6.974-44.925-15.926-49.613l-152.962-31.315L718.788 109.69c10.37-30.56-28.32-53.605-50.226-29.915L271.972 508.68z m345.075-285.15l-89.404 263.48-0.215 0.657c-5.298 16.85 5.123 34.684 22.518 38.245l132.675 27.162L418.71 824.845l101.086-243.71 0.25-0.621c6.7-17.199-3.668-36.397-21.844-40.127l-146.367-30.033L617.048 223.53z" fill="#ffffff" p-id="6980"></path></svg>

BIN
src/assets/fire.png


+ 1 - 0
src/assets/fire.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456227936" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7514" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M602.1 1008.1c-9.5 0-18.5-3.3-26.4-9.4-10.8-8.3-16.1-21.4-16.1-35.1 0-6.7 0.1-13.6 0.3-20.8 0.9-40.5 1.7-82.3-26-130.9-18.8-32.8-32.1-66-41.5-95.3C458 772 426 855.9 464.7 946.2c6.4 14.9 4.1 32.1-6 44.8-10.1 12.7-26.4 18.8-42.3 16-154-27.8-290.5-139.1-331.8-270.8-50.9-162-7.4-330.1 110.9-428.1 18.3-15.1 45.3-13.1 61.1 4.6l45.7 51.4c34.5-45.5 73.6-138.3-4.8-283.2-8.7-16.1-6.6-35.9 5.4-49.7 11.9-13.8 31.2-18.9 48.4-12.7 193.1 69.7 278.4 206.8 313.4 308.8 11.8-27.1 22.7-60.5 28.9-100.1 2.3-14.9 12.1-27.6 25.9-33.6 13.8-6 29.8-4.5 42.3 3.9 35.7 24.2 307.1 315.9 150.4 598.8-64.1 115.8-169.4 190.4-296.4 210l-2.9 0.5c-3.7 0.8-7.3 1.3-10.8 1.3z m-87-434.2c5.2 0 10.4 0.9 15.4 2.8 15.7 5.9 26.7 20.1 28.4 36.8 0.1 0.7 8.9 80.2 51.5 154.7 30.1 52.7 36.7 100.7 37.8 140.5 79.5-24 143.5-77 186.8-155.2 90.6-163.6-7.1-341.6-74.6-429.7-29.9 89.2-75.6 139.1-86.5 150.1-6.5 6.6-15 11.3-24.6 12.8-19.1 3.1-37.8-6.8-46.4-24.1-3.3-6.7-4.8-14.1-4.4-21.3-0.2-7-8.6-181.9-179-291.9 49.7 192.5-74.2 300.3-90.9 313.7-18.3 14.7-45 12.5-60.6-5l-46.5-52.3c-65.9 76.9-87.3 193.7-52.7 304 25.1 80.1 101.1 152.7 192.5 189.7-22.9-173.7 117-307.3 123.8-313.7 8.2-7.7 19-11.9 30-11.9z" p-id="7515" fill="#333333"></path></svg>

BIN
src/assets/fire1.png


+ 1 - 0
src/assets/fire1.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456227936" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="7514" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M602.1 1008.1c-9.5 0-18.5-3.3-26.4-9.4-10.8-8.3-16.1-21.4-16.1-35.1 0-6.7 0.1-13.6 0.3-20.8 0.9-40.5 1.7-82.3-26-130.9-18.8-32.8-32.1-66-41.5-95.3C458 772 426 855.9 464.7 946.2c6.4 14.9 4.1 32.1-6 44.8-10.1 12.7-26.4 18.8-42.3 16-154-27.8-290.5-139.1-331.8-270.8-50.9-162-7.4-330.1 110.9-428.1 18.3-15.1 45.3-13.1 61.1 4.6l45.7 51.4c34.5-45.5 73.6-138.3-4.8-283.2-8.7-16.1-6.6-35.9 5.4-49.7 11.9-13.8 31.2-18.9 48.4-12.7 193.1 69.7 278.4 206.8 313.4 308.8 11.8-27.1 22.7-60.5 28.9-100.1 2.3-14.9 12.1-27.6 25.9-33.6 13.8-6 29.8-4.5 42.3 3.9 35.7 24.2 307.1 315.9 150.4 598.8-64.1 115.8-169.4 190.4-296.4 210l-2.9 0.5c-3.7 0.8-7.3 1.3-10.8 1.3z m-87-434.2c5.2 0 10.4 0.9 15.4 2.8 15.7 5.9 26.7 20.1 28.4 36.8 0.1 0.7 8.9 80.2 51.5 154.7 30.1 52.7 36.7 100.7 37.8 140.5 79.5-24 143.5-77 186.8-155.2 90.6-163.6-7.1-341.6-74.6-429.7-29.9 89.2-75.6 139.1-86.5 150.1-6.5 6.6-15 11.3-24.6 12.8-19.1 3.1-37.8-6.8-46.4-24.1-3.3-6.7-4.8-14.1-4.4-21.3-0.2-7-8.6-181.9-179-291.9 49.7 192.5-74.2 300.3-90.9 313.7-18.3 14.7-45 12.5-60.6-5l-46.5-52.3c-65.9 76.9-87.3 193.7-52.7 304 25.1 80.1 101.1 152.7 192.5 189.7-22.9-173.7 117-307.3 123.8-313.7 8.2-7.7 19-11.9 30-11.9z" p-id="7515" fill="#ffffff"></path></svg>

Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
src/assets/map.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 0 - 0
src/assets/map1.svg


BIN
src/assets/water.png


+ 1 - 0
src/assets/water.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456354407" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9524" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M505.856 918.016c-177.664 0-322.56-144.896-322.56-322.56 0-220.16 225.28-423.936 293.888-480.768 16.384-13.824 40.448-13.824 56.832 0 69.12 57.344 293.888 260.608 293.888 480.768 0.512 178.176-143.872 322.56-322.048 322.56z m0-755.712c-57.344 48.64-267.776 240.128-267.776 433.664 0 147.968 120.32 267.776 267.776 267.776s267.776-120.32 267.776-267.776c0.512-194.048-210.432-385.536-267.776-433.664z" fill="#000000" p-id="9525"></path><path d="M453.632 800.768c-2.56 0-5.632-0.512-8.192-1.024-79.872-25.6-139.776-92.16-156.672-174.08-3.072-14.848 6.656-29.184 20.992-32.256 14.848-3.072 29.184 6.656 32.256 20.992 12.8 62.464 58.88 113.664 119.808 132.608 14.336 4.608 22.528 19.968 17.92 34.304-4.096 11.776-14.848 19.456-26.112 19.456z" fill="#000000" p-id="9526"></path></svg>

BIN
src/assets/water1.png


+ 1 - 0
src/assets/water1.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1665456354407" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9524" width="40" height="40" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M505.856 918.016c-177.664 0-322.56-144.896-322.56-322.56 0-220.16 225.28-423.936 293.888-480.768 16.384-13.824 40.448-13.824 56.832 0 69.12 57.344 293.888 260.608 293.888 480.768 0.512 178.176-143.872 322.56-322.048 322.56z m0-755.712c-57.344 48.64-267.776 240.128-267.776 433.664 0 147.968 120.32 267.776 267.776 267.776s267.776-120.32 267.776-267.776c0.512-194.048-210.432-385.536-267.776-433.664z" fill="#ffffff" p-id="9525"></path><path d="M453.632 800.768c-2.56 0-5.632-0.512-8.192-1.024-79.872-25.6-139.776-92.16-156.672-174.08-3.072-14.848 6.656-29.184 20.992-32.256 14.848-3.072 29.184 6.656 32.256 20.992 12.8 62.464 58.88 113.664 119.808 132.608 14.336 4.608 22.528 19.968 17.92 34.304-4.096 11.776-14.848 19.456-26.112 19.456z" fill="#ffffff" p-id="9526"></path></svg>

Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/冰雹.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/多云(夜晚).svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/多云(白天).svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/夜晚.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/晴天.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/沙尘.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/阴.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/阵雨.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/雨.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/雨加雪.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/雪.svg


+ 11 - 0
src/assets/雷电.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="17px" height="22px" viewBox="0 0 17 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>雷电</title>
+    <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="天气图标" transform="translate(-677.000000, -493.000000)" fill="#2C79FF" fill-rule="nonzero">
+            <g id="形状" transform="translate(677.000000, 493.000000)">
+                <path d="M16.8862475,10.51875 C16.6785673,9.9825 16.1498178,9.62714844 15.5582813,9.62714844 L10.0549976,9.62665859 L13.9914849,1.99111172 C14.2946972,1.40286953 14.125788,0.690017969 13.589949,0.287830469 C13.3724762,0.0949179687 13.0667382,0 12.7211214,0 C12.3869808,0 12.053815,0.114554687 11.788399,0.340570312 L0.484955565,9.96445312 C0.0405277426,10.3418047 -0.117215333,10.9467187 0.090332017,11.4825391 C0.297879367,12.0183594 0.82658453,12.375 1.41812106,12.375 L6.92140477,12.3746176 L2.98491745,20.0101645 C2.68170513,20.5984066 2.85061429,21.3112582 3.38645334,21.7134457 C3.64291877,21.9054687 3.94909985,22 4.25350854,22 C4.58720604,22 4.92081492,21.885875 5.18667404,21.6596016 L16.4901175,12.0732734 C16.9748672,11.6574219 17.1299517,11.0515625 16.8862475,10.51875 Z M4.25350854,20.5863281 L8.18999585,12.9507813 C8.40981703,12.5245312 8.38624419,12.0183594 8.12796206,11.6127344 C7.86963562,11.2073672 7.41324413,10.9604688 6.92184787,10.9604688 L1.41856416,10.9613281 L12.7220076,1.37496181 C12.7221804,1.37496181 12.7212277,1.37496181 12.7220076,1.37496181 C12.7220076,1.37496181 12.721919,1.37496181 12.7220076,1.37496181 L8.78640647,9.01054687 C8.56658529,9.43671094 8.59015813,9.94296875 8.84844026,10.3481641 C9.1067667,10.7536172 9.56315819,11.0004297 10.0545545,11.0004297 L15.5578382,11.0001762 L4.25350854,20.5863281 Z"></path>
+            </g>
+        </g>
+    </g>
+</svg>

Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/雷阵雨.svg


Diferenças do arquivo suprimidas por serem muito extensas
+ 6 - 0
src/assets/雾.svg


+ 6 - 0
src/views/datahub/modeling/detail.vue

@@ -70,6 +70,12 @@
 					<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="数据源名称" align="center" >
+						<template #default="scope">
+							<span v-if="scope.row.from==2">{{scope.row.source.name}}</span>
+						</template>
+					</el-table-column>
 					<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>

+ 22 - 0
src/views/datahub/modeling/index.vue

@@ -76,6 +76,8 @@
 						<el-button size="small" text type="success" @click="onOpenRecord(scope.row)"  v-if="scope.row.status==1">数据记录</el-button>
 						<el-button size="small" text type="warning" @click="onOpenEdit(scope.row)" v-if="scope.row.status==0">修改</el-button>
 						<el-button size="small" text type="danger" @click="onRowDel(scope.row)" v-if="scope.row.status==0">删除</el-button>
+						<el-button size="small" text type="primary" @click="copy(scope.row)" >复制</el-button>
+
 					</template>
 				</el-table-column>
 			</el-table>
@@ -192,6 +194,25 @@ export default defineComponent({
 				})
 				.catch(() => {});
 		};
+
+		//复制数据
+		const copy=(row:TableDataRow)=>{
+			ElMessageBox.confirm("确定要复制该数据吗?", '提示', {
+				confirmButtonText: '确认',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(() => {
+
+					api.template.copy({id:row.id}).then(() => {
+						ElMessage.success('复制成功');
+						typeList();
+					});
+				})
+				.catch(() => {});
+		}
+
+
 		// 页面加载时
 		onMounted(() => {
 			initTableData();
@@ -216,6 +237,7 @@ export default defineComponent({
 			onOpenAdd,
 			onOpenEdit,
 			onRowDel,
+			copy,
 			typeList,
 			resetQuery,
 			handleSelectionChange,

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

@@ -92,6 +92,7 @@
 						<el-button size="small" text type="success" @click="onOpenList(scope.row)"  v-if="scope.row.status==1">数据记录</el-button>
 						<el-button size="small" text type="warning" @click="onOpenEdit(scope.row)" v-if="scope.row.status==0">修改</el-button>
 						<el-button size="small" text type="danger" @click="onRowDel(scope.row)" v-if="scope.row.status==0">删除</el-button>
+						<el-button size="small" text type="primary" @click="copy(scope.row)" >复制</el-button>
 					</template>
 				</el-table-column>
 			</el-table>
@@ -197,6 +198,23 @@ export default defineComponent({
 			}).finally(() => (state.tableData.loading = false));
 		};
 
+		//复制数据
+		const copy=(row:TableDataRow)=>{
+			ElMessageBox.confirm("确定要复制该数据吗?", '提示', {
+				confirmButtonText: '确认',
+				cancelButtonText: '取消',
+				type: 'warning',
+			})
+				.then(() => {
+
+					api.common.copy({sourceId:row.sourceId}).then(() => {
+						ElMessage.success('复制成功');
+						typeList();
+					});
+				})
+				.catch(() => {});
+		}
+
 		//打开数据记录
 		const onOpenList=(row: TableDataRow)=>{
 			listDicRef.value.openDialog(row);
@@ -255,6 +273,7 @@ export default defineComponent({
 			editDicRef,
 			listDicRef,
 			queryRef,
+			copy,
 			onOpenList,
 			onOpenAdd,
 			onOpenEdit,

Diferenças do arquivo suprimidas por serem muito extensas
+ 291 - 136
src/views/home/index.vue


Diferenças do arquivo suprimidas por serem muito extensas
+ 55 - 96
src/views/iotmanager/dashboard.vue


+ 38 - 1
src/views/monitor/weather.vue

@@ -21,6 +21,7 @@
 					<div class="weather-info">
 						<section>
 							<span class="temperature">{{oneCityInfo.Temperature}}℃</span>
+							<img :src="weatherObj[oneCityInfo.weather]" alt="">
 							<span class="weather">{{oneCityInfo.weather}}</span>
 							<span>{{oneCityInfo.reporttime}}更新</span>
 							
@@ -84,6 +85,22 @@ import { useStore } from '/@/store/index';
 
 import api from '/@/api/datahub';
 
+import weather1 from '/@/assets/冰雹.svg';
+import weather2 from '/@/assets/多云(白天).svg';
+import weather3 from '/@/assets/多云(夜晚).svg';
+import weather4 from '/@/assets/雷电.svg';
+import weather5 from '/@/assets/雷阵雨.svg';
+import weather6 from '/@/assets/沙尘.svg';
+import weather7 from '/@/assets/雾.svg';
+import weather8 from '/@/assets/雪.svg';
+import weather9 from '/@/assets/夜晚.svg';
+import weather10 from '/@/assets/阴.svg';
+import weather11 from '/@/assets/雨.svg';
+import weather12 from '/@/assets/雨加雪.svg';
+import weather13 from '/@/assets/阵雨.svg';
+import weather14 from '/@/assets/晴天.svg';
+
+
 let global: any = {
 	homeChartOne: null,
 	homeChartTwo: null,
@@ -94,6 +111,22 @@ let global: any = {
 export default defineComponent({
 	name: 'home',
 	setup() {
+		const weatherObj = ref({
+			'冰雹': weather1,
+			'多云': weather2,
+			'多云(夜晚)': weather3,
+			'雷电': weather4,
+			'雷阵雨': weather5,
+			'沙尘': weather6,
+			'雾': weather7,
+			'雪': weather8,
+			'夜晚': weather9,
+			'阴': weather10,
+			'雨': weather11,
+			'雨加雪': weather12,
+			'阵雨': weather13,
+			'晴天': weather14
+		});
 		const homeTemLineRef = ref();
 		const homeWindLineRef = ref();
 		// const homePieRef = ref();
@@ -487,6 +520,7 @@ export default defineComponent({
 			}
 		);
 		return {
+			weatherObj,
 			homeTemLineRef,
 			homeWindLineRef,
 			getWhichCityWeather,
@@ -568,8 +602,11 @@ $homeNavLengh: 8;
 					font-size: 50px;
 					font-weight: bold;
 				}
+				img {
+					margin: 0 10px 0 30px;
+				}
 				.weather {
-					margin: 0 30px;
+					margin-right: 30px;
 				}
 				img {
 					width: 24px;

+ 11 - 3
src/views/rule-engine/edit.vue

@@ -29,17 +29,25 @@ import { ref, reactive, nextTick } from 'vue';
 import api from '/@/api/rule';
 import axios from 'axios';
 import { ruleRequired } from '/@/utils/validator';
-import { ElMessage } from 'element-plus';
+import {  ElMessage } from 'element-plus';
 
 const emit = defineEmits(['getList']);
 
+const props = defineProps({
+	types: {
+		type: Number,
+		default: 0, // 规则编排是0 数据转发是1
+	},
+});
+
 const showDialog = ref(false);
 const formRef = ref();
 
 const baseForm = {
 	id: undefined,
 	name: '',
-	types: 0,
+	types: props.types,
+	// types: 0,
 	flowId: '',
 	expound: '',
 };
@@ -57,7 +65,7 @@ const onSubmit = async () => {
 
 	if (!formData.id) {
 		const { data } = await axios.post(
-			window.location.protocol + '//' + window.location.hostname + ':1880/flow',
+			window.location.protocol + '//' + window.location.hostname + '/rule-engine/flow',
 			{
 				label: formData.name,
 				disabled: false,

+ 29 - 13
src/views/rule-engine/index.vue

@@ -20,25 +20,27 @@
 		</div>
 		<el-table :data="tableData" style="width: 100%" v-loading="loading">
 			<el-table-column type="index" label="序号" width="80" align="center" />
-			<el-table-column prop="flowId" label="流程ID" show-overflow-tooltip></el-table-column>
-			<el-table-column prop="name" label="项目名称" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="name" label="名称" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="expound" label="说明" show-overflow-tooltip></el-table-column>
 			<el-table-column prop="createdAt" label="创建时间" min-width="100" align="center"></el-table-column>
 			<el-table-column prop="status" label="状态" width="100" 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-else>已停止</el-tag>
-          </template>
-        </el-table-column>
-			<el-table-column label="操作" width="150" align="center">
 				<template #default="scope">
-					<!-- <el-button size="small" text type="primary" @click="preview(scope.row)">启动</el-button> -->
-					<el-button size="small" text type="warning" @click="edit(scope.row)">编辑</el-button>
+					<el-tag type="success" size="small" v-if="scope.row.status == 1">已启动</el-tag>
+					<el-tag type="info" size="small" v-else>已停止</el-tag>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" width="200" align="center">
+				<template #default="scope">
+					<el-button size="small" text type="info" v-if="scope.row.status" @click="setStatus(scope.row.id, 0)">停止</el-button>
+					<el-button size="small" text type="primary" v-else @click="setStatus(scope.row.id, 1)">启动</el-button>
+					<el-button size="small" text type="warning" @click="addOrEdit(scope.row)">编辑</el-button>
+					<el-button size="small" text type="warning" @click="edit(scope.row)">规则编辑</el-button>
 					<el-button size="small" text type="danger" @click="onDel(scope.row)">删除</el-button>
 				</template>
 			</el-table-column>
 		</el-table>
 		<pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
-		<EditForm ref="editFormRef" @getList="getList()"></EditForm>
+		<EditForm ref="editFormRef" @getList="getList()" :types="0"></EditForm>
 	</el-card>
 </template>
 
@@ -52,7 +54,7 @@ import EditForm from './edit.vue';
 
 const editFormRef = ref();
 
-const { params, tableData, getList, loading } = useSearch<any[]>(api.getList, 'Data', { name: '', address: '' });
+const { params, tableData, getList, loading } = useSearch<any[]>(api.getList, 'Data', { types: 0 });
 
 getList();
 
@@ -65,8 +67,22 @@ const addOrEdit = async (row?: any) => {
 	}
 };
 
+const setStatus = (id: number, status: number) => {
+	api
+		.setStatus(id, status)
+		.then(() => {
+			ElMessage.success('操作成功');
+			getList();
+		})
+		.catch(() => {
+			ElMessage.error('操作失败');
+		});
+};
+
 const edit = async (row: any) => {
-	const url = window.location.protocol + '//' +  window.location.hostname + ':1880/?access_token=' + Session.get('token') + '#/flow/' + row.flowId;
+	localStorage.setItem('auth-tokens',`{"access_token":"${Session.get('token')}"}`);
+	// const url = window.location.protocol + '//' + window.location.hostname + ':1880/?access_token=' + Session.get('token') + '#flow/' + row.flowId;
+	const url = '/rule-engine/#flow/' + row.flowId;
 	window.open(url);
 };
 

+ 97 - 2
src/views/rule-engine/send.vue

@@ -1,5 +1,100 @@
 <template>
-	<div class="tc">开发中...</div>
+	<el-card shadow="hover">
+		<div class="search">
+			<el-form :inline="true">
+				<el-form-item>
+					<!-- <el-button size="default" type="primary" class="ml10" @click="getList(1)">
+							<el-icon>
+								<ele-Search />
+							</el-icon>
+							查询
+						</el-button> -->
+					<el-button type="success" @click="addOrEdit()">
+						<el-icon>
+							<ele-FolderAdd />
+						</el-icon>
+						新增数据转发
+					</el-button>
+				</el-form-item>
+			</el-form>
+		</div>
+		<el-table :data="tableData" style="width: 100%" v-loading="loading">
+			<el-table-column type="index" label="序号" width="80" align="center" />
+			<el-table-column prop="name" label="名称" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="expound" label="说明" show-overflow-tooltip></el-table-column>
+			<el-table-column prop="createdAt" label="创建时间" min-width="100" align="center"></el-table-column>
+			<el-table-column prop="status" label="状态" width="100" 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-else>已停止</el-tag>
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" width="200" align="center">
+				<template #default="scope">
+					<el-button size="small" text type="info" v-if="scope.row.status" @click="setStatus(scope.row.id, 0)">停止</el-button>
+					<el-button size="small" text type="primary" v-else @click="setStatus(scope.row.id, 1)">启动</el-button>
+					<el-button size="small" text type="warning" @click="addOrEdit(scope.row)">编辑</el-button>
+					<el-button size="small" text type="warning" @click="edit(scope.row)">规则编辑</el-button>
+					<el-button size="small" text type="danger" @click="onDel(scope.row)">删除</el-button>
+				</template>
+			</el-table-column>
+		</el-table>
+		<pagination v-if="params.total" :total="params.total" v-model:page="params.pageNum" v-model:limit="params.pageSize" @pagination="getList()" />
+		<EditForm ref="editFormRef" @getList="getList()" :types="1"></EditForm>
+	</el-card>
 </template>
 
-<script lang="ts" setup></script>
+<script lang="ts" setup>
+import { ref } from 'vue';
+import api from '/@/api/rule';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import { useSearch } from '/@/hooks/useCommon';
+import { Session } from '/@/utils/storage';
+import EditForm from './edit.vue';
+
+const editFormRef = ref();
+
+const { params, tableData, getList, loading } = useSearch<any[]>(api.getList, 'Data', { types: 1 });
+
+getList();
+
+const addOrEdit = async (row?: any) => {
+	if (row) {
+		editFormRef.value.open(row);
+		return;
+	} else {
+		editFormRef.value.open();
+	}
+};
+
+const setStatus = (id: number, status: number) => {
+	api
+		.setStatus(id, status)
+		.then(() => {
+			ElMessage.success('操作成功');
+			getList();
+		})
+		.catch(() => {
+			ElMessage.error('操作失败');
+		});
+};
+
+const edit = async (row: any) => {
+	localStorage.setItem('auth-tokens',`{"access_token":"${Session.get('token')}"}`);
+	// const url = window.location.protocol + '//' + window.location.hostname + ':1880/?access_token=' + Session.get('token') + '#flow/' + row.flowId;
+	const url = '/rule-engine/#flow/' + row.flowId;
+	window.open(url);
+};
+
+const onDel = (row: any) => {
+	ElMessageBox.confirm(`此操作将删除:“${row.name}”,是否继续?`, '提示', {
+		confirmButtonText: '确认',
+		cancelButtonText: '取消',
+		type: 'warning',
+	}).then(async () => {
+		await api.del([row.id as string]);
+		ElMessage.success('删除成功');
+		getList();
+	});
+};
+</script>

+ 129 - 114
src/views/system/menu/component/editMenu.vue

@@ -1,86 +1,99 @@
 <template>
-  <div class="system-edit-menu-container">
-    <el-dialog :title="(acType==='add'?'新增':'修改')+'菜单'" v-model="isShowDialog" width="769px" :close-on-click-modal="false">
-      <el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" size="default" label-width="80px">
-        <el-row :gutter="35">
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-            <el-form-item label="上级菜单">
-              <el-cascader :options="menu" :props="{ label: 'title',value: 'id',checkStrictly: true,emitPath: false }" placeholder="请选择上级菜单" clearable class="w100" v-model="ruleForm.parentId">
-                <template #default="{ node, data }">
-                  <span>{{ data.title }}</span>
-                  <span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
-                </template>
-              </el-cascader>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-            <el-form-item label="菜单类型" prop="menuType">
-              <el-radio-group v-model="ruleForm.menuType">
-                <el-radio :label="0">目录</el-radio>
-                <el-radio :label="1">菜单</el-radio>
-              </el-radio-group>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="菜单名称" prop="title">
-              <el-input v-model="ruleForm.title" placeholder="请填写菜单名称" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="规则名称" prop="name">
-              <el-input v-model="ruleForm.name" placeholder="请填写规则名称" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="路由路径" prop="path">
-              <el-input v-model="ruleForm.path" placeholder="路由中的 path 值" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="组件路径" prop="component">
-              <el-input v-model="ruleForm.component" placeholder="组件路径" clearable></el-input>
-            </el-form-item>
-          </el-col>
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="菜单图标">
-              <IconSelector placeholder="请输入菜单图标" v-model="ruleForm.icon" type="all" />
-            </el-form-item>
-          </el-col>
-          <template v-if="ruleForm.menuType === 1">
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="链接地址">
-                <el-input v-model="ruleForm.linkUrl" placeholder="外链/内嵌时链接地址(http:xxx.com)" clearable :disabled="ruleForm.isLink===0">
-                </el-input>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="重定向">
-                <el-input v-model="ruleForm.redirect" placeholder="请输入路由重定向" clearable></el-input>
-              </el-form-item>
-            </el-col>
-          </template>
-          <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+	<div class="system-edit-menu-container">
+		<el-dialog :title="(acType === 'add' ? '新增' : '修改') + '菜单'" v-model="isShowDialog" width="769px" :close-on-click-modal="false">
+			<el-form :model="ruleForm" :rules="rules" ref="ruleFormRef" size="default" label-width="80px">
+				<el-row :gutter="35">
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+						<el-form-item label="上级菜单" prop="parentId">
+							<el-cascader
+								:options="[
+									{
+										id: -1,
+										title: '主类目',
+										children: menu,
+									},
+								]"
+								:props="{ label: 'title', value: 'id', checkStrictly: true, emitPath: false }"
+								placeholder="请选择上级菜单"
+								:clearable="false"
+								class="w100"
+								v-model="ruleForm.parentId"
+							>
+								<template #default="{ node, data }">
+									<span>{{ data.title }}</span>
+									<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
+								</template>
+							</el-cascader>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+						<el-form-item label="菜单类型" prop="menuType">
+							<el-radio-group v-model="ruleForm.menuType">
+								<el-radio :label="0">目录</el-radio>
+								<el-radio :label="1">菜单</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="菜单名称" prop="title">
+							<el-input v-model="ruleForm.title" placeholder="请填写菜单名称" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="规则名称" prop="name">
+							<el-input v-model="ruleForm.name" placeholder="请填写规则名称" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="路由路径" prop="path">
+							<el-input v-model="ruleForm.path" placeholder="路由中的 path 值" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="组件路径" prop="component">
+							<el-input v-model="ruleForm.component" placeholder="组件路径" clearable></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="菜单图标">
+							<IconSelector placeholder="请输入菜单图标" v-model="ruleForm.icon" type="all" />
+						</el-form-item>
+					</el-col>
+					<template v-if="ruleForm.menuType === 1">
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="链接地址">
+								<el-input v-model="ruleForm.linkUrl" placeholder="外链/内嵌时链接地址(http:xxx.com)" clearable :disabled="ruleForm.isLink === 0">
+								</el-input>
+							</el-form-item>
+						</el-col>
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="重定向">
+								<el-input v-model="ruleForm.redirect" placeholder="请输入路由重定向" clearable></el-input>
+							</el-form-item>
+						</el-col>
+					</template>
+					<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
             <el-form-item label="权限标识">
               <el-select v-model="ruleForm.roles" multiple placeholder="选择角色" clearable class="w100">
                 <el-option v-for="role in roles" :key="'role_'+role.id" :label="role.name" :value="role.id"></el-option>
               </el-select>
             </el-form-item>
           </el-col> -->
-          <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-            <el-form-item label="菜单排序">
-              <el-input-number v-model="ruleForm.weigh" controls-position="right" placeholder="请输入排序" class="w100" />
-            </el-form-item>
-          </el-col>
-          <template v-if="ruleForm.menuType === 1">
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="是否隐藏">
-                <el-radio-group v-model="ruleForm.isHide">
-                  <el-radio :label="0">显示</el-radio>
-                  <el-radio :label="1">隐藏</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+					<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+						<el-form-item label="菜单排序">
+							<el-input-number v-model="ruleForm.weigh" controls-position="right" placeholder="请输入排序" class="w100" />
+						</el-form-item>
+					</el-col>
+					<template v-if="ruleForm.menuType === 1">
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="是否隐藏">
+								<el-radio-group v-model="ruleForm.isHide">
+									<el-radio :label="0">显示</el-radio>
+									<el-radio :label="1">隐藏</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
               <el-form-item label="页面缓存">
                 <el-radio-group v-model="ruleForm.isKeepAlive">
                   <el-radio :label="1">缓存</el-radio>
@@ -88,41 +101,41 @@
                 </el-radio-group>
               </el-form-item>
             </el-col> -->
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="是否固定">
-                <el-radio-group v-model="ruleForm.isAffix">
-                  <el-radio :label="1">固定</el-radio>
-                  <el-radio :label="0">不固定</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="是否外链">
-                <el-radio-group v-model="ruleForm.isLink" :disabled="ruleForm.isIframe===1">
-                  <el-radio :label="1">是</el-radio>
-                  <el-radio :label="0">否</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-            <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
-              <el-form-item label="是否内嵌">
-                <el-radio-group v-model="ruleForm.isIframe" @change="onSelectIframeChange">
-                  <el-radio :label="1">是</el-radio>
-                  <el-radio :label="0">否</el-radio>
-                </el-radio-group>
-              </el-form-item>
-            </el-col>
-          </template>
-        </el-row>
-      </el-form>
-      <template #footer>
-        <span class="dialog-footer">
-          <el-button @click="onCancel" size="default">取 消</el-button>
-          <el-button type="primary" @click="onSubmit" size="default" :loading="loading">{{acType==='add'?'新 增':'修 改'}}</el-button>
-        </span>
-      </template>
-    </el-dialog>
-  </div>
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="是否固定">
+								<el-radio-group v-model="ruleForm.isAffix">
+									<el-radio :label="1">固定</el-radio>
+									<el-radio :label="0">不固定</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="是否外链">
+								<el-radio-group v-model="ruleForm.isLink" :disabled="ruleForm.isIframe === 1">
+									<el-radio :label="1">是</el-radio>
+									<el-radio :label="0">否</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+						<el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">
+							<el-form-item label="是否内嵌">
+								<el-radio-group v-model="ruleForm.isIframe" @change="onSelectIframeChange">
+									<el-radio :label="1">是</el-radio>
+									<el-radio :label="0">否</el-radio>
+								</el-radio-group>
+							</el-form-item>
+						</el-col>
+					</template>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="onCancel" size="default">取 消</el-button>
+					<el-button type="primary" @click="onSubmit" size="default" :loading="loading">{{ acType === 'add' ? '新 增' : '修 改' }}</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
 </template>
 
 <script lang="ts">
@@ -149,7 +162,7 @@ const itemForm = {
 	isAffix: 0, // 是否固定
 	linkUrl: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink:true 2、链接地址不为空`
 	isIframe: 0, // 是否内嵌,开启条件,`1、isIframe:true 2、链接地址不为空`
-	status: 1, 
+	status: 1,
 };
 
 export default defineComponent({
@@ -241,7 +254,8 @@ export default defineComponent({
 
 					if (props.acType === 'add') {
 						//添加
-						api.menu.add(state.ruleForm)
+						api.menu
+							.add(state.ruleForm)
 							.then(() => {
 								ElMessage.success('菜单添加成功');
 								closeDialog(); // 关闭弹窗
@@ -253,7 +267,8 @@ export default defineComponent({
 							});
 					} else {
 						//修改
-						api.menu.edit(state.ruleForm)
+						api.menu
+							.edit(state.ruleForm)
 							.then(() => {
 								ElMessage.success('菜单修改成功');
 								closeDialog(); // 关闭弹窗

Alguns arquivos não foram mostrados porque muitos arquivos mudaram nesse diff