1 line
18 KiB
JSON
1 line
18 KiB
JSON
{"remainingRequest":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\@jiaminghi\\data-view\\lib\\components\\waterLevelPond\\src\\main.vue?vue&type=script&lang=js&","dependencies":[{"path":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\@jiaminghi\\data-view\\lib\\components\\waterLevelPond\\src\\main.vue","mtime":1670640065296},{"path":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1670640066936},{"path":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\babel-loader\\lib\\index.js","mtime":1670640065986},{"path":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1670640066936},{"path":"C:\\hjmWeb\\suyiScreen\\suyiScreen\\node_modules\\vue-loader\\lib\\index.js","mtime":1670640074287}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgeyBkZWVwTWVyZ2UgfSBmcm9tICdAamlhbWluZ2hpL2NoYXJ0cy9saWIvdXRpbC9pbmRleCcNCg0KaW1wb3J0IHsgZGVlcENsb25lIH0gZnJvbSAnQGppYW1pbmdoaS9jLXJlbmRlci9saWIvcGx1Z2luL3V0aWwnDQoNCmltcG9ydCBDUmVuZGVyIGZyb20gJ0BqaWFtaW5naGkvYy1yZW5kZXInDQoNCmV4cG9ydCBkZWZhdWx0IHsNCiAgbmFtZTogJ0R2V2F0ZXJMZXZlbFBvbmQnLA0KICBwcm9wczogew0KICAgIGNvbmZpZzogT2JqZWN0LA0KICAgIGRlZmF1bHQ6ICgpID0+ICh7fSkNCiAgfSwNCiAgZGF0YSAoKSB7DQogICAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKQ0KICAgIHJldHVybiB7DQogICAgICBncmFkaWVudElkOiBgd2F0ZXItbGV2ZWwtcG9uZC0ke3RpbWVzdGFtcH1gLA0KDQogICAgICBkZWZhdWx0Q29uZmlnOiB7DQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gRGF0YQ0KICAgICAgICAgKiBAdHlwZSB7QXJyYXk8TnVtYmVyPn0NCiAgICAgICAgICogQGRlZmF1bHQgZGF0YSA9IFtdDQogICAgICAgICAqIEBleGFtcGxlIGRhdGEgPSBbNjAsIDQwXQ0KICAgICAgICAgKi8NCiAgICAgICAgZGF0YTogW10sDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gU2hhcGUgb2Ygd2FudGVyIGxldmVsIHBvbmQNCiAgICAgICAgICogQHR5cGUge1N0cmluZ30NCiAgICAgICAgICogQGRlZmF1bHQgc2hhcGUgPSAncmVjdCcNCiAgICAgICAgICogQGV4YW1wbGUgc2hhcGUgPSAncmVjdCcgfCAncm91bmRSZWN0JyB8ICdyb3VuZCcNCiAgICAgICAgICovDQogICAgICAgIHNoYXBlOiAncmVjdCcsDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gV2F0ZXIgd2F2ZSBudW1iZXINCiAgICAgICAgICogQHR5cGUge051bWJlcn0NCiAgICAgICAgICogQGRlZmF1bHQgd2F2ZU51bSA9IDMNCiAgICAgICAgICovDQogICAgICAgIHdhdmVOdW06IDMsDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gV2F0ZXIgd2F2ZSBoZWlnaHQgKHB4KQ0KICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfQ0KICAgICAgICAgKiBAZGVmYXVsdCB3YXZlSGVpZ2h0ID0gNDANCiAgICAgICAgICovDQogICAgICAgIHdhdmVIZWlnaHQ6IDQwLA0KICAgICAgICAvKioNCiAgICAgICAgICogQGRlc2NyaXB0aW9uIFdhdmUgb3BhY2l0eQ0KICAgICAgICAgKiBAdHlwZSB7TnVtYmVyfQ0KICAgICAgICAgKiBAZGVmYXVsdCB3YXZlT3BhY2l0eSA9IDAuNA0KICAgICAgICAgKi8NCiAgICAgICAgd2F2ZU9wYWNpdHk6IDAuNCwNCiAgICAgICAgLyoqDQogICAgICAgICAqIEBkZXNjcmlwdGlvbiBDb2xvcnMgKGhleHxyZ2J8cmdiYXxjb2xvciBrZXl3b3JkcykNCiAgICAgICAgICogQHR5cGUge0FycmF5PFN0cmluZz59DQogICAgICAgICAqIEBkZWZhdWx0IGNvbG9ycyA9IFsnIzAwQkFGRicsICcjM0RFN0M5J10NCiAgICAgICAgICogQGV4YW1wbGUgY29sb3JzID0gWycjMDAwJywgJ3JnYigwLCAwLCAwKScsICdyZ2JhKDAsIDAsIDAsIDEpJywgJ3JlZCddDQogICAgICAgICAqLw0KICAgICAgICBjb2xvcnM6IFsnIzNERTdDOScsICcjMDBCQUZGJ10sDQogICAgICAgIC8qKg0KICAgICAgICAgKiBAZGVzY3JpcHRpb24gRm9ybWF0dGVyDQogICAgICAgICAqIEB0eXBlIHtTdHJpbmd9DQogICAgICAgICAqIEBkZWZhdWx0IGZvcm1hdHRlciA9ICd7dmFsdWV9JScNCiAgICAgICAgICovDQogICAgICAgIGZvcm1hdHRlcjogJ3t2YWx1ZX0lJw0KICAgICAgfSwNCg0KICAgICAgbWVyZ2VkQ29uZmlnOiB7fSwNCg0KICAgICAgcmVuZGVyZXI6IG51bGwsDQoNCiAgICAgIHN2Z0JvcmRlckdyYWRpZW50OiBbXSwNCg0KICAgICAgZGV0YWlsczogJycsDQoNCiAgICAgIHdhdmVzOiBbXSwNCg0KICAgICAgYW5pbWF0aW9uOiBmYWxzZQ0KICAgIH0NCiAgfSwNCiAgY29tcHV0ZWQ6IHsNCiAgICByYWRpdXMgKCkgew0KICAgICAgY29uc3QgeyBzaGFwZSB9ID0gdGhpcy5tZXJnZWRDb25maWcNCg0KICAgICAgaWYgKHNoYXBlID09PSAncm91bmQnKSByZXR1cm4gJzUwJScNCg0KICAgICAgaWYgKHNoYXBlID09PSAncmVjdCcpIHJldHVybiAnMCcNCg0KICAgICAgaWYgKHNoYXBlID09PSAncm91bmRSZWN0JykgcmV0dXJuICcxMHB4Jw0KDQogICAgICByZXR1cm4gJzAnDQogICAgfSwNCiAgICBzaGFwZSAoKSB7DQogICAgICBjb25zdCB7IHNoYXBlIH0gPSB0aGlzLm1lcmdlZENvbmZpZw0KDQogICAgICBpZiAoIXNoYXBlKSByZXR1cm4gJ3JlY3QnDQoNCiAgICAgIHJldHVybiBzaGFwZQ0KICAgIH0NCiAgfSwNCiAgd2F0Y2g6IHsNCiAgICBjb25maWcgKCkgew0KICAgICAgY29uc3QgeyBjYWxjRGF0YSwgcmVuZGVyZXIgfSA9IHRoaXMNCg0KICAgICAgcmVuZGVyZXIuZGVsQWxsR3JhcGgoKQ0KDQogICAgICB0aGlzLndhdmVzID0gW10NCg0KICAgICAgc2V0VGltZW91dChjYWxjRGF0YSwgMCkNCiAgICB9DQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICBpbml0ICgpIHsNCiAgICAgIGNvbnN0IHsgaW5pdFJlbmRlciwgY29uZmlnLCBjYWxjRGF0YSB9ID0gdGhpcw0KDQogICAgICBpbml0UmVuZGVyKCkNCg0KICAgICAgaWYgKCFjb25maWcpIHJldHVybg0KDQogICAgICBjYWxjRGF0YSgpDQogICAgfSwNCiAgICBpbml0UmVuZGVyICgpIHsNCiAgICAgIGNvbnN0IHsgJHJlZnMgfSA9IHRoaXMNCg0KICAgICAgdGhpcy5yZW5kZXJlciA9IG5ldyBDUmVuZGVyKCRyZWZzWyd3YXRlci1wb25kLWxldmVsJ10pDQogICAgfSwNCiAgICBjYWxjRGF0YSAoKSB7DQogICAgICBjb25zdCB7IG1lcmdlQ29uZmlnLCBjYWxjU3ZnQm9yZGVyR3JhZGllbnQsIGNhbGNEZXRhaWxzIH0gPSB0aGlzDQoNCiAgICAgIG1lcmdlQ29uZmlnKCkNCg0KICAgICAgY2FsY1N2Z0JvcmRlckdyYWRpZW50KCkNCg0KICAgICAgY2FsY0RldGFpbHMoKQ0KDQogICAgICBjb25zdCB7IGFkZFdhdmUsIGFuaW1hdGlvbldhdmUgfSA9IHRoaXMNCg0KICAgICAgYWRkV2F2ZSgpDQoNCiAgICAgIGFuaW1hdGlvbldhdmUoKQ0KICAgIH0sDQogICAgbWVyZ2VDb25maWcgKCkgew0KICAgICAgY29uc3QgeyBjb25maWcsIGRlZmF1bHRDb25maWcgfSA9IHRoaXMNCg0KICAgICAgdGhpcy5tZXJnZWRDb25maWcgPSBkZWVwTWVyZ2UoZGVlcENsb25lKGRlZmF1bHRDb25maWcsIHRydWUpLCBjb25maWcpDQogICAgfSwNCiAgICBjYWxjU3ZnQm9yZGVyR3JhZGllbnQgKCkgew0KICAgICAgY29uc3QgeyBjb2xvcnMgfSA9IHRoaXMubWVyZ2VkQ29uZmlnDQoNCiAgICAgIGNvbnN0IGNvbG9yTnVtID0gY29sb3JzLmxlbmd0aA0KDQogICAgICBjb25zdCBjb2xvck9mZnNldEdhcCA9IDEwMCAvIChjb2xvck51bSAtIDEpDQoNCiAgICAgIHRoaXMuc3ZnQm9yZGVyR3JhZGllbnQgPSBjb2xvcnMubWFwKChjLCBpKSA9PiBbY29sb3JPZmZzZXRHYXAgKiBpLCBjXSkNCiAgICB9LA0KICAgIGNhbGNEZXRhaWxzICgpIHsNCiAgICAgIGNvbnN0IHsgZGF0YSwgZm9ybWF0dGVyIH0gPSB0aGlzLm1lcmdlZENvbmZpZw0KDQogICAgICBpZiAoIWRhdGEubGVuZ3RoKSB7DQogICAgICAgIHRoaXMuZGV0YWlscyA9ICcnDQoNCiAgICAgICAgcmV0dXJuDQogICAgICB9DQoNCiAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uZGF0YSkNCg0KICAgICAgdGhpcy5kZXRhaWxzID0gZm9ybWF0dGVyLnJlcGxhY2UoJ3t2YWx1ZX0nLCBtYXhWYWx1ZSkNCiAgICB9LA0KICAgIGFkZFdhdmUgKCkgew0KICAgICAgY29uc3QgeyByZW5kZXJlciwgZ2V0V2F2ZVNoYXBlcywgZ2V0V2F2ZVN0eWxlLCBkcmF3ZWQgfSA9IHRoaXMNCg0KICAgICAgY29uc3Qgc2hhcGVzID0gZ2V0V2F2ZVNoYXBlcygpDQogICAgICBjb25zdCBzdHlsZSA9IGdldFdhdmVTdHlsZSgpDQoNCiAgICAgIHRoaXMud2F2ZXMgPSBzaGFwZXMubWFwKHNoYXBlID0+IHJlbmRlcmVyLmFkZCh7DQogICAgICAgIG5hbWU6ICdzbW9vdGhsaW5lJywNCiAgICAgICAgYW5pbWF0aW9uRnJhbWU6IDMwMCwNCiAgICAgICAgc2hhcGUsDQogICAgICAgIHN0eWxlLA0KICAgICAgICBkcmF3ZWQNCiAgICAgIH0pKQ0KICAgIH0sDQogICAgZ2V0V2F2ZVNoYXBlcyAoKSB7DQogICAgICBjb25zdCB7IG1lcmdlZENvbmZpZywgcmVuZGVyZXIsIG1lcmdlT2Zmc2V0IH0gPSB0aGlzDQoNCiAgICAgIGNvbnN0IHsgd2F2ZU51bSwgd2F2ZUhlaWdodCwgZGF0YSB9ID0gbWVyZ2VkQ29uZmlnDQoNCiAgICAgIGNvbnN0IFt3LCBoXSA9IHJlbmRlcmVyLmFyZWENCg0KICAgICAgY29uc3QgcG9pbnRzTnVtID0gd2F2ZU51bSAqIDQgKyA0DQoNCiAgICAgIGNvbnN0IHBvaW50WEdhcCA9IHcgLyB3YXZlTnVtIC8gMg0KDQogICAgICByZXR1cm4gZGF0YS5tYXAodiA9PiB7DQogICAgICAgIGxldCBwb2ludHMgPSBuZXcgQXJyYXkocG9pbnRzTnVtKS5maWxsKDApLm1hcCgoZm9vLCBqKSA9PiB7DQogICAgICAgICAgY29uc3QgeCA9IHcgLSBwb2ludFhHYXAgKiBqDQoNCiAgICAgICAgICBjb25zdCBzdGFydFkgPSAoMSAtIHYgLyAxMDApICogaA0KDQogICAgICAgICAgY29uc3QgeSA9IGogJSAyID09PSAwID8gc3RhcnRZIDogc3RhcnRZIC0gd2F2ZUhlaWdodA0KDQogICAgICAgICAgcmV0dXJuIFt4LCB5XQ0KICAgICAgICB9KQ0KDQogICAgICAgIHBvaW50cyA9IHBvaW50cy5tYXAocCA9PiBtZXJnZU9mZnNldChwLCBbcG9pbnRYR2FwICogMiwgMF0pKQ0KDQogICAgICAgIHJldHVybiB7IHBvaW50cyB9DQogICAgICB9KQ0KICAgIH0sDQogICAgbWVyZ2VPZmZzZXQgKFt4LCB5XSwgW294LCBveV0pIHsNCiAgICAgIHJldHVybiBbeCArIG94LCB5ICsgb3ldDQogICAgfSwNCiAgICBnZXRXYXZlU3R5bGUgKCkgew0KICAgICAgY29uc3QgeyByZW5kZXJlciwgbWVyZ2VkQ29uZmlnIH0gPSB0aGlzDQoNCiAgICAgIGNvbnN0IGggPSByZW5kZXJlci5hcmVhWzFdDQoNCiAgICAgIHJldHVybiB7DQogICAgICAgIGdyYWRpZW50Q29sb3I6IG1lcmdlZENvbmZpZy5jb2xvcnMsDQogICAgICAgIGdyYWRpZW50VHlwZTogJ2xpbmVhcicsDQogICAgICAgIGdyYWRpZW50UGFyYW1zOiBbMCwgMCwgMCwgaF0sDQogICAgICAgIGdyYWRpZW50V2l0aDogJ2ZpbGwnLA0KICAgICAgICBvcGFjaXR5OiBtZXJnZWRDb25maWcud2F2ZU9wYWNpdHksDQogICAgICAgIHRyYW5zbGF0ZTogWzAsIDBdDQogICAgICB9DQogICAgfSwNCiAgICBkcmF3ZWQgKHsgc2hhcGU6IHsgcG9pbnRzIH0gfSwgeyBjdHgsIGFyZWEgfSkgew0KICAgICAgY29uc3QgZmlyc3RQb2ludCA9IHBvaW50c1swXQ0KICAgICAgY29uc3QgbGFzdFBvaW50ID0gcG9pbnRzLnNsaWNlKC0xKVswXQ0KDQogICAgICBjb25zdCBoID0gYXJlYVsxXQ0KDQogICAgICBjdHgubGluZVRvKGxhc3RQb2ludFswXSwgaCkNCiAgICAgIGN0eC5saW5lVG8oZmlyc3RQb2ludFswXSwgaCkNCg0KICAgICAgY3R4LmNsb3NlUGF0aCgpDQoNCiAgICAgIGN0eC5maWxsKCkNCiAgICB9LA0KICAgIGFzeW5jIGFuaW1hdGlvbldhdmUgKHJlcGVhdCA9IDEpIHsNCiAgICAgIGNvbnN0IHsgd2F2ZXMsIHJlbmRlcmVyLCBhbmltYXRpb24gfSA9IHRoaXMNCg0KICAgICAgaWYgKGFuaW1hdGlvbikgcmV0dXJuDQoNCiAgICAgIHRoaXMuYW5pbWF0aW9uID0gdHJ1ZQ0KDQogICAgICBjb25zdCB3ID0gcmVuZGVyZXIuYXJlYVswXQ0KDQogICAgICB3YXZlcy5mb3JFYWNoKGdyYXBoID0+IHsNCiAgICAgICAgZ3JhcGguYXR0cignc3R5bGUnLCB7IHRyYW5zbGF0ZTogWzAsIDBdIH0pDQoNCiAgICAgICAgZ3JhcGguYW5pbWF0aW9uKCdzdHlsZScsIHsNCiAgICAgICAgICB0cmFuc2xhdGU6IFt3LCAwXQ0KICAgICAgICB9LCB0cnVlKQ0KICAgICAgfSkNCg0KICAgICAgYXdhaXQgcmVuZGVyZXIubGF1bmNoQW5pbWF0aW9uKCkNCg0KICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZQ0KDQogICAgICBpZiAoIXJlbmRlcmVyLmdyYXBocy5sZW5ndGgpIHJldHVybg0KDQogICAgICB0aGlzLmFuaW1hdGlvbldhdmUocmVwZWF0ICsgMSkNCiAgICB9DQogIH0sDQogIG1vdW50ZWQgKCkgew0KICAgIGNvbnN0IHsgaW5pdCB9ID0gdGhpcw0KDQogICAgaW5pdCgpDQogIH0sDQogIGJlZm9yZURlc3Ryb3kgKCkgew0KICAgIGNvbnN0IHsgcmVuZGVyZXIgfSA9IHRoaXMNCg0KICAgIHJlbmRlcmVyLmRlbEFsbEdyYXBoKCkNCg0KICAgIHRoaXMud2F2ZXMgPSBbXQ0KICB9DQp9DQo="},{"version":3,"sources":["main.vue"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA","file":"main.vue","sourceRoot":"node_modules/@jiaminghi/data-view/lib/components/waterLevelPond/src","sourcesContent":["<template>\r\n <div class=\"dv-water-pond-level\">\r\n <svg v-if=\"renderer\">\r\n <defs>\r\n <linearGradient :id=\"gradientId\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\r\n <stop v-for=\"lc in svgBorderGradient\" :key=\"lc[0]\"\r\n :offset=\"lc[0]\"\r\n :stop-color=\"lc[1]\" />\r\n </linearGradient>\r\n </defs>\r\n\r\n <text\r\n v-if=\"renderer\"\r\n :stroke=\"`url(#${gradientId})`\"\r\n :fill=\"`url(#${gradientId})`\"\r\n :x=\"renderer.area[0] / 2 + 8\"\r\n :y=\"renderer.area[1] / 2 + 8\"\r\n >\r\n {{ details }}\r\n </text>\r\n\r\n <ellipse v-if=\"!shape || shape === 'round'\"\r\n :cx=\"renderer.area[0] / 2 + 8\"\r\n :cy=\"renderer.area[1] / 2 + 8\"\r\n :rx=\"renderer.area[0] / 2 + 5\"\r\n :ry=\"renderer.area[1] / 2 + 5\"\r\n :stroke=\"`url(#${gradientId})`\" />\r\n\r\n <rect v-else\r\n x=\"2\" y=\"2\"\r\n :rx=\"shape === 'roundRect' ? 10 : 0\"\r\n :ry=\"shape === 'roundRect' ? 10 : 0\"\r\n :width=\"renderer.area[0] + 12\"\r\n :height=\"renderer.area[1] + 12\"\r\n :stroke=\"`url(#${gradientId})`\" />\r\n </svg>\r\n\r\n <canvas ref=\"water-pond-level\" :style=\"`border-radius: ${radius};`\" />\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { deepMerge } from '@jiaminghi/charts/lib/util/index'\r\n\r\nimport { deepClone } from '@jiaminghi/c-render/lib/plugin/util'\r\n\r\nimport CRender from '@jiaminghi/c-render'\r\n\r\nexport default {\r\n name: 'DvWaterLevelPond',\r\n props: {\r\n config: Object,\r\n default: () => ({})\r\n },\r\n data () {\r\n const timestamp = Date.now()\r\n return {\r\n gradientId: `water-level-pond-${timestamp}`,\r\n\r\n defaultConfig: {\r\n /**\r\n * @description Data\r\n * @type {Array<Number>}\r\n * @default data = []\r\n * @example data = [60, 40]\r\n */\r\n data: [],\r\n /**\r\n * @description Shape of wanter level pond\r\n * @type {String}\r\n * @default shape = 'rect'\r\n * @example shape = 'rect' | 'roundRect' | 'round'\r\n */\r\n shape: 'rect',\r\n /**\r\n * @description Water wave number\r\n * @type {Number}\r\n * @default waveNum = 3\r\n */\r\n waveNum: 3,\r\n /**\r\n * @description Water wave height (px)\r\n * @type {Number}\r\n * @default waveHeight = 40\r\n */\r\n waveHeight: 40,\r\n /**\r\n * @description Wave opacity\r\n * @type {Number}\r\n * @default waveOpacity = 0.4\r\n */\r\n waveOpacity: 0.4,\r\n /**\r\n * @description Colors (hex|rgb|rgba|color keywords)\r\n * @type {Array<String>}\r\n * @default colors = ['#00BAFF', '#3DE7C9']\r\n * @example colors = ['#000', 'rgb(0, 0, 0)', 'rgba(0, 0, 0, 1)', 'red']\r\n */\r\n colors: ['#3DE7C9', '#00BAFF'],\r\n /**\r\n * @description Formatter\r\n * @type {String}\r\n * @default formatter = '{value}%'\r\n */\r\n formatter: '{value}%'\r\n },\r\n\r\n mergedConfig: {},\r\n\r\n renderer: null,\r\n\r\n svgBorderGradient: [],\r\n\r\n details: '',\r\n\r\n waves: [],\r\n\r\n animation: false\r\n }\r\n },\r\n computed: {\r\n radius () {\r\n const { shape } = this.mergedConfig\r\n\r\n if (shape === 'round') return '50%'\r\n\r\n if (shape === 'rect') return '0'\r\n\r\n if (shape === 'roundRect') return '10px'\r\n\r\n return '0'\r\n },\r\n shape () {\r\n const { shape } = this.mergedConfig\r\n\r\n if (!shape) return 'rect'\r\n\r\n return shape\r\n }\r\n },\r\n watch: {\r\n config () {\r\n const { calcData, renderer } = this\r\n\r\n renderer.delAllGraph()\r\n\r\n this.waves = []\r\n\r\n setTimeout(calcData, 0)\r\n }\r\n },\r\n methods: {\r\n init () {\r\n const { initRender, config, calcData } = this\r\n\r\n initRender()\r\n\r\n if (!config) return\r\n\r\n calcData()\r\n },\r\n initRender () {\r\n const { $refs } = this\r\n\r\n this.renderer = new CRender($refs['water-pond-level'])\r\n },\r\n calcData () {\r\n const { mergeConfig, calcSvgBorderGradient, calcDetails } = this\r\n\r\n mergeConfig()\r\n\r\n calcSvgBorderGradient()\r\n\r\n calcDetails()\r\n\r\n const { addWave, animationWave } = this\r\n\r\n addWave()\r\n\r\n animationWave()\r\n },\r\n mergeConfig () {\r\n const { config, defaultConfig } = this\r\n\r\n this.mergedConfig = deepMerge(deepClone(defaultConfig, true), config)\r\n },\r\n calcSvgBorderGradient () {\r\n const { colors } = this.mergedConfig\r\n\r\n const colorNum = colors.length\r\n\r\n const colorOffsetGap = 100 / (colorNum - 1)\r\n\r\n this.svgBorderGradient = colors.map((c, i) => [colorOffsetGap * i, c])\r\n },\r\n calcDetails () {\r\n const { data, formatter } = this.mergedConfig\r\n\r\n if (!data.length) {\r\n this.details = ''\r\n\r\n return\r\n }\r\n\r\n const maxValue = Math.max(...data)\r\n\r\n this.details = formatter.replace('{value}', maxValue)\r\n },\r\n addWave () {\r\n const { renderer, getWaveShapes, getWaveStyle, drawed } = this\r\n\r\n const shapes = getWaveShapes()\r\n const style = getWaveStyle()\r\n\r\n this.waves = shapes.map(shape => renderer.add({\r\n name: 'smoothline',\r\n animationFrame: 300,\r\n shape,\r\n style,\r\n drawed\r\n }))\r\n },\r\n getWaveShapes () {\r\n const { mergedConfig, renderer, mergeOffset } = this\r\n\r\n const { waveNum, waveHeight, data } = mergedConfig\r\n\r\n const [w, h] = renderer.area\r\n\r\n const pointsNum = waveNum * 4 + 4\r\n\r\n const pointXGap = w / waveNum / 2\r\n\r\n return data.map(v => {\r\n let points = new Array(pointsNum).fill(0).map((foo, j) => {\r\n const x = w - pointXGap * j\r\n\r\n const startY = (1 - v / 100) * h\r\n\r\n const y = j % 2 === 0 ? startY : startY - waveHeight\r\n\r\n return [x, y]\r\n })\r\n\r\n points = points.map(p => mergeOffset(p, [pointXGap * 2, 0]))\r\n\r\n return { points }\r\n })\r\n },\r\n mergeOffset ([x, y], [ox, oy]) {\r\n return [x + ox, y + oy]\r\n },\r\n getWaveStyle () {\r\n const { renderer, mergedConfig } = this\r\n\r\n const h = renderer.area[1]\r\n\r\n return {\r\n gradientColor: mergedConfig.colors,\r\n gradientType: 'linear',\r\n gradientParams: [0, 0, 0, h],\r\n gradientWith: 'fill',\r\n opacity: mergedConfig.waveOpacity,\r\n translate: [0, 0]\r\n }\r\n },\r\n drawed ({ shape: { points } }, { ctx, area }) {\r\n const firstPoint = points[0]\r\n const lastPoint = points.slice(-1)[0]\r\n\r\n const h = area[1]\r\n\r\n ctx.lineTo(lastPoint[0], h)\r\n ctx.lineTo(firstPoint[0], h)\r\n\r\n ctx.closePath()\r\n\r\n ctx.fill()\r\n },\r\n async animationWave (repeat = 1) {\r\n const { waves, renderer, animation } = this\r\n\r\n if (animation) return\r\n\r\n this.animation = true\r\n\r\n const w = renderer.area[0]\r\n\r\n waves.forEach(graph => {\r\n graph.attr('style', { translate: [0, 0] })\r\n\r\n graph.animation('style', {\r\n translate: [w, 0]\r\n }, true)\r\n })\r\n\r\n await renderer.launchAnimation()\r\n\r\n this.animation = false\r\n\r\n if (!renderer.graphs.length) return\r\n\r\n this.animationWave(repeat + 1)\r\n }\r\n },\r\n mounted () {\r\n const { init } = this\r\n\r\n init()\r\n },\r\n beforeDestroy () {\r\n const { renderer } = this\r\n\r\n renderer.delAllGraph()\r\n\r\n this.waves = []\r\n }\r\n}\r\n</script>"]}]} |