Przeglądaj źródła

电价查询,经济测算

master
dong 11 miesięcy temu
rodzic
commit
cc3ef82d5a
100 zmienionych plików z 20658 dodań i 3893 usunięć
  1. 33
    33
      androidPrivacy.json
  2. 29
    1
      en.json
  3. 539
    0
      font/demo.css
  4. 303
    0
      font/demo_index.html
  5. 35
    0
      font/iconfont.css
  6. 1
    0
      font/iconfont.js
  7. 44
    0
      font/iconfont.json
  8. BIN
      font/iconfont.ttf
  9. BIN
      font/iconfont.woff
  10. BIN
      font/iconfont.woff2
  11. 2
    0
      main.js
  12. 9
    6
      package.json
  13. 19
    3
      pages.json
  14. 811
    705
      pages/device/index.vue
  15. 27
    16
      pages/devicedetails/index.vue
  16. 1206
    0
      pages/economiccalculation/index.vue
  17. 551
    316
      pages/electricityprice/index.vue
  18. 30
    21
      pages/hostdetails/index.vue
  19. 9
    3
      pages/index/index.vue
  20. 9
    9
      pages/login/index.vue
  21. 162
    12
      pages/personalInformation/index.vue
  22. 84
    57
      pages/powerstation/index.vue
  23. 18
    11
      pages/product/index.vue
  24. 655
    0
      pages/report/index.vue
  25. 2
    2
      pages/strategy/index.vue
  26. 96
    11
      pages/user/index.vue
  27. BIN
      static/battery.png
  28. BIN
      static/bj.png
  29. BIN
      static/chi.png
  30. BIN
      static/dian.png
  31. BIN
      static/jumpto.png
  32. BIN
      static/loading.gif
  33. BIN
      static/ring - 副本.png
  34. BIN
      static/ring.png
  35. BIN
      static/电池一格.png
  36. 2
    0
      uni_modules/d-loading/changelog.md
  37. 103
    0
      uni_modules/d-loading/components/d-loading/d-loading.vue
  38. 89
    0
      uni_modules/d-loading/package.json
  39. 60
    0
      uni_modules/d-loading/readme.md
  40. 9
    2
      uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue
  41. 115
    0
      uni_modules/uni-easyinput/changelog.md
  42. 54
    0
      uni_modules/uni-easyinput/components/uni-easyinput/common.js
  43. 676
    0
      uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue
  44. 88
    0
      uni_modules/uni-easyinput/package.json
  45. 11
    0
      uni_modules/uni-easyinput/readme.md
  46. 81
    0
      uni_modules/uni-file-picker/changelog.md
  47. 287
    0
      uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js
  48. 658
    0
      uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue
  49. 325
    0
      uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue
  50. 282
    0
      uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue
  51. 110
    0
      uni_modules/uni-file-picker/components/uni-file-picker/utils.js
  52. 86
    0
      uni_modules/uni-file-picker/package.json
  53. 11
    0
      uni_modules/uni-file-picker/readme.md
  54. 57
    0
      uni_modules/uni-nav-bar/changelog.md
  55. 357
    0
      uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue
  56. 30
    0
      uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue
  57. 87
    0
      uni_modules/uni-nav-bar/package.json
  58. 15
    0
      uni_modules/uni-nav-bar/readme.md
  59. 7
    7
      unpackage/dist/build/app-plus/androidPrivacy.json
  60. 2
    2
      unpackage/dist/build/app-plus/app-config-service.js
  61. 1
    1
      unpackage/dist/build/app-plus/app-renderjs.js
  62. 6
    7
      unpackage/dist/build/app-plus/app-service.js
  63. BIN
      unpackage/dist/build/app-plus/assets/uniicons.32e978a5.ttf
  64. 12
    0
      unpackage/dist/build/app-plus/manifest.json
  65. 1
    1
      unpackage/dist/build/app-plus/pages/device/index.css
  66. 1
    1
      unpackage/dist/build/app-plus/pages/devicedetails/index.css
  67. 1
    1
      unpackage/dist/build/app-plus/pages/devices/index.css
  68. 1
    0
      unpackage/dist/build/app-plus/pages/deviceslist/index.css
  69. 1
    0
      unpackage/dist/build/app-plus/pages/economiccalculation/index.css
  70. 1
    0
      unpackage/dist/build/app-plus/pages/electricityprice/index.css
  71. 1
    1
      unpackage/dist/build/app-plus/pages/hostdetails/index.css
  72. 1
    0
      unpackage/dist/build/app-plus/pages/index/index.css
  73. 1
    1
      unpackage/dist/build/app-plus/pages/login/index.css
  74. 1
    0
      unpackage/dist/build/app-plus/pages/personalInformation/index.css
  75. 1
    1
      unpackage/dist/build/app-plus/pages/powerstation/index.css
  76. 1
    0
      unpackage/dist/build/app-plus/pages/product/index.css
  77. 1
    1
      unpackage/dist/build/app-plus/pages/strategy/index.css
  78. 1
    1
      unpackage/dist/build/app-plus/pages/user/index.css
  79. 33
    33
      unpackage/dist/dev/app-plus/androidPrivacy.json
  80. 1
    1
      unpackage/dist/dev/app-plus/app-config-service.js
  81. 6
    0
      unpackage/dist/dev/app-plus/app-renderjs.js
  82. 6767
    2401
      unpackage/dist/dev/app-plus/app-service.js
  83. BIN
      unpackage/dist/dev/app-plus/assets/uniicons.32e978a5.ttf
  84. 31
    10
      unpackage/dist/dev/app-plus/pages/PersonalInformation/index.css
  85. 205
    178
      unpackage/dist/dev/app-plus/pages/device/index.css
  86. 25
    7
      unpackage/dist/dev/app-plus/pages/devicedetails/index.css
  87. 1190
    0
      unpackage/dist/dev/app-plus/pages/economiccalculation/index.css
  88. 1856
    0
      unpackage/dist/dev/app-plus/pages/electricityprice/index.css
  89. 21
    6
      unpackage/dist/dev/app-plus/pages/hostdetails/index.css
  90. 30
    16
      unpackage/dist/dev/app-plus/pages/powerstation/index.css
  91. 679
    7
      unpackage/dist/dev/app-plus/pages/product/index.css
  92. 1443
    0
      unpackage/dist/dev/app-plus/pages/report/index.css
  93. 62
    1
      unpackage/dist/dev/app-plus/pages/user/index.css
  94. BIN
      unpackage/dist/dev/app-plus/static/battery.png
  95. BIN
      unpackage/dist/dev/app-plus/static/bj.png
  96. BIN
      unpackage/dist/dev/app-plus/static/chi.png
  97. BIN
      unpackage/dist/dev/app-plus/static/dian.png
  98. BIN
      unpackage/dist/dev/app-plus/static/jumpto.png
  99. BIN
      unpackage/dist/dev/app-plus/static/loading.gif
  100. 0
    0
      unpackage/dist/dev/app-plus/static/ring - 副本.png

+ 33
- 33
androidPrivacy.json Wyświetl plik

@@ -1,38 +1,38 @@
1 1
 {
2
-  "version": "1",
3
-  "prompt": "template",
4
-  "title": "服务协议和隐私政策",
5
-  "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
6
-  "buttonAccept": "同意并接受",
7
-  "buttonRefuse": "暂不同意",
8
-  "hrefLoader": "system",
9
-  "backToExit":"false",
10
-  "second": {
11
-    "title": "确认提示",
12
-    "message": "  进入应用前,你需先同意<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>,否则将退出应用。",
13
-    "buttonAccept": "同意并继续",
14
-    "buttonRefuse": "退出应用"
15
-  },
16
-  "disagreeMode":{
17
-    "support": false,
18
-    "loadNativePlugins": false,
19
-    "visitorEntry": false,
20
-    "showAlways": false
21
-  },
22
-  "styles": {
23
-    "backgroundColor": "#FFFFFF",
24
-    "borderRadius":"5px",
25
-    "title": {
26
-      "color": "#222222"
2
+    "version" : "1",
3
+    "prompt" : "template",
4
+    "title" : "服务协议和隐私政策",
5
+    "message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
6
+    "buttonAccept" : "同意并接受",
7
+    "buttonRefuse" : "暂不同意",
8
+    "hrefLoader" : "system",
9
+    "backToExit" : "false",
10
+    "second" : {
11
+        "title" : "确认提示",
12
+        "message" : "  进入应用前,你需先同意<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>,否则将退出应用。",
13
+        "buttonAccept" : "同意并继续",
14
+        "buttonRefuse" : "退出应用"
27 15
     },
28
-    "buttonAccept": {
29
-      "color": "#007545"
16
+    "disagreeMode" : {
17
+        "support" : false,
18
+        "loadNativePlugins" : false,
19
+        "visitorEntry" : false,
20
+        "showAlways" : false
30 21
     },
31
-    "buttonRefuse": {
32
-      "color": "#222222"
33
-    },
34
-    "buttonVisitor": {
35
-      "color": "#222222"
22
+    "styles" : {
23
+        "backgroundColor" : "#FFFFFF",
24
+        "borderRadius" : "5px",
25
+        "title" : {
26
+            "color" : "#222222"
27
+        },
28
+        "buttonAccept" : {
29
+            "color" : "#007545"
30
+        },
31
+        "buttonRefuse" : {
32
+            "color" : "#222222"
33
+        },
34
+        "buttonVisitor" : {
35
+            "color" : "#222222"
36
+        }
36 37
     }
37
-  }
38 38
 }

+ 29
- 1
en.json Wyświetl plik

@@ -146,5 +146,33 @@
146 146
 		"charge": "Charge",
147 147
 		"discharge": "Discharge",
148 148
 		"standing": "Standing"
149
+	},
150
+	"electricityprice": {
151
+	"title":"Types of Industrial and Commercial Electricity",
152
+	"area":"Select Region",
153
+	"electricity":"Electricity classification",
154
+	"voltagelevel":"Voltage level",
155
+	"selectdate":"Select Date",
156
+	"monthlytime":"Monthly Peak/Off-Peak Rates",
157
+	"periodtime":"Period",
158
+	"timesharing":"Time-of-Use",
159
+	"electricityprice":"Electricity Rate",
160
+	"Trend":"Monthly Price Trend",
161
+	"CP":"CP",
162
+	"PK":"PK",
163
+	"SH":"SH",
164
+	"OP":"OP",
165
+	"SOP":"SOP",
166
+	"Spread":"Max Peak-Valley Spread",
167
+	"monthly":"Monthly TOU Spread",
168
+	"capacitycharge":"Capacity Charge",
169
+	"electricitys":"Base Electricity Price",
170
+	"energyCharge":"Energy Charge",
171
+	"demandcharge":"Demand Charge",
172
+	"capacityprice":"Capacity Price",
173
+	// "kWmonth":"$/kW-month",
174
+	"kVAmonth":"$/kVA-month",
175
+	"kWh_":"$/kW-month",
176
+	"Profile":"Daily Electricity Price Profile"
149 177
 	}
150
-}
178
+}  

+ 539
- 0
font/demo.css Wyświetl plik

@@ -0,0 +1,539 @@
1
+/* Logo 字体 */
2
+@font-face {
3
+  font-family: "iconfont logo";
4
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
5
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
6
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
7
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
8
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
9
+}
10
+
11
+.logo {
12
+  font-family: "iconfont logo";
13
+  font-size: 160px;
14
+  font-style: normal;
15
+  -webkit-font-smoothing: antialiased;
16
+  -moz-osx-font-smoothing: grayscale;
17
+}
18
+
19
+/* tabs */
20
+.nav-tabs {
21
+  position: relative;
22
+}
23
+
24
+.nav-tabs .nav-more {
25
+  position: absolute;
26
+  right: 0;
27
+  bottom: 0;
28
+  height: 42px;
29
+  line-height: 42px;
30
+  color: #666;
31
+}
32
+
33
+#tabs {
34
+  border-bottom: 1px solid #eee;
35
+}
36
+
37
+#tabs li {
38
+  cursor: pointer;
39
+  width: 100px;
40
+  height: 40px;
41
+  line-height: 40px;
42
+  text-align: center;
43
+  font-size: 16px;
44
+  border-bottom: 2px solid transparent;
45
+  position: relative;
46
+  z-index: 1;
47
+  margin-bottom: -1px;
48
+  color: #666;
49
+}
50
+
51
+
52
+#tabs .active {
53
+  border-bottom-color: #f00;
54
+  color: #222;
55
+}
56
+
57
+.tab-container .content {
58
+  display: none;
59
+}
60
+
61
+/* 页面布局 */
62
+.main {
63
+  padding: 30px 100px;
64
+  width: 960px;
65
+  margin: 0 auto;
66
+}
67
+
68
+.main .logo {
69
+  color: #333;
70
+  text-align: left;
71
+  margin-bottom: 30px;
72
+  line-height: 1;
73
+  height: 110px;
74
+  margin-top: -50px;
75
+  overflow: hidden;
76
+  *zoom: 1;
77
+}
78
+
79
+.main .logo a {
80
+  font-size: 160px;
81
+  color: #333;
82
+}
83
+
84
+.helps {
85
+  margin-top: 40px;
86
+}
87
+
88
+.helps pre {
89
+  padding: 20px;
90
+  margin: 10px 0;
91
+  border: solid 1px #e7e1cd;
92
+  background-color: #fffdef;
93
+  overflow: auto;
94
+}
95
+
96
+.icon_lists {
97
+  width: 100% !important;
98
+  overflow: hidden;
99
+  *zoom: 1;
100
+}
101
+
102
+.icon_lists li {
103
+  width: 100px;
104
+  margin-bottom: 10px;
105
+  margin-right: 20px;
106
+  text-align: center;
107
+  list-style: none !important;
108
+  cursor: default;
109
+}
110
+
111
+.icon_lists li .code-name {
112
+  line-height: 1.2;
113
+}
114
+
115
+.icon_lists .icon {
116
+  display: block;
117
+  height: 100px;
118
+  line-height: 100px;
119
+  font-size: 42px;
120
+  margin: 10px auto;
121
+  color: #333;
122
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
123
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
124
+  transition: font-size 0.25s linear, width 0.25s linear;
125
+}
126
+
127
+.icon_lists .icon:hover {
128
+  font-size: 100px;
129
+}
130
+
131
+.icon_lists .svg-icon {
132
+  /* 通过设置 font-size 来改变图标大小 */
133
+  width: 1em;
134
+  /* 图标和文字相邻时,垂直对齐 */
135
+  vertical-align: -0.15em;
136
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
137
+  fill: currentColor;
138
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
139
+      normalize.css 中也包含这行 */
140
+  overflow: hidden;
141
+}
142
+
143
+.icon_lists li .name,
144
+.icon_lists li .code-name {
145
+  color: #666;
146
+}
147
+
148
+/* markdown 样式 */
149
+.markdown {
150
+  color: #666;
151
+  font-size: 14px;
152
+  line-height: 1.8;
153
+}
154
+
155
+.highlight {
156
+  line-height: 1.5;
157
+}
158
+
159
+.markdown img {
160
+  vertical-align: middle;
161
+  max-width: 100%;
162
+}
163
+
164
+.markdown h1 {
165
+  color: #404040;
166
+  font-weight: 500;
167
+  line-height: 40px;
168
+  margin-bottom: 24px;
169
+}
170
+
171
+.markdown h2,
172
+.markdown h3,
173
+.markdown h4,
174
+.markdown h5,
175
+.markdown h6 {
176
+  color: #404040;
177
+  margin: 1.6em 0 0.6em 0;
178
+  font-weight: 500;
179
+  clear: both;
180
+}
181
+
182
+.markdown h1 {
183
+  font-size: 28px;
184
+}
185
+
186
+.markdown h2 {
187
+  font-size: 22px;
188
+}
189
+
190
+.markdown h3 {
191
+  font-size: 16px;
192
+}
193
+
194
+.markdown h4 {
195
+  font-size: 14px;
196
+}
197
+
198
+.markdown h5 {
199
+  font-size: 12px;
200
+}
201
+
202
+.markdown h6 {
203
+  font-size: 12px;
204
+}
205
+
206
+.markdown hr {
207
+  height: 1px;
208
+  border: 0;
209
+  background: #e9e9e9;
210
+  margin: 16px 0;
211
+  clear: both;
212
+}
213
+
214
+.markdown p {
215
+  margin: 1em 0;
216
+}
217
+
218
+.markdown>p,
219
+.markdown>blockquote,
220
+.markdown>.highlight,
221
+.markdown>ol,
222
+.markdown>ul {
223
+  width: 80%;
224
+}
225
+
226
+.markdown ul>li {
227
+  list-style: circle;
228
+}
229
+
230
+.markdown>ul li,
231
+.markdown blockquote ul>li {
232
+  margin-left: 20px;
233
+  padding-left: 4px;
234
+}
235
+
236
+.markdown>ul li p,
237
+.markdown>ol li p {
238
+  margin: 0.6em 0;
239
+}
240
+
241
+.markdown ol>li {
242
+  list-style: decimal;
243
+}
244
+
245
+.markdown>ol li,
246
+.markdown blockquote ol>li {
247
+  margin-left: 20px;
248
+  padding-left: 4px;
249
+}
250
+
251
+.markdown code {
252
+  margin: 0 3px;
253
+  padding: 0 5px;
254
+  background: #eee;
255
+  border-radius: 3px;
256
+}
257
+
258
+.markdown strong,
259
+.markdown b {
260
+  font-weight: 600;
261
+}
262
+
263
+.markdown>table {
264
+  border-collapse: collapse;
265
+  border-spacing: 0px;
266
+  empty-cells: show;
267
+  border: 1px solid #e9e9e9;
268
+  width: 95%;
269
+  margin-bottom: 24px;
270
+}
271
+
272
+.markdown>table th {
273
+  white-space: nowrap;
274
+  color: #333;
275
+  font-weight: 600;
276
+}
277
+
278
+.markdown>table th,
279
+.markdown>table td {
280
+  border: 1px solid #e9e9e9;
281
+  padding: 8px 16px;
282
+  text-align: left;
283
+}
284
+
285
+.markdown>table th {
286
+  background: #F7F7F7;
287
+}
288
+
289
+.markdown blockquote {
290
+  font-size: 90%;
291
+  color: #999;
292
+  border-left: 4px solid #e9e9e9;
293
+  padding-left: 0.8em;
294
+  margin: 1em 0;
295
+}
296
+
297
+.markdown blockquote p {
298
+  margin: 0;
299
+}
300
+
301
+.markdown .anchor {
302
+  opacity: 0;
303
+  transition: opacity 0.3s ease;
304
+  margin-left: 8px;
305
+}
306
+
307
+.markdown .waiting {
308
+  color: #ccc;
309
+}
310
+
311
+.markdown h1:hover .anchor,
312
+.markdown h2:hover .anchor,
313
+.markdown h3:hover .anchor,
314
+.markdown h4:hover .anchor,
315
+.markdown h5:hover .anchor,
316
+.markdown h6:hover .anchor {
317
+  opacity: 1;
318
+  display: inline-block;
319
+}
320
+
321
+.markdown>br,
322
+.markdown>p>br {
323
+  clear: both;
324
+}
325
+
326
+
327
+.hljs {
328
+  display: block;
329
+  background: white;
330
+  padding: 0.5em;
331
+  color: #333333;
332
+  overflow-x: auto;
333
+}
334
+
335
+.hljs-comment,
336
+.hljs-meta {
337
+  color: #969896;
338
+}
339
+
340
+.hljs-string,
341
+.hljs-variable,
342
+.hljs-template-variable,
343
+.hljs-strong,
344
+.hljs-emphasis,
345
+.hljs-quote {
346
+  color: #df5000;
347
+}
348
+
349
+.hljs-keyword,
350
+.hljs-selector-tag,
351
+.hljs-type {
352
+  color: #a71d5d;
353
+}
354
+
355
+.hljs-literal,
356
+.hljs-symbol,
357
+.hljs-bullet,
358
+.hljs-attribute {
359
+  color: #0086b3;
360
+}
361
+
362
+.hljs-section,
363
+.hljs-name {
364
+  color: #63a35c;
365
+}
366
+
367
+.hljs-tag {
368
+  color: #333333;
369
+}
370
+
371
+.hljs-title,
372
+.hljs-attr,
373
+.hljs-selector-id,
374
+.hljs-selector-class,
375
+.hljs-selector-attr,
376
+.hljs-selector-pseudo {
377
+  color: #795da3;
378
+}
379
+
380
+.hljs-addition {
381
+  color: #55a532;
382
+  background-color: #eaffea;
383
+}
384
+
385
+.hljs-deletion {
386
+  color: #bd2c00;
387
+  background-color: #ffecec;
388
+}
389
+
390
+.hljs-link {
391
+  text-decoration: underline;
392
+}
393
+
394
+/* 代码高亮 */
395
+/* PrismJS 1.15.0
396
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
397
+/**
398
+ * prism.js default theme for JavaScript, CSS and HTML
399
+ * Based on dabblet (http://dabblet.com)
400
+ * @author Lea Verou
401
+ */
402
+code[class*="language-"],
403
+pre[class*="language-"] {
404
+  color: black;
405
+  background: none;
406
+  text-shadow: 0 1px white;
407
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
408
+  text-align: left;
409
+  white-space: pre;
410
+  word-spacing: normal;
411
+  word-break: normal;
412
+  word-wrap: normal;
413
+  line-height: 1.5;
414
+
415
+  -moz-tab-size: 4;
416
+  -o-tab-size: 4;
417
+  tab-size: 4;
418
+
419
+  -webkit-hyphens: none;
420
+  -moz-hyphens: none;
421
+  -ms-hyphens: none;
422
+  hyphens: none;
423
+}
424
+
425
+pre[class*="language-"]::-moz-selection,
426
+pre[class*="language-"] ::-moz-selection,
427
+code[class*="language-"]::-moz-selection,
428
+code[class*="language-"] ::-moz-selection {
429
+  text-shadow: none;
430
+  background: #b3d4fc;
431
+}
432
+
433
+pre[class*="language-"]::selection,
434
+pre[class*="language-"] ::selection,
435
+code[class*="language-"]::selection,
436
+code[class*="language-"] ::selection {
437
+  text-shadow: none;
438
+  background: #b3d4fc;
439
+}
440
+
441
+@media print {
442
+
443
+  code[class*="language-"],
444
+  pre[class*="language-"] {
445
+    text-shadow: none;
446
+  }
447
+}
448
+
449
+/* Code blocks */
450
+pre[class*="language-"] {
451
+  padding: 1em;
452
+  margin: .5em 0;
453
+  overflow: auto;
454
+}
455
+
456
+:not(pre)>code[class*="language-"],
457
+pre[class*="language-"] {
458
+  background: #f5f2f0;
459
+}
460
+
461
+/* Inline code */
462
+:not(pre)>code[class*="language-"] {
463
+  padding: .1em;
464
+  border-radius: .3em;
465
+  white-space: normal;
466
+}
467
+
468
+.token.comment,
469
+.token.prolog,
470
+.token.doctype,
471
+.token.cdata {
472
+  color: slategray;
473
+}
474
+
475
+.token.punctuation {
476
+  color: #999;
477
+}
478
+
479
+.namespace {
480
+  opacity: .7;
481
+}
482
+
483
+.token.property,
484
+.token.tag,
485
+.token.boolean,
486
+.token.number,
487
+.token.constant,
488
+.token.symbol,
489
+.token.deleted {
490
+  color: #905;
491
+}
492
+
493
+.token.selector,
494
+.token.attr-name,
495
+.token.string,
496
+.token.char,
497
+.token.builtin,
498
+.token.inserted {
499
+  color: #690;
500
+}
501
+
502
+.token.operator,
503
+.token.entity,
504
+.token.url,
505
+.language-css .token.string,
506
+.style .token.string {
507
+  color: #9a6e3a;
508
+  background: hsla(0, 0%, 100%, .5);
509
+}
510
+
511
+.token.atrule,
512
+.token.attr-value,
513
+.token.keyword {
514
+  color: #07a;
515
+}
516
+
517
+.token.function,
518
+.token.class-name {
519
+  color: #DD4A68;
520
+}
521
+
522
+.token.regex,
523
+.token.important,
524
+.token.variable {
525
+  color: #e90;
526
+}
527
+
528
+.token.important,
529
+.token.bold {
530
+  font-weight: bold;
531
+}
532
+
533
+.token.italic {
534
+  font-style: italic;
535
+}
536
+
537
+.token.entity {
538
+  cursor: help;
539
+}

+ 303
- 0
font/demo_index.html Wyświetl plik

@@ -0,0 +1,303 @@
1
+<!DOCTYPE html>
2
+<html>
3
+<head>
4
+  <meta charset="utf-8"/>
5
+  <title>iconfont Demo</title>
6
+  <link rel="shortcut icon" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg" type="image/x-icon"/>
7
+  <link rel="icon" type="image/svg+xml" href="//img.alicdn.com/imgextra/i4/O1CN01Z5paLz1O0zuCC7osS_!!6000000001644-55-tps-83-82.svg"/>
8
+  <link rel="stylesheet" href="https://g.alicdn.com/thx/cube/1.3.2/cube.min.css">
9
+  <link rel="stylesheet" href="demo.css">
10
+  <link rel="stylesheet" href="iconfont.css">
11
+  <script src="iconfont.js"></script>
12
+  <!-- jQuery -->
13
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/7bfddb60-08e8-11e9-9b04-53e73bb6408b.js"></script>
14
+  <!-- 代码高亮 -->
15
+  <script src="https://a1.alicdn.com/oss/uploads/2018/12/26/a3f714d0-08e6-11e9-8a15-ebf944d7534c.js"></script>
16
+  <style>
17
+    .main .logo {
18
+      margin-top: 0;
19
+      height: auto;
20
+    }
21
+
22
+    .main .logo a {
23
+      display: flex;
24
+      align-items: center;
25
+    }
26
+
27
+    .main .logo .sub-title {
28
+      margin-left: 0.5em;
29
+      font-size: 22px;
30
+      color: #fff;
31
+      background: linear-gradient(-45deg, #3967FF, #B500FE);
32
+      -webkit-background-clip: text;
33
+      -webkit-text-fill-color: transparent;
34
+    }
35
+  </style>
36
+</head>
37
+<body>
38
+  <div class="main">
39
+    <h1 class="logo"><a href="https://www.iconfont.cn/" title="iconfont 首页" target="_blank">
40
+      <img width="200" src="https://img.alicdn.com/imgextra/i3/O1CN01Mn65HV1FfSEzR6DKv_!!6000000000514-55-tps-228-59.svg">
41
+      
42
+    </a></h1>
43
+    <div class="nav-tabs">
44
+      <ul id="tabs" class="dib-box">
45
+        <li class="dib active"><span>Unicode</span></li>
46
+        <li class="dib"><span>Font class</span></li>
47
+        <li class="dib"><span>Symbol</span></li>
48
+      </ul>
49
+      
50
+      <a href="https://www.iconfont.cn/manage/index?manage_type=myprojects&projectId=4935042" target="_blank" class="nav-more">查看项目</a>
51
+      
52
+    </div>
53
+    <div class="tab-container">
54
+      <div class="content unicode" style="display: block;">
55
+          <ul class="icon_lists dib-box">
56
+          
57
+            <li class="dib">
58
+              <span class="icon iconfont">&#xe679;</span>
59
+                <div class="name">选择时间</div>
60
+                <div class="code-name">&amp;#xe679;</div>
61
+              </li>
62
+          
63
+            <li class="dib">
64
+              <span class="icon iconfont">&#xe606;</span>
65
+                <div class="name">跳转</div>
66
+                <div class="code-name">&amp;#xe606;</div>
67
+              </li>
68
+          
69
+            <li class="dib">
70
+              <span class="icon iconfont">&#xe65b;</span>
71
+                <div class="name">地区</div>
72
+                <div class="code-name">&amp;#xe65b;</div>
73
+              </li>
74
+          
75
+            <li class="dib">
76
+              <span class="icon iconfont">&#xe631;</span>
77
+                <div class="name">电压</div>
78
+                <div class="code-name">&amp;#xe631;</div>
79
+              </li>
80
+          
81
+            <li class="dib">
82
+              <span class="icon iconfont">&#xe7a4;</span>
83
+                <div class="name">分类</div>
84
+                <div class="code-name">&amp;#xe7a4;</div>
85
+              </li>
86
+          
87
+          </ul>
88
+          <div class="article markdown">
89
+          <h2 id="unicode-">Unicode 引用</h2>
90
+          <hr>
91
+
92
+          <p>Unicode 是字体在网页端最原始的应用方式,特点是:</p>
93
+          <ul>
94
+            <li>支持按字体的方式去动态调整图标大小,颜色等等。</li>
95
+            <li>默认情况下不支持多色,直接添加多色图标会自动去色。</li>
96
+          </ul>
97
+          <blockquote>
98
+            <p>注意:新版 iconfont 支持两种方式引用多色图标:SVG symbol 引用方式和彩色字体图标模式。(使用彩色字体图标需要在「编辑项目」中开启「彩色」选项后并重新生成。)</p>
99
+          </blockquote>
100
+          <p>Unicode 使用步骤如下:</p>
101
+          <h3 id="-font-face">第一步:拷贝项目下面生成的 <code>@font-face</code></h3>
102
+<pre><code class="language-css"
103
+>@font-face {
104
+  font-family: 'iconfont';
105
+  src: url('iconfont.woff2?t=1749196727947') format('woff2'),
106
+       url('iconfont.woff?t=1749196727947') format('woff'),
107
+       url('iconfont.ttf?t=1749196727947') format('truetype');
108
+}
109
+</code></pre>
110
+          <h3 id="-iconfont-">第二步:定义使用 iconfont 的样式</h3>
111
+<pre><code class="language-css"
112
+>.iconfont {
113
+  font-family: "iconfont" !important;
114
+  font-size: 16px;
115
+  font-style: normal;
116
+  -webkit-font-smoothing: antialiased;
117
+  -moz-osx-font-smoothing: grayscale;
118
+}
119
+</code></pre>
120
+          <h3 id="-">第三步:挑选相应图标并获取字体编码,应用于页面</h3>
121
+<pre>
122
+<code class="language-html"
123
+>&lt;span class="iconfont"&gt;&amp;#x33;&lt;/span&gt;
124
+</code></pre>
125
+          <blockquote>
126
+            <p>"iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
127
+          </blockquote>
128
+          </div>
129
+      </div>
130
+      <div class="content font-class">
131
+        <ul class="icon_lists dib-box">
132
+          
133
+          <li class="dib">
134
+            <span class="icon iconfont icon-xuanzeshijian"></span>
135
+            <div class="name">
136
+              选择时间
137
+            </div>
138
+            <div class="code-name">.icon-xuanzeshijian
139
+            </div>
140
+          </li>
141
+          
142
+          <li class="dib">
143
+            <span class="icon iconfont icon-guanbi"></span>
144
+            <div class="name">
145
+              跳转
146
+            </div>
147
+            <div class="code-name">.icon-guanbi
148
+            </div>
149
+          </li>
150
+          
151
+          <li class="dib">
152
+            <span class="icon iconfont icon-diqu"></span>
153
+            <div class="name">
154
+              地区
155
+            </div>
156
+            <div class="code-name">.icon-diqu
157
+            </div>
158
+          </li>
159
+          
160
+          <li class="dib">
161
+            <span class="icon iconfont icon-dianya"></span>
162
+            <div class="name">
163
+              电压
164
+            </div>
165
+            <div class="code-name">.icon-dianya
166
+            </div>
167
+          </li>
168
+          
169
+          <li class="dib">
170
+            <span class="icon iconfont icon-fenlei"></span>
171
+            <div class="name">
172
+              分类
173
+            </div>
174
+            <div class="code-name">.icon-fenlei
175
+            </div>
176
+          </li>
177
+          
178
+        </ul>
179
+        <div class="article markdown">
180
+        <h2 id="font-class-">font-class 引用</h2>
181
+        <hr>
182
+
183
+        <p>font-class 是 Unicode 使用方式的一种变种,主要是解决 Unicode 书写不直观,语意不明确的问题。</p>
184
+        <p>与 Unicode 使用方式相比,具有如下特点:</p>
185
+        <ul>
186
+          <li>相比于 Unicode 语意明确,书写更直观。可以很容易分辨这个 icon 是什么。</li>
187
+          <li>因为使用 class 来定义图标,所以当要替换图标时,只需要修改 class 里面的 Unicode 引用。</li>
188
+        </ul>
189
+        <p>使用步骤如下:</p>
190
+        <h3 id="-fontclass-">第一步:引入项目下面生成的 fontclass 代码:</h3>
191
+<pre><code class="language-html">&lt;link rel="stylesheet" href="./iconfont.css"&gt;
192
+</code></pre>
193
+        <h3 id="-">第二步:挑选相应图标并获取类名,应用于页面:</h3>
194
+<pre><code class="language-html">&lt;span class="iconfont icon-xxx"&gt;&lt;/span&gt;
195
+</code></pre>
196
+        <blockquote>
197
+          <p>"
198
+            iconfont" 是你项目下的 font-family。可以通过编辑项目查看,默认是 "iconfont"。</p>
199
+        </blockquote>
200
+      </div>
201
+      </div>
202
+      <div class="content symbol">
203
+          <ul class="icon_lists dib-box">
204
+          
205
+            <li class="dib">
206
+                <svg class="icon svg-icon" aria-hidden="true">
207
+                  <use xlink:href="#icon-xuanzeshijian"></use>
208
+                </svg>
209
+                <div class="name">选择时间</div>
210
+                <div class="code-name">#icon-xuanzeshijian</div>
211
+            </li>
212
+          
213
+            <li class="dib">
214
+                <svg class="icon svg-icon" aria-hidden="true">
215
+                  <use xlink:href="#icon-guanbi"></use>
216
+                </svg>
217
+                <div class="name">跳转</div>
218
+                <div class="code-name">#icon-guanbi</div>
219
+            </li>
220
+          
221
+            <li class="dib">
222
+                <svg class="icon svg-icon" aria-hidden="true">
223
+                  <use xlink:href="#icon-diqu"></use>
224
+                </svg>
225
+                <div class="name">地区</div>
226
+                <div class="code-name">#icon-diqu</div>
227
+            </li>
228
+          
229
+            <li class="dib">
230
+                <svg class="icon svg-icon" aria-hidden="true">
231
+                  <use xlink:href="#icon-dianya"></use>
232
+                </svg>
233
+                <div class="name">电压</div>
234
+                <div class="code-name">#icon-dianya</div>
235
+            </li>
236
+          
237
+            <li class="dib">
238
+                <svg class="icon svg-icon" aria-hidden="true">
239
+                  <use xlink:href="#icon-fenlei"></use>
240
+                </svg>
241
+                <div class="name">分类</div>
242
+                <div class="code-name">#icon-fenlei</div>
243
+            </li>
244
+          
245
+          </ul>
246
+          <div class="article markdown">
247
+          <h2 id="symbol-">Symbol 引用</h2>
248
+          <hr>
249
+
250
+          <p>这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。相关介绍可以参考这篇<a href="">文章</a>
251
+            这种用法其实是做了一个 SVG 的集合,与另外两种相比具有如下特点:</p>
252
+          <ul>
253
+            <li>支持多色图标了,不再受单色限制。</li>
254
+            <li>通过一些技巧,支持像字体那样,通过 <code>font-size</code>, <code>color</code> 来调整样式。</li>
255
+            <li>兼容性较差,支持 IE9+,及现代浏览器。</li>
256
+            <li>浏览器渲染 SVG 的性能一般,还不如 png。</li>
257
+          </ul>
258
+          <p>使用步骤如下:</p>
259
+          <h3 id="-symbol-">第一步:引入项目下面生成的 symbol 代码:</h3>
260
+<pre><code class="language-html">&lt;script src="./iconfont.js"&gt;&lt;/script&gt;
261
+</code></pre>
262
+          <h3 id="-css-">第二步:加入通用 CSS 代码(引入一次就行):</h3>
263
+<pre><code class="language-html">&lt;style&gt;
264
+.icon {
265
+  width: 1em;
266
+  height: 1em;
267
+  vertical-align: -0.15em;
268
+  fill: currentColor;
269
+  overflow: hidden;
270
+}
271
+&lt;/style&gt;
272
+</code></pre>
273
+          <h3 id="-">第三步:挑选相应图标并获取类名,应用于页面:</h3>
274
+<pre><code class="language-html">&lt;svg class="icon" aria-hidden="true"&gt;
275
+  &lt;use xlink:href="#icon-xxx"&gt;&lt;/use&gt;
276
+&lt;/svg&gt;
277
+</code></pre>
278
+          </div>
279
+      </div>
280
+
281
+    </div>
282
+  </div>
283
+  <script>
284
+  $(document).ready(function () {
285
+      $('.tab-container .content:first').show()
286
+
287
+      $('#tabs li').click(function (e) {
288
+        var tabContent = $('.tab-container .content')
289
+        var index = $(this).index()
290
+
291
+        if ($(this).hasClass('active')) {
292
+          return
293
+        } else {
294
+          $('#tabs li').removeClass('active')
295
+          $(this).addClass('active')
296
+
297
+          tabContent.hide().eq(index).fadeIn()
298
+        }
299
+      })
300
+    })
301
+  </script>
302
+</body>
303
+</html>

+ 35
- 0
font/iconfont.css Wyświetl plik

@@ -0,0 +1,35 @@
1
+@font-face {
2
+  font-family: "iconfont"; /* Project id 4935042 */
3
+  src: url('iconfont.woff2?t=1749196727947') format('woff2'),
4
+       url('iconfont.woff?t=1749196727947') format('woff'),
5
+       url('iconfont.ttf?t=1749196727947') format('truetype');
6
+}
7
+
8
+.iconfont {
9
+  font-family: "iconfont" !important;
10
+  font-size: 16px;
11
+  font-style: normal;
12
+  -webkit-font-smoothing: antialiased;
13
+  -moz-osx-font-smoothing: grayscale;
14
+}
15
+
16
+.icon-xuanzeshijian:before {
17
+  content: "\e679";
18
+}
19
+
20
+.icon-guanbi:before {
21
+  content: "\e606";
22
+}
23
+
24
+.icon-diqu:before {
25
+  content: "\e65b";
26
+}
27
+
28
+.icon-dianya:before {
29
+  content: "\e631";
30
+}
31
+
32
+.icon-fenlei:before {
33
+  content: "\e7a4";
34
+}
35
+

+ 1
- 0
font/iconfont.js
Plik diff jest za duży
Wyświetl plik


+ 44
- 0
font/iconfont.json Wyświetl plik

@@ -0,0 +1,44 @@
1
+{
2
+  "id": "4935042",
3
+  "name": "储能工商业app",
4
+  "font_family": "iconfont",
5
+  "css_prefix_text": "icon-",
6
+  "description": "",
7
+  "glyphs": [
8
+    {
9
+      "icon_id": "10710887",
10
+      "name": "选择时间",
11
+      "font_class": "xuanzeshijian",
12
+      "unicode": "e679",
13
+      "unicode_decimal": 59001
14
+    },
15
+    {
16
+      "icon_id": "731126",
17
+      "name": "跳转",
18
+      "font_class": "guanbi",
19
+      "unicode": "e606",
20
+      "unicode_decimal": 58886
21
+    },
22
+    {
23
+      "icon_id": "3851353",
24
+      "name": "地区",
25
+      "font_class": "diqu",
26
+      "unicode": "e65b",
27
+      "unicode_decimal": 58971
28
+    },
29
+    {
30
+      "icon_id": "3988230",
31
+      "name": "电压",
32
+      "font_class": "dianya",
33
+      "unicode": "e631",
34
+      "unicode_decimal": 58929
35
+    },
36
+    {
37
+      "icon_id": "12025958",
38
+      "name": "分类",
39
+      "font_class": "fenlei",
40
+      "unicode": "e7a4",
41
+      "unicode_decimal": 59300
42
+    }
43
+  ]
44
+}

BIN
font/iconfont.ttf Wyświetl plik


BIN
font/iconfont.woff Wyświetl plik


BIN
font/iconfont.woff2 Wyświetl plik


+ 2
- 0
main.js Wyświetl plik

@@ -3,6 +3,8 @@ import App from './App'
3 3
 // #ifndef VUE3
4 4
 import Vue from 'vue'
5 5
 import './uni.promisify.adaptor'
6
+import dLoading from '@/uni_modules/d-loading/components/d-loading/d-loading.vue'
7
+Vue.component('dLoading',dLoading)
6 8
 Vue.config.productionTip = false
7 9
 App.mpType = 'app'
8 10
 const app = new Vue({

+ 9
- 6
package.json Wyświetl plik

@@ -1,12 +1,15 @@
1 1
 {
2
-    "id": "jarvis-timePickerPopup",
3
-    "name": "时间范围弹窗选择器",
4
-    "displayName": "时间范围弹窗选择器",
2
+    "id": "zheng-loading",
3
+    "name": "加载动画zheng-loading",
4
+    "displayName": "加载动画zheng-loading",
5 5
     "version": "1.0.0",
6
-    "description": "时间范围弹窗选择器:使用uni-popup+picker-view实现",
6
+    "description": "自定义炫酷的加载动画,支持各个平台",
7 7
     "keywords": [
8
-        "时间选择器",
9
-        "时间范围"
8
+        "加载动画",
9
+        "炫酷动画",
10
+        "loading",
11
+        "加载中",
12
+        "动画"
10 13
     ],
11 14
     "dcloudext": {
12 15
         "category": [

+ 19
- 3
pages.json Wyświetl plik

@@ -99,11 +99,27 @@
99 99
 		"path" : "pages/electricityprice/index",
100 100
 		"style" : 
101 101
 		{
102
-			"navigationBarTitleText" : "查询电价"
102
+			"navigationBarTitleText" : "查询电价",
103
+			"navigationStyle": "custom" // 取消默认导航栏
104
+		}
105
+	},
106
+	{
107
+		"path" : "pages/economiccalculation/index",
108
+		"style" : 
109
+		{
110
+			"navigationBarTitleText" : "经济测算",
111
+			"navigationStyle": "custom" // 取消默认导航栏
112
+		}
113
+	},
114
+	{
115
+		"path" : "pages/report/index",
116
+		"style" : 
117
+		{
118
+			"navigationBarTitleText" : "经济测算报告",
119
+			"navigationStyle": "custom" // 取消默认导航栏
103 120
 		}
104 121
 	}
105
-	
106
-	
122
+
107 123
   ],
108 124
   "tabBar": {
109 125
     "color": "#999999",

+ 811
- 705
pages/device/index.vue
Plik diff jest za duży
Wyświetl plik


+ 27
- 16
pages/devicedetails/index.vue Wyświetl plik

@@ -4,7 +4,7 @@
4 4
 		<view class="container_title">
5 5
 			<l-liquid v-model:current="modelVale" :percent="target" :outline="true" background="#007545"
6 6
 				waveColor="#007545" innerColor="rgba(#007545, 0.1)">
7
-				<text class="liquid_text">{{devicedata.soc}}%</text>
7
+				<text class="liquid_text">{{devicedata.soc}} <text class="income_unit">%</text></text>
8 8
 			</l-liquid>
9 9
 		</view>
10 10
 			
@@ -17,36 +17,36 @@
17 17
 					<view class="income_yesterday">
18 18
 						<image class="income_image" src="/static/realtimepower.png" mode="aspectFill" />
19 19
 						<view class="income_yesterday1">{{$t('devicedetails.power')}}:</view>
20
-						<view class="income_yesterday2">{{devicedata.realTimepower}}kW</view>
20
+						<view class="income_yesterday2">{{devicedata.realTimepower}} <text class="income_unit">kW</text></view>
21 21
 					</view>
22 22
 					<view class="income_tired">
23 23
 						<image class="income_image" src="/static/electriccurrent.png" mode="aspectFill" />
24 24
 						<view class="income_tired1">{{$t('devicedetails.charge')}}:</view>
25
-						<view class="income_tired2">{{devicedata.chargingCurrent}}A</view>
25
+						<view class="income_tired2">{{devicedata.chargingCurrent}} <text class="income_unit">A</text></view>
26 26
 					</view>
27 27
 				</view>
28 28
 				<view class="income">
29 29
 					<view class="income_yesterday">
30 30
 						<image class="income_image" src="/static/cumulativestorage.png" mode="aspectFill" />
31 31
 						<view class="income_yesterday1">{{$t('devicedetails.today')}}:</view>
32
-						<view class="income_yesterday2">{{devicedata.dayExportKwh}}kWh</view>
32
+						<view class="income_yesterday2">{{devicedata.dayExportKwh}} <text class="income_unit">kWh</text></view>
33 33
 					</view>
34 34
 					<view class="income_tired">
35 35
 						<image class="income_image" src="/static/storage.png" mode="aspectFill" />
36 36
 						<view class="income_tired1">{{$t('devicedetails.total')}}:</view>
37
-						<view class="income_tired2">{{devicedata.accumulativeExportKwh}}kWh</view>
37
+						<view class="income_tired2">{{devicedata.accumulativeExportKwh}} <text class="income_unit">kWh</text></view>
38 38
 					</view>
39 39
 				</view>
40 40
 				<view class="income">
41 41
 					<view class="income_yesterday">
42 42
 						<image class="income_image" src="/static/totalvoltage.png" mode="aspectFill" />
43 43
 						<view class="income_yesterday1">{{$t('devicedetails.battery')}}:</view>
44
-						<view class="income_yesterday2">{{devicedata.totalVoltageOfBattery}}V</view>
44
+						<view class="income_yesterday2">{{devicedata.totalVoltageOfBattery}} <text class="income_unit">V</text></view>
45 45
 					</view>
46 46
 					<view class="income_tired">
47 47
 						<image class="income_image" src="/static/biandianzhan.png" mode="aspectFill" />
48 48
 						<view class="income_tired1">{{$t('devicedetails.insulation')}}:</view>
49
-						<view class="income_tired2">{{devicedata.insulationImpedance}}kQ</view>
49
+						<view class="income_tired2">{{devicedata.insulationImpedance}} <text class="income_unit">kQ</text></view>
50 50
 					</view>
51 51
 				</view>
52 52
 				<view class="income_income">
@@ -169,8 +169,8 @@
169 169
 				<view class="strategybox">
170 170
 				<image class="strategycalendar" src="/static/calendar.png" mode=""></image>
171 171
 					<view class="power_iconstrategy">
172
-					<view class="power_yesterday1">{{date}}</view>
173
-					<view class="power_yesterday1">{{$t('devicedetails.listTitle')}}:{{weekdaytype==1?$t('devicedetails.weekdays'):$t('devicedetails.weekends')}}</view>
172
+					<view class="power_yesterday11">{{date}}</view>
173
+					<view class="power_yesterday11">{{$t('devicedetails.listTitle')}}:{{weekdaytype==1?$t('devicedetails.weekdays'):$t('devicedetails.weekends')}}</view>
174 174
 					</view>
175 175
 				</view>
176 176
 			
@@ -184,7 +184,7 @@
184 184
 				<view class="strategybox">
185 185
 				<image class="strategy" src="/static/startstop.png" mode=""></image>
186 186
 					<view class="power_iconstrategy">
187
-					<view class="power_yesterday1">{{$t('devicedetails.powerControl')}}</view>
187
+					<view class="power_yesterday11">{{$t('devicedetails.powerControl')}}</view>
188 188
 					<!-- <view class="power_yesterday1">2024-09-13</view> -->
189 189
 					</view>
190 190
 				</view>
@@ -762,6 +762,7 @@
762 762
 	}
763 763
 
764 764
 	.liquid_text {
765
+		font-size: 38rpx;
765 766
 		color: #fff;
766 767
 	}
767 768
 
@@ -783,6 +784,7 @@
783 784
 	}
784 785
 	.health{
785 786
 		color: #007545;
787
+		font-size: 28rpx;
786 788
 		margin-bottom: 20rpx;
787 789
 	}
788 790
 .container_box1{
@@ -845,16 +847,16 @@
845 847
 	.income_yesterday1,
846 848
 	.income_moon1,
847 849
 	.income_tired1 {
848
-		font-size: 24rpx;
850
+		font-size: 26rpx;
849 851
 		color: #999999;
850 852
 	}
851 853
 
852 854
 	.income_yesterday2,
853 855
 	.income_moon2,
854 856
 	.income_tired2 {
855
-		font-size: 24rpx;
857
+		font-size: 26rpx;
856 858
 		margin-left: 8rpx;
857
-		color: #999999;
859
+		color: #222;
858 860
 	}
859 861
 
860 862
 	.qiun_data {
@@ -935,6 +937,11 @@
935 937
 		margin-left:10rpx;
936 938
 		color: #999999;
937 939
 	}
940
+	.power_yesterday11{
941
+		font-size: 26rpx;
942
+		margin-left:10rpx;
943
+		color: #222;
944
+	}
938 945
 .power_moon2,.power_yesterday2,.power_tired2{
939 946
 	margin-top:10rpx;
940 947
 	font-size: 24rpx;
@@ -968,7 +975,7 @@
968 975
 		border: 0.2rpx solid #999999;
969 976
 		border-radius: 40rpx;
970 977
 		overflow: overlay;
971
-	}
978
+	}xz
972 979
 
973 980
 	.datecalendar_1sun {
974 981
 		flex: 1;
@@ -1169,6 +1176,8 @@
1169 1176
 			border-radius: 10rpx;
1170 1177
 			background-color: #ffffff;
1171 1178
 			margin-top: 20rpx;
1179
+			overflow: hidden;
1180
+			box-sizing: border-box;
1172 1181
 		} 
1173 1182
 		.power_iconstrategy{
1174 1183
 			flex-direction: column;
@@ -1189,7 +1198,7 @@
1189 1198
 		}
1190 1199
 		.power_strategy{
1191 1200
 			font-size: 24rpx;
1192
-			color: #B2D5CB;
1201
+			color: #ccc;
1193 1202
 			display: flex;
1194 1203
 			align-items: center;
1195 1204
 		}
@@ -1369,5 +1378,7 @@
1369 1378
 		.popupbutton{
1370 1379
 			display: flex;
1371 1380
 		}
1372
-	
1381
+	.income_unit{
1382
+		font-size: 20rpx;
1383
+	}
1373 1384
 </style>

+ 1206
- 0
pages/economiccalculation/index.vue
Plik diff jest za duży
Wyświetl plik


+ 551
- 316
pages/electricityprice/index.vue
Plik diff jest za duży
Wyświetl plik


+ 30
- 21
pages/hostdetails/index.vue Wyświetl plik

@@ -4,7 +4,7 @@
4 4
 		<view class="container_title">
5 5
 			<l-liquid v-model:current="modelVale" :percent="target" :outline="true" background="#007545"
6 6
 				waveColor="#007545" innerColor="rgba(#007545, 0.1)">
7
-				<text class="liquid_text">{{devicedata.soc*1}}%</text>
7
+				<text class="liquid_text">{{devicedata.soc*1}} <text class="income_unit">%</text></text>
8 8
 			</l-liquid>
9 9
 		</view>
10 10
 		<view class="container_box">
@@ -42,46 +42,46 @@
42 42
 					<view class="income_tired_soc">
43 43
 						<image class="income_image" src="/static/soc.png" mode="aspectFit" />
44 44
 						<!-- <view class="income_tired1">今日放电</view> -->
45
-						<view class="income_tired2">{{devicedata.soc*1}}%</view>
45
+						<view class="income_tired2">{{devicedata.soc*1}} <text class="income_unit">%</text></view>
46 46
 					</view>
47 47
 				</view>
48 48
 				<view class="income">
49 49
 					<view class="income_yesterday">
50 50
 						<view class="income_yesterday1">{{$t('hostdetails.va')}}:</view>
51
-						<view class="income_yesterday2">{{devicedata.abLinevoltage*1}}V</view>
51
+						<view class="income_yesterday2">{{devicedata.abLinevoltage*1}} <text class="income_unit">V</text></view>
52 52
 					</view>
53 53
 				
54 54
 					<view class="income_tired">
55 55
 						<view class="income_tired1">{{$t('hostdetails.ia')}}:</view>
56
-						<view class="income_tired2">{{devicedata.aphasecurrent*1}}A</view>
56
+						<view class="income_tired2">{{devicedata.aphasecurrent*1}} <text class="income_unit">A</text></view>
57 57
 					</view>
58 58
 				</view>
59 59
 				<view class="income">
60 60
 					<view class="income_yesterday">
61 61
 						<view class="income_yesterday1">{{$t('hostdetails.vb')}}:</view>
62
-						<view class="income_yesterday2">{{devicedata.bcLinevoltage*1}}V</view>
62
+						<view class="income_yesterday2">{{devicedata.bcLinevoltage*1}} <text class="income_unit">V</text></view>
63 63
 					</view>
64 64
 				
65 65
 					<view class="income_tired">
66 66
 						<view class="income_tired1">{{$t('hostdetails.ib')}}:</view>
67
-						<view class="income_tired2">{{devicedata.bphasecurrent*1}}A</view>
67
+						<view class="income_tired2">{{devicedata.bphasecurrent*1}} <text class="income_unit">A</text></view>
68 68
 					</view>
69 69
 				</view>
70 70
 				<view class="income">
71 71
 					<view class="income_yesterday">
72 72
 						<view class="income_yesterday1">{{$t('hostdetails.vc')}}:</view>
73
-						<view class="income_yesterday2">{{devicedata.caLinevoltage*1}}V</view>
73
+						<view class="income_yesterday2">{{devicedata.caLinevoltage*1}} <text class="income_unit">V</text></view>
74 74
 					</view>
75 75
 				
76 76
 					<view class="income_tired">
77 77
 						<view class="income_tired1">{{$t('hostdetails.ic')}}:</view>
78
-						<view class="income_tired2">{{devicedata.cphasecurrent*1}}A</view>
78
+						<view class="income_tired2">{{devicedata.cphasecurrent*1}} <text class="income_unit">A</text></view>
79 79
 					</view>
80 80
 				</view>
81 81
 				<view class="income">
82
-					<view class="income_yesterday">
82
+					<view class="income_yesterday" style="margin-left: 20rpx;">
83 83
 						<view class="income_yesterday1">{{$t('hostdetails.ac')}}:</view>
84
-						<view class="income_yesterday2">{{devicedata.acPower*1}}kWh</view>
84
+						<view class="income_yesterday2">{{devicedata.acPower*1}} <text class="income_unit">kWh</text></view>
85 85
 					</view>
86 86
 				
87 87
 					<view class="income_tired">
@@ -104,7 +104,7 @@
104 104
 					{{item.emsDeviceId}}
105 105
 				</view>
106 106
 				<view class="energy_boxtitle2">
107
-					{{$t('hostdetails.ac')}}:{{item.communicationPower*1}}kW
107
+					{{$t('hostdetails.ac')}}:{{item.communicationPower*1}} <text class="income_unit">kW</text>
108 108
 				</view>
109 109
 			</view>
110 110
 			<view class="energy_right">
@@ -135,7 +135,7 @@
135 135
 						{{$t('hostdetails.fault')}}
136 136
 					</view>
137 137
 					<view class="energy_boxright2">
138
-						SOC:{{item.soc*1}}%
138
+						SOC:{{item.soc*1}} <text class="income_unit">%</text>
139 139
 					</view>
140 140
 				</view>
141 141
 				<image class="energy_jumpto" src="/static/jumpto.png" mode=""></image>
@@ -185,8 +185,8 @@
185 185
 				<view class="strategybox">
186 186
 				<image class="strategycalendar" src="/static/calendar.png" mode=""></image>
187 187
 					<view class="power_iconstrategy">
188
-					<view class="power_yesterday1">{{date}}</view>
189
-					<view class="power_yesterday1">{{$t('hostdetails.listTitle')}}:{{weekdaytype==1?$t('hostdetails.weekdays'):$t('hostdetails.weekends')}}</view>
188
+					<view class="power_yesterday11">{{date}}</view>
189
+					<view class="power_yesterday11">{{$t('hostdetails.listTitle')}}:{{weekdaytype==1?$t('hostdetails.weekdays'):$t('hostdetails.weekends')}}</view>
190 190
 					</view>
191 191
 				</view>
192 192
 			
@@ -200,7 +200,7 @@
200 200
 				<view class="strategybox">
201 201
 				<image class="strategy" src="/static/startstop.png" mode=""></image>
202 202
 					<view class="power_iconstrategy">
203
-					<view class="power_yesterday1">{{$t('hostdetails.powerControl')}}</view>
203
+					<view class="power_yesterday11">{{$t('hostdetails.powerControl')}}</view>
204 204
 					<!-- <view class="power_yesterday1">2024-09-13</view> -->
205 205
 					</view>
206 206
 				</view>
@@ -424,6 +424,7 @@
424 424
 	}
425 425
 
426 426
 	.liquid_text {
427
+		font-size: 38rpx;
427 428
 		color: #fff;
428 429
 	}
429 430
 
@@ -506,14 +507,14 @@
506 507
 	.income_yesterday1,
507 508
 	.income_moon1,
508 509
 	.income_tired1 {
509
-		font-size: 24rpx;
510
+		font-size: 28rpx;
510 511
 		color: #999999;
511 512
 	}
512 513
 
513 514
 	.income_yesterday2,
514 515
 	.income_moon2,
515 516
 	.income_tired2 {
516
-		font-size: 26rpx;
517
+		font-size: 28rpx;
517 518
 		font-weight: 400;
518 519
 	}
519 520
 
@@ -552,6 +553,7 @@
552 553
 		display: flex;
553 554
 		align-items: center;
554 555
 		justify-content: space-between;
556
+		overflow: hidden;
555 557
 	}
556 558
 
557 559
 	.power_yesterday,
@@ -591,10 +593,15 @@
591 593
 	.power_yesterday1,
592 594
 	.power_moon1,
593 595
 	.power_tired1 {
594
-		font-size: 26rpx;
596
+		font-size: 28rpx;
595 597
 		margin-left:10rpx;
596 598
 		color: #999999;
597 599
 	}
600
+	.power_yesterday11{
601
+		font-size: 26rpx;
602
+		margin-left:10rpx;
603
+		color: #222;
604
+	}
598 605
 .power_moon2,.power_yesterday2,.power_tired2{
599 606
 	margin-top:10rpx;
600 607
 	font-size: 24rpx;
@@ -763,7 +770,7 @@
763 770
 	}
764 771
 
765 772
 	.energy_boxright1 {
766
-		padding: 8rpx 6rpx;
773
+		padding: 8rpx 30rpx;
767 774
 		font-size: 26rpx;
768 775
 		border-radius: 50rpx;
769 776
 		display: flex;
@@ -864,7 +871,7 @@
864 871
 	}
865 872
 	.power_strategy{
866 873
 		font-size: 24rpx;
867
-		color: #B2D5CB;
874
+		color: #ccc;
868 875
 		display: flex;
869 876
 		align-items: center;
870 877
 	}
@@ -1044,7 +1051,9 @@
1044 1051
 		.popupbutton{
1045 1052
 			display: flex;
1046 1053
 		}
1047
-	
1054
+	.income_unit{
1055
+		font-size: 20rpx;
1056
+	}
1048 1057
 </style>
1049 1058
 
1050 1059
 /*  */

+ 9
- 3
pages/index/index.vue Wyświetl plik

@@ -43,10 +43,10 @@
43 43
 	掌握收益趋势
44 44
 </view>
45 45
 </view>
46
-<view class="topfinance">
46
+<view class="topfinance" @click="calculation">  
47 47
 	<image class="topfinanceimage" src="https://esos-iot.bjdexn.cn/myminio/project/c46bf20166d74c6ca6e0e5af87d5a5de.png" mode=""></image>
48 48
 	<view class="topfinance_title">
49
-		金融计
49
+		经济测
50 50
 	</view>
51 51
 	<view class="topfinance_subtitle">
52 52
 		金融服务全新升级
@@ -274,10 +274,16 @@
274 274
 				uni.navigateTo({
275 275
 					url:'/pages/electricityprice/index'
276 276
 				})
277
+			},
278
+			// 经济测算
279
+			calculation(){
280
+				uni.navigateTo({
281
+					url:'/pages/economiccalculation/index'
282
+				})
277 283
 			}
278 284
 		}
279 285
 	}
280
-</script>
286
+</script> 
281 287
 <!--  -->
282 288
 <style scoped>
283 289
 	.uni-page {

+ 9
- 9
pages/login/index.vue Wyświetl plik

@@ -32,9 +32,7 @@
32 32
  <button class="button_button" color="#F0F5F5" @click="onLogin">{{$t('login.submit')}}</button>
33 33
  </view>
34 34
  <view class="agreement">
35
-	 <checkbox-group @change="checkboxChange">
36
-  <checkbox t-class="t_box" value="checked" icon="dot"></checkbox>
37
-	 </checkbox-group>
35
+  <radio @click.stop="checkboxChange" value="1" :checked="checked" color="#007545" />
38 36
  {{$t('login.terms')}}<text class="agreement_color" data-name="服务协议" @click="onprivacy"> {{$t('login.Terms')}}</text> {{$t('login.&')}}<text class="agreement_color" data-name="隐私政策" @click="onprivacy"> {{$t('login.Privacy')}}</text> </view>
39 37
  </view>
40 38
 			
@@ -69,6 +67,12 @@ import { onMounted,ref } from 'vue';
69 67
 		   icon: 'none',
70 68
 		 
71 69
 		   });
70
+		 }else if(account.value==''||password.value=='' ){
71
+			return uni.showToast({
72
+			  title: '请输入正确的账户与密码',
73
+			icon: 'none',
74
+					 
75
+			}); 
72 76
 		 }
73 77
 	 try {
74 78
 	    const response = await request({
@@ -93,11 +97,7 @@ import { onMounted,ref } from 'vue';
93 97
 	 
94 98
 	 };
95 99
 	 const checkboxChange = (e) => {
96
-			 if(e.detail.value[0]=='checked'){
97
-				 checked.value = true
98
-			 }else{
99
-				 checked.value = false
100
-			 }
100
+		 checked.value = !checked.value
101 101
 	 };
102 102
 	 const onprivacy = (e) => {
103 103
 			 // uni.navigateTo({
@@ -160,7 +160,7 @@ import { onMounted,ref } from 'vue';
160 160
 			}
161 161
 
162 162
 </script>
163
- <!-- 
163
+<!-- 
164 164
 
165 165
  --> 
166 166
 <style scoped>

+ 162
- 12
pages/personalInformation/index.vue Wyświetl plik

@@ -1,25 +1,155 @@
1 1
 <template>
2 2
 	<view class="container">
3 3
 		<view class="account_number">
4
-	 
4
+	     	<image @click="chooseImage" class="account_to" :src="user.user.avatar" mode=""></image>
5 5
 		</view>
6 6
 		<view class="toptabbar">
7
-	 
7
+			<view class="toptabbar_">
8
+				<view class="toptabbar_box">
9
+								<view class="toptabbar_left">
10
+									名称
11
+								</view>
12
+									<view class="toptabbar_right">
13
+										{{user.user.loginName||''}}
14
+									</view>
15
+							</view>
16
+				<view class="toptabbar_box">
17
+					<view class="toptabbar_left">
18
+						角色
19
+					</view>
20
+						<view class="toptabbar_right">
21
+							{{user.user.roles[0].roleName||''}}
22
+						</view>
23
+				</view>
24
+				<view class="toptabbar_box">
25
+					<view class="toptabbar_left">
26
+						公司
27
+					</view>
28
+						<view class="toptabbar_right">
29
+							{{user.user.dept.deptName||''}}
30
+						</view>
31
+				</view>
32
+				<view class="toptabbar_box">
33
+					<view class="toptabbar_left">
34
+						创建时间
35
+					</view>
36
+						<view class="toptabbar_right">
37
+							{{user.user.createTime||''}}
38
+						</view>
39
+				</view>
40
+			
41
+			</view>
42
+		
8 43
 	</view>
9 44
 	 
10 45
 	</view>
11 46
 </template>
12
-
47
+<!--    -->
13 48
 <script>
49
+	import request from '@/utils/request';
14 50
 	export default {
15 51
 		data() {
16 52
 			return {
53
+				user:[],
17 54
 				
18 55
 			}
19 56
 		},
57
+	onLoad() {
58
+	 this.getuserinfo()
59
+	},
20 60
 		methods: {
21
-			
22
-		}
61
+	async getuserinfo() {
62
+				try {
63
+					const response = await request({
64
+						url: '/platform/user/selectaccountNumber',
65
+						method: 'post',
66
+						header: {
67
+							'Content-Type': 'application/x-www-form-urlencoded'
68
+						},
69
+					});
70
+					this.user = response.data
71
+				} catch (error) {
72
+					console.error('登录失败:', error);
73
+				}
74
+			},
75
+			  // 选择图片
76
+			  chooseImage() {
77
+			    uni.chooseImage({
78
+			      count: 1,
79
+			      sizeType: ['original', 'compressed'],
80
+			      sourceType: ['album', 'camera'],
81
+			      success: (res) => {
82
+			        const tempFilePaths = res.tempFilePaths;
83
+			        // 使用 uni.uploadFile 方式上传
84
+			        this.uploadFile(tempFilePaths[0]);
85
+			      },
86
+			      fail: (err) => {
87
+			        console.error('选择图片失败:', err);
88
+			        uni.showToast({
89
+			          title: '选择图片失败',
90
+			          icon: 'none'
91
+			        });
92
+			      }
93
+			    });
94
+			  },
95
+			 // 使用 uni.uploadFile 上传
96
+			  async uploadFile(filePath) {
97
+			    uni.showLoading({
98
+			      title: '上传中...'
99
+			    });
100
+			    
101
+			    try {
102
+			      const response = await new Promise((resolve, reject) => {
103
+			        uni.uploadFile({
104
+			          url: 'https://esos-iot.bjdexn.cn/platform/shu/upload/webPost', // 如 '/platform/shu/upload/webPost'
105
+			          filePath: filePath,
106
+			          name: 'file', // 后端接收的字段名
107
+			          formData: {},
108
+			          success: resolve,
109
+			          fail: reject
110
+			        });
111
+			      });
112
+			      
113
+			      const res = JSON.parse(response.data);
114
+			      await this.updateAvatar(res.data.url);
115
+			      
116
+			      uni.hideLoading();
117
+			      uni.showToast({
118
+			        title: '上传成功',
119
+			        icon: 'success'
120
+			      });
121
+			      
122
+			    } catch (error) {
123
+			      console.error('上传失败:', error);
124
+			      uni.hideLoading();
125
+			      uni.showToast({
126
+			        title: '上传失败',
127
+			        icon: 'none'
128
+			      });
129
+			    }
130
+			  },
131
+			 // 更新头像URL
132
+			  async updateAvatar(url) {
133
+				 
134
+			    try {
135
+			      const response = await request({
136
+			        url: '/platform/user/profile/update',
137
+			        method: 'post',
138
+			        header: {
139
+			         'Content-Type': 'application/x-www-form-urlencoded'
140
+			        },
141
+			        data:{avatar:url},
142
+			      });
143
+				  this.getuserinfo();
144
+			      // 更新本地用户信息等操作
145
+			      
146
+			    } catch (error) {
147
+			      console.error('头像更新失败:', error);
148
+			      throw error;
149
+			    }
150
+				
151
+			  }
152
+			}
23 153
 	}
24 154
 </script>
25 155
 
@@ -29,8 +159,9 @@
29 159
 	  		height: 100%;
30 160
 	  	}
31 161
 	  .container {
32
-	  	height: 92vh;
33
-	    background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%);
162
+	  	height: 100%;
163
+	    /* background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%); */
164
+		background-color: #f5f5f5;
34 165
 	    box-sizing: border-box;
35 166
 	  }     
36 167
 	  .account_number{
@@ -40,14 +171,33 @@
40 171
 		justify-content: center;
41 172
 		box-sizing: border-box;
42 173
 	  }
43
-	 
174
+	 .account_to{
175
+		 width: 200rpx;
176
+		 height: 200rpx;
177
+		 border-radius: 100rpx;
178
+	 }
44 179
  
45 180
 	   .toptabbar {
46 181
 	     width: 100%;
47
-	     padding: 10rpx 20rpx;
182
+	     padding: 10rpx 40rpx;
48 183
 	     box-sizing: border-box;
49 184
 	   }
50
-		
51
- 
52
- 
185
+	   .toptabbar_{
186
+		   border-radius: 10rpx;
187
+		   overflow: hidden;
188
+		   padding:0rpx 20rpx 20rpx 20rpx;
189
+		   background-color: #ffffff;
190
+	   }
191
+		.toptabbar_box{
192
+			width: 100%;
193
+			height: 120rpx;
194
+			display: flex;
195
+			align-items: center;
196
+			justify-content: space-between;
197
+			border-bottom: 1rpx #f5f5f5 solid;
198
+		}
199
+        .toptabbar_left{
200
+		 font-size: 28rpx;
201
+		}
202
+
53 203
 </style>

+ 84
- 57
pages/powerstation/index.vue Wyświetl plik

@@ -4,43 +4,45 @@
4 4
 		<view class="container_title">
5 5
 			<l-liquid v-model:current="modelVale" :percent="target" :outline="true" background="#007545"
6 6
 				waveColor="#007545" innerColor="rgba(#007545, 0.1)">
7
-				<text class="liquid_text">{{modelVale}}%</text>
7
+				<text class="liquid_text">{{modelVale}} <text class="income_unit">%</text></text>
8 8
 			</l-liquid>
9 9
 		</view>
10 10
 		<view class="container_box">
11 11
 			<view class="income_box">
12 12
 				<view class="income">
13
-					<view class="income_yesterday">
14
-						<image class="income_image" src="/static/income.png" mode="aspectFill" />
15
-						<view class="income_yesterday1">{{$t('powerstation.yesterdayEarnings')}}</view>
16
-						<view class="income_yesterday2">{{devicedata.yesterdaysearnings?devicedata.yesterdaysearnings.toFixed(2):''}}元</view>
17
-					</view>
13
+				
18 14
 					<view class="income_moon">
19 15
 						<image class="income_image" src="/static/charge.png" mode="aspectFill" />
20 16
 						<view class="income_moon1">{{$t('powerstation.todayCharge')}}</view>
21
-						<view class="income_moon2">{{devicedata.dayImportKwh}}kWh</view>
17
+						<view class="income_moon2">{{devicedata.dayImportKwh}} <text class="income_unit">kWh</text> </view>
22 18
 					</view>
23 19
 					<view class="income_tired">
24 20
 						<image class="income_image" src="/static/discharge.png" mode="aspectFill" />
25 21
 						<view class="income_tired1">{{$t('powerstation.todayDischarge')}}</view>
26
-						<view class="income_tired2">{{devicedata.dayExportKwh}}kWh</view>
22
+						<view class="income_tired2">{{devicedata.dayExportKwh}} <text class="income_unit">kWh</text></view>
27 23
 					</view>
28
-				</view>
29
-				<view class="income">
30 24
 					<view class="income_yesterday">
31 25
 						<image class="income_image" src="/static/Cumulative.png" mode="aspectFill" />
32 26
 						<view class="income_yesterday1">{{$t('powerstation.totalDischarge')}}</view>
33
-						<view class="income_yesterday2">{{Accumulateddischarge(devicedata.accumulativeExportKwh)}}</view>
27
+						<view class="income_yesterday2">{{Accumulateddischarge(devicedata.accumulativeExportKwh)}} <text class="income_unit">{{Accumulateddischargeunit(devicedata.accumulativeExportKwh)}}</text></view>
28
+					</view>
29
+				</view>
30
+				<view class="income">
31
+					<view class="income_yesterday">
32
+						<image class="income_image" src="/static/income.png" mode="aspectFill" />
33
+						<view class="income_yesterday1">{{$t('powerstation.yesterdayEarnings')}}</view>
34
+						<view class="income_yesterday2">{{devicedata.yesterdaysearnings?devicedata.yesterdaysearnings.toFixed(2):''}} <text class="income_unit">元</text></view>
34 35
 					</view>
36
+				
35 37
 					<view class="income_moon">
36 38
 						<image class="income_image" src="/static/totalrevenue.png" mode="aspectFill" />
37 39
 						<view class="income_moon1">{{$t('powerstation.totalEarnings')}}</view>
38
-						<view class="income_moon2">{{formatAmount(devicedata.totalProfit)}}元</view>
40
+						<view class="income_moon2">{{formatAmount(devicedata.totalProfit)}} <text class="income_unit">{{formatAmountunit(devicedata.totalProfit)}}</text> </view>
39 41
 					</view>
40 42
 					<view class="income_tired">
41 43
 						<image class="income_image" src="/static/efficiency.png" mode="aspectFill" />
42 44
 						<view class="income_tired1">{{$t('powerstation.systemEfficiency')}}</view>
43
-						<view class="income_tired2">99%</view>
45
+						<view class="income_tired2">99 <text class="income_unit">%</text></view>
44 46
 					</view>
45 47
 				</view>
46 48
 			</view>
@@ -61,15 +63,24 @@
61 63
 		<view class="datecalendar">
62 64
 			<view class="datecalendar_1">
63 65
 				<view @click="ondatecalendar(1)" class="datecalendar_1sun"
64
-					:style="brightcalendar == 1?'backgroundColor:#007544;color:#ffffff':'backgroundColor:#ffffff'">
66
+					:style="{
67
+					   backgroundColor: brightcalendar === 1 ? '#007544' : '#ffffff',
68
+					   color: brightcalendar === 1 ? '#ffffff' : 'inherit'
69
+					 }">
65 70
 					{{$t('powerstation.daily')}}
66 71
 				</view>
67 72
 				<view @click="ondatecalendar(2)" class="datecalendar_1moon"
68
-					:style="brightcalendar == 2?'backgroundColor:#007544;color:#ffffff':'backgroundColor:#ffffff'">
73
+					:style="{
74
+					   backgroundColor: brightcalendar === 2 ? '#007544' : '#ffffff',
75
+					   color: brightcalendar === 2 ? '#ffffff' : 'inherit'
76
+					 }">
69 77
 					{{$t('powerstation.monthly')}}
70 78
 				</view>
71 79
 				<view @click="ondatecalendar(3)" class="datecalendar_1year"
72
-					:style="brightcalendar==3?'backgroundColor:#007544;color:#ffffff':'backgroundColor:#ffffff'">
80
+					:style="{
81
+					   backgroundColor: brightcalendar === 3 ? '#007544' : '#ffffff',
82
+					   color: brightcalendar === 3 ? '#ffffff' : 'inherit'
83
+					 }">
73 84
 					{{$t('powerstation.yearly')}}
74 85
 				</view>
75 86
 			</view>
@@ -82,15 +93,15 @@
82 93
 		<!-- 图表 -->
83 94
 		<view class="qiun_data">
84 95
 			<view class="qiun_title" v-if="brightcalendar == 1">
85
-				{{tabIndex==0?$t('powerstation.batteryStatus')+'(MWh)':$t('powerstation.earnings')+'(元)'}}
96
+				{{tabIndex==0?$t('powerstation.batteryStatus'):$t('powerstation.earnings')}} <text class="income_unit">{{tabIndex==0?'(MWh)':'(万元)'}}</text>
86 97
 			</view>
87 98
 			<view class="qiun_title" v-if="brightcalendar == 2">
88
-				{{tabIndex==0?$t('powerstation.batteryStatus')+'(MWh)':$t('powerstation.earnings')+'(元)'}}
99
+				{{tabIndex==0?$t('powerstation.batteryStatus'):$t('powerstation.earnings')}} <text class="income_unit">{{tabIndex==0?'(MWh)':'(万元)'}}</text>
89 100
 			</view>
90 101
 			<view class="qiun_title" v-if="brightcalendar == 3">
91
-				{{tabIndex==0?$t('powerstation.batteryStatus')+'(MWh)':$t('powerstation.batteryStatus')+'(元)'}}
102
+				{{tabIndex==0?$t('powerstation.batteryStatus'):$t('powerstation.batteryStatus')}}<text class="income_unit">{{tabIndex==0?'(MWh)':'(万元)'}}</text> 
92 103
 			</view>
93
-			<qiun-data-charts type="column" :opts="opts" :ontouch="true" :chartData="chartData" />
104
+			<qiun-data-charts type="column" :opts="opts" :ontouch="true" :chartData="chartData" background='rgba(0,0,0,0)'/>
94 105
 		</view>
95 106
 <view class="energy_hostbox">
96 107
 	<view class="energy_host">
@@ -105,7 +116,7 @@
105 116
 					{{item.name||$t('powerstation.Unnamed')}}
106 117
 				</view>
107 118
 				<view class="energy_boxtitle2">
108
-					{{$t('powerstation.ac')}}:{{(item.acPower*1)}}kW
119
+					{{$t('powerstation.ac')}}:{{(item.acPower*1)}} <text class="income_unit">kW</text> 
109 120
 				</view>
110 121
 			</view>
111 122
 			<view class="energy_right">
@@ -150,7 +161,7 @@
150 161
 		<!-- 电站信息 -->
151 162
 		<view class="power_box">
152 163
 			<view class="powerstation">
153
-				<view class="power_yesterday" @click="ondevices">
164
+				<view class="power_yesterday">
154 165
 					<view class="power_icon">
155 166
 					<image src="/static/capacity.png" mode=""></image>
156 167
 					<view class="power_yesterday1">
@@ -158,9 +169,9 @@
158 169
 						{{$t('powerstation.installedCapacity')}}
159 170
 					</view>
160 171
 					</view>
161
-					<view class="power_yesterday2">{{devicedata.installedCap || ''}}kWh</view>
172
+					<view class="power_yesterday2">{{devicedata.installedCap || ''}} <text class="income_unit">kWh</text></view>
162 173
 				</view>
163
-				<view class="power_moon" @click="ondevices">
174
+				<view class="power_moon">
164 175
 					<view class="power_icon">
165 176
 					<image src="/static/date.png" mode=""></image>
166 177
 					<view class="power_moon1">
@@ -168,9 +179,9 @@
168 179
 						{{$t('powerstation.commissioningDate')}}
169 180
 						</view>
170 181
 					</view>
171
-					<view class="power_moon2">2023-08-20</view>
182
+					<view class="power_moon2">{{devicedata.operationDate}}</view>
172 183
 				</view>
173
-				<view class="power_tired" @click="ondevices">
184
+				<view class="power_tired">
174 185
 					<view class="power_icon">
175 186
 					<image src="/static/time.png" mode=""></image>
176 187
 					<view class="power_tired1">
@@ -178,7 +189,7 @@
178 189
 						{{$t('powerstation.commissioningTime')}}
179 190
 						</view>
180 191
 					</view>
181
-					<view class="power_tired2">389天</view>
192
+					<view class="power_tired2">{{devicedata.opertionTime }}<text class="income_unit">天</text></view>
182 193
 				</view>
183 194
 			</view>
184 195
 		</view>
@@ -221,8 +232,8 @@
221 232
 				<view class="strategybox">
222 233
 				<image class="strategycalendar" src="/static/calendar.png" mode=""></image>
223 234
 					<view class="power_iconstrategy">
224
-					<view class="power_yesterday1">{{date}}</view>
225
-					<view class="power_yesterday1">{{$t('powerstation.listTitle')}}:{{weekdaytype==1?$t('hostdetails.weekdays'):$t('hostdetails.weekends')}}</view>
235
+					<view class="power_yesterday11">{{date}}</view>
236
+					<view class="power_yesterday11">{{$t('powerstation.listTitle')}}:{{weekdaytype==1?$t('hostdetails.weekdays'):$t('hostdetails.weekends')}}</view>
226 237
 					</view>
227 238
 				</view>
228 239
 			
@@ -236,7 +247,7 @@
236 247
 				<view class="strategybox">
237 248
 				<image class="strategy" src="/static/startstop.png" mode=""></image>
238 249
 					<view class="power_iconstrategy">
239
-					<view class="power_yesterday1">{{$t('powerstation.powerControl')}}</view>
250
+					<view class="power_yesterday11">{{$t('powerstation.powerControl')}}</view>
240 251
 					<!-- <view class="power_yesterday1">2024-09-13</view> -->
241 252
 					</view>
242 253
 				</view>
@@ -269,7 +280,7 @@
269 280
 	} from 'vue';
270 281
 	import topTabbar from '@/components/top-tabbar.vue';
271 282
 	import KDatePicker from '../../components/k-date-picker/KDatePicker.vue';
272
-	import { formatAmount,Accumulateddischarge } from '@/utils/format.js'; // 引入格式化函数
283
+	import { formatAmount,formatAmountunit,Accumulateddischarge,Accumulateddischargeunit } from '@/utils/format.js'; // 引入格式化函数
273 284
 	import request from '@/utils/request';
274 285
 	import {
275 286
 		getMonthRange,
@@ -373,9 +384,9 @@ const setIntervalDemo =() => {
373 384
 
374 385
 		enableScroll: true, //开启滚动条,X轴配置里需要配置itemCount单屏幕数据点数量
375 386
 		color: ["#B2D5CB"],
376
-		padding: [15, 10, 0, 15],
387
+		padding: [15, 0, 0, 0],
377 388
 		backgroundColor: "#B2D5CB",
378
-		legend: false,
389
+		legend: {},
379 390
 		xAxis: {
380 391
 			disableGrid: true,
381 392
 			itemCount: 5, //单屏数据密度即图表可视区域内显示的X轴数据点数量,仅在启用enableScroll时有效
@@ -392,7 +403,6 @@ const setIntervalDemo =() => {
392 403
 				type: "straight",
393 404
 				width: 2,
394 405
 				activeType: "hollow",
395
-
396 406
 			},
397 407
 			column: {
398 408
 				barBorderRadius: [4, 4, 0, 0],
@@ -429,7 +439,7 @@ const setIntervalDemo =() => {
429 439
 					if(tabIndex.value==0){
430 440
 						arr2.push((item['5c465aaa-b65e-463f-a9ae-a338a630a4c1_delta']/1000).toFixed(2));
431 441
 					}else{
432
-						arr2.push((item['a0acf8cf-7d12-49af-97d9-1a2e630c4bfe_delta']/1000).toFixed(2));
442
+						arr2.push((item['a0acf8cf-7d12-49af-97d9-1a2e630c4bfe_delta']/10000).toFixed(2));
433 443
 					}
434 444
 				} else if(brightcalendar.value == 2) {
435 445
 				const ymdSubstring = item.recordtime;
@@ -556,12 +566,23 @@ const setIntervalDemo =() => {
556 566
 		console.log(e);
557 567
 		open();
558 568
 	}
559
-	// 电站列表
569
+	// 计划详情
560 570
 	const ondevices = () => {
561
-	uni.navigateTo({
562
-		url: '/pages/strategy/index'
563
-	})
571
+		if(weekdaytype.value==1){
572
+			uni.navigateTo({
573
+				url: `/pages/strategy/index?id=${muitiStationdata.value[0].conscolidationId}&type=1`
574
+			})
575
+		}else{
576
+			uni.navigateTo({
577
+				url: `/pages/strategy/index?id=${muitiStationdata.value[0].conscolidationId}&type=2`
578
+			})
579
+		}
580
+		
581
+	// uni.navigateTo({
582
+	// 	url: `/pages/strategy/index?id=${optionsinfo.value.id}&type=1`
583
+	// })
564 584
 	}
585
+	 
565 586
 	const onhost = (item) => {
566 587
 		console.log(item);
567 588
 		uni.navigateTo({
@@ -651,7 +672,7 @@ const setIntervalDemo =() => {
651 672
 	}
652 673
 
653 674
 	.container {
654
-		background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%);
675
+		background: linear-gradient(to bottom, #007545 -50%, #f0f5f5 40%, #f0f5f5 100%);
655 676
 		box-sizing: border-box;
656 677
 		padding-bottom:1rpx;
657 678
 	}
@@ -662,6 +683,7 @@ const setIntervalDemo =() => {
662 683
 	}
663 684
 
664 685
 	.liquid_text {
686
+		font-size: 38rpx;
665 687
 		color: #fff;
666 688
 	}
667 689
 
@@ -732,17 +754,12 @@ const setIntervalDemo =() => {
732 754
 	.income_yesterday2,
733 755
 	.income_moon2,
734 756
 	.income_tired2 {
735
-		font-size: 26rpx;
757
+		font-size: 28rpx;
736 758
 		font-weight: 600;
737 759
 	}
738
-
739
-	.qiun_data {
740
-		width: 100%;
741
-		padding: 16rpx;
742
-		overflow: auto;
743
-		box-sizing: border-box;
760
+	.income_unit{
761
+		font-size: 20rpx;
744 762
 	}
745
-
746 763
 	.qiun_title {
747 764
 		height: 12%;
748 765
 		font-size: 28rpx;
@@ -752,8 +769,8 @@ const setIntervalDemo =() => {
752 769
 	.power_box {
753 770
 		width: 100%;
754 771
 		padding: 0rpx 20rpx;
755
-		box-sizing: border-box;
756 772
 		margin-bottom: 30rpx;
773
+		box-sizing: border-box;
757 774
 	}
758 775
 .power_box1 {
759 776
 		width: 100%;
@@ -763,8 +780,8 @@ const setIntervalDemo =() => {
763 780
 .power_box2{
764 781
 	width: 100%;
765 782
 	padding: 0rpx 20rpx;
766
-	box-sizing: border-box;
767 783
    margin-bottom: 30rpx;
784
+	box-sizing: border-box;
768 785
 }
769 786
 	.powerstation {
770 787
 		width: 100%;
@@ -812,11 +829,17 @@ const setIntervalDemo =() => {
812 829
 	.power_tired1 {
813 830
 		font-size: 26rpx;
814 831
 		margin-left:10rpx;
815
-		color: #999999;
832
+		color: #999;
833
+	}
834
+	.power_yesterday11{
835
+		font-size: 26rpx;
836
+		margin-left:10rpx;
837
+		color: #222;
816 838
 	}
817 839
 .power_moon2,.power_yesterday2,.power_tired2{
818 840
 	margin-top:10rpx;
819
-	font-size: 24rpx;
841
+	font-size: 28rpx;
842
+	font-weight: 600;
820 843
 }
821 844
 
822 845
 	.toptabbar {
@@ -947,10 +970,12 @@ const setIntervalDemo =() => {
947 970
 
948 971
 	.energy_boxtitle1 {
949 972
 		font-size: 28rpx;
973
+		margin-top: 6rpx;
974
+		font-weight: 600;
950 975
 	}
951 976
 
952 977
 	.energy_boxtitle2 {
953
-		font-size: 28rpx;
978
+		font-size: 26rpx;
954 979
 		margin-top: 4rpx;
955 980
 	}
956 981
 
@@ -967,7 +992,7 @@ const setIntervalDemo =() => {
967 992
 	}
968 993
 
969 994
 	.energy_boxright1 {
970
-		padding: 6rpx 8rpx;
995
+		padding: 6rpx 40rpx;
971 996
 		font-size: 26rpx;
972 997
 		border-radius: 50rpx;
973 998
 		display: flex;
@@ -1039,6 +1064,8 @@ const setIntervalDemo =() => {
1039 1064
 		border-radius: 10rpx;
1040 1065
 		background-color: #ffffff;
1041 1066
 		margin-top: 20rpx;
1067
+		overflow: hidden;
1068
+		box-sizing: border-box;
1042 1069
 	} 
1043 1070
 	.power_iconstrategy{
1044 1071
 		flex-direction: column;
@@ -1059,14 +1086,14 @@ const setIntervalDemo =() => {
1059 1086
 	}
1060 1087
 	.power_strategy{
1061 1088
 		font-size: 24rpx;
1062
-		color: #B2D5CB;
1089
+		color: #ccc;
1063 1090
 		display: flex;
1064 1091
 		align-items: center;
1065 1092
 	}
1066 1093
 		
1067 1094
 	.power_strategy1{
1068 1095
 		font-size: 24rpx;
1069
-		color: #B2D5CB;
1096
+		color: #999999;
1070 1097
 		display: flex;
1071 1098
 		align-items: center;
1072 1099
 	}
@@ -1239,5 +1266,5 @@ const setIntervalDemo =() => {
1239 1266
 		.popupbutton{
1240 1267
 			display: flex;
1241 1268
 		}
1242
-	
1269
+	 
1243 1270
 </style>

+ 18
- 11
pages/product/index.vue Wyświetl plik

@@ -1,9 +1,11 @@
1 1
 <!--  -->
2 2
 <template>
3 3
 	<view class="container" @click="popup">
4
-		<view class="container_top">
5
-			
6
-		</view>
4
+	<view class="container_navbar">
5
+			<view class="container_top">
6
+			</view>
7
+	<uni-nav-bar color="#222" :border="false" :shadow="false" :fixed="true" backgroundColor="rgba(255, 255, 255, 0.3)" shadow title="" @clickLeft="onclickLeft"/>
8
+			</view>
7 9
 		<image class="account_numberimage" :src="ImageCollection[0]" mode="aspectFill">
8 10
 		</image>
9 11
 		<view class="prompt" @click.stop="changselect">
@@ -199,7 +201,7 @@
199 201
 		},
200 202
 		onLoad() {
201 203
 			this.ImageCollection = [
202
-				'https://esos-iot.bjdexn.cn/myminio/project/88861a6c1aa243878d02c3502bf8e2ab.jpg',
204
+				'https://esos-iot.bjdexn.cn/myminio/project/891e77523d9e4abcb5c86f0b65ea68be.png',
203 205
 				'https://esos-iot.bjdexn.cn/myminio/project/f3a4fc253ee64f59a5f315b8fecbe954.png',
204 206
 				'https://esos-iot.bjdexn.cn/myminio/project/1aa4d24ff7174774a7c4c3d540ee056d.png',
205 207
 				'https://esos-iot.bjdexn.cn/myminio/project/6f2068c504984021b7c06d34f546a032.png',
@@ -248,16 +250,20 @@
248 250
 	.container {
249 251
 		box-sizing: border-box;
250 252
 		padding-bottom: 20rpx;
251
-		padding-top: 88rpx;
252 253
 		background: linear-gradient(to bottom, #f0f5f5 -40%, #f0f5f5 40%, #f0f5f5 100%);
253 254
 	}
254
-.container_top{
255
+.container_navbar{
255 256
 	width: 100%;
256
-	height: 88rpx;
257
-	color: #222;
258 257
 	position: fixed;
259
-  left: 0rpx;
260
-  top: 0rpx;
258
+	top: 0rpx;
259
+	left: 0rpx;
260
+	padding: 0rpx;
261
+	z-index: 1;
262
+}
263
+.container_top{
264
+	width: 100%;
265
+	height: 80rpx;
266
+	background-color:rgba(255, 255, 255, 0.5);
261 267
 }
262 268
 	.account_number {
263 269
 		width: 100%;
@@ -443,9 +449,10 @@
443 449
 	  }
444 450
 	  .prompt{
445 451
 		  position: fixed;
446
-		   top: 98rpx;
452
+		   top: 80rpx;
447 453
 		   right: 20rpx;
448 454
 		   text-align: right;
455
+		   z-index: 9;
449 456
 	  }
450 457
 	  .promptimage{
451 458
 		  width: 60rpx;

+ 655
- 0
pages/report/index.vue Wyświetl plik

@@ -0,0 +1,655 @@
1
+<template>
2
+	<view class="container">
3
+		<view class="container_navbar">
4
+			<view class="container_top">
5
+			</view>
6
+	<uni-nav-bar color="#222" :border="false" :shadow="false" :fixed="true" backgroundColor="rgba(255, 255, 255, 0.3)" shadow left-icon="left"
7
+		title="经济测算报告" @clickLeft="onclickLeft"/>
8
+			</view>
9
+		
10
+		<view class="container_box">
11
+			<view class="container_title">
12
+				<view class="calculation_left">
13
+					<text class="testbox">&#xe65b;</text>选择地区
14
+				</view>
15
+			</view>
16
+			<view class="container_Subtitle">
17
+				<view class="voltageleft">
18
+					<view class="voltagetop">
19
+						电压级别
20
+					</view>
21
+					<view class="voltagebuttn">
22
+						10kv
23
+					</view>
24
+				</view>
25
+				<view class="voltageright">
26
+					<view class="voltagetop">
27
+						用电类型
28
+					</view>
29
+					<view class="voltagebuttn">
30
+						大工业用电
31
+					</view>
32
+				</view>
33
+			</view>
34
+		</view>
35
+	<view class="invest">
36
+		<view class="invest_box">
37
+			<view class="investall">
38
+				<view class="invest_left">
39
+					<view class="invest_top">
40
+						<view class="investtop">
41
+							全投资IRR
42
+						</view>
43
+						<view class="investbotton">
44
+						8.86%
45
+						</view>
46
+					</view>
47
+					<view class="invest_botton">
48
+					<view class="invest_top">
49
+						<view class="investtop">
50
+							全投资静态回收期
51
+						</view>
52
+						<view class="investbotton">
53
+						7.05年
54
+						</view>
55
+					</view>
56
+					<view class="income_top">
57
+						<view class="investtop">
58
+							总投资收益率
59
+						</view>
60
+						<view class="investbotton">
61
+						5.15%
62
+						</view>
63
+					</view>
64
+					</view>
65
+				</view>
66
+				<view class="invest_right">
67
+					<view class="invest_righttop">
68
+						装机容量
69
+					</view>
70
+					<view class="invest_rightcenter">
71
+						10
72
+					</view>
73
+					<view class="invest_rightbotton">
74
+						MWh
75
+					</view>
76
+				</view>
77
+			</view>
78
+			<view class="investalls">
79
+				<view class="invest_left">
80
+					<view class="invest_botton">
81
+					<view class="invest_top">
82
+						<view class="investtop">
83
+							造价总成本
84
+						</view>
85
+						<view class="investbotton">
86
+						7.05年
87
+						</view>
88
+					</view>
89
+					<view class="income_tops">
90
+						<view class="investtop">
91
+							充放电总收益
92
+						</view>
93
+						<view class="investbotton">
94
+						5.15%
95
+						</view>
96
+					</view>
97
+					</view>
98
+					
99
+					<view class="invest_top invest_botton">
100
+						<view class="investtop">
101
+							税前利润
102
+						</view>
103
+						<view class="investbotton">
104
+						8.86%
105
+						</view>
106
+					</view>
107
+				
108
+				</view>
109
+			
110
+			</view>
111
+		</view>
112
+		<view class="collective">
113
+			分年集体数据
114
+		</view>
115
+		<qiun-data-charts type="column" :opts="optscolumn" :ontouch="true" :chartData="chartcolumn" />
116
+		<view class="contrast">
117
+		<view class="contrast_title">
118
+			<view class="contrast_titletop">
119
+				对比周期
120
+			</view>
121
+			<view class="contrast_titletops">
122
+				放电量<text class="Electricityprice_peakrightkwh">
123
+					(万/KWh)
124
+				</text> 
125
+			</view>
126
+			<view class="contrast_titletops">
127
+				充电量<text class="Electricityprice_peakrightkwh">
128
+					(万/KWh)
129
+				</text> 
130
+			</view>
131
+		</view>
132
+		<view class="contrast_middle">
133
+			<view class="contrast_titletop">
134
+				换电前充放电量
135
+			</view>
136
+			<view class="contrast_titletops">
137
+				3889.40
138
+			</view>
139
+			<view class="contrast_titletops">
140
+				4521.26
141
+			</view>
142
+		</view>
143
+		<view class="contrast_bottom">
144
+			<view class="contrast_titletop">
145
+				全周期充放电量
146
+			</view>
147
+			<view class="contrast_titletops">
148
+			   7340.29
149
+			</view>
150
+			<view class="contrast_titletops">
151
+				8532.79
152
+			</view>
153
+		</view>
154
+		</view>
155
+		
156
+	</view>
157
+	<view class="economy">
158
+		<view class="economy_top">
159
+			<view class="economy_topleft">
160
+				经济收益
161
+			</view>
162
+			<view class="economy_topright">
163
+				(单位:万元)
164
+			</view>
165
+		</view>
166
+		<view class="incomelist">
167
+		 <view class="incomelist_title">
168
+		 	<view class="incomelist_ul">
169
+		 		年份
170
+		 	</view>
171
+			<view class="incomelist_ul">
172
+				收益
173
+			</view>
174
+			<view class="incomelist_ul">
175
+				现金流
176
+			</view>
177
+			<view class="incomelist_ul">
178
+				投资收益
179
+			</view>
180
+		 </view>
181
+		 <view class="incomelist_titles">
182
+		 	<view class="incomelist_ul">
183
+		 		第一年
184
+		 	</view>
185
+		 			<view class="incomelist_ul">
186
+		 				163.52
187
+		 			</view>
188
+		 			<view class="incomelist_ul">
189
+		 				-839.45
190
+		 			</view>
191
+		 			<view class="incomelist_ul">
192
+		 				91.09
193
+		 			</view>
194
+		 </view>
195
+		 <view class="incomelist_title">
196
+		 	<view class="incomelist_ul">
197
+		 		合计
198
+		 	</view>
199
+		 			<view class="incomelist_ul">
200
+		 				163.52
201
+		 			</view>
202
+		 			<view class="incomelist_ul">
203
+		 				-839.45
204
+		 			</view>
205
+		 			<view class="incomelist_ul">
206
+		 				91.09
207
+		 			</view>
208
+		 </view>
209
+		</view>
210
+	</view>
211
+	<view class="Electricityprice">
212
+		<view class="Electricityprice_title">
213
+			时段电价
214
+		</view>
215
+		<qiun-data-charts type="column" :opts="electricity" :ontouch="true" :chartData="electricitychart" />
216
+		<view class="Electricityprice_peak">
217
+			<view class="Electricityprice_peakleft">
218
+				峰谷电价差
219
+			</view>
220
+			<view class="Electricityprice_peakright">
221
+				0.4799 
222
+				<view class="Electricityprice_peakrightkwh">
223
+					元/kWh
224
+				</view> 
225
+			</view>
226
+		</view>
227
+		<view class="Electricityprice_text">
228
+			测算结果根据当地各电价时段时长、变压器容量、每月实际需量、
229
+			电池效率及消耗、利用率最高等因素推算得出,现阶段仅供参考。
230
+		</view>
231
+	</view>
232
+	</view>
233
+</template>
234
+<!--    -->
235
+<script>
236
+	import request from '@/utils/request';
237
+	export default {
238
+		data() {
239
+			return {
240
+			optscolumn: {
241
+				color: ["#007545"],
242
+				padding: [15, 0, 0, 0],
243
+				backgroundColor: "#007545",
244
+				dataLabel: false, // 关闭数据标签
245
+				legend: {
246
+					show: true,
247
+					fontSize: 10 
248
+				},
249
+				xAxis: {
250
+					disableGrid: true,
251
+					labelCount: 24, // 显示全部24小时标签
252
+					rotate: 0, // 标签旋转45度
253
+					fontSize: 10
254
+				},
255
+				yAxis: {
256
+					gridType: "dash",
257
+					dashLength: 2,
258
+					fontSize: 10,
259
+					showTitle:true,
260
+					data: [{
261
+					title: '电量(万/kwh)',
262
+						titleOffsetX:24,
263
+					},
264
+					{
265
+					      position: "right",
266
+					      title: "时间(年)",
267
+						  fontSize:true,
268
+						  titleOffsetX:-18
269
+					            }
270
+					],
271
+				},
272
+				extra: {
273
+					line: {
274
+						type: "straight",
275
+						activeType: "hollow",
276
+			
277
+					},
278
+					column: {
279
+						width: 6,
280
+						barBorderRadius: [1.5, 1.5, 0, 0],
281
+					},
282
+				}
283
+			},
284
+			chartcolumn: {},
285
+			electricity: {
286
+				color: ["#007545"],
287
+				padding: [15, 0, 0, 0],
288
+				backgroundColor: "#007545",
289
+				dataLabel: false, // 关闭数据标签
290
+				legend: {
291
+					show: false
292
+				},
293
+				xAxis: {
294
+					disableGrid: true,
295
+					labelCount: 24, // 显示全部24小时标签
296
+					rotate: 0, // 标签旋转45度
297
+					fontSize: 10
298
+				},
299
+				yAxis: {
300
+					gridType: "dash",
301
+					dashLength: 2,
302
+					fontSize: 10,
303
+					showTitle:true,
304
+					data: [{
305
+					title: '电价(元/kWh)',
306
+						titleOffsetX:28,
307
+					}
308
+					],
309
+				},
310
+				extra: {
311
+					line: {
312
+						type: "straight",
313
+						activeType: "hollow",
314
+			
315
+					},
316
+					column: {
317
+						width: 20,
318
+						barBorderRadius: [2, 2, 0, 0],
319
+					},
320
+				}
321
+			},
322
+			electricitychart: {},
323
+			}
324
+		},
325
+		onLoad() {
326
+			setTimeout(() => {
327
+		this.chartcolumn = {
328
+			categories: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],
329
+			series: [{
330
+				name: '充电',
331
+				data: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
332
+			},{
333
+				name: '放电',
334
+				data: [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
335
+			}]
336
+		};
337
+		}, 500);
338
+		setTimeout(() => {
339
+		this.electricitychart = {
340
+			categories: ['尖期','峰期','平期','谷时','深谷'],
341
+			series: [{
342
+				name: '电价',
343
+				data: [
344
+				{"value":4,"color": "#EE6666"},
345
+				{"value":3,"color": "#FAC858"},
346
+				{"value":2,"color": "#91CB74"},
347
+				{"value":1,"color": "#1890FF"},
348
+				{"value":5,"color": "#9A60B4"},
349
+				]
350
+			}
351
+			]
352
+		};
353
+		}, 500);
354
+		},
355
+		methods: {
356
+		onclickLeft(){
357
+			uni.navigateBack({
358
+			    delta: 1 // 返回的页面数,默认为1
359
+			});
360
+		}
361
+		}
362
+	}
363
+</script>
364
+
365
+<style scoped>
366
+	.uni-page {
367
+		width: 100%;
368
+		height: 100%;
369
+	}
370
+/deep/ .uni-nav-bar-text{
371
+	font-weight: 600;
372
+}
373
+	.container {
374
+		background-color: #ffffff;
375
+		box-sizing: border-box;
376
+		display: flex;
377
+		flex-direction: column;
378
+		/* align-items: center; */
379
+		background-image: url('https://esos-iot.bjdexn.cn/myminio/project/475a3a10bcf74300895b3dc82897237e.jpeg');
380
+		background-size: 100% auto;
381
+		background-repeat: no-repeat;
382
+		padding-bottom: 140rpx;
383
+	}
384
+.container_navbar{
385
+	width: 100%;
386
+	position: fixed;
387
+	top: 0rpx;
388
+	left: 0rpx;
389
+	padding: 0rpx;
390
+}
391
+.container_top{
392
+	width: 100%;
393
+	height: 40rpx;
394
+	background-color:rgba(255, 255, 255, 0.5);
395
+}
396
+	.account_number {
397
+		width: 100%;
398
+		padding: 20rpx;
399
+		display: flex;
400
+		justify-content: center;
401
+		box-sizing: border-box;
402
+	}
403
+
404
+
405
+	.toptabbar {
406
+		width: 100%;
407
+		padding: 10rpx 20rpx;
408
+		box-sizing: border-box;
409
+	}
410
+
411
+	.container_box {
412
+		height: 520rpx;
413
+		color: #222;
414
+		padding-top: 100rpx;
415
+		padding: 0rpx 30rpx;
416
+		box-sizing: border-box;
417
+		display: flex;
418
+		flex-direction: column;
419
+		justify-content: center;
420
+		background: linear-gradient(to bottom,
421
+				rgba(255, 255, 255, 0),
422
+				rgba(255, 255, 255, 0.8),
423
+				/* 完全透明 */
424
+				rgba(255, 255, 255, 1)
425
+				/* 80% 不透明 */
426
+			);
427
+	}
428
+	@font-face {
429
+	  font-family: 'iconfont';  /* Project id 4935042 */
430
+	  src: url('//at.alicdn.com/t/c/font_4935042_1qob4kor3dt.woff2?t=1749628842617') format('woff2'),
431
+	       url('//at.alicdn.com/t/c/font_4935042_1qob4kor3dt.woff?t=1749628842617') format('woff'),
432
+	       url('//at.alicdn.com/t/c/font_4935042_1qob4kor3dt.ttf?t=1749628842617') format('truetype');
433
+	/* 	src: url('@/font/iconfont.woff2?t=1748497918806') format('woff2'),
434
+			url('@/font/iconfont.woff?t=1748497918806') format('woff'),
435
+			url('@/font/iconfont.ttf?t=1748497918806') format('truetype'); */
436
+	}
437
+
438
+	.test {
439
+		font-family: iconfont;
440
+		margin-left: 16rpx;
441
+	}
442
+
443
+.testbox {
444
+		font-family: iconfont;
445
+		margin-right: 10rpx;
446
+	}
447
+.container_Subtitle{
448
+	margin-top: 40rpx;
449
+	display: flex;
450
+}
451
+	 .voltageleft{
452
+		 display: flex;
453
+		 flex-direction: column;
454
+	 }
455
+	 .voltageright{
456
+		 margin-left: 80rpx;
457
+	 }
458
+	 .voltagetop{
459
+		 color: #A2A0AB;
460
+		 font-weight: 500;
461
+		 font-size: 32rpx;
462
+	 }
463
+	 .voltagebuttn{
464
+		 margin-top: 20rpx;
465
+		 font-size: 38rpx;
466
+	 }
467
+	 .invest{
468
+		 padding: 0rpx 20rpx;
469
+		 box-sizing: border-box;
470
+	 }
471
+	 .invest_box{
472
+		width: 100%;
473
+		 display: flex;
474
+		 flex-direction: column;
475
+		 justify-content: space-between;
476
+		 padding: 20rpx;
477
+		 border-radius: 10rpx;
478
+		border:1rpx solid #f5f5f5;
479
+		background-color: #fff;
480
+		box-shadow: 0px 0px 1px 1rpx rgba(0, 0, 0, 0.1);
481
+		box-sizing: border-box;
482
+	 }
483
+	 .investall{
484
+		 width: 100%;
485
+		 height: 300rpx;
486
+		  display: flex;
487
+		  justify-content: space-between;
488
+		border-bottom: 1rpx dashed #ccc;
489
+		padding-bottom: 20rpx;
490
+	 }
491
+	 .investalls{
492
+	 		 width: 100%;
493
+	 		 height: 300rpx;
494
+	 		  display: flex;
495
+	 		  justify-content: space-between;
496
+	 		padding-bottom: 20rpx;
497
+	 }
498
+	 .invest_left{
499
+		 margin-top: 20rpx;
500
+		 font-size: 28rpx;
501
+	 }
502
+	 .invest_top{
503
+		 display: flex;
504
+		 flex-direction: column;
505
+	 }
506
+	 .invest_botton{
507
+		 display: flex;
508
+		 margin-top: 40rpx;
509
+	 }
510
+	 .income_top{
511
+		 margin-left: 20rpx;
512
+	 }
513
+	 .income_tops{
514
+	 		 margin-left: 100rpx;
515
+	 }
516
+	 .invest_right{
517
+		 width: 200rpx;
518
+		 display: flex;
519
+		 flex-direction: column;
520
+		 align-items: center;
521
+		 font-size: 24rpx;
522
+		 background-image: url("/static/battery.png");
523
+		 background-size: 100% auto;
524
+		 background-repeat: no-repeat;
525
+	 }
526
+	 .invest_righttop{
527
+		 margin-top: 80rpx;
528
+		 color: #90959B;
529
+	 }
530
+	 
531
+	 .invest_rightcenter{
532
+		 margin-top: 10rpx;
533
+	 }
534
+	 .invest_rightbotton{
535
+		 margin-top: 10rpx;
536
+	 }
537
+	 .investbotton{
538
+		 margin-top: 10rpx;
539
+	 }
540
+	 .collective{
541
+		 font-size: 30rpx;
542
+		 margin-top: 60rpx;
543
+		 margin-bottom: 10rpx;
544
+	 }
545
+	 .contrast{
546
+		 width: 100%;
547
+		 background-color: #f5f5f5;
548
+		 border-radius: 10rpx;
549
+		 padding: 20rpx;
550
+		 box-sizing: border-box;
551
+		 margin-top: 10rpx;
552
+	 }
553
+	 .contrast_title{
554
+		 display: flex;
555
+		 justify-content: space-between;
556
+		 font-size: 26rpx;
557
+	 }
558
+	 .contrast_middle{
559
+		 display: flex;
560
+		 justify-content: space-between;
561
+		 font-size: 26rpx;
562
+		 margin-top: 20rpx;
563
+	 }
564
+	 .contrast_bottom{
565
+		 display: flex;
566
+		 justify-content: space-between;
567
+		 font-size: 26rpx;
568
+		 margin-top: 20rpx;
569
+	 }
570
+	 .contrast_titletop{
571
+		 flex: 1;
572
+	 }
573
+	 .contrast_titletops{
574
+	  flex: 1;
575
+	  text-align: right;
576
+	 }
577
+	 .economy{
578
+		 margin-top: 60rpx;
579
+	 }
580
+	 .economy_top{
581
+		 display: flex;
582
+		 font-size: 28rpx;
583
+		 /* justify-content: space-between; */
584
+		 padding: 0rpx 20rpx;
585
+	 }
586
+	 .economy_topright{
587
+		 font-size: 22rpx;
588
+		 margin-top: 4rpx;
589
+		 margin-left: 10rpx;
590
+		 color: #ccc;
591
+	 }
592
+	 .incomelist{
593
+		 display: flex;
594
+		 flex-direction: column;
595
+		 margin-top: 20rpx;
596
+		 font-size: 26rpx;
597
+	 }
598
+	 .incomelist_title{
599
+		 display: flex;
600
+		 height: 80rpx;
601
+		 font-size: 26rpx;
602
+		 justify-content: space-between;
603
+		 background-color: #f5f5f5;
604
+	 }
605
+	 .incomelist_titles{
606
+		display: flex;
607
+		height: 80rpx;
608
+		font-size: 26rpx;
609
+		justify-content: space-between;
610
+		/* background-color: #f5f5f5; */
611
+	 }
612
+	 .incomelist_ul{
613
+		 flex: 1;
614
+		 display: flex;
615
+		 align-items: center;
616
+		 justify-content: center;
617
+		 
618
+	 }
619
+	 .Electricityprice{
620
+		 display: flex;
621
+		 flex-direction: column;
622
+		 padding: 20rpx;
623
+		 margin-top: 40rpx;
624
+	 }
625
+	 .Electricityprice_title{
626
+		 font-size: 28rpx;
627
+		 margin-bottom: 10rpx;
628
+	 }
629
+	 .Electricityprice_peak{
630
+		 display: flex;
631
+		 justify-content: space-between;
632
+		 background-color: #f5f5f5;
633
+		 padding: 20rpx;
634
+		 border-radius: 10rpx;
635
+		 font-size: 24rpx;
636
+		 margin-top: 20rpx;
637
+	 }
638
+	 .Electricityprice_peakright{
639
+		 font-size: 32rpx;
640
+		 display: flex;
641
+		 font-weight: 600;
642
+	 }
643
+	.Electricityprice_peakrightkwh{
644
+		 font-size: 22rpx;
645
+		 margin-top: 8rpx;
646
+		 margin-left: 10rpx;
647
+		 font-weight: 400;
648
+	 }
649
+	 .Electricityprice_text{
650
+		 font-size: 22rpx;
651
+		 margin-top: 20rpx;
652
+		 line-height: 35rpx;
653
+		 color: #ccc;
654
+	 }
655
+</style>

+ 2
- 2
pages/strategy/index.vue Wyświetl plik

@@ -7,10 +7,10 @@
7 7
 		 	</view>
8 8
 			<view class="account_discharge">
9 9
 				<view class="account_discharge1">
10
-                {{$t('strategy.min')}}:0%
10
+                {{$t('strategy.min')}}: 0%
11 11
 				</view>
12 12
 				<view class="account_discharge2">
13
-				{{$t('strategy.max')}}:100%
13
+				{{$t('strategy.max')}}: 100%
14 14
 				</view>
15 15
 			</view>
16 16
 			<view class="account_text">

+ 96
- 11
pages/user/index.vue Wyświetl plik

@@ -3,13 +3,14 @@
3 3
 	 <view class="setup">
4 4
 	 <view style="width: 100%;height:30rpx"></view>
5 5
 	 <view class="user">
6
-	 <image @click ="onuser" class="user_to" src="https://esos-iot.bjdexn.cn/wx_images/to1.jpg" mode=""/>
6
+		 
7
+	 <image @click="onuser" class="user_to" :src="user.user.avatar" mode=""/>
7 8
 	 <view class="user_name">
8
-	 <!-- <view class="user_name1">{{user.user.userName}}</view> -->
9
-	 <!-- <view class="user_name2">电话:{{user.user.phonenumber}}</view> -->
9
+	 <view class="user_name1">姓名: {{user.user.loginName}}</view>
10
+	 <view class="user_name2">电话: {{user.user.phonenumber}}</view>
10 11
 	 </view>
11 12
 	 </view>
12
-	 <view class="equipment">
13
+	<!-- <view class="equipment">
13 14
 	 <view class="equipment_1" @click ="onstation">
14 15
 	 <view class="user_left">
15 16
 	 <view class="user_leftname">{{$t('My.myDevices')}}</view>
@@ -28,7 +29,7 @@
28 29
 	 <image class="equipment_right" src="https://esos-iot.bjdexn.cn/wx_images/49.png" mode=""/></view>
29 30
 	 </view>
30 31
 	 
31
-	 </view>
32
+	 </view> -->
32 33
 	<!-- <view class="allocation_box">
33 34
 	 <view class="allocation" @click ="toconfigure">
34 35
 	 <view class="allocation_3">配置Wi-Fi</view>
@@ -92,29 +93,44 @@ import { onMounted, ref } from 'vue';
92 93
 import { useI18n } from 'vue-i18n';
93 94
 const { t } = useI18n()
94 95
 import { onShow } from '@dcloudio/uni-app';
96
+	import request from '@/utils/request';
95 97
  const defaultValue=ref()
96 98
  onShow(() => {
99
+	 getuserinfo()
97 100
  try {
98 101
      const language = uni.getStorageSync('userLanguage');
99 102
      console.log('Language:', language);
100 103
      defaultValue.value = language === 'en';
101
- 		   console.log(defaultValue.value);
102 104
    } catch (error) {
103 105
      console.error('读取 Storage 失败:', error);
104 106
    }
105 107
  });
106 108
  const accountInfo=ref('');
107
- const user=ref('')
109
+ const user=ref({})
108 110
  const stationName=ref('')
109
- 
111
+ const getuserinfo = async () => {
112
+ 	try {
113
+ 		const response = await request({
114
+ 			url: '/platform/user/selectaccountNumber',
115
+ 			method: 'post',
116
+ 			header: {
117
+ 				'Content-Type': 'application/x-www-form-urlencoded'
118
+ 			},
119
+ 		});
120
+ 		user.value = response.data
121
+  console.log(user.value);
122
+ 	} catch (error) {
123
+ 		console.error('登录失败:', error);
124
+ 	}
125
+ };
110 126
 	 onMounted(() => {
111
-	
127
+	getuserinfo()
112 128
 		 });
113 129
 		 
114 130
 		 // 头像
115 131
 		 const onuser=()=>{
116 132
 		 	 uni.navigateTo({
117
-		 	 				 url:"/pages/PersonalInformation/index"
133
+		 	 url:"/pages/personalInformation/index"
118 134
 		 	 })
119 135
 		 	 
120 136
 		  };
@@ -226,6 +242,7 @@ import { onShow } from '@dcloudio/uni-app';
226 242
  }
227 243
  .user{
228 244
    display: flex;
245
+   margin-top: 60rpx;
229 246
  }
230 247
  .user_to{
231 248
    width: 100rpx;
@@ -240,9 +257,11 @@ import { onShow } from '@dcloudio/uni-app';
240 257
  }
241 258
  .user_name1{
242 259
    font-size: 28rpx;
260
+   color: #ffffff;
243 261
  }
244 262
  .user_name2{
245 263
    font-size: 24rpx;
264
+   color: #ffffff;
246 265
  }
247 266
  .equipment{
248 267
  width: 100%;
@@ -350,7 +369,7 @@ import { onShow } from '@dcloudio/uni-app';
350 369
    background-color: #ffffff;
351 370
     padding: 10rpx 0rpx;
352 371
     box-sizing: border-box;
353
-    margin-top: 30rpx;
372
+    margin-top: 120rpx;
354 373
  box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
355 374
  
356 375
   }
@@ -432,5 +451,71 @@ import { onShow } from '@dcloudio/uni-app';
432 451
    border: none !important;
433 452
    display: flex;
434 453
  }
454
+ .avatar-edit-container {
455
+   display: inline-block;
456
+   position: relative;
457
+ }
458
+ 
459
+ .avatar-wrapper {
460
+   position: relative;
461
+   border-radius: 50%;
462
+   overflow: hidden;
463
+   cursor: pointer;
464
+   transition: all 0.3s ease;
465
+   box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
466
+ }
467
+ 
468
+ .avatar-img {
469
+   width: 100%;
470
+   height: 100%;
471
+   object-fit: cover;
472
+   display: block;
473
+   transition: transform 0.3s ease;
474
+ }
475
+ 
476
+ .avatar-wrapper:hover .avatar-img {
477
+   transform: scale(1.05);
478
+ }
479
+ 
480
+ .edit-overlay {
481
+   position: absolute;
482
+   top: 0;
483
+   left: 0;
484
+   width: 100%;
485
+   height: 100%;
486
+   background-color: rgba(0, 0, 0, 0.6);
487
+   display: flex;
488
+   align-items: center;
489
+   justify-content: center;
490
+   color: white;
491
+   border-radius: 50%;
492
+ }
493
+ 
494
+ .edit-content {
495
+   text-align: center;
496
+ }
497
+ 
498
+ .edit-icon {
499
+   font-size: 24px;
500
+   margin-bottom: 8px;
501
+   display: block;
502
+ }
503
+ 
504
+ .edit-text {
505
+   font-size: 14px;
506
+   display: block;
507
+   font-weight: 500;
508
+ }
435 509
  
510
+ .file-input {
511
+   display: none;
512
+ }
513
+ 
514
+ /* 过渡动画 */
515
+ .fade-enter-active, .fade-leave-active {
516
+   transition: opacity 0.3s;
517
+ }
518
+ .fade-enter, .fade-leave-to {
519
+   opacity: 0;
520
+ }
436 521
 </style>

BIN
static/battery.png Wyświetl plik


BIN
static/bj.png Wyświetl plik


BIN
static/chi.png Wyświetl plik


BIN
static/dian.png Wyświetl plik


BIN
static/jumpto.png Wyświetl plik


BIN
static/loading.gif Wyświetl plik


BIN
static/ring - 副本.png Wyświetl plik


BIN
static/ring.png Wyświetl plik


BIN
static/电池一格.png Wyświetl plik


+ 2
- 0
uni_modules/d-loading/changelog.md Wyświetl plik

@@ -0,0 +1,2 @@
1
+## 1.0.0(2022-06-17)
2
+1.优化

+ 103
- 0
uni_modules/d-loading/components/d-loading/d-loading.vue Wyświetl plik

@@ -0,0 +1,103 @@
1
+<template>
2
+    <view class="dengLoadingVue">
3
+        <view class="maskVueHiddenShow" v-if="statusLoading" @click="onCheckHiddenApi">
4
+            <view class="maskVueHiddenShowWrapper">
5
+                <!-- <image src="@/static/loading.gif" class="maskVueHiddenShowWrapperGif"></image> -->
6
+				 <div class="wave-loading">
7
+				    <div class="dot" v-for="i in 5" :key="i" :style="{
8
+				      animationDelay: `${i * 0.1}s`
9
+				    }"></div>
10
+				  </div>
11
+            </view>
12
+        </view>
13
+    </view>
14
+</template>
15
+
16
+<script>
17
+	
18
+    export default {
19
+        props: {
20
+            status:false,
21
+        },
22
+		created() {
23
+			if (this.statusLoading == true) {
24
+				var that = this
25
+				// setTimeout(function(){
26
+				// 	that.statusLoading = false
27
+				// },5000)
28
+			}
29
+		},
30
+        data() {
31
+            return {
32
+                statusLoading:true,
33
+            };
34
+        },
35
+		watch:{
36
+			status(e) {
37
+				this.statusLoading = e
38
+				
39
+			}
40
+		},
41
+		methods: {
42
+			onCheckHiddenApi() {
43
+				this.statusLoading = false
44
+			}
45
+		}
46
+    }
47
+</script>
48
+
49
+<style lang="scss">
50
+    .dengLoadingVue {
51
+        .maskVueHiddenShow {
52
+            z-index: 101;
53
+            position: fixed;
54
+            top: 0;
55
+            left: 0;
56
+            right: 0;
57
+            bottom: 0;
58
+            background-color: #fff;
59
+            opacity: 0.8;
60
+            //
61
+            display: flex;
62
+            align-items: center;
63
+            justify-content: center;
64
+            .maskVueHiddenShowWrapper {
65
+                width: 80%;
66
+                height: 300rpx;
67
+                display: flex;
68
+				flex-direction: column;
69
+                align-items: center;
70
+                justify-content: center;
71
+                .maskVueHiddenShowWrapperGif {
72
+                    width: 400rpx;
73
+                    height: 300rpx;
74
+                }
75
+				
76
+            }
77
+        }
78
+    }
79
+	.wave-loading {
80
+	  display: flex;
81
+	  justify-content: center;
82
+	  align-items: center;
83
+	  height: 60px;
84
+	}
85
+	
86
+	.dot {
87
+	  width: 10px;
88
+	  height: 10px;
89
+	  margin: 0 5px;
90
+	  background-color: #007545;
91
+	  border-radius: 50%;
92
+	  animation: wave 1.2s ease-in-out infinite;
93
+	}
94
+	
95
+	@keyframes wave {
96
+	  0%, 60%, 100% {
97
+	    transform: translateY(0);
98
+	  }
99
+	  30% {
100
+	    transform: translateY(-15px);
101
+	  }
102
+	}
103
+</style>

+ 89
- 0
uni_modules/d-loading/package.json Wyświetl plik

@@ -0,0 +1,89 @@
1
+{
2
+  "id": "d-loading",
3
+  "displayName": "2023_加载中页面动画loading",
4
+  "version": "1.0.0",
5
+  "description": "2023_加载中页面动画loading",
6
+  "keywords": [
7
+    "加载",
8
+    "loading",
9
+    "加载中",
10
+    "动画",
11
+    "弹出框"
12
+],
13
+  "repository": "",
14
+  "engines": {
15
+    "HBuilderX": "^3.1.20"
16
+  },
17
+  "dcloudext": {
18
+    "category": [
19
+        "前端组件",
20
+        "通用组件"
21
+    ],
22
+    "sale": {
23
+      "regular": {
24
+        "price": "0.00"
25
+      },
26
+      "sourcecode": {
27
+        "price": "0.00"
28
+      }
29
+    },
30
+    "contact": {
31
+      "qq": ""
32
+    },
33
+    "declaration": {
34
+      "ads": "无",
35
+      "data": "无",
36
+      "permissions": "无"
37
+    },
38
+    "npmurl": ""
39
+  },
40
+  "uni_modules": {
41
+    "dependencies": [],
42
+    "encrypt": [],
43
+    "platforms": {
44
+      "cloud": {
45
+        "tcb": "y",
46
+        "aliyun": "y"
47
+      },
48
+      "client": {
49
+        "Vue": {
50
+          "vue2": "y",
51
+          "vue3": "y"
52
+        },
53
+        "App": {
54
+          "app-vue": "y",
55
+          "app-nvue": "y"
56
+        },
57
+        "H5-mobile": {
58
+          "Safari": "y",
59
+          "Android Browser": "y",
60
+          "微信浏览器(Android)": "y",
61
+          "QQ浏览器(Android)": "y"
62
+        },
63
+        "H5-pc": {
64
+          "Chrome": "y",
65
+          "IE": "y",
66
+          "Edge": "y",
67
+          "Firefox": "y",
68
+          "Safari": "y"
69
+        },
70
+        "小程序": {
71
+          "微信": "y",
72
+          "阿里": "y",
73
+          "百度": "y",
74
+          "字节跳动": "y",
75
+          "QQ": "y",
76
+          "钉钉": "y",
77
+          "快手": "y",
78
+          "飞书": "y",
79
+          "京东": "y",
80
+          "小红书": "y"
81
+        },
82
+        "快应用": {
83
+          "华为": "y",
84
+          "联盟": "y"
85
+        }
86
+      }
87
+    }
88
+  }
89
+}

+ 60
- 0
uni_modules/d-loading/readme.md Wyświetl plik

@@ -0,0 +1,60 @@
1
+# 插件名称:d-loading 更新时间:2022.06.17
2
+
3
+
4
+
5
+## 使用步骤 仅2步(已亲测)
6
+
7
+### 【一】准备:
8
+
9
+````
10
+1.复制图片目录到【根目录】:
11
+'@/uni_modules/d-swiper-type/components/d-swiper-type/pages/static'
12
+
13
+2.    main.js 中增加这2行代码
14
+
15
+import dLoading from '@/uni_modules/d-loading/components/d-loading/d-loading.vue'
16
+Vue.component('dLoading',dLoading)
17
+
18
+````
19
+
20
+
21
+### 【二】使用:
22
+````
23
+
24
+
25
+<template>
26
+	<view>
27
+	
28
+		<dLoading :status="loading"></dLoading>
29
+		
30
+	</view>
31
+</template>
32
+
33
+<script>
34
+	
35
+	export default {
36
+		data() {
37
+			return {
38
+				loading:''
39
+			}
40
+		},
41
+		onLoad() {
42
+			this.loading = true
43
+			
44
+			
45
+			var that = this
46
+			if (true) {
47
+				setTimeout(function(){
48
+					that.loading = false
49
+				},1000)
50
+			}
51
+			
52
+			
53
+		},
54
+	}
55
+</script>
56
+
57
+
58
+gif 来源color ui
59
+````
60
+

+ 9
- 2
uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue Wyświetl plik

@@ -76,8 +76,8 @@
76 76
           'uni-calendar-item--multiple': weeks.multiple,
77 77
           'uni-calendar-item--after-checked': weeks.afterMultiple,
78 78
           'uni-calendar-item--disable': weeks.disable,
79
-		  'uni-calendar-item--workday-text': weeks.extraInfo && weeks.extraInfo.info === '工作日',
80
-		  'uni-calendar-item--restday-text': weeks.extraInfo && weeks.extraInfo.info === '休息日'
79
+		  'uni-calendar-item--workday-texts': weeks.extraInfo && weeks.extraInfo.info === '工作日',
80
+		  'uni-calendar-item--restday-texts': weeks.extraInfo && weeks.extraInfo.info === '休息日'
81 81
         }"
82 82
       >{{ weeks.extraInfo.info }}</text>
83 83
     </view>
@@ -226,4 +226,11 @@ $uni-restday-dot: #e43d33; // 休息日打点颜色
226 226
 .uni-calendar-item--restday-text {
227 227
   color: $uni-restday-color; // 休息日字体颜色
228 228
 }
229
+.uni-calendar-item--workday-texts {
230
+  color: $uni-text-color-disable; // 工作日字体颜色
231
+}
232
+
233
+.uni-calendar-item--restday-texts {
234
+  color: $uni-text-color-disable; // 休息日字体颜色
235
+}
229 236
 </style>

+ 115
- 0
uni_modules/uni-easyinput/changelog.md Wyświetl plik

@@ -0,0 +1,115 @@
1
+## 1.1.19(2024-07-18)
2
+- 修复 初始值传入 null 导致input报错的bug
3
+## 1.1.18(2024-04-11)
4
+- 修复 easyinput组件双向绑定问题
5
+## 1.1.17(2024-03-28)
6
+- 修复 在头条小程序下丢失事件绑定的问题
7
+## 1.1.16(2024-03-20)
8
+- 修复 在密码输入情况下 清除和小眼睛覆盖bug 在edge浏览器下显示双眼睛bug
9
+## 1.1.15(2024-02-21)
10
+- 新增 左侧插槽:left
11
+## 1.1.14(2024-02-19)
12
+- 修复 onBlur的emit传值错误
13
+## 1.1.12(2024-01-29)
14
+- 补充 adjust-position文档属性补充
15
+## 1.1.11(2024-01-29)
16
+- 补充 adjust-position属性传递值:(Boolean)当键盘弹起时,是否自动上推页面
17
+## 1.1.10(2024-01-22)
18
+- 去除 移除无用的log输出
19
+## 1.1.9(2023-04-11)
20
+- 修复 vue3 下 keyboardheightchange 事件报错的bug
21
+## 1.1.8(2023-03-29)
22
+- 优化 trim 属性默认值
23
+## 1.1.7(2023-03-29)
24
+- 新增 cursor-spacing 属性
25
+## 1.1.6(2023-01-28)
26
+- 新增 keyboardheightchange 事件,可监听键盘高度变化
27
+## 1.1.5(2022-11-29)
28
+- 优化 主题样式
29
+## 1.1.4(2022-10-27)
30
+- 修复 props 中背景颜色无默认值的bug
31
+## 1.1.0(2022-06-30)
32
+
33
+- 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容
34
+- 新增 clear 事件,点击右侧叉号图标触发
35
+- 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发
36
+- 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等
37
+
38
+## 1.0.5(2022-06-07)
39
+
40
+- 优化 clearable 显示策略
41
+
42
+## 1.0.4(2022-06-07)
43
+
44
+- 优化 clearable 显示策略
45
+
46
+## 1.0.3(2022-05-20)
47
+
48
+- 修复 关闭图标某些情况下无法取消的 bug
49
+
50
+## 1.0.2(2022-04-12)
51
+
52
+- 修复 默认值不生效的 bug
53
+
54
+## 1.0.1(2022-04-02)
55
+
56
+- 修复 value 不能为 0 的 bug
57
+
58
+## 1.0.0(2021-11-19)
59
+
60
+- 优化 组件 UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
61
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-easyinput](https://uniapp.dcloud.io/component/uniui/uni-easyinput)
62
+
63
+## 0.1.4(2021-08-20)
64
+
65
+- 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug
66
+
67
+## 0.1.3(2021-08-11)
68
+
69
+- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题
70
+
71
+## 0.1.2(2021-07-30)
72
+
73
+- 优化 vue3 下事件警告的问题
74
+
75
+## 0.1.1
76
+
77
+- 优化 errorMessage 属性支持 Boolean 类型
78
+
79
+## 0.1.0(2021-07-13)
80
+
81
+- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
82
+
83
+## 0.0.16(2021-06-29)
84
+
85
+- 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug
86
+
87
+## 0.0.15(2021-06-21)
88
+
89
+- 修复 passwordIcon 属性拼写错误的 bug
90
+
91
+## 0.0.14(2021-06-18)
92
+
93
+- 新增 passwordIcon 属性,当 type=password 时是否显示小眼睛图标
94
+- 修复 confirmType 属性不生效的问题
95
+
96
+## 0.0.13(2021-06-04)
97
+
98
+- 修复 disabled 状态可清出内容的 bug
99
+
100
+## 0.0.12(2021-05-12)
101
+
102
+- 新增 组件示例地址
103
+
104
+## 0.0.11(2021-05-07)
105
+
106
+- 修复 input-border 属性不生效的问题
107
+
108
+## 0.0.10(2021-04-30)
109
+
110
+- 修复 ios 遮挡文字、显示一半的问题
111
+
112
+## 0.0.9(2021-02-05)
113
+
114
+- 调整为 uni_modules 目录规范
115
+- 优化 兼容 nvue 页面

+ 54
- 0
uni_modules/uni-easyinput/components/uni-easyinput/common.js Wyświetl plik

@@ -0,0 +1,54 @@
1
+/**
2
+ * @desc 函数防抖
3
+ * @param func 目标函数
4
+ * @param wait 延迟执行毫秒数
5
+ * @param immediate true - 立即执行, false - 延迟执行
6
+ */
7
+export const debounce = function(func, wait = 1000, immediate = true) {
8
+	let timer;
9
+	return function() {
10
+		let context = this,
11
+			args = arguments;
12
+		if (timer) clearTimeout(timer);
13
+		if (immediate) {
14
+			let callNow = !timer;
15
+			timer = setTimeout(() => {
16
+				timer = null;
17
+			}, wait);
18
+			if (callNow) func.apply(context, args);
19
+		} else {
20
+			timer = setTimeout(() => {
21
+				func.apply(context, args);
22
+			}, wait)
23
+		}
24
+	}
25
+}
26
+/**
27
+ * @desc 函数节流
28
+ * @param func 函数
29
+ * @param wait 延迟执行毫秒数
30
+ * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发
31
+ */
32
+export const throttle = (func, wait = 1000, type = 1) => {
33
+	let previous = 0;
34
+	let timeout;
35
+	return function() {
36
+		let context = this;
37
+		let args = arguments;
38
+		if (type === 1) {
39
+			let now = Date.now();
40
+
41
+			if (now - previous > wait) {
42
+				func.apply(context, args);
43
+				previous = now;
44
+			}
45
+		} else if (type === 2) {
46
+			if (!timeout) {
47
+				timeout = setTimeout(() => {
48
+					timeout = null;
49
+					func.apply(context, args)
50
+				}, wait)
51
+			}
52
+		}
53
+	}
54
+}

+ 676
- 0
uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue Wyświetl plik

@@ -0,0 +1,676 @@
1
+<template>
2
+	<view class="uni-easyinput" :class="{ 'uni-easyinput-error': msg }" :style="boxStyle">
3
+		<view class="uni-easyinput__content" :class="inputContentClass" :style="inputContentStyle">
4
+			<uni-icons v-if="prefixIcon" class="content-clear-icon" :type="prefixIcon" color="#c0c4cc" @click="onClickIcon('prefix')" size="22"></uni-icons>
5
+			<slot name="left">
6
+			</slot>
7
+			<!-- #ifdef MP-ALIPAY -->
8
+			<textarea :enableNative="enableNative" v-if="type === 'textarea'" class="uni-easyinput__content-textarea" :class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder" :placeholderStyle="placeholderStyle" :disabled="disabled" placeholder-class="uni-easyinput__placeholder-class" :maxlength="inputMaxlength" :focus="focused" :autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @input="onInput" @blur="_Blur" @focus="_Focus" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange"></textarea>
9
+			<input :enableNative="enableNative" v-else :type="type === 'password' ? 'text' : type" class="uni-easyinput__content-input" :style="inputStyle" :name="name" :value="val" :password="!showPassword && type === 'password'" :placeholder="placeholder" :placeholderStyle="placeholderStyle" placeholder-class="uni-easyinput__placeholder-class" :disabled="disabled" :maxlength="inputMaxlength" :focus="focused" :confirmType="confirmType" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur" @input="onInput" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange" />
10
+			<!-- #endif -->
11
+			<!-- #ifndef MP-ALIPAY -->
12
+			<textarea v-if="type === 'textarea'" class="uni-easyinput__content-textarea" :class="{ 'input-padding': inputBorder }" :name="name" :value="val" :placeholder="placeholder" :placeholderStyle="placeholderStyle" :disabled="disabled" placeholder-class="uni-easyinput__placeholder-class" :maxlength="inputMaxlength" :focus="focused" :autoHeight="autoHeight" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @input="onInput" @blur="_Blur" @focus="_Focus" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange"></textarea>
13
+			<input v-else :type="type === 'password' ? 'text' : type" class="uni-easyinput__content-input" :style="inputStyle" :name="name" :value="val" :password="!showPassword && type === 'password'" :placeholder="placeholder" :placeholderStyle="placeholderStyle" placeholder-class="uni-easyinput__placeholder-class" :disabled="disabled" :maxlength="inputMaxlength" :focus="focused" :confirmType="confirmType" :cursor-spacing="cursorSpacing" :adjust-position="adjustPosition" @focus="_Focus" @blur="_Blur" @input="onInput" @confirm="onConfirm" @keyboardheightchange="onkeyboardheightchange" />
14
+			<!-- #endif -->
15
+
16
+			<template v-if="type === 'password' && passwordIcon">
17
+				<!-- 开启密码时显示小眼睛 -->
18
+				<uni-icons v-if="isVal" class="content-clear-icon" :class="{ 'is-textarea-icon': type === 'textarea' }" :type="showPassword ? 'eye-slash-filled' : 'eye-filled'" :size="22" :color="focusShow ? primaryColor : '#c0c4cc'" @click="onEyes"></uni-icons>
19
+			</template>
20
+			<template v-if="suffixIcon">
21
+				<uni-icons v-if="suffixIcon" class="content-clear-icon" :type="suffixIcon" color="#c0c4cc" @click="onClickIcon('suffix')" size="22"></uni-icons>
22
+			</template>
23
+			<template v-else>
24
+				<uni-icons v-if="clearable && isVal && !disabled && type !== 'textarea'" class="content-clear-icon" :class="{ 'is-textarea-icon': type === 'textarea' }" type="clear" :size="clearSize" :color="msg ? '#dd524d' : focusShow ? primaryColor : '#c0c4cc'" @click="onClear"></uni-icons>
25
+			</template>
26
+			<slot name="right"></slot>
27
+		</view>
28
+	</view>
29
+</template>
30
+
31
+<script>
32
+	/**
33
+	 * Easyinput 输入框
34
+	 * @description 此组件可以实现表单的输入与校验,包括 "text" 和 "textarea" 类型。
35
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=3455
36
+	 * @property {String}	value	输入内容
37
+	 * @property {String }	type	输入框的类型(默认text) password/text/textarea/..
38
+	 * 	@value text			文本输入键盘
39
+	 * 	@value textarea	多行文本输入键盘
40
+	 * 	@value password	密码输入键盘
41
+	 * 	@value number		数字输入键盘,注意iOS上app-vue弹出的数字键盘并非9宫格方式
42
+	 * 	@value idcard		身份证输入键盘,信、支付宝、百度、QQ小程序
43
+	 * 	@value digit		带小数点的数字键盘	,App的nvue页面、微信、支付宝、百度、头条、QQ小程序支持
44
+	 * @property {Boolean}	clearable	是否显示右侧清空内容的图标控件,点击可清空输入框内容(默认true)
45
+	 * @property {Boolean}	autoHeight	是否自动增高输入区域,type为textarea时有效(默认true)
46
+	 * @property {String }	placeholder	输入框的提示文字
47
+	 * @property {String }	placeholderStyle	placeholder的样式(内联样式,字符串),如"color: #ddd"
48
+	 * @property {Boolean}	focus	是否自动获得焦点(默认false)
49
+	 * @property {Boolean}	disabled	是否禁用(默认false)
50
+	 * @property {Number }	maxlength	最大输入长度,设置为 -1 的时候不限制最大长度(默认140)
51
+	 * @property {String }	confirmType	设置键盘右下角按钮的文字,仅在type="text"时生效(默认done)
52
+	 * @property {Number }	clearSize	清除图标的大小,单位px(默认15)
53
+	 * @property {String}	prefixIcon	输入框头部图标
54
+	 * @property {String}	suffixIcon	输入框尾部图标
55
+	 * @property {String}	primaryColor	设置主题色(默认#2979ff)
56
+	 * @property {Boolean}	trim	是否自动去除两端的空格
57
+	 * @property {Boolean}	cursorSpacing	指定光标与键盘的距离,单位 px
58
+	 * @property {Boolean}  ajust-position 当键盘弹起时,是否上推内容,默认值:true
59
+	 * @value both	去除两端空格
60
+	 * @value left	去除左侧空格
61
+	 * @value right	去除右侧空格
62
+	 * @value start	去除左侧空格
63
+	 * @value end		去除右侧空格
64
+	 * @value all		去除全部空格
65
+	 * @value none	不去除空格
66
+	 * @property {Boolean}	inputBorder	是否显示input输入框的边框(默认true)
67
+	 * @property {Boolean}	passwordIcon	type=password时是否显示小眼睛图标
68
+	 * @property {Object}	styles	自定义颜色
69
+	 * @event {Function}	input	输入框内容发生变化时触发
70
+	 * @event {Function}	focus	输入框获得焦点时触发
71
+	 * @event {Function}	blur	输入框失去焦点时触发
72
+	 * @event {Function}	confirm	点击完成按钮时触发
73
+	 * @event {Function}	iconClick	点击图标时触发
74
+	 * @example <uni-easyinput v-model="mobile"></uni-easyinput>
75
+	 */
76
+	function obj2strClass(obj) {
77
+		let classess = '';
78
+		for (let key in obj) {
79
+			const val = obj[key];
80
+			if (val) {
81
+				classess += `${key} `;
82
+			}
83
+		}
84
+		return classess;
85
+	}
86
+
87
+	function obj2strStyle(obj) {
88
+		let style = '';
89
+		for (let key in obj) {
90
+			const val = obj[key];
91
+			style += `${key}:${val};`;
92
+		}
93
+		return style;
94
+	}
95
+	export default {
96
+		name: 'uni-easyinput',
97
+		emits: [
98
+			'click',
99
+			'iconClick',
100
+			'update:modelValue',
101
+			'input',
102
+			'focus',
103
+			'blur',
104
+			'confirm',
105
+			'clear',
106
+			'eyes',
107
+			'change',
108
+			'keyboardheightchange'
109
+		],
110
+		model: {
111
+			prop: 'modelValue',
112
+			event: 'update:modelValue'
113
+		},
114
+		options: {
115
+			// #ifdef MP-TOUTIAO
116
+			virtualHost: false,
117
+			// #endif
118
+			// #ifndef MP-TOUTIAO
119
+			virtualHost: true
120
+			// #endif
121
+		},
122
+		inject: {
123
+			form: {
124
+				from: 'uniForm',
125
+				default: null
126
+			},
127
+			formItem: {
128
+				from: 'uniFormItem',
129
+				default: null
130
+			}
131
+		},
132
+		props: {
133
+			name: String,
134
+			value: [Number, String],
135
+			modelValue: [Number, String],
136
+			type: {
137
+				type: String,
138
+				default: 'text'
139
+			},
140
+			clearable: {
141
+				type: Boolean,
142
+				default: true
143
+			},
144
+			autoHeight: {
145
+				type: Boolean,
146
+				default: false
147
+			},
148
+			placeholder: {
149
+				type: String,
150
+				default: ' '
151
+			},
152
+			placeholderStyle: String,
153
+			focus: {
154
+				type: Boolean,
155
+				default: false
156
+			},
157
+			disabled: {
158
+				type: Boolean,
159
+				default: false
160
+			},
161
+			maxlength: {
162
+				type: [Number, String],
163
+				default: 140
164
+			},
165
+			confirmType: {
166
+				type: String,
167
+				default: 'done'
168
+			},
169
+			clearSize: {
170
+				type: [Number, String],
171
+				default: 24
172
+			},
173
+			inputBorder: {
174
+				type: Boolean,
175
+				default: true
176
+			},
177
+			prefixIcon: {
178
+				type: String,
179
+				default: ''
180
+			},
181
+			suffixIcon: {
182
+				type: String,
183
+				default: ''
184
+			},
185
+			trim: {
186
+				type: [Boolean, String],
187
+				default: false
188
+			},
189
+			cursorSpacing: {
190
+				type: Number,
191
+				default: 0
192
+			},
193
+			passwordIcon: {
194
+				type: Boolean,
195
+				default: true
196
+			},
197
+			adjustPosition: {
198
+				type: Boolean,
199
+				default: true
200
+			},
201
+			primaryColor: {
202
+				type: String,
203
+				default: '#2979ff'
204
+			},
205
+			styles: {
206
+				type: Object,
207
+				default () {
208
+					return {
209
+						color: '#333',
210
+						backgroundColor: '#fff',
211
+						disableColor: '#F7F6F6',
212
+						borderColor: '#e5e5e5'
213
+					};
214
+				}
215
+			},
216
+			errorMessage: {
217
+				type: [String, Boolean],
218
+				default: ''
219
+			},
220
+			// #ifdef MP-ALIPAY
221
+			enableNative: {
222
+				type: Boolean,
223
+				default: false
224
+			}
225
+			// #endif
226
+		},
227
+		data() {
228
+			return {
229
+				focused: false,
230
+				val: '',
231
+				showMsg: '',
232
+				border: false,
233
+				isFirstBorder: false,
234
+				showClearIcon: false,
235
+				showPassword: false,
236
+				focusShow: false,
237
+				localMsg: '',
238
+				isEnter: false // 用于判断当前是否是使用回车操作
239
+			};
240
+		},
241
+		computed: {
242
+			// 输入框内是否有值
243
+			isVal() {
244
+				const val = this.val;
245
+				// fixed by mehaotian 处理值为0的情况,字符串0不在处理范围
246
+				if (val || val === 0) {
247
+					return true;
248
+				}
249
+				return false;
250
+			},
251
+
252
+			msg() {
253
+				// console.log('computed', this.form, this.formItem);
254
+				// if (this.form) {
255
+				// 	return this.errorMessage || this.formItem.errMsg;
256
+				// }
257
+				// TODO 处理头条 formItem 中 errMsg 不更新的问题
258
+				return this.localMsg || this.errorMessage;
259
+			},
260
+			// 因为uniapp的input组件的maxlength组件必须要数值,这里转为数值,用户可以传入字符串数值
261
+			inputMaxlength() {
262
+				return Number(this.maxlength);
263
+			},
264
+
265
+			// 处理外层样式的style
266
+			boxStyle() {
267
+				return `color:${
268
+					this.inputBorder && this.msg ? '#e43d33' : this.styles.color
269
+				};`;
270
+			},
271
+			// input 内容的类和样式处理
272
+			inputContentClass() {
273
+				return obj2strClass({
274
+					'is-input-border': this.inputBorder,
275
+					'is-input-error-border': this.inputBorder && this.msg,
276
+					'is-textarea': this.type === 'textarea',
277
+					'is-disabled': this.disabled,
278
+					'is-focused': this.focusShow
279
+				});
280
+			},
281
+			inputContentStyle() {
282
+				const focusColor = this.focusShow ?
283
+					this.primaryColor :
284
+					this.styles.borderColor;
285
+				const borderColor =
286
+					this.inputBorder && this.msg ? '#dd524d' : focusColor;
287
+				return obj2strStyle({
288
+					'border-color': borderColor || '#e5e5e5',
289
+					'background-color': this.disabled ?
290
+						this.styles.disableColor : this.styles.backgroundColor
291
+				});
292
+			},
293
+			// input右侧样式
294
+			inputStyle() {
295
+				const paddingRight =
296
+					this.type === 'password' || this.clearable || this.prefixIcon ?
297
+					'' :
298
+					'10px';
299
+				return obj2strStyle({
300
+					'padding-right': paddingRight,
301
+					'padding-left': this.prefixIcon ? '' : '10px'
302
+				});
303
+			}
304
+		},
305
+		watch: {
306
+			value(newVal) {
307
+				// fix by mehaotian 解决 值为null的情况下,input报错的bug
308
+				if (newVal === null) {
309
+					this.val = '';
310
+					return
311
+				}
312
+				this.val = newVal;
313
+			},
314
+			modelValue(newVal) {
315
+				if (newVal === null) {
316
+					this.val = '';
317
+					return
318
+				}
319
+				this.val = newVal;
320
+			},
321
+			focus(newVal) {
322
+				this.$nextTick(() => {
323
+					this.focused = this.focus;
324
+					this.focusShow = this.focus;
325
+				});
326
+			}
327
+		},
328
+		created() {
329
+			this.init();
330
+			// TODO 处理头条vue3 computed 不监听 inject 更改的问题(formItem.errMsg)
331
+			if (this.form && this.formItem) {
332
+				this.$watch('formItem.errMsg', newVal => {
333
+					this.localMsg = newVal;
334
+				});
335
+			}
336
+		},
337
+		mounted() {
338
+			this.$nextTick(() => {
339
+				this.focused = this.focus;
340
+				this.focusShow = this.focus;
341
+			});
342
+		},
343
+		methods: {
344
+			/**
345
+			 * 初始化变量值
346
+			 */
347
+			init() {
348
+				if (this.value || this.value === 0) {
349
+					this.val = this.value;
350
+				} else if (
351
+					this.modelValue ||
352
+					this.modelValue === 0 ||
353
+					this.modelValue === ''
354
+				) {
355
+					this.val = this.modelValue; 
356
+				} else {
357
+					// fix by ht 如果初始值为null,则input报错,待框架修复
358
+					this.val = '';
359
+				}
360
+			},
361
+
362
+			/**
363
+			 * 点击图标时触发
364
+			 * @param {Object} type
365
+			 */
366
+			onClickIcon(type) {
367
+				this.$emit('iconClick', type);
368
+			},
369
+
370
+			/**
371
+			 * 显示隐藏内容,密码框时生效
372
+			 */
373
+			onEyes() {
374
+				this.showPassword = !this.showPassword;
375
+				this.$emit('eyes', this.showPassword);
376
+			},
377
+
378
+			/**
379
+			 * 输入时触发
380
+			 * @param {Object} event
381
+			 */
382
+			onInput(event) {
383
+				let value = event.detail.value;
384
+				// 判断是否去除空格
385
+				if (this.trim) {
386
+					if (typeof this.trim === 'boolean' && this.trim) {
387
+						value = this.trimStr(value);
388
+					}
389
+					if (typeof this.trim === 'string') {
390
+						value = this.trimStr(value, this.trim);
391
+					}
392
+				}
393
+				if (this.errMsg) this.errMsg = '';
394
+				this.val = value;
395
+				// TODO 兼容 vue2
396
+				this.$emit('input', value);
397
+				// TODO 兼容 vue3
398
+				this.$emit('update:modelValue', value);
399
+			},
400
+
401
+			/**
402
+			 * 外部调用方法
403
+			 * 获取焦点时触发
404
+			 * @param {Object} event
405
+			 */
406
+			onFocus() {
407
+				this.$nextTick(() => {
408
+					this.focused = true;
409
+				});
410
+				this.$emit('focus', null);
411
+			},
412
+
413
+			_Focus(event) {
414
+				this.focusShow = true;
415
+				this.$emit('focus', event);
416
+			},
417
+
418
+			/**
419
+			 * 外部调用方法
420
+			 * 失去焦点时触发
421
+			 * @param {Object} event
422
+			 */
423
+			onBlur() {
424
+				this.focused = false;
425
+				this.$emit('blur', null);
426
+			},
427
+			_Blur(event) {
428
+				let value = event.detail.value;
429
+				this.focusShow = false;
430
+				this.$emit('blur', event);
431
+				// 根据类型返回值,在event中获取的值理论上讲都是string
432
+				if (this.isEnter === false) {
433
+					this.$emit('change', this.val);
434
+				}
435
+				// 失去焦点时参与表单校验
436
+				if (this.form && this.formItem) {
437
+					const { validateTrigger } = this.form;
438
+					if (validateTrigger === 'blur') {
439
+						this.formItem.onFieldChange();
440
+					}
441
+				}
442
+			},
443
+
444
+			/**
445
+			 * 按下键盘的发送键
446
+			 * @param {Object} e
447
+			 */
448
+			onConfirm(e) {
449
+				this.$emit('confirm', this.val);
450
+				this.isEnter = true;
451
+				this.$emit('change', this.val);
452
+				this.$nextTick(() => {
453
+					this.isEnter = false;
454
+				});
455
+			},
456
+
457
+			/**
458
+			 * 清理内容
459
+			 * @param {Object} event
460
+			 */
461
+			onClear(event) {
462
+				this.val = '';
463
+				// TODO 兼容 vue2
464
+				this.$emit('input', '');
465
+				// TODO 兼容 vue2
466
+				// TODO 兼容 vue3
467
+				this.$emit('update:modelValue', '');
468
+				// 点击叉号触发
469
+				this.$emit('clear');
470
+			},
471
+
472
+			/**
473
+			 * 键盘高度发生变化的时候触发此事件
474
+			 * 兼容性:微信小程序2.7.0+、App 3.1.0+
475
+			 * @param {Object} event
476
+			 */
477
+			onkeyboardheightchange(event) {
478
+				this.$emit('keyboardheightchange', event);
479
+			},
480
+
481
+			/**
482
+			 * 去除空格
483
+			 */
484
+			trimStr(str, pos = 'both') {
485
+				if (pos === 'both') {
486
+					return str.trim();
487
+				} else if (pos === 'left') {
488
+					return str.trimLeft();
489
+				} else if (pos === 'right') {
490
+					return str.trimRight();
491
+				} else if (pos === 'start') {
492
+					return str.trimStart();
493
+				} else if (pos === 'end') {
494
+					return str.trimEnd();
495
+				} else if (pos === 'all') {
496
+					return str.replace(/\s+/g, '');
497
+				} else if (pos === 'none') {
498
+					return str;
499
+				}
500
+				return str;
501
+			}
502
+		}
503
+	};
504
+</script>
505
+
506
+<style lang="scss">
507
+	$uni-error: #e43d33;
508
+	$uni-border-1: #dcdfe6 !default;
509
+
510
+	.uni-easyinput {
511
+		/* #ifndef APP-NVUE */
512
+		width: 100%;
513
+		/* #endif */
514
+		flex: 1;
515
+		position: relative;
516
+		text-align: left;
517
+		color: #333;
518
+		font-size: 14px;
519
+	}
520
+
521
+	.uni-easyinput__content {
522
+		flex: 1;
523
+		/* #ifndef APP-NVUE */
524
+		width: 100%;
525
+		display: flex;
526
+		box-sizing: border-box;
527
+		// min-height: 36px;
528
+		/* #endif */
529
+		flex-direction: row;
530
+		align-items: center;
531
+		// 处理border动画刚开始显示黑色的问题
532
+		border-color: #fff;
533
+		transition-property: border-color;
534
+		transition-duration: 0.3s;
535
+	}
536
+
537
+	.uni-easyinput__content-input {
538
+		/* #ifndef APP-NVUE */
539
+		width: auto;
540
+		/* #endif */
541
+		position: relative;
542
+		overflow: hidden;
543
+		flex: 1;
544
+		line-height: 1;
545
+		font-size: 14px;
546
+		height: 35px;
547
+		// min-height: 36px;
548
+
549
+		/*ifdef H5*/
550
+		& ::-ms-reveal {
551
+			display: none;
552
+		}
553
+
554
+		& ::-ms-clear {
555
+			display: none;
556
+		}
557
+
558
+		& ::-o-clear {
559
+			display: none;
560
+		}
561
+
562
+		/*endif*/
563
+	}
564
+
565
+	.uni-easyinput__placeholder-class {
566
+		color: #999;
567
+		font-size: 12px;
568
+		// font-weight: 200;
569
+	}
570
+
571
+	.is-textarea {
572
+		align-items: flex-start;
573
+	}
574
+
575
+	.is-textarea-icon {
576
+		margin-top: 5px;
577
+	}
578
+
579
+	.uni-easyinput__content-textarea {
580
+		position: relative;
581
+		overflow: hidden;
582
+		flex: 1;
583
+		line-height: 1.5;
584
+		font-size: 14px;
585
+		margin: 6px;
586
+		margin-left: 0;
587
+		height: 80px;
588
+		min-height: 80px;
589
+		/* #ifndef APP-NVUE */
590
+		min-height: 80px;
591
+		width: auto;
592
+		/* #endif */
593
+	}
594
+
595
+	.input-padding {
596
+		padding-left: 10px;
597
+	}
598
+
599
+	.content-clear-icon {
600
+		padding: 0 5px;
601
+	}
602
+
603
+	.label-icon {
604
+		margin-right: 5px;
605
+		margin-top: -1px;
606
+	}
607
+
608
+	// 显示边框
609
+	.is-input-border {
610
+		/* #ifndef APP-NVUE */
611
+		display: flex;
612
+		box-sizing: border-box;
613
+		/* #endif */
614
+		flex-direction: row;
615
+		align-items: center;
616
+		border: 1px solid $uni-border-1;
617
+		border-radius: 4px;
618
+		/* #ifdef MP-ALIPAY */
619
+		overflow: hidden;
620
+		/* #endif */
621
+	}
622
+
623
+	.uni-error-message {
624
+		position: absolute;
625
+		bottom: -17px;
626
+		left: 0;
627
+		line-height: 12px;
628
+		color: $uni-error;
629
+		font-size: 12px;
630
+		text-align: left;
631
+	}
632
+
633
+	.uni-error-msg--boeder {
634
+		position: relative;
635
+		bottom: 0;
636
+		line-height: 22px;
637
+	}
638
+
639
+	.is-input-error-border {
640
+		border-color: $uni-error;
641
+
642
+		.uni-easyinput__placeholder-class {
643
+			color: mix(#fff, $uni-error, 50%);
644
+		}
645
+	}
646
+
647
+	.uni-easyinput--border {
648
+		margin-bottom: 0;
649
+		padding: 10px 15px;
650
+		// padding-bottom: 0;
651
+		border-top: 1px #eee solid;
652
+	}
653
+
654
+	.uni-easyinput-error {
655
+		padding-bottom: 0;
656
+	}
657
+
658
+	.is-first-border {
659
+		/* #ifndef APP-NVUE */
660
+		border: none;
661
+		/* #endif */
662
+		/* #ifdef APP-NVUE */
663
+		border-width: 0;
664
+		/* #endif */
665
+	}
666
+
667
+	.is-disabled {
668
+		background-color: #f7f6f6;
669
+		color: #d5d5d5;
670
+
671
+		.uni-easyinput__placeholder-class {
672
+			color: #d5d5d5;
673
+			font-size: 12px;
674
+		}
675
+	}
676
+</style>

+ 88
- 0
uni_modules/uni-easyinput/package.json Wyświetl plik

@@ -0,0 +1,88 @@
1
+{
2
+  "id": "uni-easyinput",
3
+  "displayName": "uni-easyinput 增强输入框",
4
+  "version": "1.1.19",
5
+  "description": "Easyinput 组件是对原生input组件的增强",
6
+  "keywords": [
7
+    "uni-ui",
8
+    "uniui",
9
+    "input",
10
+    "uni-easyinput",
11
+    "输入框"
12
+],
13
+  "repository": "https://github.com/dcloudio/uni-ui",
14
+  "engines": {
15
+    "HBuilderX": ""
16
+  },
17
+  "directories": {
18
+    "example": "../../temps/example_temps"
19
+  },
20
+"dcloudext": {
21
+    "sale": {
22
+      "regular": {
23
+        "price": "0.00"
24
+      },
25
+      "sourcecode": {
26
+        "price": "0.00"
27
+      }
28
+    },
29
+    "contact": {
30
+      "qq": ""
31
+    },
32
+    "declaration": {
33
+      "ads": "无",
34
+      "data": "无",
35
+      "permissions": "无"
36
+    },
37
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
38
+    "type": "component-vue"
39
+  },
40
+  "uni_modules": {
41
+    "dependencies": [
42
+			"uni-scss",
43
+      "uni-icons"
44
+    ],
45
+    "encrypt": [],
46
+    "platforms": {
47
+      "cloud": {
48
+        "tcb": "y",
49
+        "aliyun": "y",
50
+        "alipay": "n"
51
+      },
52
+      "client": {
53
+        "App": {
54
+          "app-vue": "y",
55
+          "app-nvue": "y"
56
+        },
57
+        "H5-mobile": {
58
+          "Safari": "y",
59
+          "Android Browser": "y",
60
+          "微信浏览器(Android)": "y",
61
+          "QQ浏览器(Android)": "y"
62
+        },
63
+        "H5-pc": {
64
+          "Chrome": "y",
65
+          "IE": "y",
66
+          "Edge": "y",
67
+          "Firefox": "y",
68
+          "Safari": "y"
69
+        },
70
+        "小程序": {
71
+          "微信": "y",
72
+          "阿里": "y",
73
+          "百度": "y",
74
+          "字节跳动": "y",
75
+          "QQ": "y"
76
+        },
77
+        "快应用": {
78
+          "华为": "u",
79
+          "联盟": "u"
80
+        },
81
+        "Vue": {
82
+            "vue2": "y",
83
+            "vue3": "y"
84
+        }
85
+      }
86
+    }
87
+  }
88
+}

+ 11
- 0
uni_modules/uni-easyinput/readme.md Wyświetl plik

@@ -0,0 +1,11 @@
1
+
2
+
3
+### Easyinput 增强输入框
4
+> **组件名:uni-easyinput**
5
+> 代码块: `uEasyinput`
6
+
7
+
8
+easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能
9
+
10
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput)
11
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 81
- 0
uni_modules/uni-file-picker/changelog.md Wyświetl plik

@@ -0,0 +1,81 @@
1
+## 1.0.12(2025-04-14)
2
+- 修复 支付宝小程序 上传样式问题
3
+## 1.0.10(2024-07-09)
4
+- 优化 vue3兼容性
5
+## 1.0.9(2024-07-09)
6
+- 修复 value 属性不兼容vue3的bug
7
+## 1.0.8(2024-03-20)
8
+- 补充 删除文件时返回文件下标
9
+## 1.0.7(2024-02-21)
10
+- 新增 微信小程序选择视频时改用chooseMedia,并返回视频缩略图
11
+## 1.0.6(2024-01-06)
12
+- 新增 微信小程序不再调用chooseImage,而是调用chooseMedia
13
+## 1.0.5(2024-01-03)
14
+- 新增 上传文件至云存储携带本地文件名称
15
+## 1.0.4(2023-03-29)
16
+- 修复 手动上传删除一个文件后不能再上传的bug
17
+## 1.0.3(2022-12-19)
18
+- 新增 sourceType 属性, 可以自定义图片和视频选择的来源
19
+## 1.0.2(2022-07-04)
20
+- 修复 在uni-forms下样式不生效的bug
21
+## 1.0.1(2021-11-23)
22
+- 修复 参数为对象的情况下,url在某些情况显示错误的bug
23
+## 1.0.0(2021-11-19)
24
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
25
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
26
+## 0.2.16(2021-11-08)
27
+- 修复 传入空对象 ,显示错误的Bug
28
+## 0.2.15(2021-08-30)
29
+- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug
30
+## 0.2.14(2021-08-23)
31
+- 新增 参数中返回 fileID 字段
32
+## 0.2.13(2021-08-23)
33
+- 修复 腾讯云传入fileID 不能回显的bug
34
+- 修复 选择图片后,不能放大的问题
35
+## 0.2.12(2021-08-17)
36
+- 修复 由于 0.2.11 版本引起的不能回显图片的Bug
37
+## 0.2.11(2021-08-16)
38
+- 新增 clearFiles(index) 方法,可以手动删除指定文件
39
+- 修复 v-model 值设为 null 报错的Bug
40
+## 0.2.10(2021-08-13)
41
+- 修复 return-type="object" 时,无法删除文件的Bug
42
+## 0.2.9(2021-08-03)
43
+- 修复 auto-upload 属性失效的Bug
44
+## 0.2.8(2021-07-31)
45
+- 修复 fileExtname属性不指定值报错的Bug
46
+## 0.2.7(2021-07-31)
47
+- 修复 在某种场景下图片不回显的Bug
48
+## 0.2.6(2021-07-30)
49
+- 修复 return-type为object下,返回值不正确的Bug
50
+## 0.2.5(2021-07-30)
51
+- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题
52
+## 0.2.3(2021-07-28)
53
+- 优化 调整示例代码
54
+## 0.2.2(2021-07-27)
55
+- 修复 vue3 下赋值错误的Bug
56
+- 优化 h5平台下上传文件导致页面卡死的问题
57
+## 0.2.0(2021-07-13)
58
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
59
+## 0.1.1(2021-07-02)
60
+- 修复 sourceType 缺少默认值导致 ios 无法选择文件
61
+## 0.1.0(2021-06-30)
62
+- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改
63
+## 0.0.11(2021-06-30)
64
+- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题
65
+## 0.0.10(2021-06-29)
66
+- 优化 文件上传后进度条消失时机
67
+## 0.0.9(2021-06-29)
68
+- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug
69
+## 0.0.8(2021-06-15)
70
+- 修复 删除文件时无法触发 v-model 的Bug
71
+## 0.0.7(2021-05-12)
72
+- 新增 组件示例地址
73
+## 0.0.6(2021-04-09)
74
+- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug
75
+## 0.0.5(2021-04-09)
76
+- 优化 更新组件示例
77
+## 0.0.4(2021-04-09)
78
+- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔
79
+## 0.0.3(2021-02-05)
80
+- 调整为uni_modules目录规范
81
+- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug

+ 287
- 0
uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js Wyświetl plik

@@ -0,0 +1,287 @@
1
+'use strict';
2
+
3
+const ERR_MSG_OK = 'chooseAndUploadFile:ok';
4
+const ERR_MSG_FAIL = 'chooseAndUploadFile:fail';
5
+
6
+function chooseImage(opts) {
7
+	const {
8
+		count,
9
+		sizeType = ['original', 'compressed'],
10
+		sourceType,
11
+		extension
12
+	} = opts
13
+	return new Promise((resolve, reject) => {
14
+		// 微信由于旧接口不再维护,针对微信小程序平台改用chooseMedia接口
15
+		// #ifdef MP-WEIXIN
16
+		uni.chooseMedia({
17
+			count,
18
+			sizeType,
19
+			sourceType,
20
+			mediaType: ['image'],
21
+			extension,
22
+			success(res) {
23
+				res.tempFiles.forEach(item => {
24
+					item.path = item.tempFilePath;
25
+				})
26
+				resolve(normalizeChooseAndUploadFileRes(res, 'image'));
27
+			},
28
+			fail(res) {
29
+				reject({
30
+					errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
31
+				});
32
+			},
33
+		})
34
+		// #endif
35
+		// #ifndef MP-WEIXIN
36
+		uni.chooseImage({
37
+			count,
38
+			sizeType,
39
+			sourceType,
40
+			extension,
41
+			success(res) {
42
+				resolve(normalizeChooseAndUploadFileRes(res, 'image'));
43
+			},
44
+			fail(res) {
45
+				reject({
46
+					errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL),
47
+				});
48
+			},
49
+		});
50
+		// #endif
51
+
52
+	});
53
+}
54
+
55
+function chooseVideo(opts) {
56
+	const {
57
+		count,
58
+		camera,
59
+		compressed,
60
+		maxDuration,
61
+		sourceType,
62
+		extension
63
+	} = opts;
64
+	return new Promise((resolve, reject) => {
65
+		// 微信由于旧接口不再维护,针对微信小程序平台改用chooseMedia接口
66
+		// #ifdef MP-WEIXIN
67
+		uni.chooseMedia({
68
+			count,
69
+			compressed,
70
+			maxDuration,
71
+			sourceType,
72
+			extension,
73
+			mediaType: ['video'],
74
+			success(res) {
75
+				const {
76
+					tempFiles,
77
+				} = res;
78
+				resolve(normalizeChooseAndUploadFileRes({
79
+					errMsg: 'chooseVideo:ok',
80
+					tempFiles: tempFiles.map(item => {
81
+						return {
82
+							name: item.name || '',
83
+							path: item.tempFilePath,
84
+							thumbTempFilePath: item.thumbTempFilePath,
85
+							size:item.size,
86
+							type: (res.tempFile && res.tempFile.type) || '',
87
+							width:item.width,
88
+							height:item.height,
89
+							duration:item.duration,
90
+							fileType: 'video',
91
+							cloudPath: '',
92
+						}
93
+					}),
94
+				}, 'video'));
95
+			},
96
+			fail(res) {
97
+				reject({
98
+					errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
99
+				});
100
+			},
101
+		})
102
+		// #endif
103
+		// #ifndef MP-WEIXIN
104
+		uni.chooseVideo({
105
+			camera,
106
+			compressed,
107
+			maxDuration,
108
+			sourceType,
109
+			extension,
110
+			success(res) {
111
+				const {
112
+					tempFilePath,
113
+					duration,
114
+					size,
115
+					height,
116
+					width
117
+				} = res;
118
+				resolve(normalizeChooseAndUploadFileRes({
119
+					errMsg: 'chooseVideo:ok',
120
+					tempFilePaths: [tempFilePath],
121
+					tempFiles: [{
122
+						name: (res.tempFile && res.tempFile.name) || '',
123
+						path: tempFilePath,
124
+						size,
125
+						type: (res.tempFile && res.tempFile.type) || '',
126
+						width,
127
+						height,
128
+						duration,
129
+						fileType: 'video',
130
+						cloudPath: '',
131
+					}, ],
132
+				}, 'video'));
133
+			},
134
+			fail(res) {
135
+				reject({
136
+					errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL),
137
+				});
138
+			},
139
+		});
140
+		// #endif
141
+	});
142
+}
143
+
144
+function chooseAll(opts) {
145
+	const {
146
+		count,
147
+		extension
148
+	} = opts;
149
+	return new Promise((resolve, reject) => {
150
+		let chooseFile = uni.chooseFile;
151
+		if (typeof wx !== 'undefined' &&
152
+			typeof wx.chooseMessageFile === 'function') {
153
+			chooseFile = wx.chooseMessageFile;
154
+		}
155
+		if (typeof chooseFile !== 'function') {
156
+			return reject({
157
+				errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。',
158
+			});
159
+		}
160
+		chooseFile({
161
+			type: 'all',
162
+			count,
163
+			extension,
164
+			success(res) {
165
+				resolve(normalizeChooseAndUploadFileRes(res));
166
+			},
167
+			fail(res) {
168
+				reject({
169
+					errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL),
170
+				});
171
+			},
172
+		});
173
+	});
174
+}
175
+
176
+function normalizeChooseAndUploadFileRes(res, fileType) {
177
+	res.tempFiles.forEach((item, index) => {
178
+		if (!item.name) {
179
+			item.name = item.path.substring(item.path.lastIndexOf('/') + 1);
180
+		}
181
+		if (fileType) {
182
+			item.fileType = fileType;
183
+		}
184
+		item.cloudPath =
185
+			Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.'));
186
+	});
187
+	if (!res.tempFilePaths) {
188
+		res.tempFilePaths = res.tempFiles.map((file) => file.path);
189
+	}
190
+	return res;
191
+}
192
+
193
+function uploadCloudFiles(files, max = 5, onUploadProgress) {
194
+	files = JSON.parse(JSON.stringify(files))
195
+	const len = files.length
196
+	let count = 0
197
+	let self = this
198
+	return new Promise(resolve => {
199
+		while (count < max) {
200
+			next()
201
+		}
202
+
203
+		function next() {
204
+			let cur = count++
205
+			if (cur >= len) {
206
+				!files.find(item => !item.url && !item.errMsg) && resolve(files)
207
+				return
208
+			}
209
+			const fileItem = files[cur]
210
+			const index = self.files.findIndex(v => v.uuid === fileItem.uuid)
211
+			fileItem.url = ''
212
+			delete fileItem.errMsg
213
+
214
+			uniCloud
215
+				.uploadFile({
216
+					filePath: fileItem.path,
217
+					cloudPath: fileItem.cloudPath,
218
+					fileType: fileItem.fileType,
219
+					onUploadProgress: res => {
220
+						res.index = index
221
+						onUploadProgress && onUploadProgress(res)
222
+					}
223
+				})
224
+				.then(res => {
225
+					fileItem.url = res.fileID
226
+					fileItem.index = index
227
+					if (cur < len) {
228
+						next()
229
+					}
230
+				})
231
+				.catch(res => {
232
+					fileItem.errMsg = res.errMsg || res.message
233
+					fileItem.index = index
234
+					if (cur < len) {
235
+						next()
236
+					}
237
+				})
238
+		}
239
+	})
240
+}
241
+
242
+
243
+
244
+
245
+
246
+function uploadFiles(choosePromise, {
247
+	onChooseFile,
248
+	onUploadProgress
249
+}) {
250
+	return choosePromise
251
+		.then((res) => {
252
+			if (onChooseFile) {
253
+				const customChooseRes = onChooseFile(res);
254
+				if (typeof customChooseRes !== 'undefined') {
255
+					return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ?
256
+						res : chooseRes);
257
+				}
258
+			}
259
+			return res;
260
+		})
261
+		.then((res) => {
262
+			if (res === false) {
263
+				return {
264
+					errMsg: ERR_MSG_OK,
265
+					tempFilePaths: [],
266
+					tempFiles: [],
267
+				};
268
+			}
269
+			return res
270
+		})
271
+}
272
+
273
+function chooseAndUploadFile(opts = {
274
+	type: 'all'
275
+}) {
276
+	if (opts.type === 'image') {
277
+		return uploadFiles(chooseImage(opts), opts);
278
+	} else if (opts.type === 'video') {
279
+		return uploadFiles(chooseVideo(opts), opts);
280
+	}
281
+	return uploadFiles(chooseAll(opts), opts);
282
+}
283
+
284
+export {
285
+	chooseAndUploadFile,
286
+	uploadCloudFiles
287
+};

+ 658
- 0
uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue Wyświetl plik

@@ -0,0 +1,658 @@
1
+<template>
2
+	<view class="uni-file-picker">
3
+		<view v-if="title" class="uni-file-picker__header">
4
+			<text class="file-title">{{ title }}</text>
5
+			<text class="file-count">{{ filesList.length }}/{{ limitLength }}</text>
6
+		</view>
7
+		<upload-image v-if="fileMediatype === 'image' && showType === 'grid'" :readonly="readonly"
8
+			:image-styles="imageStyles" :files-list="filesList" :limit="limitLength" :disablePreview="disablePreview"
9
+			:delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
10
+			<slot>
11
+				<view class="icon-add"></view>
12
+				<view class="icon-add rotate"></view>
13
+			</slot>
14
+		</upload-image>
15
+		<upload-file v-if="fileMediatype !== 'image' || showType !== 'grid'" :readonly="readonly"
16
+			:list-styles="listStyles" :files-list="filesList" :showType="showType" :delIcon="delIcon"
17
+			@uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
18
+			<slot><button type="primary" size="mini">选择文件</button></slot>
19
+		</upload-file>
20
+	</view>
21
+</template>
22
+
23
+<script>
24
+	import {
25
+		chooseAndUploadFile,
26
+		uploadCloudFiles
27
+	} from './choose-and-upload-file.js'
28
+	import {
29
+		get_file_ext,
30
+		get_extname,
31
+		get_files_and_is_max,
32
+		get_file_info,
33
+		get_file_data
34
+	} from './utils.js'
35
+	import uploadImage from './upload-image.vue'
36
+	import uploadFile from './upload-file.vue'
37
+	let fileInput = null
38
+	/**
39
+	 * FilePicker 文件选择上传
40
+	 * @description 文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
41
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=4079
42
+	 * @property {Object|Array}	value	组件数据,通常用来回显 ,类型由return-type属性决定
43
+	 * @property {Boolean}	disabled = [true|false]	组件禁用
44
+	 * 	@value true 	禁用
45
+	 * 	@value false 	取消禁用
46
+	 * @property {Boolean}	readonly = [true|false]	组件只读,不可选择,不显示进度,不显示删除按钮
47
+	 * 	@value true 	只读
48
+	 * 	@value false 	取消只读
49
+	 * @property {String}	return-type = [array|object]	限制 value 格式,当为 object 时 ,组件只能单选,且会覆盖
50
+	 * 	@value array	规定 value 属性的类型为数组
51
+	 * 	@value object	规定 value 属性的类型为对象
52
+	 * @property {Boolean}	disable-preview = [true|false]	禁用图片预览,仅 mode:grid 时生效
53
+	 * 	@value true 	禁用图片预览
54
+	 * 	@value false 	取消禁用图片预览
55
+	 * @property {Boolean}	del-icon = [true|false]	是否显示删除按钮
56
+	 * 	@value true 	显示删除按钮
57
+	 * 	@value false 	不显示删除按钮
58
+	 * @property {Boolean}	auto-upload = [true|false]	是否自动上传,值为true则只触发@select,可自行上传
59
+	 * 	@value true 	自动上传
60
+	 * 	@value false 	取消自动上传
61
+	 * @property {Number|String}	limit	最大选择个数 ,h5 会自动忽略多选的部分
62
+	 * @property {String}	title	组件标题,右侧显示上传计数
63
+	 * @property {String}	mode = [list|grid]	选择文件后的文件列表样式
64
+	 * 	@value list 	列表显示
65
+	 * 	@value grid 	宫格显示
66
+	 * @property {String}	file-mediatype = [image|video|all]	选择文件类型
67
+	 * 	@value image	只选择图片
68
+	 * 	@value video	只选择视频
69
+	 * 	@value all		选择所有文件
70
+	 * @property {Array}	file-extname	选择文件后缀,根据 file-mediatype 属性而不同
71
+	 * @property {Object}	list-style	mode:list 时的样式
72
+	 * @property {Object}	image-styles	选择文件后缀,根据 file-mediatype 属性而不同
73
+	 * @event {Function} select 	选择文件后触发
74
+	 * @event {Function} progress 文件上传时触发
75
+	 * @event {Function} success 	上传成功触发
76
+	 * @event {Function} fail 		上传失败触发
77
+	 * @event {Function} delete 	文件从列表移除时触发
78
+	 */
79
+	export default {
80
+		name: 'uniFilePicker',
81
+		components: {
82
+			uploadImage,
83
+			uploadFile
84
+		},
85
+		options: {
86
+			virtualHost: true
87
+		},
88
+		emits: ['select', 'success', 'fail', 'progress', 'delete', 'update:modelValue', 'input'],
89
+		props: {
90
+			modelValue: {
91
+				type: [Array, Object],
92
+				default () {
93
+					return []
94
+				}
95
+			},
96
+			value: {
97
+				type: [Array, Object],
98
+				default () {
99
+					return []
100
+				}
101
+			},
102
+			disabled: {
103
+				type: Boolean,
104
+				default: false
105
+			},
106
+			disablePreview: {
107
+				type: Boolean,
108
+				default: false
109
+			},
110
+			delIcon: {
111
+				type: Boolean,
112
+				default: true
113
+			},
114
+			// 自动上传
115
+			autoUpload: {
116
+				type: Boolean,
117
+				default: true
118
+			},
119
+			// 最大选择个数 ,h5只能限制单选或是多选
120
+			limit: {
121
+				type: [Number, String],
122
+				default: 9
123
+			},
124
+			// 列表样式 grid | list | list-card
125
+			mode: {
126
+				type: String,
127
+				default: 'grid'
128
+			},
129
+			// 选择文件类型  image/video/all
130
+			fileMediatype: {
131
+				type: String,
132
+				default: 'image'
133
+			},
134
+			// 文件类型筛选
135
+			fileExtname: {
136
+				type: [Array, String],
137
+				default () {
138
+					return []
139
+				}
140
+			},
141
+			title: {
142
+				type: String,
143
+				default: ''
144
+			},
145
+			listStyles: {
146
+				type: Object,
147
+				default () {
148
+					return {
149
+						// 是否显示边框
150
+						border: true,
151
+						// 是否显示分隔线
152
+						dividline: true,
153
+						// 线条样式
154
+						borderStyle: {}
155
+					}
156
+				}
157
+			},
158
+			imageStyles: {
159
+				type: Object,
160
+				default () {
161
+					return {
162
+						width: 'auto',
163
+						height: 'auto'
164
+					}
165
+				}
166
+			},
167
+			readonly: {
168
+				type: Boolean,
169
+				default: false
170
+			},
171
+			returnType: {
172
+				type: String,
173
+				default: 'array'
174
+			},
175
+			sizeType: {
176
+				type: Array,
177
+				default () {
178
+					return ['original', 'compressed']
179
+				}
180
+			},
181
+			sourceType: {
182
+				type: Array,
183
+				default () {
184
+					return  ['album', 'camera']
185
+				}
186
+			},
187
+			provider: {
188
+				type: String,
189
+				default: '' // 默认上传到 unicloud 内置存储 extStorage 扩展存储
190
+			}
191
+		},
192
+		data() {
193
+			return {
194
+				files: [],
195
+				localValue: []
196
+			}
197
+		},
198
+		watch: {
199
+			value: {
200
+				handler(newVal, oldVal) {
201
+					this.setValue(newVal, oldVal)
202
+				},
203
+				immediate: true
204
+			},
205
+			modelValue: {
206
+				handler(newVal, oldVal) {
207
+					this.setValue(newVal, oldVal)
208
+				},
209
+				immediate: true
210
+			},
211
+		},
212
+		computed: {
213
+			filesList() {
214
+				let files = []
215
+				this.files.forEach(v => {
216
+					files.push(v)
217
+				})
218
+				return files
219
+			},
220
+			showType() {
221
+				if (this.fileMediatype === 'image') {
222
+					return this.mode
223
+				}
224
+				return 'list'
225
+			},
226
+			limitLength() {
227
+				if (this.returnType === 'object') {
228
+					return 1
229
+				}
230
+				if (!this.limit) {
231
+					return 1
232
+				}
233
+				if (this.limit >= 9) {
234
+					return 9
235
+				}
236
+				return this.limit
237
+			}
238
+		},
239
+		created() {
240
+			// TODO 兼容不开通服务空间的情况
241
+			if (!(uniCloud.config && uniCloud.config.provider)) {
242
+				this.noSpace = true
243
+				uniCloud.chooseAndUploadFile = chooseAndUploadFile
244
+			}
245
+			this.form = this.getForm('uniForms')
246
+			this.formItem = this.getForm('uniFormsItem')
247
+			if (this.form && this.formItem) {
248
+				if (this.formItem.name) {
249
+					this.rename = this.formItem.name
250
+					this.form.inputChildrens.push(this)
251
+				}
252
+			}
253
+		},
254
+		methods: {
255
+			/**
256
+			 * 公开用户使用,清空文件
257
+			 * @param {Object} index
258
+			 */
259
+			clearFiles(index) {
260
+				if (index !== 0 && !index) {
261
+					this.files = []
262
+					this.$nextTick(() => {
263
+						this.setEmit()
264
+					})
265
+				} else {
266
+					this.files.splice(index, 1)
267
+				}
268
+				this.$nextTick(() => {
269
+					this.setEmit()
270
+				})
271
+			},
272
+			/**
273
+			 * 公开用户使用,继续上传
274
+			 */
275
+			upload() {
276
+				let files = []
277
+				this.files.forEach((v, index) => {
278
+					if (v.status === 'ready' || v.status === 'error') {
279
+						files.push(Object.assign({}, v))
280
+					}
281
+				})
282
+				return this.uploadFiles(files)
283
+			},
284
+			async setValue(newVal, oldVal) {
285
+				const newData =  async (v) => {
286
+					const reg = /cloud:\/\/([\w.]+\/?)\S*/
287
+					let url = ''
288
+					if(v.fileID){
289
+						url = v.fileID
290
+					}else{
291
+						url = v.url
292
+					}
293
+					if (reg.test(url)) {
294
+						v.fileID = url
295
+						v.url = await this.getTempFileURL(url)
296
+					}
297
+					if(v.url) v.path = v.url
298
+					return v
299
+				}
300
+				if (this.returnType === 'object') {
301
+					if (newVal) {
302
+						await newData(newVal)
303
+					} else {
304
+						newVal = {}
305
+					}
306
+				} else {
307
+					if (!newVal) newVal = []
308
+					for(let i =0 ;i < newVal.length ;i++){
309
+						let v = newVal[i]
310
+						await newData(v)
311
+					}
312
+				}
313
+				this.localValue = newVal
314
+				if (this.form && this.formItem &&!this.is_reset) {
315
+					this.is_reset = false
316
+					this.formItem.setValue(this.localValue)
317
+				}
318
+				let filesData = Object.keys(newVal).length > 0 ? newVal : [];
319
+				this.files = [].concat(filesData)
320
+			},
321
+
322
+			/**
323
+			 * 选择文件
324
+			 */
325
+			choose() {
326
+				if (this.disabled) return
327
+				if (this.files.length >= Number(this.limitLength) && this.showType !== 'grid' && this.returnType ===
328
+					'array') {
329
+					uni.showToast({
330
+						title: `您最多选择 ${this.limitLength} 个文件`,
331
+						icon: 'none'
332
+					})
333
+					return
334
+				}
335
+				this.chooseFiles()
336
+			},
337
+
338
+			/**
339
+			 * 选择文件并上传
340
+			 */
341
+			chooseFiles() {
342
+				const _extname = get_extname(this.fileExtname)
343
+				// 获取后缀
344
+				uniCloud
345
+					.chooseAndUploadFile({
346
+						type: this.fileMediatype,
347
+						compressed: false,
348
+						sizeType: this.sizeType,
349
+						sourceType: this.sourceType,
350
+						// TODO 如果为空,video 有问题
351
+						extension: _extname.length > 0 ? _extname : undefined,
352
+						count: this.limitLength - this.files.length, //默认9
353
+						onChooseFile: this.chooseFileCallback,
354
+						onUploadProgress: progressEvent => {
355
+							this.setProgress(progressEvent, progressEvent.index)
356
+						}
357
+					})
358
+					.then(result => {
359
+						this.setSuccessAndError(result.tempFiles)
360
+					})
361
+					.catch(err => {
362
+						console.log('选择失败', err)
363
+					})
364
+			},
365
+
366
+			/**
367
+			 * 选择文件回调
368
+			 * @param {Object} res
369
+			 */
370
+			async chooseFileCallback(res) {
371
+				const _extname = get_extname(this.fileExtname)
372
+				const is_one = (Number(this.limitLength) === 1 &&
373
+						this.disablePreview &&
374
+						!this.disabled) ||
375
+					this.returnType === 'object'
376
+				// 如果这有一个文件 ,需要清空本地缓存数据
377
+				if (is_one) {
378
+					this.files = []
379
+				}
380
+
381
+				let {
382
+					filePaths,
383
+					files
384
+				} = get_files_and_is_max(res, _extname)
385
+				if (!(_extname && _extname.length > 0)) {
386
+					filePaths = res.tempFilePaths
387
+					files = res.tempFiles
388
+				}
389
+
390
+				let currentData = []
391
+				for (let i = 0; i < files.length; i++) {
392
+					if (this.limitLength - this.files.length <= 0) break
393
+					files[i].uuid = Date.now()
394
+					let filedata = await get_file_data(files[i], this.fileMediatype)
395
+					filedata.progress = 0
396
+					filedata.status = 'ready'
397
+					this.files.push(filedata)
398
+					currentData.push({
399
+						...filedata,
400
+						file: files[i]
401
+					})
402
+				}
403
+				this.$emit('select', {
404
+					tempFiles: currentData,
405
+					tempFilePaths: filePaths
406
+				})
407
+				res.tempFiles = files
408
+				// 停止自动上传
409
+				if (!this.autoUpload || this.noSpace) {
410
+					res.tempFiles = []
411
+				}
412
+				res.tempFiles.forEach((fileItem, index) => {
413
+					this.provider && (fileItem.provider = this.provider);
414
+					const fileNameSplit = fileItem.name.split('.')
415
+					const ext = fileNameSplit.pop()
416
+					const fileName = fileNameSplit.join('.').replace(/[\s\/\?<>\\:\*\|":]/g, '_')
417
+					fileItem.cloudPath = fileName + '_' + Date.now() + '_' + index + '.' + ext
418
+				})
419
+			},
420
+
421
+			/**
422
+			 * 批传
423
+			 * @param {Object} e
424
+			 */
425
+			uploadFiles(files) {
426
+				files = [].concat(files)
427
+				return uploadCloudFiles.call(this, files, 5, res => {
428
+						this.setProgress(res, res.index, true)
429
+					})
430
+					.then(result => {
431
+						this.setSuccessAndError(result)
432
+						return result;
433
+					})
434
+					.catch(err => {
435
+						console.log(err)
436
+					})
437
+			},
438
+
439
+			/**
440
+			 * 成功或失败
441
+			 */
442
+			async setSuccessAndError(res, fn) {
443
+				let successData = []
444
+				let errorData = []
445
+				let tempFilePath = []
446
+				let errorTempFilePath = []
447
+				for (let i = 0; i < res.length; i++) {
448
+					const item = res[i]
449
+					const index = item.uuid ? this.files.findIndex(p => p.uuid === item.uuid) : item.index
450
+
451
+					if (index === -1 || !this.files) break
452
+					if (item.errMsg === 'request:fail') {
453
+						this.files[index].url = item.path
454
+						this.files[index].status = 'error'
455
+						this.files[index].errMsg = item.errMsg
456
+						// this.files[index].progress = -1
457
+						errorData.push(this.files[index])
458
+						errorTempFilePath.push(this.files[index].url)
459
+					} else {
460
+						this.files[index].errMsg = ''
461
+						this.files[index].fileID = item.url
462
+						const reg = /cloud:\/\/([\w.]+\/?)\S*/
463
+						if (reg.test(item.url)) {
464
+							this.files[index].url = await this.getTempFileURL(item.url)
465
+						}else{
466
+							this.files[index].url = item.url
467
+						}
468
+
469
+						this.files[index].status = 'success'
470
+						this.files[index].progress += 1
471
+						successData.push(this.files[index])
472
+						tempFilePath.push(this.files[index].fileID)
473
+					}
474
+				}
475
+
476
+				if (successData.length > 0) {
477
+					this.setEmit()
478
+					// 状态改变返回
479
+					this.$emit('success', {
480
+						tempFiles: this.backObject(successData),
481
+						tempFilePaths: tempFilePath
482
+					})
483
+				}
484
+
485
+				if (errorData.length > 0) {
486
+					this.$emit('fail', {
487
+						tempFiles: this.backObject(errorData),
488
+						tempFilePaths: errorTempFilePath
489
+					})
490
+				}
491
+			},
492
+
493
+			/**
494
+			 * 获取进度
495
+			 * @param {Object} progressEvent
496
+			 * @param {Object} index
497
+			 * @param {Object} type
498
+			 */
499
+			setProgress(progressEvent, index, type) {
500
+				const fileLenth = this.files.length
501
+				const percentNum = (index / fileLenth) * 100
502
+				const percentCompleted = Math.round((progressEvent.loaded * 100) / progressEvent.total)
503
+				let idx = index
504
+				if (!type) {
505
+					idx = this.files.findIndex(p => p.uuid === progressEvent.tempFile.uuid)
506
+				}
507
+				if (idx === -1 || !this.files[idx]) return
508
+				// fix by mehaotian 100 就会消失,-1 是为了让进度条消失
509
+				this.files[idx].progress = percentCompleted - 1
510
+				// 上传中
511
+				this.$emit('progress', {
512
+					index: idx,
513
+					progress: parseInt(percentCompleted),
514
+					tempFile: this.files[idx]
515
+				})
516
+			},
517
+
518
+			/**
519
+			 * 删除文件
520
+			 * @param {Object} index
521
+			 */
522
+			delFile(index) {
523
+				this.$emit('delete', {
524
+					index,
525
+					tempFile: this.files[index],
526
+					tempFilePath: this.files[index].url
527
+				})
528
+				this.files.splice(index, 1)
529
+				this.$nextTick(() => {
530
+					this.setEmit()
531
+				})
532
+			},
533
+
534
+			/**
535
+			 * 获取文件名和后缀
536
+			 * @param {Object} name
537
+			 */
538
+			getFileExt(name) {
539
+				const last_len = name.lastIndexOf('.')
540
+				const len = name.length
541
+				return {
542
+					name: name.substring(0, last_len),
543
+					ext: name.substring(last_len + 1, len)
544
+				}
545
+			},
546
+
547
+			/**
548
+			 * 处理返回事件
549
+			 */
550
+			setEmit() {
551
+				let data = []
552
+				if (this.returnType === 'object') {
553
+					data = this.backObject(this.files)[0]
554
+					this.localValue = data?data:null
555
+				} else {
556
+					data = this.backObject(this.files)
557
+					if (!this.localValue) {
558
+						this.localValue = []
559
+					}
560
+					this.localValue = [...data]
561
+				}
562
+				// #ifdef VUE3
563
+				this.$emit('update:modelValue', this.localValue)
564
+				// #endif
565
+				// #ifndef VUE3
566
+				this.$emit('input', this.localValue)
567
+				// #endif
568
+			},
569
+
570
+			/**
571
+			 * 处理返回参数
572
+			 * @param {Object} files
573
+			 */
574
+			backObject(files) {
575
+				let newFilesData = []
576
+				files.forEach(v => {
577
+					newFilesData.push({
578
+						extname: v.extname,
579
+						fileType: v.fileType,
580
+						image: v.image,
581
+						name: v.name,
582
+						path: v.path,
583
+						size: v.size,
584
+						fileID:v.fileID,
585
+						url: v.url,
586
+						// 修改删除一个文件后不能再上传的bug, #694
587
+            uuid: v.uuid,
588
+            status: v.status,
589
+            cloudPath: v.cloudPath
590
+					})
591
+				})
592
+				return newFilesData
593
+			},
594
+			async getTempFileURL(fileList) {
595
+				fileList = {
596
+					fileList: [].concat(fileList)
597
+				}
598
+				const urls = await uniCloud.getTempFileURL(fileList)
599
+				return urls.fileList[0].tempFileURL || ''
600
+			},
601
+			/**
602
+			 * 获取父元素实例
603
+			 */
604
+			getForm(name = 'uniForms') {
605
+				let parent = this.$parent;
606
+				let parentName = parent.$options.name;
607
+				while (parentName !== name) {
608
+					parent = parent.$parent;
609
+					if (!parent) return false;
610
+					parentName = parent.$options.name;
611
+				}
612
+				return parent;
613
+			}
614
+		}
615
+	}
616
+</script>
617
+
618
+<style>
619
+	.uni-file-picker {
620
+		/* #ifndef APP-NVUE */
621
+		box-sizing: border-box;
622
+		overflow: hidden;
623
+		width: 100%;
624
+		/* #endif */
625
+		flex: 1;
626
+	}
627
+
628
+	.uni-file-picker__header {
629
+		padding-top: 5px;
630
+		padding-bottom: 10px;
631
+		/* #ifndef APP-NVUE */
632
+		display: flex;
633
+		/* #endif */
634
+		justify-content: space-between;
635
+	}
636
+
637
+	.file-title {
638
+		font-size: 14px;
639
+		color: #333;
640
+	}
641
+
642
+	.file-count {
643
+		font-size: 14px;
644
+		color: #999;
645
+	}
646
+
647
+	.icon-add {
648
+		width: 50px;
649
+		height: 5px;
650
+		background-color: #f1f1f1;
651
+		border-radius: 2px;
652
+	}
653
+
654
+	.rotate {
655
+		position: absolute;
656
+		transform: rotate(90deg);
657
+	}
658
+</style>

+ 325
- 0
uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue Wyświetl plik

@@ -0,0 +1,325 @@
1
+<template>
2
+	<view class="uni-file-picker__files">
3
+		<view v-if="!readonly" class="files-button" @click="choose">
4
+			<slot></slot>
5
+		</view>
6
+		<!-- :class="{'is-text-box':showType === 'list'}" -->
7
+		<view v-if="list.length > 0" class="uni-file-picker__lists is-text-box" :style="borderStyle">
8
+			<!-- ,'is-list-card':showType === 'list-card' -->
9
+
10
+			<view class="uni-file-picker__lists-box" v-for="(item ,index) in list" :key="index" :class="{
11
+				'files-border':index !== 0 && styles.dividline}"
12
+			 :style="index !== 0 && styles.dividline &&borderLineStyle">
13
+				<view class="uni-file-picker__item">
14
+					<!-- :class="{'is-text-image':showType === 'list'}" -->
15
+					<!-- 	<view class="files__image is-text-image">
16
+						<image class="header-image" :src="item.logo" mode="aspectFit"></image>
17
+					</view> -->
18
+					<view class="files__name">{{item.name}}</view>
19
+					<view v-if="delIcon&&!readonly" class="icon-del-box icon-files" @click="delFile(index)">
20
+						<view class="icon-del icon-files"></view>
21
+						<view class="icon-del rotate"></view>
22
+					</view>
23
+				</view>
24
+				<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
25
+					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
26
+					 :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
27
+				</view>
28
+				<view v-if="item.status === 'error'" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
29
+					点击重试
30
+				</view>
31
+			</view>
32
+
33
+		</view>
34
+	</view>
35
+</template>
36
+
37
+<script>
38
+	export default {
39
+		name: "uploadFile",
40
+		emits:['uploadFiles','choose','delFile'],
41
+		props: {
42
+			filesList: {
43
+				type: Array,
44
+				default () {
45
+					return []
46
+				}
47
+			},
48
+			delIcon: {
49
+				type: Boolean,
50
+				default: true
51
+			},
52
+			limit: {
53
+				type: [Number, String],
54
+				default: 9
55
+			},
56
+			showType: {
57
+				type: String,
58
+				default: ''
59
+			},
60
+			listStyles: {
61
+				type: Object,
62
+				default () {
63
+					return {
64
+						// 是否显示边框
65
+						border: true,
66
+						// 是否显示分隔线
67
+						dividline: true,
68
+						// 线条样式
69
+						borderStyle: {}
70
+					}
71
+				}
72
+			},
73
+			readonly:{
74
+				type:Boolean,
75
+				default:false
76
+			}
77
+		},
78
+		computed: {
79
+			list() {
80
+				let files = []
81
+				this.filesList.forEach(v => {
82
+					files.push(v)
83
+				})
84
+				return files
85
+			},
86
+			styles() {
87
+				let styles = {
88
+					border: true,
89
+					dividline: true,
90
+					'border-style': {}
91
+				}
92
+				return Object.assign(styles, this.listStyles)
93
+			},
94
+			borderStyle() {
95
+				let {
96
+					borderStyle,
97
+					border
98
+				} = this.styles
99
+				let obj = {}
100
+				if (!border) {
101
+					obj.border = 'none'
102
+				} else {
103
+					let width = (borderStyle && borderStyle.width) || 1
104
+					width = this.value2px(width)
105
+					let radius = (borderStyle && borderStyle.radius) || 5
106
+					radius = this.value2px(radius)
107
+					obj = {
108
+						'border-width': width,
109
+						'border-style': (borderStyle && borderStyle.style) || 'solid',
110
+						'border-color': (borderStyle && borderStyle.color) || '#eee',
111
+						'border-radius': radius
112
+					}
113
+				}
114
+				let classles = ''
115
+				for (let i in obj) {
116
+					classles += `${i}:${obj[i]};`
117
+				}
118
+				return classles
119
+			},
120
+			borderLineStyle() {
121
+				let obj = {}
122
+				let {
123
+					borderStyle
124
+				} = this.styles
125
+				if (borderStyle && borderStyle.color) {
126
+					obj['border-color'] = borderStyle.color
127
+				}
128
+				if (borderStyle && borderStyle.width) {
129
+					let width = borderStyle && borderStyle.width || 1
130
+					let style = borderStyle && borderStyle.style || 0
131
+					if (typeof width === 'number') {
132
+						width += 'px'
133
+					} else {
134
+						width = width.indexOf('px') ? width : width + 'px'
135
+					}
136
+					obj['border-width'] = width
137
+
138
+					if (typeof style === 'number') {
139
+						style += 'px'
140
+					} else {
141
+						style = style.indexOf('px') ? style : style + 'px'
142
+					}
143
+					obj['border-top-style'] = style
144
+				}
145
+				let classles = ''
146
+				for (let i in obj) {
147
+					classles += `${i}:${obj[i]};`
148
+				}
149
+				return classles
150
+			}
151
+		},
152
+
153
+		methods: {
154
+			uploadFiles(item, index) {
155
+				this.$emit("uploadFiles", {
156
+					item,
157
+					index
158
+				})
159
+			},
160
+			choose() {
161
+				this.$emit("choose")
162
+			},
163
+			delFile(index) {
164
+				this.$emit('delFile', index)
165
+			},
166
+			value2px(value) {
167
+				if (typeof value === 'number') {
168
+					value += 'px'
169
+				} else {
170
+					value = value.indexOf('px') !== -1 ? value : value + 'px'
171
+				}
172
+				return value
173
+			}
174
+		}
175
+	}
176
+</script>
177
+
178
+<style lang="scss">
179
+	.uni-file-picker__files {
180
+		/* #ifndef APP-NVUE */
181
+		display: flex;
182
+		/* #endif */
183
+		flex-direction: column;
184
+		justify-content: flex-start;
185
+	}
186
+
187
+	.files-button {
188
+		// border: 1px red solid;
189
+	}
190
+
191
+	.uni-file-picker__lists {
192
+		position: relative;
193
+		margin-top: 5px;
194
+		overflow: hidden;
195
+	}
196
+
197
+	.file-picker__mask {
198
+		/* #ifndef APP-NVUE */
199
+		display: flex;
200
+		/* #endif */
201
+		justify-content: center;
202
+		align-items: center;
203
+		position: absolute;
204
+		right: 0;
205
+		top: 0;
206
+		bottom: 0;
207
+		left: 0;
208
+		color: #fff;
209
+		font-size: 14px;
210
+		background-color: rgba(0, 0, 0, 0.4);
211
+	}
212
+
213
+	.uni-file-picker__lists-box {
214
+		position: relative;
215
+	}
216
+
217
+	.uni-file-picker__item {
218
+		/* #ifndef APP-NVUE */
219
+		display: flex;
220
+		/* #endif */
221
+		align-items: center;
222
+		padding: 8px 10px;
223
+		padding-right: 5px;
224
+		padding-left: 10px;
225
+	}
226
+
227
+	.files-border {
228
+		border-top: 1px #eee solid;
229
+	}
230
+
231
+	.files__name {
232
+		flex: 1;
233
+		font-size: 14px;
234
+		color: #666;
235
+		margin-right: 25px;
236
+		/* #ifndef APP-NVUE */
237
+		word-break: break-all;
238
+		word-wrap: break-word;
239
+		/* #endif */
240
+	}
241
+
242
+	.icon-files {
243
+		/* #ifndef APP-NVUE */
244
+		position: static;
245
+		background-color: initial;
246
+		/* #endif */
247
+	}
248
+
249
+	// .icon-files .icon-del {
250
+	// 	background-color: #333;
251
+	// 	width: 12px;
252
+	// 	height: 1px;
253
+	// }
254
+
255
+
256
+	.is-list-card {
257
+		border: 1px #eee solid;
258
+		margin-bottom: 5px;
259
+		border-radius: 5px;
260
+		box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.1);
261
+		padding: 5px;
262
+	}
263
+
264
+	.files__image {
265
+		width: 40px;
266
+		height: 40px;
267
+		margin-right: 10px;
268
+	}
269
+
270
+	.header-image {
271
+		width: 100%;
272
+		height: 100%;
273
+	}
274
+
275
+	.is-text-box {
276
+		border: 1px #eee solid;
277
+		border-radius: 5px;
278
+	}
279
+
280
+	.is-text-image {
281
+		width: 25px;
282
+		height: 25px;
283
+		margin-left: 5px;
284
+	}
285
+
286
+	.rotate {
287
+		position: absolute;
288
+		transform: rotate(90deg);
289
+	}
290
+
291
+	.icon-del-box {
292
+		/* #ifndef APP-NVUE */
293
+		display: flex;
294
+		margin: auto 0;
295
+		/* #endif */
296
+		align-items: center;
297
+		justify-content: center;
298
+		position: absolute;
299
+		top: 0px;
300
+		bottom: 0;
301
+		right: 5px;
302
+		height: 26px;
303
+		width: 26px;
304
+		// border-radius: 50%;
305
+		// background-color: rgba(0, 0, 0, 0.5);
306
+		z-index: 2;
307
+		transform: rotate(-45deg);
308
+	}
309
+
310
+	.icon-del {
311
+		width: 15px;
312
+		height: 1px;
313
+		background-color: #333;
314
+		// border-radius: 1px;
315
+	}
316
+
317
+	/* #ifdef H5 */
318
+	@media all and (min-width: 768px) {
319
+		.uni-file-picker__files {
320
+			max-width: 375px;
321
+		}
322
+	}
323
+
324
+	/* #endif */
325
+</style>

+ 282
- 0
uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue Wyświetl plik

@@ -0,0 +1,282 @@
1
+<template>
2
+	<view class="uni-file-picker__container">
3
+		<view class="file-picker__box" v-for="(item,index) in filesList" :key="index" :style="boxStyle">
4
+			<view class="file-picker__box-content" :style="borderStyle">
5
+				<image class="file-image" :src="item.url" mode="aspectFill" @click.stop="prviewImage(item,index)"></image>
6
+				<view v-if="delIcon && !readonly" class="icon-del-box" @click.stop="delFile(index)">
7
+					<view class="icon-del"></view>
8
+					<view class="icon-del rotate"></view>
9
+				</view>
10
+				<view v-if="(item.progress && item.progress !== 100) ||item.progress===0 " class="file-picker__progress">
11
+					<progress class="file-picker__progress-item" :percent="item.progress === -1?0:item.progress" stroke-width="4"
12
+					 :backgroundColor="item.errMsg?'#ff5a5f':'#EBEBEB'" />
13
+				</view>
14
+				<view v-if="item.errMsg" class="file-picker__mask" @click.stop="uploadFiles(item,index)">
15
+					点击重试
16
+				</view>
17
+			</view>
18
+		</view>
19
+		<view v-if="filesList.length < limit && !readonly" class="file-picker__box" :style="boxStyle">
20
+			<view class="file-picker__box-content is-add" :style="borderStyle" @click="choose">
21
+				<slot></slot>
22
+			</view>
23
+		</view>
24
+	</view>
25
+</template>
26
+
27
+<script>
28
+	export default {
29
+		name: "uploadImage",
30
+		emits:['uploadFiles','choose','delFile'],
31
+		props: {
32
+			filesList: {
33
+				type: Array,
34
+				default () {
35
+					return []
36
+				}
37
+			},
38
+			disabled:{
39
+				type: Boolean,
40
+				default: false
41
+			},
42
+			disablePreview: {
43
+				type: Boolean,
44
+				default: false
45
+			},
46
+			limit: {
47
+				type: [Number, String],
48
+				default: 9
49
+			},
50
+			imageStyles: {
51
+				type: Object,
52
+				default () {
53
+					return {
54
+						width: 'auto',
55
+						height: 'auto',
56
+						border: {}
57
+					}
58
+				}
59
+			},
60
+			delIcon: {
61
+				type: Boolean,
62
+				default: true
63
+			},
64
+			readonly:{
65
+				type:Boolean,
66
+				default:false
67
+			}
68
+		},
69
+		computed: {
70
+			styles() {
71
+				let styles = {
72
+					width: 'auto',
73
+					height: 'auto',
74
+					border: {}
75
+				}
76
+				return Object.assign(styles, this.imageStyles)
77
+			},
78
+			boxStyle() {
79
+				const {
80
+					width = 'auto',
81
+						height = 'auto'
82
+				} = this.styles
83
+				let obj = {}
84
+				if (height === 'auto') {
85
+					if (width !== 'auto') {
86
+						obj.height = this.value2px(width)
87
+						obj['padding-top'] = 0
88
+					} else {
89
+						obj.height = 0
90
+					}
91
+				} else {
92
+					obj.height = this.value2px(height)
93
+					obj['padding-top'] = 0
94
+				}
95
+
96
+				if (width === 'auto') {
97
+					if (height !== 'auto') {
98
+						obj.width = this.value2px(height)
99
+					} else {
100
+						obj.width = '33.3%'
101
+					}
102
+				} else {
103
+					obj.width = this.value2px(width)
104
+				}
105
+
106
+				let classles = ''
107
+				for(let i in obj){
108
+					classles+= `${i}:${obj[i]};`
109
+				}
110
+				return classles
111
+			},
112
+			borderStyle() {
113
+				let {
114
+					border
115
+				} = this.styles
116
+				let obj = {}
117
+				const widthDefaultValue = 1
118
+				const radiusDefaultValue = 3
119
+				if (typeof border === 'boolean') {
120
+					obj.border = border ? '1px #eee solid' : 'none'
121
+				} else {
122
+					let width = (border && border.width) || widthDefaultValue
123
+					width = this.value2px(width)
124
+					let radius = (border && border.radius) || radiusDefaultValue
125
+					radius = this.value2px(radius)
126
+					obj = {
127
+						'border-width': width,
128
+						'border-style': (border && border.style) || 'solid',
129
+						'border-color': (border && border.color) || '#eee',
130
+						'border-radius': radius
131
+					}
132
+				}
133
+				let classles = ''
134
+				for(let i in obj){
135
+					classles+= `${i}:${obj[i]};`
136
+				}
137
+				return classles
138
+			}
139
+		},
140
+		methods: {
141
+			uploadFiles(item, index) {
142
+				this.$emit("uploadFiles", item)
143
+			},
144
+			choose() {
145
+				this.$emit("choose")
146
+			},
147
+			delFile(index) {
148
+				this.$emit('delFile', index)
149
+			},
150
+			prviewImage(img, index) {
151
+				let urls = []
152
+				if(Number(this.limit) === 1&&this.disablePreview&&!this.disabled){
153
+					this.$emit("choose")
154
+				}
155
+				if(this.disablePreview) return
156
+				this.filesList.forEach(i => {
157
+					urls.push(i.url)
158
+				})
159
+
160
+				uni.previewImage({
161
+					urls: urls,
162
+					current: index
163
+				});
164
+			},
165
+			value2px(value) {
166
+				if (typeof value === 'number') {
167
+					value += 'px'
168
+				} else {
169
+					if (value.indexOf('%') === -1) {
170
+						value = value.indexOf('px') !== -1 ? value : value + 'px'
171
+					}
172
+				}
173
+				return value
174
+			}
175
+		}
176
+	}
177
+</script>
178
+
179
+<style lang="scss">
180
+	.uni-file-picker__container {
181
+		/* #ifndef APP-NVUE */
182
+		display: flex;
183
+		box-sizing: border-box;
184
+		/* #endif */
185
+		flex-wrap: wrap;
186
+		margin: -5px;
187
+	}
188
+
189
+	.file-picker__box {
190
+		position: relative;
191
+		// flex: 0 0 33.3%;
192
+		width: 33.3%;
193
+		height: 0;
194
+		padding-top: 33.33%;
195
+		/* #ifndef APP-NVUE */
196
+		box-sizing: border-box;
197
+		/* #endif */
198
+	}
199
+
200
+	.file-picker__box-content {
201
+		position: absolute;
202
+		top: 0;
203
+		right: 0;
204
+		bottom: 0;
205
+		left: 0;
206
+		margin: 5px;
207
+		border: 1px #eee solid;
208
+		border-radius: 5px;
209
+		overflow: hidden;
210
+	}
211
+
212
+	.file-picker__progress {
213
+		position: absolute;
214
+		bottom: 0;
215
+		left: 0;
216
+		right: 0;
217
+		/* border: 1px red solid; */
218
+		z-index: 2;
219
+	}
220
+
221
+	.file-picker__progress-item {
222
+		width: 100%;
223
+	}
224
+
225
+	.file-picker__mask {
226
+		/* #ifndef APP-NVUE */
227
+		display: flex;
228
+		/* #endif */
229
+		justify-content: center;
230
+		align-items: center;
231
+		position: absolute;
232
+		right: 0;
233
+		top: 0;
234
+		bottom: 0;
235
+		left: 0;
236
+		color: #fff;
237
+		font-size: 12px;
238
+		background-color: rgba(0, 0, 0, 0.4);
239
+	}
240
+
241
+	.file-image {
242
+		width: 100%;
243
+		height: 100%;
244
+	}
245
+
246
+	.is-add {
247
+		/* #ifndef APP-NVUE */
248
+		display: flex;
249
+		/* #endif */
250
+		align-items: center;
251
+		justify-content: center;
252
+	}
253
+
254
+	.rotate {
255
+		position: absolute;
256
+		transform: rotate(90deg);
257
+	}
258
+
259
+	.icon-del-box {
260
+		/* #ifndef APP-NVUE */
261
+		display: flex;
262
+		/* #endif */
263
+		align-items: center;
264
+		justify-content: center;
265
+		position: absolute;
266
+		top: 3px;
267
+		right: 3px;
268
+		height: 26px;
269
+		width: 26px;
270
+		border-radius: 50%;
271
+		background-color: rgba(0, 0, 0, 0.5);
272
+		z-index: 2;
273
+		transform: rotate(-45deg);
274
+	}
275
+
276
+	.icon-del {
277
+		width: 15px;
278
+		height: 2px;
279
+		background-color: #fff;
280
+		border-radius: 2px;
281
+	}
282
+</style>

+ 110
- 0
uni_modules/uni-file-picker/components/uni-file-picker/utils.js Wyświetl plik

@@ -0,0 +1,110 @@
1
+/**
2
+ * 获取文件名和后缀
3
+ * @param {String} name
4
+ */
5
+export const get_file_ext = (name) => {
6
+	const last_len = name.lastIndexOf('.')
7
+	const len = name.length
8
+	return {
9
+		name: name.substring(0, last_len),
10
+		ext: name.substring(last_len + 1, len)
11
+	}
12
+}
13
+
14
+/**
15
+ * 获取扩展名
16
+ * @param {Array} fileExtname
17
+ */
18
+export const get_extname = (fileExtname) => {
19
+	if (!Array.isArray(fileExtname)) {
20
+		let extname = fileExtname.replace(/(\[|\])/g, '')
21
+		return extname.split(',')
22
+	} else {
23
+		return fileExtname
24
+	}
25
+	return []
26
+}
27
+
28
+/**
29
+ * 获取文件和检测是否可选
30
+ */
31
+export const get_files_and_is_max = (res, _extname) => {
32
+	let filePaths = []
33
+	let files = []
34
+	if(!_extname || _extname.length === 0){
35
+		return {
36
+			filePaths,
37
+			files
38
+		}
39
+	}
40
+	res.tempFiles.forEach(v => {
41
+		let fileFullName = get_file_ext(v.name)
42
+		const extname = fileFullName.ext.toLowerCase()
43
+		if (_extname.indexOf(extname) !== -1) {
44
+			files.push(v)
45
+			filePaths.push(v.path)
46
+		}
47
+	})
48
+	if (files.length !== res.tempFiles.length) {
49
+		uni.showToast({
50
+			title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`,
51
+			icon: 'none',
52
+			duration: 5000
53
+		})
54
+	}
55
+
56
+	return {
57
+		filePaths,
58
+		files
59
+	}
60
+}
61
+
62
+
63
+/**
64
+ * 获取图片信息
65
+ * @param {Object} filepath
66
+ */
67
+export const get_file_info = (filepath) => {
68
+	return new Promise((resolve, reject) => {
69
+		uni.getImageInfo({
70
+			src: filepath,
71
+			success(res) {
72
+				resolve(res)
73
+			},
74
+			fail(err) {
75
+				reject(err)
76
+			}
77
+		})
78
+	})
79
+}
80
+/**
81
+ * 获取封装数据
82
+ */
83
+export const get_file_data = async (files, type = 'image') => {
84
+	// 最终需要上传数据库的数据
85
+	let fileFullName = get_file_ext(files.name)
86
+	const extname = fileFullName.ext.toLowerCase()
87
+	let filedata = {
88
+		name: files.name,
89
+		uuid: files.uuid,
90
+		extname: extname || '',
91
+		cloudPath: files.cloudPath,
92
+		fileType: files.fileType,
93
+		thumbTempFilePath: files.thumbTempFilePath,
94
+		url: files.path || files.path,
95
+		size: files.size, //单位是字节
96
+		image: {},
97
+		path: files.path,
98
+		video: {}
99
+	}
100
+	if (type === 'image') {
101
+		const imageinfo = await get_file_info(files.path)
102
+		delete filedata.video
103
+		filedata.image.width = imageinfo.width
104
+		filedata.image.height = imageinfo.height
105
+		filedata.image.location = imageinfo.path
106
+	} else {
107
+		delete filedata.image
108
+	}
109
+	return filedata
110
+}

+ 86
- 0
uni_modules/uni-file-picker/package.json Wyświetl plik

@@ -0,0 +1,86 @@
1
+{
2
+  "id": "uni-file-picker",
3
+  "displayName": "uni-file-picker 文件选择上传",
4
+  "version": "1.0.12",
5
+  "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间",
6
+  "keywords": [
7
+    "uni-ui",
8
+    "uniui",
9
+    "图片上传",
10
+    "文件上传"
11
+],
12
+  "repository": "https://github.com/dcloudio/uni-ui",
13
+  "engines": {
14
+    "HBuilderX": ""
15
+  },
16
+  "directories": {
17
+    "example": "../../temps/example_temps"
18
+  },
19
+"dcloudext": {
20
+    "sale": {
21
+      "regular": {
22
+        "price": "0.00"
23
+      },
24
+      "sourcecode": {
25
+        "price": "0.00"
26
+      }
27
+    },
28
+    "contact": {
29
+      "qq": ""
30
+    },
31
+    "declaration": {
32
+      "ads": "无",
33
+      "data": "无",
34
+      "permissions": "无"
35
+    },
36
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
37
+    "type": "component-vue"
38
+  },
39
+  "uni_modules": {
40
+    "dependencies": ["uni-scss"],
41
+    "encrypt": [],
42
+    "platforms": {
43
+      "cloud": {
44
+        "tcb": "y",
45
+        "aliyun": "y",
46
+        "alipay": "n"
47
+      },
48
+      "client": {
49
+        "App": {
50
+            "app-vue": "y",
51
+            "app-nvue": "n",
52
+            "app-harmony": "u",
53
+            "app-uvue": "u"
54
+        },
55
+        "H5-mobile": {
56
+          "Safari": "y",
57
+          "Android Browser": "y",
58
+          "微信浏览器(Android)": "y",
59
+          "QQ浏览器(Android)": "y"
60
+        },
61
+        "H5-pc": {
62
+          "Chrome": "y",
63
+          "IE": "y",
64
+          "Edge": "y",
65
+          "Firefox": "y",
66
+          "Safari": "y"
67
+        },
68
+        "小程序": {
69
+          "微信": "y",
70
+          "阿里": "y",
71
+          "百度": "y",
72
+          "字节跳动": "y",
73
+          "QQ": "y"
74
+        },
75
+        "快应用": {
76
+          "华为": "u",
77
+          "联盟": "u"
78
+        },
79
+        "Vue": {
80
+            "vue2": "y",
81
+            "vue3": "y"
82
+        }
83
+      }
84
+    }
85
+  }
86
+}

+ 11
- 0
uni_modules/uni-file-picker/readme.md Wyświetl plik

@@ -0,0 +1,11 @@
1
+
2
+## FilePicker 文件选择上传
3
+
4
+> **组件名:uni-file-picker**
5
+>  代码块: `uFilePicker`
6
+
7
+
8
+文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间
9
+
10
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker)
11
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 57
- 0
uni_modules/uni-nav-bar/changelog.md Wyświetl plik

@@ -0,0 +1,57 @@
1
+## 1.3.14(2024-10-15)
2
+- 修复 微信小程序中的getSystemInfo警告
3
+## 1.3.13(2024-10-12)
4
+- 修复 微信小程序中的getSystemInfo警告
5
+## 1.3.12(2024-10-12)
6
+- 修复 微信小程序中的getSystemInfo警告
7
+## 1.3.11(2023-03-29)
8
+- 修复 自定义状态栏高度闪动BUG
9
+## 1.3.10(2023-03-29)
10
+- 修复 暗黑模式下边线颜色错误的bug
11
+## 1.3.9(2022-10-13)
12
+- 修复 条件编译错误的bug
13
+## 1.3.8(2022-10-12)
14
+- 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug
15
+## 1.3.7(2022-08-11)
16
+- 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug
17
+## 1.3.6(2022-06-30)
18
+- 修复 组件示例中插槽用法无法显示内容的bug
19
+## 1.3.5(2022-05-24)
20
+- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效
21
+## 1.3.4(2022-01-24)
22
+- 更新 组件示例
23
+## 1.3.3(2022-01-24)
24
+- 新增 left-width/right-width属性 ,可修改左右两侧的宽度
25
+## 1.3.2(2022-01-18)
26
+- 修复 在vue下,标题不垂直居中的bug
27
+## 1.3.1(2022-01-18)
28
+- 修复 height 属性类型错误
29
+## 1.3.0(2022-01-18)
30
+- 新增 height 属性,可修改组件高度
31
+- 新增 dark 属性可可开启暗黑模式
32
+- 优化 标题字数过多显示省略号
33
+- 优化 插槽,插入内容可完全覆盖
34
+## 1.2.1(2022-01-10)
35
+- 修复 color 属性不生效的bug
36
+## 1.2.0(2021-11-19)
37
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
38
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar)
39
+## 1.1.0(2021-07-30)
40
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
41
+## 1.0.11(2021-05-12)
42
+- 新增 组件示例地址
43
+## 1.0.10(2021-04-30)
44
+- 修复 在nvue下fixed为true,宽度不能撑满的Bug
45
+## 1.0.9(2021-04-21)
46
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
47
+## 1.0.8(2021-04-14)
48
+- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug
49
+
50
+## 1.0.7(2021-02-25)
51
+- 修复 easycom 下,找不到 uni-status-bar 的bug
52
+
53
+## 1.0.6(2021-02-05)
54
+- 优化 组件引用关系,通过uni_modules引用组件
55
+
56
+## 1.0.5(2021-02-05)
57
+- 调整为uni_modules目录规范

+ 357
- 0
uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue Wyświetl plik

@@ -0,0 +1,357 @@
1
+<template>
2
+	<view class="uni-navbar" :class="{'uni-dark':dark, 'uni-nvue-fixed': fixed}">
3
+		<view class="uni-navbar__content" :class="{ 'uni-navbar--fixed': fixed, 'uni-navbar--shadow': shadow, 'uni-navbar--border': border }"
4
+			:style="{ 'background-color': themeBgColor, 'border-bottom-color':themeColor }" >
5
+			<status-bar v-if="statusBar" />
6
+			<view :style="{ color: themeColor,backgroundColor: themeBgColor ,height:navbarHeight}"
7
+				class="uni-navbar__header">
8
+				<view @tap="onClickLeft" class="uni-navbar__header-btns uni-navbar__header-btns-left"
9
+					:style="{width:leftIconWidth}">
10
+					<slot name="left">
11
+						<view class="uni-navbar__content_view" v-if="leftIcon.length > 0">
12
+							<uni-icons :color="themeColor" :type="leftIcon" size="20" />
13
+						</view>
14
+						<view :class="{ 'uni-navbar-btn-icon-left': !leftIcon.length > 0 }" class="uni-navbar-btn-text"
15
+							v-if="leftText.length">
16
+							<text :style="{ color: themeColor, fontSize: '12px' }">{{ leftText }}</text>
17
+						</view>
18
+					</slot>
19
+				</view>
20
+				<view class="uni-navbar__header-container " @tap="onClickTitle">
21
+					<slot>
22
+						<view class="uni-navbar__header-container-inner" v-if="title.length>0">
23
+							<text class="uni-nav-bar-text uni-ellipsis-1"
24
+								:style="{color: themeColor }">{{ title }}</text>
25
+						</view>
26
+					</slot>
27
+				</view>
28
+				<view @click="onClickRight" class="uni-navbar__header-btns uni-navbar__header-btns-right"
29
+					:style="{width:rightIconWidth}">
30
+					<slot name="right">
31
+						<view v-if="rightIcon.length">
32
+							<uni-icons :color="themeColor" :type="rightIcon" size="22" />
33
+						</view>
34
+						<view class="uni-navbar-btn-text" v-if="rightText.length && !rightIcon.length">
35
+							<text class="uni-nav-bar-right-text" :style="{ color: themeColor}">{{ rightText }}</text>
36
+						</view>
37
+					</slot>
38
+				</view>
39
+			</view>
40
+		</view>
41
+		<!-- #ifndef APP-NVUE -->
42
+		<view class="uni-navbar__placeholder" v-if="fixed">
43
+			<status-bar v-if="statusBar" />
44
+			<view class="uni-navbar__placeholder-view" :style="{ height:navbarHeight}" />
45
+		</view>
46
+		<!-- #endif -->
47
+	</view>
48
+</template>
49
+
50
+<script>
51
+	import statusBar from "./uni-status-bar.vue";
52
+	const getVal = (val) => typeof val === 'number' ? val + 'px' : val;
53
+
54
+	/**
55
+	 * 
56
+	 * 
57
+	 * NavBar 自定义导航栏
58
+	 * @description 导航栏组件,主要用于头部导航
59
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=52
60
+	 * @property {Boolean} dark 开启黑暗模式
61
+	 * @property {String} title 标题文字
62
+	 * @property {String} leftText 左侧按钮文本
63
+	 * @property {String} rightText 右侧按钮文本
64
+	 * @property {String} leftIcon 左侧按钮图标(图标类型参考 [Icon 图标](http://ext.dcloud.net.cn/plugin?id=28) type 属性)
65
+	 * @property {String} rightIcon 右侧按钮图标(图标类型参考 [Icon 图标](http://ext.dcloud.net.cn/plugin?id=28) type 属性)
66
+	 * @property {String} color 图标和文字颜色
67
+	 * @property {String} backgroundColor 导航栏背景颜色
68
+	 * @property {Boolean} fixed = [true|false] 是否固定顶部
69
+	 * @property {Boolean} statusBar = [true|false] 是否包含状态栏
70
+	 * @property {Boolean} shadow = [true|false] 导航栏下是否有阴影
71
+	 * @property {Boolean} stat 是否开启统计标题上报
72
+	 * @event {Function} clickLeft 左侧按钮点击时触发
73
+	 * @event {Function} clickRight 右侧按钮点击时触发
74
+	 * @event {Function} clickTitle 中间标题点击时触发
75
+	 */
76
+	export default {
77
+		name: "UniNavBar",
78
+		components: {
79
+			statusBar
80
+		},
81
+		emits: ['clickLeft', 'clickRight', 'clickTitle'],
82
+		props: {
83
+			dark: {
84
+				type: Boolean,
85
+				default: false
86
+			},
87
+			title: {
88
+				type: String,
89
+				default: ""
90
+			},
91
+			leftText: {
92
+				type: String,
93
+				default: ""
94
+			},
95
+			rightText: {
96
+				type: String,
97
+				default: ""
98
+			},
99
+			leftIcon: {
100
+				type: String,
101
+				default: ""
102
+			},
103
+			rightIcon: {
104
+				type: String,
105
+				default: ""
106
+			},
107
+			fixed: {
108
+				type: [Boolean, String],
109
+				default: false
110
+			},
111
+			color: {
112
+				type: String,
113
+				default: ""
114
+			},
115
+			backgroundColor: {
116
+				type: String,
117
+				default: ""
118
+			},
119
+			statusBar: {
120
+				type: [Boolean, String],
121
+				default: false
122
+			},
123
+			shadow: {
124
+				type: [Boolean, String],
125
+				default: false
126
+			},
127
+			border: {
128
+				type: [Boolean, String],
129
+				default: true
130
+			},
131
+			height: {
132
+				type: [Number, String],
133
+				default: 44
134
+			},
135
+			leftWidth: {
136
+				type: [Number, String],
137
+				default: 60
138
+			},
139
+			rightWidth: {
140
+				type: [Number, String],
141
+				default: 60
142
+			},
143
+			stat: {
144
+				type: [Boolean, String],
145
+				default: ''
146
+			}
147
+		},
148
+		computed: {
149
+			themeBgColor() {
150
+				if (this.dark) {
151
+					// 默认值
152
+					if (this.backgroundColor) {
153
+						return this.backgroundColor
154
+					} else {
155
+						return this.dark ? '#333' : '#FFF'
156
+					}
157
+				}
158
+				return this.backgroundColor || '#FFF'
159
+			},
160
+			themeColor() {
161
+				if (this.dark) {
162
+					// 默认值
163
+					if (this.color) {
164
+						return this.color
165
+					} else {
166
+						return this.dark ? '#fff' : '#333'
167
+					}
168
+				}
169
+				return this.color || '#333'
170
+			},
171
+			navbarHeight() {
172
+				return getVal(this.height)
173
+			},
174
+			leftIconWidth() {
175
+				return getVal(this.leftWidth)
176
+			},
177
+			rightIconWidth() {
178
+				return getVal(this.rightWidth)
179
+			}
180
+		},
181
+		mounted() {
182
+			if (uni.report && this.stat && this.title !== '') {
183
+				uni.report('title', this.title)
184
+			}
185
+		},
186
+		methods: {
187
+			onClickLeft() {
188
+				this.$emit("clickLeft");
189
+			},
190
+			onClickRight() {
191
+				this.$emit("clickRight");
192
+			},
193
+			onClickTitle() {
194
+				this.$emit("clickTitle");
195
+			}
196
+		}
197
+	};
198
+</script>
199
+
200
+<style lang="scss" scoped>
201
+	$nav-height: 44px;
202
+
203
+	.uni-nvue-fixed {
204
+		/* #ifdef APP-NVUE */
205
+		position: sticky;
206
+		/* #endif */
207
+	}
208
+	.uni-navbar {
209
+		// box-sizing: border-box;
210
+	}
211
+
212
+	.uni-nav-bar-text {
213
+		/* #ifdef APP-PLUS */
214
+		font-size: 34rpx;
215
+		/* #endif */
216
+		/* #ifndef APP-PLUS */
217
+		font-size: 14px;
218
+		/* #endif */
219
+	}
220
+
221
+	.uni-nav-bar-right-text {
222
+		font-size: 12px;
223
+	}
224
+
225
+	.uni-navbar__content {
226
+		position: relative;
227
+		// background-color: #fff;
228
+		// box-sizing: border-box;
229
+		background-color: transparent;
230
+	}
231
+
232
+	.uni-navbar__content_view {
233
+		// box-sizing: border-box;
234
+	}
235
+
236
+	.uni-navbar-btn-text {
237
+		/* #ifndef APP-NVUE */
238
+		display: flex;
239
+		/* #endif */
240
+		flex-direction: column;
241
+		justify-content: flex-start;
242
+		align-items: center;
243
+		line-height: 12px;
244
+	}
245
+
246
+	.uni-navbar__header {
247
+		/* #ifndef APP-NVUE */
248
+		display: flex;
249
+		/* #endif */
250
+		padding: 0 10px;
251
+		flex-direction: row;
252
+		height: $nav-height;
253
+		font-size: 12px;
254
+	}
255
+
256
+	.uni-navbar__header-btns {
257
+		/* #ifndef APP-NVUE */
258
+		overflow: hidden;
259
+		display: flex;
260
+		/* #endif */
261
+		flex-wrap: nowrap;
262
+		flex-direction: row;
263
+		width: 120rpx;
264
+		// padding: 0 6px;
265
+		justify-content: center;
266
+		align-items: center;
267
+		/* #ifdef H5 */
268
+		cursor: pointer;
269
+		/* #endif */
270
+	}
271
+
272
+	.uni-navbar__header-btns-left {
273
+		/* #ifndef APP-NVUE */
274
+		display: flex;
275
+		/* #endif */
276
+		width: 120rpx;
277
+		justify-content: flex-start;
278
+		align-items: center;
279
+	}
280
+
281
+	.uni-navbar__header-btns-right {
282
+		/* #ifndef APP-NVUE */
283
+		display: flex;
284
+		/* #endif */
285
+		flex-direction: row;
286
+		// width: 150rpx;
287
+		// padding-right: 30rpx;
288
+		justify-content: flex-end;
289
+		align-items: center;
290
+	}
291
+
292
+	.uni-navbar__header-container {
293
+		/* #ifndef APP-NVUE */
294
+		display: flex;
295
+		/* #endif */
296
+		flex: 1;
297
+		padding: 0 10px;
298
+		overflow: hidden;
299
+	}
300
+
301
+	.uni-navbar__header-container-inner {
302
+		/* #ifndef APP-NVUE */
303
+		display: flex;
304
+		/* #endif */
305
+		flex: 1;
306
+		flex-direction: row;
307
+		align-items: center;
308
+		justify-content: center;
309
+		font-size: 12px;
310
+		overflow: hidden;
311
+		// box-sizing: border-box;
312
+	}
313
+
314
+
315
+	.uni-navbar__placeholder-view {
316
+		height: $nav-height;
317
+	}
318
+
319
+	.uni-navbar--fixed {
320
+		position: fixed;
321
+		z-index: 99;
322
+		/* #ifdef H5 */
323
+		left: var(--window-left);
324
+		right: var(--window-right);
325
+		/* #endif */
326
+		/* #ifndef H5 */
327
+		left: 0;
328
+		right: 0;
329
+		/* #endif */
330
+
331
+	}
332
+
333
+	.uni-navbar--shadow {
334
+		box-shadow: 0 1px 6px #ccc;
335
+	}
336
+
337
+	.uni-navbar--border {
338
+		border-bottom-width: 1rpx;
339
+		border-bottom-style: solid;
340
+		border-bottom-color: #eee;
341
+	}
342
+
343
+	.uni-ellipsis-1 {
344
+		overflow: hidden;
345
+		/* #ifndef APP-NVUE */
346
+		white-space: nowrap;
347
+		text-overflow: ellipsis;
348
+		/* #endif */
349
+		/* #ifdef APP-NVUE */
350
+		lines: 1;
351
+		text-overflow: ellipsis;
352
+		/* #endif */
353
+	}
354
+
355
+	// 暗主题配置
356
+	.uni-dark {}
357
+</style>

+ 30
- 0
uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue Wyświetl plik

@@ -0,0 +1,30 @@
1
+<template>
2
+	<view :style="{ height: statusBarHeight }" class="uni-status-bar">
3
+		<slot />
4
+	</view>
5
+</template>
6
+
7
+<script>
8
+	export default {
9
+		name: 'UniStatusBar',
10
+		data() {
11
+			return {
12
+				// #ifdef MP-WEIXIN
13
+				statusBarHeight: uni.getWindowInfo().statusBarHeight + 'px',
14
+				// #endif
15
+				// #ifndef MP-WEIXIN
16
+				statusBarHeight: uni.getSystemInfoSync().statusBarHeight + 'px',
17
+				// #endif
18
+
19
+			}
20
+		}
21
+	}
22
+</script>
23
+
24
+<style lang="scss" >
25
+	.uni-status-bar {
26
+		// width: 750rpx;
27
+		height: 20px;
28
+		// height: var(--status-bar-height);
29
+	}
30
+</style>

+ 87
- 0
uni_modules/uni-nav-bar/package.json Wyświetl plik

@@ -0,0 +1,87 @@
1
+{
2
+  "id": "uni-nav-bar",
3
+  "displayName": "uni-nav-bar 自定义导航栏",
4
+  "version": "1.3.14",
5
+  "description": "自定义导航栏组件,主要用于头部导航。",
6
+  "keywords": [
7
+    "uni-ui",
8
+    "导航",
9
+    "导航栏",
10
+    "自定义导航栏"
11
+],
12
+  "repository": "https://github.com/dcloudio/uni-ui",
13
+  "engines": {
14
+    "HBuilderX": ""
15
+  },
16
+  "directories": {
17
+    "example": "../../temps/example_temps"
18
+  },
19
+"dcloudext": {
20
+    "sale": {
21
+      "regular": {
22
+        "price": "0.00"
23
+      },
24
+      "sourcecode": {
25
+        "price": "0.00"
26
+      }
27
+    },
28
+    "contact": {
29
+      "qq": ""
30
+    },
31
+    "declaration": {
32
+      "ads": "无",
33
+      "data": "无",
34
+      "permissions": "无"
35
+    },
36
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
37
+    "type": "component-vue"
38
+  },
39
+  "uni_modules": {
40
+    "dependencies": [
41
+			"uni-scss",
42
+			"uni-icons"
43
+		],
44
+    "encrypt": [],
45
+    "platforms": {
46
+      "cloud": {
47
+        "tcb": "y",
48
+        "aliyun": "y",
49
+        "alipay": "n"
50
+      },
51
+      "client": {
52
+        "App": {
53
+          "app-vue": "y",
54
+          "app-nvue": "y"
55
+        },
56
+        "H5-mobile": {
57
+          "Safari": "y",
58
+          "Android Browser": "y",
59
+          "微信浏览器(Android)": "y",
60
+          "QQ浏览器(Android)": "y"
61
+        },
62
+        "H5-pc": {
63
+          "Chrome": "y",
64
+          "IE": "y",
65
+          "Edge": "y",
66
+          "Firefox": "y",
67
+          "Safari": "y"
68
+        },
69
+        "小程序": {
70
+          "微信": "y",
71
+          "阿里": "y",
72
+          "百度": "y",
73
+          "字节跳动": "y",
74
+          "QQ": "y"
75
+        },
76
+        "快应用": {
77
+          "华为": "u",
78
+          "联盟": "u"
79
+        },
80
+        "Vue": {
81
+            "vue2": "y",
82
+            "vue3": "y"
83
+        }
84
+      }
85
+    }
86
+  }
87
+}

+ 15
- 0
uni_modules/uni-nav-bar/readme.md Wyświetl plik

@@ -0,0 +1,15 @@
1
+
2
+
3
+## NavBar 导航栏
4
+> **组件名:uni-nav-bar**
5
+> 代码块: `uNavBar`
6
+
7
+导航栏组件,主要用于头部导航。
8
+
9
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar)
10
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
11
+
12
+
13
+
14
+
15
+

+ 7
- 7
unpackage/dist/build/app-plus/androidPrivacy.json Wyświetl plik

@@ -2,14 +2,14 @@
2 2
   "version": "1",
3 3
   "prompt": "template",
4 4
   "title": "服务协议和隐私政策",
5
-  "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
5
+  "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
6 6
   "buttonAccept": "同意并接受",
7 7
   "buttonRefuse": "暂不同意",
8 8
   "hrefLoader": "system",
9 9
   "backToExit":"false",
10 10
   "second": {
11 11
     "title": "确认提示",
12
-    "message": "  进入应用前,你需先同意<a href=\"\">《服务协议》</a>和<a href=\"\">《隐私政策》</a>,否则将退出应用。",
12
+    "message": "  进入应用前,你需先同意<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>,否则将退出应用。",
13 13
     "buttonAccept": "同意并继续",
14 14
     "buttonRefuse": "退出应用"
15 15
   },
@@ -20,19 +20,19 @@
20 20
     "showAlways": false
21 21
   },
22 22
   "styles": {
23
-    "backgroundColor": "#00FF00",
23
+    "backgroundColor": "#FFFFFF",
24 24
     "borderRadius":"5px",
25 25
     "title": {
26
-      "color": "#ff00ff"
26
+      "color": "#222222"
27 27
     },
28 28
     "buttonAccept": {
29
-      "color": "#ffff00"
29
+      "color": "#007545"
30 30
     },
31 31
     "buttonRefuse": {
32
-      "color": "#00ffff"
32
+      "color": "#222222"
33 33
     },
34 34
     "buttonVisitor": {
35
-      "color": "#00ffff"
35
+      "color": "#222222"
36 36
     }
37 37
   }
38 38
 }

+ 2
- 2
unpackage/dist/build/app-plus/app-config-service.js Wyświetl plik

@@ -1,8 +1,8 @@
1 1
 
2 2
   ;(function(){
3 3
   let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
4
-  const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"云链智安","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.56","entryPagePath":"pages/device/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"tabBar":{"position":"bottom","color":"#999999","selectedColor":"#007545","borderStyle":"black","blurEffect":"none","fontSize":"10px","iconWidth":"24px","spacing":"3px","height":"50px","list":[{"pagePath":"pages/device/index","text":"设备","iconPath":"/static/tabbar/device.png","selectedIconPath":"/static/tabbar/device-active.png"},{"pagePath":"pages/user/index","text":"我的","iconPath":"/static/tabbar/user.png","selectedIconPath":"/static/tabbar/user-active.png"}],"backgroundColor":"#ffffff","selectedIndex":0,"shown":true},"fallbackLocale":"en","locales":{},"darkmode":false,"themeConfig":{}};
5
-  const __uniRoutes = [{"path":"pages/device/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"navigationBar":{"titleText":"设备","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/user/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"navigationBar":{"backgroundColor":"#7FB8A2","titleText":"我的","type":"default"},"isNVue":false}},{"path":"pages/login/index","meta":{"navigationBar":{"titleText":"登录","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/devices/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站列表","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/powerstation/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/hostdetails/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"主机详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/strategy/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"策略详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/devicedetails/index","meta":{"navigationBar":{"titleText":"设备详情","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
4
+  const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"云链智安","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.56","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"tabBar":{"position":"bottom","color":"#999999","selectedColor":"#007545","borderStyle":"black","blurEffect":"none","fontSize":"10px","iconWidth":"24px","spacing":"3px","height":"50px","list":[{"pagePath":"pages/index/index","text":"首页","iconPath":"/static/tabbar/home.png","selectedIconPath":"/static/tabbar/home-active.png"},{"pagePath":"pages/product/index","text":"产品","iconPath":"/static/tabbar/product.png","selectedIconPath":"/static/tabbar/product-active.png"},{"pagePath":"pages/device/index","text":"设备","iconPath":"/static/tabbar/device.png","selectedIconPath":"/static/tabbar/device-active.png"},{"pagePath":"pages/user/index","text":"我的","iconPath":"/static/tabbar/user.png","selectedIconPath":"/static/tabbar/user-active.png"}],"backgroundColor":"#ffffff","selectedIndex":0,"shown":true},"fallbackLocale":"en","locales":{},"darkmode":false,"themeConfig":{}};
5
+  const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"navigationBar":{"titleText":"首页","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/product/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"navigationBar":{"titleText":"产品","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/device/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"navigationBar":{"titleText":"设备","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/user/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"navigationBar":{"backgroundColor":"#7FB8A2","titleText":"我的","type":"default"},"isNVue":false}},{"path":"pages/login/index","meta":{"navigationBar":{"titleText":"登录","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/devices/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站列表","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/powerstation/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/hostdetails/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"主机详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/strategy/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"策略详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/devicedetails/index","meta":{"navigationBar":{"titleText":"设备详情","type":"default"},"isNVue":false}},{"path":"pages/deviceslist/index","meta":{"navigationBar":{"titleText":"设备列表","type":"default"},"isNVue":false}},{"path":"pages/personalInformation/index","meta":{"navigationBar":{"titleText":"个人信息","type":"default"},"isNVue":false}},{"path":"pages/electricityprice/index","meta":{"navigationBar":{"titleText":"查询电价","type":"default"},"isNVue":false}},{"path":"pages/economiccalculation/index","meta":{"navigationBar":{"titleText":"经济测算","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
6 6
   __uniConfig.styles=[];//styles
7 7
   __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
8 8
   __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

+ 1
- 1
unpackage/dist/build/app-plus/app-renderjs.js
Plik diff jest za duży
Wyświetl plik


+ 6
- 7
unpackage/dist/build/app-plus/app-service.js
Plik diff jest za duży
Wyświetl plik


BIN
unpackage/dist/build/app-plus/assets/uniicons.32e978a5.ttf Wyświetl plik


+ 12
- 0
unpackage/dist/build/app-plus/manifest.json Wyświetl plik

@@ -147,6 +147,18 @@
147 147
       "height": "50px",
148 148
       "list": [
149 149
         {
150
+          "pagePath": "pages/index/index",
151
+          "text": "首页",
152
+          "iconPath": "/static/tabbar/home.png",
153
+          "selectedIconPath": "/static/tabbar/home-active.png"
154
+        },
155
+        {
156
+          "pagePath": "pages/product/index",
157
+          "text": "产品",
158
+          "iconPath": "/static/tabbar/product.png",
159
+          "selectedIconPath": "/static/tabbar/product-active.png"
160
+        },
161
+        {
150 162
           "pagePath": "pages/device/index",
151 163
           "text": "设备",
152 164
           "iconPath": "/static/tabbar/device.png",

+ 1
- 1
unpackage/dist/build/app-plus/pages/device/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 1
unpackage/dist/build/app-plus/pages/devicedetails/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 1
unpackage/dist/build/app-plus/pages/devices/index.css Wyświetl plik

@@ -1 +1 @@
1
-.uni-top-tabbar .uni-swiper-tab[data-v-ada95435]{height:3.125rem}.uni-top-tabbar .uni-swiper-tab .swiper-tab-list[data-v-ada95435]{font-size:.875rem;font-weight:400;line-height:2.5625rem;width:48%;display:flex;flex-direction:column;align-items:center}.uni-top-tabbar .uni-swiper-tab .active .swiper-tab-line[data-v-ada95435]{height:.1875rem;width:100%}.uni-page[data-v-c6000887]{width:100%;height:100%}.container[data-v-c6000887]{height:100%;background:linear-gradient(to bottom,#007545 -40%,#f0f5f5 40%,#f0f5f5);box-sizing:border-box;display:flex;flex-direction:column}.account_number[data-v-c6000887]{width:100%;display:flex;justify-content:center}.account[data-v-c6000887]{font-size:1rem}.login_imgae1[data-v-c6000887]{margin-right:.625rem;width:1.25rem;height:1.25rem}.weui-input[data-v-c6000887]{flex:1;height:2.5rem}.password[data-v-c6000887]{width:90%;display:flex;align-items:center;font-size:.875rem;padding:0 .625rem;border:.03125rem #cccccc solid;box-sizing:border-box;border-radius:3.125rem;background-color:#f0f5f5}.toptabbar[data-v-c6000887]{width:100%;height:2.5rem;margin-top:20px;padding:.3125rem .625rem;box-sizing:border-box}.data_list[data-v-c6000887]{width:100%;flex:1;overflow-y:auto;display:flex;flex-direction:column;padding:10px;box-sizing:border-box}.empty-tip[data-v-c6000887]{text-align:center;color:#999;font-size:14px;padding:20px}.card[data-v-c6000887]{width:90%}.card_image[data-v-c6000887]{width:5rem;height:5rem;border-radius:.3125rem}.card_box[data-v-c6000887]{width:100%;height:6.25rem;box-sizing:border-box;border-radius:.3125rem;background-color:#fff;display:flex;align-items:center;padding:.9375rem;margin-top:.625rem}.card_title[data-v-c6000887]{flex:1;margin-left:.625rem;display:flex;flex-direction:column}.card_title1[data-v-c6000887]{font-size:1.125rem}.card_title2[data-v-c6000887]{font-size:.875rem;color:#ccc;margin-top:.3125rem}.card_title3[data-v-c6000887]{font-size:.875rem;color:#ccc;margin-top:.25rem}.uni-top-tabbar[data-v-c6000887]{height:3.125rem}
1
+.uni-top-tabbar .uni-swiper-tab[data-v-ada95435]{height:3.125rem}.uni-top-tabbar .uni-swiper-tab .swiper-tab-list[data-v-ada95435]{font-size:.875rem;font-weight:400;line-height:2.5625rem;width:48%;display:flex;flex-direction:column;align-items:center}.uni-top-tabbar .uni-swiper-tab .active .swiper-tab-line[data-v-ada95435]{height:.1875rem;width:100%}.uni-page[data-v-4f9efdb4]{width:100%;height:100%}.container[data-v-4f9efdb4]{height:100%;background:linear-gradient(to bottom,#007545 -40%,#f0f5f5 40%,#f0f5f5);box-sizing:border-box;display:flex;flex-direction:column}.account_number[data-v-4f9efdb4]{width:100%;display:flex;justify-content:center}.account[data-v-4f9efdb4]{font-size:1rem}.login_imgae1[data-v-4f9efdb4]{margin-right:.625rem;width:1.25rem;height:1.25rem}.weui-input[data-v-4f9efdb4]{flex:1;height:2.5rem}.password[data-v-4f9efdb4]{width:90%;display:flex;align-items:center;font-size:.875rem;padding:0 .625rem;border:.03125rem #cccccc solid;box-sizing:border-box;border-radius:3.125rem;background-color:#f0f5f5}.toptabbar[data-v-4f9efdb4]{width:100%;height:2.5rem;margin-top:20px;padding:.3125rem .625rem;box-sizing:border-box}.data_list[data-v-4f9efdb4]{width:100%;flex:1;overflow-y:auto;display:flex;flex-direction:column;padding:10px;box-sizing:border-box}.empty-tip[data-v-4f9efdb4]{text-align:center;color:#999;font-size:14px;padding:20px}.card[data-v-4f9efdb4]{width:90%}.card_image[data-v-4f9efdb4]{width:5rem;height:5rem;border-radius:.3125rem}.card_box[data-v-4f9efdb4]{width:100%;height:6.25rem;box-sizing:border-box;border-radius:.3125rem;background-color:#fff;display:flex;align-items:center;padding:.9375rem;margin-top:.625rem}.card_title[data-v-4f9efdb4]{flex:1;margin-left:.625rem;display:flex;flex-direction:column}.card_title1[data-v-4f9efdb4]{font-size:1.125rem}.card_title2[data-v-4f9efdb4]{font-size:.875rem;color:#ccc;margin-top:.3125rem}.card_title3[data-v-4f9efdb4]{font-size:.875rem;color:#ccc;margin-top:.25rem}.uni-top-tabbar[data-v-4f9efdb4]{height:3.125rem}

+ 1
- 0
unpackage/dist/build/app-plus/pages/deviceslist/index.css Wyświetl plik

@@ -0,0 +1 @@
1
+#app[data-v-12e32bee]{width:100%;height:100%}uni-page[data-v-12e32bee]{width:100%;height:100%}uni-page-wrapper[data-v-12e32bee]{width:100%;height:100%}uni-page-body[data-v-12e32bee]{width:100%;height:100%}.container[data-v-12e32bee]{height:100%;background:linear-gradient(to bottom,#007545 -40%,#f0f5f5 40%,#f0f5f5);box-sizing:border-box;display:flex;flex-direction:column}.custom-tabs[data-v-12e32bee]{width:100%;height:100vh;padding:0 .625rem .625rem;overflow:auto;box-sizing:border-box}.custom_box[data-v-12e32bee]{width:100%;padding:.03125rem .625rem .625rem;border-radius:.625rem;background-color:#fff;box-sizing:border-box}.custom_title[data-v-12e32bee]{width:100%;display:flex;justify-content:space-between;padding:.625rem 0;border-bottom:.03125rem solid #E1E0F4;box-sizing:border-box}.custom_title_gl[data-v-12e32bee]{font-size:.8125rem;color:#222}.custom_div[data-v-12e32bee]{width:100%;display:flex;justify-content:space-between;margin-top:.625rem}.custom_div1[data-v-12e32bee]{font-size:.8125rem;color:#222}.battery[data-v-12e32bee]{font-size:.75rem;color:#222}.batteryccc[data-v-12e32bee]{font-size:.8125rem;color:#999}.tag_type1[data-v-12e32bee]{font-size:.875rem;color:#f0a26c;font-weight:500}.tag_type2[data-v-12e32bee]{font-size:.875rem;color:#15db9b;font-weight:500}.tag_type3[data-v-12e32bee]{font-size:.875rem;color:#b0c4de;font-weight:500}.tag_type2red[data-v-12e32bee]{font-size:.875rem;color:red;font-weight:500}.custom_box[data-v-12e32bee]{margin-top:.625rem}.tag_typetext[data-v-12e32bee]{width:100%;display:flex;font-size:.8125rem;justify-content:center;color:#b0c4de;margin-top:.625rem}

+ 1
- 0
unpackage/dist/build/app-plus/pages/economiccalculation/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 0
unpackage/dist/build/app-plus/pages/electricityprice/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 1
unpackage/dist/build/app-plus/pages/hostdetails/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 0
unpackage/dist/build/app-plus/pages/index/index.css Wyświetl plik

@@ -0,0 +1 @@
1
+.uni-page[data-v-9d236e6a]{width:100%;height:100%}.container[data-v-9d236e6a]{background:linear-gradient(to bottom,#007545 -40%,#f0f5f5 40%,#f0f5f5);box-sizing:border-box;padding-bottom:.625rem}.containertop[data-v-9d236e6a]{width:100%;height:4.375rem;display:flex;background-color:rgba(240,245,245,.8);padding-left:.625rem;padding-top:2.5rem;box-sizing:border-box;position:fixed;top:0;left:0;z-index:9}.containertop1[data-v-9d236e6a]{margin-right:1.875rem;color:#007545}.containertop2[data-v-9d236e6a]{margin-right:1.875rem;color:#222}.account_number[data-v-9d236e6a]{width:100%;height:208px;box-sizing:border-box;background-repeat:no-repeat;background-size:100%}.swiper[data-v-9d236e6a]{width:100%;height:100%}.swiper-item[data-v-9d236e6a]{display:block;width:100%;height:100%;text-align:center}.account_image[data-v-9d236e6a]{width:100%}.toptabbar[data-v-9d236e6a]{width:100%;padding:0 .625rem;margin-top:.9375rem;box-sizing:border-box}.toptabbar_box[data-v-9d236e6a]{width:100%;background-color:#fff;border-radius:.3125rem;padding:.625rem .9375rem;box-sizing:border-box}.uni-margin-wrap[data-v-9d236e6a]{width:100%;margin-top:.625rem;border-radius:.3125rem;overflow:auto}.uni-bg-red[data-v-9d236e6a]{display:flex;flex-direction:column;padding:.25rem;box-sizing:border-box}.swiper-items[data-v-9d236e6a]{width:100%;height:7.5rem;border-radius:.3125rem;overflow:auto}.swiper_title[data-v-9d236e6a]{width:100%;height:.625rem;display:flex;align-items:center;justify-content:center;font-size:.875rem}.scroll-Y[data-v-9d236e6a]{height:9.375rem}.uni-title[data-v-9d236e6a]{margin-bottom:.3125rem}.scroll-view_H[data-v-9d236e6a]{white-space:nowrap;width:100%}.scroll-view-item[data-v-9d236e6a]{height:9.375rem;line-height:9.375rem;text-align:center;font-size:1.125rem}.scroll-view-item_H[data-v-9d236e6a]{width:100%;height:14.25rem;text-align:center;font-size:1.125rem}.uni-bg-green[data-v-9d236e6a]{margin-top:1.25rem;border-radius:.3125rem}.scroll-view-item_title[data-v-9d236e6a]{height:1.25rem;font-size:.875rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;display:block;text-align:left}.scroll-view-item_subtitle[data-v-9d236e6a]{height:1.25rem;font-size:.75rem;color:#999;margin:.25rem 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;width:100%;display:block;text-align:left}.scroll-view-item_Himage[data-v-9d236e6a]{width:100%;height:11.25rem;border-radius:.3125rem}.toptabbarfinance[data-v-9d236e6a]{display:flex;justify-content:space-around;justify-content:space-between;padding:0 .625rem;margin-top:.625rem;box-sizing:border-box}.topfinance[data-v-9d236e6a]{width:32%;height:6.25rem;padding:.3125rem 0;border-radius:.25rem;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:#f0f5f5;box-sizing:border-box}.topfinanceimage[data-v-9d236e6a]{width:2.5rem;height:2.5rem}.topfinance_title[data-v-9d236e6a]{font-size:1rem;font-weight:550;margin-top:.25rem}.topfinance_subtitle[data-v-9d236e6a]{font-size:.6875rem;color:#959595}

+ 1
- 1
unpackage/dist/build/app-plus/pages/login/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 0
unpackage/dist/build/app-plus/pages/personalInformation/index.css Wyświetl plik

@@ -0,0 +1 @@
1
+.uni-page[data-v-3d66a583]{width:100%;height:100%}.container[data-v-3d66a583]{height:92vh;background:linear-gradient(to bottom,#007545 -40%,#f0f5f5 40%,#f0f5f5);box-sizing:border-box}.account_number[data-v-3d66a583]{width:100%;padding:.625rem;display:flex;justify-content:center;box-sizing:border-box}.toptabbar[data-v-3d66a583]{width:100%;padding:.3125rem .625rem;box-sizing:border-box}

+ 1
- 1
unpackage/dist/build/app-plus/pages/powerstation/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 0
unpackage/dist/build/app-plus/pages/product/index.css Wyświetl plik

@@ -0,0 +1 @@
1
+.uni-page[data-v-64dc8d5c]{width:100%;height:100%}.container[data-v-64dc8d5c]{box-sizing:border-box;padding-bottom:.625rem;padding-top:2.75rem;background:linear-gradient(to bottom,#f0f5f5 -40%,#f0f5f5 40%,#f0f5f5)}.container_top[data-v-64dc8d5c]{width:100%;height:2.75rem;color:#222;position:fixed;left:0;top:0}.account_number[data-v-64dc8d5c]{width:100%;box-sizing:border-box}.account_numberimage[data-v-64dc8d5c]{width:100%;padding:0;margin:0}.account_image[data-v-64dc8d5c]{width:100%}.toptabbar[data-v-64dc8d5c]{width:100%;padding:0 .5rem;margin-top:.5rem;box-sizing:border-box}.toptabbar_box[data-v-64dc8d5c]{width:100%;background-color:#fff;border-radius:.3125rem;padding:.625rem .9375rem;box-sizing:border-box}.uni-margin-wrap[data-v-64dc8d5c]{width:100%;margin-top:.625rem;border-radius:.3125rem;overflow:auto}.swiper[data-v-64dc8d5c]{height:9.375rem}.swiper-itembody[data-v-64dc8d5c]{width:100%;height:100%;padding:0 .625rem;display:flex;justify-content:space-between;background-color:#eff0f2;border-radius:.3125rem;box-sizing:border-box}.swiper-title[data-v-64dc8d5c]{flex:1;display:flex;flex-direction:column;justify-content:center;padding-left:.625rem}.swiper-title1[data-v-64dc8d5c]{font-size:.9375rem}.swiper-title2[data-v-64dc8d5c]{font-size:.75rem;margin-top:.3125rem;color:#999}.swiper-item[data-v-64dc8d5c]{width:6.9375rem;height:100%;text-align:center}.uni-bg-red[data-v-64dc8d5c]{display:flex;flex-direction:column;padding:.25rem;box-sizing:border-box}.swiper-items[data-v-64dc8d5c]{width:100%;height:7.5rem;border-radius:.3125rem;overflow:auto;background-color:#eff0f2}.swiper_title[data-v-64dc8d5c]{width:100%;height:.625rem;display:flex;align-items:center;justify-content:center;font-size:.875rem;margin-top:.625rem}.scroll-Y[data-v-64dc8d5c]{height:9.375rem}.uni-title[data-v-64dc8d5c]{margin-top:.625rem;margin-bottom:.3125rem}.uni-common-mttitle[data-v-64dc8d5c]{margin-top:.75rem}.scroll-view_H[data-v-64dc8d5c]{white-space:nowrap;width:100%}.scroll-view-item[data-v-64dc8d5c]{height:9.375rem;line-height:9.375rem;text-align:center;font-size:1.125rem}.scroll-view-item_H[data-v-64dc8d5c]{width:100%;line-height:9.375rem;text-align:center;font-size:1.125rem}.Sourcenetwork[data-v-64dc8d5c]{width:100%;position:relative}.uni-bg-green[data-v-64dc8d5c]{width:100%;background-color:#eff0f2;margin-top:.625rem;border-radius:.3125rem}.Sourcenetwork_title[data-v-64dc8d5c]{width:100%;padding:.3125rem;box-sizing:border-box;position:absolute;bottom:0;left:0;border-bottom-right-radius:.3125rem;border-bottom-left-radius:.3125rem;background-color:rgba(0,117,69,.3);font-size:.875rem;color:#fff}.image-placeholder[data-v-64dc8d5c]{width:100%;height:100%;background-color:#eff0f2;display:flex;justify-content:center;align-items:center}.text[data-v-64dc8d5c]{font-size:12px;color:#666;margin-top:5px}.uni-px-5[data-v-64dc8d5c]{padding-left:10px;padding-right:10px}.uni-pb-5[data-v-64dc8d5c]{padding-bottom:10px}.prompt[data-v-64dc8d5c]{position:fixed;top:3.0625rem;right:.625rem;text-align:right}.promptimage[data-v-64dc8d5c]{width:1.875rem;height:1.875rem}.promptbox[data-v-64dc8d5c]{background-color:#fff;border-radius:.25rem;text-align:left}.promptbox1[data-v-64dc8d5c]{padding:.3125rem .625rem}

+ 1
- 1
unpackage/dist/build/app-plus/pages/strategy/index.css
Plik diff jest za duży
Wyświetl plik


+ 1
- 1
unpackage/dist/build/app-plus/pages/user/index.css
Plik diff jest za duży
Wyświetl plik


+ 33
- 33
unpackage/dist/dev/app-plus/androidPrivacy.json Wyświetl plik

@@ -1,38 +1,38 @@
1 1
 {
2
-  "version": "1",
3
-  "prompt": "template",
4
-  "title": "服务协议和隐私政策",
5
-  "message": "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
6
-  "buttonAccept": "同意并接受",
7
-  "buttonRefuse": "暂不同意",
8
-  "hrefLoader": "system",
9
-  "backToExit":"false",
10
-  "second": {
11
-    "title": "确认提示",
12
-    "message": "  进入应用前,你需先同意<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>,否则将退出应用。",
13
-    "buttonAccept": "同意并继续",
14
-    "buttonRefuse": "退出应用"
15
-  },
16
-  "disagreeMode":{
17
-    "support": false,
18
-    "loadNativePlugins": false,
19
-    "visitorEntry": false,
20
-    "showAlways": false
21
-  },
22
-  "styles": {
23
-    "backgroundColor": "#FFFFFF",
24
-    "borderRadius":"5px",
25
-    "title": {
26
-      "color": "#222222"
2
+    "version" : "1",
3
+    "prompt" : "template",
4
+    "title" : "服务协议和隐私政策",
5
+    "message" : "  请你务必审慎阅读、充分理解“服务协议”和“隐私政策”各条款,包括但不限于:为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。<br/>  你可阅读<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>了解详细信息。如果你同意,请点击下面按钮开始接受我们的服务。",
6
+    "buttonAccept" : "同意并接受",
7
+    "buttonRefuse" : "暂不同意",
8
+    "hrefLoader" : "system",
9
+    "backToExit" : "false",
10
+    "second" : {
11
+        "title" : "确认提示",
12
+        "message" : "  进入应用前,你需先同意<a href=\"https://esos-iot.bjdexn.cn/wx_images/service.png\">《服务协议》</a>和<a href=\"https://esos-iot.bjdexn.cn/wx_images/privacy.png\">《隐私政策》</a>,否则将退出应用。",
13
+        "buttonAccept" : "同意并继续",
14
+        "buttonRefuse" : "退出应用"
27 15
     },
28
-    "buttonAccept": {
29
-      "color": "#007545"
16
+    "disagreeMode" : {
17
+        "support" : false,
18
+        "loadNativePlugins" : false,
19
+        "visitorEntry" : false,
20
+        "showAlways" : false
30 21
     },
31
-    "buttonRefuse": {
32
-      "color": "#222222"
33
-    },
34
-    "buttonVisitor": {
35
-      "color": "#222222"
22
+    "styles" : {
23
+        "backgroundColor" : "#FFFFFF",
24
+        "borderRadius" : "5px",
25
+        "title" : {
26
+            "color" : "#222222"
27
+        },
28
+        "buttonAccept" : {
29
+            "color" : "#007545"
30
+        },
31
+        "buttonRefuse" : {
32
+            "color" : "#222222"
33
+        },
34
+        "buttonVisitor" : {
35
+            "color" : "#222222"
36
+        }
36 37
     }
37
-  }
38 38
 }

+ 1
- 1
unpackage/dist/dev/app-plus/app-config-service.js Wyświetl plik

@@ -2,7 +2,7 @@
2 2
   ;(function(){
3 3
   let u=void 0,isReady=false,onReadyCallbacks=[],isServiceReady=false,onServiceReadyCallbacks=[];
4 4
   const __uniConfig = {"pages":[],"globalStyle":{"backgroundColor":"#F8F8F8","navigationBar":{"backgroundColor":"#F8F8F8","titleText":"uni-app","type":"default","titleColor":"#000000"},"isNVue":false},"nvue":{"compiler":"uni-app","styleCompiler":"uni-app","flex-direction":"column"},"renderer":"auto","appname":"云链智安","splashscreen":{"alwaysShowBeforeRender":true,"autoclose":true},"compilerVersion":"4.56","entryPagePath":"pages/index/index","entryPageQuery":"","realEntryPagePath":"","networkTimeout":{"request":60000,"connectSocket":60000,"uploadFile":60000,"downloadFile":60000},"tabBar":{"position":"bottom","color":"#999999","selectedColor":"#007545","borderStyle":"black","blurEffect":"none","fontSize":"10px","iconWidth":"24px","spacing":"3px","height":"50px","list":[{"pagePath":"pages/index/index","text":"首页","iconPath":"/static/tabbar/home.png","selectedIconPath":"/static/tabbar/home-active.png"},{"pagePath":"pages/product/index","text":"产品","iconPath":"/static/tabbar/product.png","selectedIconPath":"/static/tabbar/product-active.png"},{"pagePath":"pages/device/index","text":"设备","iconPath":"/static/tabbar/device.png","selectedIconPath":"/static/tabbar/device-active.png"},{"pagePath":"pages/user/index","text":"我的","iconPath":"/static/tabbar/user.png","selectedIconPath":"/static/tabbar/user-active.png"}],"backgroundColor":"#ffffff","selectedIndex":0,"shown":true},"fallbackLocale":"en","locales":{},"darkmode":false,"themeConfig":{}};
5
-  const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"navigationBar":{"titleText":"首页","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/product/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"navigationBar":{"titleText":"产品","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/device/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"navigationBar":{"titleText":"设备","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/user/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"navigationBar":{"backgroundColor":"#7FB8A2","titleText":"我的","type":"default"},"isNVue":false}},{"path":"pages/login/index","meta":{"navigationBar":{"titleText":"登录","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/devices/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站列表","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/powerstation/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/hostdetails/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"主机详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/strategy/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"策略详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/devicedetails/index","meta":{"navigationBar":{"titleText":"设备详情","type":"default"},"isNVue":false}},{"path":"pages/deviceslist/index","meta":{"navigationBar":{"titleText":"设备列表","type":"default"},"isNVue":false}},{"path":"pages/PersonalInformation/index","meta":{"navigationBar":{"titleText":"个人信息","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
5
+  const __uniRoutes = [{"path":"pages/index/index","meta":{"isQuit":true,"isEntry":true,"isTabBar":true,"tabBarIndex":0,"navigationBar":{"titleText":"首页","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/product/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":1,"navigationBar":{"titleText":"产品","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/device/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":2,"navigationBar":{"titleText":"设备","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/user/index","meta":{"isQuit":true,"isTabBar":true,"tabBarIndex":3,"navigationBar":{"backgroundColor":"#7FB8A2","titleText":"我的","type":"default"},"isNVue":false}},{"path":"pages/login/index","meta":{"navigationBar":{"titleText":"登录","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/devices/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站列表","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/powerstation/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"电站详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/hostdetails/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"主机详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/strategy/index","meta":{"backgroundColor":"#7FB8A2","navigationBar":{"backgroundColor":"#7FB8A2","titleText":"策略详情","type":"default","titleColor":"#ffffff"},"isNVue":false}},{"path":"pages/devicedetails/index","meta":{"navigationBar":{"titleText":"设备详情","type":"default"},"isNVue":false}},{"path":"pages/deviceslist/index","meta":{"navigationBar":{"titleText":"设备列表","type":"default"},"isNVue":false}},{"path":"pages/personalInformation/index","meta":{"navigationBar":{"titleText":"个人信息","type":"default"},"isNVue":false}},{"path":"pages/electricityprice/index","meta":{"navigationBar":{"titleText":"查询电价","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/economiccalculation/index","meta":{"navigationBar":{"titleText":"经济测算","style":"custom","type":"default"},"isNVue":false}},{"path":"pages/report/index","meta":{"navigationBar":{"titleText":"经济测算报告","style":"custom","type":"default"},"isNVue":false}}].map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
6 6
   __uniConfig.styles=[];//styles
7 7
   __uniConfig.onReady=function(callback){if(__uniConfig.ready){callback()}else{onReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"ready",{get:function(){return isReady},set:function(val){isReady=val;if(!isReady){return}const callbacks=onReadyCallbacks.slice(0);onReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});
8 8
   __uniConfig.onServiceReady=function(callback){if(__uniConfig.serviceReady){callback()}else{onServiceReadyCallbacks.push(callback)}};Object.defineProperty(__uniConfig,"serviceReady",{get:function(){return isServiceReady},set:function(val){isServiceReady=val;if(!isServiceReady){return}const callbacks=onServiceReadyCallbacks.slice(0);onServiceReadyCallbacks.length=0;callbacks.forEach(function(callback){callback()})}});

+ 6
- 0
unpackage/dist/dev/app-plus/app-renderjs.js Wyświetl plik

@@ -7419,6 +7419,12 @@ __renderjsModules.f9cb76fc = (() => {
7419 7419
         if (index !== void 0) {
7420 7420
           return series[index].name + "\uFF1A" + series[index].data + "\u5143";
7421 7421
         }
7422
+      },
7423
+      "timedemo": function(val, index, series) {
7424
+        if (series.xAxis.data.includes(Number(val))) {
7425
+          return val;
7426
+        }
7427
+        return "";
7422 7428
       }
7423 7429
     },
7424 7430
     //这里演示了自定义您的图表类型的option,可以随意命名,之后在组件上 type="demotype" 后,组件会调用这个花括号里的option,如果组件上还存在opts参数,会将demotype与opts中option合并后渲染图表。

+ 6767
- 2401
unpackage/dist/dev/app-plus/app-service.js
Plik diff jest za duży
Wyświetl plik


BIN
unpackage/dist/dev/app-plus/assets/uniicons.32e978a5.ttf Wyświetl plik


+ 31
- 10
unpackage/dist/dev/app-plus/pages/PersonalInformation/index.css Wyświetl plik

@@ -1,25 +1,46 @@
1 1
 
2
-.uni-page[data-v-c403fa49]{
2
+.uni-page[data-v-bcd57904]{
3 3
 	  		width: 100%;
4 4
 	  		height: 100%;
5 5
 }
6
-.container[data-v-c403fa49] {
7
-	  	height: 92vh;
8
-	    background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%);
6
+.container[data-v-bcd57904] {
7
+	  	height: 100%;
8
+	    /* background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%); */
9
+		background-color: #f5f5f5;
9 10
 	    box-sizing: border-box;
10 11
 }
11
-.account_number[data-v-c403fa49]{
12
+.account_number[data-v-bcd57904]{
12 13
 	    width: 100%;
13 14
 		padding: 0.625rem;
14 15
 		display: flex;
15 16
 		justify-content: center;
16 17
 		box-sizing: border-box;
17 18
 }
18
-.toptabbar[data-v-c403fa49] {
19
+.account_to[data-v-bcd57904]{
20
+		 width: 6.25rem;
21
+		 height: 6.25rem;
22
+		 border-radius: 3.125rem;
23
+}
24
+.toptabbar[data-v-bcd57904] {
19 25
 	     width: 100%;
20
-	     padding: 0.3125rem 0.625rem;
26
+	     padding: 0.3125rem 1.25rem;
21 27
 	     box-sizing: border-box;
22 28
 }
23
-		
24
- 
25
- 
29
+.toptabbar_[data-v-bcd57904]{
30
+		   border-radius: 0.3125rem;
31
+		   overflow: hidden;
32
+		   padding:0 0.625rem 0.625rem 0.625rem;
33
+		   background-color: #ffffff;
34
+}
35
+.toptabbar_box[data-v-bcd57904]{
36
+			width: 100%;
37
+			height: 3.75rem;
38
+			display: flex;
39
+			align-items: center;
40
+			justify-content: space-between;
41
+			border-bottom: 0.03125rem #f5f5f5 solid;
42
+}
43
+.toptabbar_left[data-v-bcd57904]{
44
+		 font-size: 0.875rem;
45
+}
46
+

+ 205
- 178
unpackage/dist/dev/app-plus/pages/device/index.css Wyświetl plik

@@ -885,250 +885,277 @@ to {
885 885
   width: 100%;
886 886
 }
887 887
 
888
+.container_bj[data-v-1d9691da]{
889
+}
888 890
 .container[data-v-1d9691da] {
889
-  background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%);
890
-  box-sizing: border-box;
891
+	background: linear-gradient(to bottom, #007545 -10%, #f0f5f5 40%, #f0f5f5 100%);
892
+		/* background-image: url('@/static/222.jpg'); */
893
+		/* background-size: 100% 600rpx; */
894
+		/* background-repeat: no-repeat; */
895
+		/* box-sizing: border-box; */
891 896
 }
892 897
 .navigation[data-v-1d9691da] {
893
-  width: 100%;
894
-  height: 60px;
898
+		width: 100%;
899
+		height: 60px;
895 900
 }
896 901
 .power[data-v-1d9691da] {
897
-  width: 100%;
898
-  height: 220px;
899
-  padding:0 1.25rem;
900
-  display: flex;
901
-  justify-content: space-between;
902
-  color: #ffffff;
903
-  box-sizing: border-box;
902
+		width: 100%;
903
+		height: 220px;
904
+		padding: 0 1.25rem;
905
+		display: flex;
906
+		justify-content: space-between;
907
+		box-sizing: border-box;
908
+}
909
+.power_kwh[data-v-1d9691da]{
910
+	font-size: 0.625rem;
904 911
 }
905 912
 .power_1[data-v-1d9691da] {
906
-  height: 180px;
907
-  display: flex;
908
-  flex-direction: column;
909
-  justify-content: center;
910
-  text-align: center;
913
+		height: 180px;
914
+		display: flex;
915
+		flex-direction: column;
916
+		justify-content: center;
917
+		text-align: center;
911 918
 }
912 919
 .power_1 uni-image[data-v-1d9691da] {
913
-  width: 1rem;
914
-  height: 1rem;
915
-  margin-right: 0.3125rem;
920
+		width: 1rem;
921
+		height: 1rem;
922
+		margin-right: 0.3125rem;
916 923
 }
917 924
 .power_month[data-v-1d9691da] {
918
-  font-size: 0.875rem;
919
-  display: flex;
920
-  align-items: center;
925
+		font-size: 1rem;
926
+		color: #eee !important;
927
+		display: flex;
928
+		align-items: center;
921 929
 }
922 930
 .power_monthkwh[data-v-1d9691da] {
923
-  font-size: 1rem;
924
-  margin-top: 0.5rem;
931
+		font-size: 1rem;
932
+		margin-top: 0.5rem;
933
+		color: #fff;
925 934
 }
926 935
 .power_Cumulative[data-v-1d9691da] {
927
-  font-size: 0.875rem;
928
-  display: flex;
929
-  align-items: center;
930
-  margin-top: 1rem;
936
+		font-size: 1rem;
937
+		display: flex;
938
+		align-items: center;
939
+		margin-top: 1.3125rem;
940
+		color: #eee !important;
931 941
 }
932 942
 .power_Cumulativekwh[data-v-1d9691da] {
933
-  font-size: 1rem;
934
-  margin-top: 0.5rem;
943
+		font-size: 1rem;
944
+		margin-top: 0.5rem;
945
+		color: #fff;
935 946
 }
936 947
 .power_2[data-v-1d9691da] {
937
-  padding: 2px;
938
-  width: 170px;
939
-  height: 170px;
940
-  border-radius: 50%;
941
-  border: 3px solid #007544;
942
-  box-sizing: border-box;
943
-  display: flex;
944
-  align-items: center;
945
-  justify-content: center;
946
-  position: relative;
947
-  overflow: hidden;
948
+		padding: 2px;
949
+		width: 170px;
950
+		height: 170px;
951
+		border-radius: 50%;
952
+		border: 3px solid #007545;
953
+		box-sizing: border-box;
954
+		display: flex;
955
+		align-items: center;
956
+		justify-content: center;
957
+		position: relative;
958
+		overflow: hidden;
959
+		color: #fff
948 960
 }
949 961
 .power_2 uni-image[data-v-1d9691da] {
950
-  width: 160px;
951
-  height: 160px;
962
+		width: 160px;
963
+		height: 160px;
952 964
 }
953 965
 .power_2txt[data-v-1d9691da] {
954
-  position: absolute;
955
-  top: 36%;
966
+		position: absolute;
967
+		top: 32%;
968
+		color: #fff;
956 969
 }
957 970
 .power_2txt1[data-v-1d9691da] {
958
-  font-size: 0.875rem;
971
+		color: #eee !important;
972
+		font-size: 1.1875rem;
959 973
 }
960 974
 .power_2txtmeasure[data-v-1d9691da] {
961
-  font-size: 1.125rem;
962
-  margin-top: 10px;
963
-  text-align: center;
975
+		font-size: 1.125rem;
976
+		margin-top: 10px;
977
+		font-weight: 600;
978
+		color: #fff;
979
+		text-align: center;
964 980
 }
965 981
 
966
-/* 旋转动画 */
982
+	/* 旋转动画 */
967 983
 @keyframes rotate-1d9691da {
968 984
 from {
969
-    transform: rotate(0deg);
985
+			transform: rotate(0deg);
970 986
 }
971 987
 to {
972
-    transform: rotate(360deg);
988
+			transform: rotate(360deg);
973 989
 }
974 990
 }
975 991
 .rotating[data-v-1d9691da] {
976
-  animation: rotate-1d9691da 12s linear infinite;
977
-  transform-origin: 50% 50%;
978
-  -webkit-backface-visibility: hidden;
979
-          backface-visibility: hidden;
980
-  width: 180px;
981
-  height: 180px;
982
-  /* border-radius: 100rpx; */
983
-  /* background-color: #f0f5f5; */
984
-  overflow: hidden;
992
+		animation: rotate-1d9691da 12s linear infinite;
993
+		transform-origin: 50% 50%;
994
+		-webkit-backface-visibility: hidden;
995
+		        backface-visibility: hidden;
996
+		width: 180px;
997
+		height: 180px;
998
+		/* border-radius: 100rpx; */
999
+		/* background-color: #f0f5f5; */
1000
+		overflow: hidden;
985 1001
 }
986 1002
 .income_box[data-v-1d9691da] {
987
-  width: 100%;
988
-  height: 6.25rem;
989
-  box-sizing: border-box;
990
-  padding: 0.625rem;
1003
+		width: 100%;
1004
+		height: 6.25rem;
1005
+		box-sizing: border-box;
1006
+		padding: 0.625rem;
991 1007
 }
992 1008
 .income[data-v-1d9691da] {
993
-  width: 100%;
994
-  height: 6.25rem;
995
-  border-radius: 0.5rem;
996
-  background-color: #ffffff;
997
-  display: flex;
998
-  align-items: center;
999
-  justify-content: space-around;
1009
+		width: 100%;
1010
+		height: 6.25rem;
1011
+		border-radius: 0.5rem;
1012
+		background-color: #ffffff;
1013
+		display: flex;
1014
+		align-items: center;
1015
+		justify-content: space-around;
1000 1016
 }
1001 1017
 .income_yesterday1[data-v-1d9691da],
1002
-.income_moon1[data-v-1d9691da],
1003
-.income_tired1[data-v-1d9691da] {
1004
-  font-size: 0.875rem;
1005
-  color: #999999;
1018
+	.income_moon1[data-v-1d9691da],
1019
+	.income_tired1[data-v-1d9691da] {
1020
+		font-size: 0.875rem;
1021
+		color: #999999;
1006 1022
 }
1007 1023
 .income_yesterday2[data-v-1d9691da],
1008
-.income_moon2[data-v-1d9691da],
1009
-.income_tired2[data-v-1d9691da] {
1010
-  margin-top: 0.625rem;
1011
-  font-size: 1rem;
1024
+	.income_moon2[data-v-1d9691da],
1025
+	.income_tired2[data-v-1d9691da] {
1026
+		margin-top: 0.625rem;
1027
+		font-size: 1rem;
1028
+		font-weight: 600;
1029
+}
1030
+.income_unit[data-v-1d9691da]{
1031
+	font-size: 0.6875rem;
1012 1032
 }
1013 1033
 .power_box[data-v-1d9691da] {
1014
-  width: 100%;
1015
-  height: 6.875rem;
1016
-  padding: 0.625rem;
1017
-  box-sizing: border-box;
1018
-  margin-top: 20px;
1034
+		width: 100%;
1035
+		height: 6.875rem;
1036
+		padding: 0.625rem;
1037
+		box-sizing: border-box;
1038
+		margin-top: 20px;
1019 1039
 }
1020 1040
 .powerstation[data-v-1d9691da] {
1021
-  width: 100%;
1022
-  height: 6.875rem;
1023
-  display: flex;
1024
-  align-items: center;
1025
-  justify-content: space-between;
1041
+		width: 100%;
1042
+		height: 6.875rem;
1043
+		display: flex;
1044
+		align-items: center;
1045
+		justify-content: space-between;
1026 1046
 }
1027 1047
 .power_yesterday[data-v-1d9691da],
1028
-.power_moon[data-v-1d9691da],
1029
-.power_tired[data-v-1d9691da] {
1030
-  width: 31%;
1031
-  height: 100%;
1032
-  display: flex;
1033
-  flex-direction: column;
1034
-  align-items: center;
1035
-  justify-content: center;
1036
-  background-color: #ffffff;
1048
+	.power_moon[data-v-1d9691da],
1049
+	.power_tired[data-v-1d9691da] {
1050
+		width: 31%;
1051
+		height: 100%;
1052
+		display: flex;
1053
+		border-radius: 0.3125rem;
1054
+		flex-direction: column;
1055
+		align-items: center;
1056
+		justify-content: center;
1057
+		background-color: #ffffff;
1037 1058
 }
1038 1059
 .power_yesterday uni-image[data-v-1d9691da],
1039
-.power_moon uni-image[data-v-1d9691da],
1040
-.power_tired uni-image[data-v-1d9691da] {
1041
-  width: 1.5rem;
1042
-  height: 1.5rem;
1043
-  padding: 0.40625rem;
1044
-  border-radius: 100%;
1060
+	.power_moon uni-image[data-v-1d9691da],
1061
+	.power_tired uni-image[data-v-1d9691da] {
1062
+		width: 1.5rem;
1063
+		height: 1.5rem;
1064
+		padding: 0.40625rem;
1065
+		border-radius: 100%;
1045 1066
 }
1046 1067
 .power_yesterday uni-image[data-v-1d9691da] {
1047
-  background-color: #007544;
1068
+		background-color: #007544;
1048 1069
 }
1049 1070
 .power_moon uni-image[data-v-1d9691da] {
1050
-  background-color: #3774f3;
1071
+		background-color: #3774f3;
1051 1072
 }
1052 1073
 .power_tired uni-image[data-v-1d9691da] {
1053
-  background-color: #b3cef9;
1074
+		background-color: #b3cef9;
1054 1075
 }
1055 1076
 .power_yesterday1[data-v-1d9691da],
1056
-.power_moon1[data-v-1d9691da],
1057
-.power_tired1[data-v-1d9691da] {
1058
-  margin: 0.3125rem 0;
1059
-  font-size: 0.875rem;
1060
-  color: #999999;
1077
+	.power_moon1[data-v-1d9691da],
1078
+	.power_tired1[data-v-1d9691da] {
1079
+		margin: 0.3125rem 0;
1080
+		font-size: 0.875rem;
1081
+		color: #999999;
1061 1082
 }
1062 1083
 .toptabbar[data-v-1d9691da] {
1063
-  width: 100%;
1064
-  height: 2.5rem;
1065
-  margin-top: 20px;
1066
-  padding: 0.3125rem 0.625rem;
1067
-  box-sizing: border-box;
1084
+		width: 100%;
1085
+		height: 2.5rem;
1086
+		margin-top: 20px;
1087
+		padding: 0.3125rem 0.625rem;
1088
+		box-sizing: border-box;
1068 1089
 }
1069 1090
 [data-v-1d9691da] .uni-scroll-view-content {
1070
-  display: flex;
1071
-  justify-content: center;
1091
+		display: flex;
1092
+		justify-content: center;
1072 1093
 }
1073
-.datecalendar[data-v-1d9691da]{
1074
-	display: flex;
1075
-	justify-content: space-between;
1076
-	padding: 0 0.75rem;
1077
-	margin-top: 1.875rem;
1078
-}
1079
-.datecalendar_1[data-v-1d9691da]{
1080
-	width: 10rem;
1081
-	height: 1.875rem;
1082
-	display: flex;
1083
-	font-size: 0.875rem;
1084
-	border: 0.00625rem solid #999999;
1085
-	border-radius: 1.25rem;
1086
-	overflow: overlay;
1087
-}
1088
-.datecalendar_1sun[data-v-1d9691da]{
1089
-	flex: 1;
1090
-	display: flex;
1091
-	align-items: center;
1092
-	justify-content: center;
1093
-	color: #222222;
1094
-	background-color: #ffffff;
1095
-}
1096
-.datecalendar_1moon[data-v-1d9691da]{
1097
-	flex: 1;
1098
-	display: flex;
1099
-	align-items: center;
1100
-	justify-content: center;
1101
-	background-color: #ffffff;
1102
-	border-left: 0.00625rem solid #999999;
1103
-	border-right: 0.00625rem solid #999999;
1104
-}
1105
-.datecalendar_1year[data-v-1d9691da]{
1106
-	flex: 1;
1107
-	display: flex;
1108
-	align-items: center;
1109
-	justify-content: center;
1110
-	background-color: #ffffff;
1111
-}
1112
-.datecalendar_2[data-v-1d9691da]{
1113
-	width: 5.625rem;
1114
-	height: 1.875rem;
1115
-	display: flex;
1116
-	align-items: center;
1117
-	justify-content: center;
1118
-	font-size: 0.875rem;
1119
-	border: 0.00625rem solid #999999;
1120
-	border-radius: 1.25rem;
1094
+.datecalendar[data-v-1d9691da] {
1095
+		display: flex;
1096
+		justify-content: space-between;
1097
+		padding: 0 0.75rem;
1098
+		margin-top: 1.875rem;
1099
+}
1100
+.datecalendar_1[data-v-1d9691da] {
1101
+		width: 10rem;
1102
+		height: 1.875rem;
1103
+		display: flex;
1104
+		font-size: 0.875rem;
1105
+		border: 0.00625rem solid #999999;
1106
+		border-radius: 1.25rem;
1107
+		overflow: overlay;
1108
+}
1109
+.datecalendar_1sun[data-v-1d9691da] {
1110
+		flex: 1;
1111
+		display: flex;
1112
+		align-items: center;
1113
+		justify-content: center;
1114
+		color: #222222;
1115
+		background-color: #ffffff;
1116
+}
1117
+.datecalendar_1moon[data-v-1d9691da] {
1118
+		flex: 1;
1119
+		display: flex;
1120
+		align-items: center;
1121
+		justify-content: center;
1122
+		background-color: #ffffff;
1123
+		border-left: 0.00625rem solid #999999;
1124
+		border-right: 0.00625rem solid #999999;
1125
+}
1126
+.datecalendar_1year[data-v-1d9691da] {
1127
+		flex: 1;
1128
+		display: flex;
1129
+		align-items: center;
1130
+		justify-content: center;
1131
+		background-color: #ffffff;
1132
+}
1133
+.datecalendar_2[data-v-1d9691da] {
1134
+		width: 5.625rem;
1135
+		height: 1.875rem;
1136
+		display: flex;
1137
+		align-items: center;
1138
+		justify-content: center;
1139
+		font-size: 0.875rem;
1140
+		border: 0.00625rem solid #999999;
1141
+		border-radius: 1.25rem;
1121 1142
 }
1122 1143
 .qiun_data[data-v-1d9691da] {
1123
-  width: 100%;
1124
-  height: 18.75rem;
1125
-  padding: 0.5rem;
1126
-   overflow: auto; 
1127
-  box-sizing: border-box;
1144
+		width: 100%;
1145
+		height: 18.75rem;
1146
+		padding: 0.5rem;
1147
+		overflow: auto;
1148
+		box-sizing: border-box;
1128 1149
 }
1129
-.qiun_title[data-v-1d9691da]{
1130
-	height: 12%;
1131
-	font-size: 0.875rem;
1132
-	margin-left: 0.625rem;
1150
+.qiun_title[data-v-1d9691da] {
1151
+		height: 12%;
1152
+		font-size: 0.875rem;
1153
+		margin-left: 0.625rem;
1154
+}
1155
+.account_numberimage[data-v-1d9691da] {
1156
+		width: 100%;
1157
+		padding: 0;
1158
+		position: fixed;
1159
+		top: 0;
1160
+		left: 0;
1133 1161
 }
1134
-

+ 25
- 7
unpackage/dist/dev/app-plus/pages/devicedetails/index.css Wyświetl plik

@@ -179,6 +179,12 @@ to {
179 179
 .uni-calendar-item--restday-text[data-v-65626c58] {
180 180
   color: #e43d33;
181 181
 }
182
+.uni-calendar-item--workday-texts[data-v-65626c58] {
183
+  color: #c0c0c0;
184
+}
185
+.uni-calendar-item--restday-texts[data-v-65626c58] {
186
+  color: #c0c0c0;
187
+}
182 188
 /**
183 189
  * 这里是uni-app内置的常用样式变量
184 190
  *
@@ -1155,6 +1161,7 @@ uni-page[data-v-41d19505] {
1155 1161
 		border: 0.3125rem solid #007545;
1156 1162
 }
1157 1163
 .liquid_text[data-v-41d19505] {
1164
+		font-size: 1.1875rem;
1158 1165
 		color: #fff;
1159 1166
 }
1160 1167
 .container_title[data-v-41d19505] {
@@ -1174,6 +1181,7 @@ uni-page[data-v-41d19505] {
1174 1181
 }
1175 1182
 .health[data-v-41d19505]{
1176 1183
 		color: #007545;
1184
+		font-size: 0.875rem;
1177 1185
 		margin-bottom: 0.625rem;
1178 1186
 }
1179 1187
 .container_box1[data-v-41d19505]{
@@ -1232,15 +1240,15 @@ uni-page[data-v-41d19505] {
1232 1240
 .income_yesterday1[data-v-41d19505],
1233 1241
 	.income_moon1[data-v-41d19505],
1234 1242
 	.income_tired1[data-v-41d19505] {
1235
-		font-size: 0.75rem;
1243
+		font-size: 0.8125rem;
1236 1244
 		color: #999999;
1237 1245
 }
1238 1246
 .income_yesterday2[data-v-41d19505],
1239 1247
 	.income_moon2[data-v-41d19505],
1240 1248
 	.income_tired2[data-v-41d19505] {
1241
-		font-size: 0.75rem;
1249
+		font-size: 0.8125rem;
1242 1250
 		margin-left: 0.25rem;
1243
-		color: #999999;
1251
+		color: #222;
1244 1252
 }
1245 1253
 .qiun_data[data-v-41d19505] {
1246 1254
 		width: 100%;
@@ -1313,6 +1321,11 @@ uni-page[data-v-41d19505] {
1313 1321
 		margin-left:0.3125rem;
1314 1322
 		color: #999999;
1315 1323
 }
1324
+.power_yesterday11[data-v-41d19505]{
1325
+		font-size: 0.8125rem;
1326
+		margin-left:0.3125rem;
1327
+		color: #222;
1328
+}
1316 1329
 .power_moon2[data-v-41d19505],.power_yesterday2[data-v-41d19505],.power_tired2[data-v-41d19505]{
1317 1330
 	margin-top:0.3125rem;
1318 1331
 	font-size: 0.75rem;
@@ -1342,8 +1355,9 @@ uni-page[data-v-41d19505] {
1342 1355
 		border: 0.00625rem solid #999999;
1343 1356
 		border-radius: 1.25rem;
1344 1357
 		overflow: overlay;
1345
-}
1346
-.datecalendar_1sun[data-v-41d19505] {
1358
+}xz
1359
+
1360
+	.datecalendar_1sun[data-v-41d19505] {
1347 1361
 		flex: 1;
1348 1362
 		display: flex;
1349 1363
 		align-items: center;
@@ -1527,6 +1541,8 @@ uni-page[data-v-41d19505] {
1527 1541
 			border-radius: 0.3125rem;
1528 1542
 			background-color: #ffffff;
1529 1543
 			margin-top: 0.625rem;
1544
+			overflow: hidden;
1545
+			box-sizing: border-box;
1530 1546
 }
1531 1547
 .power_iconstrategy[data-v-41d19505]{
1532 1548
 			flex-direction: column;
@@ -1547,7 +1563,7 @@ uni-page[data-v-41d19505] {
1547 1563
 }
1548 1564
 .power_strategy[data-v-41d19505]{
1549 1565
 			font-size: 0.75rem;
1550
-			color: #B2D5CB;
1566
+			color: #ccc;
1551 1567
 			display: flex;
1552 1568
 			align-items: center;
1553 1569
 }
@@ -1702,4 +1718,6 @@ uni-page[data-v-41d19505] {
1702 1718
 .popupbutton[data-v-41d19505]{
1703 1719
 			display: flex;
1704 1720
 }
1705
-	
1721
+.income_unit[data-v-41d19505]{
1722
+		font-size: 0.625rem;
1723
+}

+ 1190
- 0
unpackage/dist/dev/app-plus/pages/economiccalculation/index.css
Plik diff jest za duży
Wyświetl plik


+ 1856
- 0
unpackage/dist/dev/app-plus/pages/electricityprice/index.css
Plik diff jest za duży
Wyświetl plik


+ 21
- 6
unpackage/dist/dev/app-plus/pages/hostdetails/index.css Wyświetl plik

@@ -179,6 +179,12 @@ to {
179 179
 .uni-calendar-item--restday-text[data-v-65626c58] {
180 180
   color: #e43d33;
181 181
 }
182
+.uni-calendar-item--workday-texts[data-v-65626c58] {
183
+  color: #c0c0c0;
184
+}
185
+.uni-calendar-item--restday-texts[data-v-65626c58] {
186
+  color: #c0c0c0;
187
+}
182 188
 /**
183 189
  * 这里是uni-app内置的常用样式变量
184 190
  *
@@ -1153,6 +1159,7 @@ to {
1153 1159
 		border: 0.3125rem solid #007545;
1154 1160
 }
1155 1161
 .liquid_text[data-v-7a87688a] {
1162
+		font-size: 1.1875rem;
1156 1163
 		color: #fff;
1157 1164
 }
1158 1165
 .container_title[data-v-7a87688a] {
@@ -1229,13 +1236,13 @@ to {
1229 1236
 .income_yesterday1[data-v-7a87688a],
1230 1237
 	.income_moon1[data-v-7a87688a],
1231 1238
 	.income_tired1[data-v-7a87688a] {
1232
-		font-size: 0.75rem;
1239
+		font-size: 0.875rem;
1233 1240
 		color: #999999;
1234 1241
 }
1235 1242
 .income_yesterday2[data-v-7a87688a],
1236 1243
 	.income_moon2[data-v-7a87688a],
1237 1244
 	.income_tired2[data-v-7a87688a] {
1238
-		font-size: 0.8125rem;
1245
+		font-size: 0.875rem;
1239 1246
 		font-weight: 400;
1240 1247
 }
1241 1248
 .qiun_data[data-v-7a87688a] {
@@ -1271,6 +1278,7 @@ to {
1271 1278
 		display: flex;
1272 1279
 		align-items: center;
1273 1280
 		justify-content: space-between;
1281
+		overflow: hidden;
1274 1282
 }
1275 1283
 .power_yesterday[data-v-7a87688a],
1276 1284
 	.power_moon[data-v-7a87688a],
@@ -1305,10 +1313,15 @@ to {
1305 1313
 .power_yesterday1[data-v-7a87688a],
1306 1314
 	.power_moon1[data-v-7a87688a],
1307 1315
 	.power_tired1[data-v-7a87688a] {
1308
-		font-size: 0.8125rem;
1316
+		font-size: 0.875rem;
1309 1317
 		margin-left:0.3125rem;
1310 1318
 		color: #999999;
1311 1319
 }
1320
+.power_yesterday11[data-v-7a87688a]{
1321
+		font-size: 0.8125rem;
1322
+		margin-left:0.3125rem;
1323
+		color: #222;
1324
+}
1312 1325
 .power_moon2[data-v-7a87688a],.power_yesterday2[data-v-7a87688a],.power_tired2[data-v-7a87688a]{
1313 1326
 	margin-top:0.3125rem;
1314 1327
 	font-size: 0.75rem;
@@ -1460,7 +1473,7 @@ to {
1460 1473
 		justify-content: center;
1461 1474
 }
1462 1475
 .energy_boxright1[data-v-7a87688a] {
1463
-		padding: 0.25rem 0.1875rem;
1476
+		padding: 0.25rem 0.9375rem;
1464 1477
 		font-size: 0.8125rem;
1465 1478
 		border-radius: 1.5625rem;
1466 1479
 		display: flex;
@@ -1559,7 +1572,7 @@ to {
1559 1572
 }
1560 1573
 .power_strategy[data-v-7a87688a]{
1561 1574
 		font-size: 0.75rem;
1562
-		color: #B2D5CB;
1575
+		color: #ccc;
1563 1576
 		display: flex;
1564 1577
 		align-items: center;
1565 1578
 }
@@ -1714,4 +1727,6 @@ to {
1714 1727
 .popupbutton[data-v-7a87688a]{
1715 1728
 			display: flex;
1716 1729
 }
1717
-	
1730
+.income_unit[data-v-7a87688a]{
1731
+		font-size: 0.625rem;
1732
+}

+ 30
- 16
unpackage/dist/dev/app-plus/pages/powerstation/index.css Wyświetl plik

@@ -672,6 +672,12 @@ to {
672 672
 .uni-calendar-item--restday-text[data-v-65626c58] {
673 673
   color: #e43d33;
674 674
 }
675
+.uni-calendar-item--workday-texts[data-v-65626c58] {
676
+  color: #c0c0c0;
677
+}
678
+.uni-calendar-item--restday-texts[data-v-65626c58] {
679
+  color: #c0c0c0;
680
+}
675 681
 /**
676 682
  * 这里是uni-app内置的常用样式变量
677 683
  *
@@ -1637,7 +1643,7 @@ to {
1637 1643
 		height: 100%;
1638 1644
 }
1639 1645
 .container[data-v-c23aac3f] {
1640
-		background: linear-gradient(to bottom, #007545 -40%, #f0f5f5 40%, #f0f5f5 100%);
1646
+		background: linear-gradient(to bottom, #007545 -50%, #f0f5f5 40%, #f0f5f5 100%);
1641 1647
 		box-sizing: border-box;
1642 1648
 		padding-bottom:0.03125rem;
1643 1649
 }
@@ -1646,6 +1652,7 @@ to {
1646 1652
 		border: 0.3125rem solid #007545;
1647 1653
 }
1648 1654
 .liquid_text[data-v-c23aac3f] {
1655
+		font-size: 1.1875rem;
1649 1656
 		color: #fff;
1650 1657
 }
1651 1658
 .container_title[data-v-c23aac3f] {
@@ -1708,14 +1715,11 @@ to {
1708 1715
 .income_yesterday2[data-v-c23aac3f],
1709 1716
 	.income_moon2[data-v-c23aac3f],
1710 1717
 	.income_tired2[data-v-c23aac3f] {
1711
-		font-size: 0.8125rem;
1718
+		font-size: 0.875rem;
1712 1719
 		font-weight: 600;
1713 1720
 }
1714
-.qiun_data[data-v-c23aac3f] {
1715
-		width: 100%;
1716
-		padding: 0.5rem;
1717
-		overflow: auto;
1718
-		box-sizing: border-box;
1721
+.income_unit[data-v-c23aac3f]{
1722
+		font-size: 0.625rem;
1719 1723
 }
1720 1724
 .qiun_title[data-v-c23aac3f] {
1721 1725
 		height: 12%;
@@ -1725,8 +1729,8 @@ to {
1725 1729
 .power_box[data-v-c23aac3f] {
1726 1730
 		width: 100%;
1727 1731
 		padding: 0 0.625rem;
1728
-		box-sizing: border-box;
1729 1732
 		margin-bottom: 0.9375rem;
1733
+		box-sizing: border-box;
1730 1734
 }
1731 1735
 .power_box1[data-v-c23aac3f] {
1732 1736
 		width: 100%;
@@ -1736,8 +1740,8 @@ to {
1736 1740
 .power_box2[data-v-c23aac3f]{
1737 1741
 	width: 100%;
1738 1742
 	padding: 0 0.625rem;
1739
-	box-sizing: border-box;
1740 1743
    margin-bottom: 0.9375rem;
1744
+	box-sizing: border-box;
1741 1745
 }
1742 1746
 .powerstation[data-v-c23aac3f] {
1743 1747
 		width: 100%;
@@ -1780,11 +1784,17 @@ to {
1780 1784
 	.power_tired1[data-v-c23aac3f] {
1781 1785
 		font-size: 0.8125rem;
1782 1786
 		margin-left:0.3125rem;
1783
-		color: #999999;
1787
+		color: #999;
1788
+}
1789
+.power_yesterday11[data-v-c23aac3f]{
1790
+		font-size: 0.8125rem;
1791
+		margin-left:0.3125rem;
1792
+		color: #222;
1784 1793
 }
1785 1794
 .power_moon2[data-v-c23aac3f],.power_yesterday2[data-v-c23aac3f],.power_tired2[data-v-c23aac3f]{
1786 1795
 	margin-top:0.3125rem;
1787
-	font-size: 0.75rem;
1796
+	font-size: 0.875rem;
1797
+	font-weight: 600;
1788 1798
 }
1789 1799
 .toptabbar[data-v-c23aac3f] {
1790 1800
 		width: 100%;
@@ -1900,9 +1910,11 @@ to {
1900 1910
 }
1901 1911
 .energy_boxtitle1[data-v-c23aac3f] {
1902 1912
 		font-size: 0.875rem;
1913
+		margin-top: 0.1875rem;
1914
+		font-weight: 600;
1903 1915
 }
1904 1916
 .energy_boxtitle2[data-v-c23aac3f] {
1905
-		font-size: 0.875rem;
1917
+		font-size: 0.8125rem;
1906 1918
 		margin-top: 0.125rem;
1907 1919
 }
1908 1920
 .energy_right[data-v-c23aac3f] {
@@ -1916,7 +1928,7 @@ to {
1916 1928
 		justify-content: center;
1917 1929
 }
1918 1930
 .energy_boxright1[data-v-c23aac3f] {
1919
-		padding: 0.1875rem 0.25rem;
1931
+		padding: 0.1875rem 1.25rem;
1920 1932
 		font-size: 0.8125rem;
1921 1933
 		border-radius: 1.5625rem;
1922 1934
 		display: flex;
@@ -1986,6 +1998,8 @@ to {
1986 1998
 		border-radius: 0.3125rem;
1987 1999
 		background-color: #ffffff;
1988 2000
 		margin-top: 0.625rem;
2001
+		overflow: hidden;
2002
+		box-sizing: border-box;
1989 2003
 }
1990 2004
 .power_iconstrategy[data-v-c23aac3f]{
1991 2005
 		flex-direction: column;
@@ -2006,13 +2020,13 @@ to {
2006 2020
 }
2007 2021
 .power_strategy[data-v-c23aac3f]{
2008 2022
 		font-size: 0.75rem;
2009
-		color: #B2D5CB;
2023
+		color: #ccc;
2010 2024
 		display: flex;
2011 2025
 		align-items: center;
2012 2026
 }
2013 2027
 .power_strategy1[data-v-c23aac3f]{
2014 2028
 		font-size: 0.75rem;
2015
-		color: #B2D5CB;
2029
+		color: #999999;
2016 2030
 		display: flex;
2017 2031
 		align-items: center;
2018 2032
 }
@@ -2161,4 +2175,4 @@ to {
2161 2175
 .popupbutton[data-v-c23aac3f]{
2162 2176
 			display: flex;
2163 2177
 }
2164
-	
2178
+	 

+ 679
- 7
unpackage/dist/dev/app-plus/pages/product/index.css Wyświetl plik

@@ -1,3 +1,670 @@
1
+/**
2
+ * 这里是uni-app内置的常用样式变量
3
+ *
4
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
5
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
6
+ *
7
+ */
8
+/**
9
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
10
+ *
11
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
12
+ */
13
+/* 颜色变量 */
14
+/* 行为相关颜色 */
15
+/* 文字基本颜色 */
16
+/* 背景颜色 */
17
+/* 边框颜色 */
18
+/* 尺寸变量 */
19
+/* 文字尺寸 */
20
+/* 图片尺寸 */
21
+/* Border Radius */
22
+/* 水平间距 */
23
+/* 垂直间距 */
24
+/* 透明度 */
25
+/* 文章场景相关 */
26
+.uniui-cart-filled[data-v-d31e1c47]:before {
27
+  content: "\e6d0";
28
+}
29
+.uniui-gift-filled[data-v-d31e1c47]:before {
30
+  content: "\e6c4";
31
+}
32
+.uniui-color[data-v-d31e1c47]:before {
33
+  content: "\e6cf";
34
+}
35
+.uniui-wallet[data-v-d31e1c47]:before {
36
+  content: "\e6b1";
37
+}
38
+.uniui-settings-filled[data-v-d31e1c47]:before {
39
+  content: "\e6ce";
40
+}
41
+.uniui-auth-filled[data-v-d31e1c47]:before {
42
+  content: "\e6cc";
43
+}
44
+.uniui-shop-filled[data-v-d31e1c47]:before {
45
+  content: "\e6cd";
46
+}
47
+.uniui-staff-filled[data-v-d31e1c47]:before {
48
+  content: "\e6cb";
49
+}
50
+.uniui-vip-filled[data-v-d31e1c47]:before {
51
+  content: "\e6c6";
52
+}
53
+.uniui-plus-filled[data-v-d31e1c47]:before {
54
+  content: "\e6c7";
55
+}
56
+.uniui-folder-add-filled[data-v-d31e1c47]:before {
57
+  content: "\e6c8";
58
+}
59
+.uniui-color-filled[data-v-d31e1c47]:before {
60
+  content: "\e6c9";
61
+}
62
+.uniui-tune-filled[data-v-d31e1c47]:before {
63
+  content: "\e6ca";
64
+}
65
+.uniui-calendar-filled[data-v-d31e1c47]:before {
66
+  content: "\e6c0";
67
+}
68
+.uniui-notification-filled[data-v-d31e1c47]:before {
69
+  content: "\e6c1";
70
+}
71
+.uniui-wallet-filled[data-v-d31e1c47]:before {
72
+  content: "\e6c2";
73
+}
74
+.uniui-medal-filled[data-v-d31e1c47]:before {
75
+  content: "\e6c3";
76
+}
77
+.uniui-fire-filled[data-v-d31e1c47]:before {
78
+  content: "\e6c5";
79
+}
80
+.uniui-refreshempty[data-v-d31e1c47]:before {
81
+  content: "\e6bf";
82
+}
83
+.uniui-location-filled[data-v-d31e1c47]:before {
84
+  content: "\e6af";
85
+}
86
+.uniui-person-filled[data-v-d31e1c47]:before {
87
+  content: "\e69d";
88
+}
89
+.uniui-personadd-filled[data-v-d31e1c47]:before {
90
+  content: "\e698";
91
+}
92
+.uniui-arrowthinleft[data-v-d31e1c47]:before {
93
+  content: "\e6d2";
94
+}
95
+.uniui-arrowthinup[data-v-d31e1c47]:before {
96
+  content: "\e6d3";
97
+}
98
+.uniui-arrowthindown[data-v-d31e1c47]:before {
99
+  content: "\e6d4";
100
+}
101
+.uniui-back[data-v-d31e1c47]:before {
102
+  content: "\e6b9";
103
+}
104
+.uniui-forward[data-v-d31e1c47]:before {
105
+  content: "\e6ba";
106
+}
107
+.uniui-arrow-right[data-v-d31e1c47]:before {
108
+  content: "\e6bb";
109
+}
110
+.uniui-arrow-left[data-v-d31e1c47]:before {
111
+  content: "\e6bc";
112
+}
113
+.uniui-arrow-up[data-v-d31e1c47]:before {
114
+  content: "\e6bd";
115
+}
116
+.uniui-arrow-down[data-v-d31e1c47]:before {
117
+  content: "\e6be";
118
+}
119
+.uniui-arrowthinright[data-v-d31e1c47]:before {
120
+  content: "\e6d1";
121
+}
122
+.uniui-down[data-v-d31e1c47]:before {
123
+  content: "\e6b8";
124
+}
125
+.uniui-bottom[data-v-d31e1c47]:before {
126
+  content: "\e6b8";
127
+}
128
+.uniui-arrowright[data-v-d31e1c47]:before {
129
+  content: "\e6d5";
130
+}
131
+.uniui-right[data-v-d31e1c47]:before {
132
+  content: "\e6b5";
133
+}
134
+.uniui-up[data-v-d31e1c47]:before {
135
+  content: "\e6b6";
136
+}
137
+.uniui-top[data-v-d31e1c47]:before {
138
+  content: "\e6b6";
139
+}
140
+.uniui-left[data-v-d31e1c47]:before {
141
+  content: "\e6b7";
142
+}
143
+.uniui-arrowup[data-v-d31e1c47]:before {
144
+  content: "\e6d6";
145
+}
146
+.uniui-eye[data-v-d31e1c47]:before {
147
+  content: "\e651";
148
+}
149
+.uniui-eye-filled[data-v-d31e1c47]:before {
150
+  content: "\e66a";
151
+}
152
+.uniui-eye-slash[data-v-d31e1c47]:before {
153
+  content: "\e6b3";
154
+}
155
+.uniui-eye-slash-filled[data-v-d31e1c47]:before {
156
+  content: "\e6b4";
157
+}
158
+.uniui-info-filled[data-v-d31e1c47]:before {
159
+  content: "\e649";
160
+}
161
+.uniui-reload[data-v-d31e1c47]:before {
162
+  content: "\e6b2";
163
+}
164
+.uniui-micoff-filled[data-v-d31e1c47]:before {
165
+  content: "\e6b0";
166
+}
167
+.uniui-map-pin-ellipse[data-v-d31e1c47]:before {
168
+  content: "\e6ac";
169
+}
170
+.uniui-map-pin[data-v-d31e1c47]:before {
171
+  content: "\e6ad";
172
+}
173
+.uniui-location[data-v-d31e1c47]:before {
174
+  content: "\e6ae";
175
+}
176
+.uniui-starhalf[data-v-d31e1c47]:before {
177
+  content: "\e683";
178
+}
179
+.uniui-star[data-v-d31e1c47]:before {
180
+  content: "\e688";
181
+}
182
+.uniui-star-filled[data-v-d31e1c47]:before {
183
+  content: "\e68f";
184
+}
185
+.uniui-calendar[data-v-d31e1c47]:before {
186
+  content: "\e6a0";
187
+}
188
+.uniui-fire[data-v-d31e1c47]:before {
189
+  content: "\e6a1";
190
+}
191
+.uniui-medal[data-v-d31e1c47]:before {
192
+  content: "\e6a2";
193
+}
194
+.uniui-font[data-v-d31e1c47]:before {
195
+  content: "\e6a3";
196
+}
197
+.uniui-gift[data-v-d31e1c47]:before {
198
+  content: "\e6a4";
199
+}
200
+.uniui-link[data-v-d31e1c47]:before {
201
+  content: "\e6a5";
202
+}
203
+.uniui-notification[data-v-d31e1c47]:before {
204
+  content: "\e6a6";
205
+}
206
+.uniui-staff[data-v-d31e1c47]:before {
207
+  content: "\e6a7";
208
+}
209
+.uniui-vip[data-v-d31e1c47]:before {
210
+  content: "\e6a8";
211
+}
212
+.uniui-folder-add[data-v-d31e1c47]:before {
213
+  content: "\e6a9";
214
+}
215
+.uniui-tune[data-v-d31e1c47]:before {
216
+  content: "\e6aa";
217
+}
218
+.uniui-auth[data-v-d31e1c47]:before {
219
+  content: "\e6ab";
220
+}
221
+.uniui-person[data-v-d31e1c47]:before {
222
+  content: "\e699";
223
+}
224
+.uniui-email-filled[data-v-d31e1c47]:before {
225
+  content: "\e69a";
226
+}
227
+.uniui-phone-filled[data-v-d31e1c47]:before {
228
+  content: "\e69b";
229
+}
230
+.uniui-phone[data-v-d31e1c47]:before {
231
+  content: "\e69c";
232
+}
233
+.uniui-email[data-v-d31e1c47]:before {
234
+  content: "\e69e";
235
+}
236
+.uniui-personadd[data-v-d31e1c47]:before {
237
+  content: "\e69f";
238
+}
239
+.uniui-chatboxes-filled[data-v-d31e1c47]:before {
240
+  content: "\e692";
241
+}
242
+.uniui-contact[data-v-d31e1c47]:before {
243
+  content: "\e693";
244
+}
245
+.uniui-chatbubble-filled[data-v-d31e1c47]:before {
246
+  content: "\e694";
247
+}
248
+.uniui-contact-filled[data-v-d31e1c47]:before {
249
+  content: "\e695";
250
+}
251
+.uniui-chatboxes[data-v-d31e1c47]:before {
252
+  content: "\e696";
253
+}
254
+.uniui-chatbubble[data-v-d31e1c47]:before {
255
+  content: "\e697";
256
+}
257
+.uniui-upload-filled[data-v-d31e1c47]:before {
258
+  content: "\e68e";
259
+}
260
+.uniui-upload[data-v-d31e1c47]:before {
261
+  content: "\e690";
262
+}
263
+.uniui-weixin[data-v-d31e1c47]:before {
264
+  content: "\e691";
265
+}
266
+.uniui-compose[data-v-d31e1c47]:before {
267
+  content: "\e67f";
268
+}
269
+.uniui-qq[data-v-d31e1c47]:before {
270
+  content: "\e680";
271
+}
272
+.uniui-download-filled[data-v-d31e1c47]:before {
273
+  content: "\e681";
274
+}
275
+.uniui-pyq[data-v-d31e1c47]:before {
276
+  content: "\e682";
277
+}
278
+.uniui-sound[data-v-d31e1c47]:before {
279
+  content: "\e684";
280
+}
281
+.uniui-trash-filled[data-v-d31e1c47]:before {
282
+  content: "\e685";
283
+}
284
+.uniui-sound-filled[data-v-d31e1c47]:before {
285
+  content: "\e686";
286
+}
287
+.uniui-trash[data-v-d31e1c47]:before {
288
+  content: "\e687";
289
+}
290
+.uniui-videocam-filled[data-v-d31e1c47]:before {
291
+  content: "\e689";
292
+}
293
+.uniui-spinner-cycle[data-v-d31e1c47]:before {
294
+  content: "\e68a";
295
+}
296
+.uniui-weibo[data-v-d31e1c47]:before {
297
+  content: "\e68b";
298
+}
299
+.uniui-videocam[data-v-d31e1c47]:before {
300
+  content: "\e68c";
301
+}
302
+.uniui-download[data-v-d31e1c47]:before {
303
+  content: "\e68d";
304
+}
305
+.uniui-help[data-v-d31e1c47]:before {
306
+  content: "\e679";
307
+}
308
+.uniui-navigate-filled[data-v-d31e1c47]:before {
309
+  content: "\e67a";
310
+}
311
+.uniui-plusempty[data-v-d31e1c47]:before {
312
+  content: "\e67b";
313
+}
314
+.uniui-smallcircle[data-v-d31e1c47]:before {
315
+  content: "\e67c";
316
+}
317
+.uniui-minus-filled[data-v-d31e1c47]:before {
318
+  content: "\e67d";
319
+}
320
+.uniui-micoff[data-v-d31e1c47]:before {
321
+  content: "\e67e";
322
+}
323
+.uniui-closeempty[data-v-d31e1c47]:before {
324
+  content: "\e66c";
325
+}
326
+.uniui-clear[data-v-d31e1c47]:before {
327
+  content: "\e66d";
328
+}
329
+.uniui-navigate[data-v-d31e1c47]:before {
330
+  content: "\e66e";
331
+}
332
+.uniui-minus[data-v-d31e1c47]:before {
333
+  content: "\e66f";
334
+}
335
+.uniui-image[data-v-d31e1c47]:before {
336
+  content: "\e670";
337
+}
338
+.uniui-mic[data-v-d31e1c47]:before {
339
+  content: "\e671";
340
+}
341
+.uniui-paperplane[data-v-d31e1c47]:before {
342
+  content: "\e672";
343
+}
344
+.uniui-close[data-v-d31e1c47]:before {
345
+  content: "\e673";
346
+}
347
+.uniui-help-filled[data-v-d31e1c47]:before {
348
+  content: "\e674";
349
+}
350
+.uniui-paperplane-filled[data-v-d31e1c47]:before {
351
+  content: "\e675";
352
+}
353
+.uniui-plus[data-v-d31e1c47]:before {
354
+  content: "\e676";
355
+}
356
+.uniui-mic-filled[data-v-d31e1c47]:before {
357
+  content: "\e677";
358
+}
359
+.uniui-image-filled[data-v-d31e1c47]:before {
360
+  content: "\e678";
361
+}
362
+.uniui-locked-filled[data-v-d31e1c47]:before {
363
+  content: "\e668";
364
+}
365
+.uniui-info[data-v-d31e1c47]:before {
366
+  content: "\e669";
367
+}
368
+.uniui-locked[data-v-d31e1c47]:before {
369
+  content: "\e66b";
370
+}
371
+.uniui-camera-filled[data-v-d31e1c47]:before {
372
+  content: "\e658";
373
+}
374
+.uniui-chat-filled[data-v-d31e1c47]:before {
375
+  content: "\e659";
376
+}
377
+.uniui-camera[data-v-d31e1c47]:before {
378
+  content: "\e65a";
379
+}
380
+.uniui-circle[data-v-d31e1c47]:before {
381
+  content: "\e65b";
382
+}
383
+.uniui-checkmarkempty[data-v-d31e1c47]:before {
384
+  content: "\e65c";
385
+}
386
+.uniui-chat[data-v-d31e1c47]:before {
387
+  content: "\e65d";
388
+}
389
+.uniui-circle-filled[data-v-d31e1c47]:before {
390
+  content: "\e65e";
391
+}
392
+.uniui-flag[data-v-d31e1c47]:before {
393
+  content: "\e65f";
394
+}
395
+.uniui-flag-filled[data-v-d31e1c47]:before {
396
+  content: "\e660";
397
+}
398
+.uniui-gear-filled[data-v-d31e1c47]:before {
399
+  content: "\e661";
400
+}
401
+.uniui-home[data-v-d31e1c47]:before {
402
+  content: "\e662";
403
+}
404
+.uniui-home-filled[data-v-d31e1c47]:before {
405
+  content: "\e663";
406
+}
407
+.uniui-gear[data-v-d31e1c47]:before {
408
+  content: "\e664";
409
+}
410
+.uniui-smallcircle-filled[data-v-d31e1c47]:before {
411
+  content: "\e665";
412
+}
413
+.uniui-map-filled[data-v-d31e1c47]:before {
414
+  content: "\e666";
415
+}
416
+.uniui-map[data-v-d31e1c47]:before {
417
+  content: "\e667";
418
+}
419
+.uniui-refresh-filled[data-v-d31e1c47]:before {
420
+  content: "\e656";
421
+}
422
+.uniui-refresh[data-v-d31e1c47]:before {
423
+  content: "\e657";
424
+}
425
+.uniui-cloud-upload[data-v-d31e1c47]:before {
426
+  content: "\e645";
427
+}
428
+.uniui-cloud-download-filled[data-v-d31e1c47]:before {
429
+  content: "\e646";
430
+}
431
+.uniui-cloud-download[data-v-d31e1c47]:before {
432
+  content: "\e647";
433
+}
434
+.uniui-cloud-upload-filled[data-v-d31e1c47]:before {
435
+  content: "\e648";
436
+}
437
+.uniui-redo[data-v-d31e1c47]:before {
438
+  content: "\e64a";
439
+}
440
+.uniui-images-filled[data-v-d31e1c47]:before {
441
+  content: "\e64b";
442
+}
443
+.uniui-undo-filled[data-v-d31e1c47]:before {
444
+  content: "\e64c";
445
+}
446
+.uniui-more[data-v-d31e1c47]:before {
447
+  content: "\e64d";
448
+}
449
+.uniui-more-filled[data-v-d31e1c47]:before {
450
+  content: "\e64e";
451
+}
452
+.uniui-undo[data-v-d31e1c47]:before {
453
+  content: "\e64f";
454
+}
455
+.uniui-images[data-v-d31e1c47]:before {
456
+  content: "\e650";
457
+}
458
+.uniui-paperclip[data-v-d31e1c47]:before {
459
+  content: "\e652";
460
+}
461
+.uniui-settings[data-v-d31e1c47]:before {
462
+  content: "\e653";
463
+}
464
+.uniui-search[data-v-d31e1c47]:before {
465
+  content: "\e654";
466
+}
467
+.uniui-redo-filled[data-v-d31e1c47]:before {
468
+  content: "\e655";
469
+}
470
+.uniui-list[data-v-d31e1c47]:before {
471
+  content: "\e644";
472
+}
473
+.uniui-mail-open-filled[data-v-d31e1c47]:before {
474
+  content: "\e63a";
475
+}
476
+.uniui-hand-down-filled[data-v-d31e1c47]:before {
477
+  content: "\e63c";
478
+}
479
+.uniui-hand-down[data-v-d31e1c47]:before {
480
+  content: "\e63d";
481
+}
482
+.uniui-hand-up-filled[data-v-d31e1c47]:before {
483
+  content: "\e63e";
484
+}
485
+.uniui-hand-up[data-v-d31e1c47]:before {
486
+  content: "\e63f";
487
+}
488
+.uniui-heart-filled[data-v-d31e1c47]:before {
489
+  content: "\e641";
490
+}
491
+.uniui-mail-open[data-v-d31e1c47]:before {
492
+  content: "\e643";
493
+}
494
+.uniui-heart[data-v-d31e1c47]:before {
495
+  content: "\e639";
496
+}
497
+.uniui-loop[data-v-d31e1c47]:before {
498
+  content: "\e633";
499
+}
500
+.uniui-pulldown[data-v-d31e1c47]:before {
501
+  content: "\e632";
502
+}
503
+.uniui-scan[data-v-d31e1c47]:before {
504
+  content: "\e62a";
505
+}
506
+.uniui-bars[data-v-d31e1c47]:before {
507
+  content: "\e627";
508
+}
509
+.uniui-checkbox[data-v-d31e1c47]:before {
510
+  content: "\e62b";
511
+}
512
+.uniui-checkbox-filled[data-v-d31e1c47]:before {
513
+  content: "\e62c";
514
+}
515
+.uniui-shop[data-v-d31e1c47]:before {
516
+  content: "\e62f";
517
+}
518
+.uniui-headphones[data-v-d31e1c47]:before {
519
+  content: "\e630";
520
+}
521
+.uniui-cart[data-v-d31e1c47]:before {
522
+  content: "\e631";
523
+}
524
+@font-face {
525
+  font-family: uniicons;
526
+  src: url("../../assets/uniicons.32e978a5.ttf");
527
+}
528
+.uni-icons[data-v-d31e1c47] {
529
+  font-family: uniicons;
530
+  text-decoration: none;
531
+  text-align: center;
532
+}
533
+/**
534
+ * 这里是uni-app内置的常用样式变量
535
+ *
536
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
537
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
538
+ *
539
+ */
540
+/**
541
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
542
+ *
543
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
544
+ */
545
+/* 颜色变量 */
546
+/* 行为相关颜色 */
547
+/* 文字基本颜色 */
548
+/* 背景颜色 */
549
+/* 边框颜色 */
550
+/* 尺寸变量 */
551
+/* 文字尺寸 */
552
+/* 图片尺寸 */
553
+/* Border Radius */
554
+/* 水平间距 */
555
+/* 垂直间距 */
556
+/* 透明度 */
557
+/* 文章场景相关 */
558
+.uni-status-bar[data-v-7920e3e0] {
559
+  height: 20px;
560
+}
561
+/**
562
+ * 这里是uni-app内置的常用样式变量
563
+ *
564
+ * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
565
+ * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
566
+ *
567
+ */
568
+/**
569
+ * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
570
+ *
571
+ * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
572
+ */
573
+/* 颜色变量 */
574
+/* 行为相关颜色 */
575
+/* 文字基本颜色 */
576
+/* 背景颜色 */
577
+/* 边框颜色 */
578
+/* 尺寸变量 */
579
+/* 文字尺寸 */
580
+/* 图片尺寸 */
581
+/* Border Radius */
582
+/* 水平间距 */
583
+/* 垂直间距 */
584
+/* 透明度 */
585
+/* 文章场景相关 */
586
+.uni-nav-bar-text[data-v-26544265] {
587
+  font-size: 1.0625rem;
588
+}
589
+.uni-nav-bar-right-text[data-v-26544265] {
590
+  font-size: 12px;
591
+}
592
+.uni-navbar__content[data-v-26544265] {
593
+  position: relative;
594
+  background-color: transparent;
595
+}
596
+.uni-navbar-btn-text[data-v-26544265] {
597
+  display: flex;
598
+  flex-direction: column;
599
+  justify-content: flex-start;
600
+  align-items: center;
601
+  line-height: 12px;
602
+}
603
+.uni-navbar__header[data-v-26544265] {
604
+  display: flex;
605
+  padding: 0 10px;
606
+  flex-direction: row;
607
+  height: 44px;
608
+  font-size: 12px;
609
+}
610
+.uni-navbar__header-btns[data-v-26544265] {
611
+  overflow: hidden;
612
+  display: flex;
613
+  flex-wrap: nowrap;
614
+  flex-direction: row;
615
+  width: 3.75rem;
616
+  justify-content: center;
617
+  align-items: center;
618
+}
619
+.uni-navbar__header-btns-left[data-v-26544265] {
620
+  display: flex;
621
+  width: 3.75rem;
622
+  justify-content: flex-start;
623
+  align-items: center;
624
+}
625
+.uni-navbar__header-btns-right[data-v-26544265] {
626
+  display: flex;
627
+  flex-direction: row;
628
+  justify-content: flex-end;
629
+  align-items: center;
630
+}
631
+.uni-navbar__header-container[data-v-26544265] {
632
+  display: flex;
633
+  flex: 1;
634
+  padding: 0 10px;
635
+  overflow: hidden;
636
+}
637
+.uni-navbar__header-container-inner[data-v-26544265] {
638
+  display: flex;
639
+  flex: 1;
640
+  flex-direction: row;
641
+  align-items: center;
642
+  justify-content: center;
643
+  font-size: 12px;
644
+  overflow: hidden;
645
+}
646
+.uni-navbar__placeholder-view[data-v-26544265] {
647
+  height: 44px;
648
+}
649
+.uni-navbar--fixed[data-v-26544265] {
650
+  position: fixed;
651
+  z-index: 99;
652
+  left: 0;
653
+  right: 0;
654
+}
655
+.uni-navbar--shadow[data-v-26544265] {
656
+  box-shadow: 0 1px 6px #ccc;
657
+}
658
+.uni-navbar--border[data-v-26544265] {
659
+  border-bottom-width: 0.03125rem;
660
+  border-bottom-style: solid;
661
+  border-bottom-color: #eee;
662
+}
663
+.uni-ellipsis-1[data-v-26544265] {
664
+  overflow: hidden;
665
+  white-space: nowrap;
666
+  text-overflow: ellipsis;
667
+}
1 668
 
2 669
 .uni-page[data-v-a911e391] {
3 670
 		width: 100%;
@@ -6,16 +673,20 @@
6 673
 .container[data-v-a911e391] {
7 674
 		box-sizing: border-box;
8 675
 		padding-bottom: 0.625rem;
9
-		padding-top: 2.75rem;
10 676
 		background: linear-gradient(to bottom, #f0f5f5 -40%, #f0f5f5 40%, #f0f5f5 100%);
11 677
 }
12
-.container_top[data-v-a911e391]{
678
+.container_navbar[data-v-a911e391]{
13 679
 	width: 100%;
14
-	height: 2.75rem;
15
-	color: #222;
16 680
 	position: fixed;
17
-  left: 0;
18
-  top: 0;
681
+	top: 0;
682
+	left: 0;
683
+	padding: 0;
684
+	z-index: 1;
685
+}
686
+.container_top[data-v-a911e391]{
687
+	width: 100%;
688
+	height: 2.5rem;
689
+	background-color:rgba(255, 255, 255, 0.5);
19 690
 }
20 691
 .account_number[data-v-a911e391] {
21 692
 		width: 100%;
@@ -178,9 +849,10 @@
178 849
 }
179 850
 .prompt[data-v-a911e391]{
180 851
 		  position: fixed;
181
-		   top: 3.0625rem;
852
+		   top: 2.5rem;
182 853
 		   right: 0.625rem;
183 854
 		   text-align: right;
855
+		   z-index: 9;
184 856
 }
185 857
 .promptimage[data-v-a911e391]{
186 858
 		  width: 1.875rem;

+ 1443
- 0
unpackage/dist/dev/app-plus/pages/report/index.css
Plik diff jest za duży
Wyświetl plik


+ 62
- 1
unpackage/dist/dev/app-plus/pages/user/index.css Wyświetl plik

@@ -377,6 +377,7 @@ to {
377 377
 }
378 378
 .user[data-v-79e6a490]{
379 379
    display: flex;
380
+   margin-top: 1.875rem;
380 381
 }
381 382
 .user_to[data-v-79e6a490]{
382 383
    width: 3.125rem;
@@ -391,9 +392,11 @@ to {
391 392
 }
392 393
 .user_name1[data-v-79e6a490]{
393 394
    font-size: 0.875rem;
395
+   color: #ffffff;
394 396
 }
395 397
 .user_name2[data-v-79e6a490]{
396 398
    font-size: 0.75rem;
399
+   color: #ffffff;
397 400
 }
398 401
 .equipment[data-v-79e6a490]{
399 402
  width: 100%;
@@ -496,7 +499,7 @@ to {
496 499
    background-color: #ffffff;
497 500
     padding: 0.3125rem 0;
498 501
     box-sizing: border-box;
499
-    margin-top: 0.9375rem;
502
+    margin-top: 3.75rem;
500 503
  box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.1);
501 504
 }
502 505
 .allocation_2[data-v-79e6a490]{
@@ -574,4 +577,62 @@ uni-button[data-v-79e6a490]{
574 577
    border: none !important;
575 578
    display: flex;
576 579
 }
580
+.avatar-edit-container[data-v-79e6a490] {
581
+   display: inline-block;
582
+   position: relative;
583
+}
584
+.avatar-wrapper[data-v-79e6a490] {
585
+   position: relative;
586
+   border-radius: 50%;
587
+   overflow: hidden;
588
+   cursor: pointer;
589
+   transition: all 0.3s ease;
590
+   box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
591
+}
592
+.avatar-img[data-v-79e6a490] {
593
+   width: 100%;
594
+   height: 100%;
595
+   object-fit: cover;
596
+   display: block;
597
+   transition: transform 0.3s ease;
598
+}
599
+.avatar-wrapper:hover .avatar-img[data-v-79e6a490] {
600
+   transform: scale(1.05);
601
+}
602
+.edit-overlay[data-v-79e6a490] {
603
+   position: absolute;
604
+   top: 0;
605
+   left: 0;
606
+   width: 100%;
607
+   height: 100%;
608
+   background-color: rgba(0, 0, 0, 0.6);
609
+   display: flex;
610
+   align-items: center;
611
+   justify-content: center;
612
+   color: white;
613
+   border-radius: 50%;
614
+}
615
+.edit-content[data-v-79e6a490] {
616
+   text-align: center;
617
+}
618
+.edit-icon[data-v-79e6a490] {
619
+   font-size: 24px;
620
+   margin-bottom: 8px;
621
+   display: block;
622
+}
623
+.edit-text[data-v-79e6a490] {
624
+   font-size: 14px;
625
+   display: block;
626
+   font-weight: 500;
627
+}
628
+.file-input[data-v-79e6a490] {
629
+   display: none;
630
+}
577 631
  
632
+ /* 过渡动画 */
633
+.fade-enter-active[data-v-79e6a490], .fade-leave-active[data-v-79e6a490] {
634
+   transition: opacity 0.3s;
635
+}
636
+.fade-enter[data-v-79e6a490], .fade-leave-to[data-v-79e6a490] {
637
+   opacity: 0;
638
+}

BIN
unpackage/dist/dev/app-plus/static/battery.png Wyświetl plik


BIN
unpackage/dist/dev/app-plus/static/bj.png Wyświetl plik


BIN
unpackage/dist/dev/app-plus/static/chi.png Wyświetl plik


BIN
unpackage/dist/dev/app-plus/static/dian.png Wyświetl plik


BIN
unpackage/dist/dev/app-plus/static/jumpto.png Wyświetl plik


BIN
unpackage/dist/dev/app-plus/static/loading.gif Wyświetl plik


+ 0
- 0
unpackage/dist/dev/app-plus/static/ring - 副本.png Wyświetl plik


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików

Ładowanie…
Anuluj
Zapisz