├── src
├── mock
│ └── mock.js
├── components
│ ├── game
│ │ └── five
│ │ │ ├── index.js
│ │ │ └── index.vue
│ ├── icon
│ │ ├── font
│ │ │ ├── iconfont.eot
│ │ │ ├── iconfont.ttf
│ │ │ ├── iconfont.woff
│ │ │ └── demo.css
│ │ ├── icon.js
│ │ └── icon.vue
│ ├── talk
│ │ ├── talk.js
│ │ └── talk.vue
│ ├── login
│ │ ├── login.js
│ │ └── login.vue
│ ├── canvas
│ │ ├── canvas.js
│ │ └── canvas.vue
│ ├── search
│ │ ├── search_input.js
│ │ └── search_input.vue
│ ├── todoList
│ │ ├── todoList.js
│ │ ├── todoList.vue
│ │ ├── Todo.vue
│ │ └── index.vue
│ ├── quiArrow.vue
│ ├── quiButton.vue
│ ├── echarts
│ │ ├── index.js
│ │ ├── polar.vue
│ │ ├── sLine.vue
│ │ ├── pie.vue
│ │ ├── bar.vue
│ │ ├── gantt.vue
│ │ ├── radar.vue
│ │ ├── graph.vue
│ │ ├── relation.vue
│ │ ├── scatter.vue
│ │ ├── cMap.vue
│ │ ├── tree.vue
│ │ ├── calender.vue
│ │ └── sMap.vue
│ ├── css
│ │ ├── reset.import.css
│ │ ├── qui-nav.import.css
│ │ └── qui-btn.import.css
│ ├── quiNav.vue
│ └── quiList.vue
├── assets
│ ├── css
│ │ ├── index.css
│ │ ├── App.css
│ │ └── reset.import.css
│ ├── logo.png
│ └── img
│ │ ├── bg.jpg
│ │ └── mik.jpg
├── pages
│ ├── blog
│ │ └── index.vue
│ ├── game
│ │ └── index.vue
│ ├── mock
│ │ └── index.vue
│ ├── music
│ │ └── index.vue
│ ├── apis
│ │ ├── icon
│ │ │ └── index.vue
│ │ ├── backTotop
│ │ │ └── index.vue
│ │ ├── background
│ │ │ └── index.vue
│ │ ├── todolist
│ │ │ └── index.vue
│ │ ├── starrating
│ │ │ └── index.vue
│ │ ├── mark
│ │ │ └── index.vue
│ │ ├── carousel
│ │ │ └── index.vue
│ │ ├── permission
│ │ │ └── index.vue
│ │ ├── process
│ │ │ └── index.vue
│ │ ├── form
│ │ │ └── index.vue
│ │ ├── dataPiker
│ │ │ └── index.vue
│ │ └── table
│ │ │ └── index.vue
│ ├── video
│ │ └── index.vue
│ ├── vue_ppt
│ │ └── index.vue
│ ├── gallery
│ │ └── index.vue
│ ├── navTable
│ │ └── index.vue
│ ├── introduce
│ │ ├── bg.jpg
│ │ └── index.vue
│ ├── gal
│ │ └── ten.vue
│ ├── todoList
│ │ └── index.vue
│ ├── Code404
│ │ └── Code404.vue
│ ├── Code500
│ │ └── Code500.vue
│ ├── next
│ │ └── index.vue
│ ├── editor
│ │ ├── rich
│ │ │ └── index.vue
│ │ ├── markdown
│ │ │ └── index.vue
│ │ └── json
│ │ │ └── index.vue
│ ├── animation
│ │ └── index.vue
│ ├── echarts
│ │ └── index.vue
│ ├── shop
│ │ └── index.vue
│ ├── markdown
│ │ └── index.vue
│ ├── login
│ │ └── login.vue
│ ├── index.vue
│ ├── icon
│ │ └── index.vue
│ └── upload
│ │ └── index.vue
├── vuex
│ └── store.js
├── utils
│ └── mock.js
├── store
│ └── store.js
├── App.vue
├── main.js
└── router
│ └── index.js
├── cypress.json
├── bg.jpg
├── babel.config.js
├── img
├── nav.png
├── code.png
├── index.png
├── login.png
├── rich.png
├── echarts.png
├── markdown.png
└── todolist.png
├── tests
├── unit
│ ├── .eslintrc.js
│ └── example.spec.js
└── e2e
│ ├── .eslintrc.js
│ ├── specs
│ └── test.js
│ ├── support
│ ├── index.js
│ └── commands.js
│ └── plugins
│ └── index.js
├── Vue+element.xmind
├── Vue+element管理后台.jpg
├── public
├── favicon.ico
└── index.html
├── mock
├── mock.json
└── shop.json
├── .gitignore
├── vue.config.js
├── README.md
└── package.json
/src/mock/mock.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/game/five/index.js:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/components/game/five/index.vue:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/css/index.css:
--------------------------------------------------------------------------------
1 | div{
2 | color:red;
3 | }
4 |
--------------------------------------------------------------------------------
/cypress.json:
--------------------------------------------------------------------------------
1 | {
2 | "pluginsFile": "tests/e2e/plugins/index.js"
3 | }
4 |
--------------------------------------------------------------------------------
/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/bg.jpg
--------------------------------------------------------------------------------
/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: ["@vue/cli-plugin-babel/preset"]
3 | };
4 |
--------------------------------------------------------------------------------
/img/nav.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/nav.png
--------------------------------------------------------------------------------
/tests/unit/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: {
3 | mocha: true
4 | }
5 | };
6 |
--------------------------------------------------------------------------------
/img/code.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/code.png
--------------------------------------------------------------------------------
/img/index.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/index.png
--------------------------------------------------------------------------------
/img/login.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/login.png
--------------------------------------------------------------------------------
/img/rich.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/rich.png
--------------------------------------------------------------------------------
/src/pages/blog/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | blog working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/game/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | game working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/mock/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | mock working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/music/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | music working
4 |
5 |
6 |
--------------------------------------------------------------------------------
/img/echarts.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/echarts.png
--------------------------------------------------------------------------------
/img/markdown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/markdown.png
--------------------------------------------------------------------------------
/img/todolist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/img/todolist.png
--------------------------------------------------------------------------------
/src/pages/apis/icon/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | icon working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/video/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | video working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/vue_ppt/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | ppt working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Vue+element.xmind:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/Vue+element.xmind
--------------------------------------------------------------------------------
/Vue+element管理后台.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/Vue+element管理后台.jpg
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/public/favicon.ico
--------------------------------------------------------------------------------
/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/assets/logo.png
--------------------------------------------------------------------------------
/src/pages/gallery/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | gallery working !
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/navTable/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | navTable working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/assets/img/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/assets/img/bg.jpg
--------------------------------------------------------------------------------
/src/pages/apis/backTotop/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | backToTop working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/assets/img/mik.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/assets/img/mik.jpg
--------------------------------------------------------------------------------
/src/pages/apis/background/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | background working!
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/apis/todolist/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/src/pages/introduce/bg.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/pages/introduce/bg.jpg
--------------------------------------------------------------------------------
/src/pages/introduce/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | Calamus
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/icon/font/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/components/icon/font/iconfont.eot
--------------------------------------------------------------------------------
/src/components/icon/font/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/components/icon/font/iconfont.ttf
--------------------------------------------------------------------------------
/src/components/icon/font/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/calamus0427/vue-element-admin-calamus/master/src/components/icon/font/iconfont.woff
--------------------------------------------------------------------------------
/src/components/icon/icon.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import CLIcon from './icon.vue';
3 |
4 | Vue.component('cl-icon', CLIcon);
5 |
6 | export default CLIcon;
--------------------------------------------------------------------------------
/src/components/talk/talk.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import clTalk from './talk.vue';
3 |
4 | Vue.component('cl-talk', clTalk);
5 |
6 | export default clTalk;
7 |
--------------------------------------------------------------------------------
/src/components/login/login.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import CLLogin from "./login.vue";
3 |
4 | Vue.component("cl-login", CLLogin);
5 |
6 | export default CLLogin;
7 |
--------------------------------------------------------------------------------
/src/components/canvas/canvas.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import CLCanvasBg from './canvas.vue';
3 |
4 | Vue.component('cl-canvasBg', CLCanvasBg);
5 |
6 | export default CLCanvasBg;
7 |
--------------------------------------------------------------------------------
/src/components/search/search_input.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import CLSearch from './search_input.vue';
3 |
4 | Vue.component('cl-search', CLSearch);
5 |
6 | export default CLSearch;
--------------------------------------------------------------------------------
/src/components/todoList/todoList.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import CLtodolist from './index.vue';
3 |
4 | Vue.component('cl-todolist', CLtodolist);
5 |
6 | export default CLtodolist;
7 |
--------------------------------------------------------------------------------
/src/pages/gal/ten.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/src/pages/todoList/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/tests/e2e/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: ["cypress"],
3 | env: {
4 | mocha: true,
5 | "cypress/globals": true
6 | },
7 | rules: {
8 | strict: "off"
9 | }
10 | };
11 |
--------------------------------------------------------------------------------
/src/vuex/store.js:
--------------------------------------------------------------------------------
1 | // const store = new Vuex.Store({
2 | // state: {
3 | // count: 0
4 | // },
5 | // mutations: {
6 | // increment (state) {
7 | // state.count++
8 | // }
9 | // }
10 | // })
--------------------------------------------------------------------------------
/src/utils/mock.js:
--------------------------------------------------------------------------------
1 | import Mock from 'mockjs';
2 |
3 | export default Mock.mock('http://g.cn', {
4 |
5 | 'name' : '@name',
6 |
7 | 'age|1-100': 100,
8 |
9 | 'color' : '@color'
10 |
11 | });
--------------------------------------------------------------------------------
/tests/e2e/specs/test.js:
--------------------------------------------------------------------------------
1 | // https://docs.cypress.io/api/introduction/api.html
2 |
3 | describe("My First Test", () => {
4 | it("Visits the app root url", () => {
5 | cy.visit("/");
6 | cy.contains("h1", "Welcome to Your Vue.js App");
7 | });
8 | });
9 |
--------------------------------------------------------------------------------
/src/store/store.js:
--------------------------------------------------------------------------------
1 | const STORAGE_KEY = 'todos-vuejs'
2 | export default{
3 | fetch(){
4 | return JSON.parse(window.localStorage.getItem(STORAGE_KEY || ''))
5 | },
6 | save(items){
7 | window.localStorage.setItem(STORAGE_KEY,JSON.stringify(items))
8 | }
9 | }
--------------------------------------------------------------------------------
/src/components/quiArrow.vue:
--------------------------------------------------------------------------------
1 |
2 | ❯
3 |
4 |
5 |
10 |
17 |
18 |
--------------------------------------------------------------------------------
/mock/mock.json:
--------------------------------------------------------------------------------
1 | {
2 | "l1": {
3 | "l1_1": [
4 | "l1_1_1",
5 | "l1_1_2"
6 | ],
7 | "l1_2": {
8 | "l1_2_1": 121
9 | }
10 | },
11 | "l2": {
12 | "l2_1": null,
13 | "l2_2": true,
14 | "l2_3": {}
15 | }
16 | }
--------------------------------------------------------------------------------
/src/pages/Code404/Code404.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 404:页面不存在
4 |
5 |
6 |
17 |
18 |
--------------------------------------------------------------------------------
/src/pages/Code500/Code500.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 500:内部服务器错误
4 |
5 |
6 |
17 |
18 |
--------------------------------------------------------------------------------
/src/pages/next/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/components/login/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
16 |
21 |
22 |
--------------------------------------------------------------------------------
/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
15 |
16 |
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | package-lock.json
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 | .history
25 | .VSCodeCounter
26 | package-lock.json
27 | out/linecount.json
28 | out
--------------------------------------------------------------------------------
/src/components/talk/talk.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
18 |
19 |
20 |
21 |
26 |
--------------------------------------------------------------------------------
/tests/unit/example.spec.js:
--------------------------------------------------------------------------------
1 | import { expect } from "chai";
2 | import { shallowMount } from "@vue/test-utils";
3 | import HelloWorld from "@/components/HelloWorld.vue";
4 |
5 | describe("HelloWorld.vue", () => {
6 | it("renders props.msg when passed", () => {
7 | const msg = "new message";
8 | const wrapper = shallowMount(HelloWorld, {
9 | propsData: { msg }
10 | });
11 | expect(wrapper.text()).to.include(msg);
12 | });
13 | });
14 |
--------------------------------------------------------------------------------
/src/assets/css/App.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 0;
3 | margin: 0;
4 | }
5 |
6 | #app {
7 | font-family: punctuation, "PingFangSC-Regular", "Microsoft Yahei", "sans-serif";
8 | -webkit-font-smoothing: subpixel-antialiased;
9 | /* text-align: center; */
10 | color: #2c3e50;
11 | }
12 |
13 | .page-title {
14 | color: #00A0D8;
15 | font-size: 36px;
16 | font-weight: bold;
17 | padding: 30px 0;
18 | }
19 |
20 | .page-title a {
21 | color: #00A0D8;
22 | }
--------------------------------------------------------------------------------
/src/pages/editor/rich/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
24 |
--------------------------------------------------------------------------------
/src/components/quiButton.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
22 |
26 |
27 |
--------------------------------------------------------------------------------
/src/components/todoList/todoList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{cmsg}}
4 | {{msg}}
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/components/search/search_input.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
26 |
--------------------------------------------------------------------------------
/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | calamus-vue-element-admin
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/mock/shop.json:
--------------------------------------------------------------------------------
1 | {
2 | "status": 1,
3 | "result": {
4 | "totalMoney": 100,
5 | "list": [{
6 | "productId": "1",
7 | "productName": "坚果",
8 | "productPrice": 20,
9 | "parts": [{
10 | "partsId": "1001",
11 | "partsName": "蔓越莓干"
12 | }]
13 | },
14 | {
15 | "productId": "2",
16 | "productName": "小鱼仔",
17 | "productPrice": 20,
18 | "parts": [{
19 | "partsId": "1002",
20 | "partsName": "芒果干"
21 | }]
22 | }
23 | ]
24 | },
25 | "message": ""
26 | }
--------------------------------------------------------------------------------
/tests/e2e/support/index.js:
--------------------------------------------------------------------------------
1 | // ***********************************************************
2 | // This example support/index.js is processed and
3 | // loaded automatically before your test files.
4 | //
5 | // This is a great place to put global configuration and
6 | // behavior that modifies Cypress.
7 | //
8 | // You can change the location of this file or turn off
9 | // automatically serving support files with the
10 | // 'supportFile' configuration option.
11 | //
12 | // You can read more here:
13 | // https://on.cypress.io/configuration
14 | // ***********************************************************
15 |
16 | // Import commands.js using ES2015 syntax:
17 | import "./commands";
18 |
19 | // Alternatively you can use CommonJS syntax:
20 | // require('./commands')
21 |
--------------------------------------------------------------------------------
/src/components/echarts/index.js:
--------------------------------------------------------------------------------
1 | import Vue from "vue";
2 | import Bar from "./bar.vue";
3 | import Pie from "./pie.vue";
4 | import ChineseMap from "./cMap.vue";
5 | import Calender from "./calender.vue";
6 | import Polar from "./polar.vue";
7 | import Scatter from "./scatter.vue";
8 | import Radar from "./radar.vue";
9 | import SMap from "./sMap.vue";
10 | import GMap from "./gMap.vue";
11 | import SLine from "./sLine.vue";
12 | import Tree from "./tree.vue";
13 | import Relation from "./relation.vue";
14 | import Graph from "./graph.vue";
15 |
16 | const components = [Tree,Bar, ChineseMap,Calender,Pie,Polar,Scatter,Radar,SMap,GMap,SLine,Relation,Graph];
17 |
18 | components.forEach(component => {
19 | Vue.component(component.name, component);
20 | });
21 |
22 | export default components;
--------------------------------------------------------------------------------
/src/assets/css/reset.import.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Basic reset css for mobile
3 | * author : cheunglong
4 | */
5 | html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote,a,address,
6 | em, img, ol, ul, li, fieldset, form, label, legend, table, tbody, tfoot, thead, tr, th, td,i,b,s {
7 | margin:0; padding:0; border:0; font-weight:inherit; font-style:inherit; font-size:100%;font-family:microsoft yahei,Helvetica,Arial,sans-serif;
8 | }
9 |
10 |
11 | ul,ol{list-style: none}
12 | a img { border:none;vertical-align: top; }
13 | a {text-decoration: none;}
14 |
15 | button {overflow:visible;padding:0;margin:0;border:0 none;background-color:transparent;font-family:microsoft yahei,Helvetica,Arial,sans-serif;}
16 | button::-moz-focus-inner { padding:0;}
17 |
18 | input[type=password] {-webkit-text-security:disc;}
19 | textarea:focus,input:focus,button:focus{outline:none;}
20 | body {word-wrap:break-word;}
21 | * {-webkit-tap-highlight-color:rgba(0,0,0,0);}
--------------------------------------------------------------------------------
/src/components/css/reset.import.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Basic reset css for mobile
3 | * author : cheunglong
4 | */
5 | html, body, div, span, iframe, h1, h2, h3, h4, h5, h6, p, blockquote,a,address,
6 | em, img, ol, ul, li, fieldset, form, label, legend, table, tbody, tfoot, thead, tr, th, td,i,b,s {
7 | margin:0; padding:0; border:0; font-weight:inherit; font-style:inherit; font-size:100%;font-family:microsoft yahei,Helvetica,Arial,sans-serif;
8 | }
9 |
10 |
11 | ul,ol{list-style: none}
12 | a img { border:none;vertical-align: top; }
13 | a {text-decoration: none;}
14 |
15 | button {overflow:visible;padding:0;margin:0;border:0 none;background-color:transparent;font-family:microsoft yahei,Helvetica,Arial,sans-serif;}
16 | button::-moz-focus-inner { padding:0;}
17 |
18 | input[type=password] {-webkit-text-security:disc;}
19 | textarea:focus,input:focus,button:focus{outline:none;}
20 | body {word-wrap:break-word;}
21 | * {-webkit-tap-highlight-color:rgba(0,0,0,0);}
--------------------------------------------------------------------------------
/tests/e2e/support/commands.js:
--------------------------------------------------------------------------------
1 | // ***********************************************
2 | // This example commands.js shows you how to
3 | // create various custom commands and overwrite
4 | // existing commands.
5 | //
6 | // For more comprehensive examples of custom
7 | // commands please read more here:
8 | // https://on.cypress.io/custom-commands
9 | // ***********************************************
10 | //
11 | //
12 | // -- This is a parent command --
13 | // Cypress.Commands.add("login", (email, password) => { ... })
14 | //
15 | //
16 | // -- This is a child command --
17 | // Cypress.Commands.add("drag", { prevSubject: 'element'}, (subject, options) => { ... })
18 | //
19 | //
20 | // -- This is a dual command --
21 | // Cypress.Commands.add("dismiss", { prevSubject: 'optional'}, (subject, options) => { ... })
22 | //
23 | //
24 | // -- This is will overwrite an existing command --
25 | // Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... })
26 |
--------------------------------------------------------------------------------
/src/pages/animation/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | A
4 | B
5 |
6 |
7 |
8 |
9 |
10 |
28 |
29 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/vue.config.js:
--------------------------------------------------------------------------------
1 |
2 |
3 | module.exports = {
4 | // 基本路径
5 | publicPath: "./",
6 |
7 | // 输出文件目录
8 | outputDir: "dist",
9 |
10 | assetsDir: "static",
11 |
12 | // see https://github.com/vuejs/vue-cli/blob/dev/docs/webpack.md
13 | // webpack配置
14 | // chainWebpack: config => {},
15 | configureWebpack: config => {
16 | config.devtool = 'source-map'
17 | if (process.env.NODE_ENV === "production") {
18 | // 为生产环境修改配置...
19 | config.mode = "production";
20 | } else {
21 | // 为开发环境修改配置...
22 | config.mode = "development";
23 | }
24 | let plugin = [];
25 | config.plugins = [...config.plugins, ...plugin];
26 | config.resolve.alias.vue$ = "vue/dist/vue.esm.js";
27 | },
28 | // 生产环境是否生成 sourceMap 文件
29 | productionSourceMap: false,
30 |
31 | // css相关配置
32 | // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
33 | parallel: require("os").cpus().length > 1,
34 |
35 | lintOnSave: false
36 | };
37 |
--------------------------------------------------------------------------------
/tests/e2e/plugins/index.js:
--------------------------------------------------------------------------------
1 | // https://docs.cypress.io/guides/guides/plugins-guide.html
2 |
3 | // if you need a custom webpack configuration you can uncomment the following import
4 | // and then use the `file:preprocessor` event
5 | // as explained in the cypress docs
6 | // https://docs.cypress.io/api/plugins/preprocessors-api.html#Examples
7 |
8 | /* eslint-disable import/no-extraneous-dependencies, global-require, arrow-body-style */
9 | // const webpack = require('@cypress/webpack-preprocessor')
10 |
11 | module.exports = (on, config) => {
12 | // on('file:preprocessor', webpack({
13 | // webpackOptions: require('@vue/cli-service/webpack.config'),
14 | // watchOptions: {}
15 | // }))
16 |
17 | return Object.assign({}, config, {
18 | fixturesFolder: "tests/e2e/fixtures",
19 | integrationFolder: "tests/e2e/specs",
20 | screenshotsFolder: "tests/e2e/screenshots",
21 | videosFolder: "tests/e2e/videos",
22 | supportFile: "tests/e2e/support/index.js"
23 | });
24 | };
25 |
--------------------------------------------------------------------------------
/src/pages/echarts/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
23 |
24 |
37 |
38 |
--------------------------------------------------------------------------------
/src/pages/shop/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | 1
4 |
5 |
6 |
7 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/pages/editor/markdown/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
vue-markdown
4 |
5 | ```
6 | import VueMarkdown from 'vue-markdown'
7 | export default {
8 | name: 'editor',
9 | components: {
10 | VueMarkdown
11 | // or 'mavon-editor': mavonEditor
12 | },
13 | data:{
14 | value:"i am a ~~tast~~ **test**.",
15 | },
16 | }
17 | ```
18 |
19 |
20 |
21 |
22 |
23 |
35 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Vue Element 管理后台
2 | ## 项目运行
3 | #### [在线预览](https://calamus0427.github.io/vue-element-admin-calamus/#/login)
4 | 安装依赖:npm install
5 |
6 | 运行:npm run dev
7 |
8 | 编译:npm run build
9 |
10 |
11 | ## 技术栈
12 | - vue
13 | - element
14 | - vue-router
15 | - vue-markdown
16 | - echarts
17 | - vue-codemirror
18 | - vue-editor2
19 | - sass
20 | - mavon editor
21 | - mockjs
22 | - webpack
23 | - axios
24 |
25 | ## 基础功能
26 | - [x] 登录
27 |
28 | 
29 | - [x] 首页
30 |
31 | 
32 | - 基础组件们
33 |
34 | 
35 | - [x] echarts和vue的应用
36 | 
37 | - [x] vue富文本编辑器
38 | 
39 | - [x] vuemarkdown编辑器
40 | 
41 | - [x] vue代码编辑器
42 | 
43 | - [ ] vue音乐播放器(未完成)
44 | - [ ] vue视频播放器(未完成)
45 | - [x] vue和localstorage实现todolist
46 | 
47 |
--------------------------------------------------------------------------------
/src/pages/markdown/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
vue-markdown
10 |
11 | ```
12 | import VueMarkdown from 'vue-markdown'
13 | export default {
14 | name: 'editor',
15 | components: {
16 | VueMarkdown
17 | // or 'mavon-editor': mavonEditor
18 | },
19 | data:{
20 | value:"i am a ~~tast~~ **test**.",
21 | },
22 | }
23 | ```
24 |
25 |
26 |
27 |
28 |
29 |
44 |
51 |
--------------------------------------------------------------------------------
/src/components/quiNav.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
48 |
52 |
53 |
--------------------------------------------------------------------------------
/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue' ;
4 | import App from './App';
5 |
6 | import VueRouter from 'vue-router';
7 | import router from './router';
8 |
9 | import ElementUI from 'element-ui';
10 | import 'element-ui/lib/theme-chalk/index.css';
11 |
12 | import axios from 'axios';
13 | Vue.prototype.$http = axios
14 |
15 | import Vuex from 'vuex';
16 | import store from './vuex/store';
17 |
18 | // import Mock from 'mockjs';
19 |
20 |
21 | //图标组件
22 | import './components/icon/font/iconfont.css' ;
23 | import './components/icon/font/iconfont.js' ;
24 | import './components/icon/icon.js' ; //icon
25 | //对话框组件
26 | import './components/talk/talk.js'; //talk
27 | //搜索组件
28 | import './components/search/search_input.js';
29 | //canvas组件
30 | import './components/canvas/canvas.js';
31 | //登录组件
32 | import "./components/login/login.js";
33 | //Echarts组件们
34 | // import "./components/echarts/histogram/demo1.js";
35 | // import "./components/echarts/histogram/demo2.js";
36 | //todolist组件
37 | import './components/todoList/todoList.js';
38 |
39 |
40 |
41 |
42 | //关闭生产过程中的提示
43 | Vue.config.productionTip = false ;
44 |
45 | Vue.use(ElementUI) ;
46 | Vue.use(Vuex) ;
47 | Vue.use(VueRouter) ;
48 |
49 | new Vue({
50 | store,
51 | router,
52 | render: h => h(App)
53 | }).$mount("#app");
--------------------------------------------------------------------------------
/src/pages/editor/json/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
It's Example page with Vue-CodeMirror
4 |
Codemirror Example:
5 |
6 |
{{ code }}
7 |
11 |
12 |
13 |
14 |
15 |
50 |
51 |
59 |
60 |
--------------------------------------------------------------------------------
/src/components/css/qui-nav.import.css:
--------------------------------------------------------------------------------
1 | /*QUI nav*/
2 |
3 | .qui-nav{
4 | display: -webkit-box;
5 | display: -webkit-flex;
6 | display: flex;
7 | font-size: 0;
8 | text-align: center;
9 | }
10 | .qui-nav .nav-item{
11 | -webkit-flex:1;
12 | flex:1;
13 | height: 40px;
14 | line-height: 40px;
15 | position: relative;
16 | overflow: hidden;
17 | font-size: 14px;
18 | }
19 | .qui-nav .nav-item .nav-txt{
20 | display: block;
21 | position: relative;
22 | height: 100%;
23 | }
24 | .qui-nav .nav-item .nav-txt:after{
25 | content: '';
26 | display: block;
27 | position: relative;
28 | height: 4px;
29 | background-color: #ffcd00;
30 | opacity: 0;
31 | -webkit-transform: scaleX(0);
32 | transform: scaleX(0);
33 | -webkit-transition: all .2s;
34 | transition: all .2s;
35 | width: 100%;
36 | position: absolute;
37 | bottom:0;
38 | left: 0;
39 | }
40 | .qui-nav .nav-item.active{
41 | color: #ffcd00;
42 | }
43 | .qui-nav .nav-item.active .nav-txt:after{
44 | -webkit-transform: scaleX(1);
45 | transform: scaleX(1);
46 | opacity: 1;
47 | }
48 |
49 | /*active态下方不铺满*/
50 | .qui-nav.nav-type-2 .nav-item .nav-txt{
51 | display: inline-block;
52 | padding: 0 5px;
53 | }
54 |
55 | /*居中*/
56 | .qui-nav.nav-type-3{
57 | display: block;
58 | }
59 | .qui-nav.nav-type-3 .nav-item{
60 | -webkit-flex: inherit;
61 | flex: inherit;
62 | display: inline-block;
63 | width: 110px;
64 | }
65 |
--------------------------------------------------------------------------------
/src/pages/apis/starrating/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 默认不区分颜色
7 |
8 |
9 |
10 | 区分颜色
11 |
14 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
29 |
30 |
31 |
32 |
38 |
39 |
40 |
41 |
42 |
43 |
56 |
--------------------------------------------------------------------------------
/src/components/echarts/polar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
80 |
81 |
87 |
--------------------------------------------------------------------------------
/src/components/echarts/sLine.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
72 |
73 |
79 |
--------------------------------------------------------------------------------
/src/components/quiList.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{tipsText}}
4 |
5 |
6 |
7 |
8 |
9 |
42 |
69 |
70 |
--------------------------------------------------------------------------------
/src/components/todoList/Todo.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
10 |
11 |
18 |
19 |
20 |
21 |
71 |
--------------------------------------------------------------------------------
/src/pages/login/login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
13 |
14 |
15 | 账号密码不能为空,随便输入即可
16 |
17 |
18 | 登录
19 | 重置
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
66 |
73 |
74 |
--------------------------------------------------------------------------------
/src/pages/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | -
7 | element管理后台
8 |
9 | -
10 | 侧边栏
11 |
12 | -
13 | 博客
14 |
15 | -
16 | 音乐播放器
17 |
18 | -
19 | 图标
20 |
21 | -
22 | todoList
23 |
24 | -
25 | 购物车
26 |
27 | -
28 | 洛天依--十重幻想小游戏
29 |
30 | -
31 | 登录
32 |
33 | -
34 | mock
35 |
36 |
37 |
38 |
39 |
40 |
70 |
94 |
--------------------------------------------------------------------------------
/src/pages/apis/mark/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 评论
7 |
8 |
9 | 回复
10 |
11 |
12 |
13 |
14 | 点我查看
15 |
16 |
17 |
18 | 评论
19 |
20 |
21 |
22 | 回复
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | 评论
31 |
32 |
33 | 回复
34 |
35 |
36 |
37 |
38 | 评论
39 |
40 |
41 | 回复
42 |
43 |
44 |
45 | 数据查询
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
60 |
61 |
--------------------------------------------------------------------------------
/src/components/echarts/pie.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
85 |
86 |
92 |
--------------------------------------------------------------------------------
/src/components/icon/icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
16 |
17 |
18 |
19 |
22 |
23 |
51 |
52 |
102 |
103 |
--------------------------------------------------------------------------------
/src/pages/apis/carousel/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 默认 Hover 指示器触发
7 |
8 |
9 | {{ item }}
10 |
11 |
12 |
13 |
14 | Click 指示器触发
15 |
16 |
17 | {{ item }}
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | {{ item }}
26 |
27 |
28 |
29 |
30 |
31 |
32 | {{ item }}
33 |
34 |
35 |
36 |
37 |
38 |
39 | {{ item }}
40 |
41 |
42 |
43 |
44 |
45 |
46 |
58 |
59 |
77 |
--------------------------------------------------------------------------------
/src/components/echarts/bar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
91 |
92 |
98 |
--------------------------------------------------------------------------------
/src/components/css/qui-btn.import.css:
--------------------------------------------------------------------------------
1 | /*QUI button*/
2 | .qui-btn{
3 | position: relative;
4 | display: inline-block;
5 | border-radius: 2px;
6 | border:1px solid #C3C8CC;
7 | color: #000;
8 | box-sizing: border-box;
9 | font-size: 0;
10 | z-index:1;
11 | }
12 | .qui-btn .ico{
13 | display: inline-block;
14 | background-size: 100% 100%;
15 | position: relative;
16 | /*top:50%;*/
17 | /*-webkit-transform: translateY(-50%);*/
18 | /*transform: translateY(-50%);*/
19 | margin-right: 3px;
20 | width: 20px;
21 | height: 20px;
22 | vertical-align: -4px;
23 | }
24 | .qui-btn span {
25 | font-size: 14px;
26 | display: inline-block;
27 | height: 100%;
28 | /*line-height: 2;*/
29 | box-sizing: border-box;
30 | }
31 | .qui-btn.bor{
32 | border-color: transparent;
33 | }
34 | .bor:after{
35 | content: '';
36 | position: absolute;
37 | z-index: 1;
38 | border-radius:4px;
39 | background-color: transparent;
40 | border: 1px solid #C3C8CC;
41 | width: 200%;
42 | height: 200%;
43 | -webkit-transform:scale(.5);
44 | transform:scale(.5);
45 | -webkit-transform-origin: 0 0;
46 | transform-origin: 0 0;
47 | /*box-sizing: border-box;*/
48 | /*left: 0;*/
49 | /*top: 0;*/
50 | padding: 1px;
51 | left: -1px;
52 | top: -1px;
53 | }
54 | /*小尺寸按钮*/
55 | .qui-btn.small{
56 | min-width: 60px;
57 | text-align: center;
58 | height: 30px;
59 | line-height: 30px;
60 | /*margin: 0 5px;*/
61 | }
62 | /*带icon的按钮*/
63 | .qui-btn.icon{
64 | padding: 0 10px;
65 | min-width: auto;
66 | width: auto;
67 | }
68 | /*大尺寸按钮--一行展示一个*/
69 | .qui-btn.large{
70 | text-align: center;
71 | height: 40px;
72 | line-height: 40px;
73 | /*margin: 0 12px;*/
74 | display: block;
75 | width: 100%;
76 | }
77 | .qui-btn.large span {
78 | font-size: 18px;
79 | }
80 | /*中尺寸按钮--一行多个*/
81 | .qui-btn.middle{
82 | text-align: center;
83 | height: 40px;
84 | line-height: 40px;
85 | margin: 0 6px;
86 | flex: 1;
87 | padding: 0;
88 | }
89 | .qui-btn.middle span {
90 | font-size: 18px;
91 | }
92 | /*带背景色的按钮*/
93 | .qui-btn.bg:before{
94 | content: '';
95 | display: block;
96 | position: absolute;
97 | background-color: #eee;
98 | width: 100%;
99 | height: 100%;
100 | top: 0;
101 | left: 0;
102 | z-index: -1;
103 | }
104 | .qui-btn.bg.bor:before{
105 | padding: 1px;
106 | left: -1px;
107 | top: -1px;
108 | }
109 |
110 |
111 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-element-admin-calamus-ice",
3 | "version": "2.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint",
9 | "test:e2e": "vue-cli-service test:e2e",
10 | "test:unit": "vue-cli-service test:unit"
11 | },
12 | "dependencies": {
13 | "axios": "^0.19.0",
14 | "core-js": "^3.3.2",
15 | "echarts": "^4.4.0",
16 | "element-ui": "^2.12.0",
17 | "mavon-editor": "^2.7.7",
18 | "mockjs": "^1.1.0",
19 | "moment": "^2.24.0",
20 | "vue": "^2.6.10",
21 | "vue-codemirror": "^4.0.6",
22 | "vue-echarts": "^4.0.4",
23 | "vue-markdown": "^2.2.4",
24 | "vue-router": "^3.1.3",
25 | "vue2-editor": "^2.10.2",
26 | "vuex": "^3.0.1"
27 | },
28 | "devDependencies": {
29 | "@vue/cli-plugin-babel": "^4.0.0",
30 | "@vue/cli-plugin-e2e-cypress": "^4.0.0",
31 | "@vue/cli-plugin-eslint": "^4.0.0",
32 | "@vue/cli-plugin-unit-mocha": "^4.0.0",
33 | "@vue/cli-service": "^4.0.0",
34 | "@vue/eslint-config-prettier": "^5.0.0",
35 | "@vue/test-utils": "1.0.0-beta.29",
36 | "babel-eslint": "^10.0.3",
37 | "chai": "^4.1.2",
38 | "eslint": "^5.16.0",
39 | "eslint-plugin-prettier": "^3.1.1",
40 | "eslint-plugin-vue": "^5.0.0",
41 | "node-sass": "^4.12.0",
42 | "prettier": "^1.18.2",
43 | "sass-loader": "^8.0.0",
44 | "vue-template-compiler": "^2.6.10"
45 | },
46 | "eslintConfig": {
47 | "root": true,
48 | "env": {
49 | "node": true
50 | },
51 | "extends": [
52 | "plugin:vue/essential",
53 | "@vue/prettier"
54 | ],
55 | "rules": {},
56 | "parserOptions": {
57 | "parser": "babel-eslint"
58 | },
59 | "overrides": [
60 | {
61 | "files": [
62 | "**/__tests__/*.{j,t}s?(x)"
63 | ],
64 | "env": {
65 | "mocha": true
66 | }
67 | }
68 | ]
69 | },
70 | "postcss": {
71 | "plugins": {
72 | "autoprefixer": {}
73 | }
74 | },
75 | "browserslist": [
76 | "> 1%",
77 | "last 2 versions"
78 | ],
79 | "main": ".eslintrc.js",
80 | "directories": {
81 | "test": "test"
82 | },
83 | "repository": {
84 | "type": "git",
85 | "url": "git+https://github.com/calamus0427/vue-element-admin-calamus.git"
86 | },
87 | "license": "ISC",
88 | "bugs": {
89 | "url": "https://github.com/calamus0427/vue-element-admin-calamus/issues"
90 | },
91 | "homepage": "https://github.com/calamus0427/vue-element-admin-calamus#readme",
92 | "keywords": [
93 | "Calamus0427",
94 | "ice-scaffold"
95 | ],
96 | "scaffoldConfig": {
97 | "type": "vue",
98 | "name": "ice-calamus-vue",
99 | "title": "ice-calamus-vue",
100 | "screenshot": "https://img.alicdn.com/tfs/TB1_bulmpOWBuNjy0FiXXXFxVXa-1920-1080.png"
101 | },
102 | "output": {
103 | "filename": "block.json"
104 | }
105 | }
106 |
--------------------------------------------------------------------------------
/src/components/echarts/gantt.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
128 |
129 |
135 |
--------------------------------------------------------------------------------
/src/components/echarts/radar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
128 |
129 |
135 |
--------------------------------------------------------------------------------
/src/pages/apis/permission/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
156 |
--------------------------------------------------------------------------------
/src/pages/apis/process/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 | 默认
33 |
34 |
35 |
36 | 自定义初始值
37 |
38 |
39 |
40 | 隐藏 Tooltip
41 |
42 |
43 |
44 | 格式化 Tooltip
45 |
46 |
47 |
48 | 禁用
49 |
50 |
51 |
52 |
53 |
54 | 不显示间断点
55 |
58 |
59 |
60 |
61 | 显示间断点
62 |
66 |
67 |
68 |
69 |
70 |
71 |
74 |
75 |
76 |
77 |
78 |
79 |
84 |
85 |
86 |
87 |
88 |
89 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
124 |
140 |
141 |
142 |
--------------------------------------------------------------------------------
/src/pages/icon/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | el-icon-
7 |
8 |
9 |
10 |
11 |
14 |
15 |
18 |
19 |
20 |
21 |
22 |
23 |
26 |
27 |
30 |
31 |
34 |
35 |
36 |
37 |
38 |
39 |
42 |
43 |
46 |
47 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | <cl-icon name='{{searchForm.name}}' sizesvg='{{searchForm.sizesvg}}' type='{{searchForm.type}}' ><cl-icon>
64 |
65 |
66 | <cl-icon name='{{searchForm.name}}' size='{{searchForm.size}}' type='{{searchForm.type}}' color='{{searchForm.color}}' ><cl-icon>
67 |
68 |
69 |
70 |
71 |
关闭
72 |
查看全部图标
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
114 |
116 |
117 |
--------------------------------------------------------------------------------
/src/components/echarts/graph.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
179 |
180 |
186 |
--------------------------------------------------------------------------------
/src/components/echarts/relation.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
179 |
180 |
186 |
--------------------------------------------------------------------------------
/src/components/echarts/scatter.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
178 |
179 |
185 |
--------------------------------------------------------------------------------
/src/components/echarts/cMap.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
123 |
124 |
130 |
--------------------------------------------------------------------------------
/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | import Router from 'vue-router'
4 |
5 | // 引用页面模板->供路由使用
6 | import index from '../pages/index.vue'
7 | import nav_aside from '../pages/nav/nav_aside.vue'
8 | import music from '../pages/music/index.vue'
9 | import icon from '../pages/icon/index.vue'
10 | import todolistShow from '../pages/todoList/index.vue'
11 | import shop from '../pages/shop/index.vue'
12 | import ten from '../pages/gal/ten.vue'
13 | import login from "../pages/login/login.vue"
14 | import Code404 from "../pages/Code404/Code404"
15 | import Code500 from "../pages/Code500/Code500"
16 | import introduce from "../pages/introduce/index"
17 | import background from "../pages/apis/background/index"
18 | import backTotop from "../pages/apis/backTotop/index"
19 | import carousel from "../pages/apis/carousel/index"
20 | import dataPiker from "../pages/apis/dataPiker/index"
21 | import form from "../pages/apis/form/index"
22 | import iconNav from "../pages/apis/icon/index"
23 | import mark from "../pages/apis/mark/index"
24 | import permission from "../pages/apis/permission/index"
25 | import process from "../pages/apis/process/index"
26 | import starrating from "../pages/apis/starrating/index"
27 | import table from "../pages/apis/table/index"
28 | import todolist from "../pages/apis/todolist/index"
29 | import jsonEditor from "../pages/editor/json/index"
30 | import richEditor from "../pages/editor/rich/index"
31 | import markdownEditor from "../pages/editor/markdown/index"
32 | import video from "../pages/video/index"
33 | import vuePpt from "../pages/vue_ppt/index"
34 | import game from "../pages/game/index"
35 | import gallery from "../pages/gallery/index"
36 | import navTable from "../pages/navTable/index"
37 | import next from "../pages/next/index"
38 | import echartsInfo from "../pages/echarts/index"
39 | import mockNav from "../pages/mock/index"
40 | import markdown from "../pages/markdown/index"
41 | import vueAnimation from "../pages/animation/index"
42 | import blog from "../pages/blog/index";
43 | import upload from "../pages/upload/index";
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 | Vue.use(Router)
62 |
63 | export default new Router({
64 | routes: [
65 | {
66 | path: '/index',
67 | name: 'index',
68 | component: index
69 | },
70 | {
71 | path: "/login",
72 | name: 'login',
73 | component: login
74 | },
75 | {
76 | path: "/",
77 | redirect: "/login"
78 | },
79 | {
80 | path: '/ten',
81 | name: 'ten',
82 | component: ten
83 | },
84 | {
85 | path: '/shop',
86 | name: 'shop',
87 | component: shop
88 | },
89 | {
90 | path: '/blog',
91 | name: 'blog',
92 | component: blog
93 | }, {
94 | path: '/todolistShow',
95 | name: 'todolistShow',
96 | component: todolistShow
97 | },
98 | {
99 | path: '/icon',
100 | name: 'icon',
101 | component: icon,
102 | // children:[
103 | // {path: 'example',
104 | // name: 'example',
105 | // component: example},
106 |
107 | // ],
108 | },
109 | {
110 | path: '/nav',
111 | name: 'nav',
112 | component: nav_aside,
113 | children:[{
114 | path:'/todolist',
115 | name:'todolist',
116 | component:todolist,
117 | },
118 | {path: '/music',
119 | name: 'music',
120 | component: music},
121 | {path: '/video',
122 | name: "video",
123 | component: video
124 | },
125 | {
126 | path: '/Code404',
127 | name: 'Code404',
128 | component: Code404
129 | },
130 | {
131 | path: '/Code500',
132 | name: 'Code500',
133 | component: Code500
134 | },
135 | {
136 | path: '/upload',
137 | name: "upload",
138 | component: upload
139 | },
140 | {
141 | path: '/introduce',
142 | name: 'introduce',
143 | component: introduce
144 | },
145 | {
146 | path: '/background',
147 | name: 'background',
148 | component: background
149 | },{
150 | path: '/backTotop',
151 | name: "backTotop",
152 | component: backTotop
153 | },{
154 | path: '/carousel',
155 | name: "carousel",
156 | component: carousel
157 | },{
158 | path: '/dataPiker',
159 | name: "dataPiker",
160 | component: dataPiker
161 | },{
162 | path: '/form',
163 | name: 'form',
164 | component: form
165 | },{
166 | path: '/iconNav',
167 | name: 'iconNav',
168 | component: iconNav
169 | },{
170 | path: '/mark',
171 | name: 'mark',
172 | component: mark
173 | },{
174 | path: '/permission',
175 | name: "permission",
176 | component: permission
177 | },{
178 | path: '/process',
179 | name: "process",
180 | component: process
181 | },{
182 | path: '/starrating',
183 | name: "starrating",
184 | component: starrating
185 | },{
186 | path: '/table',
187 | name: "table",
188 | component: table
189 | },{
190 | path: '/jsonEditor',
191 | name: "jsonEditor",
192 | component: jsonEditor
193 | },{
194 | path: '/markdownEditor',
195 | name: "markdownEditor",
196 | component: markdownEditor
197 | },{
198 | path: '/richEditor',
199 | name: "richEditor",
200 | component: richEditor
201 | },{
202 | path: '/vuePpt',
203 | name: "vuePpt",
204 | component: vuePpt
205 | },{
206 | path: '/game',
207 | name: "game",
208 | component: game
209 | },{
210 | path: '/gallery',
211 | name: "gallery",
212 | component: gallery
213 | },{
214 | path: '/navTable',
215 | name: "navTable",
216 | component: navTable
217 | },{
218 | path: '/next',
219 | name: "next",
220 | component: next
221 | },{
222 | path: "/echarts",
223 | name: "echarts",
224 | component: echartsInfo
225 | },{
226 | path: "/mockNav",
227 | name: "mockNav",
228 | component: mockNav
229 | },{
230 | path: "/markdown",
231 | name: "markdown",
232 | component: markdown
233 | },{
234 | path: "/vueAnimation",
235 | name: "vueAnimation",
236 | component: vueAnimation
237 | }]
238 | },
239 |
240 | {
241 | path: "*",
242 | redirect: "/Code404"
243 | }
244 | ]
245 | })
246 |
--------------------------------------------------------------------------------
/src/components/canvas/canvas.vue:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
189 |
197 |
--------------------------------------------------------------------------------
/src/components/echarts/tree.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
231 |
232 |
238 |
--------------------------------------------------------------------------------
/src/pages/upload/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 | 点击上传
15 | 只能上传jpg/png文件,且不超过500kb
16 |
17 |
18 |
19 |
25 |
26 |
27 |
28 |
29 |
30 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
49 | 点击上传
50 | 只能上传jpg/png文件,且不超过500kb
51 |
52 |
53 |
54 |
59 | 点击上传
60 | 只能上传jpg/png文件,且不超过500kb
61 |
62 |
63 |
64 |
69 |
70 | 将文件拖到此处,或点击上传
71 | 只能上传jpg/png文件,且不超过500kb
72 |
73 |
74 |
75 |
83 | 选取文件
84 | 上传到服务器
85 | 只能上传jpg/png文件,且不超过500kb
86 |
87 |
88 |
89 |
90 |
91 |
92 |
151 |
152 |
177 |
--------------------------------------------------------------------------------
/src/pages/apis/form/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | ----
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | 立即创建
50 | 重置
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | 提交
67 | 重置
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
183 |
186 |
187 |
--------------------------------------------------------------------------------
/src/components/icon/font/demo.css:
--------------------------------------------------------------------------------
1 | *{margin: 0;padding: 0;list-style: none;}
2 | /*
3 | KISSY CSS Reset
4 | 理念:1. reset 的目的不是清除浏览器的默认样式,这仅是部分工作。清除和重置是紧密不可分的。
5 | 2. reset 的目的不是让默认样式在所有浏览器下一致,而是减少默认样式有可能带来的问题。
6 | 3. reset 期望提供一套普适通用的基础样式。但没有银弹,推荐根据具体需求,裁剪和修改后再使用。
7 | 特色:1. 适应中文;2. 基于最新主流浏览器。
8 | 维护:玉伯, 正淳
9 | */
10 |
11 | /** 清除内外边距 **/
12 | body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */
13 | dl, dt, dd, ul, ol, li, /* list elements 列表元素 */
14 | pre, /* text formatting elements 文本格式元素 */
15 | form, fieldset, legend, button, input, textarea, /* form elements 表单元素 */
16 | th, td /* table elements 表格元素 */ {
17 | margin: 0;
18 | padding: 0;
19 | }
20 |
21 | /** 设置默认字体 **/
22 | body,
23 | button, input, select, textarea /* for ie */ {
24 | font: 12px/1.5 tahoma, arial, \5b8b\4f53, sans-serif;
25 | }
26 | h1, h2, h3, h4, h5, h6 { font-size: 100%; }
27 | address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */
28 | code, kbd, pre, samp { font-family: courier new, courier, monospace; } /* 统一等宽字体 */
29 | small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */
30 |
31 | /** 重置列表元素 **/
32 | ul, ol { list-style: none; }
33 |
34 | /** 重置文本格式元素 **/
35 | a { text-decoration: none; }
36 | a:hover { text-decoration: underline; }
37 |
38 |
39 | /** 重置表单元素 **/
40 | legend { color: #000; } /* for ie6 */
41 | fieldset, img { border: 0; } /* img 搭车:让链接里的 img 无边框 */
42 | button, input, select, textarea { font-size: 100%; } /* 使得表单元素在 ie 下能继承字体大小 */
43 | /* 注:optgroup 无法扶正 */
44 |
45 | /** 重置表格元素 **/
46 | table { border-collapse: collapse; border-spacing: 0; }
47 |
48 | /* 清除浮动 */
49 | .ks-clear:after, .clear:after {
50 | content: '\20';
51 | display: block;
52 | height: 0;
53 | clear: both;
54 | }
55 | .ks-clear, .clear {
56 | *zoom: 1;
57 | }
58 |
59 | .main {
60 | padding: 30px 100px;
61 | width: 960px;
62 | margin: 0 auto;
63 | }
64 | .main h1{font-size:36px; color:#333; text-align:left;margin-bottom:30px; border-bottom: 1px solid #eee;}
65 |
66 | .helps{margin-top:40px;}
67 | .helps pre{
68 | padding:20px;
69 | margin:10px 0;
70 | border:solid 1px #e7e1cd;
71 | background-color: #fffdef;
72 | overflow: auto;
73 | }
74 |
75 | .icon_lists{
76 | width: 100% !important;
77 |
78 | }
79 |
80 | .icon_lists li{
81 | float:left;
82 | width: 100px;
83 | height:180px;
84 | text-align: center;
85 | list-style: none !important;
86 | }
87 | .icon_lists .icon{
88 | font-size: 42px;
89 | line-height: 100px;
90 | margin: 10px 0;
91 | color:#333;
92 | -webkit-transition: font-size 0.25s ease-out 0s;
93 | -moz-transition: font-size 0.25s ease-out 0s;
94 | transition: font-size 0.25s ease-out 0s;
95 |
96 | }
97 | .icon_lists .icon:hover{
98 | font-size: 100px;
99 | }
100 |
101 |
102 |
103 | .markdown {
104 | color: #666;
105 | font-size: 14px;
106 | line-height: 1.8;
107 | }
108 |
109 | .highlight {
110 | line-height: 1.5;
111 | }
112 |
113 | .markdown img {
114 | vertical-align: middle;
115 | max-width: 100%;
116 | }
117 |
118 | .markdown h1 {
119 | color: #404040;
120 | font-weight: 500;
121 | line-height: 40px;
122 | margin-bottom: 24px;
123 | }
124 |
125 | .markdown h2,
126 | .markdown h3,
127 | .markdown h4,
128 | .markdown h5,
129 | .markdown h6 {
130 | color: #404040;
131 | margin: 1.6em 0 0.6em 0;
132 | font-weight: 500;
133 | clear: both;
134 | }
135 |
136 | .markdown h1 {
137 | font-size: 28px;
138 | }
139 |
140 | .markdown h2 {
141 | font-size: 22px;
142 | }
143 |
144 | .markdown h3 {
145 | font-size: 16px;
146 | }
147 |
148 | .markdown h4 {
149 | font-size: 14px;
150 | }
151 |
152 | .markdown h5 {
153 | font-size: 12px;
154 | }
155 |
156 | .markdown h6 {
157 | font-size: 12px;
158 | }
159 |
160 | .markdown hr {
161 | height: 1px;
162 | border: 0;
163 | background: #e9e9e9;
164 | margin: 16px 0;
165 | clear: both;
166 | }
167 |
168 | .markdown p,
169 | .markdown pre {
170 | margin: 1em 0;
171 | }
172 |
173 | .markdown > p,
174 | .markdown > blockquote,
175 | .markdown > .highlight,
176 | .markdown > ol,
177 | .markdown > ul {
178 | width: 80%;
179 | }
180 |
181 | .markdown ul > li {
182 | list-style: circle;
183 | }
184 |
185 | .markdown > ul li,
186 | .markdown blockquote ul > li {
187 | margin-left: 20px;
188 | padding-left: 4px;
189 | }
190 |
191 | .markdown > ul li p,
192 | .markdown > ol li p {
193 | margin: 0.6em 0;
194 | }
195 |
196 | .markdown ol > li {
197 | list-style: decimal;
198 | }
199 |
200 | .markdown > ol li,
201 | .markdown blockquote ol > li {
202 | margin-left: 20px;
203 | padding-left: 4px;
204 | }
205 |
206 | .markdown code {
207 | margin: 0 3px;
208 | padding: 0 5px;
209 | background: #eee;
210 | border-radius: 3px;
211 | }
212 |
213 | .markdown pre {
214 | border-radius: 6px;
215 | background: #f7f7f7;
216 | padding: 20px;
217 | }
218 |
219 | .markdown pre code {
220 | border: none;
221 | background: #f7f7f7;
222 | margin: 0;
223 | }
224 |
225 | .markdown strong,
226 | .markdown b {
227 | font-weight: 600;
228 | }
229 |
230 | .markdown > table {
231 | border-collapse: collapse;
232 | border-spacing: 0px;
233 | empty-cells: show;
234 | border: 1px solid #e9e9e9;
235 | width: 95%;
236 | margin-bottom: 24px;
237 | }
238 |
239 | .markdown > table th {
240 | white-space: nowrap;
241 | color: #333;
242 | font-weight: 600;
243 |
244 | }
245 |
246 | .markdown > table th,
247 | .markdown > table td {
248 | border: 1px solid #e9e9e9;
249 | padding: 8px 16px;
250 | text-align: left;
251 | }
252 |
253 | .markdown > table th {
254 | background: #F7F7F7;
255 | }
256 |
257 | .markdown blockquote {
258 | font-size: 90%;
259 | color: #999;
260 | border-left: 4px solid #e9e9e9;
261 | padding-left: 0.8em;
262 | margin: 1em 0;
263 | font-style: italic;
264 | }
265 |
266 | .markdown blockquote p {
267 | margin: 0;
268 | }
269 |
270 | .markdown .anchor {
271 | opacity: 0;
272 | transition: opacity 0.3s ease;
273 | margin-left: 8px;
274 | }
275 |
276 | .markdown .waiting {
277 | color: #ccc;
278 | }
279 |
280 | .markdown h1:hover .anchor,
281 | .markdown h2:hover .anchor,
282 | .markdown h3:hover .anchor,
283 | .markdown h4:hover .anchor,
284 | .markdown h5:hover .anchor,
285 | .markdown h6:hover .anchor {
286 | opacity: 1;
287 | display: inline-block;
288 | }
289 |
290 | .markdown > br,
291 | .markdown > p > br {
292 | clear: both;
293 | }
294 |
295 |
296 | .hljs {
297 | display: block;
298 | background: white;
299 | padding: 0.5em;
300 | color: #333333;
301 | overflow-x: auto;
302 | }
303 |
304 | .hljs-comment,
305 | .hljs-meta {
306 | color: #969896;
307 | }
308 |
309 | .hljs-string,
310 | .hljs-variable,
311 | .hljs-template-variable,
312 | .hljs-strong,
313 | .hljs-emphasis,
314 | .hljs-quote {
315 | color: #df5000;
316 | }
317 |
318 | .hljs-keyword,
319 | .hljs-selector-tag,
320 | .hljs-type {
321 | color: #a71d5d;
322 | }
323 |
324 | .hljs-literal,
325 | .hljs-symbol,
326 | .hljs-bullet,
327 | .hljs-attribute {
328 | color: #0086b3;
329 | }
330 |
331 | .hljs-section,
332 | .hljs-name {
333 | color: #63a35c;
334 | }
335 |
336 | .hljs-tag {
337 | color: #333333;
338 | }
339 |
340 | .hljs-title,
341 | .hljs-attr,
342 | .hljs-selector-id,
343 | .hljs-selector-class,
344 | .hljs-selector-attr,
345 | .hljs-selector-pseudo {
346 | color: #795da3;
347 | }
348 |
349 | .hljs-addition {
350 | color: #55a532;
351 | background-color: #eaffea;
352 | }
353 |
354 | .hljs-deletion {
355 | color: #bd2c00;
356 | background-color: #ffecec;
357 | }
358 |
359 | .hljs-link {
360 | text-decoration: underline;
361 | }
362 |
363 | pre{
364 | background: #fff;
365 | }
366 |
367 |
368 |
369 |
370 |
371 |
--------------------------------------------------------------------------------
/src/pages/apis/dataPiker/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | 基本用法
9 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | 日期范围
22 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 日期范围
36 |
44 |
45 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | 日期范围
61 |
68 |
69 |
70 |
71 |
72 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 | 带快捷选项
88 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | 周
101 |
106 |
107 |
108 |
109 |
110 |
111 | 月
112 |
116 |
117 |
118 |
119 |
120 |
121 | 年
122 |
127 |
128 |
129 |
130 |
131 |
132 |
133 | 日期范围
134 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 | 默认
152 |
158 |
159 |
160 |
161 |
162 |
163 |
164 | 默认
165 |
171 |
172 |
173 |
174 |
175 |
176 | 带快捷选项
177 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
295 |
296 |
301 |
302 |
303 |
--------------------------------------------------------------------------------
/src/components/echarts/calender.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
446 |
447 |
456 |
--------------------------------------------------------------------------------
/src/components/todoList/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
16 |
17 |
31 |
32 |
33 |
34 |
113 |
114 |
435 |
--------------------------------------------------------------------------------
/src/pages/apis/table/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
9 |
11 |
12 |
15 |
16 |
20 |
21 |
22 |
26 |
27 |
28 |
32 |
33 |
37 |
38 |
42 |
43 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
57 |
58 |
59 |
60 |
61 | {{ props.row.name }}
62 |
63 |
64 | {{ props.row.shop }}
65 |
66 |
67 | {{ props.row.id }}
68 |
69 |
70 | {{ props.row.shopId }}
71 |
72 |
73 | {{ props.row.category }}
74 |
75 |
76 | {{ props.row.address }}
77 |
78 |
79 | {{ props.row.desc }}
80 |
81 |
82 |
83 |
84 |
87 |
88 |
94 |
95 |
98 |
99 |
100 |
101 |
102 |
107 |
111 |
112 |
115 |
116 |
120 |
121 |
125 |
126 |
130 |
131 |
132 |
133 |
140 |
144 |
145 |
148 |
149 |
152 |
153 |
156 |
157 |
160 |
161 |
162 |
163 |
164 |
169 |
173 |
174 |
177 |
178 |
182 |
183 |
187 |
188 |
192 |
193 |
194 |
195 |
200 |
204 |
205 |
208 |
209 |
212 |
213 |
216 |
217 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
424 |
425 |
446 |
447 |
--------------------------------------------------------------------------------
/src/components/echarts/sMap.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
515 |
516 |
522 |
--------------------------------------------------------------------------------