遇见
4 years ago
21 changed files with 333 additions and 102 deletions
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
import request from "@/utils/request"; |
||||
|
||||
export function getArticle() { |
||||
return request({ |
||||
url: "/article/list", |
||||
method: "get" |
||||
}); |
||||
} |
||||
|
||||
export function AddArticle(data) { |
||||
return request({ |
||||
url: "/article/create", |
||||
method: "post", |
||||
data |
||||
}); |
||||
} |
@ -1,16 +1,16 @@
@@ -1,16 +1,16 @@
|
||||
import request from '@/utils/request' |
||||
import request from "@/utils/request"; |
||||
|
||||
export function login(data) { |
||||
return request({ |
||||
url: '/user/login', |
||||
method: 'post', |
||||
url: "/user/login", |
||||
method: "post", |
||||
data |
||||
}) |
||||
}); |
||||
} |
||||
|
||||
export function getInfo(token) { |
||||
return request({ |
||||
url: '/user/info', |
||||
method: 'get' |
||||
}) |
||||
url: "/user/info", |
||||
method: "get" |
||||
}); |
||||
} |
||||
|
@ -0,0 +1,38 @@
@@ -0,0 +1,38 @@
|
||||
import { getArticle } from "@/api/article"; |
||||
|
||||
const state = { |
||||
article: [] |
||||
}; |
||||
|
||||
const mutations = { |
||||
SET_ARTICLE: (state, article) => { |
||||
state.article = article; |
||||
} |
||||
}; |
||||
|
||||
// get Article
|
||||
const actions = { |
||||
getArticle({ commit }) { |
||||
return new Promise((resolve, reject) => { |
||||
getArticle() |
||||
.then(response => { |
||||
if (response.error) { |
||||
reject(response.errorMsg); |
||||
} |
||||
|
||||
commit("SET_ARTICLE", response.data); |
||||
resolve(response.data); |
||||
}) |
||||
.catch(error => { |
||||
reject(error); |
||||
}); |
||||
}); |
||||
} |
||||
}; |
||||
|
||||
module.exports = { |
||||
namespaced: true, |
||||
state, |
||||
mutations, |
||||
actions |
||||
}; |
@ -1,97 +1,101 @@
@@ -1,97 +1,101 @@
|
||||
import { login, getInfo } from '@/api/user' |
||||
import { getToken, setToken, removeToken } from '@/utils/auth' |
||||
import { resetRouter } from '@/router' |
||||
import { login, getInfo } from "@/api/user"; |
||||
import { getToken, setToken, removeToken } from "@/utils/auth"; |
||||
import { resetRouter } from "@/router"; |
||||
|
||||
const getDefaultState = () => { |
||||
return { |
||||
token: getToken(), |
||||
name: '', |
||||
avatar: '' |
||||
} |
||||
} |
||||
name: "", |
||||
avatar: "", |
||||
article: {} |
||||
}; |
||||
}; |
||||
|
||||
const state = getDefaultState() |
||||
const state = getDefaultState(); |
||||
|
||||
const mutations = { |
||||
RESET_STATE: (state) => { |
||||
Object.assign(state, getDefaultState()) |
||||
RESET_STATE: state => { |
||||
Object.assign(state, getDefaultState()); |
||||
}, |
||||
SET_TOKEN: (state, token) => { |
||||
state.token = token |
||||
state.token = token; |
||||
}, |
||||
SET_NAME: (state, name) => { |
||||
state.name = name |
||||
state.name = name; |
||||
}, |
||||
SET_AVATAR: (state, avatar) => { |
||||
state.avatar = avatar |
||||
state.avatar = avatar; |
||||
} |
||||
} |
||||
}; |
||||
|
||||
const actions = { |
||||
// user login
|
||||
login({ commit }, userInfo) { |
||||
const { username, password } = userInfo |
||||
const { username, password } = userInfo; |
||||
return new Promise((resolve, reject) => { |
||||
login({ username: username.trim(), password: password }).then(response => { |
||||
const { data } = response |
||||
commit('SET_TOKEN', data.token) |
||||
setToken(data.token) |
||||
resolve() |
||||
}).catch(error => { |
||||
reject(error) |
||||
}) |
||||
}) |
||||
login({ username: username.trim(), password: password }) |
||||
.then(response => { |
||||
const { data } = response; |
||||
commit("SET_TOKEN", data.token); |
||||
setToken(data.token); |
||||
resolve(); |
||||
}) |
||||
.catch(error => { |
||||
reject(error); |
||||
}); |
||||
}); |
||||
}, |
||||
|
||||
// get user info
|
||||
getInfo({ commit, state }) { |
||||
return new Promise((resolve, reject) => { |
||||
getInfo(state.token).then(response => { |
||||
const { data } = response |
||||
getInfo(state.token) |
||||
.then(response => { |
||||
const { data } = response; |
||||
|
||||
if (!data) { |
||||
reject('Verification failed, please Login again.') |
||||
} |
||||
if (!data) { |
||||
reject("Verification failed, please Login again."); |
||||
} |
||||
|
||||
const { name, avatar } = data |
||||
const { username, avatar } = data; |
||||
|
||||
commit('SET_NAME', name) |
||||
commit('SET_AVATAR', avatar) |
||||
resolve(data) |
||||
}).catch(error => { |
||||
reject(error) |
||||
}) |
||||
}) |
||||
commit("SET_NAME", username); |
||||
commit("SET_AVATAR", avatar); |
||||
resolve(data); |
||||
}) |
||||
.catch(error => { |
||||
reject(error); |
||||
}); |
||||
}); |
||||
}, |
||||
|
||||
// user logout
|
||||
logout({ commit, state }) { |
||||
return new Promise((resolve, reject) => { |
||||
try { |
||||
removeToken() |
||||
resetRouter() |
||||
commit('RESET_STATE') |
||||
resolve() |
||||
removeToken(); |
||||
resetRouter(); |
||||
commit("RESET_STATE"); |
||||
resolve(); |
||||
} catch (e) { |
||||
reject(e) |
||||
reject(e); |
||||
} |
||||
}) |
||||
}); |
||||
}, |
||||
|
||||
// remove token
|
||||
resetToken({ commit }) { |
||||
return new Promise(resolve => { |
||||
removeToken() // must remove token first
|
||||
commit('RESET_STATE') |
||||
resolve() |
||||
}) |
||||
removeToken(); // must remove token first
|
||||
commit("RESET_STATE"); |
||||
resolve(); |
||||
}); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
export default { |
||||
namespaced: true, |
||||
state, |
||||
mutations, |
||||
actions |
||||
} |
||||
|
||||
}; |
||||
|
@ -1,9 +1,45 @@
@@ -1,9 +1,45 @@
|
||||
<template> |
||||
<div>ArticleCreate</div> |
||||
<div class="CreateFather"> |
||||
<el-form @submit.native.prevent="createArticle" ref="form" :model="ArticleForm"> |
||||
<el-form-item label="文章名称"> |
||||
<el-input v-model="ArticleForm.title" class="ArticleTitleWidth"></el-input> |
||||
</el-form-item> |
||||
<el-form-item label="文章内容"> |
||||
<el-input type="textarea" v-model="ArticleForm.content" style="width: 90%;"></el-input> |
||||
</el-form-item> |
||||
<el-form-item> |
||||
<el-button type="primary" native-type="submit">立即创建</el-button> |
||||
</el-form-item> |
||||
</el-form> |
||||
</div> |
||||
</template> |
||||
|
||||
<script> |
||||
import { AddArticle } from "@/api/article"; |
||||
|
||||
export default { |
||||
name: 'ArticleCreate' |
||||
} |
||||
name: "ArticleCreate", |
||||
data() { |
||||
return { |
||||
ArticleForm: { |
||||
title: "", |
||||
content: "", |
||||
}, |
||||
}; |
||||
}, |
||||
methods: { |
||||
createArticle() { |
||||
AddArticle(this.ArticleForm); |
||||
}, |
||||
}, |
||||
}; |
||||
</script> |
||||
<style scoped> |
||||
.CreateFather { |
||||
margin: 30px 0px 0px 30px; |
||||
width: 100%; |
||||
} |
||||
.ArticleTitleWidth { |
||||
width: 500px; |
||||
} |
||||
</style> |
@ -1,9 +1,53 @@
@@ -1,9 +1,53 @@
|
||||
<template> |
||||
<div>ArticleList</div> |
||||
<div class="ListFather"> |
||||
<el-table |
||||
:data="ArticleData.filter(data => !search || data.title.toLowerCase().includes(search.toLowerCase()))" |
||||
style="width: 100%"> |
||||
<el-table-column label="文章标题" prop="title"></el-table-column> |
||||
<el-table-column label="文章作者" prop="author"></el-table-column> |
||||
<el-table-column align="right"> |
||||
<template slot="header" slot-scope="scope"> |
||||
<el-input v-model="search" size="mini" placeholder="输入关键字搜索" /> |
||||
</template> |
||||
<template slot-scope="scope"> |
||||
<el-button size="mini" @click="handleEdit(scope.$index, scope.row)">Edit</el-button> |
||||
<el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">Delete</el-button> |
||||
</template> |
||||
</el-table-column> |
||||
</el-table> |
||||
</div> |
||||
</template> |
||||
|
||||
|
||||
<script> |
||||
import { mapGetters } from "vuex"; |
||||
|
||||
export default { |
||||
name: 'ArticleList' |
||||
} |
||||
name: "ArticleList", |
||||
data() { |
||||
return { |
||||
ArticleData: [], |
||||
search: "", |
||||
}; |
||||
}, |
||||
computed: { |
||||
...mapGetters(["article"]), |
||||
}, |
||||
methods: { |
||||
|
||||
handleEdit(index, row) { |
||||
console.log(index, row); |
||||
}, |
||||
handleDelete(index, row) { |
||||
console.log(index, row); |
||||
}, |
||||
}, |
||||
mounted() { |
||||
this.$store.dispatch("article/getArticle").then(() => { |
||||
this.ArticleData = this.article; |
||||
}); |
||||
}, |
||||
}; |
||||
</script> |
||||
<style scoped> |
||||
</style> |
@ -0,0 +1,7 @@
@@ -0,0 +1,7 @@
|
||||
module.exports = { |
||||
host: "host", |
||||
port: "port", |
||||
user: "user", |
||||
password: "password", |
||||
database: "database" |
||||
} |
@ -0,0 +1,59 @@
@@ -0,0 +1,59 @@
|
||||
const config = require("./config"); |
||||
const mysql = require("mysql"); |
||||
const { DebugMode } = require("../utils/constant"); |
||||
const { resolve } = require("path"); |
||||
const { rejects } = require("assert"); |
||||
|
||||
function connect() { |
||||
return mysql.createConnection({ |
||||
host: config.host, |
||||
port: config.port, |
||||
user: config.user, |
||||
password: config.password, |
||||
database: config.database, |
||||
}); |
||||
} |
||||
|
||||
function querySql(sql) { |
||||
DebugMode && console.log("SQL", sql); |
||||
const conn = connect(); |
||||
// 返回Promise对象
|
||||
return new Promise((resolve, rejects) => { |
||||
// try&catch捕捉异常
|
||||
try { |
||||
// 执行sql查询
|
||||
conn.query(sql, (error, results) => { |
||||
if (error) { |
||||
rejects(error); |
||||
} else { |
||||
resolve(results); |
||||
} |
||||
}); |
||||
} catch (e) { |
||||
rejects(e); |
||||
} finally { |
||||
conn.end(); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
function queryOne(sql) { |
||||
return new Promise((resolve, reject) => { |
||||
querySql(sql) |
||||
.then((results) => { |
||||
if (results && results.length > 0) { |
||||
resolve(results[0]); |
||||
} else { |
||||
resolve(null); |
||||
} |
||||
}) |
||||
.catch((err) => { |
||||
reject(err); |
||||
}); |
||||
}); |
||||
} |
||||
|
||||
module.exports = { |
||||
querySql, |
||||
queryOne, |
||||
}; |
@ -0,0 +1,31 @@
@@ -0,0 +1,31 @@
|
||||
const express = require("express"); |
||||
const { GetArticleList, AddArticle } = require("../service/article"); |
||||
const Result = require("../models/Result"); |
||||
|
||||
const router = express.Router(); |
||||
|
||||
router.get("/list", async (req, res) => { |
||||
await GetArticleList().then((ArticleData) => { |
||||
if (ArticleData) { |
||||
new Result(ArticleData, "文章信息查询成功").success(res); |
||||
} else { |
||||
new Result("文章信息查询失败").fail(res); |
||||
} |
||||
}); |
||||
}); |
||||
|
||||
router.post("/create", async (req, res) => { |
||||
if (req.body.title === "" || req.body.content === "") { |
||||
new Result("文章内容不能为空").fail(res); |
||||
} else { |
||||
await AddArticle(req.body.title, req.body.content).then((response) => { |
||||
if (response) { |
||||
new Result("文章插入成功").success(res); |
||||
} else { |
||||
new Result("文章插入失败").fail(res); |
||||
} |
||||
}); |
||||
} |
||||
}); |
||||
|
||||
module.exports = router; |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
const { querySql } = require("../db"); |
||||
|
||||
function GetArticleList() { |
||||
const sql = "SELECT * FROM admin_article"; |
||||
return querySql(sql); |
||||
} |
||||
|
||||
function AddArticle(title, content, author){ |
||||
const sql = `INSERT INTO admin_article VALUES (NULL, '${title}', '${content}', 'YuJian', NULL);` |
||||
return querySql(sql); |
||||
} |
||||
|
||||
module.exports = { |
||||
GetArticleList, |
||||
AddArticle |
||||
}; |
Loading…
Reference in new issue