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/src/index.js ADDED
@@ -0,0 +1,32 @@
1
+ import Vue from 'vue';
2
+ import BUS from '@/libs/bus.js';
3
+ import pics from '@/libs/pics-load-tool';
4
+ import trafficLane from './components/traffic-lane/index.vue';
5
+ import greenWave from './components/green-wave/index.vue';
6
+
7
+ // 初始化事件总线
8
+ BUS(Vue);
9
+
10
+ // 注册全局图片对象
11
+ Vue.prototype.pics = pics;
12
+ window.pics = pics;
13
+
14
+ // 组件安装方法
15
+ trafficLane.install = function(Vue) {
16
+ Vue.component('traffic-lane', trafficLane);
17
+ };
18
+
19
+ greenWave.install = function(Vue) {
20
+ Vue.component('green-wave', greenWave);
21
+ };
22
+
23
+ // 导出组件
24
+ export default {
25
+ trafficLane,
26
+ greenWave
27
+ };
28
+
29
+ export {
30
+ trafficLane,
31
+ greenWave
32
+ };
@@ -0,0 +1,24 @@
1
+ export default (Vue) => {
2
+ const eventHub = new Vue();
3
+ Vue.prototype.bus = {
4
+ /**
5
+ * @param {any} event 第一个参数是事件对象,第二个参数是接收到消息信息,可以是任意类型
6
+ * @method $on 事件订阅, 监听当前实例上的自定义事件。https://cn.vuejs.org/v2/api/#vm-on
7
+ * @method $off 取消事件订阅,移除自定义事件监听器。 https://cn.vuejs.org/v2/api/#vm-off https://github.com/vuejs/vue/issues/3399
8
+ * @method $emit 事件广播, 触发当前实例上的事件。 https://cn.vuejs.org/v2/api/#vm-emit
9
+ * @method $once 事件订阅, 监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器。 https://cn.vuejs.org/v2/api/#vm-once
10
+ */
11
+ $on(...event) {
12
+ eventHub.$on(...event);
13
+ },
14
+ $off(...event) {
15
+ eventHub.$off(...event);
16
+ },
17
+ $once(...event) {
18
+ eventHub.$once(...event);
19
+ },
20
+ $emit(...event) {
21
+ eventHub.$emit(...event);
22
+ },
23
+ };
24
+ };
@@ -0,0 +1,23 @@
1
+ /**
2
+ * des: 将需要静态引用的图片放在img目录中,在需要的地方直接引用
3
+ * 注意:文件名只接受中英文和下划线,推荐英文加下划线组合方式
4
+ * export {文件名,文件名}
5
+ */
6
+
7
+ const picLists = require.context('../assets/images', true, /\.(png|jpg|jpeg|svg|gif|webp)$/i).keys();
8
+ const picMap = (list) => {
9
+ const picName = {};
10
+ list.forEach((e) => {
11
+ try {
12
+ const key = e.replace(/(.*\/)*([^.]+).*/gi, '$2');
13
+ picName[key] = require(`../assets/images${e.slice(1)}`);
14
+ } catch (error) {
15
+ console.error(`Error loading image: ${e}`, error);
16
+ }
17
+ });
18
+ return picName;
19
+ };
20
+
21
+ const pics = picMap(picLists);
22
+
23
+ export default pics;
package/src/main.js ADDED
@@ -0,0 +1,14 @@
1
+ import Vue from 'vue';
2
+ import App from './App.vue';
3
+ // 事件总线
4
+ import BUS from '@/libs/bus.js';
5
+ BUS(Vue);
6
+
7
+ // 引用本地静态图片
8
+ import pics from '@/libs/pics-load-tool';
9
+ Vue.prototype.pics = pics;
10
+ window.pics = pics;
11
+
12
+ new Vue({
13
+ render: h => h(App),
14
+ }).$mount('#app');
package/vue.config.js ADDED
@@ -0,0 +1,279 @@
1
+ const path = require('path');
2
+ function resolve(dir) {
3
+ return path.join(__dirname, dir);
4
+ }
5
+
6
+ const NODE_ENV = process.env.NODE_ENV;
7
+
8
+ module.exports = {
9
+ lintOnSave: false,
10
+ pages: {
11
+ index: {
12
+ entry: 'src/main.js',
13
+ template: 'public/index.html',
14
+ filename: 'index.html',
15
+ },
16
+ },
17
+ // 相对路径
18
+ publicPath: './',
19
+ // 生产环境构建文件的目录
20
+ outputDir: 'dist',
21
+ // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录
22
+ assetsDir: 'static',
23
+ // 生产环境的 source map,可以将其设置为 false 以加速生产环境构建
24
+ productionSourceMap: false,
25
+ // 默认情况下 babel-loader 会忽略所有 node_modules 中的文件。你可以启用本选项,以避免构建后的代码中出现未转译的第三方依赖
26
+ transpileDependencies: [],
27
+ // 开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置
28
+ // 配置高于chainWebpack中关于 css loader 的配置
29
+ css: {
30
+ // 是否构建样式地图,false 将提高构建速度
31
+ sourceMap: false,
32
+ // css预设器配置项
33
+ loaderOptions: {
34
+ css: {
35
+ // options here will be passed to css-loader
36
+ },
37
+ sass: {
38
+ // sass的默认输出格式为expanded,编译时不会转换unicode字符。而sassLoader修改了sass默认输出格式为compressed。
39
+ // 因此我们在配置sassLoader时将输出格式重新改为expanded便能解决问题
40
+ implementation: require('sass'),
41
+ sassOptions: {
42
+ // 生效代码
43
+ outputStyle: 'expanded',
44
+ },
45
+ },
46
+ postcss: {
47
+ // options here will be passed to postcss-loader
48
+ postcssOptions: loaderContext => {
49
+ return {
50
+ // plugins: [
51
+ // {
52
+ // 'postcss-px-to-viewport-8-plugin': {
53
+ // unitToConvert: 'px', // 需要转换的单位,默认为"px"
54
+ // viewportWidth: 1920, // 设计稿的视窗宽度
55
+ // unitPrecision: 6, // 单位转换后保留的精度
56
+ // propList: ['*'], // 能转化为 vw 的属性列表
57
+ // viewportUnit: 'vw', // 希望使用的视窗单位
58
+ // fontViewportUnit: 'vw', // 字体使用的视窗单位
59
+ // selectorBlackList: [], // 需要忽略的 CSS 选择器,不会转为视窗单位,使用原有的 px 等单位
60
+ // minPixelValue: 1, // 设置最小的转换数值,如果为 1 的话,只有大于 1 的值会被转换
61
+ // mediaQuery: true, // 媒体查询里的单位是否需要转换单位
62
+ // replace: true, // 是否直接更换属性值,而不添加备用属性
63
+ // exclude: [], // 忽略某些文件夹下的文件或特定文件,例如 'node_modules' 下的文件
64
+ // include: [], // 如果设置了include,那将只有匹配到的文件才会被转换
65
+ // landscape: false, // 是否添加根据 landscapeWidth 生成的媒体查询条件
66
+ // },
67
+ // },
68
+ // ],
69
+ };
70
+ },
71
+ },
72
+ },
73
+ },
74
+
75
+ configureWebpack: config => {
76
+ // 移除StyleLintPlugin配置,避免依赖不存在的.stylelintrc.js文件
77
+ if (NODE_ENV == 'production') {
78
+ // 移除element-ui图标乱码问题的修复,避免依赖css-unicode-loader
79
+ // config.module.rules
80
+ // .filter(rule => {
81
+ // return rule.test.toString().indexOf('scss') !== -1;
82
+ // })
83
+ // .forEach(rule => {
84
+ // rule.oneOf.forEach(oneOfRule => {
85
+ // oneOfRule.use.splice(oneOfRule.use.indexOf(require.resolve('sass-loader')), 0, {
86
+ // loader: require.resolve('css-unicode-loader'),
87
+ // });
88
+ // });
89
+ // });
90
+ }
91
+ },
92
+
93
+ chainWebpack: chain => {
94
+ // 简化配置,移除sass-resources-loader
95
+ // 全局共享element css 变量
96
+ // const oneOfsMap = chain.module.rule('scss').oneOfs.store;
97
+ // oneOfsMap.forEach(item => {
98
+ // item
99
+ // .use('sass-resources-loader')
100
+ // .loader('sass-resources-loader')
101
+ // .options({
102
+ // resources: resolve('src/styles/element-variables.module.scss'),
103
+ // });
104
+ // });
105
+ // 别名
106
+ chain.resolve.alias
107
+ .set('@', resolve('src'))
108
+ .set('@styles', resolve('src/styles'))
109
+ .set('@assets', resolve('src/assets'))
110
+ .set('@utils', resolve('src/utils'));
111
+
112
+ // svg图片
113
+ chain.module.rule('svg').exclude.add(resolve('src/assets/icons')).end();
114
+ chain.module
115
+ .rule('icons')
116
+ .test(/\.svg$/)
117
+ .include.add(resolve('src/assets/icons'))
118
+ .end()
119
+ .use('svg-sprite-loader')
120
+ .loader('svg-sprite-loader')
121
+ .options({
122
+ symbolId: 'icon-[name]',
123
+ });
124
+
125
+ // 配置代码分割
126
+ if (NODE_ENV == 'production') {
127
+ chain.optimization.splitChunks({
128
+ // all: 不管文件是动态还是非动态载入,统一将文件分离。当页面首次载入会引入所有的包
129
+ // async: 将异步加载的文件分离,首次一般不引入,到需要异步引入的组件才会引入。
130
+ // initial:将异步和非异步的文件分离,如果一个文件被异步引入也被非异步引入,那它会被打包两次(注意和all区别),用于分离页面首次需要加载的包。
131
+ chunks: 'initial',
132
+ // 文件最小打包体积,单位byte,默认30000
133
+ minSize: 30000,
134
+ // 最大异步请求数量,默认5
135
+ maxAsyncRequests: 5,
136
+ // 入口点处的最大并行请求数,默认为3
137
+ maxInitialRequests: 3,
138
+ cacheGroups: {
139
+ element: {
140
+ name: 'chunk-element',
141
+ test: /[\\/]node_modules[\\/]element-ui[\\/]/,
142
+ priority: 1,
143
+ chunks: 'initial',
144
+ },
145
+ echarts: {
146
+ name: 'chunk-echarts',
147
+ test: /[\\/]node_modules[\\/]echarts[\\/]/,
148
+ priority: 1,
149
+ chunks: 'initial',
150
+ },
151
+ quill: {
152
+ name: 'chunk-quill',
153
+ test: /[\\/]node_modules[\\/]quill[\\/]/,
154
+ priority: 1,
155
+ chunks: 'initial',
156
+ },
157
+ jscry: {
158
+ name: 'chunk-jscry',
159
+ test: /[\\/]node_modules[\\/]jsencrypt[\\/]/,
160
+ priority: 1,
161
+ chunks: 'initial',
162
+ },
163
+ geoUtil: {
164
+ name: 'chunk-geoUtil', // split icon into a single package
165
+ priority: 1,
166
+ test: /[\\/]node_modules[\\/]_?@dpark[\\/]_?geo-util(.*)/,
167
+ chunks: 'initial',
168
+ },
169
+ lodash: {
170
+ name: 'chunk-lodash', // split lodash into a single package
171
+ priority: 2,
172
+ test: /[\\/]node_modules[\\/]_?lodash*(.*)/,
173
+ chunks: 'initial',
174
+ },
175
+ codemirror: {
176
+ name: 'chunk-codemirror', // split lodash into a single package
177
+ priority: 2,
178
+ test: /[\\/]node_modules[\\/]_?codemirror*(.*)/,
179
+ chunks: 'initial',
180
+ },
181
+ jquery: {
182
+ name: 'chunk-jquery', // split lodash into a single package
183
+ priority: 2,
184
+ test: /[\\/]node_modules[\\/]_?jquery*(.*)/,
185
+ chunks: 'initial',
186
+ },
187
+ vue: {
188
+ name: 'chunk-vue', // split lodash into a single package
189
+ priority: 2,
190
+ test: /[\\/]node_modules[\\/]_?vue*(.*)/,
191
+ chunks: 'initial',
192
+ },
193
+ axios: {
194
+ name: 'chunk-js-axios', // split lodash into a single package
195
+ priority: 2,
196
+ test: /[\\/]node_modules[\\/]_?axios*(.*)/,
197
+ chunks: 'initial',
198
+ },
199
+ vuedraggable: {
200
+ name: 'chunk-js-vuedraggable', // split lodash into a single package
201
+ priority: 2,
202
+ test: /[\\/]node_modules[\\/]_?vuedraggable*(.*)/,
203
+ chunks: 'initial',
204
+ },
205
+ crypto: {
206
+ name: 'chunk-js-crypto', // split lodash into a single package
207
+ priority: 2,
208
+ test: /[\\/]node_modules[\\/]_?crypto-js*(.*)/,
209
+ chunks: 'initial',
210
+ },
211
+ zrender: {
212
+ name: 'chunk-js-zrender', // split lodash into a single package
213
+ priority: 2,
214
+ test: /[\\/]node_modules[\\/]_?zrender*(.*)/,
215
+ chunks: 'initial',
216
+ },
217
+ turf: {
218
+ name: 'chunk-turf', // split turf into a single package
219
+ priority: 2,
220
+ test: /[\\/]node_modules[\\/]_?@turf(.*)/,
221
+ chunks: 'initial',
222
+ },
223
+ turfJsts: {
224
+ name: 'chunk-turf-jsts', // split turf-jsts into a single package
225
+ priority: 2,
226
+ test: /[\\/]node_modules[\\/]_?turf-jsts(.*)/,
227
+ chunks: 'initial',
228
+ },
229
+ medo: {
230
+ name: 'chunk-medo', // split medo into a single package
231
+ priority: 3,
232
+ test: /[\\/]node_modules[\\/]_?@medo(.*)/,
233
+ chunks: 'initial',
234
+ },
235
+ mapmost: {
236
+ name: 'chunk-mapmost', // split mapmost into a single package
237
+ priority: 2,
238
+ test: /[\\/]node_modules[\\/]_?@mapmost(.*)/,
239
+ chunks: 'initial',
240
+ },
241
+ src: {
242
+ name: 'chunk-src',
243
+ test: /[\\/]src[\\/]/,
244
+ priority: 2,
245
+ chunks: 'initial',
246
+ },
247
+ defaultVendors: {
248
+ name: 'chunk-vendors',
249
+ test: /[\\/]node_modules[\\/]/,
250
+ priority: -10,
251
+ chunks: 'initial',
252
+ },
253
+ common: {
254
+ name: 'chunk-common',
255
+ minChunks: 2,
256
+ priority: -20,
257
+ chunks: 'initial',
258
+ reuseExistingChunk: true,
259
+ },
260
+ },
261
+ });
262
+ }
263
+ },
264
+
265
+ devServer: {
266
+ proxy: {
267
+ '/api': {
268
+ target: 'http://192.168.38.103:8080/taixing',
269
+ changeOrigin: true,
270
+ pathRewrite: {
271
+ '^/api': '',
272
+ },
273
+ }
274
+ },
275
+ overlay: false,
276
+ },
277
+ // 构建时开启多进程处理 babel 编译
278
+ parallel: require('os').cpus().length > 1,
279
+ };