user login

This commit is contained in:
simple321vip
2022-04-12 23:36:57 +08:00
parent 1c8c8264c2
commit 18da3c57b7
7 changed files with 137 additions and 49 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ const authorize = (params: any) => {
return request({ return request({
url: '/api/vi/authorize', url: '/api/vi/authorize',
method: 'post', method: 'post',
data: {} data: params
}) })
} }
+4 -1
View File
@@ -2,6 +2,7 @@
<div class="nav-main"> <div class="nav-main">
当前时间{{ time }} 当前时间{{ time }}
<span>论一个程序员的寂寞与忧伤</span> <span>论一个程序员的寂寞与忧伤</span>
<span>{{ user.name }}</span>
<el-button icon="open_side" circle></el-button> <el-button icon="open_side" circle></el-button>
<el-dropdown> <el-dropdown>
@@ -12,19 +13,21 @@
<el-dropdown-item>删除</el-dropdown-item> <el-dropdown-item>删除</el-dropdown-item>
</el-dropdown-menu>--> </el-dropdown-menu>-->
</el-dropdown> </el-dropdown>
<span @click="doLogin">登录</span> </div> <span @click="doLogin" v-show="!user.name">登录</span> </div>
</template> </template>
<script setup lang='ts'> <script setup lang='ts'>
import $moment from "moment"; import $moment from "moment";
import { ref } from "vue"; import { ref } from "vue";
import router from '../../router' import router from '../../router'
import { useUserStore } from '../../store/user'
const getTime = () => { const getTime = () => {
return $moment().format("YYYY年MM月DD日 HH:mm:ss"); return $moment().format("YYYY年MM月DD日 HH:mm:ss");
}; };
let time = ref<String>(getTime()); let time = ref<String>(getTime());
const user = useUserStore()
const timeChange = () => { const timeChange = () => {
time.value = getTime(); time.value = getTime();
+46 -12
View File
@@ -1,15 +1,19 @@
<template> <template>
<div class="yuliu"></div> <div class="yuliu"></div>
<el-card class="box-card"> <el-card class="box-card">
<el-form ref="ruleFormRef" :model="userForm" status-icon label-width="120px" class="demo-ruleForm"> <el-form ref="ruleFormRef" :model="loginForm" :rules="loginRules" status-icon label-width="120px"
class="demo-ruleForm">
<div class="title-container">
<h3>私人空间</h3>
</div>
<el-form-item label="用户名" prop="pass"> <el-form-item label="用户名" prop="pass">
<el-input v-model="userForm.user_id" type="password" autocomplete="off" /> <el-input v-model="loginForm.user_id" type="password" autocomplete="off" />
</el-form-item> </el-form-item>
<el-form-item label="用户凭证" prop="checkPass"> <el-form-item label="用户凭证" prop="checkPass">
<el-input v-model="userForm.password" type="password" autocomplete="off" /> <el-input v-model="loginForm.password" type="password" autocomplete="off" />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click="dologin">login</el-button> <el-button type="primary" @click="dologin(ruleFormRef)">login</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
------------------------------------------------------------ ------------------------------------------------------------
@@ -24,23 +28,49 @@
import { reactive, ref } from 'vue' import { reactive, ref } from 'vue'
import type { FormInstance } from 'element-plus' import type { FormInstance } from 'element-plus'
import { authorize } from '../../api/user'; import { authorize } from '../../api/user';
import { useUserStore } from '../../store/user'
import router from '../../router'
const user = useUserStore()
const userForm = reactive({ const ruleFormRef = ref<FormInstance>()
const loginForm = reactive({
user_id: '', user_id: '',
password: '' password: ''
}) })
const validateUserName = (rule: any, value: string, callback: Function) => {
if (!value) {
callback(new Error("请输入的用户名"))
} else {
callback()
}
}
const validatePassword = (rule: any, value: string, callback: Function) => {
if (!value) {
callback(new Error("请输入密码"))
} else {
callback()
}
}
const loginRules = reactive({
user_id: [{ validator: validateUserName, trigger: 'blur' }],
password: [{ validator: validatePassword, trigger: 'blur' }]
})
const dologin = (form: FormInstance | undefined) => {
if (!form) return const dologin = (form: FormInstance) => {
form.validate((valid) => {
if (!form)
return
form.validate((valid: any) => {
if (valid) { if (valid) {
let validForm = { user.login(loginForm.user_id, loginForm.password).then(res => {
} console.log(1)
authorize(validForm).then(response => { router.push({
path: '/home'
})
}) })
} else { } else {
return false return false
} }
@@ -51,6 +81,10 @@ const resetForm = (formEl: FormInstance | undefined) => {
if (!formEl) return if (!formEl) return
formEl.resetFields() formEl.resetFields()
} }
</script> </script>
<style scoped> <style scoped>
.text { .text {
+65
View File
@@ -0,0 +1,65 @@
import { defineStore, acceptHMRUpdate } from 'pinia'
import { authorize } from '../api/user'
import { getToken, setToken, resetToken, setUserInfo } from '../utils/auth'
/**
* Simulate a login
* @param {string} a
* @param {string} p
*/
// function apiLogin(a, p) {
// if (a === 'ed' && p === 'ed') return Promise.resolve({ isAdmin: true })
// if (p === 'ed') return Promise.resolve({ isAdmin: false })
// return Promise.reject(new Error('invalid credentials'))
// }
export const useUserStore = defineStore({
id: 'user',
state: () => ({
name: '',
token: '',
}),
getters: {
},
actions: {
logout() {
this.$patch({
name: '',
token: '',
})
// we could do other stuff like redirecting the user
},
/**
* Attempt to login a user
* @param {string} user_id
* @param {string} user_password
*/
async login(user_id: string, user_password: string) {
const userData = await authorize({ user_id, user_password })
if (userData.data.token) {
this.$patch({
name: user_id,
...userData.data,
})
setToken(userData.data.token)
setUserInfo(userData)
console.log('authorize success!')
}
return new Promise((resolve, reject) => {
if (userData.data.message) {
reject(userData.data.message)
} else {
resolve(userData.data)
}
})
},
},
})
if (import.meta.hot) {
import.meta.hot.accept(acceptHMRUpdate(useUserStore, import.meta.hot))
}
+5 -1
View File
@@ -9,8 +9,12 @@ const setToken = (token: String) => {
Cookies.set('token', token) Cookies.set('token', token)
} }
const setUserInfo = (userinfo: any) => {
Cookies.set('userinfo', userinfo)
}
const resetToken = (token: String) => { const resetToken = (token: String) => {
Cookies.set('token', "") Cookies.set('token', "")
} }
export { getToken, setToken, resetToken } export { getToken, setToken, resetToken, setUserInfo }
+4 -9
View File
@@ -1,22 +1,17 @@
<template> <template>
<div class="blog_list" v-for="item in data_list"> <div class="blog_list" v-for="item in data_list">
<span style="cursor: pointer;" @click="openBlog">{{ item.blog_title }}</span> <h3 style="cursor: pointer;" @click="openBlog">{{ item.blog_title }}</h3>
<span style="font-size: 12px;">{{ item.blog_prex }}</span> <span style="font-size: 12px;">{{ item.blog_prex }}</span> </div>
</div>
<!-- <md-editor v-model="text" previewOnly /> -->
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import MdEditor from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import { reactive, ref } from 'vue'; import { reactive, ref } from 'vue';
import { get_blogs } from '../../api/blog' import { get_blogs } from '../../api/blog'
import router from '../../router/index' import router from '../../router/index'
type Blog = { type Blog = {
blog_id: number, blog_id: String,
blog_type_id: number, blog_type_id: String,
blog_type_name: string, blog_type_name: string,
blog_title: string, blog_title: string,
blog_prex: string blog_prex: string
+12 -25
View File
@@ -12,24 +12,15 @@
</el-col> </el-col>
</el-row> </el-row>
<div class="tag_list"> <div class="tag_list">
<el-tag <el-tag class="ml-2 click-icon" :type="item.clicked ? 'danger' : 'info'" v-for="(item) in bookmark_types"
class="ml-2 click-icon" @click="handleTags(item)">{{ item.bk_type_name }}</el-tag>
:type="item.clicked ? 'danger' : 'info'"
v-for="(item) in bookmark_types"
@click="handleTags(item)"
>{{ item.bk_type_name }}</el-tag>
</div> </div>
</el-form> </el-form>
<div class="create_dialog"> <div class="create_dialog">
<el-button type="primary" @click="handleInsert">新建</el-button> <el-button type="primary" @click="handleInsert">新建</el-button>
</div> </div>
<el-table <el-table ref="multipleTableRef" :data="tableData" @selection-change="handleSelectionChange" style="width: 100%">
ref="multipleTableRef"
:data="tableData"
@selection-change="handleSelectionChange"
style="width: 100%"
>
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column type="index" label="index" width="180" /> <el-table-column type="index" label="index" width="180" />
<el-table-column prop="bk_type_name" label="分类" width="180" /> <el-table-column prop="bk_type_name" label="分类" width="180" />
@@ -55,19 +46,13 @@
</div> </div>
<el-dialog v-model="dialogFormVisible" title="添加书签"> <el-dialog v-model="dialogFormVisible" title="添加书签">
<bookmark_dialog <bookmark_dialog :dialog_form="currentDialogData" :operate_code="operate" :types="bookmark_types"
:dialog_form="currentDialogData" @on-concel="closeDialog" @on-submit="doSubmit"></bookmark_dialog>
:operate_code="operate"
:types="bookmark_types"
@on-concel="closeDialog"
@on-submit="doSubmit"
></bookmark_dialog>
</el-dialog> </el-dialog>
<el-dialog v-model="dialogVisible"> <el-dialog v-model="dialogVisible">
<delete_dialog :delete_id="currentDialogData.bk_id" @on-submit="doDelete"></delete_dialog> <delete_dialog :delete_id="currentDialogData.bk_id" @on-submit="doDelete"></delete_dialog>
</el-dialog> </el-dialog> </div>
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@@ -99,7 +84,7 @@ bookmark_type().then(response => {
// 定义书签格式 // 定义书签格式
type Bookmark = { type Bookmark = {
bk_id: number, bk_id: string,
bk_type_id: number, bk_type_id: number,
bk_type_name: String, bk_type_name: String,
comment: String, comment: String,
@@ -121,7 +106,7 @@ const search_form = reactive<Searchform>({
const tableData = reactive<Bookmark[]>([]) const tableData = reactive<Bookmark[]>([])
// 响应式dialog数据 // 响应式dialog数据
const currentDialogData = reactive<Bookmark>({ const currentDialogData = reactive<Bookmark>({
bk_id: -1, bk_id: "-1",
bk_type_id: 1, bk_type_id: 1,
bk_type_name: '未分类', bk_type_name: '未分类',
comment: '', comment: '',
@@ -150,7 +135,7 @@ let dialogVisible = ref(false)
// 操作-》添加 // 操作-》添加
const handleInsert = () => { const handleInsert = () => {
operate.value = '0' operate.value = '0'
currentDialogData.bk_id = -1 currentDialogData.bk_id = "-1"
currentDialogData.bk_type_id = 1 currentDialogData.bk_type_id = 1
currentDialogData.bk_type_name = '未分类' currentDialogData.bk_type_name = '未分类'
currentDialogData.comment = '' currentDialogData.comment = ''
@@ -190,7 +175,7 @@ const handleSelectionChange = (val: Bookmark[]) => {
} }
const openUrl = (url: string) => { const openUrl = (url: string) => {
window.open("https://www.runoob.com"); window.open(url);
} }
const doSearch = () => { const doSearch = () => {
@@ -243,11 +228,13 @@ const copyNumber = (record: Bookmark) => {
border-top: 1px solid rgba(151, 151, 151, 0.3); border-top: 1px solid rgba(151, 151, 151, 0.3);
border-bottom: 1px solid rgba(151, 151, 151, 0.3); border-bottom: 1px solid rgba(151, 151, 151, 0.3);
} }
.click-icon { .click-icon {
width: 40px; width: 40px;
margin: 10px; margin: 10px;
cursor: pointer; cursor: pointer;
} }
.create_dialog { .create_dialog {
margin: 10px; margin: 10px;
} }