@netang/quasar 0.0.20

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 (80) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +17 -0
  3. package/components/column-title/index.vue +32 -0
  4. package/components/dialog/components/index.js +6 -0
  5. package/components/dialog/components/move-to-tree/index.vue +150 -0
  6. package/components/dialog/index.vue +330 -0
  7. package/components/dialog-table/index.vue +92 -0
  8. package/components/dragger/index.vue +202 -0
  9. package/components/drawer/index.vue +262 -0
  10. package/components/field-date/index.vue +844 -0
  11. package/components/field-date/methods.js +100 -0
  12. package/components/field-table/index.vue +468 -0
  13. package/components/field-text/index.vue +167 -0
  14. package/components/field-tree/index.vue +435 -0
  15. package/components/input-number/index.vue +324 -0
  16. package/components/input-number/number.js +67 -0
  17. package/components/input-price-cent/index.vue +213 -0
  18. package/components/input-price-yuan/index.vue +179 -0
  19. package/components/layout/index.vue +119 -0
  20. package/components/list-menu/index.vue +137 -0
  21. package/components/list-menu-item/index.vue +79 -0
  22. package/components/power-data/index.vue +667 -0
  23. package/components/search/index.vue +176 -0
  24. package/components/search-item/index.vue +219 -0
  25. package/components/select/index.vue +71 -0
  26. package/components/select-filter/index.vue +75 -0
  27. package/components/table/index.vue +347 -0
  28. package/components/table-column-fixed/index.vue +68 -0
  29. package/components/table-pagination/index.vue +83 -0
  30. package/components/table-summary/index.vue +91 -0
  31. package/components/thumbnail/index.vue +87 -0
  32. package/components/toolbar/container.vue +31 -0
  33. package/components/toolbar/index.vue +405 -0
  34. package/components/uploader/index.vue +157 -0
  35. package/components/uploader-query/index.vue +731 -0
  36. package/package.json +21 -0
  37. package/sass/common.scss +165 -0
  38. package/sass/index.scss +14 -0
  39. package/sass/line.scss +39 -0
  40. package/sass/quasar/btn.scss +46 -0
  41. package/sass/quasar/common.scss +3 -0
  42. package/sass/quasar/dialog.scss +7 -0
  43. package/sass/quasar/drawer.scss +6 -0
  44. package/sass/quasar/field.scss +210 -0
  45. package/sass/quasar/loading.scss +6 -0
  46. package/sass/quasar/menu.scss +8 -0
  47. package/sass/quasar/table.scss +112 -0
  48. package/sass/quasar/toolbar.scss +22 -0
  49. package/store/index.js +32 -0
  50. package/utils/$area.js +387 -0
  51. package/utils/$auth.js +135 -0
  52. package/utils/$dialog.js +43 -0
  53. package/utils/$role.js +807 -0
  54. package/utils/$rule.js +17 -0
  55. package/utils/$search.js +336 -0
  56. package/utils/$table.js +802 -0
  57. package/utils/$tree.js +620 -0
  58. package/utils/$uploader.js +1029 -0
  59. package/utils/alert.js +10 -0
  60. package/utils/bus.js +6 -0
  61. package/utils/config.js +22 -0
  62. package/utils/confrim.js +11 -0
  63. package/utils/dict.js +44 -0
  64. package/utils/getData.js +61 -0
  65. package/utils/getFile.js +30 -0
  66. package/utils/getImage.js +136 -0
  67. package/utils/getTime.js +94 -0
  68. package/utils/http.js +251 -0
  69. package/utils/loading.js +13 -0
  70. package/utils/notify.js +13 -0
  71. package/utils/previewImage.js +8 -0
  72. package/utils/symbols.js +3 -0
  73. package/utils/timestamp.js +18 -0
  74. package/utils/toast.js +13 -0
  75. package/utils/uploader/aliyun.js +6 -0
  76. package/utils/uploader/local.js +8 -0
  77. package/utils/uploader/qiniu.js +311 -0
  78. package/utils/useAuth.js +26 -0
  79. package/utils/useRouter.js +36 -0
  80. package/utils/useUploader.js +58 -0
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@netang/quasar",
3
+ "version": "0.0.20",
4
+ "description": "netang-quasar",
5
+ "scripts": {
6
+ "test": "echo \"Error: no test specified\" && exit 1"
7
+ },
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git+https://github.com/netangsoft/netang-quasar.git"
11
+ },
12
+ "keywords": [
13
+ "netang-quasar"
14
+ ],
15
+ "author": "Netang",
16
+ "license": "MIT",
17
+ "bugs": {
18
+ "url": "https://github.com/netangsoft/netang-quasar/issues"
19
+ },
20
+ "homepage": "https://github.com/netangsoft/netang-quasar#readme"
21
+ }
@@ -0,0 +1,165 @@
1
+ /**
2
+ * 亮色
3
+ */
4
+ .body--light {
5
+ // 反色
6
+ --n-reverse-color: var(--q-dark);
7
+ // 反色 rgb(亮色是黑色)
8
+ --n-reverse-color-rgb: 0, 0, 0;
9
+ // 主题颜色
10
+ --n-mode-color: #ffffff;;
11
+ // 占位符颜色
12
+ --n-placeholder-color: rgba(0, 0, 0, 0.5);
13
+ }
14
+
15
+ /**
16
+ * 暗色
17
+ */
18
+ .body--dark {
19
+ // 反色
20
+ --n-reverse-color: #ffffff;
21
+ // 反色 rgb(暗色是白色)
22
+ --n-reverse-color-rgb: 255, 255, 255;
23
+ // 主题颜色
24
+ --n-mode-color: var(--q-dark);
25
+ // 占位符颜色
26
+ --n-placeholder-color: rgba(255, 255, 255, 0.5);
27
+ }
28
+
29
+ body {
30
+ --n-bg-grey-1: rgba(var(--n-reverse-color-rgb), 0.02);
31
+ --n-bg-grey-2: rgba(var(--n-reverse-color-rgb), 0.04);
32
+ --n-bg-grey-3: rgba(var(--n-reverse-color-rgb), 0.07);
33
+ --n-bg-grey-4: rgba(var(--n-reverse-color-rgb), 0.12);
34
+ --n-bg-grey-5: rgba(var(--n-reverse-color-rgb), 0.26);
35
+ --n-bg-grey-6: rgba(var(--n-reverse-color-rgb), 0.38);
36
+ --n-bg-grey-7: rgba(var(--n-reverse-color-rgb), 0.54);
37
+ --n-bg-grey-8: rgba(var(--n-reverse-color-rgb), 0.62);
38
+ --n-bg-grey-9: rgba(var(--n-reverse-color-rgb), 0.75);
39
+ --n-bg-grey-10: rgba(var(--n-reverse-color-rgb), 0.86);
40
+
41
+ overflow: hidden;
42
+ }
43
+
44
+ // 字体大小 12 像素
45
+ .n-font-size-12 {
46
+ font-size: 12px;
47
+ }
48
+ // 字体大小 13 像素
49
+ .n-font-size-13 {
50
+ font-size: 13px;
51
+ }
52
+ // 字体大小 14 像素
53
+ .n-font-size-14 {
54
+ font-size: 14px;
55
+ }
56
+ // 字体大小 15 像素
57
+ .n-font-size-15 {
58
+ font-size: 15px;
59
+ }
60
+ // 字体大小 16 像素
61
+ .n-font-size-16 {
62
+ font-size: 16px;
63
+ }
64
+
65
+ // 占位符
66
+ .n-placeholder {
67
+ color: var(--n-placeholder-color);
68
+ }
69
+
70
+ .n-pointer-none {
71
+ pointer-events: none;
72
+ }
73
+
74
+ //.n-color-primary,
75
+ //.n-color-main {
76
+ // color: var(--q-primary);
77
+ //}
78
+ //.n-color-success {
79
+ // color: var(--q-positive);
80
+ //}
81
+ //.n-color-warning {
82
+ // color: var(--q-warning);
83
+ //}
84
+ //.n-color-danger {
85
+ // color: var(--q-negative);
86
+ //}
87
+ //.n-color-info {
88
+ // color: var(--q-info);
89
+ //}
90
+
91
+ // flex 1
92
+ .n-flex-1 {
93
+ flex: 1;
94
+ }
95
+
96
+ // 网格行填充
97
+ .n-col-space {
98
+ width: 100%;
99
+ padding: 0;
100
+ margin: 0;
101
+ }
102
+
103
+ .n-bg-grey-1 {
104
+ background-color: var(--n-bg-grey-1)
105
+ }
106
+ .n-bg-grey-2 {
107
+ background-color: var(--n-bg-grey-2)
108
+ }
109
+ .n-bg-grey-3 {
110
+ background-color: var(--n-bg-grey-3)
111
+ }
112
+ .n-bg-grey-4 {
113
+ background-color: var(--n-bg-grey-4)
114
+ }
115
+ .n-bg-grey-5 {
116
+ background-color: var(--n-bg-grey-5)
117
+ }
118
+ .n-bg-grey-6 {
119
+ background-color: var(--n-bg-grey-6)
120
+ }
121
+ .n-bg-grey-7 {
122
+ background-color: var(--n-bg-grey-7)
123
+ }
124
+ .n-bg-grey-8 {
125
+ background-color: var(--n-bg-grey-8)
126
+ }
127
+ .n-bg-grey-9 {
128
+ background-color: var(--n-bg-grey-9)
129
+ }
130
+ .n-bg-grey-10 {
131
+ background-color: var(--n-bg-grey-10)
132
+ }
133
+
134
+ /**
135
+ * 桌面
136
+ */
137
+ body.desktop {
138
+ ::-webkit-scrollbar {
139
+ height: 10px;
140
+ width: 10px;
141
+ overflow: visible;
142
+ }
143
+ ::-webkit-scrollbar-button {
144
+ height: 0;
145
+ width: 0;
146
+ }
147
+ ::-webkit-scrollbar-corner {
148
+ background: transparent;
149
+ }
150
+ ::-webkit-scrollbar-thumb,
151
+ ::-webkit-scrollbar-track {
152
+ border-radius: 0;
153
+ border: none;
154
+ background-clip: padding-box;
155
+ }
156
+
157
+ ::-webkit-scrollbar-thumb,
158
+ ::-webkit-scrollbar-track,
159
+ ::-webkit-scrollbar-thumb:hover {
160
+ background-color: rgba(var(--n-reverse-color-rgb), 0.2);
161
+ }
162
+ ::-webkit-scrollbar-track {
163
+ background-color: rgba(var(--n-reverse-color-rgb), 0.05);
164
+ }
165
+ }
@@ -0,0 +1,14 @@
1
+ @import "~quasar/dist/quasar.sass";
2
+
3
+ @import "quasar/common";
4
+ @import "quasar/btn";
5
+ @import "quasar/dialog";
6
+ @import "quasar/drawer";
7
+ @import "quasar/field";
8
+ @import "quasar/loading";
9
+ @import "quasar/menu";
10
+ @import "quasar/table";
11
+ @import "quasar/toolbar";
12
+
13
+ @import "common";
14
+ @import "line";
package/sass/line.scss ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * 极细线
3
+ */
4
+ .n-line {
5
+ border: 1px solid $separator-color;
6
+ &--top {
7
+ border-top: 1px solid $separator-color;
8
+ }
9
+ &--right {
10
+ border-right: 1px solid $separator-color;
11
+ }
12
+ &--bottom {
13
+ border-bottom: 1px solid $separator-color;
14
+ }
15
+ &--left {
16
+ border-left: 1px solid $separator-color;
17
+ }
18
+ }
19
+
20
+ /**
21
+ * 暗色
22
+ */
23
+ .body--dark {
24
+ .n-line {
25
+ border-color: $separator-dark-color;
26
+ &--top {
27
+ border-top-color: $separator-dark-color;
28
+ }
29
+ &--right {
30
+ border-right-color: $separator-dark-color;
31
+ }
32
+ &--bottom {
33
+ border-bottom-color: $separator-dark-color;
34
+ }
35
+ &--left {
36
+ border-left-color: $separator-dark-color;
37
+ }
38
+ }
39
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * 按钮
3
+ */
4
+ .q-btn {
5
+ &.disabled {
6
+ opacity: 0.5 !important;
7
+ }
8
+
9
+ // 线条默认按钮
10
+ &--outline {
11
+ &.text-default {
12
+ &:before {
13
+ border-color: rgba(var(--n-reverse-color-rgb), 0.2);
14
+ }
15
+ }
16
+ }
17
+ }
18
+
19
+ .n-button {
20
+ // 带图标的按钮
21
+ &-icon {
22
+ .q-icon {
23
+ font-size: 1.315em;
24
+ }
25
+ .on-left {
26
+ margin-right: 5px;
27
+ }
28
+ .on-right {
29
+ margin-left: 5px;
30
+ }
31
+ }
32
+ }
33
+
34
+
35
+
36
+ // 亮色
37
+ .body--light {
38
+ .q-btn {
39
+ // 线条默认按钮
40
+ &--outline {
41
+ &.text-default {
42
+ background: #ffffff !important;
43
+ }
44
+ }
45
+ }
46
+ }
@@ -0,0 +1,3 @@
1
+ .q-page-container {
2
+ position: relative;
3
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 对话框
3
+ */
4
+ .n-dialog {
5
+
6
+ }
7
+
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 布局侧滑菜单
3
+ */
4
+ .q-drawer__opener {
5
+ display: none !important;
6
+ }
@@ -0,0 +1,210 @@
1
+ /**
2
+ * 输入框
3
+ */
4
+ .q-field {
5
+ &--outlined {
6
+ .q-field__control {
7
+ // 输入框边框颜色
8
+ &:after {
9
+ border-width: 1px !important;
10
+ }
11
+
12
+ // 输入框边框颜色
13
+ &:before {
14
+ border-color: rgba(var(--n-reverse-color-rgb), 0.15) !important;
15
+ }
16
+ }
17
+
18
+ // 输入框激活后高亮
19
+ &.q-field--highlighted {
20
+ // 输入框激活后高亮边框宽度
21
+ .q-field__control:after {
22
+ border-width: 1px !important;
23
+ }
24
+
25
+ // 输入框触碰边框颜色
26
+ &:hover:before {
27
+ border-color: rgba(var(--n-reverse-color-rgb), 0.4) !important;
28
+ }
29
+ }
30
+ }
31
+
32
+ &--labeled {
33
+ &.q-field--float {
34
+ .q-field__native,
35
+ .q-field__input {
36
+ &::-webkit-input-placeholder {
37
+ color: var(--n-placeholder-color) !important;
38
+ }
39
+ &::-moz-placeholder {
40
+ color: var(--n-placeholder-color) !important;
41
+ }
42
+ &::-ms-input-placeholder {
43
+ color: var(--n-placeholder-color) !important;
44
+ }
45
+ &::-ms-input-placeholder {
46
+ color: var(--n-placeholder-color) !important;
47
+ }
48
+ &::placeholder {
49
+ color: var(--n-placeholder-color) !important;
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * 分组
58
+ */
59
+ .n-field-group {
60
+ > .q-field--outlined {
61
+ // 非第一个子节点
62
+ &:not(:first-child) {
63
+ .q-field__control {
64
+ &:before {
65
+ left: -1px;
66
+ border-left-color: transparent !important;
67
+ }
68
+ border-top-left-radius: inherit !important;
69
+ border-bottom-left-radius: inherit !important;
70
+ }
71
+ }
72
+ // 非最后一个子节点
73
+ &:not(:last-child) {
74
+ .q-field__control {
75
+ border-top-right-radius: inherit !important;
76
+ border-bottom-right-radius: inherit !important;
77
+ }
78
+ }
79
+ }
80
+
81
+ > .n-field-group {
82
+
83
+ // 非第一个子节点
84
+ &:not(:first-child) {
85
+ margin-top: -1px;
86
+
87
+ .q-field--outlined {
88
+
89
+ // 第一个子节点
90
+ &:first-child {
91
+ .q-field__control {
92
+ border-top-left-radius: inherit !important;
93
+ }
94
+ }
95
+
96
+ // 最后一个子节点
97
+ &:first-child {
98
+ .q-field__control {
99
+ border-top-right-radius: inherit !important;
100
+ }
101
+ }
102
+
103
+ .q-field__control {
104
+ &:before {
105
+ border-top-color: transparent !important;
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ // 非最后一个子节点
112
+ &:not(:last-child) {
113
+ .q-field--outlined {
114
+
115
+ // 第一个子节点
116
+ &:first-child {
117
+ .q-field__control {
118
+ border-bottom-left-radius: inherit !important;
119
+ }
120
+ }
121
+
122
+ // 最后一个子节点
123
+ &:first-child {
124
+ .q-field__control {
125
+ border-bottom-right-radius: inherit !important;
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ /**
134
+ * 字段集样式
135
+ */
136
+ .n-field-fieldset {
137
+ &.q-field {
138
+ &--labeled {
139
+ .q-field__prefix,
140
+ .q-field__suffix {
141
+ padding-top: 0 !important;
142
+ padding-bottom: 0 !important;
143
+ }
144
+
145
+
146
+ .q-field__native {
147
+ padding-top: 0 !important;
148
+ padding-bottom: 0 !important;
149
+ }
150
+
151
+ .q-field__label {
152
+ left: -6px;
153
+ padding: 0 6px;
154
+ z-index: 1 !important;
155
+ border-radius: 6px;
156
+ }
157
+ }
158
+
159
+ &--float {
160
+ .q-field__label {
161
+ transform: translateY(-120%) scale(0.85) !important;
162
+ background-color: var(--n-mode-color) !important;
163
+ }
164
+ }
165
+
166
+ // 紧凑模式
167
+ &--dense {
168
+ &.q-field--float {
169
+ .q-field__label {
170
+ transform: translateY(-80%) scale(0.85) !important;
171
+ }
172
+ }
173
+ }
174
+
175
+ .q-field__native,
176
+ .q-field__input {
177
+ z-index: 2;
178
+ }
179
+ }
180
+
181
+ &.q-field--auto-height.q-field--labeled .q-field__control-container {
182
+ padding-top: 4px;
183
+ }
184
+ }
185
+
186
+ /**
187
+ * 亮色
188
+ */
189
+ .body--light {
190
+ // 输入框背景 白色
191
+ .n-field-fieldset {
192
+ &.q-field {
193
+ &--outlined {
194
+ .q-field__inner {
195
+ &:before {
196
+ content: "";
197
+ position: absolute;
198
+ top: 1px;
199
+ left: 0;
200
+ right: 0;
201
+ bottom: 1px;
202
+ border-radius: 4px;
203
+ background-color: #ffffff;
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 加载
3
+ */
4
+ .q-inner-loading {
5
+ background: rgba(204, 204, 204, 0.3);
6
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 菜单
3
+ */
4
+ .q-menu {
5
+ &.q-dark {
6
+ background-color: $color-gray-86;
7
+ }
8
+ }
@@ -0,0 +1,112 @@
1
+ /**
2
+ * 表格
3
+ */
4
+
5
+ // 头部底部背景色
6
+ $header-footer-bg-color: $grey-2;
7
+ $dark-header-footer-bg-color: $color-gray-93;
8
+ // 单元格背景色
9
+ $td-bg-color: #ffffff;
10
+ $dark-td-bg-color: $dark;
11
+
12
+ .n-table {
13
+
14
+ // 宫格模式
15
+ &--grid {
16
+ background-color: rgba(var(--n-reverse-color-rgb), 0.1);
17
+ }
18
+
19
+ // 撑满
20
+ &.absolute-full {
21
+ border-radius: unset;
22
+
23
+ // 顶部吸顶
24
+ thead tr th {
25
+ position: sticky;
26
+ z-index: 2;
27
+ }
28
+ thead tr:first-child th {
29
+ top: 0;
30
+ }
31
+
32
+ // 最后一列固定
33
+ &.n-table--last-fixed {
34
+ // 最后一列吸顶
35
+ th:last-child,
36
+ td:last-child {
37
+ position: sticky;
38
+ right: 0;
39
+ z-index: 1;
40
+ }
41
+ th:last-child {
42
+ z-index: 2;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+ // 亮色
49
+ .body--light {
50
+ .n-table {
51
+
52
+ // 头部和底部背景色
53
+ .q-table__top,
54
+ .q-table__bottom,
55
+ thead tr:first-child th {
56
+ background-color: $header-footer-bg-color;
57
+ }
58
+
59
+ // 撑满
60
+ &.absolute-full {
61
+ // 最后一列固定
62
+ &.n-table--last-fixed {
63
+ // 头部最后一个
64
+ thead tr:last-child th:last-child {
65
+ background-color: $header-footer-bg-color;
66
+ }
67
+ // 内容最后一个
68
+ td:last-child {
69
+ background-color: $td-bg-color;
70
+ }
71
+ th:last-child,
72
+ td:last-child {
73
+ background-color: $td-bg-color;
74
+ border-left: 1px solid $table-border-color;
75
+ }
76
+ }
77
+ }
78
+ }
79
+ }
80
+
81
+ // 暗色
82
+ .body--dark {
83
+ .n-table {
84
+
85
+ // 头部和底部背景色
86
+ .q-table__top,
87
+ .q-table__bottom,
88
+ thead tr:first-child th {
89
+ background-color: $dark-header-footer-bg-color;
90
+ }
91
+
92
+ // 撑满
93
+ &.absolute-full {
94
+ // 最后一列固定
95
+ &.n-table--last-fixed {
96
+ // 头部最后一个
97
+ thead tr:last-child th:last-child {
98
+ background-color: $dark-header-footer-bg-color;
99
+ }
100
+ // 内容最后一个
101
+ td:last-child {
102
+ background-color: $dark-td-bg-color;
103
+ }
104
+ th:last-child,
105
+ td:last-child {
106
+ background-color: $dark-td-bg-color;
107
+ border-left: 1px solid $table-dark-border-color;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * 头部
3
+ */
4
+
5
+ /**
6
+ * 亮色
7
+ */
8
+ .body--light {
9
+ .n-toolbar {
10
+ color: $grey-8 !important;
11
+ background: $grey-2 !important;
12
+ }
13
+ }
14
+
15
+ /**
16
+ * 暗色
17
+ */
18
+ .body--dark {
19
+ .n-toolbar {
20
+ background: var(--q-dark) !important;
21
+ }
22
+ }
package/store/index.js ADDED
@@ -0,0 +1,32 @@
1
+ import { ref } from 'vue'
2
+ import { initAuthStore } from '../utils/useAuth'
3
+
4
+ /**
5
+ * 公共变量
6
+ */
7
+
8
+ // 角色数据
9
+ export const stateRole = ref({
10
+ // 角色权限版本
11
+ v: null,
12
+ // all id
13
+ all: {},
14
+ // 页面
15
+ urls: {},
16
+ // 按钮
17
+ btns: {},
18
+ // 菜单
19
+ menus: [],
20
+ })
21
+
22
+ // 时间差
23
+ export const stateTimeDiff = ref(0)
24
+
25
+ // loading
26
+ export const stateLoading = ref(false)
27
+
28
+ // 网络是否在线
29
+ export const stateOnLine = ref(navigator.onLine)
30
+
31
+ // 管理员信息状态
32
+ export const stateAdminUserInfo = ref(initAuthStore())