diff --git a/assets/js/socket.js b/assets/js/socket.js
new file mode 100644
index 0000000..bee508b
--- /dev/null
+++ b/assets/js/socket.js
@@ -0,0 +1,45 @@
+const that = {
+ controller: new Map(),
+ connection: null,
+ onclose: null,
+ onerror: null,
+ onopen: null,
+ onmessage: null,
+ delay: 0,
+ init: (link) => {
+ that.connection = new WebSocket(link)
+ that.connection.onopen = (event) => {
+ that.delay = 0
+ console.log("Open connection")
+ that.connection.send(JSON.stringify({ fm: "chat", data: `Link Start! ${that.delay}` }))
+ // 检查消息版本, 从最后时间向前查20条
+ // 当向上滚动时, 从本地最早时间向前查询20条
+ // 落日志与合并日志
+ if (that.onopen) that.onopen();
+ }
+ that.connection.onmessage = (event) => {
+ console.log("[message]", event.data)
+ let data = JSON.parse(event.data)
+ console.log(event.data, "xxxxxxxxxxxxxx")
+ let call = that.controller.get(data.fm)
+ if (call) call(data)
+ if (that.onmessage) that.onmessage();
+ }
+ that.connection.onclose = (event) => {
+ if (event.wasClean) {
+ console.log(`[close] code=${event.code} reason=${event.reason}`);
+ } else {
+ that.delay++
+ console.log(`[close] 连接中断${that.delay}第次, 尝试重连(延时${that.delay} s)`);
+ setTimeout(that.init(link), that.delay * 1000)
+ }
+ if (that.onclose) that.onclose()
+ };
+ that.connection.onerror = (error) => {
+ console.log(`[error] ${error.message}`);
+ if (that.onerror) that.onerror()
+ };
+ }
+}
+
+export default that
diff --git a/assets/sass/default.sass b/assets/sass/default.sass
index eb0e865..14c52ba 100644
--- a/assets/sass/default.sass
+++ b/assets/sass/default.sass
@@ -21,7 +21,11 @@ button
color: #ffffff
border: none
border-radius: .25rem
-
+ cursor: pointer
+ padding-left: 1rem
+ padding-right: 1rem
+ min-height: 2rem
+ font-weight: 600
a
text-decoration: none
a:link //未访问的
diff --git a/components/DialogueList.vue b/components/DialogueList.vue
new file mode 100644
index 0000000..4ed0c0f
--- /dev/null
+++ b/components/DialogueList.vue
@@ -0,0 +1,50 @@
+
+.dialogue-list
+ .post(v-for="item in data", :key="item._id")
+ .left
+ .avatar
+ .right
+ .name Last
+ .message {{ item.data }}
+
+
+
+
+
diff --git a/layouts/default.vue b/layouts/default.vue
index 0c3c203..a0ccb18 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -1,32 +1,56 @@
.main
header.header
- nav.navbar.main-width
- NuxtLink.navbar-logo(to="/") Kana
- NuxtLink.navbar-item(to="/") 主页
- .expnone
- .navbar-user(v-if="account.online")
- NuxtLink.userinfo(to="/account")
- img.avatar(:src="account.avatar")
- span.name {{ account.name }}
- .navbar-sign(v-else)
- NuxtLink.button(to="/account/signin") Signin
- NuxtLink.button(to="/account/create") Login
+ .circumscription
+ .logo Kana
+ nav.navbar
+ NuxtLink.navbar-item(to="/") 论坛
+ NuxtLink.navbar-item(to="/docs") 文档
+ NuxtLink.navbar-item(to="/chat") 聊天室
+ .online
+ .navbar-user(v-if="account.online")
+ NuxtLink.userinfo(to="/account")
+ img.avatar(:src="account.avatar")
+ span.name {{ account.name }}
+ .navbar-sign(v-else)
+ NuxtLink.button(to="/account/signin") Signin
+ NuxtLink.button(to="/account/create") Login
+ .websocket(:class="{ on: websocket }")
Nuxt
footer.footer
- b Kana
+ p
+ b Kana
+ .github
+ a(href="https://github.com/InvisibleFuture/kana")
+ span.fab.fa-github
diff --git a/pages/chat/index.vue b/pages/chat/index.vue
new file mode 100644
index 0000000..311d046
--- /dev/null
+++ b/pages/chat/index.vue
@@ -0,0 +1,64 @@
+
+.chat-index
+ .circumscription
+ p Chat 频道列表 {{ chatlist.length }}
+ ul(v-if="chatlist.length")
+ li(v-for="item in chatlist", :key="item._id")
+ p {{ item.name }}
+ button(@click="create") 创建频道
+ .ceremony
+ .circumscription
+ span chat
+ DialogueList(:data="chatactive")
+ textarea.dialogue(v-model="chat.data", rows="12")
+ button.submit(@click="submit") 发表
+
+
+
+
+