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.
- package/.trae/documents/Update README.md for Traffic Lane Component.md +37 -0
- package/.trae/documents/npm Publish Plan.md +27 -0
- package/.trae/documents/plan_20251222_071731.md +64 -0
- package/.trae/documents/plan_20251222_074833.md +23 -0
- package/.trae/documents/plan_20251222_081357.md +23 -0
- package/README.md +311 -0
- package/dist/demo.html +10 -0
- package/dist/static/css/chunk-src.895fe3a6.css +1 -0
- package/dist/static/img/demo.160f90e8.png +0 -0
- package/dist/static/img/demo.18a57edc.gif +0 -0
- package/dist/static/img/demo.c7910627.gif +0 -0
- package/dist/traffic-diagram.common.chunk-lodash.js +17212 -0
- package/dist/traffic-diagram.common.chunk-src.js +2015 -0
- package/dist/traffic-diagram.common.js +33788 -0
- package/dist/traffic-diagram.umd.chunk-lodash.js +17212 -0
- package/dist/traffic-diagram.umd.chunk-src.js +2015 -0
- package/dist/traffic-diagram.umd.js +33798 -0
- package/dist/traffic-diagram.umd.min.chunk-lodash.js +9 -0
- package/dist/traffic-diagram.umd.min.chunk-src.js +1 -0
- package/dist/traffic-diagram.umd.min.js +12 -0
- package/package.json +46 -0
- package/src/App.vue +269 -0
- package/src/assets/images/green-wave/demo.gif +0 -0
- package/src/assets/images/traffic-lane/demo.gif +0 -0
- package/src/assets/images/traffic-lane/demo.png +0 -0
- package/src/assets/images/traffic-lane/directon.png +0 -0
- package/src/assets/images/traffic-lane/left-ui.png +0 -0
- package/src/assets/images/traffic-lane/left.png +0 -0
- package/src/assets/images/traffic-lane/leftRight-ui.png +0 -0
- package/src/assets/images/traffic-lane/leftRight.png +0 -0
- package/src/assets/images/traffic-lane/otherPic-ui.png +0 -0
- package/src/assets/images/traffic-lane/otherPic.png +0 -0
- package/src/assets/images/traffic-lane/right-ui.png +0 -0
- package/src/assets/images/traffic-lane/right.png +0 -0
- package/src/assets/images/traffic-lane/straight-ui.png +0 -0
- package/src/assets/images/traffic-lane/straight.png +0 -0
- package/src/assets/images/traffic-lane/straightLeft-ui.png +0 -0
- package/src/assets/images/traffic-lane/straightLeft.png +0 -0
- package/src/assets/images/traffic-lane/straightLeftRight-ui.png +0 -0
- package/src/assets/images/traffic-lane/straightLeftRight.png +0 -0
- package/src/assets/images/traffic-lane/straightRight-ui.png +0 -0
- package/src/assets/images/traffic-lane/straightRight.png +0 -0
- package/src/assets/images/traffic-lane/turnAround-ui.png +0 -0
- package/src/assets/images/traffic-lane/turnAround.png +0 -0
- package/src/components/green-wave/index.vue +671 -0
- package/src/components/traffic-lane/index.vue +1020 -0
- package/src/index.js +32 -0
- package/src/libs/bus.js +24 -0
- package/src/libs/pics-load-tool.js +23 -0
- package/src/main.js +14 -0
- package/vue.config.js +279 -0
|
@@ -0,0 +1,2015 @@
|
|
|
1
|
+
((typeof self !== 'undefined' ? self : this)["webpackJsonptraffic_diagram"] = (typeof self !== 'undefined' ? self : this)["webpackJsonptraffic_diagram"] || []).push([[1],{
|
|
2
|
+
|
|
3
|
+
/***/ "17cf":
|
|
4
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
5
|
+
|
|
6
|
+
module.exports = __webpack_require__.p + "static/img/demo.18a57edc.gif";
|
|
7
|
+
|
|
8
|
+
/***/ }),
|
|
9
|
+
|
|
10
|
+
/***/ "1ed1":
|
|
11
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
12
|
+
|
|
13
|
+
// extracted by mini-css-extract-plugin
|
|
14
|
+
|
|
15
|
+
/***/ }),
|
|
16
|
+
|
|
17
|
+
/***/ "2621":
|
|
18
|
+
/***/ (function(module, exports) {
|
|
19
|
+
|
|
20
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAT9JREFUWEftlUEuBEEUhr//EOIKQoTEBisOwFKQWIvMAnEOEzYjVhIL9hzArNgSpxCH+KWle8x09HRVYWyqFr3ofu/9X//1XpX4wbJ9UqRLOk0to9RE2zvATZm/K+k2pVYSgO0V4LEmuCrpKRYiGsD2NPAKTNXE3oF5SW8xECkAz8BCg8iLpMU/A7B9B2y0CNxL2gyFCHbA9hlwGFj4XNJRSGwwQL2YbQ+960taDxGsx2SA7MC3Dti+lLQ/rqlim9D2A7AlqTiwBmsEwPYscA0sSRq7PYkAcyVEvyIYiNjeK8Wrb4OgBifWhscwcASrnI6k3udNWjwiD5lArdawnqROBdAFjltTfjfgC6B0YRtIutMTuEa3oCpgewa4ApYn3oTDf2H7QtLBxMcwxsrYMWyqnY/i7EB2IDuQHfh3Bz4Azh/GIdToBDMAAAAASUVORK5CYII="
|
|
21
|
+
|
|
22
|
+
/***/ }),
|
|
23
|
+
|
|
24
|
+
/***/ "2e1d":
|
|
25
|
+
/***/ (function(module, exports) {
|
|
26
|
+
|
|
27
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA4BJREFUSEuVll9oFHcQx7/f3bvr3eWS3KnppaGkDeiLQu2L2soq/QO2tCJ90MRoW6FS6lsfRFIFS19aBBGfg9W21ohRQWhpMYYaaMBW6JN/IijSslq8XMz9Sc6cudzu6O7enfd3c87j/mbmMzO/+c0s4SbHsj2KKL2E+Y4AKwl2WOoCmSIwIVAumzTP4vPAv43csO7BYLZbVeTQUye9AFTXIEhDIOcMgwP4IqBX69YAfCfm+k1wECKtro5rDzMKuCe3OzBUflQB8Byf20tFDkPw7DutivAaIKsXBRIiJvfldwePFHVLjnwnMzsgPFXh3NH6NjcfPOzzZ/+ByPJmIKB8nPs0dNrSdQA/Zbt9av4mhaFKB/xt/m5wC76h6f05s5rgFUKCi0GEkskZnlXYFdBtgH9o9gyAvnJDIW7Pe0Jr0ct08bv/1MwukD8uBiicDz/e2bqd/pOpHvrUO7XdQh1iXs/2t222DFqGkq+bqud7AK89LZu3CYghOWMFW87NDIjgUH0D0ed621+xszw7oynAeEnPvvyyZqjjgMB+tpxPj4DYVBcg0B9tLQISmqqqJYBAOUjINkCsjBrJKEMXUvcIvFxPQwg981HYzqDl9GRU/IE1FPOxrWvkbjxqN2dDWf8PFGyraw/cZ+uv6QWKeBqEoM9scQBu0vZLahjOq68QIfNs/z21ABdA+sNICRC+kAznX/B0WV68mYX/kxOR2fCa1NcCHASg1ARBzjN8MXEPDUoEQE+9v8QGBC9NdflM9RaANtuRmF+SygcCvOeS3X1GLk2PAA0uGdCTm5bagMhoQoNIWRcx75K5EwMwyqV/JAYAs0GbQp9+d1kBENcURXkGWOxiHMIBto/Eejw+7x1Casay1UXTbxUAY3FNRfMAAY28oq6wR8WyP6fOsGpUFFLUH27ssDPoGItrUNl0BgIMP9zYsd0GRMYT3V7mbwKoHnZ6XCsAxuMaWfaSXUvEzIKoq5IbljjDzpLolakdoFSNa9En10edDMbjmqI2AbB2giGfxLWovXgqFk7n35N7QZQWjgBpEkedcrGbIp+5B27Pp32xN6K1C6do2HU11m+SgwSea2UKkaFgz4O1TuRFqbv0O/968Co9/K7w/N2XPmAIcB55+Sr25kv/VWdY/6+ieC9XYz2qij4Qb4NcCZEX7SMyDpEJCMYMA8OT6zob/rY8AZd9TmuVGM/hAAAAAElFTkSuQmCC"
|
|
28
|
+
|
|
29
|
+
/***/ }),
|
|
30
|
+
|
|
31
|
+
/***/ "5369":
|
|
32
|
+
/***/ (function(module, exports) {
|
|
33
|
+
|
|
34
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA1pJREFUSEuVlk9oXFUUxr/vvpmxk5npm6RNEw0EA9ZFFaGbqkULVShSBBUxTdJSwSqty1JCWjeupAURiiA6SIvWpjZTCwWlEoMUFNRuuhDrpgulxnTS/JtJppkmmfc+mRczzr/3Mt7V455zz++cc8895xFB69Nsj1G0l3CfE7CNYHtJXdAUyZsSr7kspPFW8g8/M2woSBW6LaNTBHoBWIFOkI6gS47DIRyO3q7VrQNEzi72u2AKUiLQcL0wb8Ajy4eiw5WiKkDozOIxGr0PoWFkIrIQQ4TiDeGE5HKweKjlgzV52VDkXH4A4nk/4yCKrqu9BoyBuAzA+EFAHVg+GL9Qkq8CPi90R6ziTYqNPfM0+fbSgdgnpc/IF/NDhDnll0JR+WUn9Bhej972ABuGFy4C2Od/gKeXBuJHK+WRC/fOGLlvBNzTyP39iT5uOJftYcS6FVAtDogrENxCX6IXqYmWqJ34DEAYwEvlLNSTHC07WxlLzx8XcLKZilns3UikZ+0WhLLN6BM4wdhXuVEQexocUK139161PUDMsmoBdbr/2htj/Ep2nEJXJUA0v0o6a6DTlfsLryTZmp61i2FTDRAGRQwQ2F5lBxhn4uvcCqXQfwKdn2fhMCYmVuyuR6qqKvdicg4Q7W9yyUpDub/tPB6FlcjnPqJQvniRRdpXsyuoBJAf52AfxV4uNZPnsk76r6idiH8IF2+W98glJr+dGQdZlSIAN0SljPhuJWTuhbautqszG13DP6vheg/gQQBP1Dg1ztbvZkaB5i55bs8mto7N2pCq74AUpLr2ImCMm76fPo4my3Tm+c0ewBi3qTKF8A7t0UxPKBK+RSi4LQOY3r0KsELrAwQ6RWNt9cLa/MPURQa0irW8Tu1q9wChB5x1IxAwMr2rvc8DtP442x02zm/rzYC7z2zxAOFoMRhALqy41uNzz7atNrvS6vgp0w+aYd92DWBy5yogEgsAsDRRuX9yZ/uXXhOuLKvOXyaPgfAdOCAuSQgTeLnhG/GMYzDzVEf9wFk78ND1TL9Lpgj8r5EpIk/hyJ0dHf4jcw3S+fOdhxHiSQKvrTv0AUfCZTgayjz9YM0DrElRbdgd1zM9loV9IHaD3AZpi6cj3QX5O4RrjoORySc7fX9b/gEvpkFrljgF/wAAAABJRU5ErkJggg=="
|
|
35
|
+
|
|
36
|
+
/***/ }),
|
|
37
|
+
|
|
38
|
+
/***/ "5453":
|
|
39
|
+
/***/ (function(module, exports) {
|
|
40
|
+
|
|
41
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA1RJREFUSEullttrXFUUxr/vnMk008k0l3aSqBjNQxGqoL54ow0kQlEoikiTxooXihhfLaHVf6CCl0chiLdiNIkGb8WaliaQOVT7pIIWpA9qDXSSyWWSmWSSyZzz2XOOGSaTzJyI+2nYa+3vt9da+6w1RLX1XrrdUKSbcLoEHCAYd90FpQhcFYxxh7kRvNTwRyUZbmsYyLWZht64KdINwKx6CdIW9Llt8xRejlwv990CCH+w0uuAA5BiVYW3GrMG2Jc/ERksNW0ChN5fOUlDb0LYPrIgIiE57C+c2P32hmtRKHw2+wzET8rE1wHUBOhu9qGroGfzz9V96p7zAR/n2sJm4TeKdRtiAn4R+K4BDVQDOFAfwVcI3Fs8S2XzduhuPB+57gFqBzNDAHqKDuL3a2vRbvyNZdyBsLsfqc3Fbcd+ATBgGvwotxpJef5/IY/bEd21a3mE1GMllxlePR47xtqz6XaGzWvF1yI4DBlPrhyNngtKeal999DyEcn5GoTx776tvL2f0ZGl0wLObBIjC4LTb5jmBGznVRGOY/PD1Z7YpBfxaKbDkF6kvHDecWy782Z63yp/0gReY/SLxTEQhyvc9icA9/s2ji8/vedR91d0dOkSoC5/Gz9DuK/C+Yus+yo9ReG24HTQyjxVf8j1i325mAB0MOiMgCnGvl1cpxQKdpaVeaLRB3yzkCAYDCALrP8uvY6dAARr6YgP2HNuIUEiEAByjQ3n56ZABqdIsNKPN3mAhvPzCewE4Kao8cLcGFCxyKWZsxYO7/UAjRfmEkBwBAIucu+l2dMof6bbFESUNd8V9wBN46kEFVwDCK+zfizZHgrXXCNUvS1D1mynD9g3kUogoMgC7YJh7vdaxb7J1BBLWsX2L0pWqqPZA8QnZ3YAwPBsR/yYB2hMzLfVGPavATPAmjnoA5otF1ClBmRm3THvWTjU5Dc7d7VcTvaCxmCVWZAV8bv38Qp3ASh23k0Ru+1aPD79SPwz/0MvWa0/Tp8E8b8GDoT+5EMtWwfOBufWK8lehxwg8J9Gpogshb4bD7RUHpkbkNYfbtyJEM8QOBo49AFbwihsnUo+fMuf5Q+k6uxtuZJsN030gOgEeQBSsydAzkC6CmHCtjE8/WBrxb8t/wCthUJrjd12rgAAAABJRU5ErkJggg=="
|
|
42
|
+
|
|
43
|
+
/***/ }),
|
|
44
|
+
|
|
45
|
+
/***/ "64e8":
|
|
46
|
+
/***/ (function(module, exports) {
|
|
47
|
+
|
|
48
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAhxJREFUWEfFlz+oj1EYxz/fLMJAYbhRMvg3KNlYSCxiuMMtG0ooBhQjBgMpFrndgQxK3U2mO1w2C8VgVbiyWFgNXz31qp/rd855z/m95alfv+F9nuf7eZ/zPOecV/xnU4u+7W3ALmBD9/sOfAK+AEuSfvbN2xvA9nrgBDANHCgIzAFzkt6WQHoB2D4NXAW2lxIuex4QZ3MxWQDb+zvh45XCo+4PJF1IxScBbN8Ark8gPBp6U1Lk+8dKFYi1PJOBeAdsBKYKoIuSDlUDRIDtF8DRkeBF4AkQSZc6n5iIi8C5BMgvYLWk+P/Lik1oe02IATuAW5JujxOxHZPxMlOJg5JeVQN0b7gFWCspSj7WbMeUjIXrAqYkfWsCKDWi7T3AU2Bnwnde0kxTD/QQXxW7H7Au47tP0uvBAWxvBj4XIGckzad8ik2YWfO9wJtJxCO2CcB2jN2HScUnAXgOHMsAZMs+GlddAduHgYUhxJsqYDt2u4cJgLgLRGP2tpYKXAHuJhRmJZ3vrd7ShIUtN3nqDT6GNW+Z861egqGE/+RpBrC9EtgKrIjdUNKPFrgmANtxxYrTb7Tj70i6VgtRDWD7FPAoIXRP0uUaiBaA98DujMgmSV/7QrQAuJB87M1nsDG0HSdgnIQpG3vzGRIgd/V6Jim+nnpb9RJEZtsngcfLVO5LutRbuXNsAuggjnSfarEPfJQUR3S1NQNUKyUCfgPzkqIhIsJLqwAAAABJRU5ErkJggg=="
|
|
49
|
+
|
|
50
|
+
/***/ }),
|
|
51
|
+
|
|
52
|
+
/***/ "6ddb":
|
|
53
|
+
/***/ (function(module, exports) {
|
|
54
|
+
|
|
55
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVtJREFUWEftlr0uBVEUhb/1Alq9SiRKnQgJiUSD5N5KwhOoJQo0PIAXoNC4hFBQKK7o6ahVGp3ekpPMyPxdc2cUEjmnO7P3XvvLyt4nI/746I/7EwGiA//TAduzxe2S1K/auEoHbE8DD5mCE0lrTVbW9i6wk6npSDorgRU/2B4FAu14EjuUtNmkeZprOwAEkHDegRlJL1mtkgO2L4DlJGmvYWND7m0J93BSiCtgRdJnqpsDsH0AbDVs2jR9X9J2CcD2OnDUVK1l/oak41D77YDtEeAcmG8pOmzZLdCV9JEDCBfbY8AlMJmo9YDnAcrZCQ9Dez8gbwLoJLFHYFXSa+UMJBBTwDUQtiGcnqRuUdx2OmAh1Jc0V5Fzmmn+BixJevpxCxKIReAmk1iCqAOwnW0epBYk3RUhWz/FdQDDDkQEiA5EB37jQO6nY9APR906tgaoEx42HgGiA9GBL9fygiG6SEn5AAAAAElFTkSuQmCC"
|
|
56
|
+
|
|
57
|
+
/***/ }),
|
|
58
|
+
|
|
59
|
+
/***/ "78da":
|
|
60
|
+
/***/ (function(module, exports) {
|
|
61
|
+
|
|
62
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA55JREFUSEudVV1om2UUfp73y7o2bZq/tqtBooN5o8UbBxPBDgrWwgLCKl3tpjIQxxRkqNUO7wSdKCpD6Bxjwspql26j4BZtu9mC7KrIrjZ3Ieo6f9M2+dI0W7sm33skaY1J+iXdei6/c97nec9znu+8RKU4kdiqpKaL0G0CPEqgCQREMEPyuggntaXDOFhzsxwMbRPHF4OGgSMU2QPAqHgJwBIybFk4jAM1t0pr1xBUfZV6QcM4DhHXOsDFaXJBUV5d3u88U5goInCcvPMWlXwCyQqxgWBWPb6d2e/87L/TeaCqgVQPhKc3DP4/ooCyb/mluq+zn1YITi0Gq5R1jcD9yVKmSQEWlrXRgpdrbuUIqgdTg4D0VBJFgBQFRzNKIgpMAnxcCd4EZHuZc+Glva5uVg8ktrLK+Hkdt5gW0Lrc7bpWBDYsRo2VGgSRdVtpWCKObawNJ98V4qPKt5dDi13uo86h2wEY1geABMRQJxY7XedwOlbv3LzpVwj8ayxK9LH23PwYiPZKBBb0w0ud3una8/PfAejI1Qo0M+mWVHfDDef55FlCnl+DIRhn3UjidwIPViJwpLXH7PLNu0YS2T/2obxhtA4lO32RupFEP4GDpRgC/EHXhUSaAkclAmNphaD+m8Q0gGC+VnQo+ZwvUn8h0Q+xISAzdH9rpmFLIMMAtwDYqW5LjsAdMadB3oDoaoA7RSSUDPki7ovxfpBrOgB5l57R2J8AAzbtHZtP/n3IUx84JiJTNHgHGk8kpj29nqA5AmKXBkLJDl/EPRq3lQhZibzjsVEAz9pINGy2+3P2847FewE0me3ed0CK91L8IkR2QeuQ2dEY8Y7N2XcAjNM7MdurhB/bzoDqw1ib773CnO/yzB5SnQKwWWsJmc80Rvzfz/XDZsiA6qP3UjyoHPoXwn7QovBlrNX/Okjtn5h5A0p9ToFasaqE5toaIw0T2Q6KhyyAlVnOPJJbFQ0/zA4QeLGck4Q4Q/AmRPqKakReUUomLVHvE9hbmBNgaK61sWeF4MpsgMB1QjyV7HrPOXIhrY0W82nfyrLLRtOV6G4YPJtv/57RSgoJgXBf9KnGgnW9WtM8FX1NBF9smCQHjt5/ntzyaf5vL73oA1PR3SBPQu5PruwboEQO/LWjeagQ0/ZpbLg6G9hk6SOrb0TFNQLAAhFegj5sbg+s/+gXsgd+jAchd7tFoY2Cx0A2rdpzBuRPEExaFsLRHc2/lRvZvxxUd2W5o+D/AAAAAElFTkSuQmCC"
|
|
63
|
+
|
|
64
|
+
/***/ }),
|
|
65
|
+
|
|
66
|
+
/***/ "8aaa":
|
|
67
|
+
/***/ (function(module, exports) {
|
|
68
|
+
|
|
69
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAPlJREFUWEftkDEuhEEARt+7gEKjcgFxAQoKCm5BQqOh4BQUNBqbcAsKCgouIC6g0ihc4JNNVrPZ3Zn/F43MlDPzfd/Lk1+cJAfDuHrZt8a+wSRrwOMov64+9enqBZBkHngDFkajH8CS+tkVoi/APbAxNvagbv45QJJz4HDK0IV61AWik4Eke8BVYWBfHdRCVAMkWQGeK4tX1Zeav1UASeaAV2CxphR4B5bVr9L/WoBbYKtUNvZ+p26XMkWAJKfAcaloyvuZejIrOxMgyQ5w3XP8J7ar3kzrKBqYFEySSfdq577OgeFwA2gGmoFmoBloBpqBZqAZ+FcGvgHC1IwhOqX0yQAAAABJRU5ErkJggg=="
|
|
70
|
+
|
|
71
|
+
/***/ }),
|
|
72
|
+
|
|
73
|
+
/***/ "948f":
|
|
74
|
+
/***/ (function(module, exports) {
|
|
75
|
+
|
|
76
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAA6VJREFUaEPVmL1rFkEQxp/nD1BUBAtBU0TwAwSx8KtR0C5KGgMqihgQtVBEbGKhaayCSAiCiBFBghgLJVhYxUIwoFgpCFpEixSKhQbUbmTCXtj33N3bu917Jdu9997NPL/9mJ0ZYokPLnH9aA1ARA4DGAKwAsB9ktfamKxWAIz4RyXBw21AZAfwiC9YskNkBagQ3wpENoBI8dkhsgDUFJ8VIhmgofhsEEkAInIIwFNHeJwEoGHUHk8A9DveTTrYqQAvAewpiVLxtwBMl57vA3AFwP7S818AVpP83eSeSAV4A2C75XiS5ICI7PUAvAXwHMBOWyzJxjoaf6gCRGSrEboKwDjJQfPcCUDyhYj0AHgIYIeB+H9bqJhFEekl+cn67QWw3ukhOdtk23SsXqoB1/e+LaQrkNtf1BYSEU3E+ozzaZKXQ0KaApgtOQ5gDsBtks+qgCsBjPirliGNFutJfvMZTwD4DkDPUzEGSGpU844ggEN8YWgTyQ85AURkHYDPDptBCC9AQPwMyV0tbSG9P87WgXACiMhFADcchl4DOGpHnNyHWES0jijf4urGuRL/AIjICa2gHMI0gvST/FF1sJqeASvERkN0AIiIRpoph0B95lqREIsrlahit/8/F7MSiwCeWavjsJvvLm4nG+AjgN5uqkjxVeRPNsA7AFtSjHbx2zmSa9WfDXAMwIMuikhxdZOkRsrOvlDgHBQ5fh2nbR3iCZI62QvDFUZdmaS+u5DrxxC0GEbvkTxla/BdZL5wGgWRAhC4yDS5O1OewFAqcQTAhGPGFwsX32o0BRCRuwA6Ztj4GCV5weWvKpk7rWmt48MNoXSiCYAWRQA0lJfHSCh9j0mnLwEYsazOk1weOgtNANSeiPwEsMyyfZ2kNgK8oxLAGNZ6QBOsLwDOt5XMiUjhR90+jmkGRwHERB77naYrUNePM4zWNSIiKwGssQucGAAR2QhgluSfuj4rw2isQREZBXDS7NsZAMd1e4UARGQzAI022huaBzBYVTYmn4FAuCwngFrwHACwzdPY+gpAc30753pFcnfspEXfAzEGRaTcmdPPtPAZ9gCMORLGKZLaY200kg5xoG7WAuhgSdF7T7bbF9M+8dElAZgQqz0ju+1SZyYr2yZVxpIBEiCSxWcJo8UMBbaTaxKziM8KYFbC146xIbKJzw5gIHxtGf07q/hWAAyEq57ILr41AAOhld0ds3eGUm7b1m7iqhDXjf+zhNFuCPX5+AtWAppAsGluPQAAAABJRU5ErkJggg=="
|
|
77
|
+
|
|
78
|
+
/***/ }),
|
|
79
|
+
|
|
80
|
+
/***/ "9518":
|
|
81
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
82
|
+
|
|
83
|
+
"use strict";
|
|
84
|
+
/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_9b8515cc_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("e7e7");
|
|
85
|
+
/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_9b8515cc_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_9b8515cc_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
|
|
86
|
+
/* unused harmony reexport * */
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
/***/ }),
|
|
90
|
+
|
|
91
|
+
/***/ "99fc":
|
|
92
|
+
/***/ (function(module, exports) {
|
|
93
|
+
|
|
94
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVtJREFUWEftlTEvBVEQhb9T8wPUOlHIS/RoRScRjYRoRaFQUFBIFAqVRoFoaYmORiIRyYvCL5DQC+3IJPsS1u67k312q532zsz59szcvSIYZrYOfEg6DZaE0hTJMrNZ4CrLHZf0EqmL5CQBzGwUeAaGsoZdSZ1I80hOBKALTOSaHUlaiwikcvoCmNklMF/SZFXSSUogdV4KYGZ7wHaiQUeSO1Q5CgHMbAk4D3R9kjQZyCtNiezALTCd63AnaWYQ4V5tC/DvDpjZLnAg6TMyojoAdoBlYEHSYwqiMgAwB4wBwzmRKcBd8FiRdNYPoipA6sN+nvs4NssKmgBw7etsJH/2oikAh9iQdJh3ogmAV2BR0n3RGAYFOAbeChr7TfC48Bsh6auOHfBr5gK/IvsPOMCWpP3UtlZ1oPQtyAAeJN2kxP28DoARSe8R8VoAosLta9g60DrQOtA60HPgG3HYvyHuUz0OAAAAAElFTkSuQmCC"
|
|
95
|
+
|
|
96
|
+
/***/ }),
|
|
97
|
+
|
|
98
|
+
/***/ "9b08":
|
|
99
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
100
|
+
|
|
101
|
+
module.exports = __webpack_require__.p + "static/img/demo.c7910627.gif";
|
|
102
|
+
|
|
103
|
+
/***/ }),
|
|
104
|
+
|
|
105
|
+
/***/ "a75a":
|
|
106
|
+
/***/ (function(module, exports) {
|
|
107
|
+
|
|
108
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAy5JREFUSEullltIFGEUx///2XXTdF1XXdcKJCFfquduVFCBRBH0UJpZSUQUPiaSRUQRYRQRRC8iRUVWWmF016igwvK9evGhCKH1suuumpd1Z07NbqM7O+t66XsZ5pwz53fO953vnCFSrcbRYkWUMkLbLMBygh7dXCB9BL4JlLcatRYczvg+nRsmVTSMFtkUufDXSRkAW8ogSFUgD1SVx3Ek42eirQXguDFSoYENEHGmdGxVDivg0fChjKZ4lQlgvz5SQ0UuQZA8s5mIhIjG2sihhZcN00lHjtvDeyG8M2/nUx4FlH3hA1l3dVEMcGu0yGGLfKUwKz5IgZwN73eeMWSOO4N1FKV+pkSEMhxW7StQlfEzCkhvGroPoDzhw3Njlc7ThmzB3aFqgtcgMtvtax6rdO5h+u1gMR22rvhqEQ3nx/Y6TxnO0++F9pPKTQDKTNHH6VUJqyXMbBmsE2AqbUH9SHn2SZOjq10L4FxmjfwgxgGKbruwZTD6TKigE8x8GGoDURpVCC/83pV9Yg5RTppmPgpZAABeM+txsJuCJbqlRjn2e6f7ynwAztagBSBAN51PQxMUsUed6nUMHBnakdM4V0j2kyQAMkLXi+AEDEDMqypUqga3uSZvZPazQDXJq/GFENruNp2J6/mAdYvIcea89HeDjG5R3IpAYVmw1N1qyFxtgYsU1Brvwa25JkDOq0CyM+imu93fBvw7ZHMNjFOTnYGtea8McW67/6YAVfr7QGmeCeBu9yc7g9fMe9Nfh/gyneXm+7fkmwB5b/qtGQhO0tXmK7Y70roISd2WE8D9m8yA/HdmgIBqRLGVRKPIf993n9ZWkTKXvo0eUwae932mDARo7t/o2RM1cn8IFKUp6pe5zIDe9QUmQMHH3ikAOTSh2VYObMiNNTt9eTt8FaDSNNt23bPODPB2/ANQn6is7FnnuRe7WnGr8HNPDYj/GjgQ1PrWeK0Dx+As7vRVaGQDgTmNTCGGKTj6a5V3+pFpQAo//VoKO+sJ7J5x6Os3X/AIqhz3rV30I7EyUg4Pb6ev2GZDOYhNIJdDpCDWs9gLkW8QvFNVNPesLpz2t+UPhD0oayTUbjEAAAAASUVORK5CYII="
|
|
109
|
+
|
|
110
|
+
/***/ }),
|
|
111
|
+
|
|
112
|
+
/***/ "acb9":
|
|
113
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
114
|
+
|
|
115
|
+
"use strict";
|
|
116
|
+
/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_52147a10_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("1ed1");
|
|
117
|
+
/* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_52147a10_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_52147a10_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__);
|
|
118
|
+
/* unused harmony reexport * */
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
/***/ }),
|
|
122
|
+
|
|
123
|
+
/***/ "b15d":
|
|
124
|
+
/***/ (function(module, exports) {
|
|
125
|
+
|
|
126
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA1hJREFUSEulVk1vE1cUPeeNYzCO80Vch1aKyAIhUdTdQEFQiaoKCxaoUoCEoFYIoWQPCNpVd1Sq+AEBtRKBJASKiqANSSO+xZfVZcsGVS0oEk7tEDtOHbDz5sI4TDzjOA6Gt3zv3nPux9G9jyh3Ts20KFG7CetzAdYRDNvmAokTeCRQ1y1a53Ew8M9iMCz50DPTbCj5/jXIbgBG2SBILZALWvMougJPi20XEPh/ynRYYA9EQmWBFz5OK7A7eyDQ537yEPh+zByikh8gKJ3ZUoyEiMUjswdWnHBM54H8vdN7ITz7zuAFRAFlX/ar6n77ao7g9Eyz35j9i8LqckEKMJD9O7gP39Gy7fyn021Uqh+QKrefUKaz2vcxvg48zRMs70ufA7BnqQrMKQgnX3aGuhxbf19ml6LVDxFfkf/gi85QO5f3JlvoNx4vqRaPt5yYaa857FwFBtJ7QJwF4CbRktVrGDw/dUyA4x5/ZZiZtuAf+bshWYbxEk3fzxdun8CFdDshZyAFEgLfMPhzagREq6eGImamrW6OoIITvJjaC6DXVY1RVl9KjlHwkRtHK5iZne9A8EuyleBlQpa96dcYQ1dSORY1iAIzVSFB6NeprbT0MMAVTrBCzrJ2KJlbqACaqR2FDGqHklGImG8cLUBOpXY0dDtANcOpDdTWKIAaT0XJl6y7OjEG0lMi0cpDUDc8GQXmCX5LPqn/El3M2WD1V59/IsQNAA0l2jXG+t8nRgBvky0YZqq1kEHD6ERUBCbIB5NW9gtsb/rfBgtdn1pbpXO3RBAppQUBRrnyWuIYimRKJWZiW3heRSuvJaIAnBK9va4E37J2JNbi81c9JsQ1lr0EjTcTUdgZVHAE1LPKWJMfFY234+foGhWiYCa2FDJovB2PssIMBBhMfBZuzxPU33neXKX0n84OsEAPQfhuPMqCipbOg0znLGP95NaGuWFnn8i9WAeo+uxxrQ2aiY2FDCL34m4VlSegvVHZOb45PGAbehZL04PxQyDea+FAcCT2aWThwnHC+vBhrMMiewhUtDKFmKag+9mGyOIr0yFpuv9sNXw8TmDXW4xxLYKL0HI0tmnVv8X1K7t7Iw9jLYYBe9ZvA7kOIh/kAcj/IPIIghtaY3B8Y9Oi35ZXd/FNayYX77gAAAAASUVORK5CYII="
|
|
127
|
+
|
|
128
|
+
/***/ }),
|
|
129
|
+
|
|
130
|
+
/***/ "b635":
|
|
131
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
132
|
+
|
|
133
|
+
"use strict";
|
|
134
|
+
|
|
135
|
+
// EXPORTS
|
|
136
|
+
__webpack_require__.d(__webpack_exports__, "c", function() { return /* reexport */ traffic_lane; });
|
|
137
|
+
__webpack_require__.d(__webpack_exports__, "b", function() { return /* reexport */ green_wave; });
|
|
138
|
+
|
|
139
|
+
// EXTERNAL MODULE: external {"commonjs":"vue","commonjs2":"vue","root":"Vue"}
|
|
140
|
+
var external_commonjs_vue_commonjs2_vue_root_Vue_ = __webpack_require__("8bbf");
|
|
141
|
+
var external_commonjs_vue_commonjs2_vue_root_Vue_default = /*#__PURE__*/__webpack_require__.n(external_commonjs_vue_commonjs2_vue_root_Vue_);
|
|
142
|
+
|
|
143
|
+
// CONCATENATED MODULE: ./src/libs/bus.js
|
|
144
|
+
/* harmony default export */ var bus = (Vue => {
|
|
145
|
+
const eventHub = new Vue();
|
|
146
|
+
Vue.prototype.bus = {
|
|
147
|
+
/**
|
|
148
|
+
* @param {any} event 第一个参数是事件对象,第二个参数是接收到消息信息,可以是任意类型
|
|
149
|
+
* @method $on 事件订阅, 监听当前实例上的自定义事件。https://cn.vuejs.org/v2/api/#vm-on
|
|
150
|
+
* @method $off 取消事件订阅,移除自定义事件监听器。 https://cn.vuejs.org/v2/api/#vm-off https://github.com/vuejs/vue/issues/3399
|
|
151
|
+
* @method $emit 事件广播, 触发当前实例上的事件。 https://cn.vuejs.org/v2/api/#vm-emit
|
|
152
|
+
* @method $once 事件订阅, 监听一个自定义事件,但是只触发一次,在第一次触发之后移除监听器。 https://cn.vuejs.org/v2/api/#vm-once
|
|
153
|
+
*/
|
|
154
|
+
$on(...event) {
|
|
155
|
+
eventHub.$on(...event);
|
|
156
|
+
},
|
|
157
|
+
$off(...event) {
|
|
158
|
+
eventHub.$off(...event);
|
|
159
|
+
},
|
|
160
|
+
$once(...event) {
|
|
161
|
+
eventHub.$once(...event);
|
|
162
|
+
},
|
|
163
|
+
$emit(...event) {
|
|
164
|
+
eventHub.$emit(...event);
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
});
|
|
168
|
+
// CONCATENATED MODULE: ./src/libs/pics-load-tool.js
|
|
169
|
+
/**
|
|
170
|
+
* des: 将需要静态引用的图片放在img目录中,在需要的地方直接引用
|
|
171
|
+
* 注意:文件名只接受中英文和下划线,推荐英文加下划线组合方式
|
|
172
|
+
* export {文件名,文件名}
|
|
173
|
+
*/
|
|
174
|
+
|
|
175
|
+
const picLists = __webpack_require__("6452").keys();
|
|
176
|
+
const picMap = list => {
|
|
177
|
+
const picName = {};
|
|
178
|
+
list.forEach(e => {
|
|
179
|
+
try {
|
|
180
|
+
const key = e.replace(/(.*\/)*([^.]+).*/gi, '$2');
|
|
181
|
+
picName[key] = __webpack_require__("216e")(`./images${e.slice(1)}`);
|
|
182
|
+
} catch (error) {
|
|
183
|
+
console.error(`Error loading image: ${e}`, error);
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
return picName;
|
|
187
|
+
};
|
|
188
|
+
const pics = picMap(picLists);
|
|
189
|
+
/* harmony default export */ var pics_load_tool = (pics);
|
|
190
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f2351f80-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/traffic-lane/index.vue?vue&type=template&id=52147a10&scoped=true
|
|
191
|
+
var render = function render() {
|
|
192
|
+
var _vm = this,
|
|
193
|
+
_c = _vm._self._c;
|
|
194
|
+
return _c('div', {
|
|
195
|
+
attrs: {
|
|
196
|
+
"id": "canvasWrapper"
|
|
197
|
+
}
|
|
198
|
+
}, [_c('canvas', {
|
|
199
|
+
ref: "road",
|
|
200
|
+
staticClass: "crossing-box"
|
|
201
|
+
}), _c('transition', {
|
|
202
|
+
attrs: {
|
|
203
|
+
"enter-active-class": "animate__animated animate__bounceInLeft"
|
|
204
|
+
}
|
|
205
|
+
}, [_c('div', {
|
|
206
|
+
directives: [{
|
|
207
|
+
name: "show",
|
|
208
|
+
rawName: "v-show",
|
|
209
|
+
value: _vm.showLegend,
|
|
210
|
+
expression: "showLegend"
|
|
211
|
+
}],
|
|
212
|
+
ref: "legendBox",
|
|
213
|
+
staticClass: "legend-box"
|
|
214
|
+
}, _vm._l(this.laneDirections, function (item, index) {
|
|
215
|
+
return _c('div', {
|
|
216
|
+
key: index,
|
|
217
|
+
staticClass: "legend-item",
|
|
218
|
+
style: {
|
|
219
|
+
background: item.laneDirName === _vm.currentLaneDirName ? _vm.laneActiveColor : 'rgba(31, 200, 255, 10%)'
|
|
220
|
+
},
|
|
221
|
+
on: {
|
|
222
|
+
"click": function ($event) {
|
|
223
|
+
return _vm.chooseImg(item);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}, [_c('img', {
|
|
227
|
+
attrs: {
|
|
228
|
+
"src": item.img,
|
|
229
|
+
"alt": ""
|
|
230
|
+
}
|
|
231
|
+
}), _c('div', {
|
|
232
|
+
staticStyle: {
|
|
233
|
+
"color": "#fff"
|
|
234
|
+
}
|
|
235
|
+
}, [_vm._v(_vm._s(item.laneDirName))])]);
|
|
236
|
+
}), 0)])], 1);
|
|
237
|
+
};
|
|
238
|
+
var staticRenderFns = [];
|
|
239
|
+
|
|
240
|
+
// CONCATENATED MODULE: ./src/components/traffic-lane/index.vue?vue&type=template&id=52147a10&scoped=true
|
|
241
|
+
|
|
242
|
+
// EXTERNAL MODULE: ./node_modules/lodash/lodash.js
|
|
243
|
+
var lodash = __webpack_require__("2ef0");
|
|
244
|
+
var lodash_default = /*#__PURE__*/__webpack_require__.n(lodash);
|
|
245
|
+
|
|
246
|
+
// EXTERNAL MODULE: ./node_modules/fabric/dist/fabric.js
|
|
247
|
+
var fabric = __webpack_require__("7a94");
|
|
248
|
+
|
|
249
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/left.png
|
|
250
|
+
var left = __webpack_require__("e63c");
|
|
251
|
+
var left_default = /*#__PURE__*/__webpack_require__.n(left);
|
|
252
|
+
|
|
253
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/straight.png
|
|
254
|
+
var straight = __webpack_require__("8aaa");
|
|
255
|
+
var straight_default = /*#__PURE__*/__webpack_require__.n(straight);
|
|
256
|
+
|
|
257
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/right.png
|
|
258
|
+
var right = __webpack_require__("e418");
|
|
259
|
+
var right_default = /*#__PURE__*/__webpack_require__.n(right);
|
|
260
|
+
|
|
261
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/straightLeft.png
|
|
262
|
+
var straightLeft = __webpack_require__("b943");
|
|
263
|
+
var straightLeft_default = /*#__PURE__*/__webpack_require__.n(straightLeft);
|
|
264
|
+
|
|
265
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/leftRight.png
|
|
266
|
+
var leftRight = __webpack_require__("6ddb");
|
|
267
|
+
var leftRight_default = /*#__PURE__*/__webpack_require__.n(leftRight);
|
|
268
|
+
|
|
269
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/straightRight.png
|
|
270
|
+
var straightRight = __webpack_require__("99fc");
|
|
271
|
+
var straightRight_default = /*#__PURE__*/__webpack_require__.n(straightRight);
|
|
272
|
+
|
|
273
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/straightLeftRight.png
|
|
274
|
+
var straightLeftRight = __webpack_require__("2621");
|
|
275
|
+
var straightLeftRight_default = /*#__PURE__*/__webpack_require__.n(straightLeftRight);
|
|
276
|
+
|
|
277
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/turnAround.png
|
|
278
|
+
var turnAround = __webpack_require__("cdd5");
|
|
279
|
+
var turnAround_default = /*#__PURE__*/__webpack_require__.n(turnAround);
|
|
280
|
+
|
|
281
|
+
// EXTERNAL MODULE: ./src/assets/images/traffic-lane/otherPic.png
|
|
282
|
+
var otherPic = __webpack_require__("64e8");
|
|
283
|
+
var otherPic_default = /*#__PURE__*/__webpack_require__.n(otherPic);
|
|
284
|
+
|
|
285
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/traffic-lane/index.vue?vue&type=script&lang=js
|
|
286
|
+
|
|
287
|
+
|
|
288
|
+
// 方向对应的图标
|
|
289
|
+
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
|
|
298
|
+
/* harmony default export */ var traffic_lanevue_type_script_lang_js = ({
|
|
299
|
+
name: 'traffic-lane',
|
|
300
|
+
props: {
|
|
301
|
+
/**
|
|
302
|
+
* 画布数据
|
|
303
|
+
* - Possible values:
|
|
304
|
+
* - Array
|
|
305
|
+
* 字段描述:
|
|
306
|
+
* - id: string - 车道ID
|
|
307
|
+
* - laneDirCode: string - 车道方向编码
|
|
308
|
+
* - laneDirName: string - 车道方向名称
|
|
309
|
+
* - inDirection: string - 车道入口方向
|
|
310
|
+
* - laneNo: number - 车道编号
|
|
311
|
+
* - congestionFactor: number - 拥堵值
|
|
312
|
+
*/
|
|
313
|
+
laneDiagramData: {
|
|
314
|
+
type: Array,
|
|
315
|
+
default: () => []
|
|
316
|
+
},
|
|
317
|
+
/**
|
|
318
|
+
* 画布宽度
|
|
319
|
+
*/
|
|
320
|
+
canvasHeight: {
|
|
321
|
+
type: Number,
|
|
322
|
+
default: 300
|
|
323
|
+
},
|
|
324
|
+
/**
|
|
325
|
+
* 配置项(只有进行车道-流向配置时可在canvas图上点击替换方向图标
|
|
326
|
+
* - Possible values:
|
|
327
|
+
* - LaneConfig
|
|
328
|
+
*/
|
|
329
|
+
configType: {
|
|
330
|
+
type: String,
|
|
331
|
+
default: ''
|
|
332
|
+
},
|
|
333
|
+
/**
|
|
334
|
+
* 车道宽度
|
|
335
|
+
*/
|
|
336
|
+
laneWidth: {
|
|
337
|
+
// 车道宽度
|
|
338
|
+
type: Number,
|
|
339
|
+
default: 22
|
|
340
|
+
},
|
|
341
|
+
/**
|
|
342
|
+
* 车道分隔线长度
|
|
343
|
+
*/
|
|
344
|
+
laneDividerLength: {
|
|
345
|
+
type: Number,
|
|
346
|
+
default: 80
|
|
347
|
+
},
|
|
348
|
+
/**
|
|
349
|
+
* 车道-流向配置项
|
|
350
|
+
*/
|
|
351
|
+
laneDirections: {
|
|
352
|
+
type: Array,
|
|
353
|
+
default: () => [{
|
|
354
|
+
img: left_default.a,
|
|
355
|
+
laneDirName: '左转'
|
|
356
|
+
}, {
|
|
357
|
+
img: straight_default.a,
|
|
358
|
+
laneDirName: '直行'
|
|
359
|
+
}, {
|
|
360
|
+
img: right_default.a,
|
|
361
|
+
laneDirName: '右转'
|
|
362
|
+
}, {
|
|
363
|
+
img: straightLeft_default.a,
|
|
364
|
+
laneDirName: '直左'
|
|
365
|
+
}, {
|
|
366
|
+
img: leftRight_default.a,
|
|
367
|
+
laneDirName: '左右'
|
|
368
|
+
}, {
|
|
369
|
+
img: straightRight_default.a,
|
|
370
|
+
laneDirName: '直右'
|
|
371
|
+
}, {
|
|
372
|
+
img: straightLeftRight_default.a,
|
|
373
|
+
laneDirName: '直左右'
|
|
374
|
+
}, {
|
|
375
|
+
img: turnAround_default.a,
|
|
376
|
+
laneDirName: '掉头'
|
|
377
|
+
}, {
|
|
378
|
+
img: otherPic_default.a,
|
|
379
|
+
laneDirName: '其他'
|
|
380
|
+
}]
|
|
381
|
+
},
|
|
382
|
+
/**
|
|
383
|
+
* 最大拥堵值
|
|
384
|
+
*/
|
|
385
|
+
maxCongestionValue: {
|
|
386
|
+
type: Number,
|
|
387
|
+
default: 1
|
|
388
|
+
},
|
|
389
|
+
/**
|
|
390
|
+
* 是否可点击
|
|
391
|
+
*/
|
|
392
|
+
clickEvent: {
|
|
393
|
+
// 是否添加点击事件
|
|
394
|
+
type: Boolean,
|
|
395
|
+
default: false
|
|
396
|
+
},
|
|
397
|
+
/**
|
|
398
|
+
* 是否显示拥堵指标值
|
|
399
|
+
*/
|
|
400
|
+
congestionFactorVisible: {
|
|
401
|
+
// 是否在车道上显示指标值
|
|
402
|
+
type: Boolean,
|
|
403
|
+
default: false
|
|
404
|
+
},
|
|
405
|
+
/**
|
|
406
|
+
* 是否可多选车道
|
|
407
|
+
*/
|
|
408
|
+
multiple: {
|
|
409
|
+
// 是否可多选车道
|
|
410
|
+
type: Boolean,
|
|
411
|
+
default: false
|
|
412
|
+
},
|
|
413
|
+
// 已被选择的车道
|
|
414
|
+
selectedLane: {
|
|
415
|
+
type: String,
|
|
416
|
+
default: ''
|
|
417
|
+
},
|
|
418
|
+
// 线段激活颜色
|
|
419
|
+
laneActiveColor: {
|
|
420
|
+
type: String,
|
|
421
|
+
default: '#27ffd5'
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
data() {
|
|
425
|
+
return {
|
|
426
|
+
data: [],
|
|
427
|
+
// laneWidth: 22, // 车道宽度
|
|
428
|
+
canvas: null,
|
|
429
|
+
laneDirCodeOption: [{
|
|
430
|
+
laneDirCode: '101',
|
|
431
|
+
img: 'left',
|
|
432
|
+
laneDirName: '左转'
|
|
433
|
+
}, {
|
|
434
|
+
laneDirCode: '102',
|
|
435
|
+
img: 'straight',
|
|
436
|
+
laneDirName: '直行'
|
|
437
|
+
}, {
|
|
438
|
+
laneDirCode: '103',
|
|
439
|
+
img: 'right',
|
|
440
|
+
laneDirName: '右转'
|
|
441
|
+
}, {
|
|
442
|
+
laneDirCode: '104',
|
|
443
|
+
img: 'straightLeft',
|
|
444
|
+
laneDirName: '直左'
|
|
445
|
+
}, {
|
|
446
|
+
laneDirCode: '109',
|
|
447
|
+
img: 'leftRight',
|
|
448
|
+
laneDirName: '左右'
|
|
449
|
+
}, {
|
|
450
|
+
laneDirCode: '105',
|
|
451
|
+
img: 'straightRight',
|
|
452
|
+
laneDirName: '直右'
|
|
453
|
+
}, {
|
|
454
|
+
laneDirCode: '106',
|
|
455
|
+
img: 'straightLeftRight',
|
|
456
|
+
laneDirName: '直左右'
|
|
457
|
+
}, {
|
|
458
|
+
laneDirCode: '107',
|
|
459
|
+
img: 'turnAround',
|
|
460
|
+
laneDirName: '掉头'
|
|
461
|
+
}, {
|
|
462
|
+
laneDirCode: '108',
|
|
463
|
+
img: 'otherPic',
|
|
464
|
+
laneDirName: '其他'
|
|
465
|
+
}],
|
|
466
|
+
currentLaneDirName: '',
|
|
467
|
+
currentGroup: null,
|
|
468
|
+
currentGroupBK: null,
|
|
469
|
+
showLegend: false,
|
|
470
|
+
canvasWidth: 300,
|
|
471
|
+
chooseGroup: [],
|
|
472
|
+
resizeHandler: null
|
|
473
|
+
};
|
|
474
|
+
},
|
|
475
|
+
components: {},
|
|
476
|
+
computed: {},
|
|
477
|
+
created() {
|
|
478
|
+
// 使用lodash的debounce函数添加防抖处理,限制resize事件触发频率
|
|
479
|
+
this.resizeHandler = lodash_default.a.debounce(() => {
|
|
480
|
+
if (this.canvas) {
|
|
481
|
+
this.canvas.dispose();
|
|
482
|
+
this.canvas = null;
|
|
483
|
+
this.$nextTick(() => {
|
|
484
|
+
this.init();
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
}, 200);
|
|
488
|
+
|
|
489
|
+
// 保存事件处理函数引用,以便后续移除
|
|
490
|
+
window.addEventListener('resize', this.resizeHandler);
|
|
491
|
+
},
|
|
492
|
+
mounted() {
|
|
493
|
+
this.init();
|
|
494
|
+
},
|
|
495
|
+
beforeDestroy() {
|
|
496
|
+
// 移除resize事件监听器,防止内存泄漏
|
|
497
|
+
window.removeEventListener('resize', this.resizeHandler);
|
|
498
|
+
|
|
499
|
+
// 取消防抖函数
|
|
500
|
+
this.resizeHandler.cancel();
|
|
501
|
+
|
|
502
|
+
// 销毁canvas实例
|
|
503
|
+
if (this.canvas) {
|
|
504
|
+
this.canvas.dispose();
|
|
505
|
+
this.canvas = null;
|
|
506
|
+
}
|
|
507
|
+
},
|
|
508
|
+
watch: {
|
|
509
|
+
laneDiagramData: {
|
|
510
|
+
handler(val) {
|
|
511
|
+
if (this.canvas) {
|
|
512
|
+
this.canvas.dispose();
|
|
513
|
+
this.canvas = null;
|
|
514
|
+
}
|
|
515
|
+
this.$nextTick(() => {
|
|
516
|
+
this.init();
|
|
517
|
+
});
|
|
518
|
+
},
|
|
519
|
+
deep: true
|
|
520
|
+
}
|
|
521
|
+
},
|
|
522
|
+
methods: {
|
|
523
|
+
init() {
|
|
524
|
+
const el = document.getElementById('canvasWrapper');
|
|
525
|
+
this.canvasWidth = el.offsetWidth;
|
|
526
|
+
this.canvas = new fabric["fabric"].Canvas(this.$refs.road, {
|
|
527
|
+
backgroundColor: 'rgba(17,94,7,0.4)',
|
|
528
|
+
selection: false,
|
|
529
|
+
width: this.canvasWidth,
|
|
530
|
+
height: this.canvasHeight
|
|
531
|
+
});
|
|
532
|
+
|
|
533
|
+
// 找到各方向进口车道数
|
|
534
|
+
const nLaneNum = this.laneDiagramData.filter(item => item.inDirection === '北').length;
|
|
535
|
+
const wLaneNum = this.laneDiagramData.filter(item => item.inDirection === '西').length;
|
|
536
|
+
const sLaneNum = this.laneDiagramData.filter(item => item.inDirection === '南').length;
|
|
537
|
+
const eLaneNum = this.laneDiagramData.filter(item => item.inDirection === '东').length;
|
|
538
|
+
|
|
539
|
+
// 路口底图点位,从北与西交叉点开始(标准十字路口)
|
|
540
|
+
const point1 = {
|
|
541
|
+
x: this.canvasWidth / 2 - this.laneWidth * nLaneNum,
|
|
542
|
+
y: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum)
|
|
543
|
+
};
|
|
544
|
+
const point2 = {
|
|
545
|
+
x: 0,
|
|
546
|
+
y: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum)
|
|
547
|
+
};
|
|
548
|
+
const point3 = {
|
|
549
|
+
x: 0,
|
|
550
|
+
y: this.canvasHeight / 2 + this.laneWidth * wLaneNum
|
|
551
|
+
};
|
|
552
|
+
const point4 = {
|
|
553
|
+
x: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
554
|
+
y: this.canvasHeight / 2 + this.laneWidth * wLaneNum
|
|
555
|
+
};
|
|
556
|
+
const point5 = {
|
|
557
|
+
x: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
558
|
+
y: this.canvasHeight
|
|
559
|
+
};
|
|
560
|
+
const point6 = {
|
|
561
|
+
x: this.canvasWidth / 2 + this.laneWidth * sLaneNum,
|
|
562
|
+
y: this.canvasHeight
|
|
563
|
+
};
|
|
564
|
+
const point7 = {
|
|
565
|
+
x: this.canvasWidth / 2 + this.laneWidth * sLaneNum,
|
|
566
|
+
y: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum)
|
|
567
|
+
};
|
|
568
|
+
const point8 = {
|
|
569
|
+
x: this.canvasWidth,
|
|
570
|
+
y: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum)
|
|
571
|
+
};
|
|
572
|
+
const point9 = {
|
|
573
|
+
x: this.canvasWidth,
|
|
574
|
+
y: this.canvasHeight / 2 - this.laneWidth * eLaneNum
|
|
575
|
+
};
|
|
576
|
+
const point10 = {
|
|
577
|
+
x: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
578
|
+
y: this.canvasHeight / 2 - this.laneWidth * eLaneNum
|
|
579
|
+
};
|
|
580
|
+
const point11 = {
|
|
581
|
+
x: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
582
|
+
y: 0
|
|
583
|
+
};
|
|
584
|
+
const point12 = {
|
|
585
|
+
x: this.canvasWidth / 2 - this.laneWidth * nLaneNum,
|
|
586
|
+
y: 0
|
|
587
|
+
};
|
|
588
|
+
// 画路口图连线
|
|
589
|
+
var raodBase = new fabric["fabric"].Polygon([point1, wLaneNum !== 0 ? point2 : {}, wLaneNum !== 0 ? point3 : {}, point4, sLaneNum !== 0 ? point5 : {}, sLaneNum !== 0 ? point6 : {}, point7, eLaneNum !== 0 ? point8 : {}, eLaneNum !== 0 ? point9 : {}, point10, nLaneNum !== 0 ? point11 : {}, nLaneNum !== 0 ? point12 : point1], {
|
|
590
|
+
fill: '#989898',
|
|
591
|
+
stroke: '#fff',
|
|
592
|
+
strokeWidth: 2,
|
|
593
|
+
selectable: false
|
|
594
|
+
});
|
|
595
|
+
this.canvas.add(raodBase);
|
|
596
|
+
raodBase.on('mousedown', () => {
|
|
597
|
+
// 点击路口灰色底图部分,关闭图例弹窗
|
|
598
|
+
this.showLegend = false;
|
|
599
|
+
});
|
|
600
|
+
// 绘制黄实线
|
|
601
|
+
const nYellowLine = {
|
|
602
|
+
x1: this.canvasWidth / 2,
|
|
603
|
+
y1: 0,
|
|
604
|
+
x2: this.canvasWidth / 2,
|
|
605
|
+
y2: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum)
|
|
606
|
+
}; // 北方向
|
|
607
|
+
const wYellowLine = {
|
|
608
|
+
x1: 0,
|
|
609
|
+
y1: this.canvasHeight / 2,
|
|
610
|
+
x2: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
611
|
+
y2: this.canvasHeight / 2
|
|
612
|
+
}; // 西方向
|
|
613
|
+
const sYellowLine = {
|
|
614
|
+
x1: this.canvasWidth / 2,
|
|
615
|
+
y1: this.canvasHeight,
|
|
616
|
+
x2: this.canvasWidth / 2,
|
|
617
|
+
y2: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum)
|
|
618
|
+
}; // 南方向
|
|
619
|
+
const eYellowLine = {
|
|
620
|
+
x1: this.canvasWidth,
|
|
621
|
+
y1: this.canvasHeight / 2,
|
|
622
|
+
x2: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
623
|
+
y2: this.canvasHeight / 2
|
|
624
|
+
}; // 东方向
|
|
625
|
+
const lines = [nLaneNum ? nYellowLine : {}, wLaneNum ? wYellowLine : {}, sLaneNum ? sYellowLine : {}, eLaneNum ? eYellowLine : {} // 东方向
|
|
626
|
+
];
|
|
627
|
+
lines.forEach(line => {
|
|
628
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
629
|
+
stroke: '#e6c130',
|
|
630
|
+
// 线条颜色
|
|
631
|
+
strokeWidth: 2 // 线条宽度
|
|
632
|
+
});
|
|
633
|
+
this.canvas.add(fabricLine);
|
|
634
|
+
});
|
|
635
|
+
|
|
636
|
+
// 绘制车道线
|
|
637
|
+
const laneLineLength = this.laneDividerLength; // 车道线长度
|
|
638
|
+
// 绘制各方向车道组(北西南东)
|
|
639
|
+
if (nLaneNum > 0) {
|
|
640
|
+
const nData = this.laneDiagramData.filter(item => item.inDirection === '北');
|
|
641
|
+
for (let i = 0; i < nData.length; i++) {
|
|
642
|
+
const line = {
|
|
643
|
+
x1: this.canvasWidth / 2 - this.laneWidth * (i + 1),
|
|
644
|
+
y1: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum),
|
|
645
|
+
x2: this.canvasWidth / 2 - this.laneWidth * (i + 1),
|
|
646
|
+
y2: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum) - laneLineLength
|
|
647
|
+
};
|
|
648
|
+
|
|
649
|
+
// 添加图标
|
|
650
|
+
const temp = nData[i];
|
|
651
|
+
const value = Math.round(temp.congestionFactor * 10) / 10;
|
|
652
|
+
const laneDirItem = this.laneDirections.find(item => item.laneDirName === temp.laneDirName);
|
|
653
|
+
if (laneDirItem) {
|
|
654
|
+
fabric["fabric"].Image.fromURL(laneDirItem.img, img => {
|
|
655
|
+
img.scaleToWidth(this.laneWidth);
|
|
656
|
+
// 绘制车道白线
|
|
657
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
658
|
+
stroke: '#fff',
|
|
659
|
+
// 线条颜色
|
|
660
|
+
strokeWidth: 1 // 线条宽度
|
|
661
|
+
});
|
|
662
|
+
// 绘制车道矩形
|
|
663
|
+
var rect = new fabric["fabric"].Rect({
|
|
664
|
+
width: this.laneWidth,
|
|
665
|
+
height: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum),
|
|
666
|
+
fill: this.calcBgColor(value),
|
|
667
|
+
left: this.canvasWidth / 2 - this.laneWidth * (i + 1),
|
|
668
|
+
top: 0
|
|
669
|
+
});
|
|
670
|
+
if (this.currentGroup && this.currentGroup.name === `N_L${temp.laneNo}`) {
|
|
671
|
+
rect.set('fill', this.laneActiveColor);
|
|
672
|
+
}
|
|
673
|
+
// 绘制文本
|
|
674
|
+
var text = new fabric["fabric"].Textbox(`${Number(temp.laneNo)}`, {
|
|
675
|
+
fontSize: 18,
|
|
676
|
+
left: this.canvasWidth / 2 - this.laneWidth * (i + 1),
|
|
677
|
+
top: (this.canvasHeight - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum) - this.laneWidth * wLaneNum) / 2 - 22,
|
|
678
|
+
textAlign: 'center',
|
|
679
|
+
width: this.laneWidth,
|
|
680
|
+
fill: '#fff',
|
|
681
|
+
angle: 180,
|
|
682
|
+
originX: 'right',
|
|
683
|
+
originY: 'bottom'
|
|
684
|
+
});
|
|
685
|
+
let text2 = new fabric["fabric"].Textbox(`${value ? value : '0'}`, {
|
|
686
|
+
fontSize: 12,
|
|
687
|
+
left: this.canvasWidth / 2 - this.laneWidth * (i + 1 - 0.25),
|
|
688
|
+
top: 5,
|
|
689
|
+
textAlign: 'left',
|
|
690
|
+
width: this.laneWidth,
|
|
691
|
+
fill: '#fff',
|
|
692
|
+
angle: 90,
|
|
693
|
+
originX: 'left',
|
|
694
|
+
originY: 'bottom'
|
|
695
|
+
});
|
|
696
|
+
let groupList = [];
|
|
697
|
+
if (this.congestionFactorVisible) {
|
|
698
|
+
groupList = [rect, text, text2, img, fabricLine];
|
|
699
|
+
} else {
|
|
700
|
+
groupList = [rect, text, img, fabricLine];
|
|
701
|
+
}
|
|
702
|
+
var group = new fabric["fabric"].Group(groupList, {
|
|
703
|
+
name: `N_L${temp.laneNo}`,
|
|
704
|
+
objectCaching: false,
|
|
705
|
+
selectable: false
|
|
706
|
+
});
|
|
707
|
+
this.canvas.add(group);
|
|
708
|
+
if (this.clickEvent) {
|
|
709
|
+
group.on('mousedown', e => {
|
|
710
|
+
if (this.configType === 'LaneConfig') {
|
|
711
|
+
this.showLegend = true;
|
|
712
|
+
}
|
|
713
|
+
this.mousedownFun(e);
|
|
714
|
+
});
|
|
715
|
+
group.on('mousemove', e => {
|
|
716
|
+
this.canvas.setCursor('pointer');
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
}, {
|
|
720
|
+
name: laneDirItem.laneDirName,
|
|
721
|
+
left: this.canvasWidth / 2 - this.laneWidth * (i + 1),
|
|
722
|
+
top: (this.canvasHeight - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum) - this.laneWidth * wLaneNum) / 2 - 50,
|
|
723
|
+
angle: 180,
|
|
724
|
+
originX: 'right',
|
|
725
|
+
originY: 'bottom'
|
|
726
|
+
});
|
|
727
|
+
} else {
|
|
728
|
+
console.error(`${temp.inDirection}向 - ${temp.laneDirName}车道,图标缺少!`);
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
}
|
|
732
|
+
if (wLaneNum > 0) {
|
|
733
|
+
const wData = this.laneDiagramData.filter(item => item.inDirection === '西');
|
|
734
|
+
for (let i = 0; i < wData.length; i++) {
|
|
735
|
+
const line = {
|
|
736
|
+
x1: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
737
|
+
y1: this.canvasHeight / 2 + this.laneWidth * (i + 1),
|
|
738
|
+
x2: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum) - laneLineLength,
|
|
739
|
+
y2: this.canvasHeight / 2 + this.laneWidth * (i + 1)
|
|
740
|
+
};
|
|
741
|
+
|
|
742
|
+
// 添加图标
|
|
743
|
+
const temp = wData[i];
|
|
744
|
+
const value = Math.round(temp.congestionFactor * 10) / 10;
|
|
745
|
+
const laneDirItem = this.laneDirections.find(item => item.laneDirName === temp.laneDirName);
|
|
746
|
+
if (laneDirItem) {
|
|
747
|
+
fabric["fabric"].Image.fromURL(laneDirItem.img, img => {
|
|
748
|
+
img.scaleToWidth(this.laneWidth);
|
|
749
|
+
// 绘制车道白线
|
|
750
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
751
|
+
stroke: '#fff',
|
|
752
|
+
// 线条颜色
|
|
753
|
+
strokeWidth: 1 // 线条宽度
|
|
754
|
+
});
|
|
755
|
+
|
|
756
|
+
// 绘制车道矩形
|
|
757
|
+
var rect = new fabric["fabric"].Rect({
|
|
758
|
+
// width: laneLineLength,
|
|
759
|
+
width: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
760
|
+
height: this.laneWidth,
|
|
761
|
+
fill: this.calcBgColor(value),
|
|
762
|
+
left: 0,
|
|
763
|
+
top: this.canvasHeight / 2 + this.laneWidth * i
|
|
764
|
+
});
|
|
765
|
+
if (this.currentGroup && this.currentGroup.name === `W_L${temp.laneNo}`) {
|
|
766
|
+
rect.set('fill', this.laneActiveColor);
|
|
767
|
+
}
|
|
768
|
+
var text = new fabric["fabric"].Textbox(`${Number(temp.laneNo)}`, {
|
|
769
|
+
// 绘制文本
|
|
770
|
+
fontSize: 18,
|
|
771
|
+
left: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
772
|
+
top: this.canvasHeight / 2 + this.laneWidth * i,
|
|
773
|
+
textAlign: 'center',
|
|
774
|
+
width: this.laneWidth,
|
|
775
|
+
fill: '#fff',
|
|
776
|
+
angle: 90,
|
|
777
|
+
originX: 'left',
|
|
778
|
+
originY: 'top'
|
|
779
|
+
});
|
|
780
|
+
let text2 = new fabric["fabric"].Textbox(`${value ? value : '0'}`, {
|
|
781
|
+
// 绘制文本
|
|
782
|
+
fontSize: 12,
|
|
783
|
+
left: 5,
|
|
784
|
+
top: this.canvasHeight / 2 + this.laneWidth * (i + 0.25),
|
|
785
|
+
textAlign: 'left',
|
|
786
|
+
width: this.laneWidth,
|
|
787
|
+
fill: '#fff',
|
|
788
|
+
originX: 'left',
|
|
789
|
+
originY: 'top'
|
|
790
|
+
});
|
|
791
|
+
let groupList = [];
|
|
792
|
+
if (this.congestionFactorVisible) {
|
|
793
|
+
groupList = [rect, text, text2, img, fabricLine];
|
|
794
|
+
} else {
|
|
795
|
+
groupList = [rect, text, img, fabricLine];
|
|
796
|
+
}
|
|
797
|
+
var group = new fabric["fabric"].Group(groupList, {
|
|
798
|
+
name: `W_L${temp.laneNo}`,
|
|
799
|
+
objectCaching: false,
|
|
800
|
+
selectable: false
|
|
801
|
+
});
|
|
802
|
+
this.canvas.add(group);
|
|
803
|
+
if (this.clickEvent) {
|
|
804
|
+
group.on('mousedown', e => {
|
|
805
|
+
if (this.configType === 'LaneConfig') {
|
|
806
|
+
this.showLegend = true;
|
|
807
|
+
}
|
|
808
|
+
this.mousedownFun(e);
|
|
809
|
+
});
|
|
810
|
+
group.on('mousemove', e => {
|
|
811
|
+
this.canvas.setCursor('pointer');
|
|
812
|
+
});
|
|
813
|
+
}
|
|
814
|
+
}, {
|
|
815
|
+
name: laneDirItem.laneDirName,
|
|
816
|
+
left: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum) - 30,
|
|
817
|
+
top: this.canvasHeight / 2 + this.laneWidth * i,
|
|
818
|
+
angle: 90,
|
|
819
|
+
originX: 'left',
|
|
820
|
+
originY: 'top'
|
|
821
|
+
});
|
|
822
|
+
} else {
|
|
823
|
+
console.error(`${temp.inDirection}向 - ${temp.laneDirName}车道,图标缺少!`);
|
|
824
|
+
}
|
|
825
|
+
}
|
|
826
|
+
}
|
|
827
|
+
if (sLaneNum > 0) {
|
|
828
|
+
const sData = this.laneDiagramData.filter(item => item.inDirection === '南');
|
|
829
|
+
for (let i = 0; i < sData.length; i++) {
|
|
830
|
+
const line = {
|
|
831
|
+
x1: this.canvasWidth / 2 + this.laneWidth * (i + 1),
|
|
832
|
+
y1: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum),
|
|
833
|
+
x2: this.canvasWidth / 2 + this.laneWidth * (i + 1),
|
|
834
|
+
y2: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum) + laneLineLength
|
|
835
|
+
};
|
|
836
|
+
|
|
837
|
+
// 添加图标
|
|
838
|
+
const temp = sData[i];
|
|
839
|
+
const value = Math.round(temp.congestionFactor * 10) / 10;
|
|
840
|
+
const laneDirItem = this.laneDirections.find(item => item.laneDirName === temp.laneDirName);
|
|
841
|
+
if (laneDirItem) {
|
|
842
|
+
fabric["fabric"].Image.fromURL(laneDirItem.img, img => {
|
|
843
|
+
img.scaleToWidth(this.laneWidth);
|
|
844
|
+
// 绘制车道白线
|
|
845
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
846
|
+
stroke: '#fff',
|
|
847
|
+
// 线条颜色
|
|
848
|
+
strokeWidth: 1 // 线条宽度
|
|
849
|
+
});
|
|
850
|
+
|
|
851
|
+
// 绘制车道矩形
|
|
852
|
+
var rect = new fabric["fabric"].Rect({
|
|
853
|
+
width: this.laneWidth,
|
|
854
|
+
// height: laneLineLength,
|
|
855
|
+
height: this.canvasHeight / 2,
|
|
856
|
+
fill: this.calcBgColor(value),
|
|
857
|
+
left: this.canvasWidth / 2 + this.laneWidth * i,
|
|
858
|
+
top: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum)
|
|
859
|
+
});
|
|
860
|
+
if (this.currentGroup && this.currentGroup.name === `S_L${temp.laneNo}`) {
|
|
861
|
+
rect.set('fill', this.laneActiveColor);
|
|
862
|
+
}
|
|
863
|
+
var text = new fabric["fabric"].Textbox(`${Number(temp.laneNo)}`, {
|
|
864
|
+
// 绘制文本
|
|
865
|
+
fontSize: 18,
|
|
866
|
+
left: this.canvasWidth / 2 + this.laneWidth * i,
|
|
867
|
+
top: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum),
|
|
868
|
+
textAlign: 'center',
|
|
869
|
+
width: this.laneWidth,
|
|
870
|
+
fill: '#fff'
|
|
871
|
+
});
|
|
872
|
+
let text2 = new fabric["fabric"].Textbox(`${value ? value : '0'}`, {
|
|
873
|
+
// 绘制文本
|
|
874
|
+
fontSize: 12,
|
|
875
|
+
left: this.canvasWidth / 2 + this.laneWidth * (i + 0.25),
|
|
876
|
+
top: this.canvasHeight - 5,
|
|
877
|
+
textAlign: 'left',
|
|
878
|
+
width: this.laneWidth,
|
|
879
|
+
fill: '#fff',
|
|
880
|
+
angle: -90
|
|
881
|
+
});
|
|
882
|
+
let groupList = [];
|
|
883
|
+
if (this.congestionFactorVisible) {
|
|
884
|
+
groupList = [rect, text, text2, img, fabricLine];
|
|
885
|
+
} else {
|
|
886
|
+
groupList = [rect, text, img, fabricLine];
|
|
887
|
+
}
|
|
888
|
+
var group = new fabric["fabric"].Group(groupList, {
|
|
889
|
+
name: `S_L${temp.laneNo}`,
|
|
890
|
+
objectCaching: false,
|
|
891
|
+
selectable: false
|
|
892
|
+
});
|
|
893
|
+
this.canvas.add(group);
|
|
894
|
+
if (this.clickEvent) {
|
|
895
|
+
group.on('mousedown', e => {
|
|
896
|
+
if (this.configType === 'LaneConfig') {
|
|
897
|
+
this.showLegend = true;
|
|
898
|
+
}
|
|
899
|
+
this.mousedownFun(e);
|
|
900
|
+
});
|
|
901
|
+
group.on('mousemove', e => {
|
|
902
|
+
this.canvas.setCursor('pointer');
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
}, {
|
|
906
|
+
name: laneDirItem.laneDirName,
|
|
907
|
+
left: this.canvasWidth / 2 + this.laneWidth * i,
|
|
908
|
+
top: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum) + 30
|
|
909
|
+
});
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
if (eLaneNum > 0) {
|
|
914
|
+
const eData = this.laneDiagramData.filter(item => item.inDirection === '东');
|
|
915
|
+
for (let i = 0; i < eData.length; i++) {
|
|
916
|
+
const line = {
|
|
917
|
+
x1: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
918
|
+
y1: this.canvasHeight / 2 - this.laneWidth * (i + 1),
|
|
919
|
+
x2: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum) + laneLineLength,
|
|
920
|
+
y2: this.canvasHeight / 2 - this.laneWidth * (i + 1)
|
|
921
|
+
};
|
|
922
|
+
|
|
923
|
+
// 添加图标
|
|
924
|
+
const temp = eData[i];
|
|
925
|
+
const value = Math.round(temp.congestionFactor * 10) / 10;
|
|
926
|
+
const laneDirItem = this.laneDirections.find(item => item.laneDirName === temp.laneDirName);
|
|
927
|
+
if (laneDirItem) {
|
|
928
|
+
fabric["fabric"].Image.fromURL(laneDirItem.img, img => {
|
|
929
|
+
img.scaleToWidth(this.laneWidth);
|
|
930
|
+
// 绘制车道白线
|
|
931
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
932
|
+
stroke: '#fff',
|
|
933
|
+
// 线条颜色
|
|
934
|
+
strokeWidth: 1 // 线条宽度
|
|
935
|
+
});
|
|
936
|
+
// 绘制车道矩形
|
|
937
|
+
var rect = new fabric["fabric"].Rect({
|
|
938
|
+
width: this.canvasWidth / 2,
|
|
939
|
+
height: this.laneWidth,
|
|
940
|
+
fill: this.calcBgColor(value),
|
|
941
|
+
left: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
942
|
+
top: this.canvasHeight / 2 - this.laneWidth * (i + 1)
|
|
943
|
+
});
|
|
944
|
+
if (this.currentGroup && this.currentGroup.name === `E_L${temp.laneNo}`) {
|
|
945
|
+
rect.set('fill', this.laneActiveColor);
|
|
946
|
+
}
|
|
947
|
+
var text = new fabric["fabric"].Textbox(`${Number(temp.laneNo)}`, {
|
|
948
|
+
// 绘制文本
|
|
949
|
+
fontSize: 18,
|
|
950
|
+
left: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
951
|
+
top: this.canvasHeight / 2 - this.laneWidth * (i + 1),
|
|
952
|
+
textAlign: 'center',
|
|
953
|
+
width: this.laneWidth,
|
|
954
|
+
fill: '#fff',
|
|
955
|
+
angle: -90,
|
|
956
|
+
originX: 'right',
|
|
957
|
+
originY: 'top'
|
|
958
|
+
});
|
|
959
|
+
let text2 = new fabric["fabric"].Textbox(`${value ? value : '0'}`, {
|
|
960
|
+
// 绘制文本
|
|
961
|
+
fontSize: 12,
|
|
962
|
+
left: this.canvasWidth - 5,
|
|
963
|
+
top: this.canvasHeight / 2 - this.laneWidth * (i + 1 - 0.25),
|
|
964
|
+
textAlign: 'center',
|
|
965
|
+
width: this.laneWidth,
|
|
966
|
+
fill: '#fff',
|
|
967
|
+
// angle: -90,
|
|
968
|
+
originX: 'right',
|
|
969
|
+
originY: 'top'
|
|
970
|
+
});
|
|
971
|
+
let groupList = [];
|
|
972
|
+
if (this.congestionFactorVisible) {
|
|
973
|
+
groupList = [rect, text, text2, img, fabricLine];
|
|
974
|
+
} else {
|
|
975
|
+
groupList = [rect, text, img, fabricLine];
|
|
976
|
+
}
|
|
977
|
+
var group = new fabric["fabric"].Group(groupList, {
|
|
978
|
+
name: `E_L${temp.laneNo}`,
|
|
979
|
+
objectCaching: false,
|
|
980
|
+
selectable: false
|
|
981
|
+
});
|
|
982
|
+
this.canvas.add(group);
|
|
983
|
+
if (this.clickEvent) {
|
|
984
|
+
group.on('mousedown', e => {
|
|
985
|
+
if (this.configType === 'LaneConfig') {
|
|
986
|
+
this.showLegend = true;
|
|
987
|
+
}
|
|
988
|
+
this.mousedownFun(e);
|
|
989
|
+
});
|
|
990
|
+
group.on('mousemove', e => {
|
|
991
|
+
this.canvas.setCursor('pointer');
|
|
992
|
+
});
|
|
993
|
+
}
|
|
994
|
+
}, {
|
|
995
|
+
name: laneDirItem.laneDirName,
|
|
996
|
+
left: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum) + 30,
|
|
997
|
+
top: this.canvasHeight / 2 - this.laneWidth * (i + 1),
|
|
998
|
+
angle: -90,
|
|
999
|
+
originX: 'right',
|
|
1000
|
+
originY: 'top'
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
// 北停止线
|
|
1006
|
+
const nStopLine = {
|
|
1007
|
+
x1: this.canvasWidth / 2 - this.laneWidth * nLaneNum,
|
|
1008
|
+
y1: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum),
|
|
1009
|
+
x2: this.canvasWidth / 2,
|
|
1010
|
+
y2: this.canvasHeight / 2 - this.laneWidth * (eLaneNum ? eLaneNum : wLaneNum)
|
|
1011
|
+
};
|
|
1012
|
+
// 西停止线
|
|
1013
|
+
const wStopLine = {
|
|
1014
|
+
x1: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
1015
|
+
y1: this.canvasHeight / 2,
|
|
1016
|
+
x2: this.canvasWidth / 2 - this.laneWidth * (nLaneNum ? nLaneNum : sLaneNum),
|
|
1017
|
+
y2: this.canvasHeight / 2 + this.laneWidth * wLaneNum
|
|
1018
|
+
};
|
|
1019
|
+
|
|
1020
|
+
// 南停止线
|
|
1021
|
+
const sStopLine = {
|
|
1022
|
+
x1: this.canvasWidth / 2,
|
|
1023
|
+
y1: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum),
|
|
1024
|
+
x2: this.canvasWidth / 2 + this.laneWidth * sLaneNum,
|
|
1025
|
+
y2: this.canvasHeight / 2 + this.laneWidth * (wLaneNum ? wLaneNum : eLaneNum)
|
|
1026
|
+
};
|
|
1027
|
+
|
|
1028
|
+
// 东停止线
|
|
1029
|
+
const eStopLine = {
|
|
1030
|
+
x1: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
1031
|
+
y1: this.canvasHeight / 2 - this.laneWidth * eLaneNum,
|
|
1032
|
+
x2: this.canvasWidth / 2 + this.laneWidth * (sLaneNum ? sLaneNum : nLaneNum),
|
|
1033
|
+
y2: this.canvasHeight / 2
|
|
1034
|
+
};
|
|
1035
|
+
let laneLines = [];
|
|
1036
|
+
laneLines.push(wStopLine);
|
|
1037
|
+
laneLines.push(nStopLine);
|
|
1038
|
+
laneLines.push(sStopLine);
|
|
1039
|
+
laneLines.push(eStopLine);
|
|
1040
|
+
laneLines.forEach(line => {
|
|
1041
|
+
this.addFabricLine(line, '#fff', 1);
|
|
1042
|
+
});
|
|
1043
|
+
},
|
|
1044
|
+
changeLane(laneDirCodes) {
|
|
1045
|
+
if (laneDirCodes) {
|
|
1046
|
+
if (this.canvas) {
|
|
1047
|
+
laneDirCodes.forEach(item => {
|
|
1048
|
+
// 根据车道编号获取canvas上指定group
|
|
1049
|
+
const currentGroup = this.canvas.getObjects().find(o => o.type === 'group' && o.name === item);
|
|
1050
|
+
// 获取当前group下车道对象
|
|
1051
|
+
if (currentGroup) {
|
|
1052
|
+
var rect = currentGroup.getObjects().find(o => {
|
|
1053
|
+
return o.type === 'rect';
|
|
1054
|
+
});
|
|
1055
|
+
rect.set('fill', this.laneActiveColor);
|
|
1056
|
+
}
|
|
1057
|
+
});
|
|
1058
|
+
this.canvas.getObjects().forEach(o => {
|
|
1059
|
+
if (o.type === 'group' && !laneDirCodes.includes(o.name)) {
|
|
1060
|
+
var rect = o.getObjects().find(o => {
|
|
1061
|
+
return o.type === 'rect';
|
|
1062
|
+
});
|
|
1063
|
+
rect.set('fill', 'transparent');
|
|
1064
|
+
}
|
|
1065
|
+
});
|
|
1066
|
+
this.canvas.renderAll();
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
// 更改车道流向(canvas对应更新)
|
|
1071
|
+
changeLaneDir({
|
|
1072
|
+
laneDirCode,
|
|
1073
|
+
laneDirName
|
|
1074
|
+
}) {
|
|
1075
|
+
// 根据车道编号获取canvas上指定group
|
|
1076
|
+
if (this.canvas) {
|
|
1077
|
+
const currentGroup = this.canvas.getObjects().find(o => o.type === 'group' && o.name === laneDirCode);
|
|
1078
|
+
// 获取当前group下车道对象
|
|
1079
|
+
var rect = currentGroup.getObjects().find(o => {
|
|
1080
|
+
return o.type === 'rect';
|
|
1081
|
+
});
|
|
1082
|
+
// 获取当前group下图标
|
|
1083
|
+
var image = currentGroup.getObjects().find(o => {
|
|
1084
|
+
return o.type === 'image';
|
|
1085
|
+
});
|
|
1086
|
+
const laneDirItem = this.laneDirections.find(item => item.laneDirName === laneDirName);
|
|
1087
|
+
const imgSrc = laneDirItem.img;
|
|
1088
|
+
image.setSrc(imgSrc, () => {
|
|
1089
|
+
rect.set('fill', this.laneActiveColor);
|
|
1090
|
+
this.canvas.renderAll();
|
|
1091
|
+
});
|
|
1092
|
+
this.canvas.getObjects().forEach(o => {
|
|
1093
|
+
if (o.type === 'group' && o.name !== laneDirCode) {
|
|
1094
|
+
var rect = o.getObjects().find(o => {
|
|
1095
|
+
return o.type === 'rect';
|
|
1096
|
+
});
|
|
1097
|
+
rect.set('fill', 'transparent');
|
|
1098
|
+
}
|
|
1099
|
+
});
|
|
1100
|
+
this.canvas.renderAll();
|
|
1101
|
+
}
|
|
1102
|
+
},
|
|
1103
|
+
addFabricLine(line, color, strokeWidth = 1) {
|
|
1104
|
+
// 绘制线
|
|
1105
|
+
const fabricLine = new fabric["fabric"].Line([line.x1, line.y1, line.x2, line.y2], {
|
|
1106
|
+
stroke: color,
|
|
1107
|
+
// 线条颜色
|
|
1108
|
+
strokeWidth: strokeWidth // 线条宽度
|
|
1109
|
+
});
|
|
1110
|
+
this.canvas.add(fabricLine);
|
|
1111
|
+
},
|
|
1112
|
+
mousedownFun(e) {
|
|
1113
|
+
// 鼠标点击事件
|
|
1114
|
+
// 根据车道编号获取canvas上指定group
|
|
1115
|
+
const currentGroup = this.canvas.getObjects().find(o => o.type === 'group' && o.name === e.target.name);
|
|
1116
|
+
// 获取当前group下车道对象
|
|
1117
|
+
var rect = currentGroup.getObjects().find(o => {
|
|
1118
|
+
return o.type === 'rect';
|
|
1119
|
+
});
|
|
1120
|
+
if (this.multiple) {
|
|
1121
|
+
// 车道可多选
|
|
1122
|
+
if (rect.choosen) {
|
|
1123
|
+
rect.set('fill', 'transparent');
|
|
1124
|
+
rect.set('choosen', false);
|
|
1125
|
+
let index = this.chooseGroup.findIndex(item => item === currentGroup.name);
|
|
1126
|
+
this.chooseGroup.splice(index, 1);
|
|
1127
|
+
} else {
|
|
1128
|
+
rect.set('choosen', true);
|
|
1129
|
+
rect.set('fill', this.laneActiveColor);
|
|
1130
|
+
this.chooseGroup.push(currentGroup.name);
|
|
1131
|
+
}
|
|
1132
|
+
this.$emit('chooseLane', this.chooseGroup);
|
|
1133
|
+
} else {
|
|
1134
|
+
rect.set('fill', this.laneActiveColor);
|
|
1135
|
+
this.currentGroup = currentGroup;
|
|
1136
|
+
this.currentGroupBK = lodash_default.a.cloneDeep(currentGroup);
|
|
1137
|
+
this.canvas.getObjects().forEach(o => {
|
|
1138
|
+
if (o.type === 'group' && o.name !== e.target.name) {
|
|
1139
|
+
var rect = o.getObjects().find(o => {
|
|
1140
|
+
return o.type === 'rect';
|
|
1141
|
+
});
|
|
1142
|
+
rect.set('fill', 'transparent');
|
|
1143
|
+
}
|
|
1144
|
+
});
|
|
1145
|
+
this.$nextTick(() => {
|
|
1146
|
+
const ele = this.$refs.legendBox;
|
|
1147
|
+
ele.style.top = e.target.top + 'px';
|
|
1148
|
+
ele.style.left = e.target.left + 80 + 'px';
|
|
1149
|
+
this.currentLaneDirName = e.target.getObjects().filter(item => item.type === 'image')[0].name;
|
|
1150
|
+
// 选择右侧表格一行数据
|
|
1151
|
+
this.$emit('selectLane', {
|
|
1152
|
+
laneDirCode: this.currentGroup.name
|
|
1153
|
+
});
|
|
1154
|
+
});
|
|
1155
|
+
}
|
|
1156
|
+
this.canvas.renderAll();
|
|
1157
|
+
},
|
|
1158
|
+
chooseImg(item) {
|
|
1159
|
+
// 选择图片
|
|
1160
|
+
this.currentLaneDirName = item.laneDirName;
|
|
1161
|
+
// 获取当前group下图标
|
|
1162
|
+
var image = this.currentGroup.getObjects().find(o => {
|
|
1163
|
+
return o.type === 'image';
|
|
1164
|
+
});
|
|
1165
|
+
const imgSrc = item.img;
|
|
1166
|
+
image.setSrc(imgSrc, () => {
|
|
1167
|
+
this.currentGroup = lodash_default.a.cloneDeep(this.currentGroupBK);
|
|
1168
|
+
});
|
|
1169
|
+
this.$emit('changeLaneDir', {
|
|
1170
|
+
laneDirCode: this.currentGroup.name,
|
|
1171
|
+
laneDirName: item.laneDirName
|
|
1172
|
+
});
|
|
1173
|
+
},
|
|
1174
|
+
calcBgColor(value) {
|
|
1175
|
+
if (value || value == 0) {
|
|
1176
|
+
const colorList = [{
|
|
1177
|
+
r: 0,
|
|
1178
|
+
g: 104,
|
|
1179
|
+
b: 55
|
|
1180
|
+
}, {
|
|
1181
|
+
r: 26,
|
|
1182
|
+
g: 152,
|
|
1183
|
+
b: 80
|
|
1184
|
+
}, {
|
|
1185
|
+
r: 102,
|
|
1186
|
+
g: 189,
|
|
1187
|
+
b: 99
|
|
1188
|
+
}, {
|
|
1189
|
+
r: 166,
|
|
1190
|
+
g: 217,
|
|
1191
|
+
b: 106
|
|
1192
|
+
}, {
|
|
1193
|
+
r: 217,
|
|
1194
|
+
g: 239,
|
|
1195
|
+
b: 139
|
|
1196
|
+
}, {
|
|
1197
|
+
r: 255,
|
|
1198
|
+
g: 255,
|
|
1199
|
+
b: 191
|
|
1200
|
+
}, {
|
|
1201
|
+
r: 254,
|
|
1202
|
+
g: 224,
|
|
1203
|
+
b: 139
|
|
1204
|
+
}, {
|
|
1205
|
+
r: 253,
|
|
1206
|
+
g: 174,
|
|
1207
|
+
b: 97
|
|
1208
|
+
}, {
|
|
1209
|
+
r: 244,
|
|
1210
|
+
g: 109,
|
|
1211
|
+
b: 67
|
|
1212
|
+
}, {
|
|
1213
|
+
r: 215,
|
|
1214
|
+
g: 48,
|
|
1215
|
+
b: 39
|
|
1216
|
+
}, {
|
|
1217
|
+
r: 165,
|
|
1218
|
+
g: 0,
|
|
1219
|
+
b: 38
|
|
1220
|
+
}];
|
|
1221
|
+
let startColor = '';
|
|
1222
|
+
let endColor = '';
|
|
1223
|
+
const percentage = value / this.maxCongestionValue; // 获取百分比
|
|
1224
|
+
if (percentage >= 0 && percentage <= 0.1) {
|
|
1225
|
+
startColor = colorList[0];
|
|
1226
|
+
endColor = colorList[1];
|
|
1227
|
+
} else if (percentage > 0.1 && percentage <= 0.2) {
|
|
1228
|
+
startColor = colorList[1];
|
|
1229
|
+
endColor = colorList[2];
|
|
1230
|
+
} else if (percentage > 0.2 && percentage <= 0.3) {
|
|
1231
|
+
startColor = colorList[2];
|
|
1232
|
+
endColor = colorList[3];
|
|
1233
|
+
} else if (percentage > 0.3 && percentage <= 0.4) {
|
|
1234
|
+
startColor = colorList[3];
|
|
1235
|
+
endColor = colorList[4];
|
|
1236
|
+
} else if (percentage > 0.4 && percentage <= 0.5) {
|
|
1237
|
+
startColor = colorList[4];
|
|
1238
|
+
endColor = colorList[5];
|
|
1239
|
+
} else if (percentage > 0.5 && percentage <= 0.6) {
|
|
1240
|
+
startColor = colorList[5];
|
|
1241
|
+
endColor = colorList[6];
|
|
1242
|
+
} else if (percentage > 0.6 && percentage <= 0.7) {
|
|
1243
|
+
startColor = colorList[6];
|
|
1244
|
+
endColor = colorList[7];
|
|
1245
|
+
} else if (percentage > 0.7 && percentage <= 0.8) {
|
|
1246
|
+
startColor = colorList[7];
|
|
1247
|
+
endColor = colorList[8];
|
|
1248
|
+
} else if (percentage > 0.8 && percentage <= 0.9) {
|
|
1249
|
+
startColor = colorList[8];
|
|
1250
|
+
endColor = colorList[9];
|
|
1251
|
+
} else if (percentage > 0.9 && percentage <= 1) {
|
|
1252
|
+
startColor = colorList[9];
|
|
1253
|
+
endColor = colorList[10];
|
|
1254
|
+
} else if (percentage > 1) {
|
|
1255
|
+
startColor = colorList[10];
|
|
1256
|
+
endColor = colorList[10];
|
|
1257
|
+
}
|
|
1258
|
+
// 插值计算 RGB 值
|
|
1259
|
+
const r = Math.floor(startColor.r + (endColor.r - startColor.r) * percentage);
|
|
1260
|
+
const g = Math.floor(startColor.g + (endColor.g - startColor.g) * percentage);
|
|
1261
|
+
const b = Math.floor(startColor.b + (endColor.b - startColor.b) * percentage);
|
|
1262
|
+
return `rgb(${r}, ${g}, ${b})`;
|
|
1263
|
+
} else {
|
|
1264
|
+
return 'transparent';
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
});
|
|
1269
|
+
// CONCATENATED MODULE: ./src/components/traffic-lane/index.vue?vue&type=script&lang=js
|
|
1270
|
+
/* harmony default export */ var components_traffic_lanevue_type_script_lang_js = (traffic_lanevue_type_script_lang_js);
|
|
1271
|
+
// EXTERNAL MODULE: ./src/components/traffic-lane/index.vue?vue&type=style&index=0&id=52147a10&prod&scoped=true&lang=scss
|
|
1272
|
+
var traffic_lanevue_type_style_index_0_id_52147a10_prod_scoped_true_lang_scss = __webpack_require__("acb9");
|
|
1273
|
+
|
|
1274
|
+
// EXTERNAL MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
|
|
1275
|
+
var componentNormalizer = __webpack_require__("2877");
|
|
1276
|
+
|
|
1277
|
+
// CONCATENATED MODULE: ./src/components/traffic-lane/index.vue
|
|
1278
|
+
|
|
1279
|
+
|
|
1280
|
+
|
|
1281
|
+
|
|
1282
|
+
|
|
1283
|
+
|
|
1284
|
+
/* normalize component */
|
|
1285
|
+
|
|
1286
|
+
var component = Object(componentNormalizer["a" /* default */])(
|
|
1287
|
+
components_traffic_lanevue_type_script_lang_js,
|
|
1288
|
+
render,
|
|
1289
|
+
staticRenderFns,
|
|
1290
|
+
false,
|
|
1291
|
+
null,
|
|
1292
|
+
"52147a10",
|
|
1293
|
+
null
|
|
1294
|
+
|
|
1295
|
+
)
|
|
1296
|
+
|
|
1297
|
+
/* harmony default export */ var traffic_lane = (component.exports);
|
|
1298
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"f2351f80-vue-loader-template"}!./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--6!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/green-wave/index.vue?vue&type=template&id=9b8515cc&scoped=true
|
|
1299
|
+
var green_wavevue_type_template_id_9b8515cc_scoped_true_render = function render() {
|
|
1300
|
+
var _vm = this,
|
|
1301
|
+
_c = _vm._self._c;
|
|
1302
|
+
return _c('div', {
|
|
1303
|
+
staticClass: "canvas-wrapper"
|
|
1304
|
+
}, [_c('canvas', {
|
|
1305
|
+
ref: "canvas_l",
|
|
1306
|
+
style: {
|
|
1307
|
+
width: _vm.yAxisWidth + 'px'
|
|
1308
|
+
}
|
|
1309
|
+
}), _c('canvas', {
|
|
1310
|
+
ref: "canvas",
|
|
1311
|
+
staticStyle: {
|
|
1312
|
+
"flex": "1"
|
|
1313
|
+
}
|
|
1314
|
+
})]);
|
|
1315
|
+
};
|
|
1316
|
+
var green_wavevue_type_template_id_9b8515cc_scoped_true_staticRenderFns = [];
|
|
1317
|
+
|
|
1318
|
+
// CONCATENATED MODULE: ./src/components/green-wave/index.vue?vue&type=template&id=9b8515cc&scoped=true
|
|
1319
|
+
|
|
1320
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--13-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/green-wave/index.vue?vue&type=script&lang=js
|
|
1321
|
+
|
|
1322
|
+
|
|
1323
|
+
/* harmony default export */ var green_wavevue_type_script_lang_js = ({
|
|
1324
|
+
name: 'green-wave',
|
|
1325
|
+
props: {
|
|
1326
|
+
/**
|
|
1327
|
+
* 绿波路口数据
|
|
1328
|
+
* - Possible values:
|
|
1329
|
+
* - Array
|
|
1330
|
+
* 字段描述:
|
|
1331
|
+
* - crossId: string - 路口ID
|
|
1332
|
+
* - crossRoadName: string - 路口名称
|
|
1333
|
+
* - crossDistance: number - 路口距离
|
|
1334
|
+
* - orderNumber: number - 排序编号
|
|
1335
|
+
* - forwardGreen: number - 路口正向车道绿灯时长(A路口 -> B路口)
|
|
1336
|
+
* - reverseGreen: number - 路口反向车道绿灯时长(B路口 -> A路口)
|
|
1337
|
+
* - forwardSpeed: number - 路口正向车道速度(A路口 -> B路口)
|
|
1338
|
+
* - reverseSpeed: number - 路口反向车道速度(B路口 -> A路口)
|
|
1339
|
+
* - forwardPhaseDiff: number - 路口正向车道相位差时长(A路口 -> B路口)
|
|
1340
|
+
* - reversePhaseDiff: number - 路口反向车道相位差时长(B路口 -> A路口)
|
|
1341
|
+
* - greenFlag: boolean - 绿波标志
|
|
1342
|
+
* - phaseDiffFlag: boolean - 相位标志
|
|
1343
|
+
*/
|
|
1344
|
+
crossData: {
|
|
1345
|
+
type: Array,
|
|
1346
|
+
default: () => []
|
|
1347
|
+
},
|
|
1348
|
+
/**
|
|
1349
|
+
* 画布高度
|
|
1350
|
+
*/
|
|
1351
|
+
canvasHeight: {
|
|
1352
|
+
type: Number,
|
|
1353
|
+
default: 500
|
|
1354
|
+
},
|
|
1355
|
+
/**
|
|
1356
|
+
* 是否正向(从上到下, 从左到右为正方向)
|
|
1357
|
+
*/
|
|
1358
|
+
forwardDirection: {
|
|
1359
|
+
type: Boolean,
|
|
1360
|
+
default: true
|
|
1361
|
+
},
|
|
1362
|
+
/**
|
|
1363
|
+
* 绿波周期间隔(单位:秒)
|
|
1364
|
+
*/
|
|
1365
|
+
interval: {
|
|
1366
|
+
type: Number,
|
|
1367
|
+
default: 70
|
|
1368
|
+
},
|
|
1369
|
+
/**
|
|
1370
|
+
* 正向绿波颜色
|
|
1371
|
+
*/
|
|
1372
|
+
forwardColor: {
|
|
1373
|
+
type: String,
|
|
1374
|
+
default: '#058213'
|
|
1375
|
+
},
|
|
1376
|
+
/**
|
|
1377
|
+
* 反向绿波颜色
|
|
1378
|
+
*/
|
|
1379
|
+
backwardColor: {
|
|
1380
|
+
type: String,
|
|
1381
|
+
default: '#0eed28'
|
|
1382
|
+
},
|
|
1383
|
+
/**
|
|
1384
|
+
* 拖拽线宽
|
|
1385
|
+
*/
|
|
1386
|
+
dragStrokeWidth: {
|
|
1387
|
+
type: Number,
|
|
1388
|
+
default: 5
|
|
1389
|
+
},
|
|
1390
|
+
/**
|
|
1391
|
+
* 单绿波宽度
|
|
1392
|
+
* 值越小宽度越小,值越大宽度越大
|
|
1393
|
+
*/
|
|
1394
|
+
singleWaveWidth: {
|
|
1395
|
+
type: Number,
|
|
1396
|
+
default: 2
|
|
1397
|
+
},
|
|
1398
|
+
/**
|
|
1399
|
+
* X轴底部间距
|
|
1400
|
+
*/
|
|
1401
|
+
xAxisBottom: {
|
|
1402
|
+
type: Number,
|
|
1403
|
+
default: 30
|
|
1404
|
+
},
|
|
1405
|
+
/**
|
|
1406
|
+
* Y轴顶部间距
|
|
1407
|
+
*/
|
|
1408
|
+
yAxisTop: {
|
|
1409
|
+
type: Number,
|
|
1410
|
+
default: 30
|
|
1411
|
+
},
|
|
1412
|
+
/**
|
|
1413
|
+
* Y轴文本刻度宽度
|
|
1414
|
+
*/
|
|
1415
|
+
yAxisWidth: {
|
|
1416
|
+
type: Number,
|
|
1417
|
+
default: 200
|
|
1418
|
+
},
|
|
1419
|
+
/**
|
|
1420
|
+
* 绿波循环次数
|
|
1421
|
+
* - Possible values:
|
|
1422
|
+
* - Number
|
|
1423
|
+
* - 0 - 默认值,自动计算
|
|
1424
|
+
* - 1 - 循环一次
|
|
1425
|
+
*/
|
|
1426
|
+
loopTime: {
|
|
1427
|
+
type: Number,
|
|
1428
|
+
default: 0
|
|
1429
|
+
}
|
|
1430
|
+
},
|
|
1431
|
+
data() {
|
|
1432
|
+
return {
|
|
1433
|
+
groups_forward: [],
|
|
1434
|
+
groups_back: [],
|
|
1435
|
+
// 初始值,默认按照容器宽度
|
|
1436
|
+
canvasWidth: 500,
|
|
1437
|
+
canvas: null,
|
|
1438
|
+
canvas_l: null,
|
|
1439
|
+
initialPositions: {},
|
|
1440
|
+
calculateLoopTime: 0,
|
|
1441
|
+
resizeHandler: null
|
|
1442
|
+
};
|
|
1443
|
+
},
|
|
1444
|
+
computed: {
|
|
1445
|
+
mulWatchData() {
|
|
1446
|
+
return {
|
|
1447
|
+
interval: this.interval,
|
|
1448
|
+
crossData: this.crossData,
|
|
1449
|
+
forwardDirection: this.forwardDirection
|
|
1450
|
+
};
|
|
1451
|
+
}
|
|
1452
|
+
},
|
|
1453
|
+
watch: {
|
|
1454
|
+
mulWatchData: {
|
|
1455
|
+
handler(val) {
|
|
1456
|
+
this.drawRoad();
|
|
1457
|
+
},
|
|
1458
|
+
deep: true
|
|
1459
|
+
}
|
|
1460
|
+
},
|
|
1461
|
+
mounted() {
|
|
1462
|
+
this.init();
|
|
1463
|
+
},
|
|
1464
|
+
created() {
|
|
1465
|
+
this.resizeHandler = lodash_default.a.debounce(() => {
|
|
1466
|
+
if (this.canvas) {
|
|
1467
|
+
this.canvas.dispose();
|
|
1468
|
+
this.canvas_l.dispose();
|
|
1469
|
+
this.canvas = null;
|
|
1470
|
+
this.canvas_l = null;
|
|
1471
|
+
this.init();
|
|
1472
|
+
}
|
|
1473
|
+
}, 200);
|
|
1474
|
+
window.addEventListener('resize', this.resizeHandler);
|
|
1475
|
+
},
|
|
1476
|
+
beforeDestroy() {
|
|
1477
|
+
window.removeEventListener('resize', this.resizeHandler);
|
|
1478
|
+
this.resizeHandler.cancel();
|
|
1479
|
+
if (this.canvas) {
|
|
1480
|
+
this.canvas.dispose();
|
|
1481
|
+
this.canvas_l.dispose();
|
|
1482
|
+
}
|
|
1483
|
+
},
|
|
1484
|
+
methods: {
|
|
1485
|
+
/**
|
|
1486
|
+
* 初始化
|
|
1487
|
+
*/
|
|
1488
|
+
init() {
|
|
1489
|
+
// Get container width dynamically
|
|
1490
|
+
const containerWidth = this.$el.offsetWidth - this.yAxisWidth;
|
|
1491
|
+
|
|
1492
|
+
// Initialize main canvas
|
|
1493
|
+
if (this.canvas) {
|
|
1494
|
+
this.canvas.dispose();
|
|
1495
|
+
}
|
|
1496
|
+
this.canvas = new fabric["fabric"].Canvas(this.$refs.canvas, {
|
|
1497
|
+
backgroundColor: '#fff',
|
|
1498
|
+
selection: false,
|
|
1499
|
+
width: containerWidth,
|
|
1500
|
+
height: this.canvasHeight
|
|
1501
|
+
});
|
|
1502
|
+
|
|
1503
|
+
// Initialize y-axis canvas
|
|
1504
|
+
if (this.canvas_l) {
|
|
1505
|
+
this.canvas_l.dispose();
|
|
1506
|
+
}
|
|
1507
|
+
this.canvas_l = new fabric["fabric"].Canvas(this.$refs.canvas_l, {
|
|
1508
|
+
backgroundColor: '#fff',
|
|
1509
|
+
selection: false,
|
|
1510
|
+
width: this.yAxisWidth,
|
|
1511
|
+
height: this.canvasHeight
|
|
1512
|
+
});
|
|
1513
|
+
this.drawRoad();
|
|
1514
|
+
},
|
|
1515
|
+
// 绘制路口
|
|
1516
|
+
drawBaseElement() {
|
|
1517
|
+
// 横纵坐标,周期线
|
|
1518
|
+
this.canvas.add(new fabric["fabric"].Line([0, this.canvas.height - this.xAxisBottom, this.canvas.width, this.canvas.height - this.xAxisBottom], {
|
|
1519
|
+
stroke: '#333',
|
|
1520
|
+
strokeWidth: 1
|
|
1521
|
+
}));
|
|
1522
|
+
// 纵轴线
|
|
1523
|
+
this.canvas.add(new fabric["fabric"].Line([0, this.canvas.height - this.xAxisBottom, 0, this.yAxisTop], {
|
|
1524
|
+
stroke: '#333',
|
|
1525
|
+
strokeWidth: 1
|
|
1526
|
+
}));
|
|
1527
|
+
// // 画周期
|
|
1528
|
+
const contentWidth = this.canvas.width;
|
|
1529
|
+
this.calculateLoopTime = this.loopTime || Math.ceil(contentWidth / this.interval / this.singleWaveWidth);
|
|
1530
|
+
for (let i = 1; i < this.calculateLoopTime; i++) {
|
|
1531
|
+
this.canvas.add(new fabric["fabric"].Line([this.interval * this.singleWaveWidth * i, this.canvas.height - this.xAxisBottom, this.interval * this.singleWaveWidth * i, this.yAxisTop], {
|
|
1532
|
+
stroke: 'lightgrey',
|
|
1533
|
+
strokeWidth: 1,
|
|
1534
|
+
strokeDashArray: [5, 2]
|
|
1535
|
+
}));
|
|
1536
|
+
this.canvas.add(new fabric["fabric"].Textbox(`${this.interval * i}s`, {
|
|
1537
|
+
fontSize: 14,
|
|
1538
|
+
left: this.interval * this.singleWaveWidth * i,
|
|
1539
|
+
top: this.canvas.height - this.xAxisBottom + 5,
|
|
1540
|
+
textAlign: 'center',
|
|
1541
|
+
backgroundColor: '#fff',
|
|
1542
|
+
originX: 'center',
|
|
1543
|
+
originY: 'top'
|
|
1544
|
+
}));
|
|
1545
|
+
}
|
|
1546
|
+
},
|
|
1547
|
+
// 获取时距拖拽方向
|
|
1548
|
+
getGroupDirection({
|
|
1549
|
+
crossId,
|
|
1550
|
+
left
|
|
1551
|
+
}) {
|
|
1552
|
+
const initialPos = this.initialPositions[crossId];
|
|
1553
|
+
let direction = 'none';
|
|
1554
|
+
if (initialPos) {
|
|
1555
|
+
direction = left > initialPos ? 'forward' : 'backward';
|
|
1556
|
+
}
|
|
1557
|
+
return direction;
|
|
1558
|
+
},
|
|
1559
|
+
drawRoad() {
|
|
1560
|
+
// this.canvas_l && this.canvas_l.clear();
|
|
1561
|
+
// this.canvas && this.canvas.clear();
|
|
1562
|
+
this.groups_forward = [];
|
|
1563
|
+
this.groups_back = [];
|
|
1564
|
+
this.drawBaseElement();
|
|
1565
|
+
this.canvas_l.add(new fabric["fabric"].Line([this.yAxisWidth / 2, this.canvas.height - this.xAxisBottom, this.yAxisWidth / 2, this.yAxisTop], {
|
|
1566
|
+
stroke: 'lightgrey',
|
|
1567
|
+
strokeWidth: 1,
|
|
1568
|
+
strokeDashArray: [5, 2]
|
|
1569
|
+
}));
|
|
1570
|
+
const totalDistance = this.crossData.reduce((pre, cur) => pre + cur.crossDistance, 0);
|
|
1571
|
+
let yDis = 0;
|
|
1572
|
+
const contentHeight = this.canvas.height - this.yAxisTop - this.xAxisBottom;
|
|
1573
|
+
this.crossData.forEach((item, index) => {
|
|
1574
|
+
yDis += item.crossDistance;
|
|
1575
|
+
let top = 0;
|
|
1576
|
+
if (this.forwardDirection) {
|
|
1577
|
+
top = (totalDistance - yDis) / totalDistance * contentHeight + this.yAxisTop;
|
|
1578
|
+
} else {
|
|
1579
|
+
top = yDis / totalDistance * contentHeight + this.yAxisTop;
|
|
1580
|
+
}
|
|
1581
|
+
this.canvas_l.add(new fabric["fabric"].Textbox(`【${item.crossRoadName}】`, {
|
|
1582
|
+
fontSize: 14,
|
|
1583
|
+
left: 0,
|
|
1584
|
+
top: top,
|
|
1585
|
+
textAlign: 'center',
|
|
1586
|
+
width: this.yAxisWidth - 1,
|
|
1587
|
+
backgroundColor: '#fff',
|
|
1588
|
+
originY: 'bottom'
|
|
1589
|
+
}));
|
|
1590
|
+
if (index !== 0) {
|
|
1591
|
+
let text_top = 0;
|
|
1592
|
+
if (this.forwardDirection) {
|
|
1593
|
+
text_top = (totalDistance - yDis + item.crossDistance / 2) / totalDistance * contentHeight + this.yAxisTop;
|
|
1594
|
+
} else {
|
|
1595
|
+
text_top = (yDis - item.crossDistance / 2) / totalDistance * contentHeight + this.yAxisTop;
|
|
1596
|
+
}
|
|
1597
|
+
var text2 = new fabric["fabric"].Textbox(`${item.crossDistance},${item.forwardSpeed}km/h`, {
|
|
1598
|
+
fontSize: 14,
|
|
1599
|
+
left: 0,
|
|
1600
|
+
top: text_top,
|
|
1601
|
+
textAlign: 'center',
|
|
1602
|
+
width: this.yAxisWidth - 1,
|
|
1603
|
+
backgroundColor: '#fff',
|
|
1604
|
+
originY: 'bottom'
|
|
1605
|
+
});
|
|
1606
|
+
this.canvas_l.add(text2);
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1609
|
+
// 绘制绿灯
|
|
1610
|
+
let list = [];
|
|
1611
|
+
let list_back = [];
|
|
1612
|
+
for (let i = -1; i < this.calculateLoopTime; i++) {
|
|
1613
|
+
const cross = new fabric["fabric"].Line([(item.forwardPhaseDiff + this.interval * i) * this.singleWaveWidth, top, (item.forwardPhaseDiff + item.forwardGreen + this.interval * i) * this.singleWaveWidth, top], {
|
|
1614
|
+
stroke: this.forwardColor,
|
|
1615
|
+
strokeWidth: this.dragStrokeWidth,
|
|
1616
|
+
originY: 'bottom'
|
|
1617
|
+
});
|
|
1618
|
+
const cross_back = new fabric["fabric"].Line([(item.reversePhaseDiff + this.interval * i) * this.singleWaveWidth, top - this.dragStrokeWidth, (item.reversePhaseDiff + item.reverseGreen + this.interval * i) * this.singleWaveWidth, top - this.dragStrokeWidth], {
|
|
1619
|
+
stroke: this.backwardColor,
|
|
1620
|
+
strokeWidth: this.dragStrokeWidth,
|
|
1621
|
+
originY: 'bottom'
|
|
1622
|
+
});
|
|
1623
|
+
list.push(cross);
|
|
1624
|
+
list_back.push(cross_back);
|
|
1625
|
+
}
|
|
1626
|
+
const group = new fabric["fabric"].Group(list, {
|
|
1627
|
+
...item,
|
|
1628
|
+
roadType: 0,
|
|
1629
|
+
// 正向
|
|
1630
|
+
hoverCursor: 'ew-resize',
|
|
1631
|
+
moveCursor: 'ew-resize',
|
|
1632
|
+
lockRotation: true,
|
|
1633
|
+
lockMovementY: true,
|
|
1634
|
+
hasControls: false,
|
|
1635
|
+
hasBorders: false
|
|
1636
|
+
});
|
|
1637
|
+
const group_back = new fabric["fabric"].Group(list_back, {
|
|
1638
|
+
...item,
|
|
1639
|
+
roadType: 1,
|
|
1640
|
+
// 反向
|
|
1641
|
+
hoverCursor: 'ew-resize',
|
|
1642
|
+
moveCursor: 'ew-resize',
|
|
1643
|
+
lockRotation: true,
|
|
1644
|
+
lockMovementY: true,
|
|
1645
|
+
hasControls: false,
|
|
1646
|
+
hasBorders: false
|
|
1647
|
+
});
|
|
1648
|
+
|
|
1649
|
+
// 初始位置
|
|
1650
|
+
this.initialPositions[group.crossId] = group.left;
|
|
1651
|
+
this.initialPositions[group_back.crossId] = group_back.left;
|
|
1652
|
+
this.groups_forward.push(group);
|
|
1653
|
+
this.groups_back.push(group_back);
|
|
1654
|
+
this.canvas.add(group, group_back);
|
|
1655
|
+
let startDistance = 0;
|
|
1656
|
+
let endDistance = 0;
|
|
1657
|
+
let crossId = '';
|
|
1658
|
+
group.on('moving', e => {
|
|
1659
|
+
if (e.transform.target.left <= -1 * this.interval * this.singleWaveWidth) {
|
|
1660
|
+
e.transform.target.left = -1 * this.interval * this.singleWaveWidth;
|
|
1661
|
+
} else if (e.transform.target.left >= 0) {
|
|
1662
|
+
e.transform.target.left = 0;
|
|
1663
|
+
}
|
|
1664
|
+
const target = e.transform.target;
|
|
1665
|
+
const index = this.groups_forward.findIndex(ele => ele.crossId === target.crossId);
|
|
1666
|
+
if (index !== this.groups_forward.length - 1) {
|
|
1667
|
+
this.drawForward(target, this.groups_forward[index + 1]);
|
|
1668
|
+
}
|
|
1669
|
+
if (index !== 0) {
|
|
1670
|
+
this.drawForward(this.groups_forward[index - 1], target);
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
// 查找反向绿波组
|
|
1674
|
+
this.groups_back[index].left = e.transform.target.left;
|
|
1675
|
+
this.groups_back[index].setCoords();
|
|
1676
|
+
if (index !== 0) {
|
|
1677
|
+
this.drawBackward(this.groups_back[index], this.groups_back[index - 1]);
|
|
1678
|
+
}
|
|
1679
|
+
if (index !== this.groups_back.length - 1) {
|
|
1680
|
+
this.drawBackward(this.groups_back[index + 1], this.groups_back[index]);
|
|
1681
|
+
}
|
|
1682
|
+
this.$emit('computeData', {
|
|
1683
|
+
groups_forward: this.groups_forward,
|
|
1684
|
+
groups_back: this.groups_back,
|
|
1685
|
+
rate: this.singleWaveWidth,
|
|
1686
|
+
current_group: group
|
|
1687
|
+
});
|
|
1688
|
+
});
|
|
1689
|
+
group.on('mouseup', e => {
|
|
1690
|
+
this.$emit('updateCrossParams', {
|
|
1691
|
+
rate: this.singleWaveWidth,
|
|
1692
|
+
current_group: group,
|
|
1693
|
+
direction: this.getGroupDirection(e.transform.target)
|
|
1694
|
+
});
|
|
1695
|
+
});
|
|
1696
|
+
group_back.on('moving', e => {
|
|
1697
|
+
if (e.transform.target.left <= -1 * this.interval * this.singleWaveWidth) {
|
|
1698
|
+
e.transform.target.left = -1 * this.interval * this.singleWaveWidth;
|
|
1699
|
+
} else if (e.transform.target.left >= 0) {
|
|
1700
|
+
e.transform.target.left = 0;
|
|
1701
|
+
}
|
|
1702
|
+
const target = e.transform.target;
|
|
1703
|
+
const index = this.groups_back.findIndex(ele => ele.crossId === target.crossId);
|
|
1704
|
+
if (index !== 0) {
|
|
1705
|
+
this.drawBackward(target, this.groups_back[index - 1]);
|
|
1706
|
+
}
|
|
1707
|
+
if (index !== this.groups_back.length - 1) {
|
|
1708
|
+
this.drawBackward(this.groups_back[index + 1], target);
|
|
1709
|
+
}
|
|
1710
|
+
// 查找正向绿波组
|
|
1711
|
+
this.groups_forward[index].left = e.transform.target.left;
|
|
1712
|
+
this.groups_forward[index].setCoords();
|
|
1713
|
+
if (index !== this.groups_forward.length - 1) {
|
|
1714
|
+
this.drawForward(this.groups_forward[index], this.groups_back[index + 1]);
|
|
1715
|
+
}
|
|
1716
|
+
if (index !== 0) {
|
|
1717
|
+
this.drawForward(this.groups_forward[index - 1], this.groups_back[index]);
|
|
1718
|
+
}
|
|
1719
|
+
this.$emit('computeData', {
|
|
1720
|
+
groups_forward: this.groups_forward,
|
|
1721
|
+
groups_back: this.groups_back,
|
|
1722
|
+
rate: this.singleWaveWidth,
|
|
1723
|
+
current_group: group_back
|
|
1724
|
+
});
|
|
1725
|
+
});
|
|
1726
|
+
group_back.on('mouseup', e => {
|
|
1727
|
+
this.$emit('updateCrossParams', {
|
|
1728
|
+
rate: this.singleWaveWidth,
|
|
1729
|
+
current_group: group_back,
|
|
1730
|
+
direction: this.getGroupDirection(e.transform.target)
|
|
1731
|
+
});
|
|
1732
|
+
});
|
|
1733
|
+
});
|
|
1734
|
+
|
|
1735
|
+
// 初始化正向绿波
|
|
1736
|
+
for (let i = 0; i < this.groups_forward.length - 1; i++) {
|
|
1737
|
+
this.drawForward(this.groups_forward[i], this.groups_forward[i + 1]);
|
|
1738
|
+
}
|
|
1739
|
+
// 初始化反向绿波
|
|
1740
|
+
for (let i = this.groups_back.length - 1; i > 0; i--) {
|
|
1741
|
+
this.drawBackward(this.groups_back[i], this.groups_back[i - 1]);
|
|
1742
|
+
}
|
|
1743
|
+
this.$emit('computeData', {
|
|
1744
|
+
groups_forward: this.groups_forward,
|
|
1745
|
+
groups_back: this.groups_back,
|
|
1746
|
+
rate: this.singleWaveWidth
|
|
1747
|
+
});
|
|
1748
|
+
},
|
|
1749
|
+
drawForward(startGroup, endGroup) {
|
|
1750
|
+
// 计算到下个路口所需的时间
|
|
1751
|
+
const time = endGroup.crossDistance / 1000 / startGroup.forwardSpeed * 3600;
|
|
1752
|
+
let y1 = startGroup.aCoords.bl.y;
|
|
1753
|
+
let y2 = endGroup.aCoords.bl.y;
|
|
1754
|
+
startGroup.forEachObject((item, index) => {
|
|
1755
|
+
let x1, x2, x3, x4; // 左下开始顺时针
|
|
1756
|
+
const need_t = time * this.singleWaveWidth;
|
|
1757
|
+
const pk = 'polygon' + index;
|
|
1758
|
+
endGroup.forEachObject((ng, gidx) => {
|
|
1759
|
+
const start_x0 = item.aCoords.tl.x + startGroup.left + startGroup.width / 2; // 开始点
|
|
1760
|
+
const end_x0 = ng.aCoords.tl.x + endGroup.left + endGroup.width / 2;
|
|
1761
|
+
if (start_x0 + need_t > end_x0 && start_x0 + need_t < end_x0 + ng.width && start_x0 + item.width + need_t > end_x0 + ng.width) {
|
|
1762
|
+
x1 = start_x0;
|
|
1763
|
+
x2 = start_x0 + time * this.singleWaveWidth;
|
|
1764
|
+
x3 = end_x0 + ng.width;
|
|
1765
|
+
x4 = x1 + x3 - x2;
|
|
1766
|
+
} else if (start_x0 + need_t > end_x0 && start_x0 + need_t < end_x0 + ng.width && start_x0 + item.width + need_t > end_x0 && start_x0 + item.width + need_t < end_x0 + ng.width) {
|
|
1767
|
+
x1 = start_x0;
|
|
1768
|
+
x2 = start_x0 + need_t;
|
|
1769
|
+
x3 = start_x0 + item.width + need_t;
|
|
1770
|
+
x4 = start_x0 + item.width;
|
|
1771
|
+
} else if (start_x0 + need_t < end_x0 && start_x0 + item.width + need_t > end_x0 && start_x0 + item.width + need_t < end_x0 + ng.width) {
|
|
1772
|
+
x1 = end_x0 - time * this.singleWaveWidth;
|
|
1773
|
+
x2 = end_x0;
|
|
1774
|
+
x3 = x2 + start_x0 + item.width - x1;
|
|
1775
|
+
x4 = start_x0 + item.width;
|
|
1776
|
+
} else if (end_x0 - need_t > start_x0 && end_x0 - need_t < start_x0 + item.width && end_x0 + ng.width - need_t > start_x0 && end_x0 + ng.width - need_t < start_x0 + item.width) {
|
|
1777
|
+
x1 = end_x0 - need_t;
|
|
1778
|
+
x2 = end_x0;
|
|
1779
|
+
x3 = end_x0 + ng.width;
|
|
1780
|
+
x4 = x3 - need_t;
|
|
1781
|
+
} else if (end_x0 - need_t > start_x0 && end_x0 - need_t < start_x0 + item.width && end_x0 + ng.width - need_t > start_x0 + item.width) {
|
|
1782
|
+
x1 = end_x0 - need_t;
|
|
1783
|
+
x2 = end_x0;
|
|
1784
|
+
x4 = start_x0 + item.width;
|
|
1785
|
+
x3 = x4 + need_t;
|
|
1786
|
+
} else if (end_x0 - need_t < start_x0 && end_x0 + ng.width - need_t > start_x0 && end_x0 + ng.width - need_t < start_x0 + item.width) {
|
|
1787
|
+
x1 = start_x0;
|
|
1788
|
+
x2 = x1 - need_t;
|
|
1789
|
+
x3 = end_x0 + ng.width;
|
|
1790
|
+
x4 = x3 - need_t;
|
|
1791
|
+
}
|
|
1792
|
+
});
|
|
1793
|
+
if (item[pk]) {
|
|
1794
|
+
this.canvas.remove(item[pk]);
|
|
1795
|
+
item[pk] = null;
|
|
1796
|
+
}
|
|
1797
|
+
if (x1 !== x3 && x2 !== x4) {
|
|
1798
|
+
item[pk] = this.drawPolygon([{
|
|
1799
|
+
x: x1,
|
|
1800
|
+
y: y1
|
|
1801
|
+
}, {
|
|
1802
|
+
x: x2,
|
|
1803
|
+
y: y2
|
|
1804
|
+
}, {
|
|
1805
|
+
x: x3,
|
|
1806
|
+
y: y2
|
|
1807
|
+
}, {
|
|
1808
|
+
x: x4,
|
|
1809
|
+
y: y1
|
|
1810
|
+
}], this.forwardColor);
|
|
1811
|
+
this.canvas.add(item[pk]);
|
|
1812
|
+
}
|
|
1813
|
+
});
|
|
1814
|
+
},
|
|
1815
|
+
// 反向绿波图
|
|
1816
|
+
drawBackward(startGroup, endGroup) {
|
|
1817
|
+
// 计算到下个路口所需的时间
|
|
1818
|
+
const time = startGroup.crossDistance / 1000 / startGroup.reverseSpeed * 3600;
|
|
1819
|
+
let y1 = startGroup.aCoords.bl.y;
|
|
1820
|
+
let y2 = endGroup.aCoords.bl.y;
|
|
1821
|
+
startGroup.forEachObject((item, index) => {
|
|
1822
|
+
let x1, x2, x3, x4; // 左上开始顺时针
|
|
1823
|
+
const need_t = time * this.singleWaveWidth;
|
|
1824
|
+
const pk = 'polygon_back' + index;
|
|
1825
|
+
endGroup.forEachObject((ng, gidx) => {
|
|
1826
|
+
const start_x0 = item.aCoords.tl.x + startGroup.left + startGroup.width / 2; // 开始点
|
|
1827
|
+
const end_x0 = ng.aCoords.tl.x + endGroup.left + endGroup.width / 2;
|
|
1828
|
+
if (start_x0 + need_t > end_x0 && start_x0 + need_t < end_x0 + ng.width && start_x0 + item.width + need_t > end_x0 + ng.width) {
|
|
1829
|
+
x1 = start_x0;
|
|
1830
|
+
x4 = start_x0 + time * this.singleWaveWidth;
|
|
1831
|
+
x3 = end_x0 + ng.width;
|
|
1832
|
+
x2 = x3 - x4 + x1;
|
|
1833
|
+
} else if (start_x0 + need_t > end_x0 && start_x0 + need_t < end_x0 + ng.width && start_x0 + item.width + need_t > end_x0 && start_x0 + item.width + need_t < end_x0 + ng.width) {
|
|
1834
|
+
x1 = start_x0;
|
|
1835
|
+
x4 = start_x0 + need_t;
|
|
1836
|
+
x3 = start_x0 + item.width + need_t;
|
|
1837
|
+
x2 = start_x0 + item.width;
|
|
1838
|
+
} else if (start_x0 + need_t < end_x0 && start_x0 + item.width + need_t > end_x0 && start_x0 + item.width + need_t < end_x0 + ng.width) {
|
|
1839
|
+
x2 = start_x0 + item.width;
|
|
1840
|
+
x3 = x2 + time * this.singleWaveWidth;
|
|
1841
|
+
x4 = end_x0;
|
|
1842
|
+
x1 = x2 - (x3 - x4);
|
|
1843
|
+
} else if (end_x0 - need_t > start_x0 && end_x0 - need_t < start_x0 + item.width && end_x0 + ng.width - need_t > start_x0 && end_x0 + ng.width - need_t < start_x0 + item.width) {
|
|
1844
|
+
x1 = end_x0 - need_t;
|
|
1845
|
+
x4 = end_x0;
|
|
1846
|
+
x3 = end_x0 + ng.width;
|
|
1847
|
+
x2 = x3 - need_t;
|
|
1848
|
+
} else if (end_x0 - need_t > start_x0 && end_x0 - need_t < start_x0 + item.width && end_x0 + ng.width - need_t > start_x0 + item.width) {
|
|
1849
|
+
x1 = end_x0 - need_t;
|
|
1850
|
+
x4 = end_x0;
|
|
1851
|
+
x2 = start_x0 + item.width;
|
|
1852
|
+
x3 = x4 + need_t;
|
|
1853
|
+
} else if (end_x0 - need_t < start_x0 && end_x0 + ng.width - need_t > start_x0 && end_x0 + ng.width - need_t < start_x0 + item.width) {
|
|
1854
|
+
x1 = start_x0;
|
|
1855
|
+
x3 = end_x0 + ng.width;
|
|
1856
|
+
x2 = x3 - need_t;
|
|
1857
|
+
x4 = x1 + need_t;
|
|
1858
|
+
}
|
|
1859
|
+
});
|
|
1860
|
+
if (item[pk]) {
|
|
1861
|
+
this.canvas.remove(item[pk]);
|
|
1862
|
+
item[pk] = null;
|
|
1863
|
+
}
|
|
1864
|
+
if (x1 !== x3 && x2 !== x4) {
|
|
1865
|
+
item[pk] = this.drawPolygon([{
|
|
1866
|
+
x: x1,
|
|
1867
|
+
y: y1
|
|
1868
|
+
}, {
|
|
1869
|
+
x: x2,
|
|
1870
|
+
y: y1
|
|
1871
|
+
}, {
|
|
1872
|
+
x: x3,
|
|
1873
|
+
y: y2
|
|
1874
|
+
}, {
|
|
1875
|
+
x: x4,
|
|
1876
|
+
y: y2
|
|
1877
|
+
}], this.backwardColor);
|
|
1878
|
+
this.canvas.add(item[pk]);
|
|
1879
|
+
}
|
|
1880
|
+
});
|
|
1881
|
+
},
|
|
1882
|
+
drawPolygon(points = [], color = this.forwardColor) {
|
|
1883
|
+
const polygon = new fabric["fabric"].Polygon(points, {
|
|
1884
|
+
fill: color,
|
|
1885
|
+
opacity: 0.5,
|
|
1886
|
+
selectable: false,
|
|
1887
|
+
evented: false,
|
|
1888
|
+
objectCaching: false
|
|
1889
|
+
});
|
|
1890
|
+
// polygon.sendToBack();
|
|
1891
|
+
return polygon;
|
|
1892
|
+
}
|
|
1893
|
+
}
|
|
1894
|
+
});
|
|
1895
|
+
// CONCATENATED MODULE: ./src/components/green-wave/index.vue?vue&type=script&lang=js
|
|
1896
|
+
/* harmony default export */ var components_green_wavevue_type_script_lang_js = (green_wavevue_type_script_lang_js);
|
|
1897
|
+
// EXTERNAL MODULE: ./src/components/green-wave/index.vue?vue&type=style&index=0&id=9b8515cc&prod&lang=scss&scoped=true
|
|
1898
|
+
var green_wavevue_type_style_index_0_id_9b8515cc_prod_lang_scss_scoped_true = __webpack_require__("9518");
|
|
1899
|
+
|
|
1900
|
+
// CONCATENATED MODULE: ./src/components/green-wave/index.vue
|
|
1901
|
+
|
|
1902
|
+
|
|
1903
|
+
|
|
1904
|
+
|
|
1905
|
+
|
|
1906
|
+
|
|
1907
|
+
/* normalize component */
|
|
1908
|
+
|
|
1909
|
+
var green_wave_component = Object(componentNormalizer["a" /* default */])(
|
|
1910
|
+
components_green_wavevue_type_script_lang_js,
|
|
1911
|
+
green_wavevue_type_template_id_9b8515cc_scoped_true_render,
|
|
1912
|
+
green_wavevue_type_template_id_9b8515cc_scoped_true_staticRenderFns,
|
|
1913
|
+
false,
|
|
1914
|
+
null,
|
|
1915
|
+
"9b8515cc",
|
|
1916
|
+
null
|
|
1917
|
+
|
|
1918
|
+
)
|
|
1919
|
+
|
|
1920
|
+
/* harmony default export */ var green_wave = (green_wave_component.exports);
|
|
1921
|
+
// CONCATENATED MODULE: ./src/index.js
|
|
1922
|
+
|
|
1923
|
+
|
|
1924
|
+
|
|
1925
|
+
|
|
1926
|
+
|
|
1927
|
+
|
|
1928
|
+
// 初始化事件总线
|
|
1929
|
+
bus(external_commonjs_vue_commonjs2_vue_root_Vue_default.a);
|
|
1930
|
+
|
|
1931
|
+
// 注册全局图片对象
|
|
1932
|
+
external_commonjs_vue_commonjs2_vue_root_Vue_default.a.prototype.pics = pics_load_tool;
|
|
1933
|
+
window.pics = pics_load_tool;
|
|
1934
|
+
|
|
1935
|
+
// 组件安装方法
|
|
1936
|
+
traffic_lane.install = function (Vue) {
|
|
1937
|
+
Vue.component('traffic-lane', traffic_lane);
|
|
1938
|
+
};
|
|
1939
|
+
green_wave.install = function (Vue) {
|
|
1940
|
+
Vue.component('green-wave', green_wave);
|
|
1941
|
+
};
|
|
1942
|
+
|
|
1943
|
+
// 导出组件
|
|
1944
|
+
/* harmony default export */ var src = __webpack_exports__["a"] = ({
|
|
1945
|
+
trafficLane: traffic_lane,
|
|
1946
|
+
greenWave: green_wave
|
|
1947
|
+
});
|
|
1948
|
+
|
|
1949
|
+
|
|
1950
|
+
/***/ }),
|
|
1951
|
+
|
|
1952
|
+
/***/ "b943":
|
|
1953
|
+
/***/ (function(module, exports) {
|
|
1954
|
+
|
|
1955
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAVZJREFUWEftlL8rRmEUxz/fleyUv8AgJaUsbGJlFQaLyWBQBu/AYDDIKsoiZZMVu5JBNrM/gPmrp+5bt9u973u793mv6J7x6ZznfM73/BCRzfYGMCLptMzXKuNU1sf2BPCW+C9Luu8XGxvgBZhKkn4Dk5I+ekFEA7B9Bmxnkr1K6gLlckQBsL0JnBdUeitppUiF2gC2Q4VB+l52KGk/zyEGwDMw3W/YgDVJV1m/2gDdD20/APOZBI+SFpoawn8OYHsY2JV0kCfpQFtgewa4AS4ldRoFsL0OXCRJQ/VPGYAv4B24iz6Eto+D7CVWrMil2hYk/Q6SL9VIHkIrA+wAJzWTVwcIkbbngGtgvAZINQVS120oTD6wmrzlbcAYsFUAWQ8gBbIHHAGdvDtgOwCGmclaHICkJYvA7K8copQSo5I+Gz1EZQdwoKe4DEQL0CrQKtAq8GcV+AFONbshRCVOIgAAAABJRU5ErkJggg=="
|
|
1956
|
+
|
|
1957
|
+
/***/ }),
|
|
1958
|
+
|
|
1959
|
+
/***/ "cdd5":
|
|
1960
|
+
/***/ (function(module, exports) {
|
|
1961
|
+
|
|
1962
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAa1JREFUWEftlitPHVEUhb+VwC8gaRBVOBCtKKINCBTXUdGaPqjoQ1HfFAMYCB5UaUUfYFoBjqsqSqgoAgS4KkTThF8AySInOZcMkzuP28zcmtlmksk+63yzzt5nj/jHsP0cmABuA3eAA+AQ2JP0oaysyiYm82xvAzM5a3ck3S+j3TOAbZcRDjmSCvULE1JfvggslAUAliSFNZlRGsD2E+BzSuk7MC9p3/Y9YBmYSuU8lfQli6AXgI/AbELovaSXaWHbG8CLxPtPkp5VARAq/FZCaFLSXheA0Bk/Eu+PJIVO6Rq9OHCt+PIKLF2oebkNQONA40DjQONArgO294G7BeP3p6QwCa+isqvY9ts4YvMYwjheqQtgFDgucGBM0kktAEHU9i4wnQHRltTqMpJLT87CLrA9B6xlALyWtF43wA3gFBhMbXQO3JT0t1aAeAxfgQepjb5JetjNmcq6oCNu+xGwmdrssaStfgEMAH+AobjhGTAs6aIvAPEY3gGdv+ANSa+y2rPyI4gAoRVDS4ZoSWr3FSBC/A5PSSN5l1MtDkSA1Qjw5n8BjEeAX1UBXAINZgkw80nxDQAAAABJRU5ErkJggg=="
|
|
1963
|
+
|
|
1964
|
+
/***/ }),
|
|
1965
|
+
|
|
1966
|
+
/***/ "d420":
|
|
1967
|
+
/***/ (function(module, exports) {
|
|
1968
|
+
|
|
1969
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA0xJREFUSEullk1oVFcUx///+yZjviZptNMZFYKB2oKWWVorY0VEFwoqStRo1YWIgrgS0bYUpt1EaV25CqUBg1ETvxUMaaiCAdusa+jCRUsIOEmTmcSZydTJu/fYN5OExLz3BvFs3uKce37n475zLuEnP+eblKh9pNksgrUEw465QMYIDArUY0PTjeNVf3u5oauiLd9oKblAYB8AyzcIUgvkptY8hxNVQ2/bLgIE26daDNgGkZCv48XKrAJPFo5Vdc5XLQAEfpk6QyU/QuCeWTkiIWJ41j5WfWnWdM5RsCN7EMKr/s7lJyHDFBz1ZNHxIF8VjtRec2xKgCv5xqBlD1JY63qwGJn5tnCkrhUJUcGPp9op4gkRSragA2txtGqoCKjszNwAsN89Kmoxcur14VDbnD4hqvKTXDt8IAC6/jsUOsDKjokmBq0XHrelAIPD+YOh7kVwB/Jprp30zESLCqxmTfer8wK0ukUvxMV8c915z3onRFWvydwFsNPNhsDXrLk12QtimysASEztrf8+dOfVMkef2VM37nxrurPR3JJ8DrvCmerbkz8Q+M4jiD7W3psYpmClO4AJ25KOCsMeA92c2730T8cudCcVF6rLRlXssPT0aRCuWQowzNDDyWmKBDwA9wFZTyCijYnNAR6k4oTqBzAkxHMKtruXmK9Z/2hiGh6A+YdsSCy3YyaDB6m4sugA/IW0+UHP+DBI1xIt+OU1YukZQEOPUyKUBzglavh1vBdwb/KC8MhYemspg4a+VBwiZQEC9HHZb2NOg1yv6XyAMXYsvTU6AxiNK1Xsgb8IvmF9b7IpEKx4QYjvWNb2PMCT0bhVarKnCKhtZa0ujooPn/57g56jouTDFh1LbyplEH4yGkeZJgvQNfZl+EAR0NCfaqxQ+rnfDqA2sZFZQP9onH5NJjPTxvosvXFpadg5EnmWbAFVp+e4FrNFL7H+cmwtm+tgzD3X+jjjWnhoZEP4uqNfsFiif4ycAfFeCweCs8n1kcULZzaaFQPJFkO2EXinlSlEloKTL9dFvFfmLCT6+8tVCLD1/5dDc9mlD2gR3IaWc8kvlv/zdtl8d29kINlkWdgPYjNE1oD8aMbBGASDAB5rja6Rz6Oez5Y3mtVTetwb13sAAAAASUVORK5CYII="
|
|
1970
|
+
|
|
1971
|
+
/***/ }),
|
|
1972
|
+
|
|
1973
|
+
/***/ "e418":
|
|
1974
|
+
/***/ (function(module, exports) {
|
|
1975
|
+
|
|
1976
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEDSURBVFhH7dQxagJBGMXxIZ7AG9jY2XkBG2srwRPY2KURA4GAnW3AxtY6hSAWQsDCVi9gkZA7BFKt/1leEYgsM7NfrObX7JudnZ236K6z8ALFaA861jaEYhSzAlMoRjEr0MUYGgYzK+DNoXgf/qmPKH55gqb/1wza848mdJm9Dt6hvW5aQZfbeoT2qDSClthoYwfdv9IJWmanB93/pgsUiz60LEjt13CJNXzeYo9yIlByAf/UA0ygU+4ZisGSCrzCvw0b6JTz//wzNAyWVOANP9CwlPoVNPsUf0ExikmBBRSjmRT4hmI0s58gVS6QC+QCuUAukAs0dKzUwicO8iGarsG5K5lGFC/j6SCaAAAAAElFTkSuQmCC"
|
|
1977
|
+
|
|
1978
|
+
/***/ }),
|
|
1979
|
+
|
|
1980
|
+
/***/ "e63c":
|
|
1981
|
+
/***/ (function(module, exports) {
|
|
1982
|
+
|
|
1983
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAEASURBVFhH7dUhjsJAFMbxAoIVBMcVuAIJCk8wBMdB0CsxQLIO1F5jFZoLIDAo4AgYwv5f84mSlG1mOpQs9Gf6hnbyvZmUaeSjhR40zKWqq5MJVBavjSuetgNPXX0Htnozhn4uzg+UH/tGE7r9WH0o98YRI+ixx9lBmamWqEOPh7eCsu7aYwBNCcsOH+Vk+oKmhTWDMjJpSlgfOMMC7CDaIE5LoSmZnA4iC59Cw6iLOTQszgHJo3iIE7T4mG5lqunq5AILtLfexls0kGzqEyr/5PU1XEBlbl4NhOTdwBoqc/m/OxBKsAZc/npJwRqoQKWTcgde5yX0VTZQNvDuDUTRL5qDP5+BXe6aAAAAAElFTkSuQmCC"
|
|
1984
|
+
|
|
1985
|
+
/***/ }),
|
|
1986
|
+
|
|
1987
|
+
/***/ "e7e7":
|
|
1988
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
1989
|
+
|
|
1990
|
+
// extracted by mini-css-extract-plugin
|
|
1991
|
+
|
|
1992
|
+
/***/ }),
|
|
1993
|
+
|
|
1994
|
+
/***/ "e9a7":
|
|
1995
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
1996
|
+
|
|
1997
|
+
module.exports = __webpack_require__.p + "static/img/demo.160f90e8.png";
|
|
1998
|
+
|
|
1999
|
+
/***/ }),
|
|
2000
|
+
|
|
2001
|
+
/***/ "fcf3":
|
|
2002
|
+
/***/ (function(module, exports) {
|
|
2003
|
+
|
|
2004
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAv9JREFUSEuNlj9sFEcUxr9v5vDhA4ONjH22EC0tf4yMBFeALNJSREggYYQwSFAFiBSUNGniKghoQALzxwIiESkhbQQIhG0BwkYUKVJT2Jc7MOA7H5y9Ox/ZNeafz7czxWp355v5zZs3770h5tvFmU1WwU8itxFohVAG8RQy58LD6d8/6j57sRcquwEeBbABRJOAF5SGQ6Z+waGGsUjK6GEH3vZROg8gVWsikYPhwaUHQCru/1nGrnl3ldK+WnoAgcgjYV/jAJdcrnRLGIk4i4jnf38fHMycij5SlyonAPyaoA9JbGXq0vQtErsSxIjMD55nOmLA2so4gdWJY4i/uOTqdMFHHE0mq/WYAWj5LGnyWA8Umb5edtCcL5IajXYEgWatMUNJ2rifENM3SlMEmrwGiD0wrgrRCyCgxMabpSEI23wAigByVRo/AKARNt58s4fkbz4ARxMDDOBngbQ33vtlf0wNAupNhDjbE2qmaq1NBgjXpr9d2fvBuWLTn6VjoE4CWvT4OaDHyFXBek5m0QH907tWnI0C88vTc0+p5aXyOkrNtawpZYJ/msvkLNn1dT8NHAJXKLe0/IvtDOb7FwKq5XXWVdvhYBZMMmtH3WzZMNO4ccECDFzoTKG8rBZAYvPfk8cB/oA6EUoh52DSpLtTx19FQP2vv1n1aYtabk8OQh5OJnNOLm3AeoAPbF17tbO1ly13i3sMPI+pczljTfr/uPEAAM6avWy9/3IIkleghXA5o2iL/ABxoK1+UJyCb6oIlXPWpA3kZQGiVNE2XJgrIh5NkZONa7Aydz3kc/mu/WHxJaRVPgMUaj0aAIZ+6RrkJNsf/XeLSC44IIr5SltntJBspjAOeRac9of5blqOMKlkOh2b2JI9EwE6nuS/g3i6ntUCQoXaGkdyx2i+D8KiRZ/S4Pjm7KeiL7FzrHBF0v5FIAGIIxNd2YGPqaLj8XgXUuZHAPG1RdG1xeCpZM7lN7XVvLZkxwq7SXcUDhtJLI/qNoBhBK5/ortzNIK/B/tDQpBruQwSAAAAAElFTkSuQmCC"
|
|
2005
|
+
|
|
2006
|
+
/***/ }),
|
|
2007
|
+
|
|
2008
|
+
/***/ "fe4f":
|
|
2009
|
+
/***/ (function(module, exports) {
|
|
2010
|
+
|
|
2011
|
+
module.exports = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAA2pJREFUSEuVlk1sFGUYx///md21ZXf7BWXrRxqbQKKFeFvBBE0wEW96IXwUqIfGyIkLkionYtSQGA/GUzWaSKy0FKPRWCkESSQKGA4YpQc5aABh2l3a3Xbbrbs789eZdVu6uzOr723yPu/ze76fIYLOh/keQ8YuwnlWQC/BTldcUIrApGB859A5hZebf/dTw7oXQ/lu09Dxf5TsAmAGGkHagsZsm4N4pflmtWwNIPLx4l4HHIIUD1Rce5kzwIOFgebh+69WAUIfLR6moXcg1Pds5eXPIJ6okSMkh0dKA2verYguK4qcyPVB/LSxcv1WCEWTkWL+KKjBGkfoatD+Qn/sM/euDPgk3x0xS9cpxoLCInABcrYW+uO/4piMBzYsjEN4vvqNqFzBDm3CS803PUDT8PwIgN0NkikIB5b2xVZiPJxpb4L5E4ANdd6OLu2L72HTiUwPI+aNhtUCFgD9YpfQX9gfn/QMOzl/lsDjIB6pA7BVsDcyOjY3KOG4r/VuTO9PumEmF3dGr7rya07NWQASAT3wOqOnsxMgdtQVknFN1Bihtyr3kpKLO9s8QPRzFyBfAIBzjH2RuUXUuihyJGe2DETzqRaYkc1eB9NoMpdweb6vJe1+x7/MWpA/QMBtxr/OFimFqjw4OfdCW1+jRmv5KhvogcgSW8czRdQCbApvZK6+92Z776F4MRZ+2IWFw8U/Z5/ryFbArd9kgkNE/sW2MzO3UCdEXpMQ30IYF/C+p5TIFJeKjy28mJhyP9vOzDbKwW22n703AfgkuWxqCcByCB2YyeyOcpI7zt2zJP8qkpvktednBgHHv0yrEkFDyfT2Tg+w9nw6sEwhHGXrhNUTioRvEAoey8ugFcC6C/4AgXbJMDd6o2Ld96kRNhoV/wJkIJneVvag82LKgk+IBIymn+nc4wHaL850h1m6DiBw2LmyDrgMWP+DC6jXB8wVZW6afbqjPOzck/gx1Qeq4bi2TSbTW8oeJC5N13rg7gRbB6a3JbyhuGqxdF2eOgwicOHIwAcU7nhWCa+u8ro8t45YWxO1C6fiyUNXrL0OOUTgf61METkKB+8+Wba8cuquxq5Ldx9liG/jvyx9wBZwGiW9Zj314B9VVR28exNXrB7TxG4Q20H2Qlpf7mhOQ5qEcMG2MTq1pcv3t+VvhEpbaxd54pUAAAAASUVORK5CYII="
|
|
2012
|
+
|
|
2013
|
+
/***/ })
|
|
2014
|
+
|
|
2015
|
+
}]);
|