组件文档
This commit is contained in:
commit
645f82b466
3
.browserslistrc
Normal file
3
.browserslistrc
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
> 1%
|
||||||
|
last 2 versions
|
||||||
|
not dead
|
18
.eslintrc.js
Normal file
18
.eslintrc.js
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
env: {
|
||||||
|
node: true
|
||||||
|
},
|
||||||
|
extends: [
|
||||||
|
'plugin:vue/essential',
|
||||||
|
'eslint:recommended',
|
||||||
|
'plugin:prettier/recommended'
|
||||||
|
],
|
||||||
|
parserOptions: {
|
||||||
|
parser: '@babel/eslint-parser'
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||||
|
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off'
|
||||||
|
}
|
||||||
|
}
|
23
.gitignore
vendored
Normal file
23
.gitignore
vendored
Normal file
@ -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?
|
5
.prettierrc.json
Normal file
5
.prettierrc.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"semi": false,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none"
|
||||||
|
}
|
24
README.md
Normal file
24
README.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# code-brick-wd
|
||||||
|
|
||||||
|
## Project setup
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and hot-reloads for development
|
||||||
|
```
|
||||||
|
npm run serve
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compiles and minifies for production
|
||||||
|
```
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Lints and fixes files
|
||||||
|
```
|
||||||
|
npm run lint
|
||||||
|
```
|
||||||
|
|
||||||
|
### Customize configuration
|
||||||
|
See [Configuration Reference](https://cli.vuejs.org/config/).
|
3
babel.config.js
Normal file
3
babel.config.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
module.exports = {
|
||||||
|
presets: ['@vue/cli-plugin-babel/preset']
|
||||||
|
}
|
19
jsconfig.json
Normal file
19
jsconfig.json
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"module": "esnext",
|
||||||
|
"baseUrl": "./",
|
||||||
|
"moduleResolution": "node",
|
||||||
|
"paths": {
|
||||||
|
"@/*": [
|
||||||
|
"src/*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"lib": [
|
||||||
|
"esnext",
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"scripthost"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
19993
package-lock.json
generated
Normal file
19993
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
35
package.json
Normal file
35
package.json
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"name": "code-brick-wd",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"serve": "vue-cli-service serve",
|
||||||
|
"build": "vue-cli-service build",
|
||||||
|
"lint": "vue-cli-service lint"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"code-brick-zj": "^0.0.1",
|
||||||
|
"core-js": "^3.8.3",
|
||||||
|
"element-ui": "^2.15.12",
|
||||||
|
"vue": "^2.6.14",
|
||||||
|
"vue-router": "^3.5.1",
|
||||||
|
"vuex": "^3.6.2"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "^7.12.16",
|
||||||
|
"@babel/eslint-parser": "^7.12.16",
|
||||||
|
"@vue/cli-plugin-babel": "~5.0.0",
|
||||||
|
"@vue/cli-plugin-eslint": "~5.0.0",
|
||||||
|
"@vue/cli-plugin-router": "~5.0.0",
|
||||||
|
"@vue/cli-plugin-vuex": "~5.0.0",
|
||||||
|
"@vue/cli-service": "~5.0.0",
|
||||||
|
"eslint": "^7.32.0",
|
||||||
|
"eslint-config-prettier": "^8.3.0",
|
||||||
|
"eslint-plugin-prettier": "^4.0.0",
|
||||||
|
"eslint-plugin-vue": "^8.0.3",
|
||||||
|
"prettier": "^2.4.1",
|
||||||
|
"sass": "^1.32.7",
|
||||||
|
"sass-loader": "^12.0.0",
|
||||||
|
"vue-template-compiler": "^2.6.14"
|
||||||
|
}
|
||||||
|
}
|
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.2 KiB |
17
public/index.html
Normal file
17
public/index.html
Normal file
@ -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>
|
15
src/App.vue
Normal file
15
src/App.vue
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<router-view />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
#app {
|
||||||
|
font-family: Avenir, Helvetica, Arial, sans-serif;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
overflow-x: auto;
|
||||||
|
overflow-y: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
BIN
src/assets/logo.png
Normal file
BIN
src/assets/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.7 KiB |
130
src/components/HelloWorld.vue
Normal file
130
src/components/HelloWorld.vue
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
<template>
|
||||||
|
<div class="hello">
|
||||||
|
<h1>{{ msg }}</h1>
|
||||||
|
<p>
|
||||||
|
For a guide and recipes on how to configure / customize this project,<br />
|
||||||
|
check out the
|
||||||
|
<a href="https://cli.vuejs.org" target="_blank" rel="noopener"
|
||||||
|
>vue-cli documentation</a
|
||||||
|
>.
|
||||||
|
</p>
|
||||||
|
<h3>Installed CLI Plugins</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>babel</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-router"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>router</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-vuex"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>vuex</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>eslint</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Essential Links</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://forum.vuejs.org" target="_blank" rel="noopener"
|
||||||
|
>Forum</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://chat.vuejs.org" target="_blank" rel="noopener"
|
||||||
|
>Community Chat</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://twitter.com/vuejs" target="_blank" rel="noopener"
|
||||||
|
>Twitter</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<h3>Ecosystem</h3>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="https://router.vuejs.org" target="_blank" rel="noopener"
|
||||||
|
>vue-router</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/vue-devtools#vue-devtools"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>vue-devtools</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener"
|
||||||
|
>vue-loader</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a
|
||||||
|
href="https://github.com/vuejs/awesome-vue"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener"
|
||||||
|
>awesome-vue</a
|
||||||
|
>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'HelloWorld',
|
||||||
|
props: {
|
||||||
|
msg: String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
||||||
|
<style scoped lang="scss">
|
||||||
|
h3 {
|
||||||
|
margin: 40px 0 0;
|
||||||
|
}
|
||||||
|
ul {
|
||||||
|
list-style-type: none;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
li {
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 10px;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
color: #42b983;
|
||||||
|
}
|
||||||
|
</style>
|
12
src/layout/components/AppMain.vue
Normal file
12
src/layout/components/AppMain.vue
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
<template>
|
||||||
|
<section>
|
||||||
|
<keep-alive>
|
||||||
|
<router-view />
|
||||||
|
</keep-alive>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'AppMain'
|
||||||
|
}
|
||||||
|
</script>
|
66
src/layout/components/MenuList.vue
Normal file
66
src/layout/components/MenuList.vue
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<template>
|
||||||
|
<el-aside
|
||||||
|
v-if="leftMenuList.length > 0 ? true : false"
|
||||||
|
:width="variables.menuWidth"
|
||||||
|
class="menuBox"
|
||||||
|
>
|
||||||
|
<el-tabs
|
||||||
|
v-model="activeMenu"
|
||||||
|
tab-position="left"
|
||||||
|
class="menuContainer"
|
||||||
|
@tab-click="toggleMenu"
|
||||||
|
>
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="(item, i) in leftMenuList"
|
||||||
|
:key="i"
|
||||||
|
:label="item.meta.title"
|
||||||
|
:name="item.name"
|
||||||
|
></el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</el-aside>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import variables from '@/styles/variables.module.scss'
|
||||||
|
export default {
|
||||||
|
name: 'MenuList',
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
variables() {
|
||||||
|
return variables
|
||||||
|
},
|
||||||
|
leftMenuList() {
|
||||||
|
return this.$store.state.menu.leftMenuList
|
||||||
|
},
|
||||||
|
activeMenu: {
|
||||||
|
get: function () {
|
||||||
|
return this.$store.getters.activeMenu
|
||||||
|
},
|
||||||
|
set: function () {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {},
|
||||||
|
methods: {
|
||||||
|
toggleMenu(e) {
|
||||||
|
this.$store.dispatch('menu/setActiveMenu', e.name)
|
||||||
|
// this.$router.push({ name: e.name })
|
||||||
|
}
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
activeMenu: function (newVal) {
|
||||||
|
this.$router.push({ name: newVal })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@/styles/variables.module.scss';
|
||||||
|
.menuBox {
|
||||||
|
background-color: $color-white;
|
||||||
|
.menuContainer {
|
||||||
|
height: calc(100vh - #{$navbarHeight});
|
||||||
|
width: $menuWidth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
90
src/layout/components/Navbar.vue
Normal file
90
src/layout/components/Navbar.vue
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
<template>
|
||||||
|
<div class="navbarContainer">
|
||||||
|
<div class="logoBox">
|
||||||
|
<img src="./../../assets/logo.png" alt="中建材" class="logoImg" />
|
||||||
|
<span class="title">组件使用</span>
|
||||||
|
</div>
|
||||||
|
<div class="fr">
|
||||||
|
<el-tabs
|
||||||
|
v-model="activeModule"
|
||||||
|
@tab-click="toggleModule"
|
||||||
|
class="topMenuBox fr"
|
||||||
|
>
|
||||||
|
<el-tab-pane
|
||||||
|
v-for="(item, i) in topModuleList"
|
||||||
|
:key="i"
|
||||||
|
:label="item.label"
|
||||||
|
:name="item.name"
|
||||||
|
></el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from 'vuex'
|
||||||
|
export default {
|
||||||
|
name: 'NavbarPage',
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters(['topModuleList']),
|
||||||
|
activeModule: {
|
||||||
|
get: function () {
|
||||||
|
return this.$store.getters.activeModule
|
||||||
|
},
|
||||||
|
set: function () {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.$store.dispatch('menu/getTopModuleList')
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggleModule(e) {
|
||||||
|
if (e.name === 'home') {
|
||||||
|
this.$router.push({ path: '/home/index' })
|
||||||
|
}
|
||||||
|
// 加载左侧菜单并跳转第一个菜单的页面
|
||||||
|
const activeBox = { activeModule: e.name, activeMenu: '' }
|
||||||
|
this.$store.dispatch('menu/setActiveModule', activeBox)
|
||||||
|
},
|
||||||
|
logout() {
|
||||||
|
this.$router.push({ path: '/login' })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss">
|
||||||
|
@import '@/styles/variables.module.scss';
|
||||||
|
.navbarContainer {
|
||||||
|
.logoBox {
|
||||||
|
float: left;
|
||||||
|
.logoImg {
|
||||||
|
height: 38px;
|
||||||
|
width: 38px;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
.title {
|
||||||
|
font-size: 18px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-dropdown-link {
|
||||||
|
margin-left: 20px;
|
||||||
|
}
|
||||||
|
.topMenuBox {
|
||||||
|
margin-right: 20px;
|
||||||
|
.el-tabs__item {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.el-tabs__nav-wrap::after {
|
||||||
|
width: 0;
|
||||||
|
}
|
||||||
|
.el-tabs__active-bar {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
3
src/layout/components/index.js
Normal file
3
src/layout/components/index.js
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
export { default as AppMain } from './AppMain'
|
||||||
|
export { default as MenuList } from './MenuList'
|
||||||
|
export { default as Navbar } from './Navbar'
|
59
src/layout/index.vue
Normal file
59
src/layout/index.vue
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<template>
|
||||||
|
<el-container class="itemContainer">
|
||||||
|
<el-header>
|
||||||
|
<navbar />
|
||||||
|
</el-header>
|
||||||
|
<el-container class="sectionBox">
|
||||||
|
<menu-list />
|
||||||
|
<el-container>
|
||||||
|
<div class="app-container">
|
||||||
|
<app-main />
|
||||||
|
</div>
|
||||||
|
<el-footer height="38px">
|
||||||
|
<div class="footerFont">©中建材智能自动化研究院有限公司</div>
|
||||||
|
</el-footer>
|
||||||
|
</el-container>
|
||||||
|
</el-container>
|
||||||
|
</el-container>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import { AppMain } from './components'
|
||||||
|
import MenuList from './components/MenuList'
|
||||||
|
import Navbar from './components/Navbar'
|
||||||
|
export default {
|
||||||
|
name: 'LayoutPage',
|
||||||
|
data() {
|
||||||
|
return {}
|
||||||
|
},
|
||||||
|
components: { AppMain, MenuList, Navbar }
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
@import '@/styles/variables.module.scss';
|
||||||
|
.itemContainer {
|
||||||
|
min-width: 1500px;
|
||||||
|
}
|
||||||
|
.el-header {
|
||||||
|
background-color: $color-primary-light-8;
|
||||||
|
line-height: $navbarHeight;
|
||||||
|
}
|
||||||
|
.el-footer {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.sectionBox {
|
||||||
|
height: calc(100vh - #{$navbarHeight});
|
||||||
|
background-color: $background-color-secondary;
|
||||||
|
.app-container {
|
||||||
|
height: calc(100vh - #{$navbarHeight} - #{$footerHeight} - 10px);
|
||||||
|
margin: 10px 10px 0;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: $color-white;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
.footerFont {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: $footerHeight;
|
||||||
|
color: $color-text-secondary;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
19
src/main.js
Normal file
19
src/main.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
import router from './router'
|
||||||
|
import store from './store'
|
||||||
|
import ElementUI from 'element-ui'
|
||||||
|
import 'element-ui/lib/theme-chalk/index.css'
|
||||||
|
import myComponents from 'code-brick-zj'
|
||||||
|
import '../theme/index.css' // 自定义主题包
|
||||||
|
import '@/styles/index.scss' // global css
|
||||||
|
Vue.use(ElementUI)
|
||||||
|
|
||||||
|
Vue.config.productionTip = false
|
||||||
|
Vue.use(myComponents)
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
router,
|
||||||
|
store,
|
||||||
|
render: (h) => h(App)
|
||||||
|
}).$mount('#app')
|
139
src/router/index.js
Normal file
139
src/router/index.js
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import VueRouter from 'vue-router'
|
||||||
|
import store from '@/store'
|
||||||
|
|
||||||
|
Vue.use(VueRouter)
|
||||||
|
|
||||||
|
const originalPush = VueRouter.prototype.push
|
||||||
|
VueRouter.prototype.push = function push(location) {
|
||||||
|
return originalPush.call(this, location).catch((err) => err)
|
||||||
|
}
|
||||||
|
|
||||||
|
import Layout from '@/layout'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hidden: true if set true, item will not show in the top menuModule(default is false)
|
||||||
|
*/
|
||||||
|
|
||||||
|
export const routes = [
|
||||||
|
{
|
||||||
|
path: '/home',
|
||||||
|
component: Layout,
|
||||||
|
name: 'home',
|
||||||
|
meta: {
|
||||||
|
title: '首页'
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'introduce',
|
||||||
|
name: 'introduce',
|
||||||
|
meta: {
|
||||||
|
title: '介绍'
|
||||||
|
},
|
||||||
|
component: () => import('../views/home/introduce')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/table',
|
||||||
|
component: Layout,
|
||||||
|
name: 'table',
|
||||||
|
meta: {
|
||||||
|
title: '表格'
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'singleHead',
|
||||||
|
name: 'singleHead',
|
||||||
|
meta: {
|
||||||
|
title: '单表头'
|
||||||
|
},
|
||||||
|
component: () => import('../views/table/singleHead')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'multiLevelHead',
|
||||||
|
name: 'multiLevelHead',
|
||||||
|
meta: {
|
||||||
|
title: '多级表头'
|
||||||
|
},
|
||||||
|
component: () => import('../views/table/multiLevelHead')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'canBeEntered',
|
||||||
|
name: 'canBeEntered',
|
||||||
|
meta: {
|
||||||
|
title: '可输入型'
|
||||||
|
},
|
||||||
|
component: () => import('../views/table/canBeEntered')
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'paginationShow',
|
||||||
|
name: 'paginationShow',
|
||||||
|
meta: {
|
||||||
|
title: '分页'
|
||||||
|
},
|
||||||
|
component: () => import('../views/table/pagination')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/searchBar',
|
||||||
|
component: Layout,
|
||||||
|
name: 'searchBar',
|
||||||
|
meta: {
|
||||||
|
title: '搜索'
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'searchBar',
|
||||||
|
name: 'searchBar',
|
||||||
|
meta: {
|
||||||
|
title: '搜索'
|
||||||
|
},
|
||||||
|
component: () => import('../views/searchBar/searchBar')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: '/dialog',
|
||||||
|
component: Layout,
|
||||||
|
name: 'dialog',
|
||||||
|
meta: {
|
||||||
|
title: '对话框'
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'dialogPage',
|
||||||
|
name: 'dialogPage',
|
||||||
|
meta: {
|
||||||
|
title: '对话框'
|
||||||
|
},
|
||||||
|
component: () => import('../views/dialog/dialogPage')
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{ path: '*', redirect: '/home/introduce', hidden: true }
|
||||||
|
]
|
||||||
|
|
||||||
|
const router = new VueRouter({
|
||||||
|
mode: 'hash',
|
||||||
|
base: process.env.BASE_URL,
|
||||||
|
routes
|
||||||
|
})
|
||||||
|
|
||||||
|
router.beforeEach((to, from, next) => {
|
||||||
|
if (to.path === '/login') {
|
||||||
|
next()
|
||||||
|
} else {
|
||||||
|
if (to.matched[0]) {
|
||||||
|
const activeBox = {
|
||||||
|
activeModule: to.matched[0].name,
|
||||||
|
activeMenu: to.matched[1].name
|
||||||
|
}
|
||||||
|
store.dispatch('menu/setActiveModule', activeBox)
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
export default router
|
7
src/store/getters.js
Normal file
7
src/store/getters.js
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
const getters = {
|
||||||
|
topModuleList: (state) => state.menu.topModuleList,
|
||||||
|
leftMenuList: (state) => state.menu.leftMenuList,
|
||||||
|
activeModule: (state) => state.menu.activeModule,
|
||||||
|
activeMenu: (state) => state.menu.activeMenu
|
||||||
|
}
|
||||||
|
export default getters
|
24
src/store/index.js
Normal file
24
src/store/index.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
import getters from './getters'
|
||||||
|
|
||||||
|
Vue.use(Vuex)
|
||||||
|
|
||||||
|
const modulesFiles = require.context('./modules', true, /\.js$/)
|
||||||
|
|
||||||
|
// you do not need `import app from './modules/app'`
|
||||||
|
// it will auto require all vuex module from modules file
|
||||||
|
const modules = modulesFiles.keys().reduce((modules, modulePath) => {
|
||||||
|
// set './app.js' => 'app'
|
||||||
|
const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
|
||||||
|
const value = modulesFiles(modulePath)
|
||||||
|
modules[moduleName] = value.default
|
||||||
|
return modules
|
||||||
|
}, {})
|
||||||
|
|
||||||
|
const store = new Vuex.Store({
|
||||||
|
modules,
|
||||||
|
getters
|
||||||
|
})
|
||||||
|
|
||||||
|
export default store
|
75
src/store/modules/menu.js
Normal file
75
src/store/modules/menu.js
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import { routes } from '@/router'
|
||||||
|
const state = {
|
||||||
|
topModuleList: JSON.parse(sessionStorage.getItem('topModuleList')),
|
||||||
|
leftMenuList: JSON.parse(sessionStorage.getItem('leftMenuList')),
|
||||||
|
activeModule: sessionStorage.getItem('activeModule'), // 顶部菜单模块
|
||||||
|
activeMenu: sessionStorage.getItem('activeMenu') // 左侧菜单
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
SET_TOPMODULE: (state, menuModule) => {
|
||||||
|
state.topModuleList = menuModule
|
||||||
|
sessionStorage.setItem('topModuleList', JSON.stringify(menuModule))
|
||||||
|
},
|
||||||
|
SET_LEFTMENU: (state, menu) => {
|
||||||
|
state.leftMenuList = menu
|
||||||
|
sessionStorage.setItem('leftMenuList', JSON.stringify(menu))
|
||||||
|
},
|
||||||
|
SET_ACTIVEMODULE: (state, activeModule) => {
|
||||||
|
state.activeModule = activeModule
|
||||||
|
sessionStorage.setItem('activeModule', activeModule)
|
||||||
|
},
|
||||||
|
SET_ACTIVEMENU: (state, activeMenu) => {
|
||||||
|
state.activeMenu = activeMenu || state.leftMenuList[0].name
|
||||||
|
sessionStorage.setItem('activeMenu', state.activeMenu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
// 获取顶部菜单模块
|
||||||
|
getTopModuleList({ commit }) {
|
||||||
|
let temp = []
|
||||||
|
routes &&
|
||||||
|
routes.map((item) => {
|
||||||
|
if (item.hidden) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
let obj = {}
|
||||||
|
obj.name = item.name
|
||||||
|
obj.label = item.meta.title
|
||||||
|
temp.push(obj)
|
||||||
|
})
|
||||||
|
commit('SET_TOPMODULE', temp)
|
||||||
|
},
|
||||||
|
// 设置菜单模块
|
||||||
|
setActiveModule({ commit, dispatch }, activeBox) {
|
||||||
|
const { activeModule, activeMenu } = activeBox
|
||||||
|
if (activeModule === 'home') {
|
||||||
|
commit('SET_LEFTMENU', [])
|
||||||
|
} else {
|
||||||
|
dispatch('getLeftMenuList', activeModule)
|
||||||
|
dispatch('setActiveMenu', activeMenu)
|
||||||
|
}
|
||||||
|
commit('SET_ACTIVEMODULE', activeModule)
|
||||||
|
},
|
||||||
|
// 获取左侧菜单
|
||||||
|
getLeftMenuList({ commit }, menuName) {
|
||||||
|
let temp = []
|
||||||
|
for (let i = 0; i < routes.length; i++) {
|
||||||
|
if (menuName === routes[i].name) {
|
||||||
|
temp = routes[i].children
|
||||||
|
}
|
||||||
|
}
|
||||||
|
commit('SET_LEFTMENU', temp)
|
||||||
|
},
|
||||||
|
setActiveMenu({ commit }, activeMenu) {
|
||||||
|
commit('SET_ACTIVEMENU', activeMenu)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
namespaced: true,
|
||||||
|
state,
|
||||||
|
mutations,
|
||||||
|
actions
|
||||||
|
}
|
14
src/styles/element-ui.scss
Normal file
14
src/styles/element-ui.scss
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
@import './variables.module.scss';
|
||||||
|
.menuBox {
|
||||||
|
.el-tabs__header.is-left {
|
||||||
|
margin: 0;
|
||||||
|
width: $menuWidth;
|
||||||
|
}
|
||||||
|
.el-tabs--left .el-tabs__active-bar.is-left {
|
||||||
|
width: 5px;
|
||||||
|
}
|
||||||
|
.el-tabs--left .el-tabs__item.is-left {
|
||||||
|
text-align: left;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
}
|
99
src/styles/index.scss
Normal file
99
src/styles/index.scss
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
@import './variables.module.scss';
|
||||||
|
@import './element-ui.scss';
|
||||||
|
|
||||||
|
// css reset
|
||||||
|
html {
|
||||||
|
height: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
margin: 0;
|
||||||
|
-moz-osx-font-smoothing: grayscale;
|
||||||
|
-webkit-font-smoothing: antialiased;
|
||||||
|
text-rendering: optimizeLegibility;
|
||||||
|
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
#app {
|
||||||
|
height: 100%;
|
||||||
|
color: $color-text-primary;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul,li {
|
||||||
|
list-style-type: none;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
*,
|
||||||
|
*:before,
|
||||||
|
*:after {
|
||||||
|
box-sizing: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:focus,
|
||||||
|
a:active {
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a,
|
||||||
|
a:focus,
|
||||||
|
a:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fr {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fl {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.clearfix {
|
||||||
|
&:after {
|
||||||
|
visibility: hidden;
|
||||||
|
display: block;
|
||||||
|
font-size: 0;
|
||||||
|
content: " ";
|
||||||
|
clear: both;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// global style
|
||||||
|
::-webkit-scrollbar {
|
||||||
|
width: 8px;
|
||||||
|
height: 8px;
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-track-piece {
|
||||||
|
background-color:rgba(144,147,153,0);
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-corner {
|
||||||
|
background-color:rgba(144,147,153,0);
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-track {
|
||||||
|
width: 6px;
|
||||||
|
background: rgba(144,147,153,0);
|
||||||
|
-webkit-border-radius: 2em;
|
||||||
|
-moz-border-radius: 2em;
|
||||||
|
border-radius: 2em;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb {
|
||||||
|
background-color: rgba(144,147,153,.5);
|
||||||
|
background-clip: padding-box;
|
||||||
|
min-height: 28px;
|
||||||
|
-webkit-border-radius: 2em;
|
||||||
|
-moz-border-radius: 2em;
|
||||||
|
border-radius: 2em;
|
||||||
|
transition: background-color .3s;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
::-webkit-scrollbar-thumb:hover {
|
||||||
|
background-color: rgba(144,147,153,.3);
|
||||||
|
}
|
55
src/styles/variables.module.scss
Normal file
55
src/styles/variables.module.scss
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
// color
|
||||||
|
// Brand Color
|
||||||
|
$color-primary: #0B58FF;
|
||||||
|
// Functional Color
|
||||||
|
$color-success: #34E88E;
|
||||||
|
$color-warning: #FFBD02;
|
||||||
|
$color-danger: #FF5454;
|
||||||
|
$color-info: #909399;
|
||||||
|
// Font Color
|
||||||
|
$color-text-primary: #161616;
|
||||||
|
$color-text-regular: #606266;
|
||||||
|
$color-text-secondary: #909399;
|
||||||
|
$color-text-placeholder: #C0C4CC;
|
||||||
|
// Border Color
|
||||||
|
$border-color-base: #DCDFE6;
|
||||||
|
$border-color-light: #E4E7ED;
|
||||||
|
$border-color-lighter: #EBEEF5;
|
||||||
|
$border-color-extra-light: #F2F6FC;
|
||||||
|
// Background Color
|
||||||
|
$color-white: #FFFFFF;
|
||||||
|
$color-black: #000000;
|
||||||
|
$background-color-base: #F0F2F5;
|
||||||
|
$background-color-secondary: #F2F4F9;
|
||||||
|
|
||||||
|
// mix color-primary
|
||||||
|
$color-primary-light-1: mix($color-white, $color-primary, 10%) !default;
|
||||||
|
$color-primary-light-2: mix($color-white, $color-primary, 20%) !default;
|
||||||
|
$color-primary-light-3: mix($color-white, $color-primary, 30%) !default;
|
||||||
|
$color-primary-light-4: mix($color-white, $color-primary, 40%) !default;
|
||||||
|
$color-primary-light-5: mix($color-white, $color-primary, 50%) !default;
|
||||||
|
$color-primary-light-6: mix($color-white, $color-primary, 60%) !default;
|
||||||
|
$color-primary-light-7: mix($color-white, $color-primary, 70%) !default;
|
||||||
|
$color-primary-light-8: mix($color-white, $color-primary, 80%) !default;
|
||||||
|
$color-primary-light-9: mix($color-white, $color-primary, 90%) !default;
|
||||||
|
// mix color-success
|
||||||
|
$color-success-light-1: mix($color-white, $color-success, 10%) !default;
|
||||||
|
$color-success-light-2: mix($color-white, $color-success, 20%) !default;
|
||||||
|
$color-success-light-3: mix($color-white, $color-success, 30%) !default;
|
||||||
|
$color-success-light-4: mix($color-white, $color-success, 40%) !default;
|
||||||
|
$color-success-light-5: mix($color-white, $color-success, 50%) !default;
|
||||||
|
$color-success-light-6: mix($color-white, $color-success, 60%) !default;
|
||||||
|
$color-success-light-7: mix($color-white, $color-success, 70%) !default;
|
||||||
|
$color-success-light-8: mix($color-white, $color-success, 80%) !default;
|
||||||
|
$color-success-light-9: mix($color-white, $color-success, 90%) !default;
|
||||||
|
|
||||||
|
// size
|
||||||
|
$navbarHeight: 60px; // 导航栏高度
|
||||||
|
$menuWidth: 160px;
|
||||||
|
$footerHeight: 38px;
|
||||||
|
|
||||||
|
:export {
|
||||||
|
navbarHeight: $navbarHeight;
|
||||||
|
menuWidth: $menuWidth;
|
||||||
|
footerHeight: $footerHeight;
|
||||||
|
}
|
85
src/views/dialog/components/demoSlot.vue
Normal file
85
src/views/dialog/components/demoSlot.vue
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<template>
|
||||||
|
<el-form ref="form" label-width="80px" :model="form">
|
||||||
|
<el-form-item label="用户名" prop="userName">
|
||||||
|
<el-input v-model="form.userName"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="passWord">
|
||||||
|
<el-input v-model="form.passWord"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="姓名" prop="name">
|
||||||
|
<el-input v-model="form.name"></el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="所属产线" prop="productLine">
|
||||||
|
<el-select
|
||||||
|
v-model="form.productLine"
|
||||||
|
placeholder="所属产线"
|
||||||
|
style="width: 100%"
|
||||||
|
>
|
||||||
|
<el-option
|
||||||
|
v-for="item in lineList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="角色" prop="role">
|
||||||
|
<el-select v-model="form.role" placeholder="角色" style="width: 100%">
|
||||||
|
<el-option
|
||||||
|
v-for="item in roleList"
|
||||||
|
:key="item.id"
|
||||||
|
:label="item.name"
|
||||||
|
:value="item.id"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'DemoSlot',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
form: {
|
||||||
|
userName: '',
|
||||||
|
passWord: '123456',
|
||||||
|
name: '',
|
||||||
|
productLine: '',
|
||||||
|
role: ''
|
||||||
|
},
|
||||||
|
lineList: [],
|
||||||
|
roleList: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.init()
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
init() {
|
||||||
|
console.log('init')
|
||||||
|
let _this = this
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.lineList = [
|
||||||
|
{ id: '1', name: '产线1' },
|
||||||
|
{ id: '2', name: '产线2' }
|
||||||
|
]
|
||||||
|
}, 1000)
|
||||||
|
setTimeout(function () {
|
||||||
|
_this.roleList = [
|
||||||
|
{ id: '1', name: '加工人员' },
|
||||||
|
{ id: '2', name: '管理人员' },
|
||||||
|
{ id: '3', name: '数据录入人员' }
|
||||||
|
]
|
||||||
|
}, 1000)
|
||||||
|
},
|
||||||
|
formClear() {
|
||||||
|
this.$refs.form.resetFields()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style scoped>
|
||||||
|
.el-form-item:last-child {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
</style>
|
198
src/views/dialog/dialogPage.vue
Normal file
198
src/views/dialog/dialogPage.vue
Normal file
@ -0,0 +1,198 @@
|
|||||||
|
<template>
|
||||||
|
<div class="dialog-page">
|
||||||
|
<h2>有时候弹框较大,底部显示超过页面了。所以这边的对话框都是可拖拽的</h2>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>基本用法-默认底部按钮是确定</h3>
|
||||||
|
<div>
|
||||||
|
<el-button @click="centervisible = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="新增"
|
||||||
|
:dialogVisible="centervisible"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
>基本用法-默认底部按钮是确定。不能通过点击 modal 关闭 Dialog</span
|
||||||
|
>
|
||||||
|
</BaseDialog>
|
||||||
|
</div>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description">
|
||||||
|
修改弹框的标题为<code>dialogTitle</code>,为比必填。不传默认显示"请填入标题"
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<el-button @click="centervisible = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="新增"
|
||||||
|
:dialogVisible="centervisible"
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
@cancel="handleCancel"
|
||||||
|
@confirm="handleConfirm"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
>
|
||||||
|
<span
|
||||||
|
>基本用法-默认底部按钮是确定。不能通过点击 modal 关闭 Dialog</span
|
||||||
|
>
|
||||||
|
</BaseDialog>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>修改底部按钮为保存</h3>
|
||||||
|
<div>
|
||||||
|
<el-button @click="centervisible1 = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="编辑"
|
||||||
|
:dialogVisible="centervisible1"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
>
|
||||||
|
<span>修改底部按钮为保存</span>
|
||||||
|
<el-row slot="footer" type="flex" justify="end">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-button
|
||||||
|
size="small"
|
||||||
|
class="btnTextStyle"
|
||||||
|
@click="handleCancel1"
|
||||||
|
>取消</el-button
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
size="small"
|
||||||
|
class="btnTextStyle"
|
||||||
|
@click="handleConfirm1"
|
||||||
|
>
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</BaseDialog>
|
||||||
|
</div>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description">
|
||||||
|
ui设计的按钮文字间是有空格的,如果是自己写的footer,按钮文字可加样式<code>btnTextStyle</code>,用法见如下:
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<el-button @click="centervisible1 = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="编辑"
|
||||||
|
:dialogVisible="centervisible1"
|
||||||
|
:before-close="handleCancel"
|
||||||
|
>
|
||||||
|
<span>修改底部按钮为保存</span>
|
||||||
|
<el-row slot="footer" type="flex" justify="end">
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-button size="small" class="btnTextStyle" @click="handleCancel1">取消</el-button>
|
||||||
|
<el-button type="primary" size="small" class="btnTextStyle" @click="handleConfirm1">
|
||||||
|
保存
|
||||||
|
</el-button>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</BaseDialog>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>基本用法-示例</h3>
|
||||||
|
<div>
|
||||||
|
<el-button @click="centervisible2 = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="信息填写"
|
||||||
|
:dialogVisible="centervisible2"
|
||||||
|
@cancel="handleCancel2"
|
||||||
|
@confirm="handleConfirm2"
|
||||||
|
:before-close="handleCancel2"
|
||||||
|
>
|
||||||
|
<demoSlotVue ref="accountList" />
|
||||||
|
</BaseDialog>
|
||||||
|
</div>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description">
|
||||||
|
<code>dialogbody</code
|
||||||
|
>的内容到<code>footer</code>的button的距离为40px
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<el-button @click="centervisible = true">点击打开dialog</el-button>
|
||||||
|
<BaseDialog
|
||||||
|
dialogTitle="信息填写"
|
||||||
|
:dialogVisible="centervisible2"
|
||||||
|
@cancel="handleCancel2"
|
||||||
|
@confirm="handleConfirm2"
|
||||||
|
:before-close="handleCancel2"
|
||||||
|
>
|
||||||
|
<demoSlotVue ref="accountList" /> // demoSlotVue是自己写的业务组件
|
||||||
|
</BaseDialog>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import demoSlotVue from './components/demoSlot.vue'
|
||||||
|
export default {
|
||||||
|
name: 'dialogPage',
|
||||||
|
components: { demoSlotVue },
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
centervisible: false,
|
||||||
|
centervisible1: false,
|
||||||
|
centervisible2: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleCancel() {
|
||||||
|
this.centervisible = false
|
||||||
|
},
|
||||||
|
handleConfirm() {
|
||||||
|
alert('您点击了确定按钮')
|
||||||
|
this.centervisible = false
|
||||||
|
},
|
||||||
|
handleCancel1() {
|
||||||
|
this.centervisible1 = false
|
||||||
|
},
|
||||||
|
handleConfirm1() {
|
||||||
|
alert('您点击了保存按钮')
|
||||||
|
this.centervisible1 = false
|
||||||
|
},
|
||||||
|
handleCancel2() {
|
||||||
|
this.$refs.accountList.formClear()
|
||||||
|
this.centervisible2 = false
|
||||||
|
},
|
||||||
|
handleConfirm2() {
|
||||||
|
alert('您点击了确定按钮2')
|
||||||
|
this.centervisible2 = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.dialog-page {
|
||||||
|
.demo-box {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
.description code {
|
||||||
|
color: #5e6d82;
|
||||||
|
background-color: #e6effb;
|
||||||
|
margin: 0 4px;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 3px;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
13
src/views/home/introduce.vue
Normal file
13
src/views/home/introduce.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
组件包目前封装常用的四个组件:表格,搜索区域,分页,对话框。包npm地址为:https://www.npmjs.com/package/code-brick-zj。
|
||||||
|
</p>
|
||||||
|
<p>文档当前使用的组件包的版本为:0.0.3</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'introducePage'
|
||||||
|
}
|
||||||
|
</script>
|
1762
src/views/searchBar/searchBar.vue
Normal file
1762
src/views/searchBar/searchBar.vue
Normal file
File diff suppressed because it is too large
Load Diff
362
src/views/table/canBeEntered.vue
Normal file
362
src/views/table/canBeEntered.vue
Normal file
@ -0,0 +1,362 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h2>可输入型</h2>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>表格内嵌输入框</h3>
|
||||||
|
<base-table
|
||||||
|
border
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
@emitFun="inputChange"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description">
|
||||||
|
在<code>tableProps</code>的<code>subcomponent</code>上渲染input组件.
|
||||||
|
@emitFun="inputChange"
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<base-table
|
||||||
|
border
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
@emitFun="inputChange"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
<script>
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'testItems',
|
||||||
|
label: '检验项目'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'checkPoint',
|
||||||
|
label: '检测点'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'inspectionStandards',
|
||||||
|
label: '检验标准'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'measuredValue',
|
||||||
|
label: '实测值',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'samplingResults',
|
||||||
|
label: '抽检结果',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'remark',
|
||||||
|
label: '备注',
|
||||||
|
subcomponent: inputArea
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableProps,
|
||||||
|
tableData: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点1',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点2',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点1',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点2',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>表格底部新增按钮</h3>
|
||||||
|
<base-table
|
||||||
|
border
|
||||||
|
:table-props="tableProps2"
|
||||||
|
:table-data="tableData2"
|
||||||
|
:add-button-show="addButtonShow"
|
||||||
|
@emitFun="inputChange2"
|
||||||
|
@emitButtonClick="emitButtonClick"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description">
|
||||||
|
在<code>tableProps</code>的<code>subcomponent</code>上渲染input组件
|
||||||
|
:add-button-show="addButtonShow" @emitFun="inputChange"
|
||||||
|
@emitButtonClick="emitButtonClick"
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<base-table
|
||||||
|
border
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
@emitFun="inputChange"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
<script>
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'testItems',
|
||||||
|
label: '检验项目',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'checkPoint',
|
||||||
|
label: '检测点',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'inspectionStandards',
|
||||||
|
label: '检验标准',
|
||||||
|
subcomponent: inputArea
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableProps,
|
||||||
|
tableData: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点1',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点2',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点1',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点2',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
addButtonShow: '新增'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
inputChange(val) {
|
||||||
|
console.log('=======')
|
||||||
|
console.log(val)
|
||||||
|
this.tableData[val._pageIndex - 1][val.prop] = val[val.prop]
|
||||||
|
console.log(this.tableData)
|
||||||
|
},
|
||||||
|
inputChange2(val) {
|
||||||
|
console.log('=======')
|
||||||
|
console.log(val)
|
||||||
|
this.tableData2[val._pageIndex - 1][val.prop] = val[val.prop]
|
||||||
|
console.log(this.tableData2)
|
||||||
|
},
|
||||||
|
emitButtonClick() {
|
||||||
|
console.log('emitButtonClick')
|
||||||
|
let obj = {}
|
||||||
|
for (let i of this.tableProps2) {
|
||||||
|
obj[i.prop] = ''
|
||||||
|
}
|
||||||
|
this.tableData2.push(obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import inputArea from './components/InputArea.vue'
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'testItems',
|
||||||
|
label: '检验项目'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'checkPoint',
|
||||||
|
label: '检测点'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'inspectionStandards',
|
||||||
|
label: '检验标准'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'measuredValue',
|
||||||
|
label: '实测值',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'samplingResults',
|
||||||
|
label: '抽检结果',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'remark',
|
||||||
|
label: '备注',
|
||||||
|
subcomponent: inputArea
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const tableProps2 = [
|
||||||
|
{
|
||||||
|
prop: 'testItems',
|
||||||
|
label: '检验项目',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'checkPoint',
|
||||||
|
label: '检测点',
|
||||||
|
subcomponent: inputArea
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'inspectionStandards',
|
||||||
|
label: '检验标准',
|
||||||
|
subcomponent: inputArea
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
name: 'CanBeEntered',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableProps,
|
||||||
|
tableData: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点1',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点2',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点1',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点2',
|
||||||
|
inspectionStandards: '0.1-0.4',
|
||||||
|
measuredValue: '',
|
||||||
|
samplingResults: '',
|
||||||
|
remark: ''
|
||||||
|
}
|
||||||
|
],
|
||||||
|
tableProps2,
|
||||||
|
tableData2: [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点1',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '左端点2',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点1',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
testItems: '研磨幅',
|
||||||
|
checkPoint: '右端点2',
|
||||||
|
inspectionStandards: '0.1-0.4'
|
||||||
|
}
|
||||||
|
],
|
||||||
|
addButtonShow: '新增'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
inputChange(val) {
|
||||||
|
console.log('=======')
|
||||||
|
console.log(val)
|
||||||
|
this.tableData[val._pageIndex - 1][val.prop] = val[val.prop]
|
||||||
|
console.log(this.tableData)
|
||||||
|
},
|
||||||
|
inputChange2(val) {
|
||||||
|
console.log('=======')
|
||||||
|
console.log(val)
|
||||||
|
this.tableData2[val._pageIndex - 1][val.prop] = val[val.prop]
|
||||||
|
console.log(this.tableData2)
|
||||||
|
},
|
||||||
|
emitButtonClick() {
|
||||||
|
console.log('emitButtonClick')
|
||||||
|
let obj = {}
|
||||||
|
for (let i of this.tableProps2) {
|
||||||
|
obj[i.prop] = ''
|
||||||
|
}
|
||||||
|
this.tableData2.push(obj)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
66
src/views/table/components/InnerTable.vue
Normal file
66
src/views/table/components/InnerTable.vue
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<template>
|
||||||
|
<el-popover placement="right" width="400" trigger="click">
|
||||||
|
<el-table :data="tableData">
|
||||||
|
<el-table-column prop="date" label="日期" width="120"> </el-table-column>
|
||||||
|
<el-table-column prop="name" label="姓名" width="90"> </el-table-column>
|
||||||
|
<el-table-column prop="sex" label="性别"> </el-table-column>
|
||||||
|
</el-table>
|
||||||
|
<el-button
|
||||||
|
slot="reference"
|
||||||
|
type="text"
|
||||||
|
@click="showInnerTable(injectData.id)"
|
||||||
|
>记录</el-button
|
||||||
|
>
|
||||||
|
</el-popover>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'InnerTable',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
itemProp: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: this.injectData,
|
||||||
|
tableData: []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
showInnerTable(id) {
|
||||||
|
console.log(id)
|
||||||
|
this.tableData = [
|
||||||
|
{
|
||||||
|
id: 1,
|
||||||
|
date: '2016-05-02',
|
||||||
|
name: '王小虎',
|
||||||
|
sex: '男'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 2,
|
||||||
|
date: '2016-05-04',
|
||||||
|
name: '王小虎',
|
||||||
|
sex: '男'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
date: '2016-05-01',
|
||||||
|
name: '王小虎',
|
||||||
|
sex: '男'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 4,
|
||||||
|
date: '2016-05-03',
|
||||||
|
name: '王小虎',
|
||||||
|
sex: '男'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
37
src/views/table/components/InputArea.vue
Normal file
37
src/views/table/components/InputArea.vue
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<div class="tableInner">
|
||||||
|
<el-input v-model="list[itemProp]" @blur="changeInput" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'InputArea',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
},
|
||||||
|
itemProp: {
|
||||||
|
type: String
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
list: this.injectData
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
changeInput() {
|
||||||
|
console.log(this.list)
|
||||||
|
this.$emit('emitData', this.list)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="css">
|
||||||
|
.tableInner .el-input__inner {
|
||||||
|
border: none;
|
||||||
|
padding: 0;
|
||||||
|
height: 33px;
|
||||||
|
}
|
||||||
|
</style>
|
16
src/views/table/components/demo1Sub.vue
Normal file
16
src/views/table/components/demo1Sub.vue
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-tag size="medium">{{ injectData.name }}</el-tag>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'demo1Sub',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
16
src/views/table/components/demo2Sub.vue
Normal file
16
src/views/table/components/demo2Sub.vue
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-tag size="medium">{{ injectData.workTime }}</el-tag>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'demo2Sub',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
19
src/views/table/components/demo3Sub.vue
Normal file
19
src/views/table/components/demo3Sub.vue
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-tag size="medium">11111</el-tag>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'demo3Sub',
|
||||||
|
props: {
|
||||||
|
injectData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({})
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
// console.log(this.injectData)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
801
src/views/table/multiLevelHead.vue
Normal file
801
src/views/table/multiLevelHead.vue
Normal file
@ -0,0 +1,801 @@
|
|||||||
|
<template>
|
||||||
|
<div class="multi-level-head">
|
||||||
|
<h2>多级表头</h2>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>多表头一</h3>
|
||||||
|
<base-table
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<base-table
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
<script>
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'equipmentName',
|
||||||
|
label: '设备名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineA',
|
||||||
|
label: '有效时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'workTime',
|
||||||
|
label: '工作时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'workTimeRate',
|
||||||
|
label: '工作时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineB',
|
||||||
|
label: '关机时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'downTime',
|
||||||
|
label: '停机时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'downTimeRate',
|
||||||
|
label: '停机时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineC',
|
||||||
|
label: '中断损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'faultTime',
|
||||||
|
label: '故障时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'faultTimeRate',
|
||||||
|
label: '故障时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineD',
|
||||||
|
label: '速度损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'actualProcessingSpeed',
|
||||||
|
label: '实际加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'theoreticalProcessingSpeed',
|
||||||
|
label: '理论加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'speedActuationRate',
|
||||||
|
label: '速度开动率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
mounted() {
|
||||||
|
this.tableData = [
|
||||||
|
{
|
||||||
|
equipmentName: '设备1',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备2',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备3',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<script>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>多表头一(自定义列模板)</h3>
|
||||||
|
<base-table
|
||||||
|
:table-props="tableProps3"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<base-table
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
<script>
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'equipmentName',
|
||||||
|
label: '设备名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineA',
|
||||||
|
label: '有效时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'workTime',
|
||||||
|
label: '工作时长',
|
||||||
|
subcomponent: demo2Sub
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'workTimeRate',
|
||||||
|
label: '工作时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineB',
|
||||||
|
label: '关机时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'downTime',
|
||||||
|
label: '停机时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'downTimeRate',
|
||||||
|
label: '停机时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineC',
|
||||||
|
label: '中断损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'faultTime',
|
||||||
|
label: '故障时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'faultTimeRate',
|
||||||
|
label: '故障时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineD',
|
||||||
|
label: '速度损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'actualProcessingSpeed',
|
||||||
|
label: '实际加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'theoreticalProcessingSpeed',
|
||||||
|
label: '理论加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'speedActuationRate',
|
||||||
|
label: '速度开动率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
mounted() {
|
||||||
|
this.tableData = [
|
||||||
|
{
|
||||||
|
equipmentName: '设备1',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备2',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备3',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<script>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>多表头二</h3>
|
||||||
|
<el-button @click="getData">click me 调接口拿数据,动态生成表格</el-button>
|
||||||
|
<base-table
|
||||||
|
v-if="trueTableProps.length > 0 ? true : false"
|
||||||
|
:table-props="trueTableProps"
|
||||||
|
:table-data="tableData3"
|
||||||
|
:span-method="spanMethod"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<base-table
|
||||||
|
:table-props="tableProps"
|
||||||
|
:table-data="tableData"
|
||||||
|
:page="1"
|
||||||
|
:limit="20"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
let aa = []
|
||||||
|
let moreData = [
|
||||||
|
{
|
||||||
|
process: '综合',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '上片投入数量',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '机器人投入数',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '良品总投入数',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '工序损耗',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
process: '上片',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '上片损失',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
process: '精切',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '精切损失',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '精切抽检',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
for (let i = 0; i < 30; i++) {
|
||||||
|
let a = {
|
||||||
|
time: '2022-11-' + i,
|
||||||
|
eqCT: 0.01,
|
||||||
|
eqTT: 0.62,
|
||||||
|
lineCT: 0.73,
|
||||||
|
lineTT: 0.45
|
||||||
|
}
|
||||||
|
aa.push(a)
|
||||||
|
}
|
||||||
|
this.numArr = []
|
||||||
|
let num = 0
|
||||||
|
const tableConfig = []
|
||||||
|
this.chartDataArr = []
|
||||||
|
const dataArr = moreData.map((item, index) => {
|
||||||
|
let dataArr = []
|
||||||
|
if (item.data) {
|
||||||
|
this.chartDataArr = this.chartDataArr.concat(item.data)
|
||||||
|
num += item.data.length
|
||||||
|
this.numArr.push(num)
|
||||||
|
dataArr = item.data.map((z, idx) => {
|
||||||
|
const dataArr = {}
|
||||||
|
z.data.forEach((i) => {
|
||||||
|
// 动态生成tableConfig
|
||||||
|
if (index === 0 && idx === 0) {
|
||||||
|
tableConfig.push({
|
||||||
|
label: i.time,
|
||||||
|
prop: i.time,
|
||||||
|
children: [
|
||||||
|
{ prop: i.time + 'eqCT', label: '设备CT' },
|
||||||
|
{ prop: i.time + 'eqTT', label: '设备TT' },
|
||||||
|
{ prop: i.time + 'lineCT', label: '产线CT' },
|
||||||
|
{
|
||||||
|
prop: i.time + 'lineTT',
|
||||||
|
label: '产线TT',
|
||||||
|
subcomponent: demo3Sub
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 合并数据集
|
||||||
|
dataArr[i.time + 'eqCT'] = i.eqCT
|
||||||
|
dataArr[i.time + 'eqTT'] = i.eqTT
|
||||||
|
dataArr[i.time + 'lineCT'] = i.lineCT
|
||||||
|
dataArr[i.time + 'lineTT'] = i.lineTT
|
||||||
|
dataArr.process = item.process
|
||||||
|
dataArr.equipmentName = z.equipmentName
|
||||||
|
})
|
||||||
|
console.log(dataArr)
|
||||||
|
return dataArr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return dataArr
|
||||||
|
})
|
||||||
|
console.log(tableConfig)
|
||||||
|
this.trueTableProps = this.tableProp2.concat(tableConfig)
|
||||||
|
console.log(this.trueTableProps)
|
||||||
|
this.tableData = this.flatten(dataArr)
|
||||||
|
console.log(this.tableData)
|
||||||
|
},
|
||||||
|
// tree->[]
|
||||||
|
flatten(arr) {
|
||||||
|
var res = []
|
||||||
|
for (var i = 0; i < arr.length; i++) {
|
||||||
|
if (Array.isArray(arr[i])) {
|
||||||
|
res = res.concat(this.flatten(arr[i]))
|
||||||
|
} else {
|
||||||
|
res.push(arr[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
},
|
||||||
|
spanMethod({ rowIndex, columnIndex }) {
|
||||||
|
if (columnIndex === 1) {
|
||||||
|
if (rowIndex === 0) {
|
||||||
|
return [this.numArr[0], 1]
|
||||||
|
} else if (this.numArr.indexOf(rowIndex) >= 0) {
|
||||||
|
const rowNum =
|
||||||
|
this.numArr[this.numArr.indexOf(rowIndex) + 1] -
|
||||||
|
this.numArr[this.numArr.indexOf(rowIndex)]
|
||||||
|
return [rowNum, 1]
|
||||||
|
} else {
|
||||||
|
return [0, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
<script>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
import demo2Sub from './components/demo2Sub'
|
||||||
|
import demo3Sub from './components/demo3Sub'
|
||||||
|
const tableProps = [
|
||||||
|
{
|
||||||
|
prop: 'equipmentName',
|
||||||
|
label: '设备名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineA',
|
||||||
|
label: '有效时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'workTime',
|
||||||
|
label: '工作时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'workTimeRate',
|
||||||
|
label: '工作时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineB',
|
||||||
|
label: '关机时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'downTime',
|
||||||
|
label: '停机时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'downTimeRate',
|
||||||
|
label: '停机时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineC',
|
||||||
|
label: '中断损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'faultTime',
|
||||||
|
label: '故障时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'faultTimeRate',
|
||||||
|
label: '故障时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineD',
|
||||||
|
label: '速度损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'actualProcessingSpeed',
|
||||||
|
label: '实际加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'theoreticalProcessingSpeed',
|
||||||
|
label: '理论加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'speedActuationRate',
|
||||||
|
label: '速度开动率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const tableProp2 = [
|
||||||
|
{
|
||||||
|
prop: 'process',
|
||||||
|
label: '工序'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'equipmentName',
|
||||||
|
label: '设备名称'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
const tableProps3 = [
|
||||||
|
{
|
||||||
|
prop: 'equipmentName',
|
||||||
|
label: '设备名称'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineA',
|
||||||
|
label: '有效时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'workTime',
|
||||||
|
label: '工作时长',
|
||||||
|
subcomponent: demo2Sub
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'workTimeRate',
|
||||||
|
label: '工作时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineB',
|
||||||
|
label: '关机时间(h)',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'downTime',
|
||||||
|
label: '停机时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'downTimeRate',
|
||||||
|
label: '停机时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineC',
|
||||||
|
label: '中断损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'faultTime',
|
||||||
|
label: '故障时长'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'faultTimeRate',
|
||||||
|
label: '故障时长比率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'lineD',
|
||||||
|
label: '速度损失',
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
prop: 'actualProcessingSpeed',
|
||||||
|
label: '实际加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'theoreticalProcessingSpeed',
|
||||||
|
label: '理论加工速度'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prop: 'speedActuationRate',
|
||||||
|
label: '速度开动率'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
export default {
|
||||||
|
name: 'MultiLevelHead',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
tableProps,
|
||||||
|
tableData: [],
|
||||||
|
tableProp2,
|
||||||
|
tableData3: [],
|
||||||
|
numArr: [],
|
||||||
|
chartDataArr: [],
|
||||||
|
trueTableProps: [],
|
||||||
|
tableProps3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.tableData = [
|
||||||
|
{
|
||||||
|
equipmentName: '设备1',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备2',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '设备3',
|
||||||
|
workTime: 100,
|
||||||
|
workTimeRate: 0.5,
|
||||||
|
downTime: 5,
|
||||||
|
downTimeRate: 0.02,
|
||||||
|
faultTime: 0,
|
||||||
|
faultTimeRate: 0,
|
||||||
|
actualProcessingSpeed: 10,
|
||||||
|
theoreticalProcessingSpeed: 10,
|
||||||
|
speedActuationRate: 0.3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
getData() {
|
||||||
|
let aa = []
|
||||||
|
let moreData = [
|
||||||
|
{
|
||||||
|
process: '综合',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '上片投入数量',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '机器人投入数',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '良品总投入数',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '工序损耗',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
process: '上片',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '上片损失',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
process: '精切',
|
||||||
|
data: [
|
||||||
|
{
|
||||||
|
equipmentName: '精切损失',
|
||||||
|
data: aa
|
||||||
|
},
|
||||||
|
{
|
||||||
|
equipmentName: '精切抽检',
|
||||||
|
data: aa
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
for (let i = 0; i < 30; i++) {
|
||||||
|
let a = {
|
||||||
|
time: '2022-11-' + i,
|
||||||
|
eqCT: 0.01,
|
||||||
|
eqTT: 0.62,
|
||||||
|
lineCT: 0.73,
|
||||||
|
lineTT: 0.45
|
||||||
|
}
|
||||||
|
aa.push(a)
|
||||||
|
}
|
||||||
|
this.numArr = []
|
||||||
|
let num = 0
|
||||||
|
const tableConfig = []
|
||||||
|
this.chartDataArr = []
|
||||||
|
const dataArr = moreData.map((item, index) => {
|
||||||
|
let dataArr = []
|
||||||
|
if (item.data) {
|
||||||
|
this.chartDataArr = this.chartDataArr.concat(item.data)
|
||||||
|
num += item.data.length
|
||||||
|
this.numArr.push(num)
|
||||||
|
dataArr = item.data.map((z, idx) => {
|
||||||
|
const dataArr = {}
|
||||||
|
z.data.forEach((i) => {
|
||||||
|
// 动态生成tableConfig
|
||||||
|
if (index === 0 && idx === 0) {
|
||||||
|
tableConfig.push({
|
||||||
|
label: i.time,
|
||||||
|
prop: i.time,
|
||||||
|
children: [
|
||||||
|
{ prop: i.time + 'eqCT', label: '设备CT' },
|
||||||
|
{ prop: i.time + 'eqTT', label: '设备TT' },
|
||||||
|
{ prop: i.time + 'lineCT', label: '产线CT' },
|
||||||
|
{
|
||||||
|
prop: i.time + 'lineTT',
|
||||||
|
label: '产线TT',
|
||||||
|
subcomponent: demo3Sub
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 合并数据集
|
||||||
|
dataArr[i.time + 'eqCT'] = i.eqCT
|
||||||
|
dataArr[i.time + 'eqTT'] = i.eqTT
|
||||||
|
dataArr[i.time + 'lineCT'] = i.lineCT
|
||||||
|
dataArr[i.time + 'lineTT'] = i.lineTT
|
||||||
|
dataArr.process = item.process
|
||||||
|
dataArr.equipmentName = z.equipmentName
|
||||||
|
})
|
||||||
|
console.log(dataArr)
|
||||||
|
return dataArr
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return dataArr
|
||||||
|
})
|
||||||
|
console.log(tableConfig)
|
||||||
|
this.trueTableProps = this.tableProp2.concat(tableConfig)
|
||||||
|
console.log(this.trueTableProps)
|
||||||
|
this.tableData3 = this.flatten(dataArr)
|
||||||
|
console.log(this.tableData3)
|
||||||
|
},
|
||||||
|
// tree->[]
|
||||||
|
flatten(arr) {
|
||||||
|
var res = []
|
||||||
|
for (var i = 0; i < arr.length; i++) {
|
||||||
|
if (Array.isArray(arr[i])) {
|
||||||
|
res = res.concat(this.flatten(arr[i]))
|
||||||
|
} else {
|
||||||
|
res.push(arr[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
},
|
||||||
|
spanMethod({ rowIndex, columnIndex }) {
|
||||||
|
if (columnIndex === 1) {
|
||||||
|
if (rowIndex === 0) {
|
||||||
|
return [this.numArr[0], 1]
|
||||||
|
} else if (this.numArr.indexOf(rowIndex) >= 0) {
|
||||||
|
const rowNum =
|
||||||
|
this.numArr[this.numArr.indexOf(rowIndex) + 1] -
|
||||||
|
this.numArr[this.numArr.indexOf(rowIndex)]
|
||||||
|
return [rowNum, 1]
|
||||||
|
} else {
|
||||||
|
return [0, 0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.multi-level-head {
|
||||||
|
.demo-box {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
.description code {
|
||||||
|
color: #5e6d82;
|
||||||
|
background-color: #e6effb;
|
||||||
|
margin: 0 4px;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 3px;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
139
src/views/table/pagination.vue
Normal file
139
src/views/table/pagination.vue
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
<template>
|
||||||
|
<div class="pagination">
|
||||||
|
<h2>分页</h2>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>完整功能</h3>
|
||||||
|
<pagination :limit="20" :total="100" />
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<pagination :limit="20" :total="100" />
|
||||||
|
<<span>/template</span>>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>简单版固定的pageSize</h3>
|
||||||
|
<pagination :limit="3" :total="10" layout="total, prev, pager, next" />
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<pagination :limit="3" :total="10" layout="total, prev, pager, next" />
|
||||||
|
<<span>/template</span>>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>totla为0时分页消失</h3>
|
||||||
|
<el-button type="primary" @click="toggleTotal"
|
||||||
|
>点击改变total为0或者100</el-button
|
||||||
|
>
|
||||||
|
<pagination :limit="20" :total="total" />
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<pagination :limit="20" :total="total" />
|
||||||
|
<<span>/template</span>>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>改变当前page或者pageSize</h3>
|
||||||
|
<pagination
|
||||||
|
:limit.sync="listQuery.size"
|
||||||
|
:page.sync="listQuery.current"
|
||||||
|
:total="200"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<pagination
|
||||||
|
:limit.sync="listQuery.size"
|
||||||
|
:page.sync="listQuery.current"
|
||||||
|
:total="200"
|
||||||
|
@pagination="getList"
|
||||||
|
/>
|
||||||
|
<<span>/template</span>>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
<div class="demo-box">
|
||||||
|
<h3>完整功能按钮带背景色的</h3>
|
||||||
|
<pagination :limit="20" :total="100" :background="true" />
|
||||||
|
<el-collapse>
|
||||||
|
<el-collapse-item title="显示代码">
|
||||||
|
<div class="description"></div>
|
||||||
|
<div>
|
||||||
|
<pre>
|
||||||
|
<<span>template</span>>
|
||||||
|
<pagination :limit="20" :total="100" :background="true" />
|
||||||
|
<<span>/template</span>>
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: 'paginationShow',
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
total: 100,
|
||||||
|
listQuery: {
|
||||||
|
current: 1,
|
||||||
|
size: 20
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
toggleTotal() {
|
||||||
|
this.total = this.total === 0 ? 100 : 0
|
||||||
|
},
|
||||||
|
getList(val) {
|
||||||
|
console.log(val)
|
||||||
|
console.log(this.listQuery)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.pagination {
|
||||||
|
.demo-box {
|
||||||
|
margin-bottom: 40px;
|
||||||
|
.description code {
|
||||||
|
color: #5e6d82;
|
||||||
|
background-color: #e6effb;
|
||||||
|
margin: 0 4px;
|
||||||
|
display: inline-block;
|
||||||
|
padding: 1px 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
border-radius: 3px;
|
||||||
|
height: 18px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
1214
src/views/table/singleHead.vue
Normal file
1214
src/views/table/singleHead.vue
Normal file
File diff suppressed because it is too large
Load Diff
BIN
theme/fonts/element-icons.ttf
Normal file
BIN
theme/fonts/element-icons.ttf
Normal file
Binary file not shown.
BIN
theme/fonts/element-icons.woff
Normal file
BIN
theme/fonts/element-icons.woff
Normal file
Binary file not shown.
1
theme/index.css
Normal file
1
theme/index.css
Normal file
File diff suppressed because one or more lines are too long
4
vue.config.js
Normal file
4
vue.config.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
const { defineConfig } = require('@vue/cli-service')
|
||||||
|
module.exports = defineConfig({
|
||||||
|
transpileDependencies: true
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user