UNPKG

@zpc_npm/vue-iclient-common

Version:

KQGIS iClient for Vue.js

422 lines (353 loc) 14.2 kB
/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ // The require scope /******/ var __webpack_require__ = {}; /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // EXPORTS __webpack_require__.d(__webpack_exports__, { "LegendViewModel": function() { return /* reexport */ LegendViewModel; }, "default": function() { return /* reexport */ Legend; } }); ;// CONCATENATED MODULE: external "vue" var external_vue_namespaceObject = require("vue"); ;// CONCATENATED MODULE: external "xe-utils" var external_xe_utils_namespaceObject = require("xe-utils"); var external_xe_utils_default = /*#__PURE__*/__webpack_require__.n(external_xe_utils_namespaceObject); ;// CONCATENATED MODULE: external "@zpc_npm/vue-iclient-common/_utils/util" var util_namespaceObject = require("@zpc_npm/vue-iclient-common/_utils/util"); ;// CONCATENATED MODULE: external "@zpc_npm/vue-iclient-common/_utils/mitt" var mitt_namespaceObject = require("@zpc_npm/vue-iclient-common/_utils/mitt"); var mitt_default = /*#__PURE__*/__webpack_require__.n(mitt_namespaceObject); ;// CONCATENATED MODULE: external "@zpc_npm/vue-iclient-common/_utils/gis-utils" var gis_utils_namespaceObject = require("@zpc_npm/vue-iclient-common/_utils/gis-utils"); ;// CONCATENATED MODULE: ./src/common/legend/LegendViewModel.js /* * Author: Codqd * Date: 2022-11-29 * LastEditors: Codqd * LastEditTime: 2023-01-10 * Description: 图例组件逻辑类 */ /** * UI显隐操作时注意同时调用数据设置与清空方法,控制监听事件的添加与删除 */ class LegendViewModel extends (mitt_default()) { /** * @param {Object} options - 参数 * @param {string} [options.mapTarget] - 组件绑定的map的id */ constructor(options) { super(); /** * 组件绑定的map的id * @type {string} */ this.mapTarget = options.mapTarget; // 事件绑定this this._resetListData = this._resetListData.bind(this); this._changeMap = this._changeMap.bind(this); } /** * 注册事件,监听mapview数据变化,监听map切换。 * @private */ _registerEvents() { // 添加图层数据源变化监听 gis_utils_namespaceObject.mapViewUtils.bindViewEvents("resetLayerDatas", this._resetListData, this.mapTarget); // 切换监听事件 指定mapTarget时 不需要监听 if (!(this.mapTarget && this.mapTarget !== "")) { gis_utils_namespaceObject.utils.bindChangeMapEvents(this._changeMap); } } /** * 地图切换监听事件的回调函数,比如二三维切换。 * @param {object} e * @private */ _changeMap(e) { // 为了防止两个监听同时存在 出现数据出错 const preMapTarget = e.preMapTarget; // 地图切换时 移除切换前地图的数据监听事件 gis_utils_namespaceObject.mapViewUtils.offViewEvents("resetLayerDatas", this._resetListData, preMapTarget); // 地图切换时 添加切换手地图的数据监听事件 不传maptarget 获取当前地图的maptarget gis_utils_namespaceObject.mapViewUtils.bindViewEvents("resetLayerDatas", this._resetListData); // 重新获取、设置数据 this._setLegendList(); } /** * 移除事件监听 * @private */ _removeEvents() { // 删除所有事件监听 gis_utils_namespaceObject.mapViewUtils.offViewEvents("resetLayerDatas", this._resetListData, this.mapTarget); if (!(this.mapTarget && this.mapTarget !== "")) { gis_utils_namespaceObject.utils.offChangeMapEvents(this._changeMap); } } /** * 添加监听,数据设置为当前地图所有可见图层图例 */ init() { this._setLegendList(); this._registerEvents(); } /** * mapview数据变化监听事件的回调函数 * @param e {object} * @private */ _resetListData(e) { // 如果图层变化事件是自己触发的 则不继续执行 避免死循环 if (e.eventTarget && e.eventTarget === this) { return; } this._setLegendList(); } /** * 数据设置为当前地图所有可见图层的图例 * @private */ _setLegendList() { let maplayers = gis_utils_namespaceObject.mapLayerUtils.getLayerCheckedList(this.mapTarget); // 组件初始化在地图加载前完成时,将获取不到数据,于是需要监听mounted事件重新触发设置数据的方法 if (!maplayers) { // mapview初始化结束监听 如果view已经存在了,mounted事件不会添加监听 gis_utils_namespaceObject.mapViewUtils.bindViewOnceEvents("mounted", this._resetListData, this.mapTarget); return; } if (maplayers.length === 0) { this.fire("setData", { legends: [] }); return; } // 按地图服务分类 let groupLayers = external_xe_utils_default().groupBy(maplayers, "url"); // 一个地图服务调一次图例方法 const promiseAll = []; for (let url of Object.keys(groupLayers)) { let params = new KqGIS.Map.GetLegendParams({ layerIds: groupLayers[url].map(val => { return val.id; }), width: 24, height: 16, ua_token: groupLayers[url][0].accessToken }); promiseAll.push(new Promise((resolve, reject) => { let getLegendService = new KqGIS.Map.GetLegendService(url, { eventListeners: { processCompleted: resolve, processFailed: reject } }); getLegendService.processAsync(params); })); } // 批量发送请求 Promise.all(promiseAll).then(response => { // 拍平返回的多维数组图例数据 let legend = response.map(item => { return item.result.result; }); legend = external_xe_utils_default().flatten(legend); // 重新组织数据结构 let list = legend.map(layer => { let obj = {}; obj.layerName = external_xe_utils_default().find(maplayers, item => item.id == layer.layerId).name; obj.legendList = layer.items.map(legend => { return { legendName: legend.legendName, src: `data:${layer.contentType};base64,${legend.data}` }; }); return obj; }); this.fire("setData", { legends: list }); }); } /** * 清除图例 */ clearLegendList() { this.fire("setData", { legends: [] }); } /** * 组件销毁时,执行的函数,删除事件监听 */ destroy() { this.off(); this._removeEvents(); } } ;// CONCATENATED MODULE: ./node_modules/babel-loader/lib/index.js!./node_modules/vue-loader/dist/index.js??ruleSet[0]!./src/common/legend/Legend.vue?vue&type=script&setup=true&lang=js const _hoisted_1 = { class: "content" }; const _hoisted_2 = { key: 0, class: "legend-item" }; const _hoisted_3 = { class: "legend-title" }; const _hoisted_4 = { class: "legend-panel" }; const _hoisted_5 = ["src"]; // 获取组件传参 // vue3.2声明名称暂时只支持这样写 name在绑定组件的时候使用 const __default__ = { name: "KqLegend" }; /* harmony default export */ var Legendvue_type_script_setup_true_lang_js = (/*#__PURE__*/Object.assign(__default__, { props: { // 每个地图相关组件的必须参数 非必传 指定组件绑定的map对象的div的id mapTarget: String, // 组件显示位置 position: [String, Object], // 是否显示阴影 showShadow: { type: Boolean, default: false } }, setup(__props, { expose }) { const props = __props; // 组件容器 const boxRef = (0,external_vue_namespaceObject.ref)(null); // 数据源 const dataList = (0,external_vue_namespaceObject.reactive)({ data: [] }); // 逻辑类 let viewModel = null; (0,external_vue_namespaceObject.onMounted)(() => { (0,util_namespaceObject.updatePosition)(boxRef.value.$el, props); viewModel = new LegendViewModel({ mapTarget: props.mapTarget }); viewModel.on("setData", _data => { dataList.data = _data.legends; }); viewModel.init(); }); (0,external_vue_namespaceObject.onBeforeUnmount)(() => { viewModel.destroy(); viewModel = null; }); expose({ resetLegend }); /** * 清空图例 */ function resetLegend() { viewModel.clearLegendList(); } return (_ctx, _cache) => { const _component_kq_space = (0,external_vue_namespaceObject.resolveComponent)("kq-space"); const _component_kq_scrollbar = (0,external_vue_namespaceObject.resolveComponent)("kq-scrollbar"); return (0,external_vue_namespaceObject.openBlock)(), (0,external_vue_namespaceObject.createBlock)(_component_kq_scrollbar, { class: (0,external_vue_namespaceObject.normalizeClass)(["legend", __props.showShadow ? 'shadow' : null]), "max-height": "504px", ref_key: "boxRef", ref: boxRef }, { default: (0,external_vue_namespaceObject.withCtx)(() => [(0,external_vue_namespaceObject.createCommentVNode)(" S 图例 "), (0,external_vue_namespaceObject.createElementVNode)("div", _hoisted_1, [dataList.data.length === 0 ? ((0,external_vue_namespaceObject.openBlock)(), (0,external_vue_namespaceObject.createElementBlock)("div", _hoisted_2, "无图例数据")) : ((0,external_vue_namespaceObject.openBlock)(), (0,external_vue_namespaceObject.createElementBlock)(external_vue_namespaceObject.Fragment, { key: 1 }, [(0,external_vue_namespaceObject.createCommentVNode)(" 空值情况 "), ((0,external_vue_namespaceObject.openBlock)(true), (0,external_vue_namespaceObject.createElementBlock)(external_vue_namespaceObject.Fragment, null, (0,external_vue_namespaceObject.renderList)(dataList.data, (item, index) => { return (0,external_vue_namespaceObject.openBlock)(), (0,external_vue_namespaceObject.createElementBlock)("div", { class: "legend-item", key: index }, [(0,external_vue_namespaceObject.createElementVNode)("h4", _hoisted_3, (0,external_vue_namespaceObject.toDisplayString)(item.layerName), 1 /* TEXT */ ), (0,external_vue_namespaceObject.createVNode)(_component_kq_space, { wrap: "" }, { default: (0,external_vue_namespaceObject.withCtx)(() => [((0,external_vue_namespaceObject.openBlock)(true), (0,external_vue_namespaceObject.createElementBlock)(external_vue_namespaceObject.Fragment, null, (0,external_vue_namespaceObject.renderList)(item.legendList, legend => { return (0,external_vue_namespaceObject.openBlock)(), (0,external_vue_namespaceObject.createElementBlock)("div", _hoisted_4, [(0,external_vue_namespaceObject.createElementVNode)("img", { src: legend.src, style: { "padding-right": "8px" } }, null, 8 /* PROPS */ , _hoisted_5), (0,external_vue_namespaceObject.createElementVNode)("label", null, (0,external_vue_namespaceObject.toDisplayString)(legend.legendName), 1 /* TEXT */ )]); }), 256 /* UNKEYED_FRAGMENT */ ))]), _: 2 /* DYNAMIC */ }, 1024 /* DYNAMIC_SLOTS */ )]); }), 128 /* KEYED_FRAGMENT */ ))], 64 /* STABLE_FRAGMENT */ )), (0,external_vue_namespaceObject.createCommentVNode)(" 图例项 ")]), (0,external_vue_namespaceObject.createCommentVNode)(" E 图例 ")]), _: 1 /* STABLE */ }, 8 /* PROPS */ , ["class"]); }; } })); ;// CONCATENATED MODULE: ./src/common/legend/Legend.vue?vue&type=script&setup=true&lang=js ;// CONCATENATED MODULE: ./src/common/legend/Legend.vue const __exports__ = Legendvue_type_script_setup_true_lang_js; /* harmony default export */ var Legend = (__exports__); ;// CONCATENATED MODULE: external "@zpc_npm/vue-iclient-common/init.js" var init_js_namespaceObject = require("@zpc_npm/vue-iclient-common/init.js"); var init_js_default = /*#__PURE__*/__webpack_require__.n(init_js_namespaceObject); ;// CONCATENATED MODULE: ./src/common/legend/index.js Legend.install = (Vue, opts) => { init_js_default()(Vue, opts); Vue.component(Legend.name, Legend); }; module.exports = __webpack_exports__; /******/ })() ;