Merge branches 'develop' and 'gva_gormv2_dev' of https://github.com/flipped-aurora/gin-vue-admin into gva_gormv2_dev

This commit is contained in:
QM303176530
2020-12-27 16:47:03 +08:00
29 changed files with 386 additions and 674 deletions
-1
View File
@@ -1 +0,0 @@
[1110/113210.377:ERROR:directory_reader_win.cc(43)] FindFirstFile: 系统找不到指定的路径。 (0x3)
+58 -41
View File
@@ -8846,12 +8846,8 @@
"highlight.js": {
"version": "9.15.10",
"resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.15.10.tgz",
"integrity": "sha1-exjtdckDSMBF7vntCMoTGaIhmtI="
},
"highlight.js-async-webpack": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/highlight.js-async-webpack/-/highlight.js-async-webpack-1.0.4.tgz",
"integrity": "sha1-wGtnv5nwSQRdYrdW5YVbCRLsYWw="
"integrity": "sha1-exjtdckDSMBF7vntCMoTGaIhmtI=",
"dev": true
},
"hmac-drbg": {
"version": "1.0.1",
@@ -10230,15 +10226,6 @@
"object-visit": "^1.0.0"
}
},
"mavon-editor": {
"version": "2.7.7",
"resolved": "https://registry.npmjs.org/mavon-editor/-/mavon-editor-2.7.7.tgz",
"integrity": "sha512-lXnYe+dztKepbv8bi2nedRqG/AwyUDF8gmkv9lHD3fpVJ1+pzAS6YILRIryKCvO9qPIOPEThHsda2DxtlzRsZA==",
"requires": {
"highlight.js": "^9.11.0",
"highlight.js-async-webpack": "^1.0.4"
}
},
"md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -10929,6 +10916,12 @@
"resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"numericjs": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/numericjs/-/numericjs-1.2.6.tgz",
"integrity": "sha1-wNryXEvLIuBDv4NEP5856LM2eYs=",
"dev": true
},
"oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
@@ -12443,6 +12436,53 @@
"unpipe": "1.0.0"
}
},
"raw-loader": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-3.1.0.tgz",
"integrity": "sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA==",
"dev": true,
"requires": {
"loader-utils": "^1.1.0",
"schema-utils": "^2.0.1"
},
"dependencies": {
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
"integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
"dev": true
},
"fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
},
"schema-utils": {
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
"integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
"dev": true,
"requires": {
"@types/json-schema": "^7.0.5",
"ajv": "^6.12.4",
"ajv-keywords": "^3.5.2"
}
}
}
},
"read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz",
@@ -14898,9 +14938,9 @@
}
},
"vue-loader-v16": {
"version": "npm:vue-loader@16.0.0-beta.9",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.0.0-beta.9.tgz",
"integrity": "sha512-mu9pg6554GbXDSO8LlxkQM6qUJzUkb/A0FJc9LgRqnU9MCnhzEXwCt1Zx5NObvFpzs2mH2dH/uUCDwL8Qaz9sA==",
"version": "npm:vue-loader@16.1.1",
"resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.1.tgz",
"integrity": "sha512-wz/+HFg/3SBayHWAlZXARcnDTl3VOChrfW9YnxvAweiuyKX/7IGx1ad/4yJHmwhgWlOVYMAbTiI7GV8G33PfGQ==",
"dev": true,
"optional": true,
"requires": {
@@ -14993,15 +15033,6 @@
"vue": "^2.5.21"
}
},
"vue-quill-editor": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/vue-quill-editor/-/vue-quill-editor-3.0.6.tgz",
"integrity": "sha512-g20oSZNWg8Hbu41Kinjd55e235qVWPLfg4NvsLW6d+DhgBTFbEuMpcWlUdrD6qT3+Noim6DRu18VLM9lVShXOQ==",
"requires": {
"object-assign": "^4.1.1",
"quill": "^1.3.4"
}
},
"vue-router": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.1.3.tgz",
@@ -15532,20 +15563,6 @@
"integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
"dev": true
},
"wfd-gva": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/wfd-gva/-/wfd-gva-1.0.4.tgz",
"integrity": "sha512-m08qHdhUFUbj7IzJWOoxhN9VAJKzx/QbkTi+XXIHrX24UGovy4XvwmOrWrna+3rHkq60xszHMy1U/MQflNCPlA==",
"requires": {
"@antv/dom-util": "2.0.2",
"@antv/g-canvas": "^0.4.12",
"@antv/g6": "3.5.2",
"@antv/matrix-util": "2.0.7",
"@antv/util": "~2.0.9",
"element-ui": "2.12.0",
"vue": "^2.6.10"
}
},
"which": {
"version": "1.3.1",
"resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz",
-2
View File
@@ -13,7 +13,6 @@
"core-js": "^3.6.5",
"echarts": "^4.7.0",
"element-ui": "^2.12.0",
"mavon-editor": "^2.7.7",
"node-sass": "^4.14.1",
"path": "^0.12.7",
"qs": "^6.8.0",
@@ -25,7 +24,6 @@
"timeline-vuejs": "1.1.1",
"vue": "^2.6.10",
"vue-particle-line": "^0.1.4",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.1.3",
"vue-simple-uploader": "^0.7.4",
"vuescroll": "^4.14.4",
-19
View File
@@ -9,28 +9,9 @@ Vue.use(ElementUI);
// 引入封装的router
import router from '@/router/index'
// canvas背景插件
import vueParticleLine from 'vue-particle-line'
import 'vue-particle-line/dist/vue-particle-line.css'
Vue.use(vueParticleLine)
// time line css
import '../node_modules/timeline-vuejs/dist/timeline-vuejs.css'
// 富文本插件
import VueQuillEditor from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
Vue.use(VueQuillEditor)
// markdown插件
import mavonEditor from 'mavon-editor'
import 'mavon-editor/dist/css/index.css'
Vue.use(mavonEditor)
import '@/permission'
import { store } from '@/store/index'
Vue.config.productionTip = false
+3
View File
@@ -1,5 +1,6 @@
import router from './router'
import { store } from '@/store/index'
import getPageTitle from '@/utils/page'
let asyncRouterFlag = 0
@@ -8,6 +9,8 @@ const whiteList = ['login']
router.beforeEach(async(to, from, next) => {
const token = store.getters['user/token']
// 在白名单中的判断情况
//修改网页标签名称
document.title = getPageTitle(to.meta.title)
if (whiteList.indexOf(to.name) > -1) {
if (token) {
next({ path: '/layout/dashboard' })
+1
View File
@@ -46,6 +46,7 @@ export const user = {
} else {
router.push({ path: '/layout/dashboard' })
}
return true
}
},
async LoginOut({ commit }) {
+8
View File
@@ -0,0 +1,8 @@
const title = 'GIN-VUE-ADMIN'
export default function getPageTitle(pageTitle) {
if (pageTitle) {
return `${pageTitle} - ${title}`
}
return `${title}`
}
-187
View File
@@ -1,187 +0,0 @@
<template>
<div>
<el-form :model="form" label-width="80px" ref="form">
<el-row>
<el-col :span="3" :xs="6"><label for="">活动名称</label></el-col>
<el-col :span="10" :xs="14"><el-input v-model="form.name"></el-input></el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">活动区域</label></el-col>
<el-col :span="10" :xs="14">
<el-select placeholder="请选择活动区域" v-model="form.region">
<el-option label="上海" value="shanghai"></el-option>
<el-option label="北京" value="beijing"></el-option>
</el-select>
</el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">活动时间</label></el-col>
<el-col :span="10" :xs="18">
<el-col :span="11">
<el-date-picker placeholder="选择日期" style="width: 100%;" type="date" v-model="form.date1"></el-date-picker>
</el-col>
<el-col :span="2" class="line"></el-col>
<el-col :span="11">
<el-time-picker placeholder="选择时间" style="width: 100%;" v-model="form.date2"></el-time-picker>
</el-col>
</el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">即时配送</label></el-col>
<el-col :span="10" :xs="14"><el-switch v-model="form.delivery"></el-switch></el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">活动性质</label></el-col>
<el-col :span="10" :xs="14">
<el-checkbox-group v-model="form.type">
<el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
<el-checkbox label="地推活动" name="type"></el-checkbox>
<el-checkbox label="线下主题活动" name="type"></el-checkbox>
<el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
</el-checkbox-group>
</el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">特殊资源</label></el-col>
<el-col :span="10" :xs="14">
<el-radio-group v-model="form.resource">
<el-radio label="线上品牌商赞助"></el-radio>
<el-radio label="线下场地免费"></el-radio>
</el-radio-group>
</el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">活动形式</label></el-col>
<el-col :span="10" :xs="14"><el-input type="textarea" v-model="form.desc"></el-input></el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">穿梭框</label></el-col>
<el-col :span="20" :xs="24">
<el-transfer
:data="data"
:filter-method="filterMethod"
filter-placeholder="请输入城市拼音"
filterable
v-model="value"
></el-transfer>
</el-col>
</el-row>
<el-row>
<el-col :span="3" :xs="6"><label for="">活动时间</label></el-col>
<el-col :span="10"><el-input v-model="form.name"></el-input></el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="13">
<el-button @click="onSubmit" type="primary">立即创建</el-button>
<el-button>取消</el-button>
</el-col>
</el-row>
<!-- <el-form-item label="活动名称">
<el-input v-model="form.name"></el-input>
</el-form-item>
<el-form-item>
<el-select label="活动区域" placeholder="请选择活动区域" v-model="form.region">
<el-option label="上海" value="shanghai"></el-option>
<el-option label="北京" value="beijing"></el-option>
</el-select>
</el-form-item>
<el-form-item label="活动时间">
<el-col :span="11">
<el-date-picker placeholder="选择日期" style="width: 100%;" type="date" v-model="form.date1"></el-date-picker>
</el-col>
<el-col :span="2" class="line" style="text-align: center"></el-col>
<el-col :span="11">
<el-time-picker placeholder="选择时间" style="width: 100%;" v-model="form.date2"></el-time-picker>
</el-col>
</el-form-item>
<el-form-item label="即时配送">
<el-switch v-model="form.delivery"></el-switch>
</el-form-item>
<el-form-item label="活动性质">
<el-checkbox-group v-model="form.type">
<el-checkbox label="美食/餐厅线上活动" name="type"></el-checkbox>
<el-checkbox label="地推活动" name="type"></el-checkbox>
<el-checkbox label="线下主题活动" name="type"></el-checkbox>
<el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="特殊资源">
<el-radio-group v-model="form.resource">
<el-radio label="线上品牌商赞助"></el-radio>
<el-radio label="线下场地免费"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="活动形式">
<el-input type="textarea" v-model="form.desc"></el-input>
</el-form-item>
<el-form-item label="穿梭框">
<el-transfer
:data="data"
:filter-method="filterMethod"
filter-placeholder="请输入城市拼音"
filterable
v-model="value"
></el-transfer>
</el-form-item>
<el-form-item>
<el-button @click="onSubmit" type="primary">立即创建</el-button>
<el-button>取消</el-button>
</el-form-item> -->
</el-form>
</div>
</template>
<script>
export default {
data() {
const generateData = () => {
const data = []
const cities = ['上海', '北京', '广州', '深圳', '南京', '西安', '成都']
const pinyin = [
'shanghai',
'beijing',
'guangzhou',
'shenzhen',
'nanjing',
'xian',
'chengdu'
]
cities.forEach((city, index) => {
data.push({
label: city,
key: index,
pinyin: pinyin[index]
})
})
return data
}
return {
form: {
name: '',
region: '',
date1: '',
date2: '',
delivery: false,
type: [],
resource: '',
desc: ''
},
data: generateData(),
value: [],
}
},
methods: {
filterMethod(query, item) {
return item.pinyin.indexOf(query) > -1
},
onSubmit() {
this.$message({
message: '创建成功',
type: 'success'
})
}
}
}
</script>
-53
View File
@@ -1,53 +0,0 @@
<template>
<div>
<h1>富文本编辑器</h1>
<div class="edit_container">
<quill-editor
:options="editorOption"
@blur="onEditorBlur($event)"
@change="onEditorChange($event)"
@focus="onEditorFocus($event)"
ref="myQuillEditor"
v-model="content"
></quill-editor>
<el-button plain @click="saveHtml">保存</el-button>
</div>
<h1>markdown编辑器</h1>
<div class="edit">
<mavon-editor v-model="model.content"></mavon-editor>
<el-button type="primary" size="small" @click="submit">发表</el-button>
</div>
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
content: `<p>hello world</p>`,
editorOption: {},
model:{
content:''
}
}
},
computed: {
editor() {
return this.$refs.myQuillEditor.quill
}
},
methods: {
// onEditorReady(editor) { // 准备编辑器
// },
onEditorBlur() {}, // 失去焦点事件
onEditorFocus() {}, // 获得焦点事件
onEditorChange() {}, // 内容改变事件
saveHtml() {
console.log(this.content)
}, // 保存方法
submit(){}
}
}
</script>
-115
View File
@@ -1,115 +0,0 @@
// table 纯前端示例
<template>
<div>
<el-table
:data="tableData"
@selection-change="handleSelectionChange"
border
ref="multipleTable"
stripe
style="width: 100%"
tooltip-effect="dark"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="日期" width="120">
<template slot-scope="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column label="姓名" prop="name" width="120"></el-table-column>
<el-table-column label="年龄" prop="age" width="120"></el-table-column>
<el-table-column label="住址" prop="address" min-width="200" show-overflow-tooltip></el-table-column>
<el-table-column label="是否禁用" prop="switch" width="180">
<template slot-scope="scope">
<el-switch active-text="开启" inactive-text="禁用" v-model="scope.row.switch"></el-switch>
</template>
</el-table-column>
<el-table-column label="按钮组" width="200">
<template slot-scope="scope" >
<el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮1</el-button>
<el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮2</el-button>
<el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮3</el-button>
</template>
</el-table-column>
</el-table>
<div style="margin-top: 20px">
<el-button @click="toggleSelection([tableData[1], tableData[2]])">切换第二第三行的选中状态</el-button>
<el-button @click="toggleSelection()">取消选择</el-button>
</div>
</div>
</template>
<script>
export default {
name: 'Table',
data() {
return {
tableData: [
{
date: '2016-05-03',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:true
},
{
date: '2016-05-02',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:true
},
{
date: '2016-05-04',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:true
},
{
date: '2016-05-01',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:false
},
{
date: '2016-05-08',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:true
},
{
date: '2016-05-06',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:true
},
{
date: '2016-05-07',
name: '王小虎',
age: 12,
address: '上海市普陀区金沙江路 1518 弄',
switch:false
}
],
multipleSelection: []
}
},
methods: {
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row)
})
} else {
this.$refs.multipleTable.clearSelection()
}
},
handleSelectionChange(val) {
this.multipleSelection = val
}
}
}
</script>
+13 -19
View File
@@ -20,14 +20,9 @@
@keyup.enter.native="submitForm"
>
<el-form-item prop="username">
<el-input
placeholder="请输入用户名"
v-model="loginForm.username"
>
<i
class="el-input__icon el-icon-user"
slot="suffix"
></i></el-input>
<el-input placeholder="请输入用户名" v-model="loginForm.username">
<i class="el-input__icon el-icon-user" slot="suffix"></i
></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
@@ -42,12 +37,12 @@
></i>
</el-input>
</el-form-item>
<el-form-item style="position:relative">
<el-form-item style="position: relative">
<el-input
v-model="loginForm.captcha"
name="logVerify"
placeholder="请输入验证码"
style="width:60%"
style="width: 60%"
/>
<div class="vPic">
<img
@@ -61,7 +56,7 @@
</div>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm" style="width:100%"
<el-button type="primary" @click="submitForm" style="width: 100%"
> </el-button
>
</el-form-item>
@@ -83,9 +78,7 @@
><img src="@/assets/video.png" class="link-icon"
/></a>
</div>
<div class="copyright">
Copyright &copy; {{ curYear }} 💖flipped-aurora
</div>
<div class="copyright">Copyright &copy; {{ curYear }} 💖flipped-aurora</div>
</div>
</div>
</div>
@@ -135,13 +128,15 @@ export default {
methods: {
...mapActions("user", ["LoginIn"]),
async login() {
await this.LoginIn(this.loginForm);
return await this.LoginIn(this.loginForm);
},
async submitForm() {
this.$refs.loginForm.validate(async (v) => {
if (v) {
this.login();
this.loginVefify();
const flag = await this.login();
if (!flag) {
this.loginVefify();
}
} else {
this.$message({
type: "error",
@@ -167,6 +162,5 @@ export default {
</script>
<style scoped lang="scss">
@import '@/style/login.scss';
@import "@/style/login.scss";
</style>
+29 -11
View File
@@ -4,13 +4,11 @@
<el-col :span="6">
<div class="fl-left avatar-box">
<div class="user-card">
<el-avatar
class="user-avatar"
:size="160"
:src="userInfo.headerImg"
shape="square"
@click.native="openChooseImg"
></el-avatar>
<div class="user-headpic-update" :style="{ 'background-image': 'url(' + userInfo.headerImg + ')','background-repeat':'no-repeat','background-size':'cover' }" >
<span class="update" @click="openChooseImg">
<i class="el-icon-edit"></i>
重新上传</span>
</div>
<div class="user-personality">
<p class="nickname">{{userInfo.nickName}}</p>
<p class="person-info">这个家伙很懒什么都没有留下</p>
@@ -18,7 +16,7 @@
<div class="user-information">
<ul>
<li>
<i class="el-icon-user"></i>资深前端工程师
<i class="el-icon-user"></i>{{userInfo.nickName}}
</li>
<li>
<i class="el-icon-data-analysis"></i>北京反转极光科技有限公司-技术部-前端事业群
@@ -216,9 +214,6 @@ export default {
box-shadow: -2px 0 20px -16px;
width: 80%;
height: 100%;
.user-avatar{
cursor: pointer;
}
.user-card {
min-height: calc(90vh - 200px);
padding: 30px 20px;
@@ -282,4 +277,27 @@ export default {
}
}
}
.user-headpic-update{
width: 120px;
height: 120px;
line-height: 120px;
margin: 0 auto;
display: flex;
justify-content: center;
border-radius: 20px;
&:hover{
color: #fff;
background: linear-gradient(to bottom, rgba(255,255,255,0.15) 0%, rgba(0,0,0,0.15) 100%), radial-gradient(at top center, rgba(255,255,255,0.40) 0%, rgba(0,0,0,0.40) 120%) #989898;
background-blend-mode: multiply,multiply;
.update{
color:#fff ;
}
}
.update{
height: 120px;
width: 120px;
text-align: center;
color:transparent;
}
}
</style>
-1
View File
@@ -69,7 +69,6 @@
</el-form-item>
<el-form-item label="用户角色" label-width="80px" prop="authorityId">
<el-cascader
@change="changeAuthority(scope.row)"
v-model="userInfo.authorityId"
:options="authOptions"
:show-all-levels="false"