Explorar o código

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

vera_min %!s(int64=3) %!d(string=hai) anos
pai
achega
09c7e9a4f2

+ 2 - 2
.env.development

@@ -2,11 +2,11 @@
 ENV = 'development'
 
 # 本地环境接口地址
-VITE_API_URL = 'http://zhgy.sagoo.cn:8899/api/v1'
+#VITE_API_URL = 'http://zhgy.sagoo.cn:8899/api/v1'
 VITE_IMG_URL = 'http://zhgy.sagoo.cn:8899/'
 VITE_ASSESS_URL = 'http://zhgy.sagoo.cn/base-api/assess/v1'
 VITE_SCREEN_URL = 'http://home.yanglizhi.cn:10003'
 VITE_TOPO_URL = 'http://home.yanglizhi.cn:10001'
 VITE_WS_URL = 'ws://zhgy.sagoo.cn:8899/api/v1/websocket'
-# 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/'

+ 7 - 0
src/App.vue

@@ -17,9 +17,16 @@ import setIntroduction from '/@/utils/setIconfont';
 import LockScreen from '/@/layout/lockScreen/index.vue';
 import Setings from '/@/layout/navBars/breadcrumb/setings.vue';
 import CloseFull from '/@/layout/navBars/breadcrumb/closeFull.vue';
+import api from '/@/api/system';
 export default defineComponent({
 	name: 'app',
 	components: { LockScreen, Setings, CloseFull },
+	created() {
+		api.sysinfo().then((res) => {
+			console.log(res);
+			localStorage.setItem('sysinfo', JSON.stringify(res));
+		});
+	},
 	setup() {
 		const { proxy } = <any>getCurrentInstance();
 		const setingsRef = ref();

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

@@ -15,6 +15,7 @@ export default {
     devedit: (data: object) => put('/source/device/edit', data),
     devapi: (sourceId: number) => get('/source/device/get', { sourceId }),
     getdevList: (params: object) => get('/product/device/list', params),
+    getdata: (params: object) => get('/source/getdata', params),
 
     },
    

+ 1 - 0
src/api/heatStation/index.ts

@@ -14,5 +14,6 @@ export default {
     add: (data: object) => post('/region/heatStation/add', data),
     edit: (data: object) => put('/region/heatStation/edit', data),
     del: (id: number) => del('/region/heatStation/del', { id }),
+    detail: (id: number) => get('/region/heatStation/getInfoById', { id }),
   }
 }

+ 1 - 0
src/api/system/index.ts

@@ -1,6 +1,7 @@
 import { get, post, del, put } from '/@/utils/request';
 
 export default {
+  sysinfo: () => get('/sysinfo'),
   login: {
     login: (data: object) => post('/login', data),
     currentUser: () => get('/system/user/currentUser'),

+ 19 - 0
src/assets/login-bg-dark.svg

@@ -0,0 +1,19 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6395" height="1080" viewBox="0 0 6395 1080">
+  <defs>
+    <clipPath id="clip-path">
+      <rect id="Rectangle_73" data-name="Rectangle 73" width="6395" height="1079" transform="translate(-5391)" fill="#fff"/>
+    </clipPath>
+    <linearGradient id="linear-gradient" x1="0.631" y1="0.5" x2="0.958" y2="0.488" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#2e364a"/>
+      <stop offset="1" stop-color="#2c344a"/>
+    </linearGradient>
+  </defs>
+  <g id="Web_1920_1" data-name="Web 1920 – 1" clip-path="url(#clip-Web_1920_1)">
+    <g id="Mask_Group_1" data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#clip-path)">
+      <g id="Group_118" data-name="Group 118" transform="translate(-419.333 -1.126)">
+        <path id="Path_142" data-name="Path 142" d="M6271.734-6.176s-222.478,187.809-55.349,583.254c44.957,106.375,81.514,205.964,84.521,277,8.164,192.764-156.046,268.564-156.046,268.564l-653.53-26.8L5475.065-21.625Z" transform="translate(-4876.383)" fill="#2d3750"/>
+        <path id="Union_6" data-name="Union 6" d="M-2631.1,1081.8v-1.6H-8230.9V.022h5599.8V0h759.7s-187.845,197.448-91.626,488.844c49.167,148.9,96.309,256.289,104.683,362.118,7.979,100.852-57.98,201.711-168.644,254.286-65.858,31.29-144.552,42.382-223.028,42.383C-2441.2,1147.632-2631.1,1081.8-2631.1,1081.8Z" transform="translate(3259.524 0.803)" fill="url(#linear-gradient)"/>
+      </g>
+    </g>
+  </g>
+</svg>

+ 17 - 0
src/assets/login-bg.svg

@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="6395" height="1079" viewBox="0 0 6395 1079">
+  <defs>
+    <clipPath id="clip-path">
+      <rect  width="6395" height="1079" transform="translate(-5391)" fill="#fff"/>
+    </clipPath>
+    <linearGradient id="linear-gradient" x1="0.747" y1="0.222" x2="0.973" y2="0.807" gradientUnits="objectBoundingBox">
+      <stop offset="0" stop-color="#2c41b4"/>
+      <stop offset="1" stop-color="#1b4fab"/>
+    </linearGradient>
+  </defs>
+  <g id="Mask_Group_1" data-name="Mask Group 1" transform="translate(5391)" clip-path="url(#clip-path)">
+    <g id="Group_118" data-name="Group 118" transform="translate(-419.333 -1.126)">
+      <path id="Path_142" data-name="Path 142" d="M6271.734-6.176s-222.478,187.809-55.349,583.254c44.957,106.375,81.514,205.964,84.521,277,8.164,192.764-156.046,268.564-156.046,268.564l-653.53-26.8L5475.065-21.625Z" transform="translate(-4876.383 0)" fill="#f1f5f8"/>
+      <path id="Union_6" data-name="Union 6" d="M-2631.1,1081.8v-1.6H-8230.9V.022H-2631.1V0H-1871.4s-187.845,197.448-91.626,488.844c49.167,148.9,96.309,256.289,104.683,362.118,7.979,100.852-57.98,201.711-168.644,254.286-65.858,31.29-144.552,42.382-223.028,42.383C-2441.2,1147.632-2631.1,1081.8-2631.1,1081.8Z" transform="translate(3259.524 0.803)" fill="url(#linear-gradient)"/>
+    </g>
+  </g>
+</svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
src/assets/login-box-bg.svg


+ 1 - 1
src/utils/request.ts

@@ -30,7 +30,7 @@ service.interceptors.response.use(
 		// 对响应数据做点什么
 		const res = response.data;
 		const code = response.data.code
-		if (code === 401 || code === 51) {
+		if (code === 401) {
 			ElMessageBox.alert('登录状态已过期,请重新登录', '提示',
 				{ confirmButtonText: '确定', showCancelButton: false, closeOnHashChange: false, closeOnPressEscape: false, closeOnClickModal: false, showClose: false })
 				.then(() => {

+ 23 - 8
src/views/datahub/modeling/component/detail.vue

@@ -6,19 +6,24 @@
         <h4 :id="titleId" :class="titleClass">数据记录</h4>
 		 
 		 <div>
-			<el-button @click="quanping">
-			<span v-if="dialogFullScreen==false">全屏</span>
-			<span v-if="dialogFullScreen==true">缩小</span>
-			</el-button>
-			<el-button @click="close">
-			关闭
-			</el-button>
+			<i class="iconfont "  :class="!dialogFullScreen ? 'icon-fullscreen' : 'icon-tuichuquanping'"   @click="quanping"  style="font-size: 22px;cursor: pointer;"></i>
+			<i class="el-icon"  @click="close" style="font-size: 22px;cursor: pointer;    margin-left: 10px; position: relative; top: 3px;"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" data-v-029747aa=""><path fill="currentColor" d="M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"></path></svg></i>
+			
 		</div>
       </div>
     </template>
 
-			<el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
+			<el-table :data="tableData.data" style="width: 100%">
 				<el-table-column v-for="(item, index) in jData" :key="item" :label="item" :prop="item" show-overflow-tooltip align="center">
+					<template #header>
+					<div >
+						{{item}}
+					</div>
+					<div >
+						<span v-if="item=='created_at'">时间</span>
+						{{titleData[item]}}
+					</div>
+				</template>
 				</el-table-column>
 			</el-table>
 			<pagination
@@ -70,6 +75,7 @@ export default defineComponent({
 		const state = reactive<DicState>({
 			isShowDialog: false,
 		    dialogFullScreen: false,
+			titleData:{},
 
 			jsonsData: [],
 			jData: [],
@@ -89,6 +95,15 @@ export default defineComponent({
 			resetForm();
 			if (row) {
 				state.tableData.param.id = row.id;
+
+				api.tnode.getList({tid:row.id}).then((res: any) => {
+					res.list.forEach((item, index) => {
+						state.titleData[item.key] = item.name;
+					});
+					console.log(state.titleData);
+						//state.titleData = res.list;
+						//state.tableData.total = res.Total;
+					});
 				typeList();
 
 			}

+ 3 - 3
src/views/datahub/modeling/detail.vue

@@ -49,7 +49,7 @@
 								</el-icon>
 								重置
 							</el-button>
-							<el-button size="default" type="success" class="ml10" @click="onOpenAdd">
+							<el-button size="default" type="success" class="ml10" @click="onOpenAdd" v-if="developer_status==0">
 								<el-icon>
 									<ele-FolderAdd />
 								</el-icon>
@@ -81,13 +81,13 @@
 						</template>
 					</el-table-column>
 				</el-table>
-				<pagination
+				<!-- <pagination
 					v-show="tableData.data.length > 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" />

+ 2 - 2
src/views/datahub/modeling/index.vue

@@ -74,8 +74,8 @@
 							<span>字段管理</span>
 						</router-link>
 						<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)">修改</el-button>
-						<el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</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>
 					</template>
 				</el-table-column>
 			</el-table>

+ 10 - 1
src/views/datahub/source/component/editNode.vue

@@ -16,7 +16,7 @@
 					</el-radio-group>
 				</el-form-item>
 
-				<el-form-item label="数据类型" prop="dataType">
+				<el-form-item label="数据类型" prop="dataType" v-if="detail.from==1">
 					<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>
@@ -309,6 +309,14 @@ export default defineComponent({
 			});
 		};
 
+		const getNodeList=(e)=>{
+			state.propertyData.forEach((item, index) => {
+				if(item.key===e){
+					state.ruleForm.dataType=item.valueType.type;
+				}
+			});
+		}
+
 		const onKeyclick=(e)=>{
 			//console.log(e);
 			if(e.target.innerText && e.target.className=='jv-key'){
@@ -356,6 +364,7 @@ export default defineComponent({
 
 
 		return {
+			getNodeList,
 			onKeyclick,
 			getOrgIdArr,
 			addRule,

+ 159 - 0
src/views/datahub/source/component/list.vue

@@ -0,0 +1,159 @@
+<template>
+	<div class="system-edit-dic-container">
+		<el-dialog  v-model="isShowDialog" :show-close="false"  width="75%" :fullscreen="dialogFullScreen">
+		 <template #header="{ close, titleId, titleClass }">
+      <div class="my-header">
+        <h4 :id="titleId" :class="titleClass">数据记录</h4>
+		 
+		 <div>
+            <i class="iconfont "  :class="!dialogFullScreen ? 'icon-fullscreen' : 'icon-tuichuquanping'"   @click="quanping"  style="font-size: 22px;cursor: pointer;"></i>
+			<i class="el-icon"  @click="close" style="font-size: 22px;cursor: pointer;    margin-left: 10px; position: relative; top: 3px;"><svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" data-v-029747aa=""><path fill="currentColor" d="M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"></path></svg></i>
+			
+		</div>
+      </div>
+    </template>
+
+			<el-table :data="tableData.data" style="width: 100%" @selection-change="handleSelectionChange">
+				<el-table-column v-for="(item, index) in jData" :key="item" :label="item" :prop="item" show-overflow-tooltip align="center">
+				</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-dialog>
+	</div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
+import { Close } from '@element-plus/icons-vue';
+
+import api from '/@/api/datahub';
+import { ElMessage } from 'element-plus';
+
+interface DicState {
+	isShowDialog: boolean;
+}
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+	id: number;
+	name: string;
+	key: string;
+
+	createBy: string;
+}
+interface TableDataState {
+	ids: number[];
+	tableData: {
+		data: Array<TableDataRow>;
+		total: number;
+		loading: boolean;
+		param: {
+			pageNum: number;
+			pageSize: number;
+			id: number;
+		};
+	};
+}
+
+export default defineComponent({
+	name: 'deviceEditPro',
+	setup(prop, { emit }) {
+		const formRef = ref<HTMLElement | null>(null);
+		const state = reactive<DicState>({
+			isShowDialog: false,
+		    dialogFullScreen: false,
+
+			jsonsData: [],
+			jData: [],
+			tableData: {
+				data: [],
+				total: 0,
+				loading: false,
+				param: {
+					pageNum: 1,
+					pageSize: 10,
+					sourceId: 0,
+				},
+			},
+		});
+		// 打开弹窗
+		const openDialog = (row: RuleFormState | null) => {
+			resetForm();
+			if (row) {
+				console.log(row);
+				state.tableData.param.sourceId = row.sourceId;
+
+
+      
+				typeList();
+
+			}
+			state.isShowDialog = true;
+		};
+
+		const typeList = () => {
+			console.log(state.tableData.param);
+			api.common.getdata(state.tableData.param).then((res: any) => {
+				const jsonData = JSON.parse(res.data);
+				state.tableData.data = jsonData;
+				state.jData = Object.keys(jsonData[0]);
+				console.log(jsonData);
+				state.jData.forEach((item, index) => {
+					state.jsonsData[index] = jsonData[item];
+				});
+
+				state.tableData.total = res.Total;
+				//state.ruleForm = res.data.dictType
+			});
+		};
+		const resetForm = () => {
+			state.jsonsData = [];
+			state.jData = [];
+			state.tableData= {
+				data: [],
+				total: 0,
+				loading: false,
+				param: {
+					pageNum: 1,
+					pageSize: 10,
+				},
+			}
+		};
+		// 关闭弹窗
+		const closeDialog = () => {
+			state.isShowDialog = false;
+		};
+		const quanping=()=>{
+			state.dialogFullScreen = state.dialogFullScreen?false:true;
+		}
+		// 取消
+		const onCancel = () => {
+			closeDialog();
+		};
+
+		return {
+            Close,
+			quanping,
+			typeList,
+			openDialog,
+			closeDialog,
+			onCancel,
+			formRef,
+			...toRefs(state),
+		};
+	},
+});
+</script>
+<style scoped>
+.my-header {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+}
+</style>

+ 1 - 1
src/views/datahub/source/detail.vue

@@ -77,7 +77,7 @@
 					<div class="wu-box">
 						<div class="wu-title">
 							<div class="title">数据节点</div>
-							<div><el-button type="primary" @click="onOpenEdit()">添加</el-button></div>
+							<div v-if="developer_status==0"><el-button type="primary" @click="onOpenEdit()">添加</el-button></div>
 						</div>
 				
 						<el-table :data="tableData.data" style="width: 100%">

+ 14 - 5
src/views/datahub/source/index.vue

@@ -89,9 +89,9 @@
 						>
 							<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>
+						<el-button size="small" text type="success" @click="onOpenList(scope.row)">数据记录</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>
 					</template>
 				</el-table-column>
 			</el-table>
@@ -104,7 +104,7 @@
 			/>
 		</el-card>
 		<EditDic ref="editDicRef" @typeList="typeList" />
-		<Detail ref="detailRef" />
+		<ListDic ref="listDicRef" />
 	</div>
 </template>
 
@@ -112,6 +112,7 @@
 import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { ElMessageBox, ElMessage, FormInstance } from 'element-plus';
 import EditDic from './component/edit.vue';
+import ListDic from './component/list.vue';
 import api from '/@/api/datahub';
 
 // 定义接口来定义对象的类型
@@ -141,10 +142,11 @@ interface TableDataState {
 
 export default defineComponent({
 	name: 'sourcelist',
-	components: { EditDic },
+	components: { EditDic,ListDic },
 	setup() {
 		const addDicRef = ref();
 		const editDicRef = ref();
+		const listDicRef=ref();
 		const queryRef = ref();
 		const state = reactive<TableDataState>({
 			typeData: [
@@ -193,6 +195,11 @@ export default defineComponent({
 				state.tableData.total = res.Total;
 			});
 		};
+
+		//打开数据记录
+		const onOpenList=(row: TableDataRow)=>{
+			listDicRef.value.openDialog(row);
+		}
 		// 打开新增数据源弹窗
 		const onOpenAdd = () => {
 			editDicRef.value.openDialog();
@@ -245,7 +252,9 @@ export default defineComponent({
 		return {
 			addDicRef,
 			editDicRef,
+			listDicRef,
 			queryRef,
+			onOpenList,
 			onOpenAdd,
 			onOpenEdit,
 			onRowDel,

+ 1 - 3
src/views/device/instance/component/edit.vue

@@ -108,9 +108,7 @@ export default defineComponent({
         ],
         productId: [{ required: true, message: '所属产品不能为空', trigger: 'blur' }],
         deptId: [{ required: true, message: '所属部门不能为空', trigger: 'blur' }],
-        certificate: [{ required: true, message: '请输入设备证书', trigger: 'blur' }],
-        secureKey: [{ required: true, message: '请输入设备秘钥', trigger: 'blur' }],
-        version: [{ required: true, message: '请输入固件版本号', trigger: 'blur' }],
+       
       }
 		});
 		// 打开弹窗

+ 29 - 28
src/views/device/product/component/editPro.vue

@@ -34,34 +34,30 @@
 
            
           <el-form-item label="消息协议" prop="messageProtocol">
-      
-
-               <el-select v-model="ruleForm.messageProtocol" placeholder="请选择消息协议">
-              <el-option
-                v-for="item in messageData"
-                :key="item.key"
-                :label="item.name"
-                :value="item.key"
-              />
-            </el-select>
+              <el-select v-model="ruleForm.messageProtocol" placeholder="请选择消息协议">
+                <el-option
+                                        v-for="dict in network_protocols"
+                                        :key="dict.value"
+                                        :label="dict.label"
+                                        :value="dict.value">
+                                    </el-option>
+              </el-select>
             </el-form-item> 
 
             <el-form-item label="传输协议" prop="transportProtocol">
-           
-
-                 <el-select v-model="ruleForm.transportProtocol" placeholder="请选择传输协议">
-              <el-option
-                v-for="item in tranData"
-                :key="item.key"
-                :label="item.name"
-                :value="item.key"
-              />
-            </el-select>
+              <el-select v-model="ruleForm.transportProtocol" placeholder="请选择传输协议">
+                <el-option
+                                            v-for="dict in network_server_type"
+                                            :key="dict.value"
+                                            :label="dict.label"
+                                            :value="dict.value">
+                                        </el-option>
+              </el-select>
             </el-form-item>
 
       
         <el-form-item label="设备类型" prop="deviceType">
-          <el-radio-group v-model="ruleForm.deviceType" model-value="设备">
+          <el-radio-group v-model="ruleForm.deviceType" >
             <el-radio label="设备">设备</el-radio>
 
             <el-radio label="网关">网关</el-radio>
@@ -82,7 +78,7 @@
 </template>
 
 <script lang="ts">
-import { reactive, toRefs, defineComponent,ref, unref } from 'vue';
+import { reactive, toRefs, defineComponent,ref, unref,getCurrentInstance } from 'vue';
 import api from '/@/api/device';
 import uploadVue from '/@/components/upload/index.vue';
 import {ElMessage,UploadProps} from "element-plus";
@@ -111,6 +107,9 @@ export default defineComponent({
     const formRef = ref<HTMLElement | null>(null);
     const baseURL:string|undefined|boolean = import.meta.env.VITE_API_URL
 
+    const { proxy } = getCurrentInstance() as any;
+    const { network_server_type, network_protocols } = proxy.useDict('network_server_type', 'network_protocols');
+
 		const state = reactive<DicState>({
 			isShowDialog: false,
     	cateData: [], // 分类数据
@@ -168,12 +167,12 @@ export default defineComponent({
         api.dept.getList({ status: -1 }).then((res: any) => {
           state.deptData = res || [];
         });
-        api.product.message_protocol_list({ status: -1 }).then((res: any) => {
-          state.messageData = res.data || [];
-        });
-        api.product.trunsport_protocol_list({ status: -1 }).then((res: any) => {
-          state.tranData = res.data || [];
-        });
+        // api.product.message_protocol_list({ status: -1 }).then((res: any) => {
+        //   state.messageData = res.data || [];
+        // });
+        // api.product.trunsport_protocol_list({ status: -1 }).then((res: any) => {
+        //   state.tranData = res.data || [];
+        // });
       if (row){
         // api.dict.getType(row.dictId).then((res:any)=>{
         //   state.ruleForm = res.data.dictType
@@ -236,6 +235,8 @@ export default defineComponent({
 			closeDialog,
 			onCancel,
 			onSubmit,
+      network_server_type,
+      network_protocols,
       formRef,
 			...toRefs(state),
 		};

+ 10 - 4
src/views/heatStation/heatStation/component/edit.vue

@@ -114,10 +114,8 @@ export default defineComponent({
 			state.treeData = tree
 
 			if (row) {
-				state.ruleForm = {
-					...row,
-					parentId: row.parentId === -1 ? '' : row.parentId
-				}
+				(state.ruleForm as any).id = row.id
+				getDetail()
 			}
 			nextTick(() => {
 				initMap()
@@ -153,6 +151,14 @@ export default defineComponent({
 			closeDialog()
 			state.keyword = ''
 		}
+		const getDetail = () => {
+			api.heatStation.detail(state.ruleForm.id)
+				.then((res: any) => {
+					state.ruleForm = {
+						...res
+					}
+				})
+		}
 		// 新增
 		const onSubmit = () => {
 			const formWrap = unref(formRef) as any

+ 2 - 1
src/views/login/component/account.vue

@@ -40,7 +40,7 @@
       </el-col>
     </el-form-item>
     <el-form-item class="login-animation4">
-      <el-button type="primary" class="login-content-submit" round @click="onSignIn" :loading="loading.signIn">
+      <el-button type="primary" class="login-content-submit"  @click="onSignIn" :loading="loading.signIn">
         <span>{{ $t('message.account.accountBtnText') }}</span>
       </el-button>
     </el-form-item>
@@ -182,6 +182,7 @@ export default defineComponent({
 
 <style scoped lang="scss">
 .login-content-form {
+	width: 400px;
 	margin-top: 20px;
 	@for $i from 1 through 4 {
 		.login-animation#{$i} {

+ 109 - 47
src/views/login/index.vue

@@ -1,51 +1,37 @@
 <template>
-  <div class="login-container">
-    <div class="login-content-out">
-      <div class="login-content">
-        <div class="login-content-main">
-          <div class="login-icon-group">
-            <div class="login-icon-group-title">
-              <img :src="logoMini" />
-              <div class="login-icon-group-title-text font25">{{ getThemeConfig.globalViceTitle }}</div>
-            </div>
-          </div>
-          <div v-if="!isScan">
-            <el-tabs v-model="tabsActiveName">
-              <el-tab-pane :label="$t('message.label.one1')" name="account">
-                <Account />
-              </el-tab-pane>
-              <!-- <el-tab-pane :label="$t('message.label.two2')" name="mobile">
-                <Mobile />
-              </el-tab-pane> -->
-            </el-tabs>
-          </div>
-          <!-- <Scan v-if="isScan" /> -->
-          <!-- <div class="login-content-main-sacn" @click="isScan = !isScan">
-            <i class="iconfont" :class="isScan ? 'icon-diannao1' : 'icon-barcode-qr'"></i>
-            <div class="login-content-main-sacn-delta"></div>
-          </div> -->
-        </div>
-      </div>
-    </div>
-    <div class="login-footer">
-      <!-- <amis :json="amisjson" /> -->
-      <div class="login-footer-content mt15">
-        <div class="login-footer-content-warp">
-          <div>Copyright © 2021-2023 SAGOO All Rights Reserved.</div>
-        </div>
-      </div>
-    </div>
-  </div>
+	<div class="login-container flex-row">
+		<el-switch
+			class="switch"
+			v-model="getThemeConfig.isIsDark"
+			size="large"
+			inline-prompt
+			@change="onAddDarkChange"
+			:active-icon="Moon"
+			:inactive-icon="Sunny"
+		></el-switch>
+		<div class="part left">
+			<div class="flex logo"><img class="logoimg" src="/@/assets/logo.png" />{{ sysinfo.systemName }}</div>
+			<img class="img" src="/@/assets/login-box-bg.svg" />
+		</div>
+		<div class="part">
+			<!-- <img :src="logoMini" />
+							<div class="login-icongroup-title-text font25">{{ getThemeConfig.globalViceTitle }}</div> -->
+			<div class="title">登录</div>
+			<Account />
+		</div>
+		<!-- <amis :json="amisjson" /> -->
+	</div>
 </template>
 
 <script lang="ts">
 import { toRefs, reactive, computed, defineComponent } from 'vue';
 import Account from '/@/views/login/component/account.vue';
-import Mobile from '/@/views/login/component/mobile.vue';
-import Scan from '/@/views/login/component/scan.vue';
 import { useStore } from '/@/store/index';
 import logoMini from '/@/assets/logo.png';
-import amis from '/@/components/amis/index.vue';
+import { Sunny, Moon } from '@element-plus/icons-vue';
+// import amis from '/@/components/amis/index.vue';
+
+const store = useStore();
 
 // 定义接口来定义对象的类型
 interface LoginState {
@@ -55,9 +41,19 @@ interface LoginState {
 
 export default defineComponent({
 	name: 'loginIndex',
-	components: { Account, Mobile, Scan, amis },
+	components: {
+		Account,
+		// amis,
+	},
 	data: function () {
 		return {
+			Sunny,
+			Moon,
+			sysinfo: {
+				buildVersion: '',
+				systemName: '',
+				systemCopyright: '',
+			},
 			amisjson: {
 				type: 'page',
 				title: '表单页面',
@@ -81,6 +77,9 @@ export default defineComponent({
 			},
 		};
 	},
+	created() {
+		this.sysinfo = JSON.parse(localStorage.sysinfo || '{}');
+	},
 	setup() {
 		const store = useStore();
 		const state = reactive<LoginState>({
@@ -91,7 +90,16 @@ export default defineComponent({
 		const getThemeConfig = computed(() => {
 			return store.state.themeConfig.themeConfig;
 		});
+
+		// 4、界面显示 --> 深色模式
+		const onAddDarkChange = () => {
+			const body = document.documentElement as HTMLElement;
+			if (getThemeConfig.value.isIsDark) body.setAttribute('data-theme', 'dark');
+			else body.setAttribute('data-theme', '');
+		};
+
 		return {
+			onAddDarkChange,
 			logoMini,
 			getThemeConfig,
 			...toRefs(state),
@@ -101,13 +109,67 @@ export default defineComponent({
 </script>
 
 <style scoped lang="scss">
+html[data-theme='dark'] {
+	.login-container {
+		background: #293146;
+	}
+	.left {
+		background-image: url(/@/assets/login-bg-dark.svg);
+	}
+	.title{
+		color: #aaa;
+	}
+}
+.flex {
+	display: flex;
+	align-items: center;
+}
+.switch {
+	position: fixed;
+	right: 20px;
+	top: 20px;
+}
 .login-container {
-	width: 100%;
-	height: 100%;
+	width: 100vw;
+	height: 100vh;
 	position: relative;
-	background-image: url('/@/assets/bg.jpeg');
-	background-size: cover;
-	background-position: center;
+	background: #fff;
+	.title {
+		font-size: 30px;
+		color: #333;
+		font-weight: bold;
+		letter-spacing: 20px;
+	}
+	.logo {
+		font-size: 30px;
+		color: #fff;
+		.logoimg {
+			height: 50px;
+			display: block;
+			margin-right: 12px;
+		}
+	}
+	.img {
+		width: 50%;
+		display: block;
+		margin: 15vh 0;
+	}
+	.part {
+		flex: 1;
+		display: flex;
+		flex-flow: column nowrap;
+		justify-content: center;
+		align-items: center;
+	}
+	.left {
+		height: 100vh;
+		background-image: url(/@/assets/login-bg.svg);
+		background-repeat: no-repeat;
+		background-size: auto 100%;
+		background-position: right center;
+		align-items: flex-start;
+		padding-left: 8%;
+	}
 	.login-icon-group {
 		width: 100%;
 		height: 100%;
@@ -143,7 +205,7 @@ export default defineComponent({
 		width: 500px;
 		padding: 20px;
 		margin-left: calc(50% - 500px);
-		background-color: rgba(255,255,255,0.8);
+		background-color: rgba(255, 255, 255, 0.8);
 		border: 5px solid var(--el-color-primary-light-8);
 		border-radius: 5px;
 		overflow: hidden;

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio