From 8b56ab2d31905c3c7582296e9e0052fe02f45207 Mon Sep 17 00:00:00 2001
From: master <master@163.com>
Date: 星期五, 04 三月 2022 16:21:14 +0800
Subject: [PATCH] 添加采集设备页面

---
 src/cool/modules/index.ts                              |    3 
 src/cool/modules/userInfo/components/index.ts          |    1 
 src/cool/modules/device/service/index.ts               |    8 
 src/cool/modules/immediateTask/index.ts                |   15 
 src/cool/modules/deviceGroup/store/index.ts            |    1 
 src/cool/modules/cycleTask/store/index.ts              |    1 
 src/cool/modules/userInfo/views/userInfo.vue           |    5 
 src/cool/modules/deviceGroup/views/deviceGroup.vue     |    5 
 src/cool/modules/douMsg/views/douMsg.vue               |    5 
 src/cool/modules/deviceGroup/service/index.ts          |    1 
 src/cool/modules/cycleTask/pages/index.ts              |    1 
 src/cool/modules/deviceGroup/directives/index.ts       |    1 
 src/cool/modules/deviceGroup/pages/index.ts            |    1 
 src/cool/modules/userInfo/service/index.ts             |    1 
 src/cool/modules/cycleTask/views/cycleTask.vue         |    5 
 src/cool/modules/cycleTask/index.ts                    |   15 
 src/cool/modules/douMsg/views/index.ts                 |    1 
 index.html                                             |  314 ++++++------
 src/cool/modules/deviceGroup/index.ts                  |   15 
 src/cool/modules/immediateTask/views/immediateTask.vue |    5 
 src/cool/modules/cycleTask/components/index.ts         |    1 
 src/cool/modules/userInfo/pages/index.ts               |    1 
 src/cool/modules/userInfo/store/index.ts               |    1 
 src/cool/modules/immediateTask/directives/index.ts     |    1 
 src/cool/modules/cycleTask/directives/index.ts         |    1 
 src/cool/modules/device/views/device.vue               |  201 ++++++++
 src/cool/modules/douMsg/components/index.ts            |    1 
 src/cool/modules/deviceGroup/components/index.ts       |    1 
 src/cool/modules/douMsg/directives/index.ts            |    1 
 src/cool/modules/douMsg/index.ts                       |   15 
 src/cool/modules/douMsg/service/index.ts               |    1 
 src/cool/modules/immediateTask/views/index.ts          |    1 
 src/cool/modules/immediateTask/service/index.ts        |    1 
 src/cool/modules/cycleTask/service/index.ts            |    1 
 src/cool/modules/userInfo/views/index.ts               |    1 
 src/cool/modules/douMsg/pages/index.ts                 |    1 
 src/cool/modules/userInfo/index.ts                     |   15 
 src/cool/modules/immediateTask/store/index.ts          |    1 
 src/cool/modules/device/service/device.ts              |    5 
 src/cool/modules/base/pages/login/index.vue            |  514 ++++++++++----------
 src/cool/modules/douMsg/store/index.ts                 |    1 
 src/cool/modules/immediateTask/pages/index.ts          |    1 
 src/cool/modules/huaneng/views/huaneng.vue             |  248 +++++-----
 src/cool/modules/userInfo/directives/index.ts          |    1 
 src/cool/modules/deviceGroup/views/index.ts            |    1 
 src/cool/modules/immediateTask/components/index.ts     |    1 
 src/cool/modules/cycleTask/views/index.ts              |    1 
 47 files changed, 885 insertions(+), 538 deletions(-)

diff --git a/index.html b/index.html
index b5a68ee..4f30390 100644
--- a/index.html
+++ b/index.html
@@ -1,157 +1,157 @@
-<!DOCTYPE html>
-<html lang="en">
-	<head>
-		<meta charset="utf-8" />
-		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
-		<meta name="referer" content="never" />
-		<meta name="renderer" content="webkit" />
-		<meta
-			name="viewport"
-			content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"
-		/>
-		<title>鍗庤兘涓婃捣鐭虫礊鍙g浜岀數鍘傛枡鍦轰笁缁撮噸寤�</title>
-		<link rel="icon" href="favicon.ico" />
-		<style>
-			html,
-			body,
-			#app {
-				height: 100%;
-			}
-
-			* {
-				margin: 0;
-				padding: 0;
-				font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
-					"Microsoft YaHei", "寰蒋闆呴粦", Arial, sans-serif;
-			}
-
-			.preload {
-				display: flex;
-				flex-direction: column;
-				height: 100%;
-				letter-spacing: 1px;
-				background-color: #2f3447;
-			}
-
-			.preload .container {
-				display: flex;
-				justify-content: center;
-				align-items: center;
-				flex-direction: column;
-				width: 100%;
-				user-select: none;
-				flex-grow: 1;
-			}
-
-			.preload .name {
-				font-size: 30px;
-				color: #fff;
-				letter-spacing: 5px;
-				font-weight: bold;
-				margin-bottom: 30px;
-			}
-
-			.preload .title {
-				color: #fff;
-				font-size: 14px;
-				margin: 30px 0 20px 0;
-			}
-
-			.preload .sub-title {
-				color: #ababab;
-				font-size: 12px;
-			}
-
-			.preload .footer {
-				text-align: center;
-				padding: 10px 0 20px 0;
-			}
-
-			.preload .footer a {
-				font-size: 12px;
-				color: #ababab;
-				text-decoration: none;
-			}
-
-			.preload .loading {
-				height: 30px;
-				width: 30px;
-				border-radius: 30px;
-				border: 7px solid currentColor;
-				border-bottom-color: #2f3447 !important;
-				position: relative;
-				animation: r 1s infinite cubic-bezier(0.17, 0.67, 0.83, 0.67),
-					bc 2s infinite ease-in;
-				transform: rotate(0deg);
-			}
-
-			@keyframes r {
-				from {
-					transform: rotate(0deg);
-				}
-				to {
-					transform: rotate(360deg);
-				}
-			}
-
-			.preload .loading::after,
-			.preload .loading::before {
-				content: "";
-				display: inline-block;
-				position: absolute;
-				bottom: -2px;
-				height: 7px;
-				width: 7px;
-				border-radius: 10px;
-				background-color: currentColor;
-			}
-
-			.preload .loading::after {
-				left: -1px;
-			}
-
-			.preload .loading::before {
-				right: -1px;
-			}
-
-			@keyframes bc {
-				0% {
-					color: #689cc5;
-				}
-
-				25% {
-					color: #b3b7e2;
-				}
-
-				50% {
-					color: #93dbe9;
-				}
-
-				75% {
-					color: #abbd81;
-				}
-
-				100% {
-					color: #689cc5;
-				}
-			}
-		</style>
-	</head>
-	<body>
-		<div id="app">
-			<div class="preload">
-				<div class="container">
-					<p class="name">鍗庤兘鐭虫礊鍙g浜岀數鍘傛枡鍦轰笁缁撮噸寤�</p>
-					<div class="loading"></div>
-					<p class="title">姝e湪鍔犺浇璧勬簮...</p>
-					<p class="sub-title">鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟</p>
-				</div>
-
-				<div class="footer">
-					<a href="https://cool-js.com/" target="_blank"> https://hn.3d.com </a>
-				</div>
-			</div>
-		</div>
-		<script type="module" src="/src/main.ts"></script>
-	</body>
-</html>
+<!DOCTYPE html>
+<html lang="en">
+	<head>
+		<meta charset="utf-8" />
+		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
+		<meta name="referer" content="never" />
+		<meta name="renderer" content="webkit" />
+		<meta
+			name="viewport"
+			content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=0"
+		/>
+		<title>鍗庤兘涓婃捣鐭虫礊鍙g浜岀數鍘傛枡鍦轰笁缁撮噸寤�</title>
+		<link rel="icon" href="favicon.ico" />
+		<style>
+			html,
+			body,
+			#app {
+				height: 100%;
+			}
+
+			* {
+				margin: 0;
+				padding: 0;
+				font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",
+					"Microsoft YaHei", "寰蒋闆呴粦", Arial, sans-serif;
+			}
+
+			.preload {
+				display: flex;
+				flex-direction: column;
+				height: 100%;
+				letter-spacing: 1px;
+				background-color: #2f3447;
+			}
+
+			.preload .container {
+				display: flex;
+				justify-content: center;
+				align-items: center;
+				flex-direction: column;
+				width: 100%;
+				user-select: none;
+				flex-grow: 1;
+			}
+
+			.preload .name {
+				font-size: 30px;
+				color: #fff;
+				letter-spacing: 5px;
+				font-weight: bold;
+				margin-bottom: 30px;
+			}
+
+			.preload .title {
+				color: #fff;
+				font-size: 14px;
+				margin: 30px 0 20px 0;
+			}
+
+			.preload .sub-title {
+				color: #ababab;
+				font-size: 12px;
+			}
+
+			.preload .footer {
+				text-align: center;
+				padding: 10px 0 20px 0;
+			}
+
+			.preload .footer a {
+				font-size: 12px;
+				color: #ababab;
+				text-decoration: none;
+			}
+
+			.preload .loading {
+				height: 30px;
+				width: 30px;
+				border-radius: 30px;
+				border: 7px solid currentColor;
+				border-bottom-color: #2f3447 !important;
+				position: relative;
+				animation: r 1s infinite cubic-bezier(0.17, 0.67, 0.83, 0.67),
+					bc 2s infinite ease-in;
+				transform: rotate(0deg);
+			}
+
+			@keyframes r {
+				from {
+					transform: rotate(0deg);
+				}
+				to {
+					transform: rotate(360deg);
+				}
+			}
+
+			.preload .loading::after,
+			.preload .loading::before {
+				content: "";
+				display: inline-block;
+				position: absolute;
+				bottom: -2px;
+				height: 7px;
+				width: 7px;
+				border-radius: 10px;
+				background-color: currentColor;
+			}
+
+			.preload .loading::after {
+				left: -1px;
+			}
+
+			.preload .loading::before {
+				right: -1px;
+			}
+
+			@keyframes bc {
+				0% {
+					color: #689cc5;
+				}
+
+				25% {
+					color: #b3b7e2;
+				}
+
+				50% {
+					color: #93dbe9;
+				}
+
+				75% {
+					color: #abbd81;
+				}
+
+				100% {
+					color: #689cc5;
+				}
+			}
+		</style>
+	</head>
+	<body>
+		<div id="app">
+			<div class="preload">
+				<div class="container">
+					<p class="name">鍗庤兘鐭虫礊鍙g浜岀數鍘傛枡鍦轰笁缁撮噸寤�</p>
+					<div class="loading"></div>
+					<p class="title">姝e湪鍔犺浇璧勬簮...</p>
+					<p class="sub-title">鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟</p>
+				</div>
+
+				<div class="footer">
+					<a href="https://cool-js.com/" target="_blank"> https://hn.3d.com </a>
+				</div>
+			</div>
+		</div>
+		<script type="module" src="/src/main.ts"></script>
+	</body>
+</html>
diff --git a/src/cool/modules/base/pages/login/index.vue b/src/cool/modules/base/pages/login/index.vue
index 71f98bc..6e5a74c 100644
--- a/src/cool/modules/base/pages/login/index.vue
+++ b/src/cool/modules/base/pages/login/index.vue
@@ -1,257 +1,257 @@
-<template>
-	<div class="page-login">
-		<div class="box">
-			<img class="logo" src="../../static/images/logo.png" alt="" />
-			<!-- <p class="desc">{{ app.name }}-鍗庤兘浜屽巶鏂欏満鐓ゅ爢瀹炴椂涓夌淮寤烘ā</p> -->
-			<p class="desc">{{ app.name }}-鍗庤兘浜屽巶鏂欏満鐓ゅ爢瀹炴椂涓夌淮寤烘ā</p>
-
-			<el-form label-position="top" class="form" size="medium" :disabled="saving">
-				<el-form-item label="鐢ㄦ埛鍚�">
-					<el-input
-						v-model="form.username"
-						placeholder="璇疯緭鍏ョ敤鎴峰悕"
-						maxlength="20"
-						auto-complete="off"
-					/>
-				</el-form-item>
-
-				<el-form-item label="瀵嗙爜">
-					<el-input
-						v-model="form.password"
-						type="password"
-						placeholder="璇疯緭鍏ュ瘑鐮�"
-						maxlength="20"
-						auto-complete="off"
-					/>
-				</el-form-item>
-
-				<el-form-item label="楠岃瘉鐮�" class="captcha">
-					<el-input
-						v-model="form.verifyCode"
-						placeholder="璇疯緭鍏ュ浘鐗囬獙璇佺爜"
-						maxlength="4"
-						auto-complete="off"
-						@keyup.enter="toLogin"
-					/>
-
-					<captcha
-						:ref="setRefs('captcha')"
-						v-model="form.captchaId"
-						class="value"
-						@change="
-							() => {
-								form.verifyCode = '';
-							}
-						"
-					/>
-				</el-form-item>
-			</el-form>
-
-			<el-button round size="small" class="submit-btn" :loading="saving" @click="toLogin"
-				>鐧诲綍</el-button
-			>
-		</div>
-		<div class="video">
-			<video class="bgvideo" id="bgvideo" autoplay muted loop>
-				<source src="../../static/video/bg.mp4" type="video/mp4" />
-			</video>
-		</div>
-	</div>
-</template>
-
-<script lang="ts">
-import { defineComponent, reactive, ref } from "vue";
-import { ElMessage } from "element-plus";
-import Captcha from "./components/captcha.vue";
-import { useEps, useCool } from "/@/cool";
-
-export default defineComponent({
-	cool: {
-		route: {
-			path: "/login"
-		}
-	},
-
-	components: {
-		Captcha
-	},
-
-	setup() {
-		const { refs, setRefs, store, router, app }: any = useCool();
-
-		const saving = ref<boolean>(false);
-
-		// 鐧诲綍琛ㄥ崟鏁版嵁
-		const form = reactive({
-			username: "",
-			password: "",
-			captchaId: "",
-			verifyCode: ""
-		});
-
-		// 鐧诲綍
-		async function toLogin() {
-			if (!form.username) {
-				return ElMessage.warning("鐢ㄦ埛鍚嶄笉鑳戒负绌�");
-			}
-
-			if (!form.password) {
-				return ElMessage.warning("瀵嗙爜涓嶈兘涓虹┖");
-			}
-
-			if (!form.verifyCode) {
-				return ElMessage.warning("鍥剧墖楠岃瘉鐮佷笉鑳戒负绌�");
-			}
-
-			saving.value = true;
-
-			try {
-				// 鐧诲綍
-				await store.dispatch("userLogin", form);
-
-				// 鐢ㄦ埛淇℃伅
-				await store.dispatch("userInfo");
-
-				// 璇诲彇Eps
-				await useEps();
-
-				// 鏉冮檺鑿滃崟
-				const [first] = await store.dispatch("permMenu");
-
-				if (!first) {
-					ElMessage.error("璇ヨ处鍙锋病鏈夋潈闄�");
-				} else {
-					router.push("/");
-				}
-			} catch (err: any) {
-				ElMessage.error(err);
-				refs.value.captcha.refresh();
-			}
-
-			saving.value = false;
-		}
-
-		return {
-			refs,
-			setRefs,
-			form,
-			saving,
-			toLogin,
-			app
-		};
-	}
-});
-</script>
-
-<style lang="scss">
-.page-login {
-	height: 100vh;
-	width: 100vw;
-	position: relative;
-	background-color: rgba($color: #000000, $alpha: 0.4);
-
-	.box {
-		display: flex;
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		height: 500px;
-		width: 500px;
-		padding: 80px 0;
-		position: absolute;
-		z-index: 9;
-		left: calc(50% - 250px);
-		top: calc(50% - 330px);
-		background-color: rgba(47, 52, 71, 0.93);
-		border-radius: 12px;
-		box-shadow: 0 2px 6px rgba($color: #000000, $alpha: 0.15);
-
-		.logo {
-			height: 50px;
-			margin-bottom: 20px;
-		}
-
-		.desc {
-			color: #ccc;
-			font-size: 12px;
-			margin-bottom: 60px;
-			letter-spacing: 1px;
-		}
-
-		.el-form {
-			width: 300px;
-			border-radius: 3px;
-
-			.el-form-item {
-				margin-bottom: 20px;
-
-				&__label {
-					color: #ccc;
-				}
-			}
-
-			.el-input {
-				.el-input__inner {
-					border: 0;
-					border-bottom: 0.5px solid #999;
-					border-radius: 0;
-					padding: 0 5px;
-					background-color: transparent;
-					color: #ccc;
-					transition: border-color 0.3s;
-					position: relative;
-
-					&:focus {
-						border-color: #fff;
-						color: #fff;
-					}
-
-					&:-webkit-autofill {
-						-webkit-text-fill-color: #fff !important;
-						-webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
-						transition: background-color 50000s ease-in-out 0s;
-					}
-				}
-			}
-
-			.captcha {
-				position: relative;
-
-				.value {
-					position: absolute;
-					bottom: 1px;
-					right: 0;
-				}
-			}
-		}
-
-		.submit-btn {
-			margin-top: 40px;
-			padding: 9px 40px;
-			color: #000;
-		}
-	}
-
-	.bgvideo {
-		position: absolute;
-		top: 50%;
-		left: 50%;
-		min-width: 100%;
-		min-height: 100%;
-		width: auto;
-		height: auto;
-		z-index: -9999;
-		-webkit-transform: translateX(-50%) translateY(-50%);
-		transform: translateX(-50%) translateY(-50%);
-		-webkit-transition: 1s opacity;
-		transition: 1s opacity;
-	}
-	.video {
-		position: fixed;
-		width: 100%;
-		height: 100%;
-		overflow: hidden;
-		z-index: -10000;
-	}
-}
-</style>
+<template>
+	<div class="page-login">
+		<div class="box">
+			<img class="logo" src="../../static/images/logo.png" alt="" />
+			<!-- <p class="desc">{{ app.name }}-鍗庤兘浜屽巶鏂欏満鐓ゅ爢瀹炴椂涓夌淮寤烘ā</p> -->
+			<p class="desc">{{ app.name }}-鍗庤兘浜屽巶鏂欏満鐓ゅ爢瀹炴椂涓夌淮寤烘ā</p>
+
+			<el-form label-position="top" class="form" size="medium" :disabled="saving">
+				<el-form-item label="鐢ㄦ埛鍚�">
+					<el-input
+						v-model="form.username"
+						placeholder="璇疯緭鍏ョ敤鎴峰悕"
+						maxlength="20"
+						auto-complete="off"
+					/>
+				</el-form-item>
+
+				<el-form-item label="瀵嗙爜">
+					<el-input
+						v-model="form.password"
+						type="password"
+						placeholder="璇疯緭鍏ュ瘑鐮�"
+						maxlength="20"
+						auto-complete="off"
+					/>
+				</el-form-item>
+
+				<el-form-item label="楠岃瘉鐮�" class="captcha">
+					<el-input
+						v-model="form.verifyCode"
+						placeholder="璇疯緭鍏ュ浘鐗囬獙璇佺爜"
+						maxlength="4"
+						auto-complete="off"
+						@keyup.enter="toLogin"
+					/>
+
+					<captcha
+						:ref="setRefs('captcha')"
+						v-model="form.captchaId"
+						class="value"
+						@change="
+							() => {
+								form.verifyCode = '';
+							}
+						"
+					/>
+				</el-form-item>
+			</el-form>
+
+			<el-button round size="small" class="submit-btn" :loading="saving" @click="toLogin"
+				>鐧诲綍</el-button
+			>
+		</div>
+		<div class="video">
+			<video class="bgvideo" id="bgvideo" autoplay muted loop>
+				<source src="../../static/video/bg.mp4" type="video/mp4" />
+			</video>
+		</div>
+	</div>
+</template>
+
+<script lang="ts">
+import { defineComponent, reactive, ref } from "vue";
+import { ElMessage } from "element-plus";
+import Captcha from "./components/captcha.vue";
+import { useEps, useCool } from "/@/cool";
+
+export default defineComponent({
+	cool: {
+		route: {
+			path: "/login"
+		}
+	},
+
+	components: {
+		Captcha
+	},
+
+	setup() {
+		const { refs, setRefs, store, router, app }: any = useCool();
+
+		const saving = ref<boolean>(false);
+
+		// 鐧诲綍琛ㄥ崟鏁版嵁
+		const form = reactive({
+			username: "",
+			password: "",
+			captchaId: "",
+			verifyCode: ""
+		});
+
+		// 鐧诲綍
+		async function toLogin() {
+			if (!form.username) {
+				return ElMessage.warning("鐢ㄦ埛鍚嶄笉鑳戒负绌�");
+			}
+
+			if (!form.password) {
+				return ElMessage.warning("瀵嗙爜涓嶈兘涓虹┖");
+			}
+
+			if (!form.verifyCode) {
+				return ElMessage.warning("鍥剧墖楠岃瘉鐮佷笉鑳戒负绌�");
+			}
+
+			saving.value = true;
+
+			try {
+				// 鐧诲綍
+				await store.dispatch("userLogin", form);
+
+				// 鐢ㄦ埛淇℃伅
+				await store.dispatch("userInfo");
+
+				// 璇诲彇Eps
+				await useEps();
+
+				// 鏉冮檺鑿滃崟
+				const [first] = await store.dispatch("permMenu");
+
+				if (!first) {
+					ElMessage.error("璇ヨ处鍙锋病鏈夋潈闄�");
+				} else {
+					router.push("/");
+				}
+			} catch (err: any) {
+				ElMessage.error(err);
+				refs.value.captcha.refresh();
+			}
+
+			saving.value = false;
+		}
+
+		return {
+			refs,
+			setRefs,
+			form,
+			saving,
+			toLogin,
+			app
+		};
+	}
+});
+</script>
+
+<style lang="scss">
+.page-login {
+	height: 100vh;
+	width: 100vw;
+	position: relative;
+	background-color: rgba($color: #000000, $alpha: 0.4);
+
+	.box {
+		display: flex;
+		flex-direction: column;
+		justify-content: center;
+		align-items: center;
+		height: 500px;
+		width: 500px;
+		padding: 80px 0;
+		position: absolute;
+		z-index: 9;
+		left: calc(50% - 250px);
+		top: calc(50% - 330px);
+		background-color: rgba(47, 52, 71, 0.93);
+		border-radius: 12px;
+		box-shadow: 0 2px 6px rgba($color: #000000, $alpha: 0.15);
+
+		.logo {
+			height: 50px;
+			margin-bottom: 20px;
+		}
+
+		.desc {
+			color: #ccc;
+			font-size: 12px;
+			margin-bottom: 60px;
+			letter-spacing: 1px;
+		}
+
+		.el-form {
+			width: 300px;
+			border-radius: 3px;
+
+			.el-form-item {
+				margin-bottom: 20px;
+
+				&__label {
+					color: #ccc;
+				}
+			}
+
+			.el-input {
+				.el-input__inner {
+					border: 0;
+					border-bottom: 0.5px solid #999;
+					border-radius: 0;
+					padding: 0 5px;
+					background-color: transparent;
+					color: #ccc;
+					transition: border-color 0.3s;
+					position: relative;
+
+					&:focus {
+						border-color: #fff;
+						color: #fff;
+					}
+
+					&:-webkit-autofill {
+						-webkit-text-fill-color: #fff !important;
+						-webkit-box-shadow: 0 0 0px 1000px transparent inset !important;
+						transition: background-color 50000s ease-in-out 0s;
+					}
+				}
+			}
+
+			.captcha {
+				position: relative;
+
+				.value {
+					position: absolute;
+					bottom: 1px;
+					right: 0;
+				}
+			}
+		}
+
+		.submit-btn {
+			margin-top: 40px;
+			padding: 9px 40px;
+			color: #000;
+		}
+	}
+
+	.bgvideo {
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		min-width: 100%;
+		min-height: 100%;
+		width: auto;
+		height: auto;
+		z-index: -9999;
+		-webkit-transform: translateX(-50%) translateY(-50%);
+		transform: translateX(-50%) translateY(-50%);
+		-webkit-transition: 1s opacity;
+		transition: 1s opacity;
+	}
+	.video {
+		position: fixed;
+		width: 100%;
+		height: 100%;
+		overflow: hidden;
+		z-index: -10000;
+	}
+}
+</style>
diff --git a/src/cool/modules/cycleTask/components/index.ts b/src/cool/modules/cycleTask/components/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/cycleTask/components/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/cycleTask/directives/index.ts b/src/cool/modules/cycleTask/directives/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/cycleTask/directives/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/cycleTask/index.ts b/src/cool/modules/cycleTask/index.ts
new file mode 100644
index 0000000..08b1faf
--- /dev/null
+++ b/src/cool/modules/cycleTask/index.ts
@@ -0,0 +1,15 @@
+import components from "./components";
+import directives from "./directives";
+import service from "./service";
+import store from "./store";
+import pages from "./pages";
+import views from "./views";
+
+export default {
+	components,
+	directives,
+	service,
+	store,
+	pages,
+	views
+};
diff --git a/src/cool/modules/cycleTask/pages/index.ts b/src/cool/modules/cycleTask/pages/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/cycleTask/pages/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/cycleTask/service/index.ts b/src/cool/modules/cycleTask/service/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/cycleTask/service/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/cycleTask/store/index.ts b/src/cool/modules/cycleTask/store/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/cycleTask/store/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/cycleTask/views/cycleTask.vue b/src/cool/modules/cycleTask/views/cycleTask.vue
new file mode 100644
index 0000000..b3c303e
--- /dev/null
+++ b/src/cool/modules/cycleTask/views/cycleTask.vue
@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <h1>鍛ㄦ湡浠诲姟</h1>
+  </div>
+</template>
\ No newline at end of file
diff --git a/src/cool/modules/cycleTask/views/index.ts b/src/cool/modules/cycleTask/views/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/cycleTask/views/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/device/service/device.ts b/src/cool/modules/device/service/device.ts
new file mode 100644
index 0000000..77cd3e0
--- /dev/null
+++ b/src/cool/modules/device/service/device.ts
@@ -0,0 +1,5 @@
+import { BaseService, Service } from "/@/cool";
+
+@Service("device/device")
+class DemoDevice extends BaseService { }
+export default DemoDevice;
\ No newline at end of file
diff --git a/src/cool/modules/device/service/index.ts b/src/cool/modules/device/service/index.ts
index ff8b4c5..a592392 100644
--- a/src/cool/modules/device/service/index.ts
+++ b/src/cool/modules/device/service/index.ts
@@ -1 +1,7 @@
-export default {};
+import DemoDevice from "./device";
+
+export default {
+  device: {
+    device: new DemoDevice()
+  }
+};
diff --git a/src/cool/modules/device/views/device.vue b/src/cool/modules/device/views/device.vue
new file mode 100644
index 0000000..87f53d9
--- /dev/null
+++ b/src/cool/modules/device/views/device.vue
@@ -0,0 +1,201 @@
+<template>
+  <cl-crud :ref="setRefs('crud')"
+           @load="onLoad">
+    <el-row type="flex"
+            align="middle">
+      <!-- 鍒锋柊鎸夐挳 -->
+      <cl-refresh-btn />
+      <!-- 鏂板鎸夐挳 -->
+      <cl-add-btn />
+      <!-- 鍒犻櫎鎸夐挳 -->
+      <cl-multi-delete-btn />
+      <cl-flex1 />
+      <!-- 鍏抽敭瀛楁悳绱� -->
+      <cl-search-key />
+    </el-row>
+
+    <el-row>
+      <!-- 鏁版嵁琛ㄦ牸 -->
+      <cl-table :ref="setRefs('table')"
+                v-bind="table" />
+    </el-row>
+
+    <el-row type="flex">
+      <cl-flex1 />
+      <!-- 鍒嗛〉鎺т欢 -->
+      <cl-pagination />
+    </el-row>
+
+    <!-- 鏂板銆佺紪杈� -->
+    <cl-upsert :ref="setRefs('upsert')"
+               v-bind="upsert" />
+  </cl-crud>
+</template>
+
+<script lang="ts">
+import { defineComponent, reactive } from "vue";
+import { CrudLoad, Upsert, Table } from "@cool-vue/crud/types";
+import { useCool } from "/@/cool";
+
+export default defineComponent({
+	setup() {
+		const { refs, setRefs, service } = useCool();
+
+		// 鏂板銆佺紪杈戦厤缃�
+		const upsert = reactive<Upsert>({
+			items: [
+				{
+					label: "鍚嶇О",
+					prop: "name",
+					component: {
+						name: "el-input"
+					},
+					//鏄惁涓哄繀濉」,娉細鎺ュ彛閰嶇疆瀛楁鏃舵病鏈夎缃粯璁ゅ�兼椂锛岄兘闇�瑕侀�夋嫨蹇呭~
+					required: true
+				},
+				{
+					label: "閫昏緫ID",
+					prop: "logic_id",
+					component: {
+						name: "el-input"
+					},
+					required: true
+				},
+				{
+					label: "鐗╃悊ID",
+					prop: "device_id",
+					component: {
+						name: "el-input"
+					},
+					required: true
+				},
+				{
+					label: "璐熻矗浜�",
+					prop: "operator",
+					component: {
+						name: "el-input"
+					},
+					required: true
+				},
+				{
+					label: "缁忓害",
+					prop: "longitude",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "绾害",
+					prop: "latitude",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "楂樺害",
+					prop: "altitude",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "瀹夎浣嶇疆",
+					prop: "location",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "鐘舵��",
+					prop: "status",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "澶囨敞",
+					prop: "remark",
+					component: {
+						name: "el-input"
+					}
+				}
+			]
+		});
+
+		// 琛ㄦ牸閰嶇疆
+		const table = reactive<Table>({
+			columns: [
+				{
+					type: "selection",
+					align: "center"
+				},
+				{
+					label: "id",
+					prop: "id",
+					sortable: true //鏄惁鎺掑簭鍔熻兘
+				},
+				{
+					label: "杩愯鐘舵��",
+					prop: "status",
+					filters: [
+						{ text: "0", value: "宸插仠姝�" },
+						{ text: "1", value: "姝e湪杩愯" }
+					]
+					// filters:"[{ text: '瀹�', value: '瀹�' }, { text: '鍏徃', value: '鍏徃' }]"
+				},
+				{
+					label: "鍚嶇О",
+					prop: "name"
+				},
+				{
+					label: "浣嶇疆",
+					prop: "location",
+					width: 200
+				},
+				{
+					label: "閫昏緫ID",
+					prop: "logic_id"
+				},
+				{
+					label: "鐗╃悊ID",
+					prop: "device_id",
+					width: 100
+				},
+				{
+					label: "缁忓害",
+					prop: "longitude",
+					width: 150
+				},
+				{
+					label: "绾害",
+					prop: "latitude",
+					width: 150
+				},
+				{
+					label: "楂樺害",
+					prop: "altitude"
+				},
+				{
+					label: "鎿嶄綔",
+					type: "op"
+				}
+			]
+		});
+
+		// crud 鍔犺浇
+		function onLoad({ ctx, app }: CrudLoad) {
+			// 缁戝畾 service
+			ctx.service(service.device.device).done();
+			app.refresh();
+		}
+
+		return {
+			refs,
+			setRefs,
+			upsert,
+			table,
+			onLoad
+		};
+	}
+});
+</script>
diff --git a/src/cool/modules/deviceGroup/components/index.ts b/src/cool/modules/deviceGroup/components/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/deviceGroup/components/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/deviceGroup/directives/index.ts b/src/cool/modules/deviceGroup/directives/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/deviceGroup/directives/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/deviceGroup/index.ts b/src/cool/modules/deviceGroup/index.ts
new file mode 100644
index 0000000..08b1faf
--- /dev/null
+++ b/src/cool/modules/deviceGroup/index.ts
@@ -0,0 +1,15 @@
+import components from "./components";
+import directives from "./directives";
+import service from "./service";
+import store from "./store";
+import pages from "./pages";
+import views from "./views";
+
+export default {
+	components,
+	directives,
+	service,
+	store,
+	pages,
+	views
+};
diff --git a/src/cool/modules/deviceGroup/pages/index.ts b/src/cool/modules/deviceGroup/pages/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/deviceGroup/pages/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/deviceGroup/service/index.ts b/src/cool/modules/deviceGroup/service/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/deviceGroup/service/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/deviceGroup/store/index.ts b/src/cool/modules/deviceGroup/store/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/deviceGroup/store/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/deviceGroup/views/deviceGroup.vue b/src/cool/modules/deviceGroup/views/deviceGroup.vue
new file mode 100644
index 0000000..76812a8
--- /dev/null
+++ b/src/cool/modules/deviceGroup/views/deviceGroup.vue
@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <h1>璁惧鍒嗙粍椤甸潰</h1>
+  </div>
+</template>
\ No newline at end of file
diff --git a/src/cool/modules/deviceGroup/views/index.ts b/src/cool/modules/deviceGroup/views/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/deviceGroup/views/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/douMsg/components/index.ts b/src/cool/modules/douMsg/components/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/douMsg/components/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/douMsg/directives/index.ts b/src/cool/modules/douMsg/directives/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/douMsg/directives/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/douMsg/index.ts b/src/cool/modules/douMsg/index.ts
new file mode 100644
index 0000000..08b1faf
--- /dev/null
+++ b/src/cool/modules/douMsg/index.ts
@@ -0,0 +1,15 @@
+import components from "./components";
+import directives from "./directives";
+import service from "./service";
+import store from "./store";
+import pages from "./pages";
+import views from "./views";
+
+export default {
+	components,
+	directives,
+	service,
+	store,
+	pages,
+	views
+};
diff --git a/src/cool/modules/douMsg/pages/index.ts b/src/cool/modules/douMsg/pages/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/douMsg/pages/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/douMsg/service/index.ts b/src/cool/modules/douMsg/service/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/douMsg/service/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/douMsg/store/index.ts b/src/cool/modules/douMsg/store/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/douMsg/store/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/douMsg/views/douMsg.vue b/src/cool/modules/douMsg/views/douMsg.vue
new file mode 100644
index 0000000..f5171ac
--- /dev/null
+++ b/src/cool/modules/douMsg/views/douMsg.vue
@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <h1>鏂楄疆鏈鸿鎯呴〉</h1>
+  </div>
+</template>
\ No newline at end of file
diff --git a/src/cool/modules/douMsg/views/index.ts b/src/cool/modules/douMsg/views/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/douMsg/views/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/huaneng/views/huaneng.vue b/src/cool/modules/huaneng/views/huaneng.vue
index 8854f03..8243663 100644
--- a/src/cool/modules/huaneng/views/huaneng.vue
+++ b/src/cool/modules/huaneng/views/huaneng.vue
@@ -1,122 +1,126 @@
-<template>
-  <cl-crud :ref="setRefs('crud')"
-           @load="onLoad">
-    <el-row type="flex"
-            align="middle">
-      <!-- 鍒锋柊鎸夐挳 -->
-      <cl-refresh-btn />
-      <!-- 鏂板鎸夐挳 -->
-      <cl-add-btn />
-      <!-- 鍒犻櫎鎸夐挳 -->
-      <cl-multi-delete-btn />
-      <cl-flex1 />
-      <!-- 鍏抽敭瀛楁悳绱� -->
-      <cl-search-key />
-    </el-row>
-
-    <el-row>
-      <!-- 鏁版嵁琛ㄦ牸 -->
-      <cl-table :ref="setRefs('table')"
-                v-bind="table" />
-    </el-row>
-
-    <el-row type="flex">
-      <cl-flex1 />
-      <!-- 鍒嗛〉鎺т欢 -->
-      <cl-pagination />
-    </el-row>
-
-    <!-- 鏂板銆佺紪杈� -->
-    <cl-upsert :ref="setRefs('upsert')"
-               v-bind="upsert" />
-  </cl-crud>
-</template>
-
-<script lang="ts">
-import { defineComponent, reactive } from "vue";
-import { CrudLoad, Upsert, Table } from "@cool-vue/crud/types";
-import { useCool } from "/@/cool";
-
-export default defineComponent({
-	setup() {
-		const { refs, setRefs, service } = useCool();
-
-		// 鏂板銆佺紪杈戦厤缃�
-		const upsert = reactive<Upsert>({
-			items: [
-				{
-					label: "濮撳悕",
-					prop: "name",
-					component: {
-						name: "el-input"
-					}
-				},
-				{
-					label: "鍚嶇О",
-					prop: "title",
-					component: {
-						name: "el-input"
-					}
-				},
-				{
-					label: "搴忓彿",
-					prop: "price",
-					component: {
-						name: "el-input"
-					}
-				},
-				{
-					label: "鍒嗙被",
-					prop: "type",
-					component: {
-						name: "el-input"
-					}
-				}
-			]
-		});
-
-		// 琛ㄦ牸閰嶇疆
-		const table = reactive<Table>({
-			columns: [
-				{
-					label: "濮撳悕",
-					prop: "name"
-				},
-				{
-					label: "璁惧",
-					prop: "title"
-				},
-				{
-					label: "搴忓彿",
-					prop: "price"
-				},
-				{
-					label: "鍒嗙被",
-					prop: "type"
-				},
-				{
-					label: "鎿嶄綔",
-					type: "op"
-				}
-			]
-		});
-
-		// crud 鍔犺浇
-		function onLoad({ ctx, app }: CrudLoad) {
-			console.log(service);
-
-			// 缁戝畾 service
-			ctx.service(service.huaneng.huaneng).done();
-			app.refresh();
-		}
-
-		return {
-			refs,
-			setRefs,
-			upsert,
-			table,
-			onLoad
-		};
-	}
-});
-</script>
+<template>
+  <cl-crud :ref="setRefs('crud')"
+           @load="onLoad">
+    <el-row type="flex"
+            align="middle">
+      <!-- 鍒锋柊鎸夐挳 -->
+      <cl-refresh-btn />
+      <!-- 鏂板鎸夐挳 -->
+      <cl-add-btn />
+      <!-- 鍒犻櫎鎸夐挳 -->
+      <cl-multi-delete-btn />
+      <cl-flex1 />
+      <!-- 鍏抽敭瀛楁悳绱� -->
+      <cl-search-key />
+    </el-row>
+
+    <el-row>
+      <!-- 鏁版嵁琛ㄦ牸 -->
+      <cl-table :ref="setRefs('table')"
+                v-bind="table" />
+    </el-row>
+
+    <el-row type="flex">
+      <cl-flex1 />
+      <!-- 鍒嗛〉鎺т欢 -->
+      <cl-pagination />
+    </el-row>
+
+    <!-- 鏂板銆佺紪杈� -->
+    <cl-upsert :ref="setRefs('upsert')"
+               v-bind="upsert" />
+  </cl-crud>
+</template>
+
+<script lang="ts">
+import { defineComponent, reactive } from "vue";
+import { CrudLoad, Upsert, Table } from "@cool-vue/crud/types";
+import { useCool } from "/@/cool";
+
+export default defineComponent({
+	setup() {
+		const { refs, setRefs, service } = useCool();
+
+		// 鏂板銆佺紪杈戦厤缃�
+		const upsert = reactive<Upsert>({
+			items: [
+				{
+					label: "濮撳悕",
+					prop: "name",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "鍚嶇О",
+					prop: "title",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "搴忓彿",
+					prop: "price",
+					component: {
+						name: "el-input"
+					}
+				},
+				{
+					label: "鍒嗙被",
+					prop: "type",
+					component: {
+						name: "el-input"
+					}
+				}
+			]
+		});
+
+		// 琛ㄦ牸閰嶇疆
+		const table = reactive<Table>({
+			columns: [
+				{
+					type: "selection",
+					align: "center"
+				},
+				{
+					label: "濮撳悕",
+					prop: "name"
+				},
+				{
+					label: "璁惧",
+					prop: "title"
+				},
+				{
+					label: "搴忓彿",
+					prop: "price"
+				},
+				{
+					label: "鍒嗙被",
+					prop: "type"
+				},
+				{
+					label: "鎿嶄綔",
+					type: "op"
+				}
+			]
+		});
+
+		// crud 鍔犺浇
+		function onLoad({ ctx, app }: CrudLoad) {
+			console.log("service", service);
+
+			// 缁戝畾 service
+			ctx.service(service.huaneng.huaneng).done();
+			app.refresh();
+		}
+
+		return {
+			refs,
+			setRefs,
+			upsert,
+			table,
+			onLoad
+		};
+	}
+});
+</script>
diff --git a/src/cool/modules/immediateTask/components/index.ts b/src/cool/modules/immediateTask/components/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/immediateTask/components/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/immediateTask/directives/index.ts b/src/cool/modules/immediateTask/directives/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/immediateTask/directives/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/immediateTask/index.ts b/src/cool/modules/immediateTask/index.ts
new file mode 100644
index 0000000..08b1faf
--- /dev/null
+++ b/src/cool/modules/immediateTask/index.ts
@@ -0,0 +1,15 @@
+import components from "./components";
+import directives from "./directives";
+import service from "./service";
+import store from "./store";
+import pages from "./pages";
+import views from "./views";
+
+export default {
+	components,
+	directives,
+	service,
+	store,
+	pages,
+	views
+};
diff --git a/src/cool/modules/immediateTask/pages/index.ts b/src/cool/modules/immediateTask/pages/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/immediateTask/pages/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/immediateTask/service/index.ts b/src/cool/modules/immediateTask/service/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/immediateTask/service/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/immediateTask/store/index.ts b/src/cool/modules/immediateTask/store/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/immediateTask/store/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/immediateTask/views/immediateTask.vue b/src/cool/modules/immediateTask/views/immediateTask.vue
new file mode 100644
index 0000000..709071c
--- /dev/null
+++ b/src/cool/modules/immediateTask/views/immediateTask.vue
@@ -0,0 +1,5 @@
+<template>
+  <div>
+    鍗虫椂浠诲姟
+  </div>
+</template>
\ No newline at end of file
diff --git a/src/cool/modules/immediateTask/views/index.ts b/src/cool/modules/immediateTask/views/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/immediateTask/views/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/index.ts b/src/cool/modules/index.ts
index da3b97e..7782660 100644
--- a/src/cool/modules/index.ts
+++ b/src/cool/modules/index.ts
@@ -17,5 +17,6 @@
       }
     }
   },
-  "huaneng"
+  "huaneng",
+  "device"
 ];
diff --git a/src/cool/modules/userInfo/components/index.ts b/src/cool/modules/userInfo/components/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/userInfo/components/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/userInfo/directives/index.ts b/src/cool/modules/userInfo/directives/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/userInfo/directives/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/userInfo/index.ts b/src/cool/modules/userInfo/index.ts
new file mode 100644
index 0000000..08b1faf
--- /dev/null
+++ b/src/cool/modules/userInfo/index.ts
@@ -0,0 +1,15 @@
+import components from "./components";
+import directives from "./directives";
+import service from "./service";
+import store from "./store";
+import pages from "./pages";
+import views from "./views";
+
+export default {
+	components,
+	directives,
+	service,
+	store,
+	pages,
+	views
+};
diff --git a/src/cool/modules/userInfo/pages/index.ts b/src/cool/modules/userInfo/pages/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/userInfo/pages/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/userInfo/service/index.ts b/src/cool/modules/userInfo/service/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/userInfo/service/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/userInfo/store/index.ts b/src/cool/modules/userInfo/store/index.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/src/cool/modules/userInfo/store/index.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/src/cool/modules/userInfo/views/index.ts b/src/cool/modules/userInfo/views/index.ts
new file mode 100644
index 0000000..d6d1738
--- /dev/null
+++ b/src/cool/modules/userInfo/views/index.ts
@@ -0,0 +1 @@
+export default [];
diff --git a/src/cool/modules/userInfo/views/userInfo.vue b/src/cool/modules/userInfo/views/userInfo.vue
new file mode 100644
index 0000000..a3d8511
--- /dev/null
+++ b/src/cool/modules/userInfo/views/userInfo.vue
@@ -0,0 +1,5 @@
+<template>
+  <div>
+    鐢ㄦ埛绠$悊椤甸潰
+  </div>
+</template>
\ No newline at end of file

--
Gitblit v1.9.1