chain-saasui 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/README.md +6 -0
  2. package/babel.config.js +13 -0
  3. package/build/webpack.common.js +54 -0
  4. package/build/webpack.components.js +69 -0
  5. package/build/webpack.demo.js +40 -0
  6. package/components/css/card.scss +19 -0
  7. package/components/css/common.scss +10 -0
  8. package/components/css/container.scss +14 -0
  9. package/components/css/detail.scss +87 -0
  10. package/components/css/dialog.scss +83 -0
  11. package/components/css/group.scss +82 -0
  12. package/components/css/index.scss +11 -0
  13. package/components/css/messagebox.scss +59 -0
  14. package/components/css/pagetable.scss +89 -0
  15. package/components/css/table.scss +0 -0
  16. package/components/css/tablebuttons.scss +15 -0
  17. package/components/css/unit.scss +25 -0
  18. package/components/src/SCard/index.vue +41 -0
  19. package/components/src/SContainer/index.vue +36 -0
  20. package/components/src/SDialog/index.vue +99 -0
  21. package/components/src/SDrawer/index.vue +95 -0
  22. package/components/src/SForm/SSelect/index.vue +108 -0
  23. package/components/src/SGroup/icon_rtsuc.png +0 -0
  24. package/components/src/SGroup/index.vue +81 -0
  25. package/components/src/SMessagebox/index.js +66 -0
  26. package/components/src/SMessagebox/messagebox.vue +85 -0
  27. package/components/src/SPage/Pagedetail.vue +114 -0
  28. package/components/src/SPage/Pagestep.vue +97 -0
  29. package/components/src/SPage/Pagetable.vue +109 -0
  30. package/components/src/STable/STablecolumn.vue +91 -0
  31. package/components/src/STable/index.vue +34 -0
  32. package/components/src/STableButtons/STableButtons.md +111 -0
  33. package/components/src/STableButtons/index.vue +96 -0
  34. package/components/src/SUnit/index.vue +75 -0
  35. package/components/src/index.js +46 -0
  36. package/gulpfile.js +20 -0
  37. package/jsconfig.json +25 -0
  38. package/lib/css/index.css +1 -0
  39. package/lib/saasui.common.js +1 -0
  40. package/package.json +82 -0
  41. package/public/favicon.ico +0 -0
  42. package/public/html/ie.html +46 -0
  43. package/public/index.html +274 -0
  44. package/public/robots.txt +2 -0
  45. package/public/template/base/Template_Account.xls +0 -0
  46. package/public/template/base/Template_Feedback.xls +0 -0
  47. package/public/template/base/Template_Team.xls +0 -0
  48. package/public/template/base/Template_Team_Member.xls +0 -0
  49. package/src/App.vue +30 -0
  50. package/src/assets/logo.png +0 -0
  51. package/src/components/HelloWorld.vue +58 -0
  52. package/src/main.js +16 -0
  53. package/vue.config.js +40 -0
package/README.md ADDED
@@ -0,0 +1,6 @@
1
+
2
+ ## 纯粹 ui组件库 基于elementui的二次封装
3
+ ```js
4
+ import saasui from 'saasui';
5
+ Vue.use(saasui)
6
+ ```
@@ -0,0 +1,13 @@
1
+ module.exports = {
2
+ presets: [
3
+ // https://github.com/vuejs/vue-cli/tree/master/packages/@vue/babel-preset-app
4
+ '@vue/cli-plugin-babel/preset'
5
+ ],
6
+ 'env': {
7
+ 'development': {
8
+ // babel-plugin-dynamic-import-node plugin only does one thing by converting all import() to require().
9
+ // This plugin can significantly increase the speed of hot updates, when you have a large number of pages.
10
+ 'plugins': ['dynamic-import-node']
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,54 @@
1
+ const path = require("path");
2
+ const { VueLoaderPlugin } = require("vue-loader");
3
+ const MiniCssExtractPlugin = require("mini-css-extract-plugin");
4
+ const pkg = require('../package.json');
5
+ const { dependencies = {}, devDependencies = {} } = pkg;
6
+
7
+ module.exports = {
8
+ entry: path.resolve(__dirname, "../components/src"),
9
+ mode: "production",
10
+ output: {
11
+ path: path.resolve(__dirname, "../lib"),
12
+ filename: 'saasui.common.js',
13
+ chunkFilename: '[id].js',
14
+ library: 'SAASUI',
15
+ libraryTarget: 'commonjs2',
16
+ libraryExport: 'default',
17
+ },
18
+ plugins: [
19
+ new VueLoaderPlugin(),
20
+ new MiniCssExtractPlugin({
21
+ filename: 'styles/[name].css',
22
+ chunkFilename: 'styles/[id].css',
23
+ }),
24
+ ],
25
+ module: {
26
+ rules: [
27
+ {
28
+ test: /\.vue$/,
29
+ use: [
30
+ {
31
+ loader: "vue-loader",
32
+ },
33
+ ],
34
+ },
35
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] },
36
+ {
37
+ test: /\.scss$/,
38
+ use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
39
+ },
40
+ { test: /\.(jpg|png|gif|bmp|jpeg)$/, loader: 'url-loader' },
41
+ { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }
42
+ ],
43
+ },
44
+ externals: Object.keys({ ...dependencies, ...devDependencies }).reduce((externals, dep) => {
45
+ externals[dep] = dep; // 将每个依赖排除在打包之外
46
+ return externals;
47
+ }, {}),
48
+ resolve: {
49
+ extensions: ['.js', '.vue', '.json'], // 添加你项目中用到的扩展名
50
+ alias: {
51
+
52
+ },
53
+ },
54
+ };
@@ -0,0 +1,69 @@
1
+ const path = require("path");
2
+ const { VueLoaderPlugin } = require("vue-loader");
3
+ const glob = require("glob");
4
+ const MiniCssExtractPlugin = require("mini-css-extract-plugin");
5
+ const list = {};
6
+ async function makeList(dirPath, list) {
7
+ const files = glob.sync(`${dirPath}/**/index.js`);
8
+ for (let file of files) {
9
+ const component = file.split(/[/.]/)[2];
10
+ list[component] = `./${file}`;
11
+ }
12
+ }
13
+ makeList("components/src", list);
14
+ const NODE_ENV = process.env.NODE_ENV ? process.env.NODE_ENV.trim() : "";
15
+ const isDevelopment = NODE_ENV === 'development'; // trim
16
+
17
+ module.exports = {
18
+ entry: list,
19
+ mode: "production",
20
+ output: {
21
+ path: path.resolve(__dirname, "../lib"),
22
+ filename: '[name].js',
23
+ chunkFilename: '[id].js',
24
+ library: 'SAASUI',
25
+ libraryExport: 'default',
26
+ libraryTarget: 'umd',
27
+ umdNamedDefine: true,
28
+ globalObject: 'typeof self !== \'undefined\' ? self : this'
29
+ },
30
+ // output: {
31
+ // filename: '[name].js', // 输出文件名
32
+ // chunkFilename: '[id].js',
33
+ // path: path.resolve(__dirname, '../lib'),
34
+ // libraryTarget: 'commonjs2', // 使用 CommonJS 格式
35
+ // },
36
+ watch: isDevelopment, // 实时打包
37
+ plugins: [
38
+ new VueLoaderPlugin(),
39
+ new MiniCssExtractPlugin({
40
+ filename: 'styles/[name].css',
41
+ chunkFilename: 'styles/[id].css',
42
+ }),
43
+ ],
44
+ module: {
45
+ rules: [
46
+ {
47
+ test: /\.vue$/,
48
+ use: [
49
+ {
50
+ loader: "vue-loader",
51
+ },
52
+ ],
53
+ },
54
+ { test: /\.css$/, use: [MiniCssExtractPlugin.loader, "css-loader"] },
55
+ {
56
+ test: /\.scss$/,
57
+ use: [MiniCssExtractPlugin.loader, "css-loader", "sass-loader"],
58
+ },
59
+ { test: /\.(jpg|png|gif|bmp|jpeg)$/, loader: 'url-loader' },
60
+ { test: /\.(ttf|eot|svg|woff|woff2)$/, use: 'url-loader' }
61
+ ],
62
+ },
63
+ resolve: {
64
+ extensions: ['.js', '.vue', '.json'], // 添加你项目中用到的扩展名
65
+ alias: {
66
+ vue$: "vue/dist/vue.esm.js", // 使用完整版 Vue
67
+ },
68
+ },
69
+ };
@@ -0,0 +1,40 @@
1
+ 'use strict'
2
+ const { log } = require('console')
3
+ const path = require('path')
4
+
5
+ function resolve(dir) {
6
+ return path.join(__dirname, dir)
7
+ }
8
+
9
+
10
+ // vue.config.js 配置说明
11
+ // 官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
12
+ // 这里只列一部分,具体配置参考文档
13
+ module.exports = {
14
+ entry: '../src/main.js',
15
+ // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
16
+ outputDir: 'dist',
17
+ // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
18
+ assetsDir: 'static',
19
+ // 是否开启eslint保存检测,有效值:ture | false | 'error'
20
+ lintOnSave: false,
21
+ // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
22
+ productionSourceMap: false,
23
+ configureWebpack: {
24
+ resolve: {
25
+ alias: {
26
+ '@': path.resolve(__dirname, './src'),
27
+ }
28
+ },
29
+ },
30
+ // rules: [
31
+ // {
32
+ // test: /\.scss$/,
33
+ // use: [
34
+ // 'style-loader', // 注入 CSS 到 DOM
35
+ // 'sass-loader' // 处理 Sass 文件
36
+ // ],
37
+ // },
38
+ // ],
39
+ }
40
+
@@ -0,0 +1,19 @@
1
+ .saas-card {
2
+ border-radius: 6px;
3
+ border: 1px solid #dbdee7;
4
+ margin-bottom: 24px;
5
+ }
6
+
7
+ .saas-card-header {
8
+ background: #f7f9fb;
9
+ border-radius: 6px 6px 0px 0px;
10
+ border-bottom: 1px solid #dbdee7;
11
+ font-weight: 500;
12
+ font-size: 16px;
13
+ color: #0e1822;
14
+ padding: 8px 16px;
15
+ }
16
+
17
+ .saas-card-content {
18
+ padding: 16px;
19
+ }
@@ -0,0 +1,10 @@
1
+ // 公共变量
2
+ $color: red;
3
+
4
+ $colors: (
5
+ primary: #1890ff,
6
+ info: #a1a5b2,
7
+ success: #2ecc71,
8
+ danger: #ff3b30,
9
+ warning: #ff9900,
10
+ );
@@ -0,0 +1,14 @@
1
+ // 页面布局
2
+ .saas-container {
3
+ display: flex;
4
+ flex-direction: column;
5
+ height: 100%;
6
+ flex: 1;
7
+ }
8
+
9
+ .saas-container-header {
10
+ }
11
+ .saas-container-content {
12
+ flex: 1;
13
+ min-height: 300px;
14
+ }
@@ -0,0 +1,87 @@
1
+ .saas-detail {
2
+ background: #fff;
3
+ height: 100%;
4
+ display: flex;
5
+ flex-direction: column;
6
+ position: relative;
7
+ }
8
+ .saas-detail-top {
9
+ flex: 1;
10
+ overflow-y: auto;
11
+ overflow-x: auto;
12
+ }
13
+ .saas-detail-header {
14
+ display: flex;
15
+ position: sticky;
16
+ padding: 24px 64px;
17
+ position: sticky;
18
+ background: #fff;
19
+ top: 0;
20
+ z-index: 10;
21
+ }
22
+ .saas-detail-titlebox {
23
+ // margin: 0 auto;
24
+ }
25
+ .saas-detail-title {
26
+ display: flex;
27
+ align-items: center;
28
+ font-size: 16px;
29
+ font-weight: 600;
30
+ color: #0e1822;
31
+ }
32
+ .saas-detail-sub {
33
+ margin-top: 8px;
34
+ }
35
+ .saas-title-line {
36
+ // display: none;
37
+ display: inline-block;
38
+ width: 4px;
39
+ height: 16px;
40
+ background: #1ed080;
41
+ margin-right: 8px;
42
+ vertical-align: middle;
43
+ }
44
+
45
+ .saas-detail-backbox {
46
+ display: flex;
47
+ align-items: center;
48
+ position: absolute;
49
+ left: 24px;
50
+ top: 24px;
51
+ }
52
+ .saas-detail-back {
53
+ display: flex;
54
+ align-items: center;
55
+ border-radius: 50%;
56
+ border: 1px solid #dbdee7;
57
+ width: 24px;
58
+ height: 24px;
59
+ justify-content: center;
60
+ color: #a1a5b2;
61
+ cursor: pointer;
62
+
63
+ &:hover {
64
+ background: rgb(247, 249, 251);
65
+ }
66
+ }
67
+ .saas-detail-content {
68
+ padding: 0px 64px 24px;
69
+ flex: 1;
70
+ // overflow-x: auto;
71
+ // overflow-y: auto;
72
+ }
73
+ .saas-detail-footer {
74
+ // position: absolute;
75
+ padding: 16px 24px;
76
+ background: #fff;
77
+ text-align: center;
78
+ box-shadow: 8px 0px 12px 0px rgba(161, 165, 178, 0.1);
79
+ border-radius: 0px 0px 0px 0px;
80
+ border-top: 1px solid #dbdee7;
81
+ z-index: 5;
82
+ }
83
+
84
+ .saas-steptop-btn {
85
+ display: flex;
86
+ align-items: center;
87
+ }
@@ -0,0 +1,83 @@
1
+ @import './common.scss';
2
+
3
+ .saas-dialog {
4
+ .el-dialog {
5
+ border-radius: 6px;
6
+ }
7
+
8
+ .el-dialog__body {
9
+ padding: 0;
10
+ }
11
+ .btneditclass {
12
+ color: #2c68f8;
13
+ }
14
+ ::v-deep .el-dialog__footer {
15
+ padding: 12px 24px 20px;
16
+ }
17
+
18
+ .el-dialog__header {
19
+ border-bottom: 1px solid #dbdee7;
20
+ padding: 12px 16px;
21
+ }
22
+ .el-dialog__footer {
23
+ padding: 8px 16px;
24
+ border-top: 1px solid #dbdee7;
25
+ }
26
+ .el-dialog__headerbtn {
27
+ top: 16px;
28
+ }
29
+ }
30
+
31
+ .content-no-padding {
32
+ .saas-dialog-content {
33
+ padding: 0;
34
+ }
35
+ }
36
+
37
+ .saas-dialog-auto {
38
+ max-height: calc(85vh - 100px);
39
+ overflow-y: auto;
40
+ }
41
+ .saas-dialog-content {
42
+ padding: 16px;
43
+ }
44
+
45
+ .saas-dialog-footer {
46
+ height: auto;
47
+ text-align: right;
48
+ }
49
+
50
+ .saas-drawer {
51
+ .el-drawer__body {
52
+ display: flex;
53
+ }
54
+ .btneditclass {
55
+ color: #2c68f8;
56
+ }
57
+ }
58
+
59
+ .saas-drawer-content {
60
+ flex: 1;
61
+ padding: 24px;
62
+ overflow-y: auto;
63
+ }
64
+
65
+ .saas-drawer-footer {
66
+ height: auto;
67
+ padding: 16px 24px;
68
+ border-top: 1px #efefef solid;
69
+ text-align: right;
70
+ }
71
+
72
+ .saas-dialog,
73
+ .saas-drawer {
74
+ .submit-form {
75
+ .el-form-item__content {
76
+ line-height: normal;
77
+ }
78
+ .el-form-item__label {
79
+ line-height: normal;
80
+ font-weight: 500;
81
+ }
82
+ }
83
+ }
@@ -0,0 +1,82 @@
1
+ .saas-group {
2
+ display: flex;
3
+ overflow-x: auto;
4
+ min-height: 50px;
5
+ padding-bottom: 4px;
6
+ div {
7
+ box-sizing: border-box;
8
+ }
9
+
10
+ &::-webkit-scrollbar {
11
+ width: 3px;
12
+ height: 4px;
13
+ background-color: #fff;
14
+ cursor: pointer;
15
+ }
16
+
17
+ &::-webkit-scrollbar-thumb {
18
+ background-color: rgba(144, 147, 153, 0.2);
19
+
20
+ &:hover {
21
+ background-color: rgba(144, 147, 153, 0.5);
22
+ }
23
+ }
24
+ /* 修改滚动条滑道的颜色 */
25
+ &::-webkit-scrollbar-track {
26
+ background-color: #fff; /* 设置滑道背景颜色 */
27
+ }
28
+ }
29
+ .saas-sort-group {
30
+ display: flex;
31
+ border-radius: 6px 6px 6px 6px;
32
+ margin-right: 8px;
33
+ background: #f7f9fb;
34
+ }
35
+ .saas-sort-item {
36
+ width: 136px;
37
+ background: #f7f9fb;
38
+ border: 1px solid #f7f9fb;
39
+ text-align: center;
40
+ padding: 8px 4px;
41
+ position: relative;
42
+ cursor: pointer;
43
+ border-radius: 6px;
44
+ display: flex;
45
+ flex-direction: column;
46
+ align-items: center;
47
+ justify-content: center;
48
+ .title {
49
+ font-weight: 600;
50
+ font-size: 16px;
51
+ color: #0e1822;
52
+ line-height: 24px;
53
+ }
54
+ .text {
55
+ font-size: 14px;
56
+ color: #7b8089;
57
+ line-height: 22px;
58
+ max-width: 100%;
59
+ }
60
+
61
+ img {
62
+ display: none;
63
+ position: absolute;
64
+ width: 16px;
65
+ right: -1px;
66
+ top: -1px;
67
+ }
68
+ }
69
+ .saas-sort-item.active {
70
+ border: 1px solid #28b86a;
71
+ border-radius: 6px;
72
+ background: #f4fbf8;
73
+
74
+ .title,
75
+ .text {
76
+ color: #28b86a;
77
+ }
78
+
79
+ img {
80
+ display: block;
81
+ }
82
+ }
@@ -0,0 +1,11 @@
1
+ @import './common.scss';
2
+ @import './dialog.scss';
3
+ @import './detail.scss';
4
+ @import './unit.scss';
5
+ @import './card.scss';
6
+ @import './group.scss';
7
+ @import './messagebox.scss';
8
+ @import './pagetable.scss';
9
+ @import './table.scss';
10
+ @import "./tablebuttons.scss";
11
+ @import './container.scss';
@@ -0,0 +1,59 @@
1
+ .message-box-overlay {
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0, 0, 0, 0.5);
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ z-index: 4999;
12
+ }
13
+
14
+ .message-box {
15
+ background: white;
16
+ padding: 32px 24px 24px;
17
+ width: 480px;
18
+ border-radius: 8px;
19
+ }
20
+
21
+ .message-box__header {
22
+ font-weight: 600;
23
+ font-size: 16px;
24
+ color: #333333;
25
+ line-height: 24px;
26
+ margin-bottom: 8px;
27
+ }
28
+
29
+ .message-box__content {
30
+ margin-bottom: 24px;
31
+ color: #5c616a;
32
+ }
33
+
34
+ .message-box__footer {
35
+ display: flex;
36
+ justify-content: flex-end;
37
+ // gap: 10px;
38
+ }
39
+
40
+ .message-box__input {
41
+ width: 100%;
42
+ padding: 6px;
43
+ }
44
+
45
+ .message-box_icon {
46
+ color: #ff9900;
47
+ display: flex;
48
+ font-size: 24px;
49
+ }
50
+
51
+ .message-box_main {
52
+ display: flex;
53
+ gap: 8px;
54
+ }
55
+
56
+ .message-box_right {
57
+ flex: 1;
58
+ width: 0;
59
+ }
@@ -0,0 +1,89 @@
1
+ .saas-page-table {
2
+ background: #fff;
3
+ height: calc(100% - 16px);
4
+ display: flex;
5
+ flex-direction: column;
6
+ position: relative;
7
+ padding: 16px;
8
+ border-radius: 8px;
9
+ // overflow-y: inherit;
10
+ }
11
+ .saas-page-table-header {
12
+ // margin-bottom: 16px;
13
+ flex-shrink: 0;
14
+ }
15
+
16
+ .saas-page-table-menu {
17
+ display: flex;
18
+ align-items: center;
19
+ font-size: 16px;
20
+ font-weight: 600;
21
+ color: #0e1822;
22
+ margin-bottom: 16px;
23
+ }
24
+
25
+ .saas-page-table-menu.hasClose {
26
+ font-weight: 400;
27
+ }
28
+ .saas-page-table-back_title {
29
+ margin-right: 16px;
30
+ }
31
+ .saas-page-table-title_line {
32
+ height: 14px;
33
+ width: 1px;
34
+ background: #dbdee7;
35
+ margin-right: 16px;
36
+ }
37
+ .saas-page-table-sub {
38
+ margin-top: 8px;
39
+ }
40
+ .saas-page-title-line {
41
+ // display: none;
42
+ display: inline-block;
43
+ width: 4px;
44
+ height: 16px;
45
+ background: #1ed080;
46
+ margin-right: 8px;
47
+ vertical-align: middle;
48
+ }
49
+
50
+ .saas-page-table-backbox {
51
+ display: flex;
52
+ align-items: center;
53
+ top: 24px;
54
+ }
55
+ .saas-page-table-back {
56
+ display: flex;
57
+ align-items: center;
58
+ border-radius: 50%;
59
+ border: 1px solid #dbdee7;
60
+ width: 24px;
61
+ height: 24px;
62
+ justify-content: center;
63
+ color: #a1a5b2;
64
+ cursor: pointer;
65
+ margin-right: 8px;
66
+
67
+ &:hover {
68
+ background: rgb(247, 249, 251);
69
+ }
70
+ }
71
+ .saas-page-table-title {
72
+ flex: 1;
73
+ }
74
+ .saas-page-table-form {
75
+ // margin-bottom: 16px;
76
+ }
77
+
78
+ .saas-page-table-content {
79
+ flex: 1;
80
+ min-height: 300px;
81
+ }
82
+ .saas-page-table-footer {
83
+ flex-shrink: 0;
84
+ }
85
+
86
+ .saas-steptop-btn {
87
+ display: flex;
88
+ align-items: center;
89
+ }
File without changes
@@ -0,0 +1,15 @@
1
+ .saas-table-buttons {
2
+ display: flex;
3
+ gap: 0 8px;
4
+ flex-wrap: wrap;
5
+ align-items: center;
6
+ .el-button + .el-button {
7
+ margin-left: 0;
8
+ }
9
+ .el-button--text:not(.is-disabled) {
10
+ color: #2c68f8;
11
+ }
12
+ .smart-More {
13
+ font-weight: bolder;
14
+ }
15
+ }
@@ -0,0 +1,25 @@
1
+ @import './common.scss';
2
+
3
+ .saas-unit {
4
+ display: flex;
5
+ align-items: center;
6
+ gap: 8px;
7
+ white-space: nowrap;
8
+ color: #0e1822;
9
+ font-size: 14px;
10
+ }
11
+
12
+ @each $name, $color in $colors {
13
+ .saas-unit-#{$name} {
14
+ background-color: $color;
15
+ width: 8px;
16
+ height: 8px;
17
+ border-radius: 2px;
18
+ box-shadow: 0px 0px 0px 2px rgba($color, 0.2);
19
+ }
20
+ }
21
+
22
+ .saas-unit-text {
23
+ width: 0;
24
+ flex: 1;
25
+ }