traffic-diagram 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.trae/documents/Update README.md for Traffic Lane Component.md +37 -0
  2. package/.trae/documents/npm Publish Plan.md +27 -0
  3. package/.trae/documents/plan_20251222_071731.md +64 -0
  4. package/.trae/documents/plan_20251222_074833.md +23 -0
  5. package/.trae/documents/plan_20251222_081357.md +23 -0
  6. package/README.md +311 -0
  7. package/dist/demo.html +10 -0
  8. package/dist/static/css/chunk-src.895fe3a6.css +1 -0
  9. package/dist/static/img/demo.160f90e8.png +0 -0
  10. package/dist/static/img/demo.18a57edc.gif +0 -0
  11. package/dist/static/img/demo.c7910627.gif +0 -0
  12. package/dist/traffic-diagram.common.chunk-lodash.js +17212 -0
  13. package/dist/traffic-diagram.common.chunk-src.js +2015 -0
  14. package/dist/traffic-diagram.common.js +33788 -0
  15. package/dist/traffic-diagram.umd.chunk-lodash.js +17212 -0
  16. package/dist/traffic-diagram.umd.chunk-src.js +2015 -0
  17. package/dist/traffic-diagram.umd.js +33798 -0
  18. package/dist/traffic-diagram.umd.min.chunk-lodash.js +9 -0
  19. package/dist/traffic-diagram.umd.min.chunk-src.js +1 -0
  20. package/dist/traffic-diagram.umd.min.js +12 -0
  21. package/package.json +46 -0
  22. package/src/App.vue +269 -0
  23. package/src/assets/images/green-wave/demo.gif +0 -0
  24. package/src/assets/images/traffic-lane/demo.gif +0 -0
  25. package/src/assets/images/traffic-lane/demo.png +0 -0
  26. package/src/assets/images/traffic-lane/directon.png +0 -0
  27. package/src/assets/images/traffic-lane/left-ui.png +0 -0
  28. package/src/assets/images/traffic-lane/left.png +0 -0
  29. package/src/assets/images/traffic-lane/leftRight-ui.png +0 -0
  30. package/src/assets/images/traffic-lane/leftRight.png +0 -0
  31. package/src/assets/images/traffic-lane/otherPic-ui.png +0 -0
  32. package/src/assets/images/traffic-lane/otherPic.png +0 -0
  33. package/src/assets/images/traffic-lane/right-ui.png +0 -0
  34. package/src/assets/images/traffic-lane/right.png +0 -0
  35. package/src/assets/images/traffic-lane/straight-ui.png +0 -0
  36. package/src/assets/images/traffic-lane/straight.png +0 -0
  37. package/src/assets/images/traffic-lane/straightLeft-ui.png +0 -0
  38. package/src/assets/images/traffic-lane/straightLeft.png +0 -0
  39. package/src/assets/images/traffic-lane/straightLeftRight-ui.png +0 -0
  40. package/src/assets/images/traffic-lane/straightLeftRight.png +0 -0
  41. package/src/assets/images/traffic-lane/straightRight-ui.png +0 -0
  42. package/src/assets/images/traffic-lane/straightRight.png +0 -0
  43. package/src/assets/images/traffic-lane/turnAround-ui.png +0 -0
  44. package/src/assets/images/traffic-lane/turnAround.png +0 -0
  45. package/src/components/green-wave/index.vue +671 -0
  46. package/src/components/traffic-lane/index.vue +1020 -0
  47. package/src/index.js +32 -0
  48. package/src/libs/bus.js +24 -0
  49. package/src/libs/pics-load-tool.js +23 -0
  50. package/src/main.js +14 -0
  51. package/vue.config.js +279 -0
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "traffic-diagram",
3
+ "version": "1.0.9",
4
+ "description": "Vue components for visualizing traffic diagrams.",
5
+ "main": "dist/traffic-diagram.umd.js",
6
+ "module": "dist/traffic-diagram.common.js",
7
+ "keywords": ["vue", "lane", "traffic", "greenwave", "intersection"],
8
+ "private": false,
9
+ "scripts": {
10
+ "serve": "vue-cli-service serve",
11
+ "build": "vue-cli-service build --report",
12
+ "test": "vue-cli-service build --mode test",
13
+ "testServe": "vue-cli-service serve --mode test",
14
+ "eslint": "eslint --fix --ext .js,.vue src",
15
+ "stylelint": "stylelint src/**/*.{vue,css,scss} --fix --allow-empty-input",
16
+ "prepare": "",
17
+ "build:lib": "vue-cli-service build --target lib --name traffic-diagram src/index.js"
18
+ },
19
+ "husky": {
20
+ "hooks": {
21
+ "pre-commit": "lint-staged"
22
+ }
23
+ },
24
+ "lint-staged": {
25
+ "src/**/*.{vue,js}": [
26
+ "eslint --fix"
27
+ ]
28
+ },
29
+ "dependencies": {
30
+ "fabric": "^5.5.2",
31
+ "lodash": "^4.17.21",
32
+ "sass-resources-loader": "^2.2.5",
33
+ "vue": "^2.6.14"
34
+ },
35
+ "devDependencies": {
36
+ "@vue/cli-plugin-babel": "^4.5.19",
37
+ "@vue/cli-plugin-eslint": "^4.5.19",
38
+ "@vue/cli-service": "^4.5.19",
39
+ "esbuild-loader": "^2.21.0",
40
+ "sass": "^1.69.5",
41
+ "sass-loader": "^10.4.1",
42
+ "stylelint": "^13.13.1",
43
+ "stylelint-webpack-plugin": "^2.2.2",
44
+ "vue-template-compiler": "^2.6.14"
45
+ }
46
+ }
package/src/App.vue ADDED
@@ -0,0 +1,269 @@
1
+ <template>
2
+ <div id="app">
3
+ <traffic-line
4
+ v-if="mockLaneData.length"
5
+ :laneDiagramData="mockLaneData"
6
+ :canvasHeight="500"
7
+ :laneWidth="25"
8
+ :clickEvent="true"
9
+ :congestionFactorVisible="true"
10
+ configType="LaneConfig"
11
+ @changeLaneDir="changeLaneDir">
12
+ </traffic-line>
13
+ <green-wave
14
+ v-if="mockGreenWaveData.crossData.length"
15
+ :forwardDirection="true"
16
+ :canvasHeight="650"
17
+ :interval="mockGreenWaveData.cycle"
18
+ :crossData="mockGreenWaveData.crossData">
19
+ </green-wave>
20
+ </div>
21
+ </template>
22
+ <script>
23
+ import greenWave from './components/green-wave/index.vue';
24
+ import trafficLine from './components/traffic-lane/index.vue';
25
+
26
+ export default {
27
+ components: {
28
+ greenWave,
29
+ trafficLine,
30
+ },
31
+
32
+ data() {
33
+ return {
34
+ mockLaneData: [],
35
+ mockGreenWaveData: {
36
+ crossData: [],
37
+ cycle: 0
38
+ },
39
+ };
40
+ },
41
+
42
+ mounted() {
43
+ this.initData();
44
+ },
45
+
46
+ methods: {
47
+ initData() {
48
+ this.initLaneData();
49
+ this.initGreenWaveData();
50
+ },
51
+
52
+ /**
53
+ * 初始化车道数据
54
+ */
55
+ initLaneData() {
56
+ this.mockLaneData = [
57
+ {
58
+ "id": "52b17035c5560d0021fd4e386642d6bf",
59
+ "laneDirCode": "E_L01",
60
+ "laneDirName": "直行",
61
+ "inDirection": "东",
62
+ "laneNo": "01",
63
+ "congestionFactor": 0.5, // 拥堵系数
64
+ },
65
+ {
66
+ "id": "28c2d680f39454b5b7a7a3ffa77a23bd",
67
+ "laneDirCode": "E_L02",
68
+ "laneDirName": "直行",
69
+ "inDirection": "东",
70
+ "laneNo": "02",
71
+ "phaseNo": "6",
72
+ },
73
+ {
74
+ "id": "a21ddda40adfe8a055b74c8937261ae3",
75
+ "laneDirCode": "E_L03",
76
+ "laneDirName": "右转",
77
+ "inDirection": "东",
78
+ "laneNo": "03",
79
+ },
80
+ {
81
+ "id": "c79958b2864ead9f6075a6dd9dbe3094",
82
+ "laneDirCode": "N_L01",
83
+ "laneDirName": "左转",
84
+ "inDirection": "北",
85
+ "laneNo": "01",
86
+ },
87
+ {
88
+ "id": "fd330e2c5d646de3a8051e2bc047d547",
89
+ "laneDirCode": "N_L02",
90
+ "laneDirName": "直行",
91
+ "inDirection": "北",
92
+ "laneNo": "02",
93
+ },
94
+ {
95
+ "id": "0d1bdeea13bd295df1776fc5aac5f786",
96
+ "laneDirCode": "N_L03",
97
+ "laneDirName": "右转",
98
+ "inDirection": "北",
99
+ "laneNo": "03",
100
+ },
101
+ {
102
+ "id": "8e351adcde8a164ca7515772079effed",
103
+ "laneDirCode": "S_L01",
104
+ "laneDirName": "左转",
105
+ "inDirection": "南",
106
+ "laneNo": "01",
107
+ },
108
+ {
109
+ "id": "50268ea834b4102ea81548bb0586c030",
110
+ "laneDirCode": "S_L02",
111
+ "laneDirName": "直行",
112
+ "inDirection": "南",
113
+ "laneNo": "02",
114
+ },
115
+ {
116
+ "id": "964db6841a3ad07bacb813c4a5aaa263",
117
+ "laneDirCode": "S_L03",
118
+ "laneDirName": "右转",
119
+ "inDirection": "南",
120
+ "laneNo": "03",
121
+ },
122
+ {
123
+ "id": "6a9fa57f3df1c12f03e3ccf448a095a9",
124
+ "laneDirCode": "W_L01",
125
+ "laneDirName": "左转",
126
+ "inDirection": "西",
127
+ "laneNo": "01",
128
+ },
129
+ {
130
+ "id": "b1924d04c9c1af8067716c687d24a941",
131
+ "laneDirCode": "W_L02",
132
+ "laneDirName": "直行",
133
+ "inDirection": "西",
134
+ "laneNo": "02",
135
+ },
136
+ {
137
+ "id": "059195bca3cc13dcc7adf85edc26a79a",
138
+ "laneDirCode": "W_L03",
139
+ "laneDirName": "右转",
140
+ "inDirection": "西",
141
+ "laneNo": "03",
142
+ }
143
+ ];
144
+ },
145
+ /**
146
+ * 初始化绿波数据
147
+ */
148
+ initGreenWaveData() {
149
+ Object.assign(this.mockGreenWaveData, {
150
+ crossData: [
151
+ {
152
+ "crossId": "306069",
153
+ "crossRoadName": "国庆路与羌溪路路口",
154
+ "forwardGreen": 40,
155
+ "reverseGreen": 40,
156
+ "forwardPhaseDiff": 700,
157
+ "reversePhaseDiff": 500,
158
+ "forwardSpeed": 50,
159
+ "reverseSpeed": 50,
160
+ "lightFlag": null,
161
+ "cycleFlag": null,
162
+ "createTime": "2025-12-16 16:22:50",
163
+ "crossDistance": 0,
164
+ "orderNumber": 1,
165
+ "greenFlag": true,
166
+ "phaseDiffFlag": null,
167
+ "transMap": {}
168
+ },
169
+ {
170
+ "id": "9fe40fac9b1d30e3e132abf4bcbaa57e",
171
+ "subzoneSchemeInfoId": "1b6823b6d58d2dc10ead6c0e7d914095",
172
+ "crossId": "656559",
173
+ "crossRoadName": "国庆路与万桥路路口",
174
+ "forwardGreen": 40,
175
+ "reverseGreen": 40,
176
+ "forwardPhaseDiff": 13,
177
+ "reversePhaseDiff": 13,
178
+ "forwardSpeed": 50,
179
+ "reverseSpeed": 50,
180
+ "lightFlag": null,
181
+ "cycleFlag": null,
182
+ "createTime": "2025-12-16 16:22:50",
183
+ "crossDistance": 197,
184
+ "orderNumber": 2,
185
+ "greenFlag": true,
186
+ "phaseDiffFlag": true,
187
+ "transMap": {}
188
+ },
189
+ {
190
+ "id": "96536e49b833ad9be145153be48e3734",
191
+ "subzoneSchemeInfoId": "1b6823b6d58d2dc10ead6c0e7d914095",
192
+ "crossId": "996706",
193
+ "crossRoadName": "国庆路与慧学巷路口",
194
+ "forwardGreen": 40,
195
+ "reverseGreen": 40,
196
+ "forwardPhaseDiff": 40,
197
+ "reversePhaseDiff": 40,
198
+ "forwardSpeed": 50,
199
+ "reverseSpeed": 50,
200
+ "lightFlag": null,
201
+ "cycleFlag": null,
202
+ "createTime": "2025-12-16 16:22:50",
203
+ "crossDistance": 204,
204
+ "orderNumber": 3,
205
+ "greenFlag": true,
206
+ "phaseDiffFlag": true,
207
+ "transMap": {}
208
+ },
209
+ {
210
+ "id": "74be7031280014a1fff29875f4863dc4",
211
+ "subzoneSchemeInfoId": "1b6823b6d58d2dc10ead6c0e7d914095",
212
+ "crossId": "100996",
213
+ "crossRoadName": "国庆路与济川路路口",
214
+ "forwardGreen": 40,
215
+ "reverseGreen": 40,
216
+ "forwardPhaseDiff": 20,
217
+ "reversePhaseDiff": 20,
218
+ "forwardSpeed": 50,
219
+ "reverseSpeed": 50,
220
+ "lightFlag": null,
221
+ "cycleFlag": null,
222
+ "createTime": "2025-12-16 16:22:50",
223
+ "crossDistance": 208,
224
+ "orderNumber": 4,
225
+ "greenFlag": true,
226
+ "phaseDiffFlag": true,
227
+ "transMap": {}
228
+ },
229
+ {
230
+ "id": "734e600b0d6aece11fda87ff3cf83c21",
231
+ "subzoneSchemeInfoId": "1b6823b6d58d2dc10ead6c0e7d914095",
232
+ "crossId": "922333",
233
+ "crossRoadName": "国庆路与润泰路路口",
234
+ "forwardGreen": 40,
235
+ "reverseGreen": 40,
236
+ "forwardPhaseDiff": 20,
237
+ "reversePhaseDiff": 20,
238
+ "forwardSpeed": 50,
239
+ "reverseSpeed": 50,
240
+ "lightFlag": null,
241
+ "cycleFlag": null,
242
+ "createTime": "2025-12-16 16:22:50",
243
+ "crossDistance": 676,
244
+ "orderNumber": 5,
245
+ "greenFlag": true,
246
+ "phaseDiffFlag": true,
247
+ "transMap": {}
248
+ }
249
+ ],
250
+ cycle: 70
251
+ });
252
+ },
253
+ changeLaneDir(data) {
254
+ const tempIndex = this.mockLaneData.findIndex(item => item.laneDirCode === data.laneDirCode);
255
+ const temp = this.mockLaneData[tempIndex];
256
+ temp.laneDirName = data.laneDirName;
257
+ this.$set(this.mockLaneData, tempIndex, temp);
258
+ },
259
+ },
260
+ };
261
+ </script>
262
+ <style lang="scss">
263
+ #app {
264
+ color: #2c3e50;
265
+ font-family: 'Source Han Sans CN' !important;
266
+ -webkit-font-smoothing: antialiased;
267
+ -moz-osx-font-smoothing: grayscale;
268
+ }
269
+ </style>