初始化
This commit is contained in:
+23
@@ -0,0 +1,23 @@
|
|||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
/dist
|
||||||
|
|
||||||
|
|
||||||
|
# local env files
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Log files
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# a
|
||||||
|
|
||||||
|
## Project setup
|
||||||
|
```
|
||||||
|
yarn install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and hot-reloads for development
|
||||||
|
```
|
||||||
|
yarn serve
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and minifies for production
|
||||||
|
```
|
||||||
|
yarn build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customize configuration
|
||||||
|
See [Configuration Reference](https://cli.vuejs.org/config/).
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: [
|
||||||
|
'@vue/cli-plugin-babel/preset'
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"name": "a",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"serve": "vue-cli-service serve",
|
||||||
|
"build": "vue-cli-service build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"copy-webpack-plugin": "^11.0.0",
|
||||||
|
"core-js": "^3.6.5",
|
||||||
|
"element-themex": "^1.0.3",
|
||||||
|
"element-ui": "^2.15.9",
|
||||||
|
"glob": "^8.0.3",
|
||||||
|
"lemon-imui": "^1.7.4",
|
||||||
|
"less": "^4.1.3",
|
||||||
|
"less-loader": "5.0.0",
|
||||||
|
"node-sass": "^7.0.1",
|
||||||
|
"path": "^0.12.7",
|
||||||
|
"socket.io-client": "^4.5.1",
|
||||||
|
"vue": "^2.6.11",
|
||||||
|
"vue-router": "3",
|
||||||
|
"vue-socket.io": "^3.0.10",
|
||||||
|
"vuex": "3",
|
||||||
|
"xe-utils": "^3.5.4"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vue/cli-plugin-babel": "~4.5.10",
|
||||||
|
"@vue/cli-service": "~4.5.10",
|
||||||
|
"element-theme-chalk": "^2.15.9",
|
||||||
|
"sass": "^1.26.5",
|
||||||
|
"sass-loader": "^8.0.2",
|
||||||
|
"vue-template-compiler": "^2.6.11"
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"> 1%",
|
||||||
|
"last 2 versions",
|
||||||
|
"not dead"
|
||||||
|
]
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.2 KiB |
@@ -0,0 +1,17 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||||
|
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<noscript>
|
||||||
|
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
|
||||||
|
</noscript>
|
||||||
|
<div id="app"></div>
|
||||||
|
<!-- built files will be auto injected -->
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
@@ -0,0 +1 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1657141512134" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13861" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M467.387733 96.768L142.574933 383.317333a68.266667 68.266667 0 0 0-23.108266 51.2V887.466667a68.266667 68.266667 0 0 0 68.266666 68.266666h648.533334a68.266667 68.266667 0 0 0 68.266666-68.266666V434.466133a68.266667 68.266667 0 0 0-23.022933-51.114666L557.789867 96.836267a68.266667 68.266667 0 0 0-90.402134-0.085334zM187.733333 434.517333L512.546133 147.933867 836.266667 434.466133V887.466667H187.733333V434.517333z" fill="#444444" p-id="13862"></path><path d="M546.133333 597.333333v221.866667h-68.266666V597.333333a34.133333 34.133333 0 1 1 68.266666 0z" fill="#00B386" p-id="13863"></path></svg>
|
||||||
|
After Width: | Height: | Size: 978 B |
+20
@@ -0,0 +1,20 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<container></container>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import container from '@/components/container/index.vue'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'App',
|
||||||
|
components: {
|
||||||
|
container
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
@import 'assets/app.less';
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
@import "global";
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.router-link-active {
|
||||||
|
text-decoration: none;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
@@ -0,0 +1,225 @@
|
|||||||
|
//封装一些常用样式
|
||||||
|
@text: #303133;
|
||||||
|
|
||||||
|
//靠右
|
||||||
|
.f-r {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
//靠左
|
||||||
|
.f-l {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
//垂直居中
|
||||||
|
.f-c {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内容居中
|
||||||
|
.t-c {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内容居右
|
||||||
|
.t-r {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内容居左
|
||||||
|
.t-l {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
//图标:小
|
||||||
|
.i-s {
|
||||||
|
width: 18px;
|
||||||
|
height: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//图标:小+
|
||||||
|
.i-x {
|
||||||
|
width: 28px;
|
||||||
|
height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//图标:中
|
||||||
|
.i-m {
|
||||||
|
width: 38px;
|
||||||
|
height: 38px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//图标:大
|
||||||
|
.i-l {
|
||||||
|
width: 48px;
|
||||||
|
height: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内间距:小
|
||||||
|
.p-s {
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-top-s {
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-left-s {
|
||||||
|
padding-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-right-s {
|
||||||
|
padding-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-bottom-s {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内间距:小+
|
||||||
|
.p-x {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-top-x {
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-left-x {
|
||||||
|
padding-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-right-x {
|
||||||
|
padding-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-bottom-x {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内间距:中
|
||||||
|
.p-m {
|
||||||
|
padding: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-top-m {
|
||||||
|
padding-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-left-m {
|
||||||
|
padding-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-right-m {
|
||||||
|
padding-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-bottom-m {
|
||||||
|
padding-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//内间距:大
|
||||||
|
.p-l {
|
||||||
|
padding: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-top-l {
|
||||||
|
padding-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-left-l {
|
||||||
|
padding-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-right-l {
|
||||||
|
padding-right: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.p-bottom-l {
|
||||||
|
padding-bottom: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//外间距:小
|
||||||
|
.m-s {
|
||||||
|
margin: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-top-s {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-left-s {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-right-s {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-bottom-s {
|
||||||
|
padding-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//外间距:小+
|
||||||
|
.m-x {
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-top-x {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-left-x {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-right-x {
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-bottom-x {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//外间距:中
|
||||||
|
.m-m {
|
||||||
|
margin: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-top-m {
|
||||||
|
margin-top: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-left-m {
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-right-m {
|
||||||
|
margin-right: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-bottom-m {
|
||||||
|
padding-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
//外间距:大
|
||||||
|
.m-l {
|
||||||
|
margin: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-top-l {
|
||||||
|
margin-top: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-left-l {
|
||||||
|
margin-left: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-right-l {
|
||||||
|
margin-right: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.m-bottom-l {
|
||||||
|
padding-bottom: 40px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
<template>
|
||||||
|
<el-menu
|
||||||
|
class="el-menu-vertical-demo"
|
||||||
|
default-active="navDataIndex0"
|
||||||
|
:router="true"
|
||||||
|
:default-active="$route.path"
|
||||||
|
@open="handleOpen"
|
||||||
|
@close="handleClose">
|
||||||
|
<div v-for="(route,index) in routes" :key="'route'+index">
|
||||||
|
<el-menu-item v-for="(navData,navDataIndex) in route" :index="navData.path" :route="{path: navData.path}" v-if="!index">
|
||||||
|
<!--目录-->
|
||||||
|
<template slot="title">
|
||||||
|
<img class="i-s m-right-s" :src="navData.navigate.icon"/>
|
||||||
|
<span>{{ navData.navigate.name }}</span>
|
||||||
|
</template>
|
||||||
|
</el-menu-item>
|
||||||
|
<!--二级分组目录-->
|
||||||
|
<el-submenu :index="'submenu'+index" v-if="index">
|
||||||
|
<template slot="title">
|
||||||
|
<span>{{ index }}</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item v-for="(navData,navDataIndex) in route" :route="{path: navData.path}" :index="navData.path">
|
||||||
|
<img class="i-s m-right-s" :src="navData.navigate.icon"/>
|
||||||
|
<span>{{ navData.navigate.name }}</span>
|
||||||
|
</el-menu-item>
|
||||||
|
|
||||||
|
</el-submenu>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-menu>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
isCollapse: false,
|
||||||
|
$route : this.$route,
|
||||||
|
routes : []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
let routes = this.$router.options.routes.map(item => {
|
||||||
|
return {
|
||||||
|
path : item.path,
|
||||||
|
navigate: item.component.navigate,
|
||||||
|
...item.component.navigate,
|
||||||
|
}
|
||||||
|
}).filter(item => !item.notShow)
|
||||||
|
routes = this.$xe.orderBy(routes, [['index', 'desc']])//排序
|
||||||
|
routes = this.$xe.groupBy(routes, 'group') //分组
|
||||||
|
this.routes = routes
|
||||||
|
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {
|
||||||
|
handleOpen(key, keyPath) {
|
||||||
|
console.log(key, keyPath);
|
||||||
|
},
|
||||||
|
handleClose(key, keyPath) {
|
||||||
|
console.log(key, keyPath);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.el-menu-vertical-demo:not(.el-menu--collapse) {
|
||||||
|
width: 200px;
|
||||||
|
/*min-height: 400px;*/
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<template>
|
||||||
|
<div class="footer">
|
||||||
|
<el-divider />
|
||||||
|
<el-button type="primary">Primary</el-button>
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
<template>
|
||||||
|
<el-menu
|
||||||
|
:default-active="activeIndex"
|
||||||
|
class="el-menu-demo"
|
||||||
|
mode="horizontal"
|
||||||
|
:ellipsis="false"
|
||||||
|
>
|
||||||
|
<img src="http://iph.href.lu/200x100?text=LOGO&fg=666666&bg=cccccc" style="height: 38px;">
|
||||||
|
<!-- <div class="flex-grow"/>-->
|
||||||
|
<div class="" class="f-r">
|
||||||
|
<el-dropdown>
|
||||||
|
<span class="el-dropdown-link">
|
||||||
|
<el-avatar> U </el-avatar>
|
||||||
|
<span class="f-r" style="line-height: 40px">User Name</span>
|
||||||
|
<el-icon class="el-icon--right">
|
||||||
|
<arrow-down/>
|
||||||
|
</el-icon>
|
||||||
|
</span>
|
||||||
|
<template slot="dropdown">
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item>Action 1</el-dropdown-item>
|
||||||
|
<el-dropdown-item>Action 2</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</el-menu>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeIndex: '1',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="css">
|
||||||
|
.flex-grow {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-menu-demo {
|
||||||
|
height: 58px;
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
<!--
|
||||||
|
* @module 页面布局
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/29 01:47
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div class="common-layout">
|
||||||
|
<el-container>
|
||||||
|
<el-container>
|
||||||
|
<el-aside width="200px"><myaside></myaside></el-aside>
|
||||||
|
<el-container>
|
||||||
|
<el-header><myheader></myheader></el-header>
|
||||||
|
<el-main>
|
||||||
|
<mymain></mymain>
|
||||||
|
</el-main>
|
||||||
|
</el-container>
|
||||||
|
</el-container>
|
||||||
|
<el-divider direction="vertical" class="dashed"/>
|
||||||
|
<el-aside class="mylaside">
|
||||||
|
<mylaside></mylaside>
|
||||||
|
</el-aside>
|
||||||
|
</el-container>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import myheader from './header.vue'
|
||||||
|
import myaside from './aside.vue'
|
||||||
|
import mylaside from './laside.vue'
|
||||||
|
import mymain from './main.vue'
|
||||||
|
import myfooter from './footer.vue'
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {
|
||||||
|
myheader,
|
||||||
|
mymain,
|
||||||
|
myfooter,
|
||||||
|
mylaside,
|
||||||
|
myaside
|
||||||
|
},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.mylaside{
|
||||||
|
width: 375px;
|
||||||
|
}
|
||||||
|
.dashed{
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
<template>
|
||||||
|
<div class="laside">
|
||||||
|
<el-tabs v-model="activeName" class="demo-tabs" tab-position="right">
|
||||||
|
<div style="position: absolute;left: 0px;top: 50%;color: #409EFF">
|
||||||
|
<el-tooltip
|
||||||
|
class="box-item"
|
||||||
|
effect="light"
|
||||||
|
content="收起"
|
||||||
|
placement="right"
|
||||||
|
>
|
||||||
|
<el-icon>
|
||||||
|
<DArrowRight/>
|
||||||
|
</el-icon>
|
||||||
|
</el-tooltip>
|
||||||
|
</div>
|
||||||
|
<el-tab-pane v-for="(data,index) in lasideData" :label="data.label" :name="data.name" :key="'lasideData'+index">
|
||||||
|
<component :is="data.components"></component>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import lasideData from '@/components/laside/index.js'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
activeName: '',
|
||||||
|
lasideData: lasideData,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
this.activeName = this.lasideData[0].name
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.laside {
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-tabs {
|
||||||
|
//background-color: #f4f4f5;
|
||||||
|
height: calc(100vh - 58px);
|
||||||
|
padding-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.simple-data {
|
||||||
|
height: 58px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tab-pane {
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tabs--card {
|
||||||
|
height: 100vh;
|
||||||
|
/* overflow-y: auto; */
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-tab-pane {
|
||||||
|
height: 100vh;
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* container
|
||||||
|
* @module 组件存放位置
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/29 01:51
|
||||||
|
* @param {Object} [title] - 参数说明
|
||||||
|
* @param {String} [columns] - 参数说明
|
||||||
|
* @example 调用示例
|
||||||
|
* <hh></hh>
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<router-view />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,292 @@
|
|||||||
|
export default [
|
||||||
|
{
|
||||||
|
label: "表情",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: "1f600",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f600.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f62c",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f62c.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f601",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f601.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f602",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f602.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f923",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f923.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f973",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f973.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f603",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f603.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f604",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f604.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f605",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f605.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f606",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f606.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f607",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f607.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f609",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f609.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60a",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60a.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f642",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f642.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f643",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f643.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1263a",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/263a.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60b",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60b.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60c",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60c.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60d",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60d.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f970",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f970.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f618",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f618.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f617",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f617.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f619",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f619.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61a",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61a.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61c",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61c.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f92a",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f92a.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f928",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f928.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f9d0",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f9d0.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61d",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61d.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61b",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61b.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f911",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f911.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f913",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f913.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60e",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60e.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f929",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f929.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f921",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f921.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f920",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f920.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f917",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f917.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f60f",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f60f.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f636",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f636.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f610",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f610.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f611",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f611.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f612",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f612.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f644",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f644.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f914",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f914.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f925",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f925.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f92d",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f92d.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f92b",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f92b.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f92c",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f92c.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f92f",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f92f.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f633",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f633.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61e",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61e.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f61f",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f61f.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f620",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f620.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f621",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f621.png",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "收藏",
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
name: "1f62c",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f62c.png",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "1f621",
|
||||||
|
title: "微笑",
|
||||||
|
src: "https://twemoji.maxcdn.com/2/72x72/1f621.png",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<lemon-imui
|
||||||
|
:user='this.user'
|
||||||
|
ref='IMUI'
|
||||||
|
@pull-messages='handlePullMessages'
|
||||||
|
@send="handleSend"
|
||||||
|
></lemon-imui>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import emoji from './emoji'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "index",
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
user: {id: 1, displayName: 'June', avatar: ''}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
this.init()
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {
|
||||||
|
init() {
|
||||||
|
// 初始化联系人数据
|
||||||
|
const {IMUI} = this.$refs;
|
||||||
|
//初始化表情包。
|
||||||
|
IMUI.initEmoji(emoji);
|
||||||
|
//从后端请求联系人数据,包装成下面的样子
|
||||||
|
const contacts = [{
|
||||||
|
id : 2,
|
||||||
|
displayName: '丽安娜',
|
||||||
|
avatar : '',
|
||||||
|
index : 'L',
|
||||||
|
unread : 0,
|
||||||
|
//最近一条消息的内容,如果值为空,不会出现在“聊天”列表里面。
|
||||||
|
//lastContentRender 函数会将 file 消息转换为 '[文件]', image 消息转换为 '[图片]',对 text 会将文字里的表情标识替换为img标签,
|
||||||
|
lastContent: IMUI.lastContentRender({type: 'text', content: '你在干嘛呢?'}),
|
||||||
|
//最近一条消息的发送时间
|
||||||
|
lastSendTime: 1566047865417,
|
||||||
|
}];
|
||||||
|
IMUI.initContacts(contacts);
|
||||||
|
},
|
||||||
|
//拉取消息列表
|
||||||
|
handlePullMessages(contact, next) {
|
||||||
|
//从后端请求消息数据,包装成下面的样子
|
||||||
|
const messages = [{
|
||||||
|
id : '唯一消息ID',
|
||||||
|
status : 'succeed',
|
||||||
|
type : 'text',
|
||||||
|
sendTime : 1566047865417,
|
||||||
|
content : '你什么才能对接完?',
|
||||||
|
toContactId: contact.id,
|
||||||
|
fromUser : this.user
|
||||||
|
}]
|
||||||
|
//将第二个参数设为true,表示已到末尾,聊天窗口顶部会显示“暂无更多消息”,不然会一直转圈。
|
||||||
|
next(messages, true);
|
||||||
|
},
|
||||||
|
//发送消息
|
||||||
|
handleSend(message, next, file) {
|
||||||
|
// ... 调用你的消息发送业务接口
|
||||||
|
|
||||||
|
//执行到next消息会停止转圈,如果接口调用失败,可以修改消息的状态 next({status:'failed'});
|
||||||
|
next();
|
||||||
|
},
|
||||||
|
//接收消息
|
||||||
|
|
||||||
|
},
|
||||||
|
sockets: {
|
||||||
|
open(data) {
|
||||||
|
console.log('open连接成功', data)
|
||||||
|
this.$socket.emit('joinRoom', {
|
||||||
|
"room_name": '123',
|
||||||
|
"uid": '123',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error(data){
|
||||||
|
console.log('错误', data)
|
||||||
|
},
|
||||||
|
success(data){
|
||||||
|
console.log('成功', data)
|
||||||
|
},
|
||||||
|
connect() {
|
||||||
|
console.log('连接成功')
|
||||||
|
},
|
||||||
|
disconnect() {
|
||||||
|
console.log('断开连接')
|
||||||
|
},
|
||||||
|
reconnect() {
|
||||||
|
console.log('重新连接')
|
||||||
|
},
|
||||||
|
},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* data
|
||||||
|
* @module 组件存放位置
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/29 06:58
|
||||||
|
* @param {Object} [title] - 参数说明
|
||||||
|
* @param {String} [columns] - 参数说明
|
||||||
|
* @example 调用示例
|
||||||
|
* <hh></hh>
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-card shadow="always"> 订单金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 预计销量:123单</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
<el-card shadow="always"> 利润金额:123元</el-card>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "data",
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
.el-card {
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
export default [
|
||||||
|
{
|
||||||
|
name:"data",
|
||||||
|
label:"数据看板",
|
||||||
|
components:()=>import("./data.vue"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name:"mssages",
|
||||||
|
label:"消息数量",
|
||||||
|
components:()=>import("./mssages.vue"),
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-alert title="success alert" type="success" effect="dark">
|
||||||
|
<template #default>
|
||||||
|
<p>每个人都不得不面对这些问题. 在面对这种问题时,
|
||||||
|
一般来说, 随机一段废话, 发生了会如何, 不发生又会如何. 这样看来, 就我个人来说, 随机一段废话对我的意义, 不能不说非常重大. 德国曾经说过, 只有在人群中间,才能认识自己。带着这句话, 我们还要更加慎重的审视这个问题: 每个人都不得不面对这些问题. 在面对这种问题时,
|
||||||
|
斯宾诺莎曾经说过, 最大的骄傲于最大的自卑都表示心灵的最软弱无</p>
|
||||||
|
</template>
|
||||||
|
</el-alert>
|
||||||
|
<el-alert title="info alert" type="info" effect="dark"/>
|
||||||
|
<el-alert title="warning alert" type="warning" effect="dark"/>
|
||||||
|
<el-alert title="error alert" type="error" effect="dark"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "mssages",
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
.el-alert {
|
||||||
|
margin: 20px 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-alert:first-child {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
|
||||||
|
const files = require.context('./plugin', true, /index\.js$/); //批量读取模块文件
|
||||||
|
const pluginMain = {}
|
||||||
|
const plugin = files.keys().reduce((modules, path) => {
|
||||||
|
const name = path.replace(/^\.\/(.*)\.js$/, '$1');
|
||||||
|
const module = files(path);
|
||||||
|
// console.log(module);
|
||||||
|
modules[name] = module.default && module.default(Vue) || null;
|
||||||
|
if (modules[name]) {
|
||||||
|
pluginMain[modules[name].name] = modules[name].value
|
||||||
|
}
|
||||||
|
return modules;
|
||||||
|
}, {});
|
||||||
|
Vue.config.productionTip = false
|
||||||
|
// console.log('pluginMain',pluginMain);
|
||||||
|
new Vue({
|
||||||
|
render: h => h(App),
|
||||||
|
// components: { App },
|
||||||
|
...pluginMain,
|
||||||
|
}).$mount('#app')
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
/pages/index/index
|
||||||
|
<el-row class="mb-4">
|
||||||
|
<router-link to="/pages/test/index">
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
Go to Foo
|
||||||
|
</router-link>
|
||||||
|
<img src="static/svg/index.svg"/>
|
||||||
|
<el-button type="primary">Primary</el-button>
|
||||||
|
<el-button type="success">Success</el-button>
|
||||||
|
<el-button type="info">Info</el-button>
|
||||||
|
<el-button type="warning">Warning</el-button>
|
||||||
|
<el-button type="danger">Danger</el-button>
|
||||||
|
<el-button>中文</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
navigate: {
|
||||||
|
index: 999,//排序(越大越置顶)
|
||||||
|
icon : 'static/svg/index.svg',
|
||||||
|
group: '系统管理',//导航分组
|
||||||
|
name : '首页',//导航名称
|
||||||
|
},
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* index
|
||||||
|
* @module 组件存放位置
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/28 20:25
|
||||||
|
* @param {Object} [title] - 参数说明
|
||||||
|
* @param {String} [columns] - 参数说明
|
||||||
|
* @example 调用示例
|
||||||
|
* <hh></hh>
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
/pages/test/index
|
||||||
|
<el-row class="mb-4">
|
||||||
|
<router-link to="/pages/index/index">
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
Go to Foo
|
||||||
|
</router-link>
|
||||||
|
<el-button type="primary">Primary</el-button>
|
||||||
|
<el-button type="success">Success</el-button>
|
||||||
|
<el-button type="info">Info</el-button>
|
||||||
|
<el-button type="warning">Warning</el-button>
|
||||||
|
<el-button type="danger">Danger</el-button>
|
||||||
|
<el-button>中文</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
navigate: {
|
||||||
|
index: 1,//排序(越大越置顶)
|
||||||
|
icon : 'static/svg/index.svg',
|
||||||
|
group: '分组1',//导航分组名称
|
||||||
|
name : '测试页1',//导航名称
|
||||||
|
},
|
||||||
|
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
{{ count }}
|
||||||
|
<im></im>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import im from '@/components/im/index.vue'
|
||||||
|
import { mapState, mapActions } from 'vuex'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
navigate: {
|
||||||
|
index: 999,//排序(越大越置顶)
|
||||||
|
icon : 'static/svg/index.svg',
|
||||||
|
group: '',//导航分组
|
||||||
|
name : '首页',//导航名称
|
||||||
|
},
|
||||||
|
//组件
|
||||||
|
components: {
|
||||||
|
im
|
||||||
|
},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {
|
||||||
|
...mapState({
|
||||||
|
count: state => state.app.count
|
||||||
|
})
|
||||||
|
},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {
|
||||||
|
...mapActions(['add', 'subtract']),
|
||||||
|
},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* index
|
||||||
|
* @module 组件存放位置
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/28 20:25
|
||||||
|
* @param {Object} [title] - 参数说明
|
||||||
|
* @param {String} [columns] - 参数说明
|
||||||
|
* @example 调用示例
|
||||||
|
* <hh></hh>
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
/pages/test/index
|
||||||
|
<el-row class="mb-4">
|
||||||
|
<router-link to="/pages/index/index">
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
Go to Foo
|
||||||
|
</router-link>
|
||||||
|
<el-button type="primary">Primary</el-button>
|
||||||
|
<el-button type="success">Success</el-button>
|
||||||
|
<el-button type="info">Info</el-button>
|
||||||
|
<el-button type="warning">Warning</el-button>
|
||||||
|
<el-button type="danger">Danger</el-button>
|
||||||
|
<el-button>中文</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
navigate: {
|
||||||
|
notShow : true,//
|
||||||
|
index: 2,//排序(越大越置顶)
|
||||||
|
icon : 'static/svg/index.svg',
|
||||||
|
group: '测试分组',//导航分组名称
|
||||||
|
name : '测试页',//导航名称
|
||||||
|
},
|
||||||
|
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
<!--
|
||||||
|
/**
|
||||||
|
* index
|
||||||
|
* @module 组件存放位置
|
||||||
|
* @desc 组件描述
|
||||||
|
* @author Robin
|
||||||
|
* @date 2022/6/28 20:25
|
||||||
|
* @param {Object} [title] - 参数说明
|
||||||
|
* @param {String} [columns] - 参数说明
|
||||||
|
* @example 调用示例
|
||||||
|
* <hh></hh>
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
/pages/test/index
|
||||||
|
<el-row class="mb-4">
|
||||||
|
<router-link to="/pages/index/index">
|
||||||
|
<el-button>Default</el-button>
|
||||||
|
Go to Foo
|
||||||
|
</router-link>
|
||||||
|
<el-button type="primary">Primary</el-button>
|
||||||
|
<el-button type="success">Success</el-button>
|
||||||
|
<el-button type="info">Info</el-button>
|
||||||
|
<el-button type="warning">Warning</el-button>
|
||||||
|
<el-button type="danger">Danger</el-button>
|
||||||
|
<el-button>中文</el-button>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
navigate: {
|
||||||
|
index: 2,//排序(越大越置顶)
|
||||||
|
icon : 'static/svg/index.svg',
|
||||||
|
group: '测试分组',//导航分组名称
|
||||||
|
name : '测试页2',//导航名称
|
||||||
|
},
|
||||||
|
|
||||||
|
//组件
|
||||||
|
components: {},
|
||||||
|
props : [],
|
||||||
|
//数据
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
//计算属性
|
||||||
|
computed: {},
|
||||||
|
//在实例创建完成后被立即调用
|
||||||
|
created() {
|
||||||
|
},
|
||||||
|
//实例被挂载后调用
|
||||||
|
mounted() {
|
||||||
|
},
|
||||||
|
//methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达式中使用。
|
||||||
|
methods: {},
|
||||||
|
//包含 Vue 实例可用过滤器的哈希表。
|
||||||
|
filters: {},
|
||||||
|
//侦听器
|
||||||
|
watch: {},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
|
||||||
|
</style>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import ElementUI from 'element-ui';
|
||||||
|
import 'element-ui/lib/theme-chalk/index.css';
|
||||||
|
export default (Vue)=>{
|
||||||
|
Vue.use(ElementUI);
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
import '../../assets/global.less';
|
||||||
|
export default (Vue)=>{
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import routes from "../vue-router/pages";
|
||||||
|
|
||||||
|
export default (Vue) => {
|
||||||
|
const files = require.context('../../utils', true, /index\.js$/); //批量读取模块文件
|
||||||
|
const plugin = files.keys().reduce((modules, path) => {
|
||||||
|
const name = path.replace(/^\.\/(.*)\.js$/, '$1');
|
||||||
|
const module = files(path).default();
|
||||||
|
if (module) {
|
||||||
|
Vue.prototype[module.name] = module.value
|
||||||
|
}
|
||||||
|
return modules;
|
||||||
|
}, {});
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import LemonIMUI from 'lemon-imui';
|
||||||
|
import 'lemon-imui/dist/index.css';
|
||||||
|
export default (Vue)=>{
|
||||||
|
Vue.use(LemonIMUI);
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export default {
|
||||||
|
home: '/pages/index/index',//默认首页
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import VueRouter from 'vue-router'
|
||||||
|
import routes from './pages'
|
||||||
|
import config from './config.js'
|
||||||
|
|
||||||
|
export default (Vue) => {
|
||||||
|
Vue.use(VueRouter)
|
||||||
|
const router = new VueRouter({
|
||||||
|
routes
|
||||||
|
})
|
||||||
|
//设置默认首页
|
||||||
|
if (config.home) router.addRoute({path: '/', redirect: config.home})
|
||||||
|
return {
|
||||||
|
name : 'router',
|
||||||
|
value: router
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
const Foo = {template: '<div>foo</div>'}
|
||||||
|
const Bar = {template: '<div>bar</div>'}
|
||||||
|
|
||||||
|
const routes = [
|
||||||
|
|
||||||
|
]
|
||||||
|
const files = require.context('../../pages', true, /index\.vue$/); //批量读取模块文件
|
||||||
|
const plugin = files.keys().reduce((modules, path) => {
|
||||||
|
const name = path.replace(/^\.\/(.*)\.vue$/, '$1');
|
||||||
|
const module = files(path).default;
|
||||||
|
//自动加载路由
|
||||||
|
routes.push(
|
||||||
|
{path: '/pages/' + name, component: module},
|
||||||
|
)
|
||||||
|
return modules;
|
||||||
|
}, {});
|
||||||
|
console.log(routes);
|
||||||
|
|
||||||
|
export default routes;
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
/*
|
||||||
|
https://www.npmjs.com/package/vue-socket.io
|
||||||
|
https://blog.51cto.com/u_15302032/5215140
|
||||||
|
* */
|
||||||
|
|
||||||
|
import SocketIO from "socket.io-client";
|
||||||
|
import VueSocketIO from 'vue-socket.io'
|
||||||
|
|
||||||
|
|
||||||
|
export default (Vue) => {
|
||||||
|
Vue.use(new VueSocketIO({
|
||||||
|
debug: true,
|
||||||
|
connection: SocketIO('http://127.0.0.1:3210'),
|
||||||
|
// vuex: {
|
||||||
|
// store,
|
||||||
|
// actionPrefix: 'SOCKET_',
|
||||||
|
// mutationPrefix: 'SOCKET_'
|
||||||
|
// },
|
||||||
|
options: { path: "/socket.io" } //Optional options
|
||||||
|
}))
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import Vuex from 'vuex'
|
||||||
|
|
||||||
|
const state = {
|
||||||
|
count: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
|
||||||
|
SET_ADD_COUNT : (state) => {
|
||||||
|
state.count++
|
||||||
|
},
|
||||||
|
SET_SUBTRACT_COUNT: (state) => {
|
||||||
|
state.count--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
// 加
|
||||||
|
add({commit}) {
|
||||||
|
commit('SET_ADD_COUNT')
|
||||||
|
},
|
||||||
|
// 减
|
||||||
|
subtract({commit}) {
|
||||||
|
commit('SET_SUBTRACT_COUNT')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
const store = new Vuex.Store({
|
||||||
|
modules: {
|
||||||
|
//封装的存放state下count的方法
|
||||||
|
app: {
|
||||||
|
// namespaced: true,
|
||||||
|
state,
|
||||||
|
mutations,
|
||||||
|
actions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export default store
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
/*
|
||||||
|
* */
|
||||||
|
|
||||||
|
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
|
||||||
|
export default (Vue) => {
|
||||||
|
Vue.use(Vuex);
|
||||||
|
|
||||||
|
const store = require("./store")
|
||||||
|
return {
|
||||||
|
name : "store",
|
||||||
|
value: store.default
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import Vuex from 'vuex'
|
||||||
|
|
||||||
|
const state = {
|
||||||
|
count: 1
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
|
||||||
|
SET_ADD_COUNT : (state) => {
|
||||||
|
state.count++
|
||||||
|
},
|
||||||
|
SET_SUBTRACT_COUNT: (state) => {
|
||||||
|
state.count--
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
// 加
|
||||||
|
add({commit}) {
|
||||||
|
commit('SET_ADD_COUNT')
|
||||||
|
},
|
||||||
|
// 减
|
||||||
|
subtract({commit}) {
|
||||||
|
commit('SET_SUBTRACT_COUNT')
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
const store = new Vuex.Store({
|
||||||
|
modules: {
|
||||||
|
//封装的存放state下count的方法
|
||||||
|
app: {
|
||||||
|
// namespaced: true,
|
||||||
|
state,
|
||||||
|
mutations,
|
||||||
|
actions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export default store
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
//文档:https://x-extends.gitee.io/xe-utils/#/
|
||||||
|
const XEUtils = require('xe-utils')
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
return {name: '$xe', value: XEUtils}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
const path = require('path');
|
||||||
|
const CopyWebpackPlugin = require("copy-webpack-plugin")
|
||||||
|
function resolve (dir) {
|
||||||
|
return path.join(__dirname, dir)
|
||||||
|
}
|
||||||
|
module.exports = {
|
||||||
|
runtimeCompiler: true,
|
||||||
|
lintOnSave: true,
|
||||||
|
chainWebpack: (config)=>{
|
||||||
|
config.resolve.alias
|
||||||
|
.set('@', resolve('src'))
|
||||||
|
.set('components',resolve('src/components'))
|
||||||
|
.set('utils',resolve('src/utils'))
|
||||||
|
.set('assets',resolve('src/assets'))
|
||||||
|
// .set('static',resolve('src/static'))
|
||||||
|
},
|
||||||
|
pluginOptions: {
|
||||||
|
"style-resources-loader": {
|
||||||
|
preProcessor: "less",
|
||||||
|
// patterns: [path.resolve(__dirname, "src/assets/global.less")]
|
||||||
|
},
|
||||||
|
svg: {
|
||||||
|
inline: {}, // Pass options to vue-svg-loader
|
||||||
|
data: {}, // Pass options to url-loader
|
||||||
|
sprite: {}, // Pass options to svg-sprite-loader
|
||||||
|
external: {} // Pass options to file-loader
|
||||||
|
}
|
||||||
|
},
|
||||||
|
configureWebpack: {
|
||||||
|
// plugins: [
|
||||||
|
// new CopyWebpackPlugin({
|
||||||
|
// patterns:[{
|
||||||
|
// from: "./src/static",
|
||||||
|
// to: 'static'
|
||||||
|
// }]
|
||||||
|
// })
|
||||||
|
// ]
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user