├── src ├── xlsx.d.ts ├── lodash.d.ts ├── sortable.d.ts ├── require.d.ts ├── assets │ └── imgs │ │ └── green.png ├── components │ ├── NodeCascader │ │ ├── components │ │ │ ├── index.ts │ │ │ └── node-item.vue │ │ └── index.vue │ ├── Cascader │ │ ├── components │ │ │ ├── index.ts │ │ │ ├── filter-item.vue │ │ │ └── cascader-item.vue │ │ └── index.vue │ ├── index.ts │ ├── Table │ │ ├── style │ │ │ └── index.scss │ │ ├── index.vue │ │ └── recursiveRow.vue │ └── Upload │ │ └── index.vue ├── shims-vue.d.ts ├── index.js ├── store │ └── index.ts ├── import-png.d.ts ├── router │ └── index.ts ├── mock │ ├── upload │ │ └── index.js │ ├── cascader │ │ └── index.js │ └── table │ │ └── index.js ├── shims-tsx.d.ts ├── main.ts ├── App.vue ├── example │ ├── upload │ │ └── index.vue │ ├── cascader │ │ └── index.vue │ └── table │ │ └── index.vue └── mixins │ └── uploadXlsx.ts ├── cypress.json ├── .DS_Store ├── babel.config.js ├── postcss.config.js ├── public ├── favicon.ico └── index.html ├── jest.config.js ├── .gitignore ├── README.md ├── tsconfig.json ├── LICENSE ├── vue.config.js └── package.json /src/xlsx.d.ts: -------------------------------------------------------------------------------- 1 | declare module "xlsx"; 2 | -------------------------------------------------------------------------------- /src/lodash.d.ts: -------------------------------------------------------------------------------- 1 | declare module "lodash"; 2 | -------------------------------------------------------------------------------- /src/sortable.d.ts: -------------------------------------------------------------------------------- 1 | declare module "sortablejs"; 2 | -------------------------------------------------------------------------------- /src/require.d.ts: -------------------------------------------------------------------------------- 1 | declare function require(string): string; 2 | -------------------------------------------------------------------------------- /cypress.json: -------------------------------------------------------------------------------- 1 | { 2 | "pluginsFile": "tests/e2e/plugins/index.js" 3 | } 4 | -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhl-web/vue-ts-components/HEAD/.DS_Store -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ["@vue/cli-plugin-babel/preset"] 3 | }; 4 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | autoprefixer: {} 4 | } 5 | }; 6 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhl-web/vue-ts-components/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /src/assets/imgs/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hhl-web/vue-ts-components/HEAD/src/assets/imgs/green.png -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | preset: "@vue/cli-plugin-unit-jest/presets/typescript-and-babel" 3 | }; 4 | -------------------------------------------------------------------------------- /src/components/NodeCascader/components/index.ts: -------------------------------------------------------------------------------- 1 | import nodeItem from "./node-item.vue"; 2 | export { nodeItem }; 3 | -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | //该声明文件是告诉TS以.vue为后缀的文件交给vue模块处理,文件中的vue是指vue的实例 2 | declare module "*.vue" { 3 | import Vue from "vue"; 4 | export default Vue; 5 | } 6 | -------------------------------------------------------------------------------- /src/components/Cascader/components/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import CascaderItem from "./cascader-item.vue"; 3 | import FilterItem from "./filter-item.vue"; 4 | export { CascaderItem, FilterItem }; 5 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import Table from "./example/table/index.vue"; 2 | import Cascader from "./example/cascader/index.vue"; 3 | import Upload from "./example/upload/index.vue"; 4 | 5 | export { Table, Cascader, Upload }; 6 | -------------------------------------------------------------------------------- /src/store/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import Vuex from "vuex"; 3 | 4 | Vue.use(Vuex); 5 | 6 | export default new Vuex.Store({ 7 | state: {}, 8 | mutations: {}, 9 | actions: {}, 10 | modules: {} 11 | }); 12 | -------------------------------------------------------------------------------- /src/import-png.d.ts: -------------------------------------------------------------------------------- 1 | // declare module "*.svg"; 2 | // declare module "*.png"; 3 | // declare module "*.jpg"; 4 | // declare module "*.jpeg"; 5 | // declare module "*.gif"; 6 | // declare module "*.bmp"; 7 | // declare module "*.tiff"; 8 | 9 | declare module "*.png" { 10 | const value: any; 11 | export default value; 12 | } 13 | -------------------------------------------------------------------------------- /src/components/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | const EventBus = new Vue(); 3 | import Table from "./Table/index.vue"; 4 | import UploadXlsx from "./Upload/index.vue"; 5 | import Cascader from "./Cascader/index.vue"; 6 | import NodeCascader from "./NodeCascader/index.vue"; 7 | export { Table, UploadXlsx, EventBus, Cascader, NodeCascader }; 8 | -------------------------------------------------------------------------------- /src/router/index.ts: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import VueRouter, { RouteConfig } from "vue-router"; 3 | 4 | Vue.use(VueRouter); 5 | 6 | const routes: Array = []; 7 | 8 | const router = new VueRouter({ 9 | mode: "history", 10 | base: process.env.BASE_URL, 11 | routes 12 | }); 13 | 14 | export default router; 15 | -------------------------------------------------------------------------------- /.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 | pnpm-debug.log* 15 | 16 | # Editor directories and files 17 | .idea 18 | .vscode 19 | *.suo 20 | *.ntvs* 21 | *.njsproj 22 | *.sln 23 | *.sw? 24 | -------------------------------------------------------------------------------- /src/mock/upload/index.js: -------------------------------------------------------------------------------- 1 | export const _headerStr = [ 2 | { str: "一级分类ID", key: "frontend_category_lv1", type: "number" }, 3 | { str: "二级分类ID", key: "frontend_category_lv2", type: "number" }, 4 | { str: "三级分类ID", key: "frontend_category_lv3", type: "number" }, 5 | { str: "商品名称", key: "product_name", type: "string" }, 6 | { str: "商品ID", key: "product_id", type: "number" } 7 | ]; 8 | -------------------------------------------------------------------------------- /src/shims-tsx.d.ts: -------------------------------------------------------------------------------- 1 | import Vue, { VNode } from "vue"; 2 | 3 | declare global { 4 | namespace JSX { 5 | // tslint:disable no-empty-interface 6 | interface Element extends VNode {} 7 | // tslint:disable no-empty-interface 8 | interface ElementClass extends Vue {} 9 | interface IntrinsicElements { 10 | [elem: string]: any; 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import Vue from "vue"; 2 | import App from "./App.vue"; 3 | import router from "./router"; 4 | import store from "./store"; 5 | import ElementUI from "element-ui"; 6 | import "element-ui/lib/theme-chalk/index.css"; 7 | 8 | Vue.use(ElementUI); 9 | 10 | Vue.config.productionTip = false; 11 | 12 | new Vue({ 13 | router, 14 | store, 15 | render: h => h(App) 16 | }).$mount("#app"); 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vue-ts-components 2 | 3 | ## Project setup 4 | ``` 5 | npm install 6 | ``` 7 | 8 | ### Compiles and hot-reloads for development 9 | ``` 10 | npm run serve 11 | ``` 12 | 13 | ### Compiles and minifies for production 14 | ``` 15 | npm run build 16 | ``` 17 | 18 | ### Lints and fixes files 19 | ``` 20 | npm run lint 21 | ``` 22 | 23 | ### Customize configuration 24 | See [Configuration Reference](https://cli.vuejs.org/config/). 25 | -------------------------------------------------------------------------------- /src/App.vue: -------------------------------------------------------------------------------- 1 | 8 | 21 | -------------------------------------------------------------------------------- /src/components/Table/style/index.scss: -------------------------------------------------------------------------------- 1 | .cell { 2 | display: inline-block; 3 | text-align: left; 4 | font-size: 12px; 5 | line-height: 38px; 6 | height: 38px; 7 | box-sizing: border-box; 8 | min-width: 10%; 9 | } 10 | 11 | .el-input { 12 | max-width: 10%; 13 | } 14 | 15 | .content { 16 | margin: 10px auto; 17 | .header { 18 | background: #eee; 19 | } 20 | } 21 | 22 | .footer { 23 | text-align: right; 24 | } -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | <%= htmlWebpackPlugin.options.title %> 9 | 10 | 11 | 14 |
15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/example/upload/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 34 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": true, 6 | "jsx": "preserve", 7 | "importHelpers": true, 8 | "moduleResolution": "node", 9 | "experimentalDecorators": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "sourceMap": true, 14 | "baseUrl": ".", 15 | "allowJs": true, 16 | "checkJs": true, 17 | "noImplicitThis": false, 18 | "types": ["webpack-env"], 19 | "paths": { 20 | "@/*": ["src/*"] 21 | }, 22 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 23 | }, 24 | "include": [ 25 | "src/**/*.ts", 26 | "src/**/*.tsx", 27 | "src/**/*.vue", 28 | "tests/**/*.ts", 29 | "tests/**/*.tsx" 30 | ], 31 | "exclude": ["node_modules"] 32 | } 33 | -------------------------------------------------------------------------------- /src/example/cascader/index.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 32 | -------------------------------------------------------------------------------- /src/components/Cascader/components/filter-item.vue: -------------------------------------------------------------------------------- 1 | 13 | 37 | 48 | -------------------------------------------------------------------------------- /src/components/NodeCascader/index.vue: -------------------------------------------------------------------------------- 1 | 13 | 37 | 47 | -------------------------------------------------------------------------------- /src/components/NodeCascader/components/node-item.vue: -------------------------------------------------------------------------------- 1 | 13 | 36 | 50 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Chong Guo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/mock/cascader/index.js: -------------------------------------------------------------------------------- 1 | export const data = [ 2 | { 3 | text: "指南", 4 | id: 2, 5 | children: [ 6 | { 7 | text: "设计原则", 8 | id: 2.1, 9 | children: [ 10 | { 11 | text: "导航1", 12 | id: 2.112 13 | }, 14 | { 15 | text: "导航2", 16 | id: 2.113 17 | }, 18 | { 19 | text: "导航3", 20 | id: 2.114 21 | } 22 | ] 23 | }, 24 | { 25 | text: "设计原则2", 26 | id: 2.2, 27 | children: [ 28 | { 29 | text: "导航2", 30 | id: 2.21 31 | } 32 | ] 33 | } 34 | ] 35 | }, 36 | { 37 | text: "代买早餐1", 38 | id: 1, 39 | children: [ 40 | { 41 | text: "肯德基", 42 | id: 1.1 43 | }, 44 | { 45 | text: "汉堡", 46 | id: 1.2 47 | } 48 | ] 49 | }, 50 | { 51 | text: "可控3", 52 | children: [], 53 | id: 3 54 | }, 55 | { 56 | text: "可控4", 57 | children: [], 58 | id: 4 59 | }, 60 | { 61 | text: "可控5", 62 | children: [], 63 | id: 5 64 | }, 65 | { 66 | text: "可控6", 67 | children: [], 68 | id: 6 69 | }, 70 | { 71 | text: "可控7", 72 | children: [], 73 | id: 7 74 | }, 75 | { 76 | text: "可控8", 77 | children: [], 78 | id: 8 79 | } 80 | ]; 81 | -------------------------------------------------------------------------------- /src/mock/table/index.js: -------------------------------------------------------------------------------- 1 | export const tableData = [ 2 | { 3 | id: 1, 4 | text: "父1", 5 | level: 1, 6 | type: "自然属性", 7 | manage_categories: "无", 8 | remark: "无", 9 | children: [ 10 | { 11 | id: 1 - 1, 12 | text: "子1", 13 | level: 2, 14 | type: "自然属性", 15 | manage_categories: "无", 16 | remark: "无", 17 | children: [], 18 | parent_id: 1 19 | }, 20 | { 21 | id: 1 - 2, 22 | text: "子2", 23 | level: 2, 24 | type: "自然属性", 25 | manage_categories: "无", 26 | remark: "无", 27 | parent_id: 1, 28 | children: [ 29 | { 30 | id: 1 - 2 - 1, 31 | text: "子2-子1", 32 | level: 3, 33 | type: "自然属性", 34 | manage_categories: "无", 35 | remark: "无", 36 | children: [], 37 | parent_id: 1 - 2 38 | }, 39 | { 40 | id: 1 - 2 - 2, 41 | text: "子2-子2", 42 | level: 3, 43 | type: "自然属性", 44 | manage_categories: "无", 45 | remark: "无", 46 | children: [], 47 | parent_id: 1 - 2 48 | } 49 | ] 50 | } 51 | ] 52 | }, 53 | { 54 | id: 2, 55 | text: "父2", 56 | level: 1, 57 | type: "分类属性", 58 | manage_categories: "无", 59 | remark: "无", 60 | 61 | children: [ 62 | { 63 | id: 2 - 1, 64 | text: "父-子1", 65 | level: 2, 66 | type: "自然属性", 67 | manage_categories: "无", 68 | remark: "无", 69 | children: [], 70 | parent_id: 2 71 | } 72 | ] 73 | } 74 | ]; 75 | -------------------------------------------------------------------------------- /vue.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const sourceMap = process.env.NODE_ENV === "development"; 3 | 4 | module.exports = { 5 | // 基本路径 6 | publicPath: "./", 7 | // 输出文件目录 8 | outputDir: "dist", 9 | // eslint-loader 是否在保存的时候检查 10 | lintOnSave: false, 11 | chainWebpack: () => {}, 12 | configureWebpack: config => { 13 | if (process.env.NODE_ENV === "production") { 14 | // 为生产环境修改配置 15 | config.mode = "production"; 16 | } else { 17 | // 为开发环境修改配置 18 | config.mode = "development"; 19 | } 20 | 21 | Object.assign(config, { 22 | // 开发生产共同配置 23 | resolve: { 24 | extensions: [".js", ".vue", ".json", ".ts", ".tsx"], 25 | alias: { 26 | vue$: "vue/dist/vue.js", 27 | "@": path.resolve(__dirname, "./src"), 28 | "@c": path.resolve(__dirname, "./src/components") 29 | } 30 | } 31 | }); 32 | }, 33 | // 生产环境是否生成 sourceMap 文件 34 | productionSourceMap: sourceMap, 35 | parallel: require("os").cpus().length > 1, 36 | // PWA 插件相关配置 37 | // see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa 38 | pwa: {}, 39 | // webpack-dev-server 相关配置 40 | // devServer: { 41 | // open: true, // 启动后自动打开浏览器 42 | // host: "localhost", 43 | // port: 9002, 44 | // , 45 | // https: false, 46 | // hotOnly: false, 47 | // proxy: { 48 | // // 设置代理 49 | // // proxy all requests starting with /api to jsonplaceholder 50 | // "/api": { 51 | // target: "http://localhost:3000/", 52 | // changeOrigin: true, 53 | // ws: true, 54 | // pathRewrite: { 55 | // "^/api": "" 56 | // } 57 | // } 58 | // }, 59 | // before: app => {} 60 | // }, 61 | // 第三方插件配置 62 | pluginOptions: { 63 | // ... 64 | } 65 | }; 66 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-ts-components", 3 | "version": "0.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 | }, 10 | "dependencies": { 11 | "core-js": "^3.6.5", 12 | "css-loader": "^5.0.1", 13 | "element-ui": "^2.14.0", 14 | "lodash": "^4.17.20", 15 | "sortablejs": "^1.12.0", 16 | "vue": "^2.6.11", 17 | "vue-class-component": "^7.2.3", 18 | "vue-property-decorator": "^8.5.1", 19 | "vue-router": "^3.2.0", 20 | "vuex": "^3.4.0", 21 | "xlsx": "^0.16.8" 22 | }, 23 | "devDependencies": { 24 | "@typescript-eslint/eslint-plugin": "^2.33.0", 25 | "@typescript-eslint/parser": "^2.33.0", 26 | "@vue/cli-plugin-babel": "~4.5.0", 27 | "@vue/cli-plugin-eslint": "~4.5.0", 28 | "@vue/cli-plugin-router": "~4.5.0", 29 | "@vue/cli-plugin-typescript": "~4.5.0", 30 | "@vue/cli-plugin-vuex": "~4.5.0", 31 | "@vue/cli-service": "~4.5.0", 32 | "@vue/eslint-config-prettier": "^6.0.0", 33 | "@vue/eslint-config-typescript": "^5.0.2", 34 | "eslint": "^6.7.2", 35 | "eslint-plugin-prettier": "^3.1.3", 36 | "eslint-plugin-vue": "^6.2.2", 37 | "node-sass": "^4.12.0", 38 | "prettier": "^1.19.1", 39 | "sass-loader": "^8.0.2", 40 | "typescript": "~3.9.3", 41 | "vue-template-compiler": "^2.6.11" 42 | }, 43 | "eslintConfig": { 44 | "root": true, 45 | "env": { 46 | "node": true 47 | }, 48 | "extends": [ 49 | "plugin:vue/essential", 50 | "eslint:recommended", 51 | "@vue/typescript/recommended", 52 | "@vue/prettier", 53 | "@vue/prettier/@typescript-eslint" 54 | ], 55 | "parserOptions": { 56 | "ecmaVersion": 2020 57 | }, 58 | "rules": {} 59 | }, 60 | "browserslist": [ 61 | "> 1%", 62 | "last 2 versions", 63 | "not dead" 64 | ] 65 | } 66 | -------------------------------------------------------------------------------- /src/mixins/uploadXlsx.ts: -------------------------------------------------------------------------------- 1 | import { Component, Vue } from "vue-property-decorator"; 2 | import * as XLSX from "xlsx"; 3 | @Component 4 | export default class UploadXlsx extends Vue { 5 | handlerUploadResult(headerStr: Array, data: Array) { 6 | const result: Array = []; 7 | let arr: Array = []; 8 | let obj: any = {}; 9 | let flag = false; 10 | let idx: number; 11 | data.forEach((item: any) => { 12 | arr = Object.keys(item); 13 | headerStr.forEach((val: any) => { 14 | if (arr.includes(val.str)) { 15 | flag = true; 16 | idx = arr.indexOf(val.str); 17 | } 18 | if (flag) { 19 | if (val.type === "string") { 20 | Object.assign(obj, { [val.key]: String(item[arr[idx]]) }); 21 | } else { 22 | Object.assign(obj, { [val.key]: item[arr[idx]] }); 23 | } 24 | flag = false; 25 | } else { 26 | if (val.type === "string") { 27 | Object.assign(obj, { [val.key]: "" }); 28 | } else { 29 | Object.assign(obj, { [val.key]: 0 }); 30 | } 31 | } 32 | }); 33 | result.push(obj); 34 | obj = {}; 35 | }); 36 | return result; 37 | } 38 | handlerReaderFile( 39 | file: any, 40 | _headerStr: Array, 41 | start: string, 42 | end: string 43 | ) { 44 | const reader = new FileReader(); 45 | reader.readAsBinaryString(file.raw); // 读取文件 46 | return new Promise((resolve, reject) => { 47 | const resultArr: any = []; 48 | let count = 0; 49 | 50 | reader.onload = (evt: any) => { 51 | try { 52 | const bstr = evt.target.result; 53 | // 以二进制流方式读取得到整份excel表格对象 54 | const wb = XLSX.read(bstr, { type: "binary" }); 55 | let ws: any, data, result; 56 | const len = wb.SheetNames.length; 57 | for (let i = 0; i < len; i++) { 58 | count++; 59 | ws = wb.Sheets[wb.SheetNames[i]]; 60 | data = XLSX.utils.sheet_to_json(ws); // 对象:每个字段带表头的每行数据 61 | console.log(data); 62 | if (count === len) { 63 | resolve(resultArr); 64 | } 65 | if (!ws["!ref"]) continue; 66 | if (!(~ws["!ref"].indexOf(start) && ~ws["!ref"].lastIndexOf(end))) { 67 | return this.$message({ 68 | type: "error", 69 | message: `${file.name}表头数量不符合要求` 70 | }); 71 | } 72 | result = this.handlerUploadResult(_headerStr, data); 73 | resultArr.push(result); 74 | } 75 | } catch (err) { 76 | reject(err); 77 | } 78 | }; 79 | }); 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /src/components/Table/index.vue: -------------------------------------------------------------------------------- 1 | 25 | 110 | -------------------------------------------------------------------------------- /src/components/Upload/index.vue: -------------------------------------------------------------------------------- 1 | 8 | 35 | 133 | -------------------------------------------------------------------------------- /src/example/table/index.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 158 | -------------------------------------------------------------------------------- /src/components/Cascader/components/cascader-item.vue: -------------------------------------------------------------------------------- 1 | 53 | 220 | 221 | 274 | -------------------------------------------------------------------------------- /src/components/Table/recursiveRow.vue: -------------------------------------------------------------------------------- 1 | 77 | 167 | 314 | -------------------------------------------------------------------------------- /src/components/Cascader/index.vue: -------------------------------------------------------------------------------- 1 | 56 | 335 | 353 | --------------------------------------------------------------------------------