web-component-gallery 1.2.13 → 1.2.15
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/dist/amap.umd.js +3 -3
- package/dist/index.umd.js +3 -3
- package/lib/amap/AmapDraw.jsx +19 -18
- package/lib/amap/components/AmapSearch/index.jsx +28 -39
- package/method/AMap.js +10 -0
- package/package.json +1 -1
- package/plugins/lib/amap/AmapDraw.jsx +19 -18
- package/plugins/lib/amap/components/AmapSearch/index.jsx +28 -39
- package/plugins/method/AMap.js +10 -0
package/dist/amap.umd.js
CHANGED
|
@@ -8714,7 +8714,7 @@ eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source cod
|
|
|
8714
8714
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8715
8715
|
|
|
8716
8716
|
"use strict";
|
|
8717
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapDrawProps: () => (/* binding */ AmapDrawProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.every.js */ \"./node_modules/core-js/modules/es.iterator.every.js\");\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/AmapSearch/index.jsx */ \"./plugins/lib/amap/components/AmapSearch/index.jsx\");\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _AmapDraw_less__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AmapDraw.less */ \"./plugins/lib/amap/AmapDraw.less\");\n\n\n\n\n\n\n\n\n\nconst AmapDrawProps = {\n /** drawEl为地图容器实例名称 */\n drawEl: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('AmapDraw'),\n /** drawType为绘制类型\r\n * 可选值(point点 | line线 | polygon面)\r\n */\n drawType: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('point'),\n /** 绘制图标 (只在point类型下生效 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].any.def('http://api.qxfnkj.com:8090/poi/poi-marker-default.png'),\n /** drawCount为绘制物绘制个数 */\n drawCount: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].number.def(1),\n /** drawOptions为绘制物配置项 */\n drawOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** drawInfo为绘制物信息 */\n drawInfo: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].array]),\n /** drawInfoAll为所有不同类型绘制物信息(用于回显地图图层)\r\n * 格式: { point: ([]||{}), line: ([]||{}) }\r\n */\n drawInfoAll: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object,\n /** 限制区域 */\n drawLimitArea: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string]),\n /** 限制区域样式配置 */\n drawLimitAreaOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** 是否为纯地图展示数据 */\n isExhibition: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].bool.def(false)\n};\nconst AmapDraw = {\n name: 'AmapDraw',\n props: AmapDrawProps,\n data() {\n return {\n amap: null,\n drawArea: null,\n drawLayers: null,\n drawMouseTool: null,\n buttonProps: [],\n drawButtonProps: [{\n type: 'primary',\n text: '绘制',\n event: {\n click: this.AmapDraw\n }\n }, {\n text: '清除',\n event: {\n click: this.AmapDrawClear\n }\n }],\n saveButtonProps: [{\n type: 'primary',\n text: '保存',\n event: {\n click: this.AmapDrawSave\n }\n }, {\n text: '取消',\n event: {\n click: this.AmapDrawReset\n }\n }]\n };\n },\n computed: {\n drawLayersInfo: {\n get() {\n return this.drawInfo;\n },\n set(newValue) {\n this.$emit('getAMapLayersInfo', newValue);\n }\n }\n },\n watch: {\n drawInfo: {\n handler(newVal, oldVal) {\n const newValue = this.drawLayersInfo;\n newVal && this.echoDrawLayers(this.drawType);\n },\n deep: true\n },\n drawInfoAll(newValue) {\n newValue && this.echoDrawLayers();\n },\n drawOptions(newValue) {\n /** 检测options覆盖物配置是否更改,更改后要同步到地图上 */\n Object.keys(newValue).length && this.setOverlayOptions(newValue);\n },\n drawLimitArea(newValue) {\n newValue && this.setDrawLimitArea();\n }\n },\n mounted() {\n this.$amapBus.$on('onAMapMounted', () => {\n this.amap = this.$initAMap({\n el: this.drawEl\n });\n this.buttonProps = [].concat(this.drawButtonProps);\n this.echoDrawLayers(this.drawType);\n /** 如果有限制区域,则描绘在地图上 */\n this.drawLimitArea && this.setDrawLimitArea();\n });\n },\n destroyed() {\n this.AmapDrawClear();\n },\n methods: {\n /** 绘制 */\n AmapDraw() {\n this.buttonProps = [].concat(this.saveButtonProps);\n this.drawMouseTool = new this.$amap.MouseTool(this.amap);\n this.AmapDrawClear();\n this.setDrawLayers(this.drawType);\n this.drawMouseTool.on('draw', ({\n obj\n }) => {\n if (this.drawArea && !this[`is${this.drawType}InRing`](obj)) return this.amap.remove(obj), this.$message.error('未在范围内描绘!');\n /** 暂未支持一次性绘制多个 */\n this.drawCount > 1 ? (this.drawLayers = this.drawLayers || [], this.drawLayers.push(obj)) : this.drawLayers = obj;\n if (this.drawLayers && (this.drawLayers.length == this.drawCount || this.drawCount == 1)) {\n return this.drawMouseTool.close();\n }\n });\n },\n /** 清空绘制 / 清空搜索 */\n AmapDrawClear() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && this.amap.remove(layerItem));\n // this.amap.clearMap()\n this.drawLayers = null;\n this.drawLayersInfo = {};\n },\n /** 保存当前绘制 */\n AmapDrawSave() {\n this.assignDrawLayers(this.drawType);\n this.buttonProps = [].concat(this.drawButtonProps);\n },\n /** 取消当前绘制 */\n AmapDrawReset() {\n this.buttonProps = [].concat(this.drawButtonProps);\n this.AmapDrawClear();\n },\n /** 搜索地址 */\n searchChoose(searchMarker, searchInfo) {\n this.AmapDrawClear();\n searchMarker.setMap(this.amap);\n this.amap.setZoomAndCenter(15, searchMarker.getPosition());\n this.drawType == 'point' && (this.drawLayersInfo = searchInfo);\n // this.$emit('getAMapLayersInfo', this.drawLayersInfo)\n },\n /** 检测覆盖物配置信息并同步 */\n setOverlayOptions(options) {\n if (!this.drawLayers) return;\n this.drawCount > 1 ? this.drawLayers.forEach(drawItem => drawItem.setOptions(options)) : this.drawLayers.setOptions(options);\n },\n /** 绘制限定区域 */\n setDrawLimitArea() {\n let areaRange = [];\n try {\n areaRange = JSON.parse(this.drawLimitArea);\n } catch {\n areaRange = this.drawLimitArea;\n }\n this.drawArea && this.amap.remove(this.drawArea);\n /** 判断目前地图上存在的所绘制覆盖物是否在限制范围内 */\n this.setMapArea(areaRange);\n this.judgeOverlays();\n },\n /** 绘制地图区域范围 */\n setMapArea(jurisdictionRange) {\n this.drawArea = new this.$amap.Polygon({\n map: this.amap,\n path: jurisdictionRange,\n extData: 'Area',\n strokeWeight: 6,\n ...this.drawLimitAreaOptions\n });\n const {\n lng,\n lat\n } = this.drawArea.getBounds().getCenter();\n this.amap.setZoomAndCenter(15, [lng, lat]);\n },\n /** 判断一个线段是否在面内 */\n islineInRing(polyline) {\n const paths = polyline.getPath();\n return paths.every(pointItem => this.ispointInRing(pointItem));\n },\n /** 判断一个点是否在面内 */\n ispointInRing(point) {\n let position;\n try {\n position = point.getPosition();\n } catch {\n position = point;\n }\n return this.$amap.GeometryUtil.isPointInRing(position, this.drawArea.getPath());\n },\n /** 判断地图上所覆盖物是否在限制范围内 */\n judgeOverlays() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && !this[`is${this.drawType}InRing`](layerItem) && this.removeOverlay(layerItem));\n },\n /** 清除单个覆盖物(或 不符合区域范围的覆盖物 */\n removeOverlay(layerItem) {\n this.amap.remove(layerItem);\n this.$message.error('未在区域范围内,请重新描绘!');\n try {\n const i = this.drawLayers.findIndex(layer => layer.getExtData() == layerItem.getExtData());\n this.drawLayers.splice(i, 1);\n } catch {\n this.drawLayers = null;\n this.drawLayersInfo = {};\n }\n },\n /** 根据类型处理不同数据 */\n async setDrawLayers(drawType) {\n const type = {\n point: 'marker',\n line: 'polyline',\n polygon: 'polygon'\n };\n\n /** 图层基础配置 */\n const drawOptions = drawType == 'point' ? {\n anchor: 'bottom-center',\n icon: await this.$amapLayers.setIcon(this.drawIcon)\n } : {\n strokeWeight: 8\n };\n this.drawMouseTool[type[drawType]]({\n ...drawOptions,\n ...this.drawOptions\n });\n },\n /** 赋值不同图层数据 */\n assignDrawLayers(drawType) {\n if (drawType == 'point') {\n const {\n lng,\n lat\n } = this.drawLayers.getPosition();\n const position = {\n longitude: lng,\n latitude: lat\n };\n this.$amapMethods.getMapAddress(position, address => {\n this.drawLayersInfo = {\n ...position,\n ...address\n };\n });\n return;\n }\n const range = this.drawLayers.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n this.drawLayersInfo = {\n range\n };\n },\n /** 回显不同类型图层 */\n echoDrawLayers(drawType) {\n /** 如若没挂载layers属性则退出 */\n if (!this.$amapLayers || !this.amap) return;\n const drawLayersItem = async (drawItem, type, i = 0) => {\n if (drawItem?.latitude && drawItem?.longitude) {\n let layersItem = null;\n const {\n longitude,\n latitude,\n range\n } = drawItem;\n const setOptions = {\n extData: `draw${type}${i}`,\n ...this.drawOptions\n };\n if (type == 'point') {\n layersItem = await this.$amapLayers.setMarker(this.drawIcon, {\n position: [longitude, latitude],\n ...setOptions\n });\n } else {\n const options = {\n path: range,\n strokeWeight: 8,\n ...setOptions\n };\n layersItem = type == 'line' ? new this.$amap.Polyline(options) : new this.$amap.Polygon(options);\n }\n layersItem.setMap(this.amap);\n this.amap.setFitView();\n }\n };\n if (!this.isExhibition) {\n drawLayersItem(this.drawLayersInfo, drawType);\n return;\n }\n if (this.drawInfoAll) {\n for (let key in this.drawInfoAll) {\n const isArray = Array.isArray(this.drawInfoAll[key]);\n isArray ? this.drawInfoAll[key].forEach((drawItem, i) => {\n drawLayersItem(drawItem, key, i);\n }) : drawLayersItem(this.drawInfoAll[key], key);\n }\n return;\n }\n drawLayersItem(this.drawLayersInfo, drawType);\n }\n },\n render(h) {\n const {\n drawEl,\n drawIcon,\n buttonProps,\n isExhibition,\n AmapDrawClear,\n searchChoose\n } = this;\n return h(\"div\", {\n \"class\": \"AmapDraw\"\n }, [!isExhibition && h(_components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n \"props\": {\n ...{\n drawIcon,\n buttonProps\n }\n },\n \"on\": {\n ...{\n searchReset: AmapDrawClear,\n searchChoose\n }\n }\n }), h(\"div\", {\n \"attrs\": {\n \"id\": drawEl\n }\n })]);\n }\n};\nAmapDraw.install = function (Vue) {\n Vue.use(_method_AMap_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n Vue.component('AmapDraw', AmapDraw);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapDraw);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/AmapDraw.jsx?");
|
|
8717
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapDrawProps: () => (/* binding */ AmapDrawProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.every.js */ \"./node_modules/core-js/modules/es.iterator.every.js\");\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/AmapSearch/index.jsx */ \"./plugins/lib/amap/components/AmapSearch/index.jsx\");\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _AmapDraw_less__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AmapDraw.less */ \"./plugins/lib/amap/AmapDraw.less\");\n\n\n\n\n\n\n\n\n\nconst AmapDrawProps = {\n /** drawEl为地图容器实例名称 */\n drawEl: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('AmapDraw'),\n /** drawType为绘制类型\r\n * 可选值(point点 | line线 | polygon面)\r\n */\n drawType: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('point'),\n /** 绘制图标 (只在point类型下生效 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].any.def('http://api.qxfnkj.com:8090/poi/poi-marker-default.png'),\n /** drawCount为绘制物绘制个数 */\n drawCount: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].number.def(1),\n /** drawOptions为绘制物配置项 */\n drawOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** drawInfo为绘制物信息 */\n drawInfo: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].array]),\n /** drawInfoAll为所有不同类型绘制物信息(用于回显地图图层)\r\n * 格式: { point: ([]||{}), line: ([]||{}) }\r\n */\n drawInfoAll: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object,\n /** 限制区域 */\n drawLimitArea: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string]),\n /** 限制区域样式配置 */\n drawLimitAreaOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** 是否为纯地图展示数据 */\n isExhibition: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].bool.def(false)\n};\nconst AmapDraw = {\n name: 'AmapDraw',\n props: AmapDrawProps,\n data() {\n return {\n amap: null,\n /** 地图存储商店 */\n amapStore: null,\n drawArea: null,\n drawLayers: null,\n drawMouseTool: null,\n buttonProps: [],\n drawButtonProps: [{\n type: 'primary',\n text: '绘制',\n event: {\n click: this.AmapDraw\n }\n }, {\n text: '清除',\n event: {\n click: this.AmapDrawClear\n }\n }],\n saveButtonProps: [{\n type: 'primary',\n text: '保存',\n event: {\n click: this.AmapDrawSave\n }\n }, {\n text: '取消',\n event: {\n click: this.AmapDrawReset\n }\n }]\n };\n },\n computed: {\n drawLayersInfo: {\n get() {\n return this.drawInfo;\n },\n set(newValue) {\n this.$emit('getAMapLayersInfo', newValue);\n }\n }\n },\n watch: {\n drawInfo: {\n handler(newVal, oldVal) {\n const newValue = this.drawLayersInfo;\n newVal && this.echoDrawLayers(this.drawType);\n },\n deep: true\n },\n drawInfoAll(newValue) {\n newValue && this.echoDrawLayers();\n },\n drawOptions(newValue) {\n /** 检测options覆盖物配置是否更改,更改后要同步到地图上 */\n Object.keys(newValue).length && this.setOverlayOptions(newValue);\n },\n drawLimitArea(newValue) {\n newValue && this.setDrawLimitArea();\n }\n },\n async mounted() {\n this.amapStore = await (0,_method_AMap_js__WEBPACK_IMPORTED_MODULE_6__.getAMapInstance)();\n this.amap = this.amapStore.initMap(this.drawEl);\n this.buttonProps = [].concat(this.drawButtonProps);\n this.echoDrawLayers(this.drawType);\n /** 如果有限制区域,则描绘在地图上 */\n this.drawLimitArea && this.setDrawLimitArea();\n },\n destroyed() {\n this.AmapDrawClear();\n },\n methods: {\n /** 绘制 */\n AmapDraw() {\n this.buttonProps = [].concat(this.saveButtonProps);\n this.drawMouseTool = new this.amapStore.AMap.MouseTool(this.amap);\n this.AmapDrawClear();\n this.setDrawLayers(this.drawType);\n this.drawMouseTool.on('draw', ({\n obj\n }) => {\n if (this.drawArea && !this[`is${this.drawType}InRing`](obj)) return this.amap.remove(obj), this.$message.error('未在范围内描绘!');\n /** 暂未支持一次性绘制多个 */\n this.drawCount > 1 ? (this.drawLayers = this.drawLayers || [], this.drawLayers.push(obj)) : this.drawLayers = obj;\n if (this.drawLayers && (this.drawLayers.length == this.drawCount || this.drawCount == 1)) {\n return this.drawMouseTool.close();\n }\n });\n },\n /** 清空绘制 / 清空搜索 */\n AmapDrawClear() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && this.amap.remove(layerItem));\n // this.amap.clearMap()\n this.drawLayers = null;\n this.drawLayersInfo = {};\n },\n /** 保存当前绘制 */\n AmapDrawSave() {\n this.assignDrawLayers(this.drawType);\n this.buttonProps = [].concat(this.drawButtonProps);\n },\n /** 取消当前绘制 */\n AmapDrawReset() {\n this.buttonProps = [].concat(this.drawButtonProps);\n this.AmapDrawClear();\n },\n /** 搜索地址 */\n searchChoose(searchMarker, searchInfo) {\n this.AmapDrawClear();\n searchMarker.setMap(this.amap);\n this.amap.setZoomAndCenter(15, searchMarker.getPosition());\n this.drawType == 'point' && (this.drawLayersInfo = searchInfo);\n // this.$emit('getAMapLayersInfo', this.drawLayersInfo)\n },\n /** 检测覆盖物配置信息并同步 */\n setOverlayOptions(options) {\n if (!this.drawLayers) return;\n this.drawCount > 1 ? this.drawLayers.forEach(drawItem => drawItem.setOptions(options)) : this.drawLayers.setOptions(options);\n },\n /** 绘制限定区域 */\n setDrawLimitArea() {\n let areaRange = [];\n try {\n areaRange = JSON.parse(this.drawLimitArea);\n } catch {\n areaRange = this.drawLimitArea;\n }\n this.drawArea && this.amap.remove(this.drawArea);\n /** 判断目前地图上存在的所绘制覆盖物是否在限制范围内 */\n this.setMapArea(areaRange);\n this.judgeOverlays();\n },\n /** 绘制地图区域范围 */\n setMapArea(jurisdictionRange) {\n this.drawArea = new this.amapStore.AMap.Polygon({\n map: this.amap,\n path: jurisdictionRange,\n extData: 'Area',\n strokeWeight: 6,\n ...this.drawLimitAreaOptions\n });\n const {\n lng,\n lat\n } = this.drawArea.getBounds().getCenter();\n this.amap.setZoomAndCenter(15, [lng, lat]);\n },\n /** 判断一个线段是否在面内 */\n islineInRing(polyline) {\n const paths = polyline.getPath();\n return paths.every(pointItem => this.ispointInRing(pointItem));\n },\n /** 判断一个点是否在面内 */\n ispointInRing(point) {\n let position;\n try {\n position = point.getPosition();\n } catch {\n position = point;\n }\n return this.amapStore.AMap.GeometryUtil.isPointInRing(position, this.drawArea.getPath());\n },\n /** 判断地图上所覆盖物是否在限制范围内 */\n judgeOverlays() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && !this[`is${this.drawType}InRing`](layerItem) && this.removeOverlay(layerItem));\n },\n /** 清除单个覆盖物(或 不符合区域范围的覆盖物 */\n removeOverlay(layerItem) {\n this.amap.remove(layerItem);\n this.$message.error('未在区域范围内,请重新描绘!');\n try {\n const i = this.drawLayers.findIndex(layer => layer.getExtData() == layerItem.getExtData());\n this.drawLayers.splice(i, 1);\n } catch {\n this.drawLayers = null;\n this.drawLayersInfo = {};\n }\n },\n /** 根据类型处理不同数据 */\n async setDrawLayers(drawType) {\n const type = {\n point: 'marker',\n line: 'polyline',\n polygon: 'polygon'\n };\n\n /** 图层基础配置 */\n const drawOptions = drawType == 'point' ? {\n anchor: 'bottom-center',\n icon: await this.amapStore.setIcon(this.drawIcon)\n } : {\n strokeWeight: 8\n };\n this.drawMouseTool[type[drawType]]({\n ...drawOptions,\n ...this.drawOptions\n });\n },\n /** 赋值不同图层数据 */\n assignDrawLayers(drawType) {\n if (drawType == 'point') {\n const {\n lng,\n lat\n } = this.drawLayers.getPosition();\n const position = {\n longitude: lng,\n latitude: lat\n };\n this.amapStore.getMapAddress(position, address => {\n this.drawLayersInfo = {\n ...position,\n ...address\n };\n });\n return;\n }\n const range = this.drawLayers.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n this.drawLayersInfo = {\n range\n };\n },\n /** 回显不同类型图层 */\n echoDrawLayers(drawType) {\n /** 如若没挂载layers属性则退出 */\n if (!this.amapStore || !this.amap) return;\n const drawLayersItem = async (drawItem, type, i = 0) => {\n if (drawItem?.latitude && drawItem?.longitude) {\n let layersItem = null;\n const {\n longitude,\n latitude,\n range\n } = drawItem;\n const setOptions = {\n extData: `draw${type}${i}`,\n ...this.drawOptions\n };\n if (type == 'point') {\n layersItem = await this.amapStore.setMarker(this.drawIcon, {\n position: [longitude, latitude],\n ...setOptions\n });\n } else {\n const options = {\n path: range,\n strokeWeight: 8,\n ...setOptions\n };\n layersItem = type == 'line' ? new this.amapStore.AMap.Polyline(options) : new this.amapStore.AMap.Polygon(options);\n }\n layersItem.setMap(this.amap);\n this.amap.setFitView();\n }\n };\n if (!this.isExhibition) {\n drawLayersItem(this.drawLayersInfo, drawType);\n return;\n }\n if (this.drawInfoAll) {\n for (let key in this.drawInfoAll) {\n const isArray = Array.isArray(this.drawInfoAll[key]);\n isArray ? this.drawInfoAll[key].forEach((drawItem, i) => {\n drawLayersItem(drawItem, key, i);\n }) : drawLayersItem(this.drawInfoAll[key], key);\n }\n return;\n }\n drawLayersItem(this.drawLayersInfo, drawType);\n }\n },\n render(h) {\n const {\n drawEl,\n drawIcon,\n buttonProps,\n isExhibition,\n AmapDrawClear,\n searchChoose\n } = this;\n return h(\"div\", {\n \"class\": \"AmapDraw\"\n }, [!isExhibition && h(_components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n \"props\": {\n ...{\n drawIcon,\n buttonProps\n }\n },\n \"on\": {\n ...{\n searchReset: AmapDrawClear,\n searchChoose\n }\n }\n }), h(\"div\", {\n \"attrs\": {\n \"id\": drawEl\n }\n })]);\n }\n};\nAmapDraw.install = function (Vue) {\n Vue.component('AmapDraw', AmapDraw);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapDraw);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/AmapDraw.jsx?");
|
|
8718
8718
|
|
|
8719
8719
|
/***/ }),
|
|
8720
8720
|
|
|
@@ -8725,7 +8725,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
8725
8725
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8726
8726
|
|
|
8727
8727
|
"use strict";
|
|
8728
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapSearchProps: () => (/* binding */ AmapSearchProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../index */ \"./plugins/lib/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _index_less__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.less */ \"./plugins/lib/amap/components/AmapSearch/index.less\");\n\n\n\n\n\n\nconst {\n ASelectCustom\n} = _index__WEBPACK_IMPORTED_MODULE_2__.FormComp;\nconst AmapSearchProps = {\n /** 搜索后绘制图标 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].any,\n buttonProps: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].array.def([])\n};\nconst AmapSearch = {\n name: 'AmapSearch',\n props: AmapSearchProps,\n data() {\n return {\n searchMarker: null,\n addressValue: undefined,\n selectOptions: []\n };\n },\n methods: {\n /** 选择地址 */\n async changeHandle() {\n if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), this.searchMarker = null;\n const {\n label,\n location\n } = this.selectOptions.find(({\n id\n }) => id == this.addressValue);\n const searchInfo = {\n longitude: location.lng,\n latitude: location.lat,\n address: label\n };\n this.searchMarker = await this
|
|
8728
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapSearchProps: () => (/* binding */ AmapSearchProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../index */ \"./plugins/lib/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _index_less__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.less */ \"./plugins/lib/amap/components/AmapSearch/index.less\");\n\n\n\n\n\n\nconst {\n ASelectCustom\n} = _index__WEBPACK_IMPORTED_MODULE_2__.FormComp;\nconst AmapSearchProps = {\n /** 搜索后绘制图标 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].any,\n buttonProps: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].array.def([])\n};\nconst AmapSearch = {\n name: 'AmapSearch',\n props: AmapSearchProps,\n data() {\n return {\n /** 地图存储商店 */\n amapStore: null,\n searchMarker: null,\n addressValue: undefined,\n selectOptions: []\n };\n },\n async mounted() {\n this.amapStore = await (0,_method_AMap_js__WEBPACK_IMPORTED_MODULE_3__.getAMapInstance)();\n },\n methods: {\n /** 选择地址 */\n async changeHandle() {\n if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), this.searchMarker = null;\n const {\n label,\n location\n } = this.selectOptions.find(({\n id\n }) => id == this.addressValue);\n const searchInfo = {\n longitude: location.lng,\n latitude: location.lat,\n address: label\n };\n this.searchMarker = await this.amapStore.setMarker(this.drawIcon, {\n position: [location.lng, location.lat]\n });\n this.$emit('searchChoose', this.searchMarker, searchInfo);\n },\n /** 根据搜索框搜索地址 */\n searchHandle(keyword) {\n this.amapStore.getMapSearch(keyword, addressOptions => {\n this.selectOptions = addressOptions;\n });\n }\n },\n render(h) {\n const {\n selectOptions,\n changeHandle,\n searchHandle,\n buttonProps\n } = this;\n const props = {\n valueKey: 'id',\n labelKey: 'label',\n options: selectOptions,\n placeholder: '请输入目的地进行搜索'\n };\n return h(\"div\", {\n \"class\": \"AmapDraw__Search\"\n }, [h(ASelectCustom, {\n \"props\": {\n ...props\n },\n \"on\": {\n ...{\n change: changeHandle,\n search: searchHandle\n }\n },\n \"model\": {\n value: this.addressValue,\n callback: $$v => {\n this.addressValue = $$v;\n }\n }\n }), buttonProps && h(_index__WEBPACK_IMPORTED_MODULE_2__.Button, {\n \"attrs\": {\n \"buttonProps\": buttonProps\n },\n \"class\": \"AmapDraw__Search__Button\"\n })]);\n }\n};\nAmapSearch.install = function (Vue) {\n Vue.component('AmapSearch', AmapSearch);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapSearch);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/components/AmapSearch/index.jsx?");
|
|
8729
8729
|
|
|
8730
8730
|
/***/ }),
|
|
8731
8731
|
|
|
@@ -9033,7 +9033,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
9033
9033
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
9034
9034
|
|
|
9035
9035
|
"use strict";
|
|
9036
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getAMapInstance: () => (/* binding */ getAMapInstance),\n/* harmony export */ setAMapSecurity: () => (/* binding */ setAMapSecurity)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @amap/amap-jsapi-loader */ \"./node_modules/@amap/amap-jsapi-loader/dist/index.js\");\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n// amap-plugin.js\n\nlet AMapKey = null;\nlet AMapStyle = null;\nlet AMapInstance = null;\n/** 默认地图key、样式及安全解码 */\nlet AMapConfig = {\n key: '722d07dd44d442d72a25a1304bac7743',\n style: 'amap://styles/ff26c7ed32880397f692f5b69b1c1f9f',\n securityJsCode: '90366326a87f1d0e3ddb43e05cc021b1'\n};\n\n// 安全配置 / 地图样式配置\nconst setAMapSecurity = (config = AMapConfig) => {\n const {\n key,\n style,\n securityJsCode\n } = config;\n AMapKey = key;\n AMapStyle = style;\n /** 设置高德地图密钥 */\n window.forceWebGL = true;\n window._AMapSecurityConfig = {\n securityJsCode\n };\n};\n\n// 核心地图服务类\nclass AMapService {\n constructor(AMap) {\n this.AMap = AMap;\n this._iconCache = new Map(); // 图标缓存\n\n /** 常用覆盖物 */\n this.layers = {\n setIcon: this.setIcon.bind(this),\n setMarker: this.setMarker.bind(this),\n setInfoWindow: this._createInfoWindowHandler()\n };\n\n /** 抛出地图常用方法 */\n this.methods = {\n getMapAddress: this.getMapAddress.bind(this),\n getMapSearch: this.getMapSearch.bind(this),\n setMapDriving: this.setMapDriving.bind(this),\n drawMapAnimation,\n parseRouteToPath,\n getOverlayPos\n };\n }\n\n /** 初始化地图 */\n initMap(container, options = {}) {\n const map = new this.AMap.Map(container, {\n zoom: 13,\n zooms: [3, 20],\n pitch: 30,\n rotation: -15,\n viewMode: '3D',\n mapStyle: AMapStyle,\n ...options\n });\n options.zoomTool && map.addControl(new this.AMap.ToolBar());\n options.directionTool && map.addControl(new this.AMap.ControlBar());\n return map;\n }\n\n /** 格式化地图经纬度 */\n setLngLat(position) {\n return new this.AMap.LngLat(position[0], position[1]);\n }\n\n /** 创建信息窗口处理器(柯里化函数) */\n _createInfoWindowHandler() {\n return Vue => {\n if (!Vue || !Vue.extend) {\n throw new Error('必须传入有效的Vue构造函数');\n }\n return ({\n component,\n props,\n options = {}\n }) => {\n if (!component) throw new Error('component参数必填');\n const InfoWindowComponent = Vue.extend(component);\n const instance = new InfoWindowComponent({\n propsData: props\n }).$mount(document.createElement('div'));\n return new this.AMap.InfoWindow({\n isCustom: true,\n content: instance.$el,\n ...options\n });\n };\n };\n }\n\n /** 带缓存的图标创建方法 */\n async setIcon(iconUrl) {\n if (this._iconCache.has(iconUrl)) {\n return this._iconCache.get(iconUrl);\n }\n return new Promise((resolve, reject) => {\n const icon = new this.AMap.Icon({\n image: iconUrl,\n imageOffset: new this.AMap.Pixel(0, 0)\n });\n const img = new Image();\n img.onload = () => {\n const size = new this.AMap.Size(img.width, img.height);\n icon.setSize(size);\n icon.setImageSize(size);\n this._iconCache.set(iconUrl, icon);\n resolve(icon);\n };\n img.onerror = () => reject(new Error(`图标加载失败: ${iconUrl}`));\n img.src = iconUrl;\n });\n }\n\n /** 增强的标记点创建方法 */\n async setMarker(iconUrl, options = {}) {\n try {\n const icon = await this.setIcon(iconUrl);\n const marker = new this.AMap.Marker({\n anchor: 'bottom-center',\n ...options,\n icon\n });\n return marker;\n } catch (error) {\n console.error('创建标记点失败:', error);\n throw error;\n }\n }\n\n /** 地图逆地理编码 */\n getMapAddress({\n longitude,\n latitude\n }, callBack) {\n return new Promise((resolve, reject) => {\n const geocoder = new this.AMap.Geocoder({\n city: '全国',\n extensions: 'all'\n });\n geocoder.getAddress([longitude, latitude], (status, result) => {\n if (status === 'complete' && result.info === 'OK') {\n const {\n formattedAddress,\n pois\n } = result.regeocode;\n const {\n district,\n township\n } = result.regeocode.addressComponent;\n const division = township && formattedAddress.includes(township) ? formattedAddress.indexOf(township) + township.length : formattedAddress.indexOf(district) + district.length;\n const addressMsg = {\n address: formattedAddress.slice(0, division) + (pois[0]?.address || ''),\n addressInfo: result.regeocode.addressComponent\n };\n callBack?.(addressMsg);\n resolve(addressMsg);\n } else {\n reject(new Error('转换失败'));\n }\n });\n });\n }\n\n /** 根据地址搜索地图poi点及其他信息 */\n /**\r\n * \r\n * @param {*} keywords 根据关键字搜索\r\n * @param {*} callBack 查询成功后过滤信息及转换格式 传递回调函数 兼容老版本代码\r\n */\n getMapSearch(keywords, callBack) {\n return new Promise(resolve => {\n const placeSearch = new this.AMap.PlaceSearch();\n placeSearch.search(keywords, (status, searchList) => {\n const options = searchList?.poiList?.pois?.map(node => ({\n ...node,\n label: `${node.name}(${node.address})`\n })) || [];\n callBack?.(options);\n resolve(options);\n });\n });\n }\n\n /** 道路规划 */\n /**\r\n * \r\n * @param {*} AMapInit 当前地图实例\r\n * @param {*} paths 需查询的路径起始点及途径点集合\r\n * @param {*} roadOptions 路线规划的其他参数\r\n * { paths: 需查询的路径起始点及途径点集合, options: 为查询路线配置项 }\r\n * @param {*} callBack 查询成功后回调函数 兼容老版本代码\r\n */\n async setMapDriving(mapInstance, roadOptions, callBack) {\n const {\n paths,\n options = {}\n } = roadOptions;\n return new Promise(resolve => {\n mapInstance.plugin(\"AMap.Driving\", () => {\n const driving = new this.AMap.Driving({\n map: mapInstance,\n ...options\n });\n driving.search(this.setLngLat(paths[0]), this.setLngLat(paths[paths.length - 1]), {\n waypoints: paths.slice(1, -1).map(path => this.setLngLat(path))\n }, (status, {\n routes\n }) => status === 'complete' && (callBack?.(roadDriving, routes), resolve({\n driving,\n routes\n })));\n });\n });\n }\n\n // 其他方法保持类似改造...\n}\n\n// 获取AMap实例(组件内使用)\nconst getAMapInstance = async (options = {}) => {\n if (AMapInstance) return AMapInstance;\n try {\n const AMap = await _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default().load({\n key: AMapKey,\n version: '2.0',\n plugins: ['AMap.Geocoder', 'AMap.PlaceSearch',\n // 搜索\n 'AMap.MouseTool',\n // 鼠标\n 'AMap.ControlBar',\n // 方向盘\n 'AMap.ToolBar',\n // 缩放\n ...(options.plugins || [])]\n });\n AMapInstance = new AMapService(AMap);\n return AMapInstance;\n } catch (e) {\n throw new Error(`高德地图加载失败: ${e.message}`);\n }\n};\n\n// 在 Vue 插件中封装高德地图的初始化和常用方法 \n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n async install(Vue, options = {}) {\n const amap = await getAMapInstance(options);\n const {\n AMap,\n methods,\n layers\n } = amap;\n Vue.prototype.$amap = AMap;\n\n /** 初始化地图 */\n Vue.prototype.$initAMap = (mapOptions, callBack) => {\n const amapInit = amap.initMap(mapOptions.el, mapOptions.options || {});\n /** 兼容之前版本代码 */\n callBack?.(amapInit);\n return amapInit;\n };\n\n /** 地图加载完成 */\n Vue.prototype.$amapBus.$emit('onAMapMounted');\n\n /** 常用覆盖物 */\n Vue.prototype.$amapLayers = {\n ...layers,\n setInfoWindow: layers.setInfoWindow(Vue)\n };\n\n /** 抛出地图常用方法 */\n Vue.prototype.$amapMethods = methods || {};\n }\n});\n\n/** \r\n * 安全获取覆盖物坐标信息 \r\n * @param {AMap.Overlay} overlay 地图覆盖物实例\r\n * @returns {Array<Array<number>>} 坐标点数组\r\n */\nfunction getOverlayPos(overlay) {\n if (!overlay) throw new Error('覆盖物实例不存在');\n try {\n return overlay.type === 'AMap.Marker' ? [overlay.getPosition().lng, overlay.getPosition().lat] : overlay.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n } catch (e) {\n console.error('转换失败', e);\n return [];\n }\n}\n\n/**\r\n * 轨迹动画执行器\r\n * @param {AMap.Map} AMapInit 地图实例\r\n * @param {AMap.Marker} animationMarker 动画标记物\r\n * @param {Array<Array<number>>} paths 路径坐标数组\r\n * @param {Object} [options] 动画配置\r\n * @param {Function} [callBack] 动画完成回调\r\n */\nfunction drawMapAnimation(AMapInit, animationMarker, paths, options = {}, callBack) {\n if (!AMapInit || !animationMarker || !paths?.length) {\n return console.error('缺少参数信息');\n }\n AMapInit.plugin('AMap.MoveAnimation', () => {\n const defaultOptions = {\n duration: 500,\n autoRotation: true,\n ...options\n };\n animationMarker.moveAlong(paths, defaultOptions);\n callBack?.(animationMarker);\n });\n}\n\n/**\r\n * 转换导航路线为可绘制路径\r\n * @param {AMap.DrivingRoute} route 导航路线对象\r\n * @returns {{\r\n* path: Array<Array<number>>,\r\n* approachPoints: Array<number>\r\n* }}\r\n*/\nfunction parseRouteToPath(route) {\n if (!route?.steps) return {\n path: [],\n approachPoints: []\n };\n const result = {\n path: [],\n approachPoints: []\n };\n route.steps.forEach((step, stepIndex) => {\n step.path.forEach((point, pointIndex) => {\n result.path.push([point.lng, point.lat]);\n if (step.assistant_action === \"到达途经地\" && pointIndex === step.path.length - 1) {\n result.approachPoints.push(result.path.length - 1);\n }\n });\n });\n return result;\n}\n\n//# sourceURL=webpack://mui/./plugins/method/AMap.js?");
|
|
9036
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getAMapInstance: () => (/* binding */ getAMapInstance),\n/* harmony export */ setAMapSecurity: () => (/* binding */ setAMapSecurity)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @amap/amap-jsapi-loader */ \"./node_modules/@amap/amap-jsapi-loader/dist/index.js\");\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n// amap-plugin.js\n\n\n/** 入口文件不同 作用域不同 */\nlet AMapKey = null;\nlet AMapStyle = null;\nlet AMapInstance = null;\n/** 默认地图key、样式及安全解码 */\nlet AMapConfig = {\n key: '722d07dd44d442d72a25a1304bac7743',\n style: 'amap://styles/ff26c7ed32880397f692f5b69b1c1f9f',\n securityJsCode: '90366326a87f1d0e3ddb43e05cc021b1'\n};\n\n// 安全配置 / 地图样式配置\nconst setAMapSecurity = (config = AMapConfig) => {\n const {\n key,\n style,\n securityJsCode\n } = config;\n AMapKey = key;\n AMapStyle = style;\n /** 设置高德地图密钥 */\n window.forceWebGL = true;\n window._AMapSecurityConfig = {\n securityJsCode\n };\n};\n\n// 核心地图服务类\nclass AMapService {\n constructor(AMap) {\n this.AMap = AMap;\n this._iconCache = new Map(); // 图标缓存\n\n /** 常用覆盖物 */\n this.layers = {\n setIcon: this.setIcon.bind(this),\n setMarker: this.setMarker.bind(this),\n setInfoWindow: this._createInfoWindowHandler()\n };\n\n /** 抛出地图常用方法 */\n this.methods = {\n getMapAddress: this.getMapAddress.bind(this),\n getMapSearch: this.getMapSearch.bind(this),\n setMapDriving: this.setMapDriving.bind(this),\n drawMapAnimation,\n parseRouteToPath,\n getOverlayPos\n };\n }\n\n /** 初始化地图 */\n initMap(container, options = {}) {\n const map = new this.AMap.Map(container, {\n zoom: 13,\n zooms: [3, 20],\n pitch: 30,\n rotation: -15,\n viewMode: '3D',\n mapStyle: AMapStyle,\n ...options\n });\n options.zoomTool && map.addControl(new this.AMap.ToolBar());\n options.directionTool && map.addControl(new this.AMap.ControlBar());\n return map;\n }\n\n /** 格式化地图经纬度 */\n setLngLat(position) {\n return new this.AMap.LngLat(position[0], position[1]);\n }\n\n /** 创建信息窗口处理器(柯里化函数) */\n _createInfoWindowHandler() {\n return Vue => {\n if (!Vue || !Vue.extend) {\n throw new Error('必须传入有效的Vue构造函数');\n }\n return ({\n component,\n props,\n options = {}\n }) => {\n if (!component) throw new Error('component参数必填');\n const InfoWindowComponent = Vue.extend(component);\n const instance = new InfoWindowComponent({\n propsData: props\n }).$mount(document.createElement('div'));\n return new this.AMap.InfoWindow({\n isCustom: true,\n content: instance.$el,\n ...options\n });\n };\n };\n }\n\n /** 带缓存的图标创建方法 */\n async setIcon(iconUrl) {\n if (this._iconCache.has(iconUrl)) {\n return this._iconCache.get(iconUrl);\n }\n return new Promise((resolve, reject) => {\n const icon = new this.AMap.Icon({\n image: iconUrl,\n imageOffset: new this.AMap.Pixel(0, 0)\n });\n const img = new Image();\n img.onload = () => {\n const size = new this.AMap.Size(img.width, img.height);\n icon.setSize(size);\n icon.setImageSize(size);\n this._iconCache.set(iconUrl, icon);\n resolve(icon);\n };\n img.onerror = () => reject(new Error(`图标加载失败: ${iconUrl}`));\n img.src = iconUrl;\n });\n }\n\n /** 增强的标记点创建方法 */\n async setMarker(iconUrl, options = {}) {\n try {\n const icon = await this.setIcon(iconUrl);\n const marker = new this.AMap.Marker({\n anchor: 'bottom-center',\n ...options,\n icon\n });\n return marker;\n } catch (error) {\n console.error('创建标记点失败:', error);\n throw error;\n }\n }\n\n /** 地图逆地理编码 */\n getMapAddress({\n longitude,\n latitude\n }, callBack) {\n return new Promise((resolve, reject) => {\n const geocoder = new this.AMap.Geocoder({\n city: '全国',\n extensions: 'all'\n });\n geocoder.getAddress([longitude, latitude], (status, result) => {\n if (status === 'complete' && result.info === 'OK') {\n const {\n formattedAddress,\n pois\n } = result.regeocode;\n const {\n district,\n township\n } = result.regeocode.addressComponent;\n const division = township && formattedAddress.includes(township) ? formattedAddress.indexOf(township) + township.length : formattedAddress.indexOf(district) + district.length;\n const addressMsg = {\n address: formattedAddress.slice(0, division) + (pois[0]?.address || ''),\n addressInfo: result.regeocode.addressComponent\n };\n callBack?.(addressMsg);\n resolve(addressMsg);\n } else {\n reject(new Error('转换失败'));\n }\n });\n });\n }\n\n /** 根据地址搜索地图poi点及其他信息 */\n /**\r\n * \r\n * @param {*} keywords 根据关键字搜索\r\n * @param {*} callBack 查询成功后过滤信息及转换格式 传递回调函数 兼容老版本代码\r\n */\n getMapSearch(keywords, callBack) {\n return new Promise(resolve => {\n const placeSearch = new this.AMap.PlaceSearch();\n placeSearch.search(keywords, (status, searchList) => {\n const options = searchList?.poiList?.pois?.map(node => ({\n ...node,\n label: `${node.name}(${node.address})`\n })) || [];\n callBack?.(options);\n resolve(options);\n });\n });\n }\n\n /** 道路规划 */\n /**\r\n * \r\n * @param {*} AMapInit 当前地图实例\r\n * @param {*} paths 需查询的路径起始点及途径点集合\r\n * @param {*} roadOptions 路线规划的其他参数\r\n * { paths: 需查询的路径起始点及途径点集合, options: 为查询路线配置项 }\r\n * @param {*} callBack 查询成功后回调函数 兼容老版本代码\r\n */\n async setMapDriving(mapInstance, roadOptions, callBack) {\n const {\n paths,\n options = {}\n } = roadOptions;\n return new Promise(resolve => {\n mapInstance.plugin(\"AMap.Driving\", () => {\n const driving = new this.AMap.Driving({\n map: mapInstance,\n ...options\n });\n driving.search(this.setLngLat(paths[0]), this.setLngLat(paths[paths.length - 1]), {\n waypoints: paths.slice(1, -1).map(path => this.setLngLat(path))\n }, (status, {\n routes\n }) => status === 'complete' && (callBack?.(roadDriving, routes), resolve({\n driving,\n routes\n })));\n });\n });\n }\n\n // 其他方法保持类似改造...\n}\n\n// 获取AMap实例(组件内使用)\nconst getAMapInstance = async (options = {}) => {\n if (AMapInstance) return AMapInstance;\n\n // 确保key存在\n if (!AMapKey) {\n try {\n setAMapSecurity();\n } catch (e) {\n throw new Error('请先设置地图Key!');\n }\n }\n try {\n const AMap = await _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default().load({\n key: AMapKey,\n version: '2.0',\n plugins: ['AMap.Geocoder', 'AMap.PlaceSearch',\n // 搜索\n 'AMap.MouseTool',\n // 鼠标\n 'AMap.ControlBar',\n // 方向盘\n 'AMap.ToolBar',\n // 缩放\n ...(options.plugins || [])]\n });\n AMapInstance = new AMapService(AMap);\n return AMapInstance;\n } catch (e) {\n throw new Error(`高德地图加载失败: ${e.message}`);\n }\n};\n\n// 在 Vue 插件中封装高德地图的初始化和常用方法 \n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n async install(Vue, options = {}) {\n const amap = await getAMapInstance(options);\n const {\n AMap,\n methods,\n layers\n } = amap;\n Vue.prototype.$amap = AMap;\n\n /** 初始化地图 */\n Vue.prototype.$initAMap = (mapOptions, callBack) => {\n const amapInit = amap.initMap(mapOptions.el, mapOptions.options || {});\n /** 兼容之前版本代码 */\n callBack?.(amapInit);\n return amapInit;\n };\n\n /** 地图加载完成 */\n Vue.prototype.$amapBus.$emit('onAMapMounted');\n\n /** 常用覆盖物 */\n Vue.prototype.$amapLayers = {\n ...layers,\n setInfoWindow: layers.setInfoWindow(Vue)\n };\n\n /** 抛出地图常用方法 */\n Vue.prototype.$amapMethods = methods || {};\n }\n});\n\n/** \r\n * 安全获取覆盖物坐标信息 \r\n * @param {AMap.Overlay} overlay 地图覆盖物实例\r\n * @returns {Array<Array<number>>} 坐标点数组\r\n */\nfunction getOverlayPos(overlay) {\n if (!overlay) throw new Error('覆盖物实例不存在');\n try {\n return overlay.type === 'AMap.Marker' ? [overlay.getPosition().lng, overlay.getPosition().lat] : overlay.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n } catch (e) {\n console.error('转换失败', e);\n return [];\n }\n}\n\n/**\r\n * 轨迹动画执行器\r\n * @param {AMap.Map} AMapInit 地图实例\r\n * @param {AMap.Marker} animationMarker 动画标记物\r\n * @param {Array<Array<number>>} paths 路径坐标数组\r\n * @param {Object} [options] 动画配置\r\n * @param {Function} [callBack] 动画完成回调\r\n */\nfunction drawMapAnimation(AMapInit, animationMarker, paths, options = {}, callBack) {\n if (!AMapInit || !animationMarker || !paths?.length) {\n return console.error('缺少参数信息');\n }\n AMapInit.plugin('AMap.MoveAnimation', () => {\n const defaultOptions = {\n duration: 500,\n autoRotation: true,\n ...options\n };\n animationMarker.moveAlong(paths, defaultOptions);\n callBack?.(animationMarker);\n });\n}\n\n/**\r\n * 转换导航路线为可绘制路径\r\n * @param {AMap.DrivingRoute} route 导航路线对象\r\n * @returns {{\r\n* path: Array<Array<number>>,\r\n* approachPoints: Array<number>\r\n* }}\r\n*/\nfunction parseRouteToPath(route) {\n if (!route?.steps) return {\n path: [],\n approachPoints: []\n };\n const result = {\n path: [],\n approachPoints: []\n };\n route.steps.forEach((step, stepIndex) => {\n step.path.forEach((point, pointIndex) => {\n result.path.push([point.lng, point.lat]);\n if (step.assistant_action === \"到达途经地\" && pointIndex === step.path.length - 1) {\n result.approachPoints.push(result.path.length - 1);\n }\n });\n });\n return result;\n}\n\n//# sourceURL=webpack://mui/./plugins/method/AMap.js?");
|
|
9037
9037
|
|
|
9038
9038
|
/***/ }),
|
|
9039
9039
|
|
package/dist/index.umd.js
CHANGED
|
@@ -8714,7 +8714,7 @@ eval("/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source cod
|
|
|
8714
8714
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8715
8715
|
|
|
8716
8716
|
"use strict";
|
|
8717
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapDrawProps: () => (/* binding */ AmapDrawProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.every.js */ \"./node_modules/core-js/modules/es.iterator.every.js\");\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/AmapSearch/index.jsx */ \"./plugins/lib/amap/components/AmapSearch/index.jsx\");\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _AmapDraw_less__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AmapDraw.less */ \"./plugins/lib/amap/AmapDraw.less\");\n\n\n\n\n\n\n\n\n\nconst AmapDrawProps = {\n /** drawEl为地图容器实例名称 */\n drawEl: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('AmapDraw'),\n /** drawType为绘制类型\r\n * 可选值(point点 | line线 | polygon面)\r\n */\n drawType: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('point'),\n /** 绘制图标 (只在point类型下生效 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].any.def('http://api.qxfnkj.com:8090/poi/poi-marker-default.png'),\n /** drawCount为绘制物绘制个数 */\n drawCount: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].number.def(1),\n /** drawOptions为绘制物配置项 */\n drawOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** drawInfo为绘制物信息 */\n drawInfo: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].array]),\n /** drawInfoAll为所有不同类型绘制物信息(用于回显地图图层)\r\n * 格式: { point: ([]||{}), line: ([]||{}) }\r\n */\n drawInfoAll: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object,\n /** 限制区域 */\n drawLimitArea: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string]),\n /** 限制区域样式配置 */\n drawLimitAreaOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** 是否为纯地图展示数据 */\n isExhibition: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].bool.def(false)\n};\nconst AmapDraw = {\n name: 'AmapDraw',\n props: AmapDrawProps,\n data() {\n return {\n amap: null,\n drawArea: null,\n drawLayers: null,\n drawMouseTool: null,\n buttonProps: [],\n drawButtonProps: [{\n type: 'primary',\n text: '绘制',\n event: {\n click: this.AmapDraw\n }\n }, {\n text: '清除',\n event: {\n click: this.AmapDrawClear\n }\n }],\n saveButtonProps: [{\n type: 'primary',\n text: '保存',\n event: {\n click: this.AmapDrawSave\n }\n }, {\n text: '取消',\n event: {\n click: this.AmapDrawReset\n }\n }]\n };\n },\n computed: {\n drawLayersInfo: {\n get() {\n return this.drawInfo;\n },\n set(newValue) {\n this.$emit('getAMapLayersInfo', newValue);\n }\n }\n },\n watch: {\n drawInfo: {\n handler(newVal, oldVal) {\n const newValue = this.drawLayersInfo;\n newVal && this.echoDrawLayers(this.drawType);\n },\n deep: true\n },\n drawInfoAll(newValue) {\n newValue && this.echoDrawLayers();\n },\n drawOptions(newValue) {\n /** 检测options覆盖物配置是否更改,更改后要同步到地图上 */\n Object.keys(newValue).length && this.setOverlayOptions(newValue);\n },\n drawLimitArea(newValue) {\n newValue && this.setDrawLimitArea();\n }\n },\n mounted() {\n this.$amapBus.$on('onAMapMounted', () => {\n this.amap = this.$initAMap({\n el: this.drawEl\n });\n this.buttonProps = [].concat(this.drawButtonProps);\n this.echoDrawLayers(this.drawType);\n /** 如果有限制区域,则描绘在地图上 */\n this.drawLimitArea && this.setDrawLimitArea();\n });\n },\n destroyed() {\n this.AmapDrawClear();\n },\n methods: {\n /** 绘制 */\n AmapDraw() {\n this.buttonProps = [].concat(this.saveButtonProps);\n this.drawMouseTool = new this.$amap.MouseTool(this.amap);\n this.AmapDrawClear();\n this.setDrawLayers(this.drawType);\n this.drawMouseTool.on('draw', ({\n obj\n }) => {\n if (this.drawArea && !this[`is${this.drawType}InRing`](obj)) return this.amap.remove(obj), this.$message.error('未在范围内描绘!');\n /** 暂未支持一次性绘制多个 */\n this.drawCount > 1 ? (this.drawLayers = this.drawLayers || [], this.drawLayers.push(obj)) : this.drawLayers = obj;\n if (this.drawLayers && (this.drawLayers.length == this.drawCount || this.drawCount == 1)) {\n return this.drawMouseTool.close();\n }\n });\n },\n /** 清空绘制 / 清空搜索 */\n AmapDrawClear() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && this.amap.remove(layerItem));\n // this.amap.clearMap()\n this.drawLayers = null;\n this.drawLayersInfo = {};\n },\n /** 保存当前绘制 */\n AmapDrawSave() {\n this.assignDrawLayers(this.drawType);\n this.buttonProps = [].concat(this.drawButtonProps);\n },\n /** 取消当前绘制 */\n AmapDrawReset() {\n this.buttonProps = [].concat(this.drawButtonProps);\n this.AmapDrawClear();\n },\n /** 搜索地址 */\n searchChoose(searchMarker, searchInfo) {\n this.AmapDrawClear();\n searchMarker.setMap(this.amap);\n this.amap.setZoomAndCenter(15, searchMarker.getPosition());\n this.drawType == 'point' && (this.drawLayersInfo = searchInfo);\n // this.$emit('getAMapLayersInfo', this.drawLayersInfo)\n },\n /** 检测覆盖物配置信息并同步 */\n setOverlayOptions(options) {\n if (!this.drawLayers) return;\n this.drawCount > 1 ? this.drawLayers.forEach(drawItem => drawItem.setOptions(options)) : this.drawLayers.setOptions(options);\n },\n /** 绘制限定区域 */\n setDrawLimitArea() {\n let areaRange = [];\n try {\n areaRange = JSON.parse(this.drawLimitArea);\n } catch {\n areaRange = this.drawLimitArea;\n }\n this.drawArea && this.amap.remove(this.drawArea);\n /** 判断目前地图上存在的所绘制覆盖物是否在限制范围内 */\n this.setMapArea(areaRange);\n this.judgeOverlays();\n },\n /** 绘制地图区域范围 */\n setMapArea(jurisdictionRange) {\n this.drawArea = new this.$amap.Polygon({\n map: this.amap,\n path: jurisdictionRange,\n extData: 'Area',\n strokeWeight: 6,\n ...this.drawLimitAreaOptions\n });\n const {\n lng,\n lat\n } = this.drawArea.getBounds().getCenter();\n this.amap.setZoomAndCenter(15, [lng, lat]);\n },\n /** 判断一个线段是否在面内 */\n islineInRing(polyline) {\n const paths = polyline.getPath();\n return paths.every(pointItem => this.ispointInRing(pointItem));\n },\n /** 判断一个点是否在面内 */\n ispointInRing(point) {\n let position;\n try {\n position = point.getPosition();\n } catch {\n position = point;\n }\n return this.$amap.GeometryUtil.isPointInRing(position, this.drawArea.getPath());\n },\n /** 判断地图上所覆盖物是否在限制范围内 */\n judgeOverlays() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && !this[`is${this.drawType}InRing`](layerItem) && this.removeOverlay(layerItem));\n },\n /** 清除单个覆盖物(或 不符合区域范围的覆盖物 */\n removeOverlay(layerItem) {\n this.amap.remove(layerItem);\n this.$message.error('未在区域范围内,请重新描绘!');\n try {\n const i = this.drawLayers.findIndex(layer => layer.getExtData() == layerItem.getExtData());\n this.drawLayers.splice(i, 1);\n } catch {\n this.drawLayers = null;\n this.drawLayersInfo = {};\n }\n },\n /** 根据类型处理不同数据 */\n async setDrawLayers(drawType) {\n const type = {\n point: 'marker',\n line: 'polyline',\n polygon: 'polygon'\n };\n\n /** 图层基础配置 */\n const drawOptions = drawType == 'point' ? {\n anchor: 'bottom-center',\n icon: await this.$amapLayers.setIcon(this.drawIcon)\n } : {\n strokeWeight: 8\n };\n this.drawMouseTool[type[drawType]]({\n ...drawOptions,\n ...this.drawOptions\n });\n },\n /** 赋值不同图层数据 */\n assignDrawLayers(drawType) {\n if (drawType == 'point') {\n const {\n lng,\n lat\n } = this.drawLayers.getPosition();\n const position = {\n longitude: lng,\n latitude: lat\n };\n this.$amapMethods.getMapAddress(position, address => {\n this.drawLayersInfo = {\n ...position,\n ...address\n };\n });\n return;\n }\n const range = this.drawLayers.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n this.drawLayersInfo = {\n range\n };\n },\n /** 回显不同类型图层 */\n echoDrawLayers(drawType) {\n /** 如若没挂载layers属性则退出 */\n if (!this.$amapLayers || !this.amap) return;\n const drawLayersItem = async (drawItem, type, i = 0) => {\n if (drawItem?.latitude && drawItem?.longitude) {\n let layersItem = null;\n const {\n longitude,\n latitude,\n range\n } = drawItem;\n const setOptions = {\n extData: `draw${type}${i}`,\n ...this.drawOptions\n };\n if (type == 'point') {\n layersItem = await this.$amapLayers.setMarker(this.drawIcon, {\n position: [longitude, latitude],\n ...setOptions\n });\n } else {\n const options = {\n path: range,\n strokeWeight: 8,\n ...setOptions\n };\n layersItem = type == 'line' ? new this.$amap.Polyline(options) : new this.$amap.Polygon(options);\n }\n layersItem.setMap(this.amap);\n this.amap.setFitView();\n }\n };\n if (!this.isExhibition) {\n drawLayersItem(this.drawLayersInfo, drawType);\n return;\n }\n if (this.drawInfoAll) {\n for (let key in this.drawInfoAll) {\n const isArray = Array.isArray(this.drawInfoAll[key]);\n isArray ? this.drawInfoAll[key].forEach((drawItem, i) => {\n drawLayersItem(drawItem, key, i);\n }) : drawLayersItem(this.drawInfoAll[key], key);\n }\n return;\n }\n drawLayersItem(this.drawLayersInfo, drawType);\n }\n },\n render(h) {\n const {\n drawEl,\n drawIcon,\n buttonProps,\n isExhibition,\n AmapDrawClear,\n searchChoose\n } = this;\n return h(\"div\", {\n \"class\": \"AmapDraw\"\n }, [!isExhibition && h(_components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n \"props\": {\n ...{\n drawIcon,\n buttonProps\n }\n },\n \"on\": {\n ...{\n searchReset: AmapDrawClear,\n searchChoose\n }\n }\n }), h(\"div\", {\n \"attrs\": {\n \"id\": drawEl\n }\n })]);\n }\n};\nAmapDraw.install = function (Vue) {\n Vue.use(_method_AMap_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n Vue.component('AmapDraw', AmapDraw);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapDraw);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/AmapDraw.jsx?");
|
|
8717
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapDrawProps: () => (/* binding */ AmapDrawProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.every.js */ \"./node_modules/core-js/modules/es.iterator.every.js\");\n/* harmony import */ var core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_every_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/AmapSearch/index.jsx */ \"./plugins/lib/amap/components/AmapSearch/index.jsx\");\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _AmapDraw_less__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./AmapDraw.less */ \"./plugins/lib/amap/AmapDraw.less\");\n\n\n\n\n\n\n\n\n\nconst AmapDrawProps = {\n /** drawEl为地图容器实例名称 */\n drawEl: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('AmapDraw'),\n /** drawType为绘制类型\r\n * 可选值(point点 | line线 | polygon面)\r\n */\n drawType: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string.def('point'),\n /** 绘制图标 (只在point类型下生效 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].any.def('http://api.qxfnkj.com:8090/poi/poi-marker-default.png'),\n /** drawCount为绘制物绘制个数 */\n drawCount: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].number.def(1),\n /** drawOptions为绘制物配置项 */\n drawOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** drawInfo为绘制物信息 */\n drawInfo: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].array]),\n /** drawInfoAll为所有不同类型绘制物信息(用于回显地图图层)\r\n * 格式: { point: ([]||{}), line: ([]||{}) }\r\n */\n drawInfoAll: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object,\n /** 限制区域 */\n drawLimitArea: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].oneOfType([ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object, ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].string]),\n /** 限制区域样式配置 */\n drawLimitAreaOptions: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].object.def({}),\n /** 是否为纯地图展示数据 */\n isExhibition: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_8__[\"default\"].bool.def(false)\n};\nconst AmapDraw = {\n name: 'AmapDraw',\n props: AmapDrawProps,\n data() {\n return {\n amap: null,\n /** 地图存储商店 */\n amapStore: null,\n drawArea: null,\n drawLayers: null,\n drawMouseTool: null,\n buttonProps: [],\n drawButtonProps: [{\n type: 'primary',\n text: '绘制',\n event: {\n click: this.AmapDraw\n }\n }, {\n text: '清除',\n event: {\n click: this.AmapDrawClear\n }\n }],\n saveButtonProps: [{\n type: 'primary',\n text: '保存',\n event: {\n click: this.AmapDrawSave\n }\n }, {\n text: '取消',\n event: {\n click: this.AmapDrawReset\n }\n }]\n };\n },\n computed: {\n drawLayersInfo: {\n get() {\n return this.drawInfo;\n },\n set(newValue) {\n this.$emit('getAMapLayersInfo', newValue);\n }\n }\n },\n watch: {\n drawInfo: {\n handler(newVal, oldVal) {\n const newValue = this.drawLayersInfo;\n newVal && this.echoDrawLayers(this.drawType);\n },\n deep: true\n },\n drawInfoAll(newValue) {\n newValue && this.echoDrawLayers();\n },\n drawOptions(newValue) {\n /** 检测options覆盖物配置是否更改,更改后要同步到地图上 */\n Object.keys(newValue).length && this.setOverlayOptions(newValue);\n },\n drawLimitArea(newValue) {\n newValue && this.setDrawLimitArea();\n }\n },\n async mounted() {\n this.amapStore = await (0,_method_AMap_js__WEBPACK_IMPORTED_MODULE_6__.getAMapInstance)();\n this.amap = this.amapStore.initMap(this.drawEl);\n this.buttonProps = [].concat(this.drawButtonProps);\n this.echoDrawLayers(this.drawType);\n /** 如果有限制区域,则描绘在地图上 */\n this.drawLimitArea && this.setDrawLimitArea();\n },\n destroyed() {\n this.AmapDrawClear();\n },\n methods: {\n /** 绘制 */\n AmapDraw() {\n this.buttonProps = [].concat(this.saveButtonProps);\n this.drawMouseTool = new this.amapStore.AMap.MouseTool(this.amap);\n this.AmapDrawClear();\n this.setDrawLayers(this.drawType);\n this.drawMouseTool.on('draw', ({\n obj\n }) => {\n if (this.drawArea && !this[`is${this.drawType}InRing`](obj)) return this.amap.remove(obj), this.$message.error('未在范围内描绘!');\n /** 暂未支持一次性绘制多个 */\n this.drawCount > 1 ? (this.drawLayers = this.drawLayers || [], this.drawLayers.push(obj)) : this.drawLayers = obj;\n if (this.drawLayers && (this.drawLayers.length == this.drawCount || this.drawCount == 1)) {\n return this.drawMouseTool.close();\n }\n });\n },\n /** 清空绘制 / 清空搜索 */\n AmapDrawClear() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && this.amap.remove(layerItem));\n // this.amap.clearMap()\n this.drawLayers = null;\n this.drawLayersInfo = {};\n },\n /** 保存当前绘制 */\n AmapDrawSave() {\n this.assignDrawLayers(this.drawType);\n this.buttonProps = [].concat(this.drawButtonProps);\n },\n /** 取消当前绘制 */\n AmapDrawReset() {\n this.buttonProps = [].concat(this.drawButtonProps);\n this.AmapDrawClear();\n },\n /** 搜索地址 */\n searchChoose(searchMarker, searchInfo) {\n this.AmapDrawClear();\n searchMarker.setMap(this.amap);\n this.amap.setZoomAndCenter(15, searchMarker.getPosition());\n this.drawType == 'point' && (this.drawLayersInfo = searchInfo);\n // this.$emit('getAMapLayersInfo', this.drawLayersInfo)\n },\n /** 检测覆盖物配置信息并同步 */\n setOverlayOptions(options) {\n if (!this.drawLayers) return;\n this.drawCount > 1 ? this.drawLayers.forEach(drawItem => drawItem.setOptions(options)) : this.drawLayers.setOptions(options);\n },\n /** 绘制限定区域 */\n setDrawLimitArea() {\n let areaRange = [];\n try {\n areaRange = JSON.parse(this.drawLimitArea);\n } catch {\n areaRange = this.drawLimitArea;\n }\n this.drawArea && this.amap.remove(this.drawArea);\n /** 判断目前地图上存在的所绘制覆盖物是否在限制范围内 */\n this.setMapArea(areaRange);\n this.judgeOverlays();\n },\n /** 绘制地图区域范围 */\n setMapArea(jurisdictionRange) {\n this.drawArea = new this.amapStore.AMap.Polygon({\n map: this.amap,\n path: jurisdictionRange,\n extData: 'Area',\n strokeWeight: 6,\n ...this.drawLimitAreaOptions\n });\n const {\n lng,\n lat\n } = this.drawArea.getBounds().getCenter();\n this.amap.setZoomAndCenter(15, [lng, lat]);\n },\n /** 判断一个线段是否在面内 */\n islineInRing(polyline) {\n const paths = polyline.getPath();\n return paths.every(pointItem => this.ispointInRing(pointItem));\n },\n /** 判断一个点是否在面内 */\n ispointInRing(point) {\n let position;\n try {\n position = point.getPosition();\n } catch {\n position = point;\n }\n return this.amapStore.AMap.GeometryUtil.isPointInRing(position, this.drawArea.getPath());\n },\n /** 判断地图上所覆盖物是否在限制范围内 */\n judgeOverlays() {\n this.amap.getAllOverlays().forEach(layerItem => layerItem.getExtData() != 'Area' && !this[`is${this.drawType}InRing`](layerItem) && this.removeOverlay(layerItem));\n },\n /** 清除单个覆盖物(或 不符合区域范围的覆盖物 */\n removeOverlay(layerItem) {\n this.amap.remove(layerItem);\n this.$message.error('未在区域范围内,请重新描绘!');\n try {\n const i = this.drawLayers.findIndex(layer => layer.getExtData() == layerItem.getExtData());\n this.drawLayers.splice(i, 1);\n } catch {\n this.drawLayers = null;\n this.drawLayersInfo = {};\n }\n },\n /** 根据类型处理不同数据 */\n async setDrawLayers(drawType) {\n const type = {\n point: 'marker',\n line: 'polyline',\n polygon: 'polygon'\n };\n\n /** 图层基础配置 */\n const drawOptions = drawType == 'point' ? {\n anchor: 'bottom-center',\n icon: await this.amapStore.setIcon(this.drawIcon)\n } : {\n strokeWeight: 8\n };\n this.drawMouseTool[type[drawType]]({\n ...drawOptions,\n ...this.drawOptions\n });\n },\n /** 赋值不同图层数据 */\n assignDrawLayers(drawType) {\n if (drawType == 'point') {\n const {\n lng,\n lat\n } = this.drawLayers.getPosition();\n const position = {\n longitude: lng,\n latitude: lat\n };\n this.amapStore.getMapAddress(position, address => {\n this.drawLayersInfo = {\n ...position,\n ...address\n };\n });\n return;\n }\n const range = this.drawLayers.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n this.drawLayersInfo = {\n range\n };\n },\n /** 回显不同类型图层 */\n echoDrawLayers(drawType) {\n /** 如若没挂载layers属性则退出 */\n if (!this.amapStore || !this.amap) return;\n const drawLayersItem = async (drawItem, type, i = 0) => {\n if (drawItem?.latitude && drawItem?.longitude) {\n let layersItem = null;\n const {\n longitude,\n latitude,\n range\n } = drawItem;\n const setOptions = {\n extData: `draw${type}${i}`,\n ...this.drawOptions\n };\n if (type == 'point') {\n layersItem = await this.amapStore.setMarker(this.drawIcon, {\n position: [longitude, latitude],\n ...setOptions\n });\n } else {\n const options = {\n path: range,\n strokeWeight: 8,\n ...setOptions\n };\n layersItem = type == 'line' ? new this.amapStore.AMap.Polyline(options) : new this.amapStore.AMap.Polygon(options);\n }\n layersItem.setMap(this.amap);\n this.amap.setFitView();\n }\n };\n if (!this.isExhibition) {\n drawLayersItem(this.drawLayersInfo, drawType);\n return;\n }\n if (this.drawInfoAll) {\n for (let key in this.drawInfoAll) {\n const isArray = Array.isArray(this.drawInfoAll[key]);\n isArray ? this.drawInfoAll[key].forEach((drawItem, i) => {\n drawLayersItem(drawItem, key, i);\n }) : drawLayersItem(this.drawInfoAll[key], key);\n }\n return;\n }\n drawLayersItem(this.drawLayersInfo, drawType);\n }\n },\n render(h) {\n const {\n drawEl,\n drawIcon,\n buttonProps,\n isExhibition,\n AmapDrawClear,\n searchChoose\n } = this;\n return h(\"div\", {\n \"class\": \"AmapDraw\"\n }, [!isExhibition && h(_components_AmapSearch_index_jsx__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n \"props\": {\n ...{\n drawIcon,\n buttonProps\n }\n },\n \"on\": {\n ...{\n searchReset: AmapDrawClear,\n searchChoose\n }\n }\n }), h(\"div\", {\n \"attrs\": {\n \"id\": drawEl\n }\n })]);\n }\n};\nAmapDraw.install = function (Vue) {\n Vue.component('AmapDraw', AmapDraw);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapDraw);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/AmapDraw.jsx?");
|
|
8718
8718
|
|
|
8719
8719
|
/***/ }),
|
|
8720
8720
|
|
|
@@ -8725,7 +8725,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
8725
8725
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
8726
8726
|
|
|
8727
8727
|
"use strict";
|
|
8728
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapSearchProps: () => (/* binding */ AmapSearchProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../index */ \"./plugins/lib/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _index_less__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.less */ \"./plugins/lib/amap/components/AmapSearch/index.less\");\n\n\n\n\n\n\nconst {\n ASelectCustom\n} = _index__WEBPACK_IMPORTED_MODULE_2__.FormComp;\nconst AmapSearchProps = {\n /** 搜索后绘制图标 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].any,\n buttonProps: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].array.def([])\n};\nconst AmapSearch = {\n name: 'AmapSearch',\n props: AmapSearchProps,\n data() {\n return {\n searchMarker: null,\n addressValue: undefined,\n selectOptions: []\n };\n },\n methods: {\n /** 选择地址 */\n async changeHandle() {\n if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), this.searchMarker = null;\n const {\n label,\n location\n } = this.selectOptions.find(({\n id\n }) => id == this.addressValue);\n const searchInfo = {\n longitude: location.lng,\n latitude: location.lat,\n address: label\n };\n this.searchMarker = await this
|
|
8728
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AmapSearchProps: () => (/* binding */ AmapSearchProps),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.find.js */ \"./node_modules/core-js/modules/es.iterator.find.js\");\n/* harmony import */ var core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_find_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ant-design-vue/es/_util/vue-types */ \"./node_modules/ant-design-vue/es/_util/vue-types/index.js\");\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../index */ \"./plugins/lib/index.js\");\n/* harmony import */ var _method_AMap_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../method/AMap.js */ \"./plugins/method/AMap.js\");\n/* harmony import */ var _index_less__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./index.less */ \"./plugins/lib/amap/components/AmapSearch/index.less\");\n\n\n\n\n\n\nconst {\n ASelectCustom\n} = _index__WEBPACK_IMPORTED_MODULE_2__.FormComp;\nconst AmapSearchProps = {\n /** 搜索后绘制图标 */\n drawIcon: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].any,\n buttonProps: ant_design_vue_es_util_vue_types__WEBPACK_IMPORTED_MODULE_5__[\"default\"].array.def([])\n};\nconst AmapSearch = {\n name: 'AmapSearch',\n props: AmapSearchProps,\n data() {\n return {\n /** 地图存储商店 */\n amapStore: null,\n searchMarker: null,\n addressValue: undefined,\n selectOptions: []\n };\n },\n async mounted() {\n this.amapStore = await (0,_method_AMap_js__WEBPACK_IMPORTED_MODULE_3__.getAMapInstance)();\n },\n methods: {\n /** 选择地址 */\n async changeHandle() {\n if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), this.searchMarker = null;\n const {\n label,\n location\n } = this.selectOptions.find(({\n id\n }) => id == this.addressValue);\n const searchInfo = {\n longitude: location.lng,\n latitude: location.lat,\n address: label\n };\n this.searchMarker = await this.amapStore.setMarker(this.drawIcon, {\n position: [location.lng, location.lat]\n });\n this.$emit('searchChoose', this.searchMarker, searchInfo);\n },\n /** 根据搜索框搜索地址 */\n searchHandle(keyword) {\n this.amapStore.getMapSearch(keyword, addressOptions => {\n this.selectOptions = addressOptions;\n });\n }\n },\n render(h) {\n const {\n selectOptions,\n changeHandle,\n searchHandle,\n buttonProps\n } = this;\n const props = {\n valueKey: 'id',\n labelKey: 'label',\n options: selectOptions,\n placeholder: '请输入目的地进行搜索'\n };\n return h(\"div\", {\n \"class\": \"AmapDraw__Search\"\n }, [h(ASelectCustom, {\n \"props\": {\n ...props\n },\n \"on\": {\n ...{\n change: changeHandle,\n search: searchHandle\n }\n },\n \"model\": {\n value: this.addressValue,\n callback: $$v => {\n this.addressValue = $$v;\n }\n }\n }), buttonProps && h(_index__WEBPACK_IMPORTED_MODULE_2__.Button, {\n \"attrs\": {\n \"buttonProps\": buttonProps\n },\n \"class\": \"AmapDraw__Search__Button\"\n })]);\n }\n};\nAmapSearch.install = function (Vue) {\n Vue.component('AmapSearch', AmapSearch);\n};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AmapSearch);\n\n//# sourceURL=webpack://mui/./plugins/lib/amap/components/AmapSearch/index.jsx?");
|
|
8729
8729
|
|
|
8730
8730
|
/***/ }),
|
|
8731
8731
|
|
|
@@ -9033,7 +9033,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
9033
9033
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
9034
9034
|
|
|
9035
9035
|
"use strict";
|
|
9036
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getAMapInstance: () => (/* binding */ getAMapInstance),\n/* harmony export */ setAMapSecurity: () => (/* binding */ setAMapSecurity)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @amap/amap-jsapi-loader */ \"./node_modules/@amap/amap-jsapi-loader/dist/index.js\");\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n// amap-plugin.js\n\nlet AMapKey = null;\nlet AMapStyle = null;\nlet AMapInstance = null;\n/** 默认地图key、样式及安全解码 */\nlet AMapConfig = {\n key: '722d07dd44d442d72a25a1304bac7743',\n style: 'amap://styles/ff26c7ed32880397f692f5b69b1c1f9f',\n securityJsCode: '90366326a87f1d0e3ddb43e05cc021b1'\n};\n\n// 安全配置 / 地图样式配置\nconst setAMapSecurity = (config = AMapConfig) => {\n const {\n key,\n style,\n securityJsCode\n } = config;\n AMapKey = key;\n AMapStyle = style;\n /** 设置高德地图密钥 */\n window.forceWebGL = true;\n window._AMapSecurityConfig = {\n securityJsCode\n };\n};\n\n// 核心地图服务类\nclass AMapService {\n constructor(AMap) {\n this.AMap = AMap;\n this._iconCache = new Map(); // 图标缓存\n\n /** 常用覆盖物 */\n this.layers = {\n setIcon: this.setIcon.bind(this),\n setMarker: this.setMarker.bind(this),\n setInfoWindow: this._createInfoWindowHandler()\n };\n\n /** 抛出地图常用方法 */\n this.methods = {\n getMapAddress: this.getMapAddress.bind(this),\n getMapSearch: this.getMapSearch.bind(this),\n setMapDriving: this.setMapDriving.bind(this),\n drawMapAnimation,\n parseRouteToPath,\n getOverlayPos\n };\n }\n\n /** 初始化地图 */\n initMap(container, options = {}) {\n const map = new this.AMap.Map(container, {\n zoom: 13,\n zooms: [3, 20],\n pitch: 30,\n rotation: -15,\n viewMode: '3D',\n mapStyle: AMapStyle,\n ...options\n });\n options.zoomTool && map.addControl(new this.AMap.ToolBar());\n options.directionTool && map.addControl(new this.AMap.ControlBar());\n return map;\n }\n\n /** 格式化地图经纬度 */\n setLngLat(position) {\n return new this.AMap.LngLat(position[0], position[1]);\n }\n\n /** 创建信息窗口处理器(柯里化函数) */\n _createInfoWindowHandler() {\n return Vue => {\n if (!Vue || !Vue.extend) {\n throw new Error('必须传入有效的Vue构造函数');\n }\n return ({\n component,\n props,\n options = {}\n }) => {\n if (!component) throw new Error('component参数必填');\n const InfoWindowComponent = Vue.extend(component);\n const instance = new InfoWindowComponent({\n propsData: props\n }).$mount(document.createElement('div'));\n return new this.AMap.InfoWindow({\n isCustom: true,\n content: instance.$el,\n ...options\n });\n };\n };\n }\n\n /** 带缓存的图标创建方法 */\n async setIcon(iconUrl) {\n if (this._iconCache.has(iconUrl)) {\n return this._iconCache.get(iconUrl);\n }\n return new Promise((resolve, reject) => {\n const icon = new this.AMap.Icon({\n image: iconUrl,\n imageOffset: new this.AMap.Pixel(0, 0)\n });\n const img = new Image();\n img.onload = () => {\n const size = new this.AMap.Size(img.width, img.height);\n icon.setSize(size);\n icon.setImageSize(size);\n this._iconCache.set(iconUrl, icon);\n resolve(icon);\n };\n img.onerror = () => reject(new Error(`图标加载失败: ${iconUrl}`));\n img.src = iconUrl;\n });\n }\n\n /** 增强的标记点创建方法 */\n async setMarker(iconUrl, options = {}) {\n try {\n const icon = await this.setIcon(iconUrl);\n const marker = new this.AMap.Marker({\n anchor: 'bottom-center',\n ...options,\n icon\n });\n return marker;\n } catch (error) {\n console.error('创建标记点失败:', error);\n throw error;\n }\n }\n\n /** 地图逆地理编码 */\n getMapAddress({\n longitude,\n latitude\n }, callBack) {\n return new Promise((resolve, reject) => {\n const geocoder = new this.AMap.Geocoder({\n city: '全国',\n extensions: 'all'\n });\n geocoder.getAddress([longitude, latitude], (status, result) => {\n if (status === 'complete' && result.info === 'OK') {\n const {\n formattedAddress,\n pois\n } = result.regeocode;\n const {\n district,\n township\n } = result.regeocode.addressComponent;\n const division = township && formattedAddress.includes(township) ? formattedAddress.indexOf(township) + township.length : formattedAddress.indexOf(district) + district.length;\n const addressMsg = {\n address: formattedAddress.slice(0, division) + (pois[0]?.address || ''),\n addressInfo: result.regeocode.addressComponent\n };\n callBack?.(addressMsg);\n resolve(addressMsg);\n } else {\n reject(new Error('转换失败'));\n }\n });\n });\n }\n\n /** 根据地址搜索地图poi点及其他信息 */\n /**\r\n * \r\n * @param {*} keywords 根据关键字搜索\r\n * @param {*} callBack 查询成功后过滤信息及转换格式 传递回调函数 兼容老版本代码\r\n */\n getMapSearch(keywords, callBack) {\n return new Promise(resolve => {\n const placeSearch = new this.AMap.PlaceSearch();\n placeSearch.search(keywords, (status, searchList) => {\n const options = searchList?.poiList?.pois?.map(node => ({\n ...node,\n label: `${node.name}(${node.address})`\n })) || [];\n callBack?.(options);\n resolve(options);\n });\n });\n }\n\n /** 道路规划 */\n /**\r\n * \r\n * @param {*} AMapInit 当前地图实例\r\n * @param {*} paths 需查询的路径起始点及途径点集合\r\n * @param {*} roadOptions 路线规划的其他参数\r\n * { paths: 需查询的路径起始点及途径点集合, options: 为查询路线配置项 }\r\n * @param {*} callBack 查询成功后回调函数 兼容老版本代码\r\n */\n async setMapDriving(mapInstance, roadOptions, callBack) {\n const {\n paths,\n options = {}\n } = roadOptions;\n return new Promise(resolve => {\n mapInstance.plugin(\"AMap.Driving\", () => {\n const driving = new this.AMap.Driving({\n map: mapInstance,\n ...options\n });\n driving.search(this.setLngLat(paths[0]), this.setLngLat(paths[paths.length - 1]), {\n waypoints: paths.slice(1, -1).map(path => this.setLngLat(path))\n }, (status, {\n routes\n }) => status === 'complete' && (callBack?.(roadDriving, routes), resolve({\n driving,\n routes\n })));\n });\n });\n }\n\n // 其他方法保持类似改造...\n}\n\n// 获取AMap实例(组件内使用)\nconst getAMapInstance = async (options = {}) => {\n if (AMapInstance) return AMapInstance;\n try {\n const AMap = await _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default().load({\n key: AMapKey,\n version: '2.0',\n plugins: ['AMap.Geocoder', 'AMap.PlaceSearch',\n // 搜索\n 'AMap.MouseTool',\n // 鼠标\n 'AMap.ControlBar',\n // 方向盘\n 'AMap.ToolBar',\n // 缩放\n ...(options.plugins || [])]\n });\n AMapInstance = new AMapService(AMap);\n return AMapInstance;\n } catch (e) {\n throw new Error(`高德地图加载失败: ${e.message}`);\n }\n};\n\n// 在 Vue 插件中封装高德地图的初始化和常用方法 \n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n async install(Vue, options = {}) {\n const amap = await getAMapInstance(options);\n const {\n AMap,\n methods,\n layers\n } = amap;\n Vue.prototype.$amap = AMap;\n\n /** 初始化地图 */\n Vue.prototype.$initAMap = (mapOptions, callBack) => {\n const amapInit = amap.initMap(mapOptions.el, mapOptions.options || {});\n /** 兼容之前版本代码 */\n callBack?.(amapInit);\n return amapInit;\n };\n\n /** 地图加载完成 */\n Vue.prototype.$amapBus.$emit('onAMapMounted');\n\n /** 常用覆盖物 */\n Vue.prototype.$amapLayers = {\n ...layers,\n setInfoWindow: layers.setInfoWindow(Vue)\n };\n\n /** 抛出地图常用方法 */\n Vue.prototype.$amapMethods = methods || {};\n }\n});\n\n/** \r\n * 安全获取覆盖物坐标信息 \r\n * @param {AMap.Overlay} overlay 地图覆盖物实例\r\n * @returns {Array<Array<number>>} 坐标点数组\r\n */\nfunction getOverlayPos(overlay) {\n if (!overlay) throw new Error('覆盖物实例不存在');\n try {\n return overlay.type === 'AMap.Marker' ? [overlay.getPosition().lng, overlay.getPosition().lat] : overlay.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n } catch (e) {\n console.error('转换失败', e);\n return [];\n }\n}\n\n/**\r\n * 轨迹动画执行器\r\n * @param {AMap.Map} AMapInit 地图实例\r\n * @param {AMap.Marker} animationMarker 动画标记物\r\n * @param {Array<Array<number>>} paths 路径坐标数组\r\n * @param {Object} [options] 动画配置\r\n * @param {Function} [callBack] 动画完成回调\r\n */\nfunction drawMapAnimation(AMapInit, animationMarker, paths, options = {}, callBack) {\n if (!AMapInit || !animationMarker || !paths?.length) {\n return console.error('缺少参数信息');\n }\n AMapInit.plugin('AMap.MoveAnimation', () => {\n const defaultOptions = {\n duration: 500,\n autoRotation: true,\n ...options\n };\n animationMarker.moveAlong(paths, defaultOptions);\n callBack?.(animationMarker);\n });\n}\n\n/**\r\n * 转换导航路线为可绘制路径\r\n * @param {AMap.DrivingRoute} route 导航路线对象\r\n * @returns {{\r\n* path: Array<Array<number>>,\r\n* approachPoints: Array<number>\r\n* }}\r\n*/\nfunction parseRouteToPath(route) {\n if (!route?.steps) return {\n path: [],\n approachPoints: []\n };\n const result = {\n path: [],\n approachPoints: []\n };\n route.steps.forEach((step, stepIndex) => {\n step.path.forEach((point, pointIndex) => {\n result.path.push([point.lng, point.lat]);\n if (step.assistant_action === \"到达途经地\" && pointIndex === step.path.length - 1) {\n result.approachPoints.push(result.path.length - 1);\n }\n });\n });\n return result;\n}\n\n//# sourceURL=webpack://mui/./plugins/method/AMap.js?");
|
|
9036
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getAMapInstance: () => (/* binding */ getAMapInstance),\n/* harmony export */ setAMapSecurity: () => (/* binding */ setAMapSecurity)\n/* harmony export */ });\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.iterator.constructor.js */ \"./node_modules/core-js/modules/es.iterator.constructor.js\");\n/* harmony import */ var core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_constructor_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.iterator.for-each.js */ \"./node_modules/core-js/modules/es.iterator.for-each.js\");\n/* harmony import */ var core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_for_each_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.iterator.map.js */ \"./node_modules/core-js/modules/es.iterator.map.js\");\n/* harmony import */ var core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_iterator_map_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @amap/amap-jsapi-loader */ \"./node_modules/@amap/amap-jsapi-loader/dist/index.js\");\n/* harmony import */ var _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4__);\n\n\n\n\n// amap-plugin.js\n\n\n/** 入口文件不同 作用域不同 */\nlet AMapKey = null;\nlet AMapStyle = null;\nlet AMapInstance = null;\n/** 默认地图key、样式及安全解码 */\nlet AMapConfig = {\n key: '722d07dd44d442d72a25a1304bac7743',\n style: 'amap://styles/ff26c7ed32880397f692f5b69b1c1f9f',\n securityJsCode: '90366326a87f1d0e3ddb43e05cc021b1'\n};\n\n// 安全配置 / 地图样式配置\nconst setAMapSecurity = (config = AMapConfig) => {\n const {\n key,\n style,\n securityJsCode\n } = config;\n AMapKey = key;\n AMapStyle = style;\n /** 设置高德地图密钥 */\n window.forceWebGL = true;\n window._AMapSecurityConfig = {\n securityJsCode\n };\n};\n\n// 核心地图服务类\nclass AMapService {\n constructor(AMap) {\n this.AMap = AMap;\n this._iconCache = new Map(); // 图标缓存\n\n /** 常用覆盖物 */\n this.layers = {\n setIcon: this.setIcon.bind(this),\n setMarker: this.setMarker.bind(this),\n setInfoWindow: this._createInfoWindowHandler()\n };\n\n /** 抛出地图常用方法 */\n this.methods = {\n getMapAddress: this.getMapAddress.bind(this),\n getMapSearch: this.getMapSearch.bind(this),\n setMapDriving: this.setMapDriving.bind(this),\n drawMapAnimation,\n parseRouteToPath,\n getOverlayPos\n };\n }\n\n /** 初始化地图 */\n initMap(container, options = {}) {\n const map = new this.AMap.Map(container, {\n zoom: 13,\n zooms: [3, 20],\n pitch: 30,\n rotation: -15,\n viewMode: '3D',\n mapStyle: AMapStyle,\n ...options\n });\n options.zoomTool && map.addControl(new this.AMap.ToolBar());\n options.directionTool && map.addControl(new this.AMap.ControlBar());\n return map;\n }\n\n /** 格式化地图经纬度 */\n setLngLat(position) {\n return new this.AMap.LngLat(position[0], position[1]);\n }\n\n /** 创建信息窗口处理器(柯里化函数) */\n _createInfoWindowHandler() {\n return Vue => {\n if (!Vue || !Vue.extend) {\n throw new Error('必须传入有效的Vue构造函数');\n }\n return ({\n component,\n props,\n options = {}\n }) => {\n if (!component) throw new Error('component参数必填');\n const InfoWindowComponent = Vue.extend(component);\n const instance = new InfoWindowComponent({\n propsData: props\n }).$mount(document.createElement('div'));\n return new this.AMap.InfoWindow({\n isCustom: true,\n content: instance.$el,\n ...options\n });\n };\n };\n }\n\n /** 带缓存的图标创建方法 */\n async setIcon(iconUrl) {\n if (this._iconCache.has(iconUrl)) {\n return this._iconCache.get(iconUrl);\n }\n return new Promise((resolve, reject) => {\n const icon = new this.AMap.Icon({\n image: iconUrl,\n imageOffset: new this.AMap.Pixel(0, 0)\n });\n const img = new Image();\n img.onload = () => {\n const size = new this.AMap.Size(img.width, img.height);\n icon.setSize(size);\n icon.setImageSize(size);\n this._iconCache.set(iconUrl, icon);\n resolve(icon);\n };\n img.onerror = () => reject(new Error(`图标加载失败: ${iconUrl}`));\n img.src = iconUrl;\n });\n }\n\n /** 增强的标记点创建方法 */\n async setMarker(iconUrl, options = {}) {\n try {\n const icon = await this.setIcon(iconUrl);\n const marker = new this.AMap.Marker({\n anchor: 'bottom-center',\n ...options,\n icon\n });\n return marker;\n } catch (error) {\n console.error('创建标记点失败:', error);\n throw error;\n }\n }\n\n /** 地图逆地理编码 */\n getMapAddress({\n longitude,\n latitude\n }, callBack) {\n return new Promise((resolve, reject) => {\n const geocoder = new this.AMap.Geocoder({\n city: '全国',\n extensions: 'all'\n });\n geocoder.getAddress([longitude, latitude], (status, result) => {\n if (status === 'complete' && result.info === 'OK') {\n const {\n formattedAddress,\n pois\n } = result.regeocode;\n const {\n district,\n township\n } = result.regeocode.addressComponent;\n const division = township && formattedAddress.includes(township) ? formattedAddress.indexOf(township) + township.length : formattedAddress.indexOf(district) + district.length;\n const addressMsg = {\n address: formattedAddress.slice(0, division) + (pois[0]?.address || ''),\n addressInfo: result.regeocode.addressComponent\n };\n callBack?.(addressMsg);\n resolve(addressMsg);\n } else {\n reject(new Error('转换失败'));\n }\n });\n });\n }\n\n /** 根据地址搜索地图poi点及其他信息 */\n /**\r\n * \r\n * @param {*} keywords 根据关键字搜索\r\n * @param {*} callBack 查询成功后过滤信息及转换格式 传递回调函数 兼容老版本代码\r\n */\n getMapSearch(keywords, callBack) {\n return new Promise(resolve => {\n const placeSearch = new this.AMap.PlaceSearch();\n placeSearch.search(keywords, (status, searchList) => {\n const options = searchList?.poiList?.pois?.map(node => ({\n ...node,\n label: `${node.name}(${node.address})`\n })) || [];\n callBack?.(options);\n resolve(options);\n });\n });\n }\n\n /** 道路规划 */\n /**\r\n * \r\n * @param {*} AMapInit 当前地图实例\r\n * @param {*} paths 需查询的路径起始点及途径点集合\r\n * @param {*} roadOptions 路线规划的其他参数\r\n * { paths: 需查询的路径起始点及途径点集合, options: 为查询路线配置项 }\r\n * @param {*} callBack 查询成功后回调函数 兼容老版本代码\r\n */\n async setMapDriving(mapInstance, roadOptions, callBack) {\n const {\n paths,\n options = {}\n } = roadOptions;\n return new Promise(resolve => {\n mapInstance.plugin(\"AMap.Driving\", () => {\n const driving = new this.AMap.Driving({\n map: mapInstance,\n ...options\n });\n driving.search(this.setLngLat(paths[0]), this.setLngLat(paths[paths.length - 1]), {\n waypoints: paths.slice(1, -1).map(path => this.setLngLat(path))\n }, (status, {\n routes\n }) => status === 'complete' && (callBack?.(roadDriving, routes), resolve({\n driving,\n routes\n })));\n });\n });\n }\n\n // 其他方法保持类似改造...\n}\n\n// 获取AMap实例(组件内使用)\nconst getAMapInstance = async (options = {}) => {\n if (AMapInstance) return AMapInstance;\n\n // 确保key存在\n if (!AMapKey) {\n try {\n setAMapSecurity();\n } catch (e) {\n throw new Error('请先设置地图Key!');\n }\n }\n try {\n const AMap = await _amap_amap_jsapi_loader__WEBPACK_IMPORTED_MODULE_4___default().load({\n key: AMapKey,\n version: '2.0',\n plugins: ['AMap.Geocoder', 'AMap.PlaceSearch',\n // 搜索\n 'AMap.MouseTool',\n // 鼠标\n 'AMap.ControlBar',\n // 方向盘\n 'AMap.ToolBar',\n // 缩放\n ...(options.plugins || [])]\n });\n AMapInstance = new AMapService(AMap);\n return AMapInstance;\n } catch (e) {\n throw new Error(`高德地图加载失败: ${e.message}`);\n }\n};\n\n// 在 Vue 插件中封装高德地图的初始化和常用方法 \n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n async install(Vue, options = {}) {\n const amap = await getAMapInstance(options);\n const {\n AMap,\n methods,\n layers\n } = amap;\n Vue.prototype.$amap = AMap;\n\n /** 初始化地图 */\n Vue.prototype.$initAMap = (mapOptions, callBack) => {\n const amapInit = amap.initMap(mapOptions.el, mapOptions.options || {});\n /** 兼容之前版本代码 */\n callBack?.(amapInit);\n return amapInit;\n };\n\n /** 地图加载完成 */\n Vue.prototype.$amapBus.$emit('onAMapMounted');\n\n /** 常用覆盖物 */\n Vue.prototype.$amapLayers = {\n ...layers,\n setInfoWindow: layers.setInfoWindow(Vue)\n };\n\n /** 抛出地图常用方法 */\n Vue.prototype.$amapMethods = methods || {};\n }\n});\n\n/** \r\n * 安全获取覆盖物坐标信息 \r\n * @param {AMap.Overlay} overlay 地图覆盖物实例\r\n * @returns {Array<Array<number>>} 坐标点数组\r\n */\nfunction getOverlayPos(overlay) {\n if (!overlay) throw new Error('覆盖物实例不存在');\n try {\n return overlay.type === 'AMap.Marker' ? [overlay.getPosition().lng, overlay.getPosition().lat] : overlay.getPath().map(({\n lng,\n lat\n }) => [lng, lat]);\n } catch (e) {\n console.error('转换失败', e);\n return [];\n }\n}\n\n/**\r\n * 轨迹动画执行器\r\n * @param {AMap.Map} AMapInit 地图实例\r\n * @param {AMap.Marker} animationMarker 动画标记物\r\n * @param {Array<Array<number>>} paths 路径坐标数组\r\n * @param {Object} [options] 动画配置\r\n * @param {Function} [callBack] 动画完成回调\r\n */\nfunction drawMapAnimation(AMapInit, animationMarker, paths, options = {}, callBack) {\n if (!AMapInit || !animationMarker || !paths?.length) {\n return console.error('缺少参数信息');\n }\n AMapInit.plugin('AMap.MoveAnimation', () => {\n const defaultOptions = {\n duration: 500,\n autoRotation: true,\n ...options\n };\n animationMarker.moveAlong(paths, defaultOptions);\n callBack?.(animationMarker);\n });\n}\n\n/**\r\n * 转换导航路线为可绘制路径\r\n * @param {AMap.DrivingRoute} route 导航路线对象\r\n * @returns {{\r\n* path: Array<Array<number>>,\r\n* approachPoints: Array<number>\r\n* }}\r\n*/\nfunction parseRouteToPath(route) {\n if (!route?.steps) return {\n path: [],\n approachPoints: []\n };\n const result = {\n path: [],\n approachPoints: []\n };\n route.steps.forEach((step, stepIndex) => {\n step.path.forEach((point, pointIndex) => {\n result.path.push([point.lng, point.lat]);\n if (step.assistant_action === \"到达途经地\" && pointIndex === step.path.length - 1) {\n result.approachPoints.push(result.path.length - 1);\n }\n });\n });\n return result;\n}\n\n//# sourceURL=webpack://mui/./plugins/method/AMap.js?");
|
|
9037
9037
|
|
|
9038
9038
|
/***/ }),
|
|
9039
9039
|
|
package/lib/amap/AmapDraw.jsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import AmapSearch from './components/AmapSearch/index.jsx'
|
|
2
2
|
import PropTypes from 'ant-design-vue/es/_util/vue-types'
|
|
3
|
-
import
|
|
3
|
+
import { getAMapInstance } from '../../method/AMap.js'
|
|
4
4
|
|
|
5
5
|
import './AmapDraw.less'
|
|
6
6
|
|
|
@@ -37,6 +37,8 @@ const AmapDraw = {
|
|
|
37
37
|
data() {
|
|
38
38
|
return {
|
|
39
39
|
amap: null,
|
|
40
|
+
/** 地图存储商店 */
|
|
41
|
+
amapStore: null,
|
|
40
42
|
drawArea: null,
|
|
41
43
|
drawLayers: null,
|
|
42
44
|
drawMouseTool: null,
|
|
@@ -80,14 +82,13 @@ const AmapDraw = {
|
|
|
80
82
|
newValue && this.setDrawLimitArea()
|
|
81
83
|
}
|
|
82
84
|
},
|
|
83
|
-
mounted() {
|
|
84
|
-
this
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
})
|
|
85
|
+
async mounted() {
|
|
86
|
+
this.amapStore = await getAMapInstance()
|
|
87
|
+
this.amap = this.amapStore.initMap(this.drawEl)
|
|
88
|
+
this.buttonProps = [].concat(this.drawButtonProps)
|
|
89
|
+
this.echoDrawLayers(this.drawType)
|
|
90
|
+
/** 如果有限制区域,则描绘在地图上 */
|
|
91
|
+
this.drawLimitArea && this.setDrawLimitArea()
|
|
91
92
|
},
|
|
92
93
|
destroyed() {
|
|
93
94
|
this.AmapDrawClear()
|
|
@@ -96,7 +97,7 @@ const AmapDraw = {
|
|
|
96
97
|
/** 绘制 */
|
|
97
98
|
AmapDraw() {
|
|
98
99
|
this.buttonProps = [].concat(this.saveButtonProps)
|
|
99
|
-
this.drawMouseTool = new this
|
|
100
|
+
this.drawMouseTool = new this.amapStore.AMap.MouseTool(this.amap)
|
|
100
101
|
|
|
101
102
|
this.AmapDrawClear()
|
|
102
103
|
this.setDrawLayers(this.drawType)
|
|
@@ -160,7 +161,7 @@ const AmapDraw = {
|
|
|
160
161
|
},
|
|
161
162
|
/** 绘制地图区域范围 */
|
|
162
163
|
setMapArea(jurisdictionRange) {
|
|
163
|
-
this.drawArea = new this
|
|
164
|
+
this.drawArea = new this.amapStore.AMap.Polygon({
|
|
164
165
|
map: this.amap,
|
|
165
166
|
path: jurisdictionRange,
|
|
166
167
|
extData: 'Area',
|
|
@@ -183,7 +184,7 @@ const AmapDraw = {
|
|
|
183
184
|
} catch {
|
|
184
185
|
position = point
|
|
185
186
|
}
|
|
186
|
-
return this
|
|
187
|
+
return this.amapStore.AMap.GeometryUtil.isPointInRing(position, this.drawArea.getPath())
|
|
187
188
|
},
|
|
188
189
|
/** 判断地图上所覆盖物是否在限制范围内 */
|
|
189
190
|
judgeOverlays() {
|
|
@@ -221,7 +222,7 @@ const AmapDraw = {
|
|
|
221
222
|
drawType == 'point'
|
|
222
223
|
? {
|
|
223
224
|
anchor: 'bottom-center',
|
|
224
|
-
icon: await this
|
|
225
|
+
icon: await this.amapStore.setIcon(this.drawIcon)
|
|
225
226
|
}
|
|
226
227
|
: { strokeWeight: 8 }
|
|
227
228
|
|
|
@@ -235,7 +236,7 @@ const AmapDraw = {
|
|
|
235
236
|
if (drawType == 'point') {
|
|
236
237
|
const { lng, lat } = this.drawLayers.getPosition()
|
|
237
238
|
const position = { longitude: lng, latitude: lat }
|
|
238
|
-
this
|
|
239
|
+
this.amapStore.getMapAddress(position, address => {
|
|
239
240
|
this.drawLayersInfo = {
|
|
240
241
|
...position,
|
|
241
242
|
...address
|
|
@@ -249,7 +250,7 @@ const AmapDraw = {
|
|
|
249
250
|
/** 回显不同类型图层 */
|
|
250
251
|
echoDrawLayers(drawType) {
|
|
251
252
|
/** 如若没挂载layers属性则退出 */
|
|
252
|
-
if (!this
|
|
253
|
+
if (!this.amapStore || !this.amap) return
|
|
253
254
|
|
|
254
255
|
const drawLayersItem = async (drawItem, type, i = 0) => {
|
|
255
256
|
if (drawItem?.latitude && drawItem?.longitude) {
|
|
@@ -261,7 +262,7 @@ const AmapDraw = {
|
|
|
261
262
|
}
|
|
262
263
|
|
|
263
264
|
if (type == 'point') {
|
|
264
|
-
layersItem = await this
|
|
265
|
+
layersItem = await this.amapStore.setMarker(this.drawIcon, {
|
|
265
266
|
position: [longitude, latitude],
|
|
266
267
|
...setOptions
|
|
267
268
|
})
|
|
@@ -271,7 +272,8 @@ const AmapDraw = {
|
|
|
271
272
|
strokeWeight: 8,
|
|
272
273
|
...setOptions
|
|
273
274
|
}
|
|
274
|
-
layersItem =
|
|
275
|
+
layersItem =
|
|
276
|
+
type == 'line' ? new this.amapStore.AMap.Polyline(options) : new this.amapStore.AMap.Polygon(options)
|
|
275
277
|
}
|
|
276
278
|
|
|
277
279
|
layersItem.setMap(this.amap)
|
|
@@ -314,7 +316,6 @@ const AmapDraw = {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
AmapDraw.install = function (Vue) {
|
|
317
|
-
Vue.use(AMap)
|
|
318
319
|
Vue.component('AmapDraw', AmapDraw)
|
|
319
320
|
}
|
|
320
321
|
|
|
@@ -1,84 +1,73 @@
|
|
|
1
1
|
import PropTypes from 'ant-design-vue/es/_util/vue-types'
|
|
2
|
-
import {FormComp, Button} from '../../../index'
|
|
3
|
-
import
|
|
2
|
+
import { FormComp, Button } from '../../../index'
|
|
3
|
+
import { getAMapInstance } from '../../../../method/AMap.js'
|
|
4
4
|
|
|
5
5
|
import './index.less'
|
|
6
6
|
|
|
7
7
|
const { ASelectCustom } = FormComp
|
|
8
8
|
|
|
9
9
|
export const AmapSearchProps = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/** 搜索后绘制图标 */
|
|
11
|
+
drawIcon: PropTypes.any,
|
|
12
|
+
buttonProps: PropTypes.array.def([])
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const AmapSearch = {
|
|
16
16
|
name: 'AmapSearch',
|
|
17
17
|
props: AmapSearchProps,
|
|
18
|
-
data
|
|
18
|
+
data() {
|
|
19
19
|
return {
|
|
20
|
+
/** 地图存储商店 */
|
|
21
|
+
amapStore: null,
|
|
20
22
|
searchMarker: null,
|
|
21
|
-
addressValue: undefined,
|
|
23
|
+
addressValue: undefined,
|
|
22
24
|
selectOptions: []
|
|
23
25
|
}
|
|
24
26
|
},
|
|
27
|
+
async mounted() {
|
|
28
|
+
this.amapStore = await getAMapInstance()
|
|
29
|
+
},
|
|
25
30
|
methods: {
|
|
26
31
|
/** 选择地址 */
|
|
27
32
|
async changeHandle() {
|
|
28
|
-
if(!this.addressValue) return (
|
|
29
|
-
|
|
30
|
-
this.searchMarker = null
|
|
31
|
-
)
|
|
32
|
-
const {label,location} =
|
|
33
|
-
this.selectOptions.find(({id}) => id == this.addressValue)
|
|
33
|
+
if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), (this.searchMarker = null)
|
|
34
|
+
const { label, location } = this.selectOptions.find(({ id }) => id == this.addressValue)
|
|
34
35
|
const searchInfo = {
|
|
35
36
|
longitude: location.lng,
|
|
36
37
|
latitude: location.lat,
|
|
37
38
|
address: label
|
|
38
39
|
}
|
|
39
|
-
this.searchMarker = await this
|
|
40
|
-
this.drawIcon,
|
|
41
|
-
{ position: [location.lng, location.lat] }
|
|
42
|
-
)
|
|
40
|
+
this.searchMarker = await this.amapStore.setMarker(this.drawIcon, { position: [location.lng, location.lat] })
|
|
43
41
|
this.$emit('searchChoose', this.searchMarker, searchInfo)
|
|
44
42
|
},
|
|
45
43
|
/** 根据搜索框搜索地址 */
|
|
46
44
|
searchHandle(keyword) {
|
|
47
|
-
this
|
|
45
|
+
this.amapStore.getMapSearch(keyword, addressOptions => {
|
|
48
46
|
this.selectOptions = addressOptions
|
|
49
|
-
})
|
|
47
|
+
})
|
|
50
48
|
}
|
|
51
49
|
},
|
|
52
|
-
render
|
|
53
|
-
|
|
50
|
+
render(h) {
|
|
54
51
|
const { selectOptions, changeHandle, searchHandle, buttonProps } = this
|
|
55
52
|
|
|
56
53
|
const props = {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
valueKey: 'id',
|
|
55
|
+
labelKey: 'label',
|
|
56
|
+
options: selectOptions,
|
|
57
|
+
placeholder: '请输入目的地进行搜索'
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
return (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
buttonProps &&
|
|
71
|
-
<Button buttonProps={buttonProps} class="AmapDraw__Search__Button" />
|
|
72
|
-
}
|
|
73
|
-
</div>
|
|
74
|
-
)
|
|
61
|
+
<div class="AmapDraw__Search">
|
|
62
|
+
<ASelectCustom v-model={this.addressValue} {...{ props, on: { change: changeHandle, search: searchHandle } }} />
|
|
63
|
+
{buttonProps && <Button buttonProps={buttonProps} class="AmapDraw__Search__Button" />}
|
|
64
|
+
</div>
|
|
65
|
+
)
|
|
75
66
|
}
|
|
76
67
|
}
|
|
77
68
|
|
|
78
69
|
AmapSearch.install = function (Vue) {
|
|
79
|
-
Vue.use(AMap)
|
|
80
70
|
Vue.component('AmapSearch', AmapSearch)
|
|
81
|
-
}
|
|
71
|
+
}
|
|
82
72
|
|
|
83
73
|
export default AmapSearch
|
|
84
|
-
|
package/method/AMap.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// amap-plugin.js
|
|
2
2
|
import AMapLoader from '@amap/amap-jsapi-loader'
|
|
3
3
|
|
|
4
|
+
/** 入口文件不同 作用域不同 */
|
|
4
5
|
let AMapKey = null
|
|
5
6
|
let AMapStyle = null
|
|
6
7
|
let AMapInstance = null
|
|
@@ -225,6 +226,15 @@ class AMapService {
|
|
|
225
226
|
export const getAMapInstance = async (options = {}) => {
|
|
226
227
|
if (AMapInstance) return AMapInstance
|
|
227
228
|
|
|
229
|
+
// 确保key存在
|
|
230
|
+
if (!AMapKey) {
|
|
231
|
+
try {
|
|
232
|
+
setAMapSecurity()
|
|
233
|
+
} catch (e) {
|
|
234
|
+
throw new Error('请先设置地图Key!')
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
228
238
|
try {
|
|
229
239
|
const AMap = await AMapLoader.load({
|
|
230
240
|
key: AMapKey,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import AmapSearch from './components/AmapSearch/index.jsx'
|
|
2
2
|
import PropTypes from 'ant-design-vue/es/_util/vue-types'
|
|
3
|
-
import
|
|
3
|
+
import { getAMapInstance } from '../../method/AMap.js'
|
|
4
4
|
|
|
5
5
|
import './AmapDraw.less'
|
|
6
6
|
|
|
@@ -37,6 +37,8 @@ const AmapDraw = {
|
|
|
37
37
|
data() {
|
|
38
38
|
return {
|
|
39
39
|
amap: null,
|
|
40
|
+
/** 地图存储商店 */
|
|
41
|
+
amapStore: null,
|
|
40
42
|
drawArea: null,
|
|
41
43
|
drawLayers: null,
|
|
42
44
|
drawMouseTool: null,
|
|
@@ -80,14 +82,13 @@ const AmapDraw = {
|
|
|
80
82
|
newValue && this.setDrawLimitArea()
|
|
81
83
|
}
|
|
82
84
|
},
|
|
83
|
-
mounted() {
|
|
84
|
-
this
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
})
|
|
85
|
+
async mounted() {
|
|
86
|
+
this.amapStore = await getAMapInstance()
|
|
87
|
+
this.amap = this.amapStore.initMap(this.drawEl)
|
|
88
|
+
this.buttonProps = [].concat(this.drawButtonProps)
|
|
89
|
+
this.echoDrawLayers(this.drawType)
|
|
90
|
+
/** 如果有限制区域,则描绘在地图上 */
|
|
91
|
+
this.drawLimitArea && this.setDrawLimitArea()
|
|
91
92
|
},
|
|
92
93
|
destroyed() {
|
|
93
94
|
this.AmapDrawClear()
|
|
@@ -96,7 +97,7 @@ const AmapDraw = {
|
|
|
96
97
|
/** 绘制 */
|
|
97
98
|
AmapDraw() {
|
|
98
99
|
this.buttonProps = [].concat(this.saveButtonProps)
|
|
99
|
-
this.drawMouseTool = new this
|
|
100
|
+
this.drawMouseTool = new this.amapStore.AMap.MouseTool(this.amap)
|
|
100
101
|
|
|
101
102
|
this.AmapDrawClear()
|
|
102
103
|
this.setDrawLayers(this.drawType)
|
|
@@ -160,7 +161,7 @@ const AmapDraw = {
|
|
|
160
161
|
},
|
|
161
162
|
/** 绘制地图区域范围 */
|
|
162
163
|
setMapArea(jurisdictionRange) {
|
|
163
|
-
this.drawArea = new this
|
|
164
|
+
this.drawArea = new this.amapStore.AMap.Polygon({
|
|
164
165
|
map: this.amap,
|
|
165
166
|
path: jurisdictionRange,
|
|
166
167
|
extData: 'Area',
|
|
@@ -183,7 +184,7 @@ const AmapDraw = {
|
|
|
183
184
|
} catch {
|
|
184
185
|
position = point
|
|
185
186
|
}
|
|
186
|
-
return this
|
|
187
|
+
return this.amapStore.AMap.GeometryUtil.isPointInRing(position, this.drawArea.getPath())
|
|
187
188
|
},
|
|
188
189
|
/** 判断地图上所覆盖物是否在限制范围内 */
|
|
189
190
|
judgeOverlays() {
|
|
@@ -221,7 +222,7 @@ const AmapDraw = {
|
|
|
221
222
|
drawType == 'point'
|
|
222
223
|
? {
|
|
223
224
|
anchor: 'bottom-center',
|
|
224
|
-
icon: await this
|
|
225
|
+
icon: await this.amapStore.setIcon(this.drawIcon)
|
|
225
226
|
}
|
|
226
227
|
: { strokeWeight: 8 }
|
|
227
228
|
|
|
@@ -235,7 +236,7 @@ const AmapDraw = {
|
|
|
235
236
|
if (drawType == 'point') {
|
|
236
237
|
const { lng, lat } = this.drawLayers.getPosition()
|
|
237
238
|
const position = { longitude: lng, latitude: lat }
|
|
238
|
-
this
|
|
239
|
+
this.amapStore.getMapAddress(position, address => {
|
|
239
240
|
this.drawLayersInfo = {
|
|
240
241
|
...position,
|
|
241
242
|
...address
|
|
@@ -249,7 +250,7 @@ const AmapDraw = {
|
|
|
249
250
|
/** 回显不同类型图层 */
|
|
250
251
|
echoDrawLayers(drawType) {
|
|
251
252
|
/** 如若没挂载layers属性则退出 */
|
|
252
|
-
if (!this
|
|
253
|
+
if (!this.amapStore || !this.amap) return
|
|
253
254
|
|
|
254
255
|
const drawLayersItem = async (drawItem, type, i = 0) => {
|
|
255
256
|
if (drawItem?.latitude && drawItem?.longitude) {
|
|
@@ -261,7 +262,7 @@ const AmapDraw = {
|
|
|
261
262
|
}
|
|
262
263
|
|
|
263
264
|
if (type == 'point') {
|
|
264
|
-
layersItem = await this
|
|
265
|
+
layersItem = await this.amapStore.setMarker(this.drawIcon, {
|
|
265
266
|
position: [longitude, latitude],
|
|
266
267
|
...setOptions
|
|
267
268
|
})
|
|
@@ -271,7 +272,8 @@ const AmapDraw = {
|
|
|
271
272
|
strokeWeight: 8,
|
|
272
273
|
...setOptions
|
|
273
274
|
}
|
|
274
|
-
layersItem =
|
|
275
|
+
layersItem =
|
|
276
|
+
type == 'line' ? new this.amapStore.AMap.Polyline(options) : new this.amapStore.AMap.Polygon(options)
|
|
275
277
|
}
|
|
276
278
|
|
|
277
279
|
layersItem.setMap(this.amap)
|
|
@@ -314,7 +316,6 @@ const AmapDraw = {
|
|
|
314
316
|
}
|
|
315
317
|
|
|
316
318
|
AmapDraw.install = function (Vue) {
|
|
317
|
-
Vue.use(AMap)
|
|
318
319
|
Vue.component('AmapDraw', AmapDraw)
|
|
319
320
|
}
|
|
320
321
|
|
|
@@ -1,84 +1,73 @@
|
|
|
1
1
|
import PropTypes from 'ant-design-vue/es/_util/vue-types'
|
|
2
|
-
import {FormComp, Button} from '../../../index'
|
|
3
|
-
import
|
|
2
|
+
import { FormComp, Button } from '../../../index'
|
|
3
|
+
import { getAMapInstance } from '../../../../method/AMap.js'
|
|
4
4
|
|
|
5
5
|
import './index.less'
|
|
6
6
|
|
|
7
7
|
const { ASelectCustom } = FormComp
|
|
8
8
|
|
|
9
9
|
export const AmapSearchProps = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
/** 搜索后绘制图标 */
|
|
11
|
+
drawIcon: PropTypes.any,
|
|
12
|
+
buttonProps: PropTypes.array.def([])
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
const AmapSearch = {
|
|
16
16
|
name: 'AmapSearch',
|
|
17
17
|
props: AmapSearchProps,
|
|
18
|
-
data
|
|
18
|
+
data() {
|
|
19
19
|
return {
|
|
20
|
+
/** 地图存储商店 */
|
|
21
|
+
amapStore: null,
|
|
20
22
|
searchMarker: null,
|
|
21
|
-
addressValue: undefined,
|
|
23
|
+
addressValue: undefined,
|
|
22
24
|
selectOptions: []
|
|
23
25
|
}
|
|
24
26
|
},
|
|
27
|
+
async mounted() {
|
|
28
|
+
this.amapStore = await getAMapInstance()
|
|
29
|
+
},
|
|
25
30
|
methods: {
|
|
26
31
|
/** 选择地址 */
|
|
27
32
|
async changeHandle() {
|
|
28
|
-
if(!this.addressValue) return (
|
|
29
|
-
|
|
30
|
-
this.searchMarker = null
|
|
31
|
-
)
|
|
32
|
-
const {label,location} =
|
|
33
|
-
this.selectOptions.find(({id}) => id == this.addressValue)
|
|
33
|
+
if (!this.addressValue) return this.$emit('searchReset', this.searchMarker), (this.searchMarker = null)
|
|
34
|
+
const { label, location } = this.selectOptions.find(({ id }) => id == this.addressValue)
|
|
34
35
|
const searchInfo = {
|
|
35
36
|
longitude: location.lng,
|
|
36
37
|
latitude: location.lat,
|
|
37
38
|
address: label
|
|
38
39
|
}
|
|
39
|
-
this.searchMarker = await this
|
|
40
|
-
this.drawIcon,
|
|
41
|
-
{ position: [location.lng, location.lat] }
|
|
42
|
-
)
|
|
40
|
+
this.searchMarker = await this.amapStore.setMarker(this.drawIcon, { position: [location.lng, location.lat] })
|
|
43
41
|
this.$emit('searchChoose', this.searchMarker, searchInfo)
|
|
44
42
|
},
|
|
45
43
|
/** 根据搜索框搜索地址 */
|
|
46
44
|
searchHandle(keyword) {
|
|
47
|
-
this
|
|
45
|
+
this.amapStore.getMapSearch(keyword, addressOptions => {
|
|
48
46
|
this.selectOptions = addressOptions
|
|
49
|
-
})
|
|
47
|
+
})
|
|
50
48
|
}
|
|
51
49
|
},
|
|
52
|
-
render
|
|
53
|
-
|
|
50
|
+
render(h) {
|
|
54
51
|
const { selectOptions, changeHandle, searchHandle, buttonProps } = this
|
|
55
52
|
|
|
56
53
|
const props = {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
54
|
+
valueKey: 'id',
|
|
55
|
+
labelKey: 'label',
|
|
56
|
+
options: selectOptions,
|
|
57
|
+
placeholder: '请输入目的地进行搜索'
|
|
61
58
|
}
|
|
62
59
|
|
|
63
60
|
return (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
{
|
|
70
|
-
buttonProps &&
|
|
71
|
-
<Button buttonProps={buttonProps} class="AmapDraw__Search__Button" />
|
|
72
|
-
}
|
|
73
|
-
</div>
|
|
74
|
-
)
|
|
61
|
+
<div class="AmapDraw__Search">
|
|
62
|
+
<ASelectCustom v-model={this.addressValue} {...{ props, on: { change: changeHandle, search: searchHandle } }} />
|
|
63
|
+
{buttonProps && <Button buttonProps={buttonProps} class="AmapDraw__Search__Button" />}
|
|
64
|
+
</div>
|
|
65
|
+
)
|
|
75
66
|
}
|
|
76
67
|
}
|
|
77
68
|
|
|
78
69
|
AmapSearch.install = function (Vue) {
|
|
79
|
-
Vue.use(AMap)
|
|
80
70
|
Vue.component('AmapSearch', AmapSearch)
|
|
81
|
-
}
|
|
71
|
+
}
|
|
82
72
|
|
|
83
73
|
export default AmapSearch
|
|
84
|
-
|
package/plugins/method/AMap.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// amap-plugin.js
|
|
2
2
|
import AMapLoader from '@amap/amap-jsapi-loader'
|
|
3
3
|
|
|
4
|
+
/** 入口文件不同 作用域不同 */
|
|
4
5
|
let AMapKey = null
|
|
5
6
|
let AMapStyle = null
|
|
6
7
|
let AMapInstance = null
|
|
@@ -225,6 +226,15 @@ class AMapService {
|
|
|
225
226
|
export const getAMapInstance = async (options = {}) => {
|
|
226
227
|
if (AMapInstance) return AMapInstance
|
|
227
228
|
|
|
229
|
+
// 确保key存在
|
|
230
|
+
if (!AMapKey) {
|
|
231
|
+
try {
|
|
232
|
+
setAMapSecurity()
|
|
233
|
+
} catch (e) {
|
|
234
|
+
throw new Error('请先设置地图Key!')
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
228
238
|
try {
|
|
229
239
|
const AMap = await AMapLoader.load({
|
|
230
240
|
key: AMapKey,
|