diff --git a/components/vue-admin-perfect/public/favicon.ico b/components/vue-admin-perfect/public/favicon.ico new file mode 100644 index 0000000..df36fcf Binary files /dev/null and b/components/vue-admin-perfect/public/favicon.ico differ diff --git a/components/vue-admin-perfect/public/index.html b/components/vue-admin-perfect/public/index.html new file mode 100644 index 0000000..3e5a139 --- /dev/null +++ b/components/vue-admin-perfect/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +
+ + + diff --git a/components/vue-admin-perfect/read/1.png b/components/vue-admin-perfect/read/1.png new file mode 100644 index 0000000..c1ebb6d Binary files /dev/null and b/components/vue-admin-perfect/read/1.png differ diff --git a/components/vue-admin-perfect/read/2.png b/components/vue-admin-perfect/read/2.png new file mode 100644 index 0000000..4f1a026 Binary files /dev/null and b/components/vue-admin-perfect/read/2.png differ diff --git a/components/vue-admin-perfect/read/3.png b/components/vue-admin-perfect/read/3.png new file mode 100644 index 0000000..a1ce9e0 Binary files /dev/null and b/components/vue-admin-perfect/read/3.png differ diff --git a/components/vue-admin-perfect/read/4.png b/components/vue-admin-perfect/read/4.png new file mode 100644 index 0000000..2e7fcac Binary files /dev/null and b/components/vue-admin-perfect/read/4.png differ diff --git a/components/vue-admin-perfect/read/5.png b/components/vue-admin-perfect/read/5.png new file mode 100644 index 0000000..cd205ee Binary files /dev/null and b/components/vue-admin-perfect/read/5.png differ diff --git a/components/vue-admin-perfect/read/6.png b/components/vue-admin-perfect/read/6.png new file mode 100644 index 0000000..92f7242 Binary files /dev/null and b/components/vue-admin-perfect/read/6.png differ diff --git a/components/vue-admin-perfect/src/App.vue b/components/vue-admin-perfect/src/App.vue new file mode 100644 index 0000000..d403b7b --- /dev/null +++ b/components/vue-admin-perfect/src/App.vue @@ -0,0 +1,28 @@ + + + diff --git a/components/vue-admin-perfect/src/abandon/demo.vue b/components/vue-admin-perfect/src/abandon/demo.vue new file mode 100644 index 0000000..b4c751f --- /dev/null +++ b/components/vue-admin-perfect/src/abandon/demo.vue @@ -0,0 +1,92 @@ + + + + + + diff --git a/components/vue-admin-perfect/src/abandon/exprotExcel.ts b/components/vue-admin-perfect/src/abandon/exprotExcel.ts new file mode 100644 index 0000000..9a1b974 --- /dev/null +++ b/components/vue-admin-perfect/src/abandon/exprotExcel.ts @@ -0,0 +1,200 @@ +const ExcelJS = require("exceljs"); + +const autoWidthAction = (val,width=10)=>{ + if (val == null) { + width = 10; + } else if (val.toString().charCodeAt(0) > 255) { + /*if chinese*/ + width = val.toString().length * 2; + } else { + width = val.toString().length; + } + return width +} +export const exportExcel = ({column,data,filename,autoWidth})=>{ + // 创建excel + const workbook = new ExcelJS.Workbook(); + // 设置信息 + workbook.creator = "Me"; + workbook.title = filename; + workbook.created = new Date(); + workbook.modified = new Date(); + // 创建工作表 + const worksheet = workbook.addWorksheet(filename); + // 设置列名 + let columnsName = []; + column.forEach((item,index)=>{ + let obj = { + header: item.label, key:item.name, width: null + } + if(autoWidth){ + let maxArr = [autoWidthAction(item.label)] + data.forEach(ite=>{ + let str = ite[item.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + } + // 设置列名、键和宽度 + columnsName.push(obj); + }) + worksheet.columns = columnsName; + // 添加行 + worksheet.addRows(data); + // 写入文件 + workbook.xlsx.writeBuffer().then((data) => { + const blob = new Blob([data, { type: "application/vnd.ms-excel" }]); + if (window.navigator.msSaveOrOpenBlob) { + // msSaveOrOpenBlob方法返回boolean值 + navigator.msSaveBlob(blob, filename + ".xlsx"); + // 本地保存 + } else { + const link = document.createElement("a"); // a标签下载 + link.href = window.URL.createObjectURL(blob); // href属性指定下载链接 + link.download = filename + ".xlsx"; // dowload属性指定文件名 + link.click(); // click()事件触发下载 + window.URL.revokeObjectURL(link.href); // 释放内存 + } + }); +} +// 默认的列宽 +export const DEFAULT_COLUMN_WIDTH = 20; + +function getColumnNumber(width: number) { + // 需要的列数,四舍五入 + return Math.round(width / DEFAULT_COLUMN_WIDTH); +} + + +function addData(worksheet,headerKeys,headers,data){ + +} + +export const exportMultiHeaderExcel = ({column,data,filename,autoWidth})=>{ + // 创建excel + const workbook = new ExcelJS.Workbook(); + // 创建工作表 + const worksheet = workbook.addWorksheet(filename); + + // 第一行表头 + const names1= []; + // 第二行表头 + const names2= []; + + // 用于匹配数据的 keys + const headerKeys= []; + + let headers = []; + column.forEach((item,index)=>{ + let obj = { + header: item.label, key:item.name, width: null + } + let maxArr = [autoWidthAction(item.label)] + data.forEach(ite=>{ + let str = ite[item.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + // 设置列名、键和宽度 + headers.push(obj); + }) + + column.forEach(item => { + if (item.children) { + // 有 children 说明是多级表头,header name 需要两行 + item.children.forEach(child => { + names1.push(item.label); + names2.push(child.label); + headerKeys.push(child.name); + }); + } else { + names1.push(item.label); + names2.push(item.label); + headerKeys.push(item.name); + } + }); + + + + // 判断是否有 children, 有的话是两行表头 + const isMultiHeader = column.some(item => item.children); + if(isMultiHeader){ + const rowHeader1 = worksheet.addRow(names1); + const rowHeader2 = worksheet.addRow(names2); + + console.log('rowHeader1====',names1,names2,rowHeader1,rowHeader2) + mergeColumnCell(headers, rowHeader1, rowHeader2, names1, names2, worksheet) + // return + + } + + data.forEach((item: any) => { + const rowData = headerKeys?.map(key => item[key]); + const row = worksheet.addRow(rowData); + // console.log('row--------',row) + }) + // 写入文件 + workbook.xlsx.writeBuffer().then((data) => { + const blob = new Blob([data, { type: "application/vnd.ms-excel" }]); + if (window.navigator.msSaveOrOpenBlob) { + // msSaveOrOpenBlob方法返回boolean值 + navigator.msSaveBlob(blob, filename + ".xlsx"); + // 本地保存 + } else { + const link = document.createElement("a"); // a标签下载 + link.href = window.URL.createObjectURL(blob); // href属性指定下载链接 + link.download = filename + ".xlsx"; // dowload属性指定文件名 + link.click(); // click()事件触发下载 + window.URL.revokeObjectURL(link.href); // 释放内存 + } + }); +} + + +function mergeColumnCell(headers, rowHeader1, rowHeader2, nameRow1, nameRow2, worksheet){ + // 当前 index 的指针 + let pointer = -1; + nameRow1.forEach((name, index) => { + // 当 index 小于指针时,说明这一列已经被合并过了,不能再合并 + if (index <= pointer) return; + // 是否应该列合并 + const shouldVerticalMerge = name === nameRow2[index]; + + + // 是否应该行合并 + const shouldHorizontalMerge = index !== nameRow1.lastIndexOf(name); + + console.log('==',name,nameRow2[index],index,nameRow1.lastIndexOf(name),shouldVerticalMerge,shouldHorizontalMerge) + + pointer = nameRow1.lastIndexOf(name); + if (shouldVerticalMerge && shouldHorizontalMerge) { + // 两个方向都合并 + worksheet.mergeCells( + Number(rowHeader1.number), + index + 1, + Number(rowHeader2.number), + nameRow1.lastIndexOf(name) + 1, + ); + console.log('==') + } else if (shouldVerticalMerge && !shouldHorizontalMerge) { + // 只在垂直方向上同一列的两行合并 + worksheet.mergeCells(Number(rowHeader1.number), index + 1, Number(rowHeader2.number), index + 1); + } else if (!shouldVerticalMerge && shouldHorizontalMerge) { + // 只有水平方向同一行的多列合并 + worksheet.mergeCells( + Number(rowHeader1.number), + index + 1, + Number(rowHeader1.number), + nameRow1.lastIndexOf(name) + 1, + ); + // eslint-disable-next-line no-param-reassign + const cell = rowHeader1.getCell(index + 1); + cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true }; + } + }); + +} diff --git a/components/vue-admin-perfect/src/assets/2.png b/components/vue-admin-perfect/src/assets/2.png new file mode 100644 index 0000000..e69de29 diff --git a/components/vue-admin-perfect/src/assets/3.png b/components/vue-admin-perfect/src/assets/3.png new file mode 100644 index 0000000..0daef75 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/3.png differ diff --git a/components/vue-admin-perfect/src/assets/face/NO.png b/components/vue-admin-perfect/src/assets/face/NO.png new file mode 100644 index 0000000..de13583 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/NO.png differ diff --git a/components/vue-admin-perfect/src/assets/face/OK.png b/components/vue-admin-perfect/src/assets/face/OK.png new file mode 100644 index 0000000..976248f Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/OK.png differ diff --git a/components/vue-admin-perfect/src/assets/face/emoji-after.png b/components/vue-admin-perfect/src/assets/face/emoji-after.png new file mode 100644 index 0000000..ca2211d Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/emoji-after.png differ diff --git a/components/vue-admin-perfect/src/assets/face/emoji-before.png b/components/vue-admin-perfect/src/assets/face/emoji-before.png new file mode 100644 index 0000000..620b6b5 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/emoji-before.png differ diff --git a/components/vue-admin-perfect/src/assets/face/乒乓.png b/components/vue-admin-perfect/src/assets/face/乒乓.png new file mode 100644 index 0000000..606eefe Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/乒乓.png differ diff --git a/components/vue-admin-perfect/src/assets/face/乱舞.png b/components/vue-admin-perfect/src/assets/face/乱舞.png new file mode 100644 index 0000000..137ba8f Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/乱舞.png differ diff --git a/components/vue-admin-perfect/src/assets/face/亲亲.png b/components/vue-admin-perfect/src/assets/face/亲亲.png new file mode 100644 index 0000000..f09535c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/亲亲.png differ diff --git a/components/vue-admin-perfect/src/assets/face/便便.png b/components/vue-admin-perfect/src/assets/face/便便.png new file mode 100644 index 0000000..6e7ea6b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/便便.png differ diff --git a/components/vue-admin-perfect/src/assets/face/偷笑.png b/components/vue-admin-perfect/src/assets/face/偷笑.png new file mode 100644 index 0000000..e7ede5a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/偷笑.png differ diff --git a/components/vue-admin-perfect/src/assets/face/傲慢.png b/components/vue-admin-perfect/src/assets/face/傲慢.png new file mode 100644 index 0000000..4bf853c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/傲慢.png differ diff --git a/components/vue-admin-perfect/src/assets/face/再见.png b/components/vue-admin-perfect/src/assets/face/再见.png new file mode 100644 index 0000000..33c29ba Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/再见.png differ diff --git a/components/vue-admin-perfect/src/assets/face/冷汗.png b/components/vue-admin-perfect/src/assets/face/冷汗.png new file mode 100644 index 0000000..19fff5a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/冷汗.png differ diff --git a/components/vue-admin-perfect/src/assets/face/凋谢.png b/components/vue-admin-perfect/src/assets/face/凋谢.png new file mode 100644 index 0000000..7aadc6f Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/凋谢.png differ diff --git a/components/vue-admin-perfect/src/assets/face/刀.png b/components/vue-admin-perfect/src/assets/face/刀.png new file mode 100644 index 0000000..44fa579 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/刀.png differ diff --git a/components/vue-admin-perfect/src/assets/face/勾引.png b/components/vue-admin-perfect/src/assets/face/勾引.png new file mode 100644 index 0000000..97ac70d Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/勾引.png differ diff --git a/components/vue-admin-perfect/src/assets/face/发呆.png b/components/vue-admin-perfect/src/assets/face/发呆.png new file mode 100644 index 0000000..b562171 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/发呆.png differ diff --git a/components/vue-admin-perfect/src/assets/face/发怒.png b/components/vue-admin-perfect/src/assets/face/发怒.png new file mode 100644 index 0000000..ea04e8c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/发怒.png differ diff --git a/components/vue-admin-perfect/src/assets/face/发抖.png b/components/vue-admin-perfect/src/assets/face/发抖.png new file mode 100644 index 0000000..f36e3a0 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/发抖.png differ diff --git a/components/vue-admin-perfect/src/assets/face/可怜.png b/components/vue-admin-perfect/src/assets/face/可怜.png new file mode 100644 index 0000000..8b4a094 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/可怜.png differ diff --git a/components/vue-admin-perfect/src/assets/face/右哼哼.png b/components/vue-admin-perfect/src/assets/face/右哼哼.png new file mode 100644 index 0000000..3938340 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/右哼哼.png differ diff --git a/components/vue-admin-perfect/src/assets/face/右太极.png b/components/vue-admin-perfect/src/assets/face/右太极.png new file mode 100644 index 0000000..3ef59eb Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/右太极.png differ diff --git a/components/vue-admin-perfect/src/assets/face/吐.png b/components/vue-admin-perfect/src/assets/face/吐.png new file mode 100644 index 0000000..766ad1d Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/吐.png differ diff --git a/components/vue-admin-perfect/src/assets/face/吓.png b/components/vue-admin-perfect/src/assets/face/吓.png new file mode 100644 index 0000000..a10a2bb Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/吓.png differ diff --git a/components/vue-admin-perfect/src/assets/face/呲牙.png b/components/vue-admin-perfect/src/assets/face/呲牙.png new file mode 100644 index 0000000..b626e67 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/呲牙.png differ diff --git a/components/vue-admin-perfect/src/assets/face/咒骂.png b/components/vue-admin-perfect/src/assets/face/咒骂.png new file mode 100644 index 0000000..8fa8c6b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/咒骂.png differ diff --git a/components/vue-admin-perfect/src/assets/face/咖啡.png b/components/vue-admin-perfect/src/assets/face/咖啡.png new file mode 100644 index 0000000..9db94c3 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/咖啡.png differ diff --git a/components/vue-admin-perfect/src/assets/face/哈欠.png b/components/vue-admin-perfect/src/assets/face/哈欠.png new file mode 100644 index 0000000..1c42a73 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/哈欠.png differ diff --git a/components/vue-admin-perfect/src/assets/face/啤酒.png b/components/vue-admin-perfect/src/assets/face/啤酒.png new file mode 100644 index 0000000..0f8c77c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/啤酒.png differ diff --git a/components/vue-admin-perfect/src/assets/face/嘘.png b/components/vue-admin-perfect/src/assets/face/嘘.png new file mode 100644 index 0000000..14eadc6 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/嘘.png differ diff --git a/components/vue-admin-perfect/src/assets/face/嘴唇.png b/components/vue-admin-perfect/src/assets/face/嘴唇.png new file mode 100644 index 0000000..c30fec3 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/嘴唇.png differ diff --git a/components/vue-admin-perfect/src/assets/face/嘿哈.png b/components/vue-admin-perfect/src/assets/face/嘿哈.png new file mode 100644 index 0000000..f046059 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/嘿哈.png differ diff --git a/components/vue-admin-perfect/src/assets/face/回头.png b/components/vue-admin-perfect/src/assets/face/回头.png new file mode 100644 index 0000000..6cd2d29 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/回头.png differ diff --git a/components/vue-admin-perfect/src/assets/face/困.png b/components/vue-admin-perfect/src/assets/face/困.png new file mode 100644 index 0000000..f878067 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/困.png differ diff --git a/components/vue-admin-perfect/src/assets/face/坏笑.png b/components/vue-admin-perfect/src/assets/face/坏笑.png new file mode 100644 index 0000000..c082745 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/坏笑.png differ diff --git a/components/vue-admin-perfect/src/assets/face/大哭.png b/components/vue-admin-perfect/src/assets/face/大哭.png new file mode 100644 index 0000000..a2fe2c2 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/大哭.png differ diff --git a/components/vue-admin-perfect/src/assets/face/太阳.png b/components/vue-admin-perfect/src/assets/face/太阳.png new file mode 100644 index 0000000..c89a346 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/太阳.png differ diff --git a/components/vue-admin-perfect/src/assets/face/奋斗.png b/components/vue-admin-perfect/src/assets/face/奋斗.png new file mode 100644 index 0000000..82a71f6 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/奋斗.png differ diff --git a/components/vue-admin-perfect/src/assets/face/奸笑.png b/components/vue-admin-perfect/src/assets/face/奸笑.png new file mode 100644 index 0000000..543a4da Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/奸笑.png differ diff --git a/components/vue-admin-perfect/src/assets/face/委屈.png b/components/vue-admin-perfect/src/assets/face/委屈.png new file mode 100644 index 0000000..1e2e39e Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/委屈.png differ diff --git a/components/vue-admin-perfect/src/assets/face/害羞.png b/components/vue-admin-perfect/src/assets/face/害羞.png new file mode 100644 index 0000000..67f4072 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/害羞.png differ diff --git a/components/vue-admin-perfect/src/assets/face/尴尬.png b/components/vue-admin-perfect/src/assets/face/尴尬.png new file mode 100644 index 0000000..a954c55 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/尴尬.png differ diff --git a/components/vue-admin-perfect/src/assets/face/左哼哼.png b/components/vue-admin-perfect/src/assets/face/左哼哼.png new file mode 100644 index 0000000..0e9f122 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/左哼哼.png differ diff --git a/components/vue-admin-perfect/src/assets/face/左太极.png b/components/vue-admin-perfect/src/assets/face/左太极.png new file mode 100644 index 0000000..d01df1b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/左太极.png differ diff --git a/components/vue-admin-perfect/src/assets/face/差劲.png b/components/vue-admin-perfect/src/assets/face/差劲.png new file mode 100644 index 0000000..8ddde22 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/差劲.png differ diff --git a/components/vue-admin-perfect/src/assets/face/弱.png b/components/vue-admin-perfect/src/assets/face/弱.png new file mode 100644 index 0000000..6bf1caf Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/弱.png differ diff --git a/components/vue-admin-perfect/src/assets/face/强.png b/components/vue-admin-perfect/src/assets/face/强.png new file mode 100644 index 0000000..7e34985 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/强.png differ diff --git a/components/vue-admin-perfect/src/assets/face/得意.png b/components/vue-admin-perfect/src/assets/face/得意.png new file mode 100644 index 0000000..2b1ba69 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/得意.png differ diff --git a/components/vue-admin-perfect/src/assets/face/微笑.png b/components/vue-admin-perfect/src/assets/face/微笑.png new file mode 100644 index 0000000..4a38990 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/微笑.png differ diff --git a/components/vue-admin-perfect/src/assets/face/心碎.png b/components/vue-admin-perfect/src/assets/face/心碎.png new file mode 100644 index 0000000..0665834 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/心碎.png differ diff --git a/components/vue-admin-perfect/src/assets/face/快哭了.png b/components/vue-admin-perfect/src/assets/face/快哭了.png new file mode 100644 index 0000000..b9b5190 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/快哭了.png differ diff --git a/components/vue-admin-perfect/src/assets/face/怄火.png b/components/vue-admin-perfect/src/assets/face/怄火.png new file mode 100644 index 0000000..8a05c34 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/怄火.png differ diff --git a/components/vue-admin-perfect/src/assets/face/悠闲.png b/components/vue-admin-perfect/src/assets/face/悠闲.png new file mode 100644 index 0000000..e8d4a4a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/悠闲.png differ diff --git a/components/vue-admin-perfect/src/assets/face/惊恐.png b/components/vue-admin-perfect/src/assets/face/惊恐.png new file mode 100644 index 0000000..648b4fe Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/惊恐.png differ diff --git a/components/vue-admin-perfect/src/assets/face/惊讶.png b/components/vue-admin-perfect/src/assets/face/惊讶.png new file mode 100644 index 0000000..1e86345 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/惊讶.png differ diff --git a/components/vue-admin-perfect/src/assets/face/愉快.png b/components/vue-admin-perfect/src/assets/face/愉快.png new file mode 100644 index 0000000..91ad87c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/愉快.png differ diff --git a/components/vue-admin-perfect/src/assets/face/憨笑.png b/components/vue-admin-perfect/src/assets/face/憨笑.png new file mode 100644 index 0000000..4aa5d0c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/憨笑.png differ diff --git a/components/vue-admin-perfect/src/assets/face/抓狂.png b/components/vue-admin-perfect/src/assets/face/抓狂.png new file mode 100644 index 0000000..51740fb Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/抓狂.png differ diff --git a/components/vue-admin-perfect/src/assets/face/投降.png b/components/vue-admin-perfect/src/assets/face/投降.png new file mode 100644 index 0000000..aee818c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/投降.png differ diff --git a/components/vue-admin-perfect/src/assets/face/抠鼻.png b/components/vue-admin-perfect/src/assets/face/抠鼻.png new file mode 100644 index 0000000..14c6af7 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/抠鼻.png differ diff --git a/components/vue-admin-perfect/src/assets/face/抱拳.png b/components/vue-admin-perfect/src/assets/face/抱拳.png new file mode 100644 index 0000000..7c8bd29 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/抱拳.png differ diff --git a/components/vue-admin-perfect/src/assets/face/拥抱.png b/components/vue-admin-perfect/src/assets/face/拥抱.png new file mode 100644 index 0000000..0fcc271 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/拥抱.png differ diff --git a/components/vue-admin-perfect/src/assets/face/拳头.png b/components/vue-admin-perfect/src/assets/face/拳头.png new file mode 100644 index 0000000..166e87a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/拳头.png differ diff --git a/components/vue-admin-perfect/src/assets/face/捂脸.png b/components/vue-admin-perfect/src/assets/face/捂脸.png new file mode 100644 index 0000000..2459dd5 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/捂脸.png differ diff --git a/components/vue-admin-perfect/src/assets/face/握手.png b/components/vue-admin-perfect/src/assets/face/握手.png new file mode 100644 index 0000000..e9bc91c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/握手.png differ diff --git a/components/vue-admin-perfect/src/assets/face/撇嘴.png b/components/vue-admin-perfect/src/assets/face/撇嘴.png new file mode 100644 index 0000000..5dbb5b3 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/撇嘴.png differ diff --git a/components/vue-admin-perfect/src/assets/face/擦汗.png b/components/vue-admin-perfect/src/assets/face/擦汗.png new file mode 100644 index 0000000..3e82855 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/擦汗.png differ diff --git a/components/vue-admin-perfect/src/assets/face/敲打.png b/components/vue-admin-perfect/src/assets/face/敲打.png new file mode 100644 index 0000000..5c40d2a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/敲打.png differ diff --git a/components/vue-admin-perfect/src/assets/face/晕.png b/components/vue-admin-perfect/src/assets/face/晕.png new file mode 100644 index 0000000..de893e4 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/晕.png differ diff --git a/components/vue-admin-perfect/src/assets/face/月亮.png b/components/vue-admin-perfect/src/assets/face/月亮.png new file mode 100644 index 0000000..fb3b35e Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/月亮.png differ diff --git a/components/vue-admin-perfect/src/assets/face/机智.png b/components/vue-admin-perfect/src/assets/face/机智.png new file mode 100644 index 0000000..4002d4e Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/机智.png differ diff --git a/components/vue-admin-perfect/src/assets/face/流汗.png b/components/vue-admin-perfect/src/assets/face/流汗.png new file mode 100644 index 0000000..39a9ef5 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/流汗.png differ diff --git a/components/vue-admin-perfect/src/assets/face/流泪.png b/components/vue-admin-perfect/src/assets/face/流泪.png new file mode 100644 index 0000000..9912664 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/流泪.png differ diff --git a/components/vue-admin-perfect/src/assets/face/激动.png b/components/vue-admin-perfect/src/assets/face/激动.png new file mode 100644 index 0000000..84b6372 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/激动.png differ diff --git a/components/vue-admin-perfect/src/assets/face/炸弹.png b/components/vue-admin-perfect/src/assets/face/炸弹.png new file mode 100644 index 0000000..3b6320c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/炸弹.png differ diff --git a/components/vue-admin-perfect/src/assets/face/爱你.png b/components/vue-admin-perfect/src/assets/face/爱你.png new file mode 100644 index 0000000..abc26dd Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/爱你.png differ diff --git a/components/vue-admin-perfect/src/assets/face/爱心.png b/components/vue-admin-perfect/src/assets/face/爱心.png new file mode 100644 index 0000000..b1582e9 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/爱心.png differ diff --git a/components/vue-admin-perfect/src/assets/face/爱情.png b/components/vue-admin-perfect/src/assets/face/爱情.png new file mode 100644 index 0000000..baa3602 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/爱情.png differ diff --git a/components/vue-admin-perfect/src/assets/face/猪头.png b/components/vue-admin-perfect/src/assets/face/猪头.png new file mode 100644 index 0000000..cb56ee0 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/猪头.png differ diff --git a/components/vue-admin-perfect/src/assets/face/献吻.png b/components/vue-admin-perfect/src/assets/face/献吻.png new file mode 100644 index 0000000..933404e Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/献吻.png differ diff --git a/components/vue-admin-perfect/src/assets/face/玫瑰.png b/components/vue-admin-perfect/src/assets/face/玫瑰.png new file mode 100644 index 0000000..5cdf902 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/玫瑰.png differ diff --git a/components/vue-admin-perfect/src/assets/face/瓢虫.png b/components/vue-admin-perfect/src/assets/face/瓢虫.png new file mode 100644 index 0000000..fd6ca53 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/瓢虫.png differ diff --git a/components/vue-admin-perfect/src/assets/face/疑问.png b/components/vue-admin-perfect/src/assets/face/疑问.png new file mode 100644 index 0000000..48567b7 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/疑问.png differ diff --git a/components/vue-admin-perfect/src/assets/face/疯了.png b/components/vue-admin-perfect/src/assets/face/疯了.png new file mode 100644 index 0000000..9dcb8eb Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/疯了.png differ diff --git a/components/vue-admin-perfect/src/assets/face/白眼.png b/components/vue-admin-perfect/src/assets/face/白眼.png new file mode 100644 index 0000000..0b2cb45 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/白眼.png differ diff --git a/components/vue-admin-perfect/src/assets/face/皱眉.png b/components/vue-admin-perfect/src/assets/face/皱眉.png new file mode 100644 index 0000000..289b6b2 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/皱眉.png differ diff --git a/components/vue-admin-perfect/src/assets/face/睡.png b/components/vue-admin-perfect/src/assets/face/睡.png new file mode 100644 index 0000000..d02cc5c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/睡.png differ diff --git a/components/vue-admin-perfect/src/assets/face/磕头.png b/components/vue-admin-perfect/src/assets/face/磕头.png new file mode 100644 index 0000000..0cdc841 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/磕头.png differ diff --git a/components/vue-admin-perfect/src/assets/face/礼物.png b/components/vue-admin-perfect/src/assets/face/礼物.png new file mode 100644 index 0000000..f2219ca Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/礼物.png differ diff --git a/components/vue-admin-perfect/src/assets/face/篮球.png b/components/vue-admin-perfect/src/assets/face/篮球.png new file mode 100644 index 0000000..ba51abf Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/篮球.png differ diff --git a/components/vue-admin-perfect/src/assets/face/糗大了.png b/components/vue-admin-perfect/src/assets/face/糗大了.png new file mode 100644 index 0000000..3c966ef Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/糗大了.png differ diff --git a/components/vue-admin-perfect/src/assets/face/红包.png b/components/vue-admin-perfect/src/assets/face/红包.png new file mode 100644 index 0000000..dd1941a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/红包.png differ diff --git a/components/vue-admin-perfect/src/assets/face/耶.png b/components/vue-admin-perfect/src/assets/face/耶.png new file mode 100644 index 0000000..0f6f5a9 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/耶.png differ diff --git a/components/vue-admin-perfect/src/assets/face/胜利.png b/components/vue-admin-perfect/src/assets/face/胜利.png new file mode 100644 index 0000000..ec1fc0b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/胜利.png differ diff --git a/components/vue-admin-perfect/src/assets/face/色.png b/components/vue-admin-perfect/src/assets/face/色.png new file mode 100644 index 0000000..86107c6 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/色.png differ diff --git a/components/vue-admin-perfect/src/assets/face/菜刀.png b/components/vue-admin-perfect/src/assets/face/菜刀.png new file mode 100644 index 0000000..336e6fd Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/菜刀.png differ diff --git a/components/vue-admin-perfect/src/assets/face/蛋糕.png b/components/vue-admin-perfect/src/assets/face/蛋糕.png new file mode 100644 index 0000000..1a97494 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/蛋糕.png differ diff --git a/components/vue-admin-perfect/src/assets/face/衰.png b/components/vue-admin-perfect/src/assets/face/衰.png new file mode 100644 index 0000000..438af01 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/衰.png differ diff --git a/components/vue-admin-perfect/src/assets/face/西瓜.png b/components/vue-admin-perfect/src/assets/face/西瓜.png new file mode 100644 index 0000000..fb381c5 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/西瓜.png differ diff --git a/components/vue-admin-perfect/src/assets/face/调皮.png b/components/vue-admin-perfect/src/assets/face/调皮.png new file mode 100644 index 0000000..4815f5f Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/调皮.png differ diff --git a/components/vue-admin-perfect/src/assets/face/足球.png b/components/vue-admin-perfect/src/assets/face/足球.png new file mode 100644 index 0000000..e9c08ca Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/足球.png differ diff --git a/components/vue-admin-perfect/src/assets/face/跳绳.png b/components/vue-admin-perfect/src/assets/face/跳绳.png new file mode 100644 index 0000000..26a0b85 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/跳绳.png differ diff --git a/components/vue-admin-perfect/src/assets/face/跳跳.png b/components/vue-admin-perfect/src/assets/face/跳跳.png new file mode 100644 index 0000000..c370740 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/跳跳.png differ diff --git a/components/vue-admin-perfect/src/assets/face/转圈.png b/components/vue-admin-perfect/src/assets/face/转圈.png new file mode 100644 index 0000000..6501073 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/转圈.png differ diff --git a/components/vue-admin-perfect/src/assets/face/鄙视.png b/components/vue-admin-perfect/src/assets/face/鄙视.png new file mode 100644 index 0000000..03087b5 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/鄙视.png differ diff --git a/components/vue-admin-perfect/src/assets/face/酷.png b/components/vue-admin-perfect/src/assets/face/酷.png new file mode 100644 index 0000000..9884164 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/酷.png differ diff --git a/components/vue-admin-perfect/src/assets/face/闪电.png b/components/vue-admin-perfect/src/assets/face/闪电.png new file mode 100644 index 0000000..ea0178b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/闪电.png differ diff --git a/components/vue-admin-perfect/src/assets/face/闭嘴.png b/components/vue-admin-perfect/src/assets/face/闭嘴.png new file mode 100644 index 0000000..b6bb864 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/闭嘴.png differ diff --git a/components/vue-admin-perfect/src/assets/face/阴险.png b/components/vue-admin-perfect/src/assets/face/阴险.png new file mode 100644 index 0000000..b1834a9 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/阴险.png differ diff --git a/components/vue-admin-perfect/src/assets/face/难过.png b/components/vue-admin-perfect/src/assets/face/难过.png new file mode 100644 index 0000000..69b144c Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/难过.png differ diff --git a/components/vue-admin-perfect/src/assets/face/飞吻.png b/components/vue-admin-perfect/src/assets/face/飞吻.png new file mode 100644 index 0000000..57f2296 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/飞吻.png differ diff --git a/components/vue-admin-perfect/src/assets/face/饥饿.png b/components/vue-admin-perfect/src/assets/face/饥饿.png new file mode 100644 index 0000000..53aa48a Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/饥饿.png differ diff --git a/components/vue-admin-perfect/src/assets/face/饭.png b/components/vue-admin-perfect/src/assets/face/饭.png new file mode 100644 index 0000000..9a4e698 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/饭.png differ diff --git a/components/vue-admin-perfect/src/assets/face/骷髅.png b/components/vue-admin-perfect/src/assets/face/骷髅.png new file mode 100644 index 0000000..453226b Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/骷髅.png differ diff --git a/components/vue-admin-perfect/src/assets/face/鸡.png b/components/vue-admin-perfect/src/assets/face/鸡.png new file mode 100644 index 0000000..07517f3 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/鸡.png differ diff --git a/components/vue-admin-perfect/src/assets/face/鼓掌.png b/components/vue-admin-perfect/src/assets/face/鼓掌.png new file mode 100644 index 0000000..027f883 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/face/鼓掌.png differ diff --git a/components/vue-admin-perfect/src/assets/image/avator.png b/components/vue-admin-perfect/src/assets/image/avator.png new file mode 100644 index 0000000..7d1e905 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/avator.png differ diff --git a/components/vue-admin-perfect/src/assets/image/berserk.jpg b/components/vue-admin-perfect/src/assets/image/berserk.jpg new file mode 100644 index 0000000..09d0d62 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/berserk.jpg differ diff --git a/components/vue-admin-perfect/src/assets/image/cro.jpg b/components/vue-admin-perfect/src/assets/image/cro.jpg new file mode 100644 index 0000000..29f7614 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/cro.jpg differ diff --git a/components/vue-admin-perfect/src/assets/image/error/401.gif b/components/vue-admin-perfect/src/assets/image/error/401.gif new file mode 100644 index 0000000..cd6e0d9 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/error/401.gif differ diff --git a/components/vue-admin-perfect/src/assets/image/error/404.jpeg b/components/vue-admin-perfect/src/assets/image/error/404.jpeg new file mode 100644 index 0000000..58e8269 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/error/404.jpeg differ diff --git a/components/vue-admin-perfect/src/assets/image/error/404s.png b/components/vue-admin-perfect/src/assets/image/error/404s.png new file mode 100644 index 0000000..3d8e230 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/error/404s.png differ diff --git a/components/vue-admin-perfect/src/assets/image/im1.jpeg b/components/vue-admin-perfect/src/assets/image/im1.jpeg new file mode 100644 index 0000000..ea28337 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/image/im1.jpeg differ diff --git a/components/vue-admin-perfect/src/assets/logo.png b/components/vue-admin-perfect/src/assets/logo.png new file mode 100644 index 0000000..f3d2503 Binary files /dev/null and b/components/vue-admin-perfect/src/assets/logo.png differ diff --git a/components/vue-admin-perfect/src/assets/mp4/2.mp4 b/components/vue-admin-perfect/src/assets/mp4/2.mp4 new file mode 100644 index 0000000..e69de29 diff --git a/components/vue-admin-perfect/src/assets/mp4/3.jpeg b/components/vue-admin-perfect/src/assets/mp4/3.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/components/vue-admin-perfect/src/components/Charts/Keyboard.vue b/components/vue-admin-perfect/src/components/Charts/Keyboard.vue new file mode 100644 index 0000000..0b258f3 --- /dev/null +++ b/components/vue-admin-perfect/src/components/Charts/Keyboard.vue @@ -0,0 +1,155 @@ + + + diff --git a/components/vue-admin-perfect/src/components/Charts/LineMarker.vue b/components/vue-admin-perfect/src/components/Charts/LineMarker.vue new file mode 100644 index 0000000..580176d --- /dev/null +++ b/components/vue-admin-perfect/src/components/Charts/LineMarker.vue @@ -0,0 +1,230 @@ + + diff --git a/components/vue-admin-perfect/src/components/Charts/MixChart.vue b/components/vue-admin-perfect/src/components/Charts/MixChart.vue new file mode 100644 index 0000000..c416542 --- /dev/null +++ b/components/vue-admin-perfect/src/components/Charts/MixChart.vue @@ -0,0 +1,271 @@ + + + diff --git a/components/vue-admin-perfect/src/components/Charts/mixins/resize.js b/components/vue-admin-perfect/src/components/Charts/mixins/resize.js new file mode 100644 index 0000000..20cf1e6 --- /dev/null +++ b/components/vue-admin-perfect/src/components/Charts/mixins/resize.js @@ -0,0 +1,56 @@ +import { debounce } from '@/utils/index.js' + +export default { + data() { + return { + $_sidebarElm: null, + $_resizeHandler: null + } + }, + mounted() { + this.initListener() + }, + activated() { + if (!this.$_resizeHandler) { + // avoid duplication init + this.initListener() + } + + // when keep-alive chart activated, auto resize + this.resize() + }, + beforeDestroy() { + this.destroyListener() + }, + deactivated() { + this.destroyListener() + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_sidebarResizeHandler(e) { + if (e.propertyName === 'width') { + this.$_resizeHandler() + } + }, + initListener() { + this.$_resizeHandler = debounce(() => { + this.resize() + }, 100) + window.addEventListener('resize', this.$_resizeHandler) + + this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0] + this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler) + }, + destroyListener() { + window.removeEventListener('resize', this.$_resizeHandler) + this.$_resizeHandler = null + + this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler) + }, + resize() { + const { chart } = this + chart && chart.resize() + } + } +} diff --git a/components/vue-admin-perfect/src/components/pipeline/index.vue b/components/vue-admin-perfect/src/components/pipeline/index.vue new file mode 100644 index 0000000..1130301 --- /dev/null +++ b/components/vue-admin-perfect/src/components/pipeline/index.vue @@ -0,0 +1,8 @@ + + diff --git a/components/vue-admin-perfect/src/components/pipeline/zb-pipeline-start.vue b/components/vue-admin-perfect/src/components/pipeline/zb-pipeline-start.vue new file mode 100644 index 0000000..0300e82 --- /dev/null +++ b/components/vue-admin-perfect/src/components/pipeline/zb-pipeline-start.vue @@ -0,0 +1,63 @@ + + + diff --git a/components/vue-admin-perfect/src/components/u-Hamburger/index.vue b/components/vue-admin-perfect/src/components/u-Hamburger/index.vue new file mode 100644 index 0000000..9561467 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-Hamburger/index.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/components/vue-admin-perfect/src/components/u-mavonEditor/index.vue b/components/vue-admin-perfect/src/components/u-mavonEditor/index.vue new file mode 100644 index 0000000..08a64de --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-mavonEditor/index.vue @@ -0,0 +1,7 @@ + + + diff --git a/components/vue-admin-perfect/src/components/u-rightClickMenu/index.vue b/components/vue-admin-perfect/src/components/u-rightClickMenu/index.vue new file mode 100644 index 0000000..c2fd794 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-rightClickMenu/index.vue @@ -0,0 +1,112 @@ + + + diff --git a/components/vue-admin-perfect/src/components/u-screenfull/index.js b/components/vue-admin-perfect/src/components/u-screenfull/index.js new file mode 100644 index 0000000..e1ae5b6 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-screenfull/index.js @@ -0,0 +1,157 @@ +/* eslint-disable promise/prefer-await-to-then */ + +const methodMap = [ + [ + 'requestFullscreen', + 'exitFullscreen', + 'fullscreenElement', + 'fullscreenEnabled', + 'fullscreenchange', + 'fullscreenerror', + ], + // New WebKit + [ + 'webkitRequestFullscreen', + 'webkitExitFullscreen', + 'webkitFullscreenElement', + 'webkitFullscreenEnabled', + 'webkitfullscreenchange', + 'webkitfullscreenerror', + + ], + // Old WebKit + [ + 'webkitRequestFullScreen', + 'webkitCancelFullScreen', + 'webkitCurrentFullScreenElement', + 'webkitCancelFullScreen', + 'webkitfullscreenchange', + 'webkitfullscreenerror', + + ], + [ + 'mozRequestFullScreen', + 'mozCancelFullScreen', + 'mozFullScreenElement', + 'mozFullScreenEnabled', + 'mozfullscreenchange', + 'mozfullscreenerror', + ], + [ + 'msRequestFullscreen', + 'msExitFullscreen', + 'msFullscreenElement', + 'msFullscreenEnabled', + 'MSFullscreenChange', + 'MSFullscreenError', + ], +]; + +const nativeAPI = (() => { + const unprefixedMethods = methodMap[0]; + const returnValue = {}; + + for (const methodList of methodMap) { + const exitFullscreenMethod = methodList?.[1]; + if (exitFullscreenMethod in document) { + for (const [index, method] of methodList.entries()) { + returnValue[unprefixedMethods[index]] = method; + } + + return returnValue; + } + } + + return false; +})(); + +const eventNameMap = { + change: nativeAPI.fullscreenchange, + error: nativeAPI.fullscreenerror, +}; + +// eslint-disable-next-line import/no-mutable-exports +let screenfull = { + // eslint-disable-next-line default-param-last + request(element = document.documentElement, options) { + return new Promise((resolve, reject) => { + const onFullScreenEntered = () => { + screenfull.off('change', onFullScreenEntered); + resolve(); + }; + + screenfull.on('change', onFullScreenEntered); + + const returnPromise = element[nativeAPI.requestFullscreen](options); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenEntered).catch(reject); + } + }); + }, + exit() { + return new Promise((resolve, reject) => { + if (!screenfull.isFullscreen) { + resolve(); + return; + } + + const onFullScreenExit = () => { + screenfull.off('change', onFullScreenExit); + resolve(); + }; + + screenfull.on('change', onFullScreenExit); + + const returnPromise = document[nativeAPI.exitFullscreen](); + + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenExit).catch(reject); + } + }); + }, + toggle(element, options) { + return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options); + }, + onchange(callback) { + screenfull.on('change', callback); + }, + onerror(callback) { + screenfull.on('error', callback); + }, + on(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.addEventListener(eventName, callback, false); + } + }, + off(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.removeEventListener(eventName, callback, false); + } + }, + raw: nativeAPI, +}; + +Object.defineProperties(screenfull, { + isFullscreen: { + get: () => Boolean(document[nativeAPI.fullscreenElement]), + }, + element: { + enumerable: true, + get: () => document[nativeAPI.fullscreenElement] ?? undefined, + }, + isEnabled: { + enumerable: true, + // Coerce to boolean in case of old WebKit. + get: () => Boolean(document[nativeAPI.fullscreenEnabled]), + }, +}); + +if (!nativeAPI) { + screenfull = {isEnabled: false}; +} + + +export default screenfull; diff --git a/components/vue-admin-perfect/src/components/u-screenfull/index.vue b/components/vue-admin-perfect/src/components/u-screenfull/index.vue new file mode 100644 index 0000000..6253ab2 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-screenfull/index.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/components/vue-admin-perfect/src/components/u-setting/index.vue b/components/vue-admin-perfect/src/components/u-setting/index.vue new file mode 100644 index 0000000..f15b243 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-setting/index.vue @@ -0,0 +1,126 @@ + + + + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/components/u-upload/index.vue b/components/vue-admin-perfect/src/components/u-upload/index.vue new file mode 100644 index 0000000..4a49826 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-upload/index.vue @@ -0,0 +1,73 @@ + + + diff --git a/components/vue-admin-perfect/src/components/u-wangEdior/index.vue b/components/vue-admin-perfect/src/components/u-wangEdior/index.vue new file mode 100644 index 0000000..af8df04 --- /dev/null +++ b/components/vue-admin-perfect/src/components/u-wangEdior/index.vue @@ -0,0 +1,48 @@ + + + diff --git a/components/vue-admin-perfect/src/layout/components/AppMain.vue b/components/vue-admin-perfect/src/layout/components/AppMain.vue new file mode 100644 index 0000000..e48062a --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/AppMain.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/Sidebar/Link.vue b/components/vue-admin-perfect/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..62b9535 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/Sidebar/Logo.vue b/components/vue-admin-perfect/src/layout/components/Sidebar/Logo.vue new file mode 100644 index 0000000..591b168 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/Sidebar/Logo.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/Sidebar/SidebarItem.vue b/components/vue-admin-perfect/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..96c1fc2 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,80 @@ + + + diff --git a/components/vue-admin-perfect/src/layout/components/Sidebar/index.vue b/components/vue-admin-perfect/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..0369603 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/Sidebar/index.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/Sidebar/menuSlide.vue b/components/vue-admin-perfect/src/layout/components/Sidebar/menuSlide.vue new file mode 100644 index 0000000..033b666 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/Sidebar/menuSlide.vue @@ -0,0 +1,55 @@ + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/layout/components/TagsView/ScrollPane.vue b/components/vue-admin-perfect/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..f5a2362 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/TagsView/index.vue b/components/vue-admin-perfect/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..9747dc3 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/TagsView/index.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/UHeader/Personal.vue b/components/vue-admin-perfect/src/layout/components/UHeader/Personal.vue new file mode 100644 index 0000000..eb8657f --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/UHeader/Personal.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/components/UHeader/expand.vue b/components/vue-admin-perfect/src/layout/components/UHeader/expand.vue new file mode 100644 index 0000000..e69de29 diff --git a/components/vue-admin-perfect/src/layout/components/UHeader/index.vue b/components/vue-admin-perfect/src/layout/components/UHeader/index.vue new file mode 100644 index 0000000..baa4631 --- /dev/null +++ b/components/vue-admin-perfect/src/layout/components/UHeader/index.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/components/vue-admin-perfect/src/layout/hooks/useResizeHandler.ts b/components/vue-admin-perfect/src/layout/hooks/useResizeHandler.ts new file mode 100644 index 0000000..0cc690e --- /dev/null +++ b/components/vue-admin-perfect/src/layout/hooks/useResizeHandler.ts @@ -0,0 +1,49 @@ +import store from '@/store' +import {computed, onMounted, onUnmounted, watch} from "vue"; +import {useRoute} from "vue-router"; + +const { body } = document + +const WIDTH = 992 // refer to Bootstrap's responsive design + +export const useResizeHandler = ()=>{ + const route = useRoute() + const device = computed(()=>{ + return store.state.app.device + }) + function $_isMobile(){ + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + } + function $_resizeHandler(){ + if (!document.hidden) { // bool型,表示页面是否处于隐藏状态。页面隐藏包括页面在后台标签页或者浏览器最小化 + const isMobile = $_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + } + onMounted(()=>{ + const isMobile = $_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + window.addEventListener('resize', $_resizeHandler) + + watch(route,()=>{ + if (device.value === 'mobile' && store.state.app.isCollapse) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + }) + }) + + onUnmounted(()=>{ + window.removeEventListener('resize', $_resizeHandler) + }) + + + return {device} +} diff --git a/components/vue-admin-perfect/src/layout/index.vue b/components/vue-admin-perfect/src/layout/index.vue new file mode 100644 index 0000000..6f5adee --- /dev/null +++ b/components/vue-admin-perfect/src/layout/index.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/components/vue-admin-perfect/src/main.ts b/components/vue-admin-perfect/src/main.ts new file mode 100644 index 0000000..0046852 --- /dev/null +++ b/components/vue-admin-perfect/src/main.ts @@ -0,0 +1,25 @@ +import { createApp } from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' + +import './permission' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' +import zhCn from 'element-plus/es/locale/lang/zh-cn' +const app = createApp(App) + +import * as ElIconsModules from '@element-plus/icons-vue' +// 全局注册element-plus icon图标组件 +Object.keys(ElIconsModules).forEach((key) => {//循环遍历组件名称 + if ("Menu" !== key) {//如果不是图标组件不是Menu,就跳过,否则加上ICon的后缀 + app.component(key, ElIconsModules[key]); + } else { + app.component(key + "Icon", ElIconsModules[key]); + } +}); + +import '@/styles/index.scss' // global css +app.use(store).use(router).use(ElementPlus,{ + locale: zhCn, +}).mount('#app') diff --git a/components/vue-admin-perfect/src/permission.js b/components/vue-admin-perfect/src/permission.js new file mode 100644 index 0000000..a791914 --- /dev/null +++ b/components/vue-admin-perfect/src/permission.js @@ -0,0 +1,57 @@ +import router from './router/index' +import store from './store/index' +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' +import { getToken } from '@/utils/auth' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login', '/auth-redirect'] // 设置白名单 +// 记录路由 +let hasRoles = true + +router.beforeEach(async(to, from, next) => { + // 开启进度条 + NProgress.start() + + // set page title + document.title = to.meta.title + + // 确定用户是否已登录 + const hasToken = getToken() + + if (hasToken) { + if (to.path === '/login') { + // 如果已登录,请重定向到主页 + next({ path: '/' }) + NProgress.done() + } else { + try { + // 路由添加进去了没有及时更新 需要重新进去一次拦截 + if(!store.state.permission.routes.length){ + // 获取权限列表进行接口访问 因为这里页面要切换权限 + // const roles = await store.dispatch('user/getInfo') + const accessRoutes = await store.dispatch('permission/generateRoutes', store.getters.roles) + hasRoles = false + accessRoutes.forEach(item => router.addRoute(item)) // 动态添加访问路由表 + next({ ...to, replace: true }) // // 这里相当于push到一个页面 不在进入路由拦截 + }else { + next() // // 如果不传参数就会重新执行路由拦截,重新进到这里 + } + } catch (error) { + next(`/login?redirect=${to.path}`) + } + } + }else{ + if (whiteList.indexOf(to.path) !== -1) { + next() + } else { + next(`/login?redirect=${to.path}`) + NProgress.done() + } + } +}) + +router.afterEach(() => { + NProgress.done() +}) diff --git a/components/vue-admin-perfect/src/router/index.ts b/components/vue-admin-perfect/src/router/index.ts new file mode 100644 index 0000000..8189ac1 --- /dev/null +++ b/components/vue-admin-perfect/src/router/index.ts @@ -0,0 +1,97 @@ +import { createRouter, createWebHistory, RouteRecordRaw,createWebHashHistory,Router } from 'vue-router' +import Layout from "@/layout/index.vue"; + +// 引入组件 +import chartsRouter from './modules/charts' +import chatRouter from './modules/chat' +import componentsRouter from './modules/components' +import othersRouter from './modules/other' +import externalLink from './modules/externalLink' +import permissionRouter from './modules/permission' +import tableRouter from './modules/table' +import errorRouter from './modules/error' +import excelRouter from './modules/excel' + + +interface extendRoute { + hidden?:boolean +} + +export const constantRoutes: Array = [ + { + path: '/login', + name: 'Login', + component: () => import('@/views/login/index.vue'), + hidden: true, + meta: { title: '登录',} + }, + + { + path: '/', + name: 'layout', + component: Layout, + redirect: '/home', + children: [ + { + path: '/home', + component: () => import('@/views/home/index.vue'), + name: 'home', + meta: { title: '首页', icon: 'film', affix: true ,role:['other']} + }, + ] + }, + +] + +const clipboardTable = { + path: '/clipboard', + component: Layout, + redirect: 'noRedirect', + name: 'clipboard', + meta: { + title: 'clipboard', + icon: 'document-copy', + roles:['other'] + }, + children: [ + { + path: 'index', + component: () => import('@/views/clipboard/index.vue'), + name: 'map', + meta: { title: 'clipboard', noCache: true , roles:['other'] ,icon: 'document-copy',} + }, + + ] +} + + +// 异步组件 +export const asyncRoutes = [ + tableRouter, + chartsRouter, + chatRouter, + componentsRouter, + othersRouter, + excelRouter, + errorRouter, + externalLink, + clipboardTable, + permissionRouter, + + { + path: '/:pathMatch(.*)', + redirect: '/error/404' + } +] + + +const router = createRouter({ + // history: createWebHistory(process.env.BASE_URL), // history + history: createWebHashHistory(), // hash + routes:constantRoutes +}) + + + + +export default router diff --git a/components/vue-admin-perfect/src/router/modules/charts.ts b/components/vue-admin-perfect/src/router/modules/charts.ts new file mode 100644 index 0000000..310a7b2 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/charts.ts @@ -0,0 +1,43 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const chartsRouter = { + path: '/charts', + component: Layout, + redirect: 'noRedirect', + name: 'Charts', + meta: { + title: '图表', + icon: 'trend-charts', + roles:['other'] + }, + children: [ + // { + // path: 'map', + // component: () => import('@/views/charts/map.vue'), + // name: 'map', + // meta: { title: '地图', noCache: true , roles:['other'] } + // }, + { + path: 'migration', + component: () => import('@/views/charts/migration.vue'), + name: 'migration', + meta: { title: '迁徙图', noCache: true , roles:['other'] } + }, + { + path: 'simple', + component: () => import('@/views/charts/simple.vue'), + name: 'charts-simple', + meta: { title: '简单图表', noCache: true , roles:['other'] } + }, + { + path: 'complex', + component: () => import('@/views/charts/complex.vue'), + name: 'charts-complex', + meta: { title: '复杂图表', noCache: true , roles:['other'] } + }, + ] +} + +export default chartsRouter diff --git a/components/vue-admin-perfect/src/router/modules/chat.ts b/components/vue-admin-perfect/src/router/modules/chat.ts new file mode 100644 index 0000000..a0bd5b0 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/chat.ts @@ -0,0 +1,24 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const chartsRouter = { + path: '/chat', + component: Layout, + redirect: 'noRedirect', + name: 'chat', + meta: { + title: '聊天框', + icon: 'chat-square' + }, + children: [ + { + path: 'index', + component: () => import('@/views/chat/index.vue'), + name: 'chat', + meta: { title: '聊天框', noCache: true,icon: 'chat-square' } + }, + ] +} + +export default chartsRouter diff --git a/components/vue-admin-perfect/src/router/modules/components.ts b/components/vue-admin-perfect/src/router/modules/components.ts new file mode 100644 index 0000000..cf25b30 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/components.ts @@ -0,0 +1,55 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const componentsRouter = { + path: '/components', + component: Layout, + redirect: 'noRedirect', + name: 'components', + meta: { + title: '组件', + icon: 'Histogram', + roles:['other'] + }, + children: [ + { + path: 'editor', + component: () => import('@/views/components-demo/editor.vue'), + name: 'editor', + meta: { title: '富文本编辑器', noCache: true, roles:['other'] } + }, + { + path: 'mark-down', + component: () => import('@/views/components-demo/mark-down.vue'), + name: 'mark-down', + meta: { title: 'markDown', noCache: true , roles:['other']} + }, + { + path: 'form', + component: () => import('@/views/components-demo/form.vue'), + name: 'form', + meta: { title: '表单', noCache: true , roles:['other']} + }, + { + path: 'scroll', + component: () => import('@/views/components-demo/scroll.vue'), + name: 'scroll', + meta: { title: '无限滚动', noCache: true } + }, + { + path: 'button', + component: () => import('@/views/components-demo/button.vue'), + name: 'button', + meta: { title: '按钮', noCache: true } + }, + { + path: 'upload', + component: () => import('@/views/components-demo/upload.vue'), + name: 'upload', + meta: { title: '上传图片', noCache: true } + }, + ] +} + +export default componentsRouter diff --git a/components/vue-admin-perfect/src/router/modules/error.ts b/components/vue-admin-perfect/src/router/modules/error.ts new file mode 100644 index 0000000..9d57c59 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/error.ts @@ -0,0 +1,32 @@ + + +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const errorRouter = { + path: '/error', + component: Layout, + redirect: 'noRedirect', + name: 'error', + meta: { + title: '错误页面', + icon: 'School' + }, + children: [ + { + path: '404', + component: () => import('@/views/error/404.vue'), + name: '404', + meta: { title: '404', noCache: true } + }, + { + path: '401', + component: () => import('@/views/error/401.vue'), + name: '401', + meta: { title: '401', noCache: true } + }, + ] +} + +export default errorRouter diff --git a/components/vue-admin-perfect/src/router/modules/excel.ts b/components/vue-admin-perfect/src/router/modules/excel.ts new file mode 100644 index 0000000..176400d --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/excel.ts @@ -0,0 +1,44 @@ + + +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const excelRouter = { + path: '/excel', + component: Layout, + redirect: 'noRedirect', + name: 'excel', + meta: { + title: 'Excel', + icon: 'School' + }, + children: [ + { + path: 'export-excel', + component: () => import('@/views/excel/export-excel.vue'), + name: 'export-excel', + meta: { title: '导出 Excel', noCache: true } + }, + { + path: 'export-merge-header', + component: () => import('@/views/excel/export-merge-header.vue'), + name: 'export-merge-header', + meta: { title: '导出 多级表头', noCache: true } + }, + { + path: 'upload-excel', + component: () => import('@/views/excel/upload-excel.vue'), + name: 'upload-excel', + meta: { title: '上传 Excel', noCache: true } + }, + { + path: 'upload-style-excel', + component: () => import('@/views/excel/export-style-excel.vue'), + name: 'upload-style-excel', + meta: { title: '自定义样式导出 Excel', noCache: true } + }, + ] +} + +export default excelRouter diff --git a/components/vue-admin-perfect/src/router/modules/externalLink.ts b/components/vue-admin-perfect/src/router/modules/externalLink.ts new file mode 100644 index 0000000..41cd066 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/externalLink.ts @@ -0,0 +1,19 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const externalLink = { + path: '/external-link', + component: Layout, + redirect: 'noRedirect', + name: 'external-link', + children: [ + { + path: 'https://github.com/zouzhibin/vue-admin-perfect', + name: 'external', + meta: { title: '外链', noCache: true , icon: 'link' } + }, + ] +} + +export default externalLink diff --git a/components/vue-admin-perfect/src/router/modules/other.ts b/components/vue-admin-perfect/src/router/modules/other.ts new file mode 100644 index 0000000..5a24865 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/other.ts @@ -0,0 +1,54 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const othersRouter = { + path: '/other', + component: Layout, + redirect: 'noRedirect', + name: 'other', + meta: { + title: '扩展组件', + icon: 'management' + }, + children: [ + { + path: 'print', + component: () => import('@/views/other/print.vue'), + name: 'print', + meta: { title: '打印', noCache: true } + }, + { + path: 'cropper', + component: () => import('@/views/other/cropper/index.vue'), + name: 'cropper', + meta: { title: '头像裁剪', noCache: true } + }, + { + path: 'grid-sorter', + component: () => import('@/views/other/grid-sorter.vue'), + name: 'grid-sorter', + meta: { title: '卡片拖拽', noCache: true } + }, + { + path: 'splitpane', + component: () => import('@/views/other/splitpane.vue'), + name: 'splitpane', + meta: { title: '分割模块', noCache: true } + }, + { + path: 'qrcode', + component: () => import('@/views/other/qrcode.vue'), + name: 'qrcode', + meta: { title: '生成二维码', noCache: true } + }, + { + path: 'right-menu', + component: () => import('@/views/other/right-menu.vue'), + name: 'right-menu', + meta: { title: '右键菜单', noCache: true } + }, + ] +} + +export default othersRouter diff --git a/components/vue-admin-perfect/src/router/modules/permission.ts b/components/vue-admin-perfect/src/router/modules/permission.ts new file mode 100644 index 0000000..1895787 --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/permission.ts @@ -0,0 +1,24 @@ +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const permissionRouter = { + path: '/permission', + component: Layout, + redirect: 'noRedirect', + name: 'permission', + meta: { + title: '权限测试页', + icon: 'trend-charts', roles:['other'] + }, + children: [ + { + path: 'page', + component: () => import('@/views/permission/page.vue'), + name: 'page', + meta: { title: '页面权限', noCache: true,icon: 'trend-charts', roles:['other'] } + }, + ] +} + +export default permissionRouter diff --git a/components/vue-admin-perfect/src/router/modules/table.ts b/components/vue-admin-perfect/src/router/modules/table.ts new file mode 100644 index 0000000..0c4aada --- /dev/null +++ b/components/vue-admin-perfect/src/router/modules/table.ts @@ -0,0 +1,43 @@ + +/** When your routing table is too long, you can split it into small modules**/ + +import Layout from "@/layout/index.vue"; + +const tableRouter = { + path: '/table', + component: Layout, + redirect: 'noRedirect', + name: 'table', + meta: { + title: '表格', + icon: 'School' + }, + children: [ + { + path: 'comprehensive', + component: () => import('@/views/table/comprehensive.vue'), + name: 'comprehensive', + meta: { title: '综合表格', noCache: true } + }, + { + path: 'inline-table', + component: () => import('@/views/table/inline-edit-table.vue'), + name: 'inline-table', + meta: { title: '行内编辑', noCache: true } + }, + { + path: 'edit-table', + component: () => import('@/views/table/edit.vue'), + name: 'edit-table', + meta: { title: '可编辑表格', noCache: true } + }, + // { + // path: 'multi-table', + // component: () => import('@/views/table/multi-table.vue'), + // name: 'multi-table', + // meta: { title: '多级表头', noCache: true } + // }, + ] +} + +export default tableRouter diff --git a/components/vue-admin-perfect/src/shims-vue.d.ts b/components/vue-admin-perfect/src/shims-vue.d.ts new file mode 100644 index 0000000..3804a43 --- /dev/null +++ b/components/vue-admin-perfect/src/shims-vue.d.ts @@ -0,0 +1,6 @@ +/* eslint-disable */ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/components/vue-admin-perfect/src/store/getters.ts b/components/vue-admin-perfect/src/store/getters.ts new file mode 100644 index 0000000..8e52917 --- /dev/null +++ b/components/vue-admin-perfect/src/store/getters.ts @@ -0,0 +1,8 @@ +const getters = { + permission_routes: state => state.permission.routes, + isCollapse: state => state.app.isCollapse, + userInfo: state => state.user.userInfo, + roles: state => state.user.roles, + +} +export default getters diff --git a/components/vue-admin-perfect/src/store/index.ts b/components/vue-admin-perfect/src/store/index.ts new file mode 100644 index 0000000..1eb2d0a --- /dev/null +++ b/components/vue-admin-perfect/src/store/index.ts @@ -0,0 +1,28 @@ +import { createStore } from 'vuex' + +import permission from './modules/permission' +import app from './modules/app' +import user from './modules/user' +import tagsView from './modules/tagsView' +import setting from './modules/setting' + +import getters from './getters' + +export default createStore({ + state: { + + }, + mutations: { + + }, + actions: { + }, + modules: { + permission, + app, + user, + tagsView, + setting + }, + getters +}) diff --git a/components/vue-admin-perfect/src/store/modules/app.ts b/components/vue-admin-perfect/src/store/modules/app.ts new file mode 100644 index 0000000..6d46ea5 --- /dev/null +++ b/components/vue-admin-perfect/src/store/modules/app.ts @@ -0,0 +1,42 @@ +import {Module} from "vuex"; + +const state = { + isCollapse: true, + withoutAnimation:false, + device: 'desktop', +} + +const mutations = { + SET_COLLAPSE: (state, value) => { + state.isCollapse = value + state.withoutAnimation = false + }, + // 获取设备 + TOGGLE_DEVICE: (state, device) => { + state.device = device + + }, + // 点击遮罩层 关闭左边按钮 + CLOSE_SIDEBAR:(state, withoutAnimation) => { + state.isCollapse = false + state.withoutAnimation = withoutAnimation + }, +} +const actions = { + toggleDevice({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, +} + + +const app:Module = { + namespaced:true, + state, + mutations, + actions +} + +export default app diff --git a/components/vue-admin-perfect/src/store/modules/permission.ts b/components/vue-admin-perfect/src/store/modules/permission.ts new file mode 100644 index 0000000..3ab1062 --- /dev/null +++ b/components/vue-admin-perfect/src/store/modules/permission.ts @@ -0,0 +1,84 @@ +import {Module} from "vuex"; + +import { asyncRoutes, constantRoutes } from '@/router/index' +/** + * 使用 meta.role 来确定当前用户是否具有权限 + * @param roles + * @param route + */ +function hasPermission(roles, route) { + if (route.meta && route.meta.roles) { + return roles.some(role => route.meta.roles.includes(role)) + } else { + // return true + return false + } +} + +/** + * 通过递归过滤异步路由表 + * @param routes asyncRoutes + * @param roles + */ +export function filterAsyncRoutes(routes, roles) { + const res = [] + + routes.forEach(route => { + const tmp = { ...route } + if (hasPermission(roles, tmp)) { + if (tmp.children) { + tmp.children = filterAsyncRoutes(tmp.children, roles) + } + res.push(tmp) + } + }) + + + return res +} + + +const state = { + routes: [], + addRoutes: [] +} + +const mutations = { + SET_ROUTES: (state, routes) => { + state.addRoutes = routes + state.routes = constantRoutes.concat(routes) + }, + CLEAR_ROUTERS:(state, routes) => { + state.addRoutes = [] + state.routes = [] + }, +} + +const actions = { + generateRoutes({ commit }, roles) { + return new Promise(resolve => { + // 在这判断是否有权限,哪些角色拥有哪些权限 + let accessedRoutes + if (roles&&roles.length&&!roles.includes('admin')) { + accessedRoutes = filterAsyncRoutes(asyncRoutes, roles) + } else { + accessedRoutes = asyncRoutes || [] + } + + commit('SET_ROUTES', accessedRoutes) + resolve(accessedRoutes) + }) + }, + clearRoutes({commit}){ + commit('CLEAR_ROUTERS') + } +} + +const permission:Module = { + namespaced:true, + state, + mutations, + actions +} + +export default permission diff --git a/components/vue-admin-perfect/src/store/modules/setting.ts b/components/vue-admin-perfect/src/store/modules/setting.ts new file mode 100644 index 0000000..c13b781 --- /dev/null +++ b/components/vue-admin-perfect/src/store/modules/setting.ts @@ -0,0 +1,33 @@ +import {Module} from "vuex"; + +const state = { + isShowTag: true, + mode: 'vertical', +} + +const mutations = { + SET_TAG: (state, value) => { + state.isShowTag = value + }, + SET_MODE: (state, value) => { + state.mode = value + }, +} +const actions = { + setTag({ commit }, value) { + commit('SET_TAG', value) + }, + setMode({ commit }, value) { + commit('SET_MODE', value) + }, +} + + +const setting:Module = { + namespaced:true, + state, + mutations, + actions +} + +export default setting diff --git a/components/vue-admin-perfect/src/store/modules/tagsView.ts b/components/vue-admin-perfect/src/store/modules/tagsView.ts new file mode 100644 index 0000000..9ae4021 --- /dev/null +++ b/components/vue-admin-perfect/src/store/modules/tagsView.ts @@ -0,0 +1,96 @@ +import {Module} from "vuex"; + +const state = { + visitedViews: [], + cachedViews: [] +} + +const mutations = { + ADD_VISITED_VIEW: (state, view) => { + if (state.visitedViews.some(v => v.path === view.path)) return + state.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name' + }) + ) + }, + REMOVE_VISITED_VIEW: (state, routes) => { + state.visitedViews = state.visitedViews.filter(item=>!routes.includes(item.path)) + }, + CLEAR_VISITED_VIEW:(state, view) => { + state.visitedViews = [] + state.cachedViews = [] + }, + ADD_CACHED_VIEW: (state, view) => { + if (state.cachedViews.includes(view.name)) return + if (!view.meta.noCache) { + state.cachedViews.push(view.name) + } + }, + DEL_VISITED_VIEW: (state, view) => { + for (const [i, v] of state.visitedViews.entries()) { + if (v.path === view.path) { + state.visitedViews.splice(i, 1) + break + } + } + }, + DEL_CACHED_VIEW: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + index > -1 && state.cachedViews.splice(index, 1) + }, + +} + +const actions = { + addView({ dispatch }, view) { + dispatch('addVisitedView', view) + // dispatch('addCachedView', view) + }, + removeView({ commit }, views){ + return new Promise((resolve, reject) => { + commit('REMOVE_VISITED_VIEW', views) + resolve(null) + }) + + }, + addVisitedView({ commit }, view) { + commit('ADD_VISITED_VIEW', view) + }, + delView({ dispatch, state }, view) { + return new Promise(resolve => { + dispatch('delVisitedView', view) + dispatch('delCachedView', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews] + }) + }) + }, + delVisitedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_VISITED_VIEW', view) + resolve([...state.visitedViews]) + }) + }, + delCachedView({ commit, state }, view) { + return new Promise(resolve => { + commit('DEL_CACHED_VIEW', view) + resolve([...state.cachedViews]) + }) + }, + clearVisitedView({ commit, state }){ + commit('CLEAR_VISITED_VIEW') + } +} + + + +const tagsView:Module = { + namespaced:true, + state, + mutations, + actions +} + +export default tagsView diff --git a/components/vue-admin-perfect/src/store/modules/user.ts b/components/vue-admin-perfect/src/store/modules/user.ts new file mode 100644 index 0000000..a208c33 --- /dev/null +++ b/components/vue-admin-perfect/src/store/modules/user.ts @@ -0,0 +1,64 @@ +import {Module} from "vuex"; +import { getToken, setToken, removeToken } from '@/utils/auth' +const state = { + token: getToken(), + userInfo:localStorage.userInfo?JSON.parse(localStorage.userInfo):{}, + roles: localStorage.roles?JSON.parse(localStorage.roles):[], +} + +const mutations = { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_INFO: (state, userInfo) => { + localStorage.userInfo = JSON.stringify(userInfo) + state.userInfo = userInfo + }, + SET_ROLES: (state, roles) => { + localStorage.roles = JSON.stringify(roles) + state.roles = roles + } +} + + +const actions = { + // 登录 + login({ commit,dispatch }, userInfo) { + const { username, password } = userInfo + return new Promise(async (resolve, reject) => { + commit('SET_TOKEN', username) + + commit('SET_INFO', userInfo) + await dispatch('getInfo', ['admin']) // 获取权限列表 默认就是超级管理员,因为没有进行接口请求 写死 + setToken(username) + resolve(username) + }) + }, + // 获取用户信息 ,如实际应用中 可以通过token通过请求接口在这里获取用户信息 + getInfo({ commit, state },roles) { + return new Promise((resolve, reject) =>{ + commit('SET_ROLES', roles) + resolve(roles) + } ) + }, + // 退出 + logout({ commit, state, dispatch }) { + return new Promise((resolve, reject) => { + removeToken() + commit('SET_TOKEN', '') + commit('SET_INFO', '') + commit('SET_ROLES', '') + resolve(null) + }) + }, +} + + +const user:Module = { + namespaced:true, + state, + actions, + mutations, +} + +export default user diff --git a/components/vue-admin-perfect/src/styles/index.scss b/components/vue-admin-perfect/src/styles/index.scss new file mode 100644 index 0000000..106046f --- /dev/null +++ b/components/vue-admin-perfect/src/styles/index.scss @@ -0,0 +1,3 @@ +@import './variables.scss'; +@import './sidebar.scss'; +@import "./transition.scss"; diff --git a/components/vue-admin-perfect/src/styles/sidebar.scss b/components/vue-admin-perfect/src/styles/sidebar.scss new file mode 100644 index 0000000..5a2cdba --- /dev/null +++ b/components/vue-admin-perfect/src/styles/sidebar.scss @@ -0,0 +1,236 @@ +#app { + + .main-container { + min-height: 100%; + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .hideSliderLayout{ + margin-left: 0; + .el-menu--horizontal{ + border-bottom: none; + } + } + .transverseMenu{ + background-color: $menuBg; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: 100%; + position: fixed; + font-size: 0px; + top: 0; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + background: none; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 60px !important; + } + + .main-container { + margin-left: 60px; + } + + .submenu-title-noDropdown { + padding: 0 !important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + + .sub-el-icon { + margin-left: 19px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + .sub-el-icon { + margin-right: 12px; + margin-left: -2px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/components/vue-admin-perfect/src/styles/transition.scss b/components/vue-admin-perfect/src/styles/transition.scss new file mode 100644 index 0000000..c3fbb7c --- /dev/null +++ b/components/vue-admin-perfect/src/styles/transition.scss @@ -0,0 +1,62 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} +// +///* fade-transform */ +//.fade-transform-leave-active, +//.fade-transform-enter-active { +// transition: all .2s; +//} +// +//.fade-transform-enter-from { +// opacity: 0; +// transform: translateX(-30px); +//} +// +//.fade-transform-leave-to { +// opacity: 0; +// transform: translateX(30px); +//} + +/* breadcrumb transition */ +.breadcrumb-enter-active, +.breadcrumb-leave-active { + transition: all .2s; +} + +.breadcrumb-enter-from, +.breadcrumb-leave-active { + opacity: 0; + //transform: translateX(20px); +} + +.breadcrumb-move { + transition: all .2s; +} + +.breadcrumb-leave-active { + position: absolute; +} + + +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1), border 0s; +} + +.fade-transform-enter-from { + opacity: 0; +} + +.fade-transform-leave-to { + opacity: 0; +} diff --git a/components/vue-admin-perfect/src/styles/variables.scss b/components/vue-admin-perfect/src/styles/variables.scss new file mode 100644 index 0000000..a19c27c --- /dev/null +++ b/components/vue-admin-perfect/src/styles/variables.scss @@ -0,0 +1,35 @@ +// base color +$blue:#324157; +$light-blue:#3A71A8; +$red:#C03639; +$pink: #E65D6E; +$green: #30B08F; +$tiffany: #4AB7BD; +$yellow:#FEC171; +$panGreen: #30B08F; + +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; + +$subMenuBg:#1f2d3d; +$subMenuHover:#001528; + +$sideBarWidth: 210px; + +// the :export directive is the magic sauce for webpack +// https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/components/vue-admin-perfect/src/utils/auth.js b/components/vue-admin-perfect/src/utils/auth.js new file mode 100644 index 0000000..3d5b86e --- /dev/null +++ b/components/vue-admin-perfect/src/utils/auth.js @@ -0,0 +1,14 @@ + +const TokenKey = 'zb-token' + +export function getToken() { + return localStorage.TokenKey +} + +export function setToken(token) { + return localStorage.TokenKey = token +} + +export function removeToken() { + return localStorage.TokenKey ='' +} diff --git a/components/vue-admin-perfect/src/utils/clipboard.ts b/components/vue-admin-perfect/src/utils/clipboard.ts new file mode 100644 index 0000000..5343e9e --- /dev/null +++ b/components/vue-admin-perfect/src/utils/clipboard.ts @@ -0,0 +1,33 @@ +import Clipboard from 'clipboard' +import { ElMessage } from 'element-plus' + + +function clipboardSuccess() { + ElMessage({ + message: '复制成功', + type: 'success', + duration: 1500 + }) +} + +function clipboardError() { + ElMessage({ + message: '复制失败', + type: 'error' + }) +} + +export default function handleClipboard(text, event) { + const clipboard:any = new Clipboard(event.target, { + text: () => text + }) + clipboard.on('success', () => { + clipboardSuccess() + clipboard.destroy() + }) + clipboard.on('error', () => { + clipboardError() + clipboard.destroy() + }) + clipboard.onClick(event) +} diff --git a/components/vue-admin-perfect/src/utils/emojis.js b/components/vue-admin-perfect/src/utils/emojis.js new file mode 100644 index 0000000..3fafa63 --- /dev/null +++ b/components/vue-admin-perfect/src/utils/emojis.js @@ -0,0 +1,12 @@ +export default { + imgs: ['爱你', + '爱情', '爱心', '傲慢', + '白眼', '抱拳', '鄙视', + '闭嘴', '便便', '擦汗', + '菜刀', '差劲', '呲牙', + '大哭', '蛋糕', '刀', + '得意', '凋谢', '发呆', 'NO', 'OK', + '发抖', '发怒', '饭', '飞吻', '奋斗', + '疯了', '尴尬', '勾引', '鼓掌', '哈欠', + ] +} diff --git a/components/vue-admin-perfect/src/utils/exprotExcel.ts b/components/vue-admin-perfect/src/utils/exprotExcel.ts new file mode 100644 index 0000000..dff5db5 --- /dev/null +++ b/components/vue-admin-perfect/src/utils/exprotExcel.ts @@ -0,0 +1,280 @@ +const ExcelJS = require("exceljs"); + +const autoWidthAction = (val,width=10)=>{ + if (val == null) { + width = 10; + } else if (val.toString().charCodeAt(0) > 255) { + /*if chinese*/ + width = val.toString().length * 2; + } else { + width = val.toString().length; + } + return width +} +export const exportExcel = async ({column,data,filename,autoWidth,format})=>{ + // 创建excel + const workbook = new ExcelJS.Workbook(); + // 设置信息 + workbook.creator = "Me"; + workbook.title = filename; + workbook.created = new Date(); + workbook.modified = new Date(); + // 创建工作表 + const worksheet = workbook.addWorksheet(filename); + // 设置列名 + let columnsName = []; + column.forEach((item,index)=>{ + let obj = { + header: item.label, key:item.name, width: null + } + if(autoWidth){ + let maxArr = [autoWidthAction(item.label)] + data.forEach(ite=>{ + let str = ite[item.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + } + // 设置列名、键和宽度 + columnsName.push(obj); + }) + worksheet.columns = columnsName; + // 添加行 + worksheet.addRows(data); + // 写入文件 + + const uint8Array = + format === "xlsx" + ? await workbook.xlsx.writeBuffer() + : await workbook.csv.writeBuffer(); + + const blob = new Blob([uint8Array], { type: "application/octet-binary" }); + if (window.navigator.msSaveOrOpenBlob) { + // msSaveOrOpenBlob方法返回boolean值 + navigator.msSaveBlob(blob, filename + `.${format}`); + // 本地保存 + } else { + const link = document.createElement("a"); // a标签下载 + link.href = window.URL.createObjectURL(blob); // href属性指定下载链接 + link.download = filename + `.${format}`; // dowload属性指定文件名 + link.click(); // click()事件触发下载 + window.URL.revokeObjectURL(link.href); // 释放内存 + } +} +export function addCellStyle(cell, attr) { + const {color, fontSize, horizontal, bold} = attr || {}; + // eslint-disable-next-line no-param-reassign + cell.fill = { + type: 'pattern', + pattern: 'solid', + fgColor: {argb: color}, + }; + // eslint-disable-next-line no-param-reassign + cell.font = { + bold: bold ?? true, + size: fontSize ?? 11, + // italic: true, + // name: '微软雅黑', + color: {argb: 'ff0000'}, + }; + // eslint-disable-next-line no-param-reassign + cell.alignment = {vertical: 'middle', wrapText: true, horizontal: horizontal ?? 'left'}; +} + +export const exportStyleExcel =async ({column,data,filename,autoWidth,format})=>{ + // 创建excel + const workbook = new ExcelJS.Workbook(); + // 设置信息 + workbook.creator = "Me"; + workbook.title = filename; + workbook.created = new Date(); + workbook.modified = new Date(); + // 创建工作表 + const worksheet = workbook.addWorksheet(filename); + // 设置列名 + let columnsName = []; + column.forEach((item,index)=>{ + let obj = { + header: item.label, key:item.name, width: null + } + if(autoWidth){ + let maxArr = [autoWidthAction(item.label)] + data.forEach(ite=>{ + let str = ite[item.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + } + // 设置列名、键和宽度 + columnsName.push(obj); + }) + worksheet.columns = columnsName; + // 添加行 + worksheet.addRows(data); + // 写入文件 + + // 设置表头颜色 + // 给表头添加背景色。因为表头是第一行,可以通过 getRow(1) 来获取表头这一行 + const headerRow = worksheet.getRow(1); + // 通过 cell 设置样式,更精准 + headerRow.eachCell((cell) => addCellStyle(cell, {color: 'dff8ff', fontSize: 12, horizontal: 'left'})); + + const uint8Array = + format === "xlsx" + ? await workbook.xlsx.writeBuffer() + : await workbook.csv.writeBuffer(); + + const blob = new Blob([uint8Array], { type: "application/octet-binary" }); + if (window.navigator.msSaveOrOpenBlob) { + // msSaveOrOpenBlob方法返回boolean值 + navigator.msSaveBlob(blob, filename + `.${format}`); + // 本地保存 + } else { + const link = document.createElement("a"); // a标签下载 + link.href = window.URL.createObjectURL(blob); // href属性指定下载链接 + link.download = filename + `.${format}`; // dowload属性指定文件名 + link.click(); // click()事件触发下载 + window.URL.revokeObjectURL(link.href); // 释放内存 + } +} + + + + +// 默认的列宽 +export const DEFAULT_COLUMN_WIDTH = 20; + +function getColumnNumber(width: number) { + // 需要的列数,四舍五入 + return Math.round(width / DEFAULT_COLUMN_WIDTH); +} + + +function addData(worksheet,headerKeys,headers,data){ + +} + +export const exportMultiHeaderExcel = ({column,data,filename,autoWidth})=>{ + // 创建excel + const workbook = new ExcelJS.Workbook(); + // 创建工作表 + let sheet = workbook.addWorksheet("sheet1"); + + // 添加表头 + sheet.getRow(1).values = ["序号", "日期","地址" ,"配送消息" ,,, ]; + sheet.getRow(2).values = [ + "序号", + "日期", + "地址", + "省份", + "城市", + "邮编" + ]; + let headers = []; + column.forEach((item,index)=>{ + if(item.children){ + item.children.forEach(itemChild=>{ + let obj = { + key:itemChild.name, width: null + } + let maxArr = [autoWidthAction(itemChild.label)] + data.forEach(ite=>{ + let str = ite[itemChild.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + // 设置列名、键和宽度 + headers.push(obj); + }) + + }else { + let obj = { + key:item.name, width: null + } + let maxArr = [autoWidthAction(item.label)] + data.forEach(ite=>{ + let str = ite[item.name] ||'' + if(str){ + maxArr.push(autoWidthAction(str)) + } + }) + obj.width = Math.max(...maxArr)+5 + // 设置列名、键和宽度 + headers.push(obj); + } + }) + sheet.columns = headers; + sheet.addRows(data); + + // 合并单元格 + sheet.mergeCells(`D1:F1`); + sheet.mergeCells("A1:A2"); + sheet.mergeCells("B1:B2"); + sheet.mergeCells("C1:C2"); + // 写入文件 + workbook.xlsx.writeBuffer().then((data) => { + const blob = new Blob([data, { type: "application/vnd.ms-excel" }]); + if (window.navigator.msSaveOrOpenBlob) { + // msSaveOrOpenBlob方法返回boolean值 + navigator.msSaveBlob(blob, filename + ".xlsx"); + // 本地保存 + } else { + const link = document.createElement("a"); // a标签下载 + link.href = window.URL.createObjectURL(blob); // href属性指定下载链接 + link.download = filename + ".xlsx"; // dowload属性指定文件名 + link.click(); // click()事件触发下载 + window.URL.revokeObjectURL(link.href); // 释放内存 + } + }); +} + + +function mergeColumnCell(headers, rowHeader1, rowHeader2, nameRow1, nameRow2, worksheet){ + // 当前 index 的指针 + let pointer = -1; + nameRow1.forEach((name, index) => { + // 当 index 小于指针时,说明这一列已经被合并过了,不能再合并 + if (index <= pointer) return; + // 是否应该列合并 + const shouldVerticalMerge = name === nameRow2[index]; + + + // 是否应该行合并 + const shouldHorizontalMerge = index !== nameRow1.lastIndexOf(name); + + console.log('==',name,nameRow2[index],index,nameRow1.lastIndexOf(name),shouldVerticalMerge,shouldHorizontalMerge) + + pointer = nameRow1.lastIndexOf(name); + if (shouldVerticalMerge && shouldHorizontalMerge) { + // 两个方向都合并 + worksheet.mergeCells( + Number(rowHeader1.number), + index + 1, + Number(rowHeader2.number), + nameRow1.lastIndexOf(name) + 1, + ); + console.log('==') + } else if (shouldVerticalMerge && !shouldHorizontalMerge) { + // 只在垂直方向上同一列的两行合并 + worksheet.mergeCells(Number(rowHeader1.number), index + 1, Number(rowHeader2.number), index + 1); + } else if (!shouldVerticalMerge && shouldHorizontalMerge) { + // 只有水平方向同一行的多列合并 + worksheet.mergeCells( + Number(rowHeader1.number), + index + 1, + Number(rowHeader1.number), + nameRow1.lastIndexOf(name) + 1, + ); + // eslint-disable-next-line no-param-reassign + const cell = rowHeader1.getCell(index + 1); + cell.alignment = { vertical: 'middle', horizontal: 'center', wrapText: true }; + } + }); + +} diff --git a/components/vue-admin-perfect/src/utils/index.js b/components/vue-admin-perfect/src/utils/index.js new file mode 100644 index 0000000..632a4b2 --- /dev/null +++ b/components/vue-admin-perfect/src/utils/index.js @@ -0,0 +1,425 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * Parse the time to string + * @param {(Object|string|number)} time + * @param {string} cFormat + * @returns {string | null} + */ +export function parseTime(time, cFormat) { + if (arguments.length === 0 || !time) { + return null + } + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if ((typeof time === 'string')) { + if ((/^[0-9]+$/.test(time))) { + // support "1548221490638" + time = parseInt(time) + } else { + // support safari + // https://stackoverflow.com/questions/4310953/invalid-date-in-safari + time = time.replace(new RegExp(/-/gm), '/') + } + } + + if ((typeof time === 'number') && (time.toString().length === 10)) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => { + const value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] } + return value.toString().padStart(2, '0') + }) + return time_str +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time, option) { + if (('' + time).length === 10) { + time = parseInt(time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + * @param {string} url + * @returns {Object} + */ +export function getQueryObject(url) { + url = url == null ? window.location.href : url + const search = url.substring(url.lastIndexOf('?') + 1) + const obj = {} + const reg = /([^?&=]+)=([^?&=]*)/g + search.replace(reg, (rs, $1, $2) => { + const name = decodeURIComponent($1) + let val = decodeURIComponent($2) + val = String(val) + obj[name] = val + return rs + }) + return obj +} + +/** + * @param {string} input value + * @returns {number} output value + */ +export function byteLength(str) { + // returns the byte length of an utf8 string + let s = str.length + for (var i = str.length - 1; i >= 0; i--) { + const code = str.charCodeAt(i) + if (code > 0x7f && code <= 0x7ff) s++ + else if (code > 0x7ff && code <= 0xffff) s += 2 + if (code >= 0xDC00 && code <= 0xDFFF) i-- + } + return s +} + +/** + * @param {Array} actual + * @returns {Array} + */ +export function cleanArray(actual) { + const newArray = [] + for (let i = 0; i < actual.length; i++) { + if (actual[i]) { + newArray.push(actual[i]) + } + } + return newArray +} + +/** + * @param {Object} json + * @returns {Array} + */ +export function param(json) { + if (!json) return '' + return cleanArray( + Object.keys(json).map(key => { + if (json[key] === undefined) return '' + return encodeURIComponent(key) + '=' + encodeURIComponent(json[key]) + }) + ).join('&') +} + +/** + * @param {string} url + * @returns {Object} + */ +export function param2Obj(url) { + const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ') + if (!search) { + return {} + } + const obj = {} + const searchArr = search.split('&') + searchArr.forEach(v => { + const index = v.indexOf('=') + if (index !== -1) { + const name = v.substring(0, index) + const val = v.substring(index + 1, v.length) + obj[name] = val + } + }) + return obj +} + +/** + * @param {string} val + * @returns {string} + */ +export function html2Text(val) { + const div = document.createElement('div') + div.innerHTML = val + return div.textContent || div.innerText +} + +/** + * Merges two objects, giving the last one precedence + * @param {Object} target + * @param {(Object|Array)} source + * @returns {Object} + */ +export function objectMerge(target, source) { + if (typeof target !== 'object') { + target = {} + } + if (Array.isArray(source)) { + return source.slice() + } + Object.keys(source).forEach(property => { + const sourceProperty = source[property] + if (typeof sourceProperty === 'object') { + target[property] = objectMerge(target[property], sourceProperty) + } else { + target[property] = sourceProperty + } + }) + return target +} + +/** + * @param {HTMLElement} element + * @param {string} className + */ +export function toggleClass(element, className) { + if (!element || !className) { + return + } + let classString = element.className + const nameIndex = classString.indexOf(className) + if (nameIndex === -1) { + classString += '' + className + } else { + classString = + classString.substr(0, nameIndex) + + classString.substr(nameIndex + className.length) + } + element.className = classString +} + +/** + * @param {string} type + * @returns {Date} + */ +export function getTime(type) { + if (type === 'start') { + return new Date().getTime() - 3600 * 1000 * 24 * 90 + } else { + return new Date(new Date().toDateString()) + } +} + +/** + * @param {Function} func + * @param {number} wait + * @param {boolean} immediate + * @return {*} + */ +export function debounce(func, wait, immediate) { + let timeout, args, context, timestamp, result + + const later = function() { + // 据上一次触发时间间隔 + const last = +new Date() - timestamp + + // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait + if (last < wait && last > 0) { + timeout = setTimeout(later, wait - last) + } else { + timeout = null + // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用 + if (!immediate) { + result = func.apply(context, args) + if (!timeout) context = args = null + } + } + } + + return function(...args) { + context = this + timestamp = +new Date() + const callNow = immediate && !timeout + // 如果延时不存在,重新设定延时 + if (!timeout) timeout = setTimeout(later, wait) + if (callNow) { + result = func.apply(context, args) + context = args = null + } + + return result + } +} + +/** + * This is just a simple version of deep copy + * Has a lot of edge cases bug + * If you want to use a perfect deep copy, use lodash's _.cloneDeep + * @param {Object} source + * @returns {Object} + */ +export function deepClone(source) { + if (!source && typeof source !== 'object') { + throw new Error('error arguments', 'deepClone') + } + const targetObj = source.constructor === Array ? [] : {} + Object.keys(source).forEach(keys => { + if (source[keys] && typeof source[keys] === 'object') { + targetObj[keys] = deepClone(source[keys]) + } else { + targetObj[keys] = source[keys] + } + }) + return targetObj +} + +/** + * @param {Array} arr + * @returns {Array} + */ +export function uniqueArr(arr) { + return Array.from(new Set(arr)) +} + +/** + * @returns {string} + */ +export function createUniqueString() { + const timestamp = +new Date() + '' + const randomNum = parseInt((1 + Math.random()) * 65536) + '' + return (+(randomNum + timestamp)).toString(32) +} + +/** + * Check if an element has a class + * @param {HTMLElement} elm + * @param {string} cls + * @returns {boolean} + */ +export function hasClass(ele, cls) { + return !!ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')) +} + +/** + * Add class to element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function addClass(ele, cls) { + if (!hasClass(ele, cls)) ele.className += ' ' + cls +} + +/** + * Remove class from element + * @param {HTMLElement} elm + * @param {string} cls + */ +export function removeClass(ele, cls) { + if (hasClass(ele, cls)) { + const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)') + ele.className = ele.className.replace(reg, ' ') + } +} + + +export function getColor() { + var str = '#'; + var arr = ['1', '2', '3', '4', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']; + for (var i = 0; i < 6; i++) { + var num = parseInt(Math.random() * 16); + str += arr[num]; + } + return str; +} +// 检查给定的值是否是数组 +export const isArray = function(value) { + return objToString.call(value) === "[object Array]"; +}; +var funProto = Function.prototype; +var objProto = Object.prototype; + +var getPrototypeOf = Object.getPrototypeOf; + +var objToString = objProto.toString; +var hasOwnProperty = objProto.hasOwnProperty; +var funToString = funProto.toString; +// 检查给定的值是否是字符串 +export const isString = function(value) { + return objToString.call(value) === "[object String]"; +}; +// 检查给定的值是否是纯对象,纯对象是指通过 {} 或 new Object() 声明的对象 +export const isPlainObject = function(value) { + if (!value || objToString.call(value) !== "[object Object]") { + return false; + } + + var prototype = getPrototypeOf(value); + + if (prototype === null) { + return true; + } + + var constructor = hasOwnProperty.call(prototype, "constructor") && prototype.constructor; + + return typeof constructor === "function" && funToString.call(constructor) === funToString.call(Object); +}; + +// // 深度克隆 array 数组或 json 对象,返回克隆后的副本 +export const deepObjClone = function(obj){ + let weakMap = new WeakMap() + function clone (obj){ + if(obj==null){return obj} + if(obj instanceof Date){ return new Date(obj) } + if(obj instanceof RegExp){ return new RegExp(obj)} + if(typeof obj !== 'object') return obj + + if(weakMap.get(obj)){ + return weakMap.get(obj) + } + var copy = new obj.constructor + weakMap.set(obj,copy) + for(var key in obj){ + if(Object.prototype.hasOwnProperty.call(obj, key)){ + var value = obj[key]; + copy[key] = clone(value); + } + } + return copy; + } + return clone (obj) +}; diff --git a/components/vue-admin-perfect/src/utils/validate.js b/components/vue-admin-perfect/src/utils/validate.js new file mode 100644 index 0000000..6b3ac41 --- /dev/null +++ b/components/vue-admin-perfect/src/utils/validate.js @@ -0,0 +1,87 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str) { + const valid_map = ['admin', 'editor'] + return valid_map.indexOf(str.trim()) >= 0 +} + +/** + * @param {string} url + * @returns {Boolean} + */ +export function validURL(url) { + const reg = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return reg.test(url) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validLowerCase(str) { + const reg = /^[a-z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUpperCase(str) { + const reg = /^[A-Z]+$/ + return reg.test(str) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validAlphabets(str) { + const reg = /^[A-Za-z]+$/ + return reg.test(str) +} + +/** + * @param {string} email + * @returns {Boolean} + */ +export function validEmail(email) { + const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ + return reg.test(email) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function isString(str) { + if (typeof str === 'string' || str instanceof String) { + return true + } + return false +} + +/** + * @param {Array} arg + * @returns {Boolean} + */ +export function isArray(arg) { + if (typeof Array.isArray === 'undefined') { + return Object.prototype.toString.call(arg) === '[object Array]' + } + return Array.isArray(arg) +} diff --git a/components/vue-admin-perfect/src/views/About.vue b/components/vue-admin-perfect/src/views/About.vue new file mode 100644 index 0000000..3fa2807 --- /dev/null +++ b/components/vue-admin-perfect/src/views/About.vue @@ -0,0 +1,5 @@ + diff --git a/components/vue-admin-perfect/src/views/Home.vue b/components/vue-admin-perfect/src/views/Home.vue new file mode 100644 index 0000000..50d8a19 --- /dev/null +++ b/components/vue-admin-perfect/src/views/Home.vue @@ -0,0 +1,18 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/complex.vue b/components/vue-admin-perfect/src/views/charts/complex.vue new file mode 100644 index 0000000..ae0a2dd --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/complex.vue @@ -0,0 +1,130 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/Histogram.vue b/components/vue-admin-perfect/src/views/charts/components/complex/Histogram.vue new file mode 100644 index 0000000..56b6af5 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/Histogram.vue @@ -0,0 +1,214 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/bullish.vue b/components/vue-admin-perfect/src/views/charts/components/complex/bullish.vue new file mode 100644 index 0000000..ea6fd75 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/bullish.vue @@ -0,0 +1,186 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/line.vue b/components/vue-admin-perfect/src/views/charts/components/complex/line.vue new file mode 100644 index 0000000..824fbec --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/line.vue @@ -0,0 +1,362 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/liquidFill.vue b/components/vue-admin-perfect/src/views/charts/components/complex/liquidFill.vue new file mode 100644 index 0000000..679f123 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/liquidFill.vue @@ -0,0 +1,106 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/painting.vue b/components/vue-admin-perfect/src/views/charts/components/complex/painting.vue new file mode 100644 index 0000000..741878f --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/painting.vue @@ -0,0 +1,271 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/pie.vue b/components/vue-admin-perfect/src/views/charts/components/complex/pie.vue new file mode 100644 index 0000000..351c8b6 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/pie.vue @@ -0,0 +1,200 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/progress.vue b/components/vue-admin-perfect/src/views/charts/components/complex/progress.vue new file mode 100644 index 0000000..8a09784 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/progress.vue @@ -0,0 +1,149 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/rotate.vue b/components/vue-admin-perfect/src/views/charts/components/complex/rotate.vue new file mode 100644 index 0000000..7161149 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/rotate.vue @@ -0,0 +1,413 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/components/complex/sankey.vue b/components/vue-admin-perfect/src/views/charts/components/complex/sankey.vue new file mode 100644 index 0000000..29eaf50 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/complex/sankey.vue @@ -0,0 +1,337 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/map/bmap.min.js b/components/vue-admin-perfect/src/views/charts/components/map/bmap.min.js new file mode 100644 index 0000000..e5d49d1 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/map/bmap.min.js @@ -0,0 +1,22 @@ + +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + + +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("echarts")):"function"==typeof define&&define.amd?define(["exports","echarts"],e):e(t.bmap={},t.echarts)}(this,function(t,e){"use strict";function o(t,e){this._bmap=t,this.dimensions=["lng","lat"],this._mapOffset=[0,0],this._api=e,this._projection=new BMap.MercatorProjection}function n(t,o){return o=o||[0,0],e.util.map([0,1],function(e){var n=o[e],i=t[e]/2,a=[],r=[];return a[e]=n-i,r[e]=n+i,a[1-e]=r[1-e]=o[1-e],Math.abs(this.dataToPoint(a)[e]-this.dataToPoint(r)[e])},this)}function i(){function t(t){this._root=t}return t.prototype=new BMap.Overlay,t.prototype.initialize=function(t){return t.getPanes().labelPane.appendChild(this._root),this._root},t.prototype.draw=function(){},t}function a(t,e){return t&&e&&t[0]===e[0]&&t[1]===e[1]}o.prototype.dimensions=["lng","lat"],o.prototype.setZoom=function(t){this._zoom=t},o.prototype.setCenter=function(t){this._center=this._projection.lngLatToPoint(new BMap.Point(t[0],t[1]))},o.prototype.setMapOffset=function(t){this._mapOffset=t},o.prototype.getBMap=function(){return this._bmap},o.prototype.dataToPoint=function(t){var e=new BMap.Point(t[0],t[1]),o=this._bmap.pointToOverlayPixel(e),n=this._mapOffset;return[o.x-n[0],o.y-n[1]]},o.prototype.pointToData=function(t){var e=this._mapOffset;return[(t=this._bmap.overlayPixelToPoint({x:t[0]+e[0],y:t[1]+e[1]})).lng,t.lat]},o.prototype.getViewRect=function(){var t=this._api;return new e.graphic.BoundingRect(0,0,t.getWidth(),t.getHeight())},o.prototype.getRoamTransform=function(){return e.matrix.create()},o.prototype.prepareCustoms=function(t){var o=this.getViewRect();return{coordSys:{type:"bmap",x:o.x,y:o.y,width:o.width,height:o.height},api:{coord:e.util.bind(this.dataToPoint,this),size:e.util.bind(n,this)}}};var r;o.dimensions=o.prototype.dimensions,o.create=function(t,e){var n,a=e.getDom();t.eachComponent("bmap",function(t){var p=e.getZr().painter,s=p.getViewportRoot();if("undefined"==typeof BMap)throw new Error("BMap api is not loaded");if(r=r||i(),n)throw new Error("Only one bmap component can exist");if(!t.__bmap){var m=a.querySelector(".ec-extension-bmap");m&&(s.style.left="0px",s.style.top="0px",a.removeChild(m)),(m=document.createElement("div")).style.cssText="width:100%;height:100%",m.classList.add("ec-extension-bmap"),a.appendChild(m);var c=t.__bmap=new BMap.Map(m),d=new r(s);c.addOverlay(d),p.getViewportRootOffset=function(){return{offsetLeft:0,offsetTop:0}}}var c=t.__bmap,f=t.get("center"),l=t.get("zoom");if(f&&l){var h=new BMap.Point(f[0],f[1]);c.centerAndZoom(h,l)}(n=new o(c,e)).setMapOffset(t.__mapOffset||[0,0]),n.setZoom(l),n.setCenter(f),t.coordinateSystem=n}),t.eachSeries(function(t){"bmap"===t.get("coordinateSystem")&&(t.coordinateSystem=n)})},e.extendComponentModel({type:"bmap",getBMap:function(){return this.__bmap},setCenterAndZoom:function(t,e){this.option.center=t,this.option.zoom=e},centerOrZoomChanged:function(t,e){var o=this.option;return!(a(t,o.center)&&e===o.zoom)},defaultOption:{center:[104.114129,37.550339],zoom:5,mapStyle:{},roam:!1}}),e.extendComponentView({type:"bmap",render:function(t,e,o){function n(){i||o.dispatchAction({type:"bmapRoam"})}var i=!0,a=t.getBMap(),r=o.getZr().painter.getViewportRoot(),p=t.coordinateSystem,s=function(e,n){if(!i){var a=r.parentNode.parentNode.parentNode,s=[-parseInt(a.style.left,10)||0,-parseInt(a.style.top,10)||0];r.style.left=s[0]+"px",r.style.top=s[1]+"px",p.setMapOffset(s),t.__mapOffset=s,o.dispatchAction({type:"bmapRoam"})}};a.removeEventListener("moving",this._oldMoveHandler),a.removeEventListener("zoomend",this._oldZoomEndHandler),a.addEventListener("moving",s),a.addEventListener("zoomend",n),this._oldMoveHandler=s,this._oldZoomEndHandler=n;var m=t.get("roam");m&&"scale"!==m?a.enableDragging():a.disableDragging(),m&&"move"!==m?(a.enableScrollWheelZoom(),a.enableDoubleClickZoom(),a.enablePinchToZoom()):(a.disableScrollWheelZoom(),a.disableDoubleClickZoom(),a.disablePinchToZoom());var c=t.__mapStyle,d=t.get("mapStyle")||{},f=JSON.stringify(d);JSON.stringify(c)!==f&&(Object.keys(d).length&&a.setMapStyle(d),t.__mapStyle=JSON.parse(f)),i=!1}}),e.registerCoordinateSystem("bmap",o),e.registerAction({type:"bmapRoam",event:"bmapRoam",update:"updateLayout"},function(t,e){e.eachComponent("bmap",function(t){var e=t.getBMap(),o=e.getCenter();t.setCenterAndZoom([o.lng,o.lat],e.getZoom())})});t.version="1.0.0"}); diff --git a/components/vue-admin-perfect/src/views/charts/components/map/china.js b/components/vue-admin-perfect/src/views/charts/components/map/china.js new file mode 100644 index 0000000..917887e --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/map/china.js @@ -0,0 +1,27 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['exports', 'echarts'], factory); + } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') { + // CommonJS + factory(exports, require('echarts')); + } else { + // Browser globals + factory({}, root.echarts); + } +}(this, function (exports, echarts) { + var log = function (msg) { + if (typeof console !== 'undefined') { + console && console.error && console.error(msg); + } + } + if (!echarts) { + log('ECharts is not Loaded'); + return; + } + if (!echarts.registerMap) { + log('ECharts Map is not loaded') + return; + } + echarts.registerMap('china', {"type":"FeatureCollection","features":[{"id":"710000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@°Ü¯Û"],["@@ƛĴÕƊÉɼģºðʀ\\ƎsÆNŌÔĚäœnÜƤɊĂǀĆĴžĤNJŨxĚĮǂƺòƌ‚–âÔ®ĮXŦţƸZûЋƕƑGđ¨ĭMó·ęcëƝɉlÝƯֹÅŃ^Ó·śŃNjƏďíåɛGɉ™¿@ăƑŽ¥ĘWǬÏĶŁâ"],["@@\\p|WoYG¿¥I†j@¢"],["@@…¡‰@ˆV^RqˆBbAŒnTXeRz¤Lž«³I"],["@@ÆEE—„kWqë @œ"],["@@fced"]],"encodeOffsets":[[[122886,24033]],[[123335,22980]],[[122375,24193]],[[122518,24117]],[[124427,22618]],[[124862,26043]]]},"properties":{"cp":[121.509062,25.044332],"name":"台湾","childNum":6}},{"id":"130000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@o~†Z]‚ªr‰ºc_ħ²G¼s`jΟnüsœłNX_“M`ǽÓnUK…Ĝēs¤­©yrý§uģŒc†JŠ›e"],["@@U`Ts¿m‚"],["@@oºƋÄd–eVŽDJj£€J|Ådz•Ft~žKŨ¸IÆv|”‡¢r}膎onb˜}`RÎÄn°ÒdÞ²„^®’lnÐèĄlðӜ×]ªÆ}LiĂ±Ö`^°Ç¶p®đDcœŋ`–ZÔ’¶êqvFƚ†N®ĆTH®¦O’¾ŠIbÐã´BĐɢŴÆíȦp–ĐÞXR€·nndOž¤’OÀĈƒ­Qg˜µFo|gȒęSWb©osx|hYh•gŃfmÖĩnº€T̒Sp›¢dYĤ¶UĈjl’ǐpäìë|³kÛfw²Xjz~ÂqbTŠÑ„ěŨ@|oM‡’zv¢ZrÃVw¬ŧˏfŒ°ÐT€ªqŽs{Sž¯r æÝlNd®²Ğ džiGʂJ™¼lr}~K¨ŸƐÌWö€™ÆŠzRš¤lêmĞL΄’@¡|q]SvK€ÑcwpÏρ†ĿćènĪWlĄkT}ˆJ”¤~ƒÈT„d„™pddʾĬŠ”ŽBVt„EÀ¢ôPĎƗè@~‚k–ü\\rÊĔÖæW_§¼F˜†´©òDòj’ˆYÈrbĞāøŀG{ƀ|¦ðrb|ÀH`pʞkv‚GpuARhÞÆǶgƊTǼƹS£¨¡ù³ŘÍ]¿Ây™ôEP xX¶¹܇O¡“gÚ¡IwÃ鑦ÅB‡Ï|ǰ…N«úmH¯‹âŸDùŽyŜžŲIÄuШDž•¸dɂ‡‚FŸƒ•›Oh‡đ©OŸ›iÃ`ww^ƒÌkŸ‘ÑH«ƇǤŗĺtFu…{Z}Ö@U‡´…ʚLg®¯Oı°ÃwŸ ^˜—€VbÉs‡ˆmA…ê]]w„§›RRl£‡ȭµu¯b{ÍDěïÿȧŽuT£ġƒěŗƃĝ“Q¨fV†Ƌ•ƅn­a@‘³@šď„yýIĹÊKšŭfċŰóŒxV@tˆƯŒJ”]eƒR¾fe|rHA˜|h~Ėƍl§ÏŠlTíb ØoˆÅbbx³^zÃ͚¶Sj®A”yÂhðk`š«P€”ˈµEF†Û¬Y¨Ļrõqi¼‰Wi°§’б´°^[ˆÀ|ĠO@ÆxO\\tŽa\\tĕtû{ġŒȧXýĪÓjùÎRb›š^ΛfK[ݏděYfíÙTyŽuUSyŌŏů@Oi½’éŅ­aVcř§ax¹XŻác‡žWU£ôãºQ¨÷Ñws¥qEH‰Ù|‰›šYQoŕÇyáĂ£MðoťÊ‰P¡mšWO¡€v†{ôvîēÜISpÌhp¨ ‘j†deŔQÖj˜X³à™Ĉ[n`Yp@Už–cM`’RKhŒEbœ”pŞlNut®Etq‚nsÁŠgA‹iú‹oH‡qCX‡”hfgu“~ϋWP½¢G^}¯ÅīGCŸÑ^ãziMáļMTÃƘrMc|O_ž¯Ŏ´|‡morDkO\\mĆJfl@c̬¢aĦtRıҙ¾ùƀ^juųœK­ƒUFy™—Ɲ…›īÛ÷ąV×qƥV¿aȉd³B›qPBm›aËđŻģm“Å®Vйd^K‡KoŸnYg“¯Xhqa”Ldu¥•ÍpDž¡KąÅƒkĝęěhq‡}HyÓ]¹ǧ£…Í÷¿qáµ§š™g‘¤o^á¾ZE‡¤i`ij{n•ƒOl»ŸWÝĔįhg›F[¿¡—ßkOüš_‰€ū‹i„DZàUtėGylƒ}ŒÓM}€jpEC~¡FtoQi‘šHkk{Ãmï‚"]],"encodeOffsets":[[[119712,40641]],[[121616,39981]],[[116462,37237]]]},"properties":{"cp":[114.502461,38.045474],"name":"河北","childNum":3}},{"id":"140000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@Þĩ҃S‰ra}Á€yWix±Üe´lè“ßÓǏok‘ćiµVZģ¡coœ‘TS˹ĪmnÕńe–hZg{gtwªpXaĚThȑp{¶Eh—®RćƑP¿£‘Pmc¸mQÝW•ďȥoÅîɡųAďä³aωJ‘½¥PG­ąSM­™…EÅruµé€‘Yӎ•Ō_d›ĒCo­Èµ]¯_²ÕjāŽK~©ÅØ^ԛkïçămϑk]­±ƒcݯÑÃmQÍ~_a—pm…~ç¡q“ˆu{JÅŧ·Ls}–EyÁÆcI{¤IiCfUc•ƌÃp§]웫vD@¡SÀ‘µM‚ÅwuŽYY‡¡DbÑc¡hƒ×]nkoQdaMç~eD•ÛtT‰©±@¥ù@É¡‰ZcW|WqOJmĩl«ħşvOÓ«IqăV—¥ŸD[mI~Ó¢cehiÍ]Ɠ~ĥqXŠ·eƷœn±“}v•[ěďŽŕ]_‘œ•`‰¹ƒ§ÕōI™o©b­s^}Ét±ū«³p£ÿ·Wµ|¡¥ăFÏs׌¥ŅxŸÊdÒ{ºvĴÎêÌɊ²¶€ü¨|ÞƸµȲ‘LLúÉƎ¤ϊęĔV`„_bª‹S^|ŸdŠzY|dz¥p†ZbÆ£¶ÒK}tĦÔņƠ‚PYzn€ÍvX¶Ěn ĠÔ„zý¦ª˜÷žÑĸَUȌ¸‚dòÜJð´’ìúNM¬ŒXZ´‘¤ŊǸ_tldIš{¦ƀðĠȤ¥NehXnYG‚‡R° ƬDj¬¸|CĞ„Kq‚ºfƐiĺ©ª~ĆOQª ¤@ìǦɌ²æBŒÊ”TœŸ˜ʂōĖ’šĴŞ–ȀœÆÿȄlŤĒö„t”νî¼ĨXhŒ‘˜|ªM¤Ðz"],"encodeOffsets":[[116874,41716]]},"properties":{"cp":[112.549248,37.857014],"name":"山西","childNum":1}},{"id":"150000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@Č^â£Ăh–šĖMÈÄw‚\\fŦ°W ¢¾luŸD„wŠ\\̀ʉÌÛM…Ā[bӞEn}¶Vc…ê“sƒ–›¯PqƒFB…‰|S•³C|kñ•H‹d‘iÄ¥sˆʼnő…PóÑÑE^‘ÅPpy_YtS™hQ·aHwsOnʼnÚs©iqj›‰€USiº]ïWš‰«gW¡A–R붛ijʕ…Œů`çõh]y»ǃŸǛҤxÒm~zf}pf|ÜroÈzrKÈĵSƧ„ż؜Ġu¦ö"],["@@sKCš…GS|úþX”gp›{ÁX¿Ÿć{ƱȏñZáĔyoÁhA™}ŅĆfdʼn„_¹„Y°ėǩÑ¡H¯¶oMQqð¡Ë™|‘Ñ`ƭŁX½·óۓxğįÅcQ‡ˆ“ƒs«tȋDžF“Ÿù^i‘t«Č¯[›hAi©á¥ÇĚ×l|¹y¯YȵƓ‹ñǙµï‚ċ™Ļ|Dœ™üȭ¶¡˜›oŽäÕG\\ďT¿Òõr¯œŸLguÏYęRƩšɷŌO\\İТæ^Ŋ IJȶȆbÜGŽĝ¬¿ĚVĎgª^íu½jÿĕęjık@Ľƒ]ėl¥Ë‡ĭûÁ„ƒėéV©±ćn©­ȇžÍq¯½•YÃÔʼn“ÉNѝÅÝy¹NqáʅDǡËñ­ƁYÅy̱os§ȋµʽǘǏƬɱà‘ưN¢ƔÊuľýľώȪƺɂļžxœZĈ}ÌʼnŪ˜ĺœŽĭFЛĽ̅ȣͽÒŵìƩÇϋÿȮǡŏçƑůĕ~Ǎ›¼ȳÐUf†dIxÿ\\G ˆzâɏÙOº·pqy£†@ŒŠqþ@Ǟ˽IBäƣzsÂZ†ÁàĻdñ°ŕzéØűzșCìDȐĴĺf®ŽÀľưø@ɜÖÞKĊŇƄ§‚͑těï͡VAġÑÑ»d³öǍÝXĉĕÖ{þĉu¸ËʅğU̎éhɹƆ̗̮ȘNJ֥ड़ࡰţાíϲäʮW¬®ҌeרūȠkɬɻ̼ãüfƠSצɩςåȈHϚÎKdzͲOðÏȆƘ¼CϚǚ࢚˼ФԂ¤ƌžĞ̪Qʤ´¼mȠJˀŸƲÀɠmǐnǔĎȆÞǠN~€ʢĜ‚¶ƌĆĘźʆȬ˪ĚǏĞGȖƴƀj`ĢçĶāàŃºē̃ĖćšYŒÀŎüôQÐÂŎŞdžŞêƖš˜oˆDĤÕºÑǘÛˤ³̀gńƘĔÀ^žªƂ`ªt¾äƚêĦĀ¼Ð€Ĕǎ¨Ȕ»͠^ˮÊȦƤøxRrŜH¤¸ÂxDĝŒ|ø˂˜ƮÐ¬ɚwɲFjĔ²Äw°dždÀɞ_ĸdîàŎjʜêTĞªŌ‡ŜWÈ|tqĢUB~´°ÎFC•ŽU¼pĀēƄN¦¾O¶ŠłKĊOj“Ě”j´ĜYp˜{¦„ˆSĚÍ\\Tš×ªV–÷Ší¨ÅDK°ßtŇĔKš¨ǵÂcḷ̌ĚǣȄĽF‡lġUĵœŇ‹ȣFʉɁƒMğįʏƶɷØŭOǽ«ƽū¹Ʊő̝Ȩ§ȞʘĖiɜɶʦ}¨֪ࠜ̀ƇǬ¹ǨE˦ĥªÔêFŽxúQ„Er´W„rh¤Ɛ \\talĈDJ˜Ü|[Pll̚¸ƎGú´Pž¬W¦†^¦–H]prR“n|or¾wLVnÇIujkmon£cX^Bh`¥V”„¦U¤¸}€xRj–[^xN[~ªŠxQ„‚[`ªHÆÂExx^wšN¶Ê˜|¨ì†˜€MrœdYp‚oRzNy˜ÀDs~€bcfÌ`L–¾n‹|¾T‚°c¨È¢a‚r¤–`[|òDŞĔöxElÖdH„ÀI`„Ď\\Àì~ƎR¼tf•¦^¢ķ¶e”ÐÚMŒptgj–„ɡČÅyġLû™ŇV®ŠÄÈƀ†Ď°P|ªVV†ªj–¬ĚÒêp¬–E|ŬÂc|ÀtƐK fˆ{ĘFǜƌXƲąo½Ę‘\\¥–o}›Ûu£ç­kX‘{uĩ«āíÓUŅßŢq€Ť¥lyň[€oi{¦‹L‡ń‡ðFȪȖ”ĒL„¿Ì‹ˆfŒ£K£ʺ™oqNŸƒwğc`ue—tOj×°KJ±qƒÆġm‰Ěŗos¬…qehqsuœƒH{¸kH¡Š…ÊRǪÇƌbȆ¢´ä܍¢NìÉʖ¦â©Ż؛Ç@Vu»A—ylßí¹ĵê…ÝlISò³C¹Ìâ„²i¶’Ìoú^H“²CǜңDŽ z¼g^èöŰ_‹‚–†IJĕꄜ}gÁnUI«m‰…„‹]j‡vV¼euhwqA„aW˜ƒ_µj…»çjioQR¹ēÃßt@r³[ÛlćË^ÍÉáG“›OUۗOB±•XŸkŇ¹£k|e]ol™ŸkVͼÕqtaÏõjgÁ£§U^Œ”RLˆËnX°Ç’Bz†^~wfvˆypV ¯„ƫĉ˭ȫƗŷɿÿĿƑ˃ĝÿÃǃßËőó©ǐȍŒĖM×ÍEyx‹þp]Évïè‘vƀnÂĴÖ@‚‰†V~Ĉ™Š³MEˆĸÅĖt—ējyÄDXÄxGQuv_›i¦aBçw‘˛wD™©{ŸtāmQ€{EJ§KPśƘƿ¥@‰sCT•É}ɃwˆƇy±ŸgÑ“}T[÷kÐ禫…SÒ¥¸ëBX½‰HáŵÀğtSÝÂa[ƣ°¯¦P]£ġ“–“Òk®G²„èQ°óMq}EŠóƐÇ\\ƒ‡@áügQ͋u¥Fƒ“T՛¿Jû‡]|mvāÎYua^WoÀa·­ząÒot×¶CLƗi¯¤mƎHNJ¤îìɾŊìTdåwsRÖgĒųúÍġäÕ}Q¶—ˆ¿A•†‹[¡Œ{d×uQAƒ›M•xV‹vMOmăl«ct[wº_šÇʊŽŸjb£ĦS_é“QZ“_lwgOiýe`YYLq§IÁˆdz£ÙË[ÕªuƏ³ÍT—s·bÁĽäė[›b[ˆŗfãcn¥îC¿÷µ[ŏÀQ­ōšĉm¿Á^£mJVm‡—L[{Ï_£›F¥Ö{ŹA}…×Wu©ÅaųijƳhB{·TQqÙIķˑZđ©Yc|M¡…L•eVUóK_QWk’_ĥ‘¿ãZ•»X\\ĴuUƒè‡lG®ěłTĠğDєOrÍd‚ÆÍz]‹±…ŭ©ŸÅ’]ŒÅÐ}UË¥©Tċ™ïxgckfWgi\\ÏĒ¥HkµE˜ë{»ÏetcG±ahUiñiWsɁˆ·c–C‚Õk]wȑ|ća}w…VaĚ᠞ŒG°ùnM¬¯†{ÈˆÐÆA’¥ÄêJxÙ¢”hP¢Ûˆº€µwWOŸóFŽšÁz^ÀŗÎú´§¢T¤ǻƺSė‰ǵhÝÅQgvBHouʝl_o¿Ga{ïq{¥|ſĿHĂ÷aĝÇq‡Z‘ñiñC³ª—…»E`¨åXēÕqÉû[l•}ç@čƘóO¿¡ƒFUsA‰“ʽīccšocƒ‚ƒÇS}„“£‡IS~ălkĩXçmĈ…ŀЂoÐdxÒuL^T{r@¢‘žÍƒĝKén£kQ™‰yšÅõËXŷƏL§~}kqš»IHėDžjĝŸ»ÑÞoŸå°qTt|r©ÏS‹¯·eŨĕx«È[eMˆ¿yuˆ‘pN~¹ÏyN£{©’—g‹ħWí»Í¾s“əšDž_ÃĀɗ±ą™ijĉʍŌŷ—S›É“A‹±åǥɋ@럣R©ąP©}ĹªƏj¹erƒLDĝ·{i«ƫC£µ"]],"encodeOffsets":[[[127444,52594]],[[113793,40312]]]},"properties":{"cp":[111.670801,40.818311],"name":"内蒙古","childNum":2}},{"id":"210000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@L–Ž@@s™a"],["@@MnNm"],["@@d‚c"],["@@eÀ‚C@b‚“‰"],["@@f‡…Xwkbr–Ä`qg"],["@@^jtW‘Q"],["@@~ Y]c"],["@@G`ĔN^_¿Z‚ÃM"],["@@iX¶B‹Y"],["@@„YƒZ"],["@@L_{Epf"],["@@^WqCT\\"],["@@\\[“‹§t|”¤_"],["@@m`n_"],["@@Ïxnj{q_×^Giip"],["@@@œé^B†‡ntˆaÊU—˜Ÿ]x ¯ÄPIJ­°h€ʙK³†VˆÕ@Y~†|EvĹsDŽ¦­L^p²ŸÒG ’Ël]„xxÄ_˜fT¤Ď¤cŽœP„–C¨¸TVjbgH²sdÎdHt`Bˆ—²¬GJję¶[ÐhjeXdlwhšðSȦªVÊπ‹Æ‘Z˜ÆŶ®²†^ŒÎyÅÎcPqń“ĚDMħĜŁH­ˆk„çvV[ij¼W–‚YÀäĦ’‘`XlžR`žôLUVžfK–¢†{NZdĒª’YĸÌÚJRr¸SA|ƴgŴĴÆbvªØX~†źBŽ|¦ÕœEž¤Ð`\\|Kˆ˜UnnI]¤ÀÂĊnŎ™R®Ő¿¶\\ÀøíDm¦ÎbŨab‰œaĘ\\ľã‚¸a˜tÎSƐ´©v\\ÖÚÌǴ¤Â‡¨JKr€Z_Z€fjþhPkx€`Y”’RIŒjJcVf~sCN¤ ˆE‚œhæm‰–sHy¨SðÑÌ\\\\ŸĐRZk°IS§fqŒßýáЍÙÉÖ[^¯ǤŲ„ê´\\¦¬ĆPM¯£Ÿˆ»uïpùzEx€žanµyoluqe¦W^£ÊL}ñrkqWňûP™‰UP¡ôJŠoo·ŒU}£Œ„[·¨@XŒĸŸ“‹‹DXm­Ûݏº‡›GU‹CÁª½{íĂ^cj‡k“¶Ã[q¤“LÉö³cux«zZfƒ²BWÇ®Yß½ve±ÃC•ý£W{Ú^’q^sÑ·¨‹ÍOt“¹·C¥‡GD›rí@wÕKţ݋˜Ÿ«V·i}xËÍ÷‘i©ĝ‡ɝǡ]ƒˆ{c™±OW‹³Ya±Ÿ‰_穂Hžĕoƫ€Ňqƒr³‰Lys[„ñ³¯OS–ďOMisZ†±ÅFC¥Pq{‚Ã[Pg}\\—¿ghćO…•k^ģÁFıĉĥM­oEqqZûěʼn³F‘¦oĵ—hŸÕP{¯~TÍlª‰N‰ßY“Ð{Ps{ÃVU™™eĎwk±ʼnVÓ½ŽJãÇÇ»Jm°dhcÀff‘dF~ˆ€ĀeĖ€d`sx² šƒ®EżĀdQ‹Âd^~ăÔHˆ¦\\›LKpĄVez¤NP ǹӗR™ÆąJSh­a[¦´Âghwm€BÐ¨źhI|žVVŽ—Ž|p] Â¼èNä¶ÜBÖ¼“L`‚¼bØæŒKV”ŸpoœúNZÞÒKxpw|ÊEMnzEQšŽIZ”ŽZ‡NBˆčÚFÜçmĩ‚WĪñt‘ÞĵÇñZ«uD‚±|Əlij¥ãn·±PmÍa‰–da‡ CL‡Ǒkùó¡³Ï«QaċϑOÃ¥ÕđQȥċƭy‹³ÃA"]],"encodeOffsets":[[[123686,41445]],[[126019,40435]],[[124393,40128]],[[126117,39963]],[[125322,40140]],[[126686,40700]],[[126041,40374]],[[125584,40168]],[[125453,40165]],[[125362,40214]],[[125280,40291]],[[125774,39997]],[[125976,40496]],[[125822,39993]],[[125509,40217]],[[122731,40949]]]},"properties":{"cp":[123.429096,41.796767],"name":"辽宁","childNum":16}},{"id":"220000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@‘p䔳PClƒFbbÍzš€wBG’ĭ€Z„Åi“»ƒlY­ċ²SgŽkÇ£—^S‰“qd¯•‹R…©éŽ£¯S†\\cZ¹iűƏCuƍÓX‡oR}“M^o•£…R}oªU­F…uuXHlEŕ‡€Ï©¤ÛmTŽþ¤D–²ÄufàÀ­XXȱAe„yYw¬dvõ´KÊ£”\\rµÄl”iˆdā]|DÂVŒœH¹ˆÞ®ÜWnŒC”Œķ W‹§@\\¸‹ƒ~¤‹Vp¸‰póIO¢ŠVOšŇürXql~òÉK]¤¥Xrfkvzpm¶bwyFoúvð‡¼¤ N°ąO¥«³[ƒéǡű_°Õ\\ÚÊĝŽþâőàerR¨­JYlďQ[ ÏYëЧTGz•tnŠß¡gFkMŸāGÁ¤ia É‰™È¹`\\xs€¬dĆkNnuNUŠ–užP@‚vRY¾•–\\¢…ŒGªóĄ~RãÖÎĢù‚đŴÕhQŽxtcæëSɽʼníëlj£ƍG£nj°KƘµDsØÑpyƸ®¿bXp‚]vbÍZuĂ{nˆ^IüœÀSք”¦EŒvRÎûh@℈[‚Əȉô~FNr¯ôçR±ƒ­HÑl•’Ģ–^¤¢‚OðŸŒævxsŒ]ÞÁTĠs¶¿âƊGW¾ìA¦·TѬ†è¥€ÏÐJ¨¼ÒÖ¼ƒƦɄxÊ~S–tD@ŠĂ¼Ŵ¡jlºWžvЉˆzƦZЎ²CH— „Axiukd‹ŒGgetqmcžÛ£Ozy¥cE}|…¾cZ…k‚‰¿uŐã[oxGikfeäT@…šSUwpiÚFM©’£è^ڟ‚`@v¶eň†f h˜eP¶žt“äOlÔUgƒÞzŸU`lœ}ÔÆUvØ_Ō¬Öi^ĉi§²ÃŠB~¡Ĉ™ÚEgc|DC_Ȧm²rBx¼MÔ¦ŮdĨÃâYx‘ƘDVÇĺĿg¿cwÅ\\¹˜¥Yĭlœ¤žOv†šLjM_a W`zļMž·\\swqÝSA‡š—q‰Śij¯Š‘°kŠRē°wx^Đkǂғ„œž“œŽ„‹\\]˜nrĂ}²ĊŲÒøãh·M{yMzysěnĒġV·°“G³¼XÀ““™¤¹i´o¤ŃšŸÈ`̃DzÄUĞd\\i֚ŒˆmÈBĤÜɲDEh LG¾ƀľ{WaŒYÍȏĢĘÔRîĐj‹}Ǟ“ccj‡oUb½š{“h§Ǿ{K‹ƖµÎ÷žGĀÖŠåưÎs­l›•yiē«‹`姝H¥Ae^§„GK}iã\\c]v©ģZ“mÃ|“[M}ģTɟĵ‘Â`À–çm‰‘FK¥ÚíÁbXš³ÌQґHof{‰]e€pt·GŋĜYünĎųVY^’˜ydõkÅZW„«WUa~U·Sb•wGçǑ‚“iW^q‹F‚“›uNĝ—·Ew„‹UtW·Ýďæ©PuqEzwAV•—XR‰ãQ`­©GŒM‡ehc›c”ďϝd‡©ÑW_ϗYƅŒ»…é\\ƒɹ~ǙG³mØ©BšuT§Ĥ½¢Ã_ý‘L¡‘ýŸqT^rme™\\Pp•ZZbƒyŸ’uybQ—efµ]UhĿDCmûvašÙNSkCwn‰cćfv~…Y‹„ÇG"],"encodeOffsets":[[130196,42528]]},"properties":{"cp":[125.3245,43.886841],"name":"吉林","childNum":1}},{"id":"230000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@ƨƒĶTLÇyqpÇÛqe{~oyen}s‰`q‡iXG”ù]Ëp½“©lɇÁp]Þñ´FÔ^f‘äîºkà˜z¼BUvÈ@"],["@@UƒµNÿ¥īè灋•HÍøƕ¶LŒǽ|g¨|”™Ža¾pViˆdd”~ÈiŒíďÓQġėǐZ΋ŽXb½|ſÃH½ŸKFgɱCģÛÇA‡n™‹jÕc[VĝDZÃ˄Ç_™ £ń³pŽj£º”š¿”»WH´¯”U¸đĢmžtĜyzzNN|g¸÷äűѱĉā~mq^—Œ[ƒ”››”ƒǁÑďlw]¯xQĔ‰¯l‰’€°řĴrŠ™˜BˆÞTxr[tޏĻN_yŸX`biN™Ku…P›£k‚ZĮ—¦[ºxÆÀdhŽĹŀUÈƗCw’áZħÄŭcÓ¥»NAw±qȥnD`{ChdÙFćš}¢‰A±Äj¨]ĊÕjŋ«×`VuÓś~_kŷVÝyh„“VkÄãPs”Oµ—fŸge‚Ň…µf@u_Ù ÙcŸªNªÙEojVx™T@†ãSefjlwH\\pŏäÀvŠŽlY†½d{†F~¦dyz¤PÜndsrhf‹HcŒvlwjFœ£G˜±DύƥY‡yϊu¹XikĿ¦ÏqƗǀOŜ¨LI|FRĂn sª|Cš˜zxAè¥bœfudTrFWÁ¹Am|˜ĔĕsķÆF‡´Nš‰}ć…UŠÕ@Áijſmužç’uð^ÊýowŒFzØÎĕNőžǏȎôªÌŒDŽàĀÄ˄ĞŀƒʀĀƘŸˮȬƬĊ°ƒUŸzou‡xe]}Ž…AyȑW¯ÌmK‡“Q]‹Īºif¸ÄX|sZt|½ÚUΠlkš^p{f¤lˆºlÆW –€A²˜PVܜPH”Êâ]ÎĈÌÜk´\\@qàsĔÄQºpRij¼èi†`¶—„bXƒrBgxfv»ŽuUiˆŒ^v~”J¬mVp´£Œ´VWrnP½ì¢BX‚¬h™ŠðX¹^TjVœŠriªj™tŊÄm€tPGx¸bgRšŽsT`ZozÆO]’ÒFô҆Oƒ‡ŊŒvŞ”p’cGŒêŠsx´DR–Œ{A†„EOr°Œ•žx|íœbˆ³Wm~DVjºéNN†Ëܲɶ­GƒxŷCStŸ}]ûō•SmtuÇÃĕN•™āg»šíT«u}ç½BĵÞʣ¥ëÊ¡Mێ³ãȅ¡ƋaǩÈÉQ‰†G¢·lG|›„tvgrrf«†ptęŘnŠÅĢr„I²¯LiØsPf˜_vĠd„xM prʹšL¤‹¤‡eˌƒÀđK“žïÙVY§]I‡óáĥ]ķ†Kˆ¥Œj|pŇ\\kzţ¦šnņäÔVĂîά|vW’®l¤èØr‚˜•xm¶ă~lÄƯĄ̈́öȄEÔ¤ØQĄ–Ą»ƢjȦOǺ¨ìSŖÆƬy”Qœv`–cwƒZSÌ®ü±DŽ]ŀç¬B¬©ńzƺŷɄeeOĨS’Œfm Ċ‚ƀP̎ēz©Ċ‚ÄÕÊmgŸÇsJ¥ƔˆŊśæ’΁Ñqv¿íUOµª‰ÂnĦÁ_½ä@ê텣P}Ġ[@gġ}g“ɊדûÏWXá¢užƻÌsNͽƎÁ§č՛AēeL³àydl›¦ĘVçŁpśdžĽĺſʃQíÜçÛġԏsĕ¬—Ǹ¯YßċġHµ ¡eå`ļƒrĉŘóƢFì“ĎWøxÊk†”ƈdƬv|–I|·©NqńRŀƒ¤é”eŊœŀ›ˆàŀU²ŕƀB‚Q£Ď}L¹Îk@©ĈuǰųǨ”Ú§ƈnTËÇéƟÊcfčŤ^Xm‡—HĊĕË«W·ċëx³ǔķÐċJā‚wİ_ĸ˜Ȁ^ôWr­°oú¬Ħ…ŨK~”ȰCĐ´Ƕ£’fNÎèâw¢XnŮeÂÆĶŽ¾¾xäLĴĘlļO¤ÒĨA¢Êɚ¨®‚ØCÔ ŬGƠ”ƦYĜ‡ĘÜƬDJ—g_ͥœ@čŅĻA“¶¯@wÎqC½Ĉ»NŸăëK™ďÍQ“Ùƫ[«Ãí•gßÔÇOÝáW‘ñuZ“¯ĥ€Ÿŕā¡ÑķJu¤E Ÿå¯°WKɱ_d_}}vyŸõu¬ï¹ÓU±½@gÏ¿rýD‰†g…Cd‰µ—°MFYxw¿CG£‹Rƛ½Õ{]L§{qqąš¿BÇƻğëšܭNJË|c²}Fµ}›ÙRsÓpg±ŠQNqǫŋRwŕnéÑÉKŸ†«SeYR…ŋ‹@{¤SJ}šD Ûǖ֍Ÿ]gr¡µŷjqWÛham³~S«“„›Þ]"]],"encodeOffsets":[[[127123,51780]],[[134456,44547]]]},"properties":{"cp":[126.642464,45.756967],"name":"黑龙江","childNum":2}},{"id":"320000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@cþÅPiŠ`ZŸRu¥É\\]~°ŽY`µ†Óƒ^phÁbnÀşúŽòa–ĬºTÖŒb‚˜e¦¦€{¸ZâćNpŒ©žHr|^ˆmjhŠSEb\\afv`sz^lkŽlj‹Ätg‹¤D˜­¾Xš¿À’|ДiZ„ȀåB·î}GL¢õcßjaŸyBFµÏC^ĭ•cÙt¿sğH]j{s©HM¢ƒQnDÀ©DaÜތ·jgàiDbPufjDk`dPOîƒhw¡ĥ‡¥šG˜ŸP²ĐobºrY†„î¶aHŢ´ ]´‚rılw³r_{£DB_Ûdåuk|ˆŨ¯F Cºyr{XFy™e³Þċ‡¿Â™kĭB¿„MvÛpm`rÚã”@ƹhågËÖƿxnlč¶Åì½Ot¾dJlŠVJʜǀœŞqvnOŠ^ŸJ”Z‘ż·Q}ê͎ÅmµÒ]Žƍ¦Dq}¬R^èĂ´ŀĻĊIԒtžIJyQŐĠMNtœR®òLh‰›Ěs©»œ}OӌGZz¶A\\jĨFˆäOĤ˜HYš†JvÞHNiÜaϚɖnFQlšNM¤ˆB´ĄNöɂtp–Ŭdf先‹qm¿QûŠùއÚb¤uŃJŴu»¹Ą•lȖħŴw̌ŵ²ǹǠ͛hĭłƕrçü±Y™xci‡tğ®jű¢KOķ•Coy`å®VTa­_Ā]ŐÝɞï²ʯÊ^]afYǸÃĆēĪȣJđ͍ôƋĝÄ͎ī‰çÛɈǥ£­ÛmY`ó£Z«§°Ó³QafusNıDž_k}¢m[ÝóDµ—¡RLčiXy‡ÅNïă¡¸iĔϑNÌŕoēdōîåŤûHcs}~Ûwbù¹£¦ÓCt‹OPrƒE^ÒoŠg™ĉIµžÛÅʹK…¤½phMŠü`o怆ŀ"],"encodeOffsets":[[121740,32276]]},"properties":{"cp":[118.767413,32.041544],"name":"江苏","childNum":1}},{"id":"330000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@E^dQ]K"],["@@jX^j‡"],["@@sfŠbU‡"],["@@qP\\xz[ck"],["@@‘Rƒ¢‚FX}°[s_"],["@@Cbœ\\—}"],["@@e|v\\la{u"],["@@v~u}"],["@@QxÂF¯}"],["@@¹nŒvÞs¯o"],["@@rSkUEj"],["@@bi­ZŒP"],["@@p[}INf"],["@@À¿€"],["@@¹dnbŒ…"],["@@rSŸBnR"],["@@g~h}"],["@@FlEk"],["@@OdPc"],["@@v[u\\"],["@@FjâL~wyoo~›sµL–\\"],["@@¬e¹aNˆ"],["@@\\nÔ¡q]L³ë\\ÿ®ŒQ֎"],["@@ÊA­©[¬"],["@@KxŒv­"],["@@@hlIk]"],["@@pW{o||j"],["@@Md|_mC"],["@@¢…X£ÏylD¼XˆtH"],["@@hlÜ[LykAvyfw^Ež›¤"],["@@fp¤Mus“R"],["@@®_ma~•LÁ¬šZ"],["@@iM„xZ"],["@@ZcYd"],["@@Z~dOSo|A¿qZv"],["@@@`”EN¡v"],["@@|–TY{"],["@@@n@m"],["@@XWkCT\\"],["@@ºwšZRkĕWO¢"],["@@™X®±Grƪ\\ÔáXq{‹"],["@@ůTG°ĄLHm°UC‹"],["@@¤Ž€aÜx~}dtüGæţŎíĔcŖpMËВj碷ðĄÆMzˆjWKĎ¢Q¶˜À_꒔_Bı€i«pZ€gf€¤Nrq]§ĂN®«H±‡yƳí¾×ŸīàLłčŴǝĂíÀBŖÕªˆŠÁŖHŗʼnåqûõi¨hÜ·ƒñt»¹ýv_[«¸m‰YL¯‰Qª…mĉÅdMˆ•gÇjcº«•ęœ¬­K­´ƒB«Âącoċ\\xKd¡gěŧ«®á’[~ıxu·Å”KsËɏc¢Ù\\ĭƛëbf¹­ģSƒĜkáƉÔ­ĈZB{ŠaM‘µ‰fzʼnfåÂŧįƋǝÊĕġć£g³ne­ą»@­¦S®‚\\ßðCšh™iqªĭiAu‡A­µ”_W¥ƣO\\lċĢttC¨£t`ˆ™PZäuXßBs‡Ļyek€OđġĵHuXBšµ]׌‡­­\\›°®¬F¢¾pµ¼kŘó¬Wät’¸|@ž•L¨¸µr“ºù³Ù~§WI‹ŸZWŽ®’±Ð¨ÒÉx€`‰²pĜ•rOògtÁZ}þÙ]„’¡ŒŸFK‚wsPlU[}¦Rvn`hq¬\\”nQ´ĘRWb”‚_ rtČFI֊kŠŠĦPJ¶ÖÀÖJĈĄTĚòžC ²@Pú…Øzœ©PœCÈÚœĒ±„hŖ‡l¬â~nm¨f©–iļ«m‡nt–u†ÖZÜÄj“ŠLŽ®E̜Fª²iÊxبžIÈhhst"],["@@o\\V’zRZ}y"],["@@†@°¡mۛGĕ¨§Ianá[ýƤjfæ‡ØL–•äGr™"]],"encodeOffsets":[[[125592,31553]],[[125785,31436]],[[125729,31431]],[[125513,31380]],[[125223,30438]],[[125115,30114]],[[124815,29155]],[[124419,28746]],[[124095,28635]],[[124005,28609]],[[125000,30713]],[[125111,30698]],[[125078,30682]],[[125150,30684]],[[124014,28103]],[[125008,31331]],[[125411,31468]],[[125329,31479]],[[125626,30916]],[[125417,30956]],[[125254,30976]],[[125199,30997]],[[125095,31058]],[[125083,30915]],[[124885,31015]],[[125218,30798]],[[124867,30838]],[[124755,30788]],[[124802,30809]],[[125267,30657]],[[125218,30578]],[[125200,30562]],[[124968,30474]],[[125167,30396]],[[124955,29879]],[[124714,29781]],[[124762,29462]],[[124325,28754]],[[123990,28459]],[[125366,31477]],[[125115,30363]],[[125369,31139]],[[122495,31878]],[[125329,30690]],[[125192,30787]]]},"properties":{"cp":[120.153576,30.287459],"name":"浙江","childNum":45}},{"id":"340000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@^iuLX^"],["@@‚e©Ehl"],["@@°ZÆëϵmkǀwÌÕæhºgBĝâqÙĊz›ÖgņtÀÁÊÆá’hEz|WzqD¹€Ÿ°E‡ŧl{ævÜcA`¤C`|´qžxIJkq^³³ŸGšµbƒíZ…¹qpa±ď OH—¦™Ħˆx¢„gPícOl_iCveaOjCh߸i݋bÛªCC¿€m„RV§¢A|t^iĠGÀtÚs–d]ĮÐDE¶zAb àiödK¡~H¸íæAžǿYƒ“j{ď¿‘™À½W—®£ChŒÃsiŒkkly]_teu[bFa‰Tig‡n{]Gqªo‹ĈMYá|·¥f¥—őaSÕė™NµñĞ«ImŒ_m¿Âa]uĜp …Z_§{Cƒäg¤°r[_Yj‰ÆOdý“[ŽI[á·¥“Q_n‡ùgL¾mv™ˊBÜÆ¶ĊJhšp“c¹˜O]iŠ]œ¥ jtsggJǧw×jÉ©±›EFˍ­‰Ki”ÛÃÕYv…s•ˆm¬njĻª•§emná}k«ŕˆƒgđ²Ù›DǤ›í¡ªOy›†×Où±@DŸñSęćăÕIÕ¿IµĥO‰‰jNÕËT¡¿tNæŇàåyķrĕq§ÄĩsWÆßŽF¶žX®¿‰mŒ™w…RIޓfßoG‘³¾©uyH‘į{Ɓħ¯AFnuP…ÍÔzšŒV—dàôº^Ðæd´€‡oG¤{S‰¬ćxã}›ŧ×Kǥĩ«žÕOEзÖdÖsƘѨ[’Û^Xr¢¼˜§xvěƵ`K”§ tÒ´Cvlo¸fzŨð¾NY´ı~ÉĔē…ßúLÃϖ_ÈÏ|]ÂÏFl”g`bšežž€n¾¢pU‚h~ƴ˶_‚r sĄ~cž”ƈ]|r c~`¼{À{ȒiJjz`îÀT¥Û³…]’u}›f…ïQl{skl“oNdŸjŸäËzDvčoQŠďHI¦rb“tHĔ~BmlRš—V_„ħTLnñH±’DžœL‘¼L˜ªl§Ťa¸ŒĚlK²€\\RòvDcÎJbt[¤€D@®hh~kt°ǾzÖ@¾ªdb„YhüóZ ň¶vHrľ\\ʗJuxAT|dmÀO„‹[ÃԋG·ĚąĐlŪÚpSJ¨ĸˆLvÞcPæķŨŽ®mАˆálŸwKhïgA¢ųƩޖ¤OȜm’°ŒK´"]],"encodeOffsets":[[[121722,32278]],[[119475,30423]],[[119168,35472]]]},"properties":{"cp":[117.283042,31.86119],"name":"安徽","childNum":3}},{"id":"350000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@“zht´‡]"],["@@aj^~ĆG—©O"],["@@ed¨„C}}i"],["@@@vˆPGsQ"],["@@‰sBz‚ddW]Q"],["@@SލQ“{"],["@@NŽVucW"],["@@qptBAq"],["@@‰’¸[mu"],["@@Q\\pD]_"],["@@jSwUadpF"],["@@eXª~ƒ•"],["@@AjvFso"],["@@fT–›_Çí\\Ÿ™—v|ba¦jZÆy€°"],["@@IjJi"],["@@wJI€ˆxš«¼AoNe{M­"],["@@K‰±¡Óˆ”ČäeZ"],["@@k¡¹Eh~c®wBk‹UplÀ¡I•~Māe£bN¨gZý¡a±Öcp©PhžI”Ÿ¢Qq…ÇGj‹|¥U™ g[Ky¬ŏ–v@OpˆtÉEŸF„\\@ åA¬ˆV{Xģ‰ĐBy…cpě…¼³Ăp·¤ƒ¥o“hqqÚ¡ŅLsƒ^ᗞ§qlŸÀhH¨MCe»åÇGD¥zPO£čÙkJA¼ß–ėu›ĕeûҍiÁŧSW¥˜QŠûŗ½ùěcݧSùĩąSWó«íęACµ›eR—åǃRCÒÇZÍ¢‹ź±^dlsŒtjD¸•‚ZpužÔâÒH¾oLUêÃÔjjēò´ĄW‚ƛ…^Ñ¥‹ĦŸ@Çò–ŠmŒƒOw¡õyJ†yD}¢ďÑÈġfŠZd–a©º²z£šN–ƒjD°Ötj¶¬ZSÎ~¾c°¶Ðm˜x‚O¸¢Pl´žSL|¥žA†ȪĖM’ņIJg®áIJČĒü` ŽQF‡¬h|ÓJ@zµ |ê³È ¸UÖŬŬÀEttĸr‚]€˜ðŽM¤ĶIJHtÏ A’†žĬkvsq‡^aÎbvŒd–™fÊòSD€´Z^’xPsÞrv‹ƞŀ˜jJd×ŘÉ ®A–ΦĤd€xĆqAŒ†ZR”ÀMźŒnĊ»ŒİÐZ— YX–æJŠyĊ²ˆ·¶q§·–K@·{s‘Xãô«lŗ¶»o½E¡­«¢±¨Yˆ®Ø‹¶^A™vWĶGĒĢžPlzfˆļŽtàAvWYãšO_‡¤sD§ssČġ[kƤPX¦Ž`¶“ž®ˆBBvĪjv©šjx[L¥àï[F…¼ÍË»ğV`«•Ip™}ccÅĥZE‹ãoP…´B@ŠD—¸m±“z«Ƴ—¿å³BRضˆœWlâþäą`“]Z£Tc— ĹGµ¶H™m@_©—kŒ‰¾xĨ‡ôȉðX«½đCIbćqK³Á‹Äš¬OAwã»aLʼn‡ËĥW[“ÂGI—ÂNxij¤D¢ŽîĎÎB§°_JœGsƒ¥E@…¤uć…P‘å†cuMuw¢BI¿‡]zG¹guĮck\\_"]],"encodeOffsets":[[[123250,27563]],[[122541,27268]],[[123020,27189]],[[122916,27125]],[[122887,26845]],[[122808,26762]],[[122568,25912]],[[122778,26197]],[[122515,26757]],[[122816,26587]],[[123388,27005]],[[122450,26243]],[[122578,25962]],[[121255,25103]],[[120987,24903]],[[122339,25802]],[[121042,25093]],[[122439,26024]]]},"properties":{"cp":[119.306239,26.075302],"name":"福建","childNum":18}},{"id":"360000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ĢĨƐgÂMD~ņªe^\\^§„ý©j׍cZ†Ø¨zdÒa¶ˆlҍJŒìõ`oz÷@¤u޸´†ôęöY¼‰HČƶajlÞƩ¥éZ[”|h}^U Œ ¥p„ĄžƦO lt¸Æ €Q\\€ŠaÆ|CnÂOjt­ĚĤd’ÈŒF`’¶„@Ð딠¦ōҞ¨Sêv†HĢûXD®…QgėWiØPÞìºr¤dž€NĠ¢l–•ĄtZoœCƞÔºCxrpĠV®Ê{f_Y`_ƒeq’’®Aot`@o‚DXfkp¨|Šs¬\\D‘ÄSfè©Hn¬…^DhÆyøJh“ØxĢĀLʈ„ƠPżċĄwȠ̦G®ǒĤäTŠÆ~ĦwŠ«|TF¡Šn€c³Ïå¹]ĉđxe{ÎӐ†vOEm°BƂĨİ|G’vz½ª´€H’àp”eJ݆Qšxn‹ÀŠW­žEµàXÅĪt¨ÃĖrÄwÀFÎ|ňÓMå¼ibµ¯»åDT±m[“r«_gŽmQu~¥V\\OkxtL E¢‹ƒ‘Ú^~ýê‹Pó–qo슱_Êw§ÑªåƗ⼋mĉŹ‹¿NQ“…YB‹ąrwģcÍ¥B•Ÿ­ŗÊcØiI—žƝĿuŒqtāwO]‘³YCñTeɕš‹caub͈]trlu€ī…B‘ПGsĵıN£ï—^ķqss¿FūūV՟·´Ç{éĈý‰ÿ›OEˆR_ŸđûIċâJh­ŅıN‘ȩĕB…¦K{Tk³¡OP·wn—µÏd¯}½TÍ«YiµÕsC¯„iM•¤™­•¦¯P|ÿUHv“he¥oFTu‰õ\\ŽOSs‹MòđƇiaºćXŸĊĵà·çhƃ÷ǜ{‘ígu^›đg’m[×zkKN‘¶Õ»lčÓ{XSƉv©_ÈëJbVk„ĔVÀ¤P¾ºÈMÖxlò~ªÚàGĂ¢B„±’ÌŒK˜y’áV‡¼Ã~­…`g›ŸsÙfI›Ƌlę¹e|–~udjˆuTlXµf`¿JdŠ[\\˜„L‚‘²"],"encodeOffsets":[[116689,26234]]},"properties":{"cp":[115.892151,28.676493],"name":"江西","childNum":1}},{"id":"370000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@Xjd]{K"],["@@itbFHy"],["@@HlGk"],["@@T‚ŒGŸy"],["@@K¬˜•‹U"],["@@WdXc"],["@@PtOs"],["@@•LnXhc"],["@@ppVƒu]Or"],["@@cdzAUa"],["@@udRhnCI‡"],["@@ˆoIƒpR„"],["@@Ľč{fzƤî’Kš–ÎMĮ]†—ZFˆ½Y]â£ph’™š¶¨râøÀ†ÎǨ¤^ºÄ”Gzˆ~grĚĜlĞÆ„LĆdž¢Îo¦–cv“Kb€gr°Wh”mZp ˆL]LºcU‰Æ­n”żĤÌǜbAnrOAœ´žȊcÀbƦUØrĆUÜøœĬƞ†š˜Ez„VL®öØBkŖÝĐ˹ŧ̄±ÀbÎɜnb²ĦhņBĖ›žįĦåXćì@L¯´ywƕCéõė ƿ¸‘lµ¾Z|†ZWyFYŸ¨Mf~C¿`€à_RÇzwƌfQnny´INoƬˆèôº|sT„JUš›‚L„îVj„ǎ¾Ē؍‚Dz²XPn±ŴPè¸ŔLƔÜƺ_T‘üÃĤBBċȉöA´fa„˜M¨{«M`‡¶d¡ô‰Ö°šmȰBÔjjŒ´PM|”c^d¤u•ƒ¤Û´Œä«ƢfPk¶Môlˆ]Lb„}su^ke{lC‘…M•rDŠÇ­]NÑFsmoõľH‰yGă{{çrnÓE‰‹ƕZGª¹Fj¢ïW…uøCǷ돡ąuhÛ¡^Kx•C`C\\bÅxì²ĝÝ¿_N‰īCȽĿåB¥¢·IŖÕy\\‡¹kx‡Ã£Č×GDyÕ¤ÁçFQ¡„KtŵƋ]CgÏAùSed‡cÚź—ŠuYfƒyMmhUWpSyGwMPqŀ—›Á¼zK›¶†G•­Y§Ëƒ@–´śÇµƕBmœ@Io‚g——Z¯u‹TMx}C‘‰VK‚ï{éƵP—™_K«™pÛÙqċtkkù]gŽ‹Tğwo•ɁsMõ³ă‡AN£™MRkmEʕč™ÛbMjÝGu…IZ™—GPģ‡ãħE[iµBEuŸDPԛ~ª¼ętŠœ]ŒûG§€¡QMsğNPŏįzs£Ug{đJĿļā³]ç«Qr~¥CƎÑ^n¶ÆéÎR~ݏY’I“] P‰umŝrƿ›‰›Iā‹[x‰edz‹L‘¯v¯s¬ÁY…~}…ťuٌg›ƋpÝĄ_ņī¶ÏSR´ÁP~ž¿Cyžċßdwk´Ss•X|t‰`Ä Èð€AªìÎT°¦Dd–€a^lĎDĶÚY°Ž`ĪŴǒˆ”àŠv\\ebŒZH„ŖR¬ŢƱùęO•ÑM­³FۃWp[ƒ"]],"encodeOffsets":[[[123806,39303]],[[123821,39266]],[[123742,39256]],[[123702,39203]],[[123649,39066]],[[123847,38933]],[[123580,38839]],[[123894,37288]],[[123043,36624]],[[123344,38676]],[[123522,38857]],[[123628,38858]],[[118260,36742]]]},"properties":{"cp":[117.000923,36.675807],"name":"山东","childNum":13}},{"id":"410000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@•ýL™ùµP³swIÓxcŢĞð†´E®žÚPt†ĴXØx¶˜@«ŕŕQGƒ‹Yfa[şu“ßǩ™đš_X³ijÕčC]kbc•¥CS¯ëÍB©÷‹–³­Siˆ_}m˜YTtž³xlàcȂzÀD}ÂOQ³ÐTĨ¯†ƗòËŖ[hœł‹Ŧv~††}ÂZž«¤lPǕ£ªÝŴÅR§ØnhcŒtâk‡nύ­ľŹUÓÝdKuķ‡I§oTũÙďkęĆH¸ÓŒ\\ăŒ¿PcnS{wBIvɘĽ[GqµuŸŇôYgûƒZcaŽ©@½Õǽys¯}lgg@­C\\£as€IdÍuCQñ[L±ęk·‹ţb¨©kK—’»›KC²‘òGKmĨS`ƒ˜UQ™nk}AGē”sqaJ¥ĐGR‰ĎpCuÌy ã iMc”plk|tRk†ðœev~^‘´†¦ÜŽSí¿_iyjI|ȑ|¿_»d}qŸ^{“Ƈdă}Ÿtqµ`Ƴĕg}V¡om½fa™Ço³TTj¥„tĠ—Ry”K{ùÓjuµ{t}uËR‘iŸvGŠçJFjµŠÍyqΘàQÂFewixGw½Yŷpµú³XU›½ġy™łå‰kÚwZXˆ·l„¢Á¢K”zO„Λ΀jc¼htoDHr…|­J“½}JZ_¯iPq{tę½ĕ¦Zpĵø«kQ…Ťƒ]MÛfaQpě±ǽ¾]u­Fu‹÷nƒ™čįADp}AjmcEǒaª³o³ÆÍSƇĈÙDIzˑ赟^ˆKLœ—i—Þñ€[œƒaA²zz‰Ì÷Dœ|[šíijgf‚ÕÞd®|`ƒĆ~„oĠƑô³Ŋ‘D×°¯CsŠøÀ«ì‰UMhTº¨¸ǡîS–Ô„DruÂÇZ•ÖEŽ’vPZ„žW”~؋ÐtĄE¢¦Ðy¸bŠô´oŬ¬Ž²Ês~€€]®tªašpŎJ¨Öº„_ŠŔ–`’Ŗ^Ѝ\\Ĝu–”~m²Ƹ›¸fW‰ĦrƔ}Î^gjdfÔ¡J}\\n C˜¦þWxªJRÔŠu¬ĨĨmF†dM{\\d\\ŠYÊ¢ú@@¦ª²SŠÜsC–}fNècbpRmlØ^g„d¢aÒ¢CZˆZxvÆ¶N¿’¢T@€uCœ¬^ĊðÄn|žlGl’™Rjsp¢ED}€Fio~ÔNŽ‹„~zkĘHVsDzßjƒŬŒŠŢ`Pûàl¢˜\\ÀœEhŽİgÞē X¼Pk–„|m"],"encodeOffsets":[[118256,37017]]},"properties":{"cp":[113.665412,34.757975],"name":"河南","childNum":1}},{"id":"420000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AB‚"],["@@lskt"],["@@¾«}{ra®pîÃ\\™›{øCŠËyyB±„b\\›ò˜Ý˜jK›‡L ]ĎĽÌ’JyÚCƈćÎT´Å´pb©È‘dFin~BCo°BĎĚømvŒ®E^vǾ½Ĝ²Ro‚bÜeNŽ„^ĺ£R†¬lĶ÷YoĖ¥Ě¾|sOr°jY`~I”¾®I†{GqpCgyl{‡£œÍƒÍyPL“¡ƒ¡¸kW‡xYlÙæŠšŁĢzœ¾žV´W¶ùŸo¾ZHxjwfx„GNÁ•³Xéæl¶‰EièIH‰ u’jÌQ~v|sv¶Ôi|ú¢Fh˜Qsğ¦ƒSiŠBg™ÐE^ÁÐ{–čnOÂȞUÎóĔ†ÊēIJ}Z³½Mŧïeyp·uk³DsѨŸL“¶_œÅuèw»—€¡WqÜ]\\‘Ò§tƗcÕ¸ÕFÏǝĉăxŻČƟO‡ƒKÉġÿ×wg”÷IÅzCg†]m«ªGeçÃTC’«[‰t§{loWeC@ps_Bp‘­r‘„f_``Z|ei¡—oċMqow€¹DƝӛDYpûs•–‹Ykıǃ}s¥ç³[§ŸcYЧHK„«Qy‰]¢“wwö€¸ïx¼ņ¾Xv®ÇÀµRĠЋžHMž±cÏd„ƒǍũȅȷ±DSyúĝ£ŤĀàtÖÿï[îb\\}pĭÉI±Ñy…¿³x¯N‰o‰|¹H™ÏÛm‹júË~Tš•u˜ęjCöAwě¬R’đl¯ Ñb­‰ŇT†Ŀ_[Œ‘IčĄʿnM¦ğ\\É[T·™k¹œ©oĕ@A¾w•ya¥Y\\¥Âaz¯ãÁ¡k¥ne£Ûw†E©Êō¶˓uoj_Uƒ¡cF¹­[Wv“P©w—huÕyBF“ƒ`R‹qJUw\\i¡{jŸŸEPïÿ½fć…QÑÀQ{ž‚°‡fLԁ~wXg—ītêݾ–ĺ‘Hdˆ³fJd]‹HJ²…E€ƒoU¥†HhwQsƐ»Xmg±çve›]Dm͂PˆoCc¾‹_h”–høYrŊU¶eD°Č_N~øĹĚ·`z’]Äþp¼…äÌQŒv\\rCŒé¾TnkžŐڀÜa‡“¼ÝƆ̶Ûo…d…ĔňТJq’Pb ¾|JŒ¾fXŠƐîĨ_Z¯À}úƲ‹N_ĒĊ^„‘ĈaŐyp»CÇĕKŠšñL³ŠġMŒ²wrIÒŭxjb[œžn«øœ˜—æˆàƒ ^²­h¯Ú€ŐªÞ¸€Y²ĒVø}Ā^İ™´‚LŠÚm„¥ÀJÞ{JVŒųÞŃx×sxxƈē ģMř–ÚðòIf–Ċ“Œ\\Ʈ±ŒdʧĘD†vČ_Àæ~DŒċ´A®µ†¨ØLV¦êHÒ¤"]],"encodeOffsets":[[[113712,34000]],[[115612,30507]],[[113649,34054]]]},"properties":{"cp":[114.298572,30.584355],"name":"湖北","childNum":3}},{"id":"430000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@—n„FTs"],["@@ßÅÆá‰½ÔXr—†CO™“…ËR‘ïÿĩ­TooQyšÓ[‹ŅBE¬–ÎÓXa„į§Ã¸G °ITxp‰úxÚij¥Ïš–̾ŠedžÄ©ĸG…œàGh‚€M¤–Â_U}Ċ}¢pczfŠþg¤€”ÇòAV‘‹M"],["@@©K—ƒA·³CQ±Á«³BUŠƑ¹AŠtćOw™D]ŒJiØSm¯b£‘ylƒ›X…HËѱH•«–‘C^õľA–Å§¤É¥„ïyuǙuA¢^{ÌC´­¦ŷJ£^[†“ª¿‡ĕ~•Ƈ…•N… skóā‡¹¿€ï]ă~÷O§­@—Vm¡‹Qđ¦¢Ĥ{ºjԏŽŒª¥nf´•~ÕoŸž×Ûą‹MąıuZœmZcÒ IJβSÊDŽŶ¨ƚƒ’CÖŎªQؼrŭŽ­«}NÏürʬŒmjr€@ĘrTW ­SsdHzƓ^ÇÂyUi¯DÅYlŹu{hTœ}mĉ–¹¥ě‰Dÿë©ıÓ[Oº£ž“¥ót€ł¹MՄžƪƒ`Pš…Di–ÛUоÅ‌ìˆU’ñB“È£ýhe‰dy¡oċ€`pfmjP~‚kZa…ZsÐd°wj§ƒ@€Ĵ®w~^‚kÀÅKvNmX\\¨a“”сqvíó¿F„¤¡@ũÑVw}S@j}¾«pĂr–ªg àÀ²NJ¶¶Dô…K‚|^ª†Ž°LX¾ŴäPᜣEXd›”^¶›IJÞܓ~‘u¸ǔ˜Ž›MRhsR…e†`ÄofIÔ\\Ø  i”ćymnú¨cj ¢»–GČìƊÿШXeĈ¾Oð Fi ¢|[jVxrIQŒ„_E”zAN¦zLU`œcªx”OTu RLÄ¢dV„i`p˔vŎµªÉžF~ƒØ€d¢ºgİàw¸Áb[¦Zb¦–z½xBĖ@ªpº›šlS¸Ö\\Ĕ[N¥ˀmĎă’J\\‹ŀ`€…ňSڊĖÁĐiO“Ĝ«BxDõĚiv—ž–S™Ì}iùŒžÜnšÐºGŠ{Šp°M´w†ÀÒzJ²ò¨ oTçüöoÛÿñŽőФ‚ùTz²CȆȸǎۃƑÐc°dPÎŸğ˶[Ƚu¯½WM¡­Éž“’B·rížnZŸÒ `‡¨GA¾\\pē˜XhÆRC­üWGġu…T靧Ŏѝ©ò³I±³}_‘‹EÃħg®ęisÁPDmÅ{‰b[Rşs·€kPŸŽƥƒóRo”O‹ŸVŸ~]{g\\“êYƪ¦kÝbiċƵŠGZ»Ěõ…ó·³vŝž£ø@pyö_‹ëŽIkѵ‡bcѧy…×dY؎ªiþž¨ƒ[]f]Ņ©C}ÁN‡»hĻħƏ’ĩ"]],"encodeOffsets":[[[115640,30489]],[[112543,27312]],[[116690,26230]]]},"properties":{"cp":[112.982279,28.19409],"name":"湖南","childNum":3}},{"id":"440000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@QdˆAua"],["@@ƒlxDLo"],["@@sbhNLo"],["@@Ă āŸ"],["@@WltO[["],["@@Krœ]S"],["@@e„„I]y"],["@@I|„Mym"],["@@ƒÛ³LSŒž¼Y"],["@@nvºB–ëui©`¾"],["@@zdšÛ›Jw®"],["@@†°…¯"],["@@a yAª¸ËJIx،@€ĀHAmßV¡o•fu•o"],["@@šs‰ŗÃÔėAƁ›ZšÄ ~°ČP‚‹äh"],["@@‹¶Ý’Ì‚vmĞh­ı‡Q"],["@@HœŠdSjĒ¢D}war…“u«ZqadYM"],["@@elŒ\\LqqU"],["@@~rMo\\"],["@@f„^ƒC"],["@@øPªoj÷ÍÝħXČx”°Q¨ıXNv"],["@@gÇƳˆŽˆ”oˆŠˆ[~tly"],["@@E–ÆC¿‘"],["@@OŽP"],["@@w‹†đóg‰™ĝ—[³‹¡VÙæÅöM̳¹pÁaËýý©D©Ü“JŹƕģGą¤{Ùū…ǘO²«BƱéA—Ò‰ĥ‡¡«BhlmtÃPµyU¯uc“d·w_bŝcīímGOŽ|KP’ȏ‡ŹãŝIŕŭŕ@Óoo¿ē‹±ß}Ž…ŭ‚ŸIJWÈCőâUâǙI›ğʼn©I›ijEׅÁ”³Aó›wXJþ±ÌŒÜӔĨ£L]ĈÙƺZǾĆĖMĸĤfŒÎĵl•ŨnȈ‘ĐtF”Š–FĤ–‚êk¶œ^k°f¶gŠŽœ}®Fa˜f`vXŲxl˜„¦–ÔÁ²¬ÐŸ¦pqÊ̲ˆi€XŸØRDÎ}†Ä@ZĠ’s„x®AR~®ETtĄZ†–ƈfŠŠHâÒÐA†µ\\S¸„^wĖkRzŠalŽŜ|E¨ÈNĀňZTŒ’pBh£\\ŒĎƀuXĖtKL–¶G|Ž»ĺEļĞ~ÜĢÛĊrˆO˜Ùîvd]nˆ¬VœÊĜ°R֟pM††–‚ƂªFbwžEÀˆ˜©Œž\\…¤]ŸI®¥D³|ˎ]CöAŤ¦…æ’´¥¸Lv¼€•¢ĽBaô–F~—š®²GÌҐEY„„œzk¤’°ahlV՞I^‹šCxĈPŽsB‰ƒºV‰¸@¾ªR²ĨN]´_eavSi‡vc•}p}Đ¼ƌkJœÚe thœ†_¸ ºx±ò_xN›Ë‹²‘@ƒă¡ßH©Ùñ}wkNÕ¹ÇO½¿£ĕ]ly_WìIžÇª`ŠuTÅxYĒÖ¼k֞’µ‚MžjJÚwn\\h‘œĒv]îh|’È›Ƅøègž¸Ķß ĉĈWb¹ƀdéƌNTtP[ŠöSvrCZžžaGuœbo´ŖÒÇА~¡zCI…özx¢„Pn‹•‰Èñ @ŒĥÒ¦†]ƞŠV}³ăĔñiiÄÓVépKG½Ä‘ÓávYo–C·sit‹iaÀy„ŧΡÈYDÑům}‰ý|m[węõĉZÅxUO}÷N¹³ĉo_qtă“qwµŁYلǝŕ¹tïÛUïmRCº…ˆĭ|µ›ÕÊK™½R‘ē ó]‘–GªęAx–»HO£|ām‡¡diď×YïYWªʼnOeÚtĐ«zđ¹T…ā‡úE™á²\\‹ķÍ}jYàÙÆſ¿Çdğ·ùTßÇţʄ¡XgWÀLJğ·¿ÃˆOj YÇ÷Qě‹i"]],"encodeOffsets":[[[117381,22988]],[[116552,22934]],[[116790,22617]],[[116973,22545]],[[116444,22536]],[[116931,22515]],[[116496,22490]],[[116453,22449]],[[113301,21439]],[[118726,21604]],[[118709,21486]],[[113210,20816]],[[115482,22082]],[[113171,21585]],[[113199,21590]],[[115232,22102]],[[115739,22373]],[[115134,22184]],[[113056,21175]],[[119573,21271]],[[119957,24020]],[[115859,22356]],[[116561,22649]],[[116285,22746]]]},"properties":{"cp":[113.280637,23.125178],"name":"广东","childNum":24}},{"id":"450000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@H– TQ§•A"],["@@ĨʪƒLƒƊDÎĹĐCǦė¸zÚGn£¾›rªŀÜt¬@֛ڈSx~øOŒ˜ŶÐÂæȠ\\„ÈÜObĖw^oބLf¬°bI lTØB̈F£Ć¹gñĤaY“t¿¤VSñœK¸¤nM†¼‚JE±„½¸šŠño‹ÜCƆæĪ^ŠĚQÖ¦^‡ˆˆf´Q†üÜʝz¯šlzUĺš@쇀p¶n]sxtx¶@„~ÒĂJb©gk‚{°‚~c°`ԙ¬rV\\“la¼¤ôá`¯¹LC†ÆbŒxEræO‚v[H­˜„[~|aB£ÖsºdAĐzNÂðsŽÞƔ…Ĥªbƒ–ab`ho¡³F«èVloޤ™ÔRzpp®SŽĪº¨ÖƒºN…ij„d`’a”¦¤F³ºDÎńĀìŠCžĜº¦Ċ•~nS›|gźvZkCÆj°zVÈÁƔ]LÊFZg…čP­kini«‹qǀcz͔Y®¬Ů»qR×ō©DՄ‘§ƙǃŵTÉĩ±ŸıdÑnYY›IJvNĆÌØÜ Öp–}e³¦m‹©iÓ|¹Ÿħņ›|ª¦QF¢Â¬ʖovg¿em‡^ucà÷gՎuŒíÙćĝ}FϼĹ{µHK•sLSđƃr‹č¤[Ag‘oS‹ŇYMÿ§Ç{Fśbky‰lQxĕƒ]T·¶[B…ÑÏGáşşƇe€…•ăYSs­FQ}­Bƒw‘tYğÃ@~…C̀Q ×W‡j˱rÉ¥oÏ ±«ÓÂ¥•ƒ€k—ŽwWűŒmcih³K›~‰µh¯e]lµ›él•E쉕E“ďs‡’mǖŧē`ãògK_ÛsUʝ“ćğ¶hŒöŒO¤Ǜn³Žc‘`¡y‹¦C‘ez€YŠwa™–‘[ďĵűMę§]X˜Î_‚훘Û]é’ÛUćİÕBƣ±…dƒy¹T^džûÅÑŦ·‡PĻþÙ`K€¦˜…¢ÍeœĥR¿Œ³£[~Œäu¼dl‰t‚†W¸oRM¢ď\\zœ}Æzdvň–{ÎXF¶°Â_„ÒÂÏL©Ö•TmuŸ¼ãl‰›īkiqéfA„·Êµ\\őDc¥ÝF“y›Ôć˜c€űH_hL܋êĺШc}rn`½„Ì@¸¶ªVLŒŠhŒ‹\\•Ţĺk~ŽĠið°|gŒtTĭĸ^x‘vK˜VGréAé‘bUu›MJ‰VÃO¡…qĂXËS‰ģãlýàŸ_ju‡YÛÒB†œG^˜é֊¶§ŽƒEG”ÅzěƒƯ¤Ek‡N[kdåucé¬dnYpAyČ{`]þ¯T’bÜÈk‚¡Ġ•vŒàh„ÂƄ¢Jî¶²"]],"encodeOffsets":[[[111707,21520]],[[107619,25527]]]},"properties":{"cp":[108.320004,22.82402],"name":"广西","childNum":2}},{"id":"460000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@š¦Ŝil¢”XƦ‘ƞò–ïè§ŞCêɕrŧůÇąĻõ™·ĉ³œ̅kÇm@ċȧƒŧĥ‰Ľʉ­ƅſ“ȓÒ˦ŝE}ºƑ[ÍĜȋ gÎfǐÏĤ¨êƺ\\Ɔ¸ĠĎvʄȀœÐ¾jNðĀÒRŒšZdž™zÐŘΰH¨Ƣb²_Ġ "],"encodeOffsets":[[112750,20508]]},"properties":{"cp":[110.33119,20.031971],"name":"海南","childNum":1}},{"id":"510000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@LqKr"],["@@Š[ĻéV£ž_ţġñpG •réÏ·~ąSfy×͂·ºſƽiÍıƣıĻmHH}siaX@iǰÁÃ×t«ƒ­Tƒ¤J–JJŒyJ•ÈŠ`Ohߦ¡uËhIyCjmÿw…ZG……Ti‹SˆsO‰žB²ŸfNmsPaˆ{M{ŠõE‘^Hj}gYpaeuž¯‘oáwHjÁ½M¡pM“–uå‡mni{fk”\\oƒÎqCw†EZ¼K›ĝŠƒAy{m÷L‡wO×SimRI¯rK™õBS«sFe‡]fµ¢óY_ÆPRcue°Cbo׌bd£ŌIHgtrnyPt¦foaXďx›lBowz‹_{ÊéWiêE„GhܸºuFĈIxf®Ž•Y½ĀǙ]¤EyŸF²ċ’w¸¿@g¢§RGv»–áŸW`ÃĵJwi]t¥wO­½a[׈]`Ãi­üL€¦LabbTÀå’c}Íh™Æhˆ‹®BH€î|Ék­¤S†y£„ia©taį·Ɖ`ō¥Uh“O…ƒĝLk}©Fos‰´›Jm„µlŁu—…ø–nÑJWΪ–YÀïAetTžŅ‚ӍG™Ë«bo‰{ıwodƟ½ƒžOġܑµxàNÖ¾P²§HKv¾–]|•B‡ÆåoZ`¡Ø`ÀmºĠ~ÌЧnDž¿¤]wğ@sƒ‰rğu‰~‘Io”[é±¹ ¿žſđӉ@q‹gˆ¹zƱřaí°KtǤV»Ã[ĩǭƑ^ÇÓ@ỗs›Zϕ‹œÅĭ€Ƌ•ěpwDóÖሯneQˌq·•GCœýS]xŸ·ý‹q³•O՜Œ¶Qzßti{ř‰áÍÇWŝŭñzÇW‹pç¿JŒ™‚Xœĩè½cŒF–ÂLiVjx}\\N†ŇĖ¥Ge–“JA¼ÄHfÈu~¸Æ«dE³ÉMA|b˜Ò…˜ćhG¬CM‚õŠ„ƤąAvƒüV€éŀ‰_V̳ĐwQj´·ZeÈÁ¨X´Æ¡Qu·»Ÿ“˜ÕZ³ġqDo‰y`L¬gdp°şŠp¦ėìÅĮZްIä”h‚‘ˆzŠĵœf²å ›ĚрKp‹IN|‹„Ñz]ń……·FU×é»R³™MƒÉ»GM«€ki€™ér™}Ã`¹ăÞmȝnÁîRǀ³ĜoİzŔwǶVÚ£À]ɜ»ĆlƂ²Ġ…þTº·àUȞÏʦ¶†I’«dĽĢdĬ¿–»Ĕ׊h\\c¬†ä²GêëĤł¥ÀǿżÃÆMº}BÕĢyFVvw–ˆxBèĻĒ©Ĉ“tCĢɽŠȣ¦āæ·HĽî“ôNԓ~^¤Ɗœu„œ^s¼{TA¼ø°¢İªDè¾Ň¶ÝJ‘®Z´ğ~Sn|ªWÚ©òzPOȸ‚bð¢|‹øĞŠŒœŒQìÛÐ@Ğ™ǎRS¤Á§d…i“´ezÝúØã]Hq„kIŸþËQǦÃsǤ[E¬ÉŪÍxXƒ·ÖƁİlƞ¹ª¹|XÊwn‘ÆƄmÀêErĒtD®ċæcQƒ”E®³^ĭ¥©l}äQto˜ŖÜqƎkµ–„ªÔĻĴ¡@Ċ°B²Èw^^RsºT£ڿœQP‘JvÄz„^Đ¹Æ¯fLà´GC²‘dt˜­ĀRt¼¤ĦOðğfÔðDŨŁĞƘïžPȆ®âbMüÀXZ ¸£@Ś›»»QÉ­™]d“sÖ×_͖_ÌêŮPrĔĐÕGĂeZÜîĘqBhtO ¤tE[h|Y‹Ô‚ZśÎs´xº±UŒ’ñˆt|O’ĩĠºNbgþŠJy^dÂY Į„]Řz¦gC‚³€R`Šz’¢AjŒ¸CL„¤RÆ»@­Ŏk\\Ç´£YW}z@Z}‰Ã¶“oû¶]´^N‡Ò}èN‚ª–P˜Íy¹`S°´†ATe€VamdUĐwʄvĮÕ\\ƒu‹Æŗ¨Yp¹àZÂm™Wh{á„}WØǍ•Éüw™ga§áCNęÎ[ĀÕĪgÖɪX˜øx¬½Ů¦¦[€—„NΆL€ÜUÖ´òrÙŠxR^–†J˜k„ijnDX{Uƒ~ET{ļº¦PZc”jF²Ė@Žp˜g€ˆ¨“B{ƒu¨ŦyhoÚD®¯¢˜ WòàFΤ¨GDäz¦kŮPœġq˚¥À]€Ÿ˜eŽâÚ´ªKxī„Pˆ—Ö|æ[xäJÞĥ‚s’NÖ½ž€I†¬nĨY´®Ð—ƐŠ€mD™ŝuäđđEb…e’e_™v¡}ìęNJē}q”É埁T¯µRs¡M@}ůa†a­¯wvƉåZwž\\Z{åû^›"]],"encodeOffsets":[[[108815,30935]],[[110617,31811]]]},"properties":{"cp":[104.065735,30.659462],"name":"四川","childNum":2}},{"id":"520000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@†G\\†lY£‘in"],["@@q‚|ˆ‚mc¯tχVSÎ"],["@@hÑ£Is‡NgßH†›HªķÃh_¹ƒ¡ĝħń¦uيùŽgS¯JHŸ|sÝÅtÁïyMDč»eÕtA¤{b\\}—ƒG®u\\åPFq‹wÅaD…žK°ºâ_£ùbµ”mÁ‹ÛœĹM[q|hlaªāI}тƒµ@swtwm^oµˆD鼊yV™ky°ÉžûÛR…³‚‡eˆ‡¥]RՋěħ[ƅåÛDpŒ”J„iV™™‰ÂF²I…»mN·£›LbÒYb—WsÀbŽ™pki™TZĄă¶HŒq`……ĥ_JŸ¯ae«ƒKpÝx]aĕÛPƒÇȟ[ÁåŵÏő—÷Pw}‡TœÙ@Õs«ĿÛq©½œm¤ÙH·yǥĘĉBµĨÕnđ]K„©„œá‹ŸG纍§Õßg‡ǗĦTèƤƺ{¶ÉHÎd¾ŚÊ·OÐjXWrãLyzÉAL¾ę¢bĶėy_qMĔąro¼hĊžw¶øV¤w”²Ĉ]ʚKx|`ź¦ÂÈdr„cȁbe¸›`I¼čTF´¼Óýȃr¹ÍJ©k_șl³´_pН`oÒh޶pa‚^ÓĔ}D»^Xyœ`d˜[Kv…JPhèhCrĂĚÂ^Êƌ wˆZL­Ġ£šÁbrzOIl’MM”ĪŐžËr×ÎeŦŽtw|Œ¢mKjSǘňĂStÎŦEtqFT†¾†E쬬ôxÌO¢Ÿ KгŀºäY†„”PVgŎ¦Ŋm޼VZwVlŒ„z¤…ž£Tl®ctĽÚó{G­A‡ŒÇgeš~Αd¿æaSba¥KKûj®_ć^\\ؾbP®¦x^sxjĶI_Ä X‚⼕Hu¨Qh¡À@Ëô}ޱžGNìĎlT¸ˆ…`V~R°tbÕĊ`¸úÛtπFDu€[ƒMfqGH·¥yA‰ztMFe|R‚_Gk†ChZeÚ°to˜v`x‹b„ŒDnÐ{E}šZ˜è€x—†NEފREn˜[Pv@{~rĆAB§‚EO¿|UZ~ì„Uf¨J²ĂÝÆ€‚sª–B`„s¶œfvö¦ŠÕ~dÔq¨¸º»uù[[§´sb¤¢zþFœ¢Æ…Àhˆ™ÂˆW\\ıŽËI݊o±ĭŠ£þˆÊs}¡R]ŒěƒD‚g´VG¢‚j±®è†ºÃmpU[Á›‘Œëº°r›ÜbNu¸}Žº¼‡`ni”ºÔXĄ¤¼Ôdaµ€Á_À…†ftQQgœR—‘·Ǔ’v”}Ýלĵ]µœ“Wc¤F²›OĩųãW½¯K‚©…]€{†LóµCIµ±Mß¿hŸ•©āq¬o‚½ž~@i~TUxŪÒ¢@ƒ£ÀEîôruń‚”“‚b[§nWuMÆLl¿]x}ij­€½"]],"encodeOffsets":[[[112158,27383]],[[112105,27474]],[[112095,27476]]]},"properties":{"cp":[106.713478,26.578343],"name":"贵州","childNum":3}},{"id":"530000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@[„ùx½}ÑRH‘YīĺûsÍn‘iEoã½Ya²ė{c¬ĝg•ĂsA•ØÅwď‚õzFjw}—«Dx¿}UũlŸê™@•HÅ­F‰¨ÇoJ´Ónũuą¡Ã¢pÒŌ“Ø TF²‚xa²ËX€‚cʋlHîAßËŁkŻƑŷÉ©h™W­æßU‡“Ës¡¦}•teèÆ¶StǀÇ}Fd£j‹ĈZĆÆ‹¤T‚č\\Dƒ}O÷š£Uˆ§~ŃG™‚åŃDĝ¸œTsd¶¶Bªš¤u¢ŌĎo~t¾ÍŶÒtD¦Ú„iôö‰€z›ØX²ghįh½Û±¯€ÿm·zR¦Ɵ`ªŊÃh¢rOԍ´£Ym¼èêf¯ŪĽn„†cÚbŒw\\zlvWžªâˆ ¦g–mĿBş£¢ƹřbĥkǫßeeZkÙIKueT»sVesb‘aĕ  ¶®dNœĄÄpªyސ¼—„³BE˜®l‡ŽGœŭCœǶwêżĔÂe„pÍÀQƞpC„–¼ŲÈ­AÎô¶R„ä’Q^Øu¬°š_Èôc´¹ò¨P΢hlϦ´Ħ“Æ´sâDŽŲPnÊD^¯°’Upv†}®BP̪–jǬx–Söwlfòªv€qĸ|`H€­viļ€ndĜ­Ćhň•‚em·FyށqóžSᝑ³X_ĞçêtryvL¤§z„¦c¦¥jnŞk˜ˆlD¤øz½ĜàžĂŧMÅ|áƆàÊcðÂF܎‚áŢ¥\\\\º™İøÒÐJĴ‡„îD¦zK²ǏÎEh~’CD­hMn^ÌöÄ©ČZÀžaü„fɭyœpį´ěFűk]Ôě¢qlÅĆÙa¶~Äqššê€ljN¬¼H„ÊšNQ´ê¼VظE††^ŃÒyŒƒM{ŒJLoÒœęæŸe±Ķ›y‰’‡gã“¯JYÆĭĘëo¥Š‰o¯hcK«z_pŠrC´ĢÖY”—¼ v¸¢RŽÅW³Â§fǸYi³xR´ďUˊ`êĿU„û€uĆBƒƣö‰N€DH«Ĉg†——Ñ‚aB{ÊNF´¬c·Åv}eÇÃGB»”If•¦HňĕM…~[iwjUÁKE•Ž‹¾dĪçW›šI‹èÀŒoÈXòyŞŮÈXâÎŚŠj|àsRy‹µÖ›–Pr´þŒ ¸^wþTDŔ–Hr¸‹žRÌmf‡żÕâCôox–ĜƌÆĮŒ›Ð–œY˜tâŦÔ@]ÈǮƒ\\μģUsȯLbîƲŚºyh‡rŒŠ@ĒԝƀŸÀ²º\\êp“’JŠ}ĠvŠqt„Ġ@^xÀ£È†¨mËÏğ}n¹_¿¢×Y_æpˆÅ–A^{½•Lu¨GO±Õ½ßM¶w’ÁĢۂP‚›Ƣ¼pcIJxŠ|ap̬HšÐŒŊSfsðBZ¿©“XÏÒK•k†÷Eû¿‰S…rEFsÕūk”óVǥʼniTL‚¡n{‹uxţÏh™ôŝ¬ğōN“‘NJkyPaq™Âğ¤K®‡YŸxÉƋÁ]āęDqçgOg†ILu—\\_gz—]W¼ž~CÔē]bµogpў_oď`´³Țkl`IªºÎȄqÔþž»E³ĎSJ»œ_f·‚adÇqƒÇc¥Á_Źw{™L^ɱćx“U£µ÷xgĉp»ĆqNē`rĘzaĵĚ¡K½ÊBzyäKXqiWPÏɸ½řÍcÊG|µƕƣG˛÷Ÿk°_^ý|_zċBZocmø¯hhcæ\\lˆMFlư£Ĝ„ÆyH“„F¨‰µêÕ]—›HA…àӄ^it `þßäkŠĤÎT~Wlÿ¨„ÔPzUC–NVv [jâôDôď[}ž‰z¿–msSh‹¯{jïğl}šĹ[–őŒ‰gK‹©U·µË@¾ƒm_~q¡f¹…ÅË^»‘f³ø}Q•„¡Ö˳gͱ^ǁ…\\ëÃA_—¿bW›Ï[¶ƛ鏝£F{īZgm@|kHǭƁć¦UĔťƒ×ë}ǝƒeďºȡȘÏíBə£āĘPªij¶“ʼnÿ‡y©n‰ď£G¹¡I›Š±LÉĺÑdĉ܇W¥˜‰}g˜Á†{aqÃ¥aŠıęÏZ—ï`"],"encodeOffsets":[[104636,22969]]},"properties":{"cp":[102.712251,25.040609],"name":"云南","childNum":1}},{"id":"540000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@hžľxŽŖ‰xƒÒVކºÅâAĪÝȆµę¯Ňa±r_w~uSÕň‘qOj]ɄQ…£Z……UDûoY’»©M[‹L¼qãË{V͕çWViŽ]ë©Ä÷àyƛh›ÚU°ŒŒa”d„cQƒ~Mx¥™cc¡ÙaSyF—ցk­ŒuRýq¿Ôµ•QĽ³aG{¿FµëªéĜÿª@¬·–K‰·àariĕĀ«V»Ŷ™Ĵū˜gèLǴŇƶaf‹tŒèBŚ£^Šâ†ǐÝ®–šM¦ÁǞÿ¬LhŸŽJ¾óƾƺcxw‹f]Y…´ƒ¦|œQLn°aœdĊ…œ\\¨o’œǀÍŎœ´ĩĀd`tÊQŞŕ|‚¨C^©œĈ¦„¦ÎJĊ{ŽëĎjª²rЉšl`¼Ą[t|¦St辉PŒÜK¸€d˜Ƅı]s¤—î_v¹ÎVòŦj˜£Əsc—¬_Ğ´|٘¦Avަw`ăaÝaa­¢e¤ı²©ªSªšÈMĄwžÉØŔì@T‘¤—Ę™\\õª@”þo´­xA s”ÂtŎKzó´ÇĊµ¢rž^nĊ­Æ¬×üGž¢‚³ {âĊ]š™G‚~bÀgVjzlhǶf€žOšfdЉªB]pj„•TO–tĊ‚n¤}®¦ƒČ¥d¢¼»ddš”Y¼Žt—¢eȤJ¤}Ǿ¡°§¤AГlc@ĝ”sªćļđAç‡wx•UuzEÖġ~AN¹ÄÅȀݦ¿ģŁéì±H…ãd«g[؉¼ēÀ•cīľġ¬cJ‘µ…ÐʥVȝ¸ßS¹†ý±ğkƁ¼ą^ɛ¤Ûÿ‰b[}¬ōõÃ]ËNm®g@•Bg}ÍF±ǐyL¥íCˆƒIij€Ï÷њį[¹¦[⚍EÛïÁÉdƅß{âNÆāŨߝ¾ě÷yC£‡k­´ÓH@¹†TZ¥¢įƒ·ÌAЧ®—Zc…v½ŸZ­¹|ŕWZqgW“|ieZÅYVӁqdq•bc²R@†c‡¥Rã»Ge†ŸeƃīQ•}J[ғK…¬Ə|o’ėjġĠÑN¡ð¯EBčnwôɍėªƒ²•CλŹġǝʅįĭạ̃ūȹ]ΓͧgšsgȽóϧµǛ†ęgſ¶ҍć`ĘąŌJޚä¤rÅň¥ÖÁUětęuůÞiĊÄÀ\\Æs¦ÓRb|Â^řÌkÄŷ¶½÷‡f±iMݑ›‰@ĥ°G¬ÃM¥n£Øą‚ğ¯ß”§aëbéüÑOčœk£{\\‘eµª×M‘šÉfm«Ƒ{Å׃Gŏǩãy³©WÑăû‚··‘Q—òı}¯ã‰I•éÕÂZ¨īès¶ZÈsŽæĔTŘvŽgÌsN@îá¾ó@‰˜ÙwU±ÉT廣TđŸWxq¹Zo‘b‹s[׌¯cĩv‡Œėŧ³BM|¹k‰ªħ—¥TzNYnݍßpęrñĠĉRS~½ŠěVVе‚õ‡«ŒM££µB•ĉ¥áºae~³AuĐh`Ü³ç@BۘïĿa©|z²Ý¼D”£à貋ŸƒIƒû›I ā€óK¥}rÝ_Á´éMaň¨€~ªSĈ½Ž½KÙóĿeƃÆBŽ·¬ën×W|Uº}LJrƳ˜lŒµ`bÔ`QˆˆÐÓ@s¬ñIŒÍ@ûws¡åQÑßÁ`ŋĴ{Ī“T•ÚÅTSij‚‹Yo|Ç[ǾµMW¢ĭiÕØ¿@˜šMh…pÕ]j†éò¿OƇĆƇp€êĉâlØw–ěsˆǩ‚ĵ¸c…bU¹ř¨WavquSMzeo_^gsÏ·¥Ó@~¯¿RiīB™Š\\”qTGªÇĜçPoŠÿfñòą¦óQīÈáP•œābß{ƒZŗĸIæÅ„hnszÁCËìñšÏ·ąĚÝUm®ó­L·ăU›Èíoù´Êj°ŁŤ_uµ^‘°Œìǖ@tĶĒ¡Æ‡M³Ģ«˜İĨÅ®ğ†RŽāð“ggheÆ¢z‚Ê©Ô\\°ÝĎz~ź¤Pn–MĪÖB£Ÿk™n鄧żćŠ˜ĆK„ǰ¼L¶è‰âz¨u¦¥LDĘz¬ýÎmĘd¾ß”Fz“hg²™Fy¦ĝ¤ċņbΛ@y‚Ąæm°NĮZRÖíŽJ²öLĸÒ¨Y®ƌÐV‰à˜tt_ڀÂyĠzž]Ţh€zĎ{†ĢX”ˆc|šÐqŽšfO¢¤ög‚ÌHNŽ„PKŖœŽ˜Uú´xx[xˆvĐCûŠìÖT¬¸^}Ìsòd´_އKgžLĴ…ÀBon|H@–Êx˜—¦BpŰˆŌ¿fµƌA¾zLjRxжF”œkĄźRzŀˆ~¶[”´Hnª–VƞuĒ­È¨ƎcƽÌm¸ÁÈM¦x͊ëÀxdžB’šú^´W†£–d„kɾĬpœw‚˂ØɦļĬIŚœÊ•n›Ŕa¸™~J°î”lɌxĤÊÈðhÌ®‚g˜T´øŽàCˆŽÀ^ªerrƘdž¢İP|Ė ŸWœªĦ^¶´ÂL„aT±üWƜ˜ǀRšŶUńšĖ[QhlLüA†‹Ü\\†qR›Ą©"],"encodeOffsets":[[90849,37210]]},"properties":{"cp":[91.132212,29.660361],"name":"西藏","childNum":1}},{"id":"610000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@˜p¢—ȮµšûG™Ħ}Ħšðǚ¶òƄ€jɂz°{ºØkÈęâ¦jª‚Bg‚\\œċ°s¬Ž’]jžú ‚E”Ȍdž¬s„t‡”RˆÆdĠݎwܔ¸ôW¾ƮłÒ_{’Ìšû¼„jº¹¢GǪÒ¯ĘƒZ`ºŊƒecņąš~BÂgzpâēòYǠȰÌTΨÂWœ|fcŸă§uF—Œ@NŸ¢XLƒŠRMº[ğȣſï|¥J™kc`sʼnǷ’Y¹‹W@µ÷K…ãï³ÛIcñ·VȋڍÒķø©—þ¥ƒy‚ÓŸğęmWµÎumZyOŅƟĥÓ~sÑL¤µaŅY¦ocyZ{‰y c]{ŒTa©ƒ`U_Ěē£ωÊƍKù’K¶ȱÝƷ§{û»ÅÁȹÍéuij|¹cÑd‘ŠìUYƒŽO‘uF–ÕÈYvÁCqӃT•Ǣí§·S¹NgŠV¬ë÷Át‡°Dد’C´ʼnƒópģ}„ċcE˅FŸŸéGU¥×K…§­¶³B‹Č}C¿åċ`wġB·¤őcƭ²ő[Å^axwQO…ÿEËߌ•ĤNĔŸwƇˆÄŠńwĪ­Šo[„_KÓª³“ÙnK‰Çƒěœÿ]ď€ă_d©·©Ýŏ°Ù®g]±„Ÿ‡ß˜å›—¬÷m\\›iaǑkěX{¢|ZKlçhLt€Ňîŵ€œè[€É@ƉĄEœ‡tƇÏ˜³­ħZ«mJ…›×¾‘MtÝĦ£IwÄå\\Õ{‡˜ƒOwĬ©LÙ³ÙgBƕŀr̛ĢŭO¥lãyC§HÍ£ßEñŸX¡—­°ÙCgpťz‘ˆb`wI„vA|§”‡—hoĕ@E±“iYd¥OϹS|}F@¾oAO²{tfžÜ—¢Fǂ҈W²°BĤh^Wx{@„¬‚­F¸¡„ķn£P|ŸªĴ@^ĠĈæb–Ôc¶l˜Yi…–^Mi˜cϰÂ[ä€vï¶gv@À“Ĭ·lJ¸sn|¼u~a]’ÆÈtŌºJp’ƒþ£KKf~ЦUbyäIšĺãn‡Ô¿^­žŵMT–hĠܤko¼Ŏìąǜh`[tŒRd²IJ_œXPrɲ‰l‘‚XžiL§àƒ–¹ŽH˜°Ȧqº®QC—bA†„ŌJ¸ĕÚ³ĺ§ `d¨YjžiZvRĺ±öVKkjGȊĐePОZmļKÀ€‚[ŠŽ`ösìh†ïÎoĬdtKÞ{¬èÒÒBŒÔpIJÇĬJŊ¦±J«ˆY§‹@·pH€µàåVKe›pW†ftsAÅqC·¬ko«pHÆuK@oŸHĆۄķhx“e‘n›S³àǍrqƶRbzy€¸ËАl›¼EºpĤ¼Œx¼½~Ğ’”à@†ÚüdK^ˆmÌSj"],"encodeOffsets":[[110234,38774]]},"properties":{"cp":[108.948024,34.263161],"name":"陕西","childNum":1}},{"id":"620000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@VuUv"],["@@ũ‹EĠtt~nkh`Q‰¦ÅÄÜdw˜Ab×ĠąJˆ¤DüègĺqBqœj°lI¡ĨÒ¤úSHbš‡ŠjΑBаaZˆ¢KJŽ’O[|A£žDx}Nì•HUnrk„ kp€¼Y kMJn[aG‚áÚÏ[½rc†}aQxOgsPMnUs‡nc‹Z…ž–sKúvA›t„Þġ’£®ĀYKdnFwš¢JE°”Latf`¼h¬we|€Æ‡šbj}GA€·~WŽ”—`†¢MC¤tL©IJ°qdf”O‚“bÞĬ¹ttu`^ZúE`Œ[@„Æsîz®¡’C„ƳƜG²“R‘¢R’m”fŽwĸg܃‚ą G@pzJM½mŠhVy¸uÈÔO±¨{LfæU¶ßGĂq\\ª¬‡²I‚¥IʼnÈīoı‹ÓÑAçÑ|«LÝcspīðÍg…të_õ‰\\ĉñLYnĝg’ŸRǡÁiHLlõUĹ²uQjYi§Z_c¨Ÿ´ĹĖÙ·ŋI…ƒaBD˜­R¹ȥr—¯G•ºß„K¨jWk’ɱŠOq›Wij\\a­‹Q\\sg_ĆǛōëp»£lğۀgS•ŶN®À]ˆÓäm™ĹãJaz¥V}‰Le¤L„ýo‘¹IsŋÅÇ^‘Žbz…³tmEÁ´aйcčecÇN•ĊãÁ\\蝗dNj•]j†—ZµkÓda•ćå]ğij@ ©O{¤ĸm¢ƒE·®ƒ«|@Xwg]A챝‡XǁÑdzªc›wQÚŝñsÕ³ÛV_ýƒ˜¥\\ů¥©¾÷w—Ž©WÕÊĩhÿÖÁRo¸V¬âDb¨šhûx–Ê×nj~Zâƒg|šXÁnßYoº§ZÅŘvŒ[„ĭÖʃuďxcVbnUSf…B¯³_Tzº—ΕO©çMÑ~Mˆ³]µ^püµ”ŠÄY~y@X~¤Z³€[Èōl@®Å¼£QKƒ·Di‹¡By‘ÿ‰Q_´D¥hŗyƒ^ŸĭÁZ]cIzý‰ah¹MĪğP‘s{ò‡‹‘²Vw¹t³Ŝˁ[ŽÑ}X\\gsFŸ£sPAgěp×ëfYHāďÖqēŭOÏë“dLü•\\iŒ”t^c®šRʺ¶—¢H°mˆ‘rYŸ£BŸ¹čIoľu¶uI]vģSQ{ƒUŻ”Å}QÂ|̋°ƅ¤ĩŪU ęĄžÌZҞ\\v˜²PĔ»ƢNHƒĂyAmƂwVmž`”]ȏb•”H`‰Ì¢²ILvĜ—H®¤Dlt_„¢JJÄämèÔDëþgºƫ™”aʎÌrêYi~ ÎݤNpÀA¾Ĕ¼b…ð÷’Žˆ‡®‚”üs”zMzÖĖQdȨý†v§Tè|ªH’þa¸|šÐ ƒwKĢx¦ivr^ÿ ¸l öæfƟĴ·PJv}n\\h¹¶v†·À|\\ƁĚN´Ĝ€çèÁz]ġ¤²¨QÒŨTIl‡ªťØ}¼˗ƦvÄùØE‹’«Fï˛Iq”ōŒTvāÜŏ‚íÛߜÛV—j³âwGăÂíNOŠˆŠPìyV³ʼnĖýZso§HіiYw[߆\\X¦¥c]ÔƩÜ·«j‡ÐqvÁ¦m^ċ±R™¦΋ƈťĚgÀ»IïĨʗƮްƝ˜ĻþÍAƉſ±tÍEÕÞāNU͗¡\\ſčåÒʻĘm ƭÌŹöʥ’ëQ¤µ­ÇcƕªoIýˆ‰Iɐ_mkl³ă‰Ɠ¦j—¡Yz•Ňi–}Msßõ–īʋ —}ƒÁVmŸ_[n}eı­Uĥ¼‘ª•I{ΧDӜƻėoj‘qYhĹT©oūĶ£]ďxĩ‹ǑMĝ‰q`B´ƃ˺Ч—ç~™²ņj@”¥@đ´ί}ĥtPńǾV¬ufӃÉC‹tÓ̻‰…¹£G³€]ƖƾŎĪŪĘ̖¨ʈĢƂlɘ۪üºňUðǜȢƢż̌ȦǼ‚ĤŊɲĖ­Kq´ï¦—ºĒDzņɾªǀÞĈĂD†½ĄĎÌŗĞrôñnŽœN¼â¾ʄľԆ|DŽŽ֦ज़ȗlj̘̭ɺƅêgV̍ʆĠ·ÌĊv|ýĖÕWĊǎÞ´õ¼cÒÒBĢ͢UĜð͒s¨ňƃLĉÕÝ@ɛƯ÷¿Ľ­ĹeȏijëCȚDŲyê×Ŗyò¯ļcÂßY…tÁƤyAã˾J@ǝrý‹‰@¤…rz¸oP¹ɐÚyᐇHŸĀ[Jw…cVeȴϜ»ÈŽĖ}ƒŰŐèȭǢόĀƪÈŶë;Ñ̆ȤМľĮEŔ—ĹŊũ~ËUă{ŸĻƹɁύȩþĽvĽƓÉ@ē„ĽɲßǐƫʾǗĒpäWÐxnsÀ^ƆwW©¦cÅ¡Ji§vúF¶Ž¨c~c¼īŒeXǚ‹\\đ¾JŽwÀďksãA‹fÕ¦L}wa‚o”Z’‹D½†Ml«]eÒÅaɲáo½FõÛ]ĻÒ¡wYR£¢rvÓ®y®LF‹LzĈ„ôe]gx}•|KK}xklL]c¦£fRtív¦†PĤoH{tK"]],"encodeOffsets":[[[108619,36299]],[[108589,36341]]]},"properties":{"cp":[103.823557,36.058039],"name":"甘肃","childNum":2}},{"id":"630000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@InJm"],["@@CƒÆ½OŃĦsΰ~dz¦@@“Ņiš±è}ؘƄ˹A³r_ĞŠǒNΌĐw¤^ŬĵªpĺSZg’rpiƼĘԛ¨C|͖J’©Ħ»®VIJ~f\\m `Un„˜~ʌŸ•ĬàöNt•~ňjy–¢Zi˜Ɣ¥ĄŠk´nl`JʇŠJþ©pdƖ®È£¶ìRʦ‘źõƮËnŸʼėæÑƀĎ[‚˜¢VÎĂMÖÝÎF²sƊƀÎBļýƞ—¯ʘƭðħ¼Jh¿ŦęΌƇš¥²Q]Č¥nuÂÏriˆ¸¬ƪÛ^Ó¦d€¥[Wà…x\\ZŽjҕ¨GtpþYŊĕ´€zUO뇉P‰îMĄÁxH´á˜iÜUà›îÜՁĂÛSuŎ‹r“œJð̬EŒ‘FÁú×uÃÎkr“Ē{V}İ«O_ÌËĬ©ŽÓŧSRѱ§Ģ£^ÂyèçěM³Ƃę{[¸¿u…ºµ[gt£¸OƤĿéYŸõ·kŸq]juw¥Dĩƍ€õÇPéĽG‘ž©ã‡¤G…uȧþRcÕĕNy“yût“ˆ­‡ø‘†ï»a½ē¿BMoᣟÍj}éZËqbʍš“Ƭh¹ìÿÓAçãnIáI`ƒks£CG­ě˜Uy×Cy•…’Ÿ@¶ʡÊBnāzG„ơMē¼±O÷õJËĚăVŸĪũƆ£Œ¯{ËL½Ìzż“„VR|ĠTbuvJvµhĻĖH”Aëáa…­OÇðñęNw‡…œľ·L›mI±íĠĩPÉ×®ÿs—’cB³±JKßĊ«`…ađ»·QAmO’‘Vţéÿ¤¹SQt]]Çx€±¯A@ĉij¢Ó祖•ƒl¶ÅÛr—ŕspãRk~¦ª]Į­´“FR„åd­ČsCqđéFn¿Åƃm’Éx{W©ºƝºįkÕƂƑ¸wWūЩÈFž£\\tÈ¥ÄRÈýÌJ ƒlGr^×äùyÞ³fj”c†€¨£ÂZ|ǓMĝšÏ@ëÜőR‹›ĝ‰Œ÷¡{aïȷPu°ËXÙ{©TmĠ}Y³’­ÞIňµç½©C¡į÷¯B»|St»›]vƒųƒs»”}MÓ ÿʪƟǭA¡fs˜»PY¼c¡»¦c„ċ­¥£~msĉP•–Siƒ^o©A‰Šec‚™PeǵŽkg‚yUi¿h}aH™šĉ^|ᴟ¡HØûÅ«ĉ®]m€¡qĉ¶³ÈyôōLÁst“BŸ®wn±ă¥HSò뚣˜S’ë@לÊăxÇN©™©T±ª£IJ¡fb®ÞbŽb_Ą¥xu¥B—ž{łĝ³«`d˜Ɛt—¤ťiñžÍUuºí`£˜^tƃIJc—·ÛLO‹½Šsç¥Ts{ă\\_»™kϊ±q©čiìĉ|ÍIƒ¥ć¥›€]ª§D{ŝŖÉR_sÿc³Īō›ƿΑ›§p›[ĉ†›c¯bKm›R¥{³„Z†e^ŽŒwx¹dƽŽôIg §Mĕ ƹĴ¿—ǣÜ̓]‹Ý–]snåA{‹eŒƭ`ǻŊĿ\\ijŬű”YÂÿ¬jĖqŽßbЏ•L«¸©@ěĀ©ê¶ìÀEH|´bRľž–Ó¶rÀQþ‹vl®Õ‚E˜TzÜdb ˜hw¤{LR„ƒd“c‹b¯‹ÙVgœ‚ƜßzÃô쮍^jUèXΖ|UäÌ»rKŽ\\ŒªN‘¼pZCü†VY††¤ɃRi^rPҒTÖ}|br°qňb̰ªiƶGQ¾²„x¦PœmlŜ‘[Ĥ¡ΞsĦŸÔÏâ\\ªÚŒU\\f…¢N²§x|¤§„xĔsZPòʛ²SÐqF`ª„VƒÞŜĶƨVZŒÌL`ˆ¢dŐIqr\\oäõ–F礻Ŷ×h¹]Clـ\\¦ďÌį¬řtTӺƙgQÇÓHţĒ”´ÃbEÄlbʔC”|CˆŮˆk„Ʈ[ʼ¬ňœ´KŮÈΰÌζƶlð”ļA†TUvdTŠG†º̼ŠÔ€ŒsÊDԄveOg"]],"encodeOffsets":[[[105308,37219]],[[95370,40081]]]},"properties":{"cp":[101.778916,36.623178],"name":"青海","childNum":2}},{"id":"640000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@KëÀęĞ«OęȿȕŸı]ʼn¡åįÕÔ«Ǵõƪ™ĚQÐZhv K°›öqÀѐS[ÃÖHƖčË‡nL]ûc…Ùß@‚“ĝ‘¾}w»»‹oģF¹œ»kÌÏ·{zPƒ§B­¢íyÅt@ƒ@áš]Yv_ssģ¼i߁”ĻL¾ġsKD£¡N_…“˜X¸}B~Haiˆ™Åf{«x»ge_bs“KF¯¡Ix™mELcÿZ¤­Ģ‘ƒÝœsuBLù•t†ŒYdˆmVtNmtOPhRw~bd…¾qÐ\\âÙH\\bImlNZŸ»loƒŸqlVm–Gā§~QCw¤™{A\\‘PKŸNY‡¯bF‡kC¥’sk‹Šs_Ã\\ă«¢ħkJi¯r›rAhĹûç£CU‡ĕĊ_ԗBixÅُĄnªÑaM~ħpOu¥sîeQ¥¤^dkKwlL~{L~–hw^‚ófćƒKyEŒ­K­zuÔ¡qQ¤xZÑ¢^ļöܾEpž±âbÊÑÆ^fk¬…NC¾‘Œ“YpxbK~¥Že֎ŒäBlt¿Đx½I[ĒǙŒWž‹f»Ĭ}d§dµùEuj¨‚IÆ¢¥dXªƅx¿]mtÏwßR͌X¢͎vÆzƂZò®ǢÌʆCrâºMÞzžÆMҔÊÓŊZľ–r°Î®Ȉmª²ĈUªĚøºˆĮ¦ÌĘk„^FłĬhĚiĀ˾iİbjÕ"],["@@mfwěwMrŢªv@G‰"]],"encodeOffsets":[[[109366,40242]],[[108600,36303]]]},"properties":{"cp":[106.278179,38.46637],"name":"宁夏","childNum":2}},{"id":"650000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@QØĔ²X¨”~ǘBºjʐߨvK”ƔX¨vĊOžÃƒ·¢i@~c—‡ĝe_«”Eš“}QxgɪëÏÃ@sÅyXoŖ{ô«ŸuX…ê•Îf`œC‚¹ÂÿÐGĮÕĞXŪōŸMźÈƺQèĽôe|¿ƸJR¤ĘEjcUóº¯Ĩ_ŘÁMª÷Ð¥Oéȇ¿ÖğǤǷÂF҇zÉx[]­Ĥĝ‰œ¦EP}ûƥé¿İƷTėƫœŕƅ™ƱB»Đ±’ēO…¦E–•}‘`cȺrĦáŖuҞª«IJ‡πdƺÏØZƴwʄ¤ĖGЙǂZ̓èH¶}ÚZצʥĪï|ÇĦMŔ»İĝLj‹ì¥Βœba­¯¥ǕǚkĆŵĦɑĺƯxūД̵nơʃĽá½M»›òmqóŘĝč˾ăC…ćāƿÝɽ©DZŅ¹đ¥˜³ðLrÁ®ɱĕģʼnǻ̋ȥơŻǛȡVï¹Ň۩ûkɗġƁ§ʇė̕ĩũƽō^ƕŠUv£ƁQï“Ƶkŏ½ΉÃŭdzLқʻ«ƭ\\lƒ‡ŭD‡“{ʓDkaFÃÄa“³ŤđÔGRÈƚhSӹŚsİ«ĐË[¥ÚDkº^Øg¼ŵ¸£EÍö•€ůʼnT¡c_‡ËKY‹ƧUśĵ„݃U_©rETÏʜ±OñtYw獃{£¨uM³x½şL©Ùá[ÓÐĥ Νtģ¢\\‚ś’nkO›w¥±ƒT»ƷFɯàĩÞáB¹Æ…ÑUw„੍žĽw[“mG½Èå~‡Æ÷QyŠěCFmĭZī—ŵVÁ™ƿQƛ—ûXS²‰b½KϽĉS›©ŷXĕŸ{ŽĕK·¥Ɨcqq©f¿]‡ßDõU³h—­gËÇïģÉɋw“k¯í}I·šœbmœÉ–ř›īJɥĻˁ×xo›ɹī‡l•c…¤³Xù]‘™DžA¿w͉ì¥wÇN·ÂËnƾƍdǧđ®Ɲv•Um©³G\\“}µĿ‡QyŹl㓛µEw‰LJQ½yƋBe¶ŋÀů‡ož¥A—˜Éw@•{Gpm¿Aij†ŽKLhˆ³`ñcËtW‚±»ÕS‰ëüÿďD‡u\\wwwù³—V›LŕƒOMËGh£õP¡™er™Ïd{“‡ġWÁ…č|yšg^ğyÁzÙs`—s|ÉåªÇ}m¢Ń¨`x¥’ù^•}ƒÌ¥H«‰Yªƅ”Aйn~Ꝛf¤áÀz„gŠÇDIԝ´AňĀ҄¶ûEYospõD[{ù°]u›Jq•U•|Soċxţ[õÔĥkŋÞŭZ˺óYËüċrw €ÞkrťË¿XGÉbřaDü·Ē÷Aê[Ää€I®BÕИÞ_¢āĠpŠÛÄȉĖġDKwbm‡ÄNô‡ŠfœƫVÉvi†dz—H‘‹QµâFšù­Âœ³¦{YGžƒd¢ĚÜO „€{Ö¦ÞÍÀPŒ^b–ƾŠlŽ[„vt×ĈÍE˨¡Đ~´î¸ùÎh€uè`¸ŸHÕŔVºwĠââWò‡@{œÙNÝ´ə²ȕn{¿¥{l—÷eé^e’ďˆXj©î\\ªÑò˜Üìc\\üqˆÕ[Č¡xoÂċªbØ­Œø|€¶ȴZdÆÂšońéŒGš\\”¼C°ÌƁn´nxšÊOĨ’ہƴĸ¢¸òTxÊǪMīИÖŲÃɎOvˆʦƢ~FއRěò—¿ġ~åŊœú‰Nšžš¸qŽ’Ę[Ĕ¶ÂćnÒPĒÜvúĀÊbÖ{Äî¸~Ŕünp¤ÂH¾œĄYÒ©ÊfºmԈĘcDoĬMŬ’˜S¤„s²‚”ʘچžȂVŦ –ŽèW°ªB|IJXŔþÈJĦÆæFĚêŠYĂªĂ]øªŖNÞüA€’fɨJ€˜¯ÎrDDšĤ€`€mz\\„§~D¬{vJÂ˜«lµĂb–¤p€ŌŰNĄ¨ĊXW|ų ¿¾ɄĦƐMT”‡òP˜÷fØĶK¢ȝ˔Sô¹òEð­”`Ɩ½ǒÂň×äı–§ĤƝ§C~¡‚hlå‚ǺŦŞkâ’~}ŽFøàIJaĞ‚fƠ¥Ž„Ŕdž˜®U¸ˆźXœv¢aƆúŪtŠųƠjd•ƺŠƺÅìnrh\\ĺ¯äɝĦ]èpĄ¦´LƞĬŠ´ƤǬ˼Ēɸ¤rºǼ²¨zÌPðŀbþ¹ļD¢¹œ\\ĜÑŚŸ¶ZƄ³àjĨoâŠȴLʉȮŒĐ­ĚăŽÀêZǚŐ¤qȂ\\L¢ŌİfÆs|zºeªÙæ§΢{Ā´ƐÚ¬¨Ĵà²łhʺKÞºÖTŠiƢ¾ªì°`öøu®Ê¾ãØ"],"encodeOffsets":[[88824,50096]]},"properties":{"cp":[87.617733,43.792818],"name":"新疆","childNum":1}},{"id":"110000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ĽOÁ›ûtŷmiÍt_H»Ĩ±d`й­{bw…Yr“³S]§§o¹€qGtm_Sŧ€“oa›‹FLg‘QN_•dV€@Zom_ć\\ߚc±x¯oœRcfe…£’o§ËgToÛJíĔóu…|wP¤™XnO¢ÉˆŦ¯rNÄā¤zâŖÈRpŢZŠœÚ{GŠrFt¦Òx§ø¹RóäV¤XdˆżâºWbwڍUd®bêņ¾‘jnŎGŃŶŠnzÚSeîĜZczî¾i]͜™QaúÍÔiþĩȨWĢ‹ü|Ėu[qb[swP@ÅğP¿{\\‡¥A¨Ï‘Ѩj¯ŠX\\¯œMK‘pA³[H…īu}}"],"encodeOffsets":[[120023,41045]]},"properties":{"cp":[116.405285,39.904989],"name":"北京","childNum":1}},{"id":"120000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@ŬgX§Ü«E…¶Ḟ“¬O_™ïlÁg“z±AXe™µÄĵ{¶]gitgšIj·›¥îakS€‰¨ÐƎk}ĕ{gB—qGf{¿a†U^fI“ư‹³õ{YƒıëNĿžk©ïËZŏ‘R§òoY×Ógc…ĥs¡bġ«@dekąI[nlPqCnp{ˆō³°`{PNdƗqSÄĻNNâyj]äžÒD ĬH°Æ]~¡HO¾ŒX}ÐxŒgp“gWˆrDGˆŒpù‚Š^L‚ˆrzWxˆZ^¨´T\\|~@I‰zƒ–bĤ‹œjeĊªz£®Ĕvě€L†mV¾Ô_ȔNW~zbĬvG†²ZmDM~”~"],"encodeOffsets":[[120237,41215]]},"properties":{"cp":[117.190182,39.125596],"name":"天津","childNum":1}},{"id":"310000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@ɧư¬EpƸÁxc‡"],["@@©„ªƒ"],["@@”MA‹‘š"],["@@Qp݁E§ÉC¾"],["@@bŝՕÕEȣÚƥêImɇǦèÜĠŒÚžÃƌÃ͎ó"],["@@ǜûȬɋŠŭ™×^‰sYŒɍDŋ‘ŽąñCG²«ªč@h–_p¯A{‡oloY€¬j@IJ`•gQڛhr|ǀ^MIJvtbe´R¯Ô¬¨YŽô¤r]ì†Ƭį"]],"encodeOffsets":[[[124702,32062]],[[124547,32200]],[[124808,31991]],[[124726,32110]],[[124903,32376]],[[124438,32149]]]},"properties":{"cp":[121.472644,31.231706],"name":"上海","childNum":6}},{"id":"500000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@vjG~nGŘŬĶȂƀƾ¹¸ØÎezĆT¸}êЖqHŸðqĖ䒊¥^CƒIj–²p…\\_ æüY|[YxƊæuž°xb®…Űb@~¢NQt°¶‚S栓Ê~rljĔëĚ¢~šuf`‘‚†fa‚ĔJåĊ„nÖ]„jƎćÊ@Š£¾a®£Ű{ŶĕF‹ègLk{Y|¡ĜWƔtƬJÑxq‹±ĢN´‰òK‰™–LÈüD|s`ŋ’ć]ƒÃ‰`đŒMûƱ½~Y°ħ`ƏíW‰½eI‹½{aŸ‘OIrÏ¡ĕŇa†p†µÜƅġ‘œ^ÖÛbÙŽŏml½S‹êqDu[R‹ãË»†ÿw`»y‘¸_ĺę}÷`M¯ċfCVµqʼn÷Z•gg“Œ`d½pDO‡ÎCnœ^uf²ènh¼WtƏxRGg¦…pV„†FI±ŽG^ŒIc´ec‡’G•ĹÞ½sëĬ„h˜xW‚}Kӈe­Xsbk”F¦›L‘ØgTkïƵNï¶}Gy“w\\oñ¡nmĈzjŸ•@™Óc£»Wă¹Ój“_m»ˆ¹·~MvÛaqœ»­‰êœ’\\ÂoVnŽÓØÍ™²«‹bq¿efE „€‹Ĝ^Qž~ Évý‡ş¤²Į‰pEİ}zcĺƒL‹½‡š¿gņ›¡ýE¡ya£³t\\¨\\vú»¼§·Ñr_oÒý¥u‚•_n»_ƒ•At©Þűā§IVeëƒY}{VPÀFA¨ąB}q@|Ou—\\Fm‰QF݅Mw˜å}]•€|FmϋCaƒwŒu_p—¯sfÙgY…DHl`{QEfNysBЦzG¸rHe‚„N\\CvEsÐùÜ_·ÖĉsaQ¯€}_U‡†xÃđŠq›NH¬•Äd^ÝŰR¬ã°wećJEž·vÝ·Hgƒ‚éFXjÉê`|yŒpxkAwœWĐpb¥eOsmzwqChóUQl¥F^laf‹anòsr›EvfQdÁUVf—ÎvÜ^efˆtET¬ôA\\œ¢sJŽnQTjP؈xøK|nBz‰„œĞ»LY‚…FDxӄvr“[ehľš•vN”¢o¾NiÂxGp⬐z›bfZo~hGi’]öF|‰|Nb‡tOMn eA±ŠtPT‡LjpYQ|†SH††YĀxinzDJ€Ìg¢và¥Pg‰_–ÇzII‹€II•„£®S¬„Øs쐣ŒN"],["@@ifjN@s"]],"encodeOffsets":[[[109628,30765]],[[111725,31320]]]},"properties":{"cp":[106.504962,29.533155],"name":"重庆","childNum":2}},{"id":"810000","type":"Feature","geometry":{"type":"MultiPolygon","coordinates":[["@@AlBk"],["@@mŽn"],["@@EpFo"],["@@ea¢pl¸Eõ¹‡hj[ƒ]ÔCΖ@lj˜¡uBXŸ…•´‹AI¹…[‹yDUˆ]W`çwZkmc–…M›žp€Åv›}I‹oJlcaƒfёKްä¬XJmРđhI®æÔtSHn€Eˆ„ÒrÈc"],["@@rMUw‡AS®€e"]],"encodeOffsets":[[[117111,23002]],[[117072,22876]],[[117045,22887]],[[116975,23082]],[[116882,22747]]]},"properties":{"cp":[114.173355,22.320048],"name":"香港","childNum":5}},{"id":"820000","type":"Feature","geometry":{"type":"Polygon","coordinates":["@@kÊd°å§s"],"encodeOffsets":[[116279,22639]]},"properties":{"cp":[113.54909,22.198951],"name":"澳门","childNum":1}}],"UTF8Encoding":true}); +})); \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/charts/components/map/index.vue b/components/vue-admin-perfect/src/views/charts/components/map/index.vue new file mode 100644 index 0000000..a093182 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/map/index.vue @@ -0,0 +1,289 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/components/migration/get.js b/components/vue-admin-perfect/src/views/charts/components/migration/get.js new file mode 100644 index 0000000..80a5ac0 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/migration/get.js @@ -0,0 +1 @@ +export const geoJson = {"type":"FeatureCollection","features":[{"type":"Feature","id":"xin_jiang","properties":{"name":"新疆","cp":[84.9023,41.748],"childNum":18},"geometry":{"type":"Polygon","coordinates":[[[96.416,42.7588],[96.416,42.7148],[95.9766,42.4951],[96.0645,42.3193],[96.2402,42.2314],[95.9766,41.9238],[95.2734,41.6162],[95.1855,41.792],[94.5703,41.4844],[94.043,41.0889],[93.8672,40.6934],[93.0762,40.6494],[92.6367,39.6387],[92.373,39.3311],[92.373,39.1113],[92.373,39.0234],[90.1758,38.4961],[90.3516,38.2324],[90.6152,38.3203],[90.5273,37.8369],[91.0547,37.4414],[91.3184,37.0898],[90.7031,36.7822],[90.791,36.6064],[91.0547,36.5186],[91.0547,36.0791],[90.8789,36.0352],[90,36.2549],[89.9121,36.0791],[89.7363,36.0791],[89.209,36.2988],[88.7695,36.3428],[88.5938,36.4746],[87.3633,36.4307],[86.2207,36.167],[86.1328,35.8594],[85.6055,35.6836],[85.0781,35.7275],[84.1992,35.376],[83.1445,35.4199],[82.8809,35.6836],[82.4414,35.7275],[82.002,35.332],[81.6504,35.2441],[80.4199,35.4199],[80.2441,35.2881],[80.332,35.1563],[80.2441,35.2002],[79.8926,34.8047],[79.8047,34.4971],[79.1016,34.4531],[79.0137,34.3213],[78.2227,34.7168],[78.0469,35.2441],[78.0469,35.5078],[77.4316,35.4639],[76.8164,35.6396],[76.5527,35.8594],[76.2012,35.8154],[75.9375,36.0352],[76.0254,36.4746],[75.8496,36.6943],[75.498,36.7383],[75.4102,36.958],[75.0586,37.002],[74.8828,36.9141],[74.7949,37.0459],[74.5313,37.0898],[74.5313,37.2217],[74.8828,37.2217],[75.1465,37.4414],[74.8828,37.5732],[74.9707,37.749],[74.8828,38.4521],[74.3555,38.6719],[74.1797,38.6719],[74.0918,38.54],[73.8281,38.584],[73.7402,38.8477],[73.8281,38.9795],[73.4766,39.375],[73.916,39.5068],[73.916,39.6826],[73.8281,39.7705],[74.0039,40.0342],[74.8828,40.3418],[74.7949,40.5176],[75.2344,40.4297],[75.5859,40.6494],[75.7617,40.2979],[76.377,40.3857],[76.9043,41.001],[77.6074,41.001],[78.1348,41.2207],[78.1348,41.3965],[80.1563,42.0557],[80.2441,42.2754],[80.1563,42.627],[80.2441,42.8467],[80.5078,42.8906],[80.4199,43.0664],[80.7715,43.1982],[80.4199,44.165],[80.4199,44.6045],[79.9805,44.8242],[79.9805,44.9561],[81.7383,45.3955],[82.0898,45.2197],[82.5293,45.2197],[82.2656,45.6592],[83.0566,47.2412],[83.6719,47.0215],[84.7266,47.0215],[84.9023,46.8896],[85.5176,47.0654],[85.6934,47.2852],[85.5176,48.1201],[85.7813,48.4277],[86.5723,48.5596],[86.8359,48.8232],[86.748,48.9551],[86.8359,49.1309],[87.8027,49.1748],[87.8906,48.999],[87.7148,48.9111],[88.0664,48.7354],[87.9785,48.6035],[88.5059,48.3838],[88.6816,48.1641],[89.1211,47.9883],[89.5605,48.0322],[89.7363,47.8564],[90.0879,47.8564],[90.3516,47.6807],[90.5273,47.2412],[90.8789,46.9775],[91.0547,46.582],[90.8789,46.3184],[91.0547,46.0107],[90.7031,45.7471],[90.7031,45.5273],[90.8789,45.2197],[91.582,45.0879],[93.5156,44.9561],[94.7461,44.3408],[95.3613,44.2969],[95.3613,44.0332],[95.5371,43.9014],[95.8887,43.2422],[96.3281,42.9346],[96.416,42.7588]]]}},{"type":"Feature","id":"xi_zang","properties":{"name":"西藏","cp":[88.7695,31.6846],"childNum":7},"geometry":{"type":"Polygon","coordinates":[[[79.0137,34.3213],[79.1016,34.4531],[79.8047,34.4971],[79.8926,34.8047],[80.2441,35.2002],[80.332,35.1563],[80.2441,35.2881],[80.4199,35.4199],[81.6504,35.2441],[82.002,35.332],[82.4414,35.7275],[82.8809,35.6836],[83.1445,35.4199],[84.1992,35.376],[85.0781,35.7275],[85.6055,35.6836],[86.1328,35.8594],[86.2207,36.167],[87.3633,36.4307],[88.5938,36.4746],[88.7695,36.3428],[89.209,36.2988],[89.7363,36.0791],[89.3848,36.0352],[89.4727,35.9033],[89.7363,35.7715],[89.7363,35.4199],[89.4727,35.376],[89.4727,35.2441],[89.5605,34.8926],[89.8242,34.8486],[89.7363,34.6729],[89.8242,34.3652],[89.6484,34.0137],[90.0879,33.4863],[90.7031,33.1348],[91.4063,33.1348],[91.9336,32.8271],[92.1973,32.8271],[92.2852,32.7393],[92.9883,32.7393],[93.5156,32.4756],[93.7793,32.5635],[94.1309,32.4316],[94.6582,32.6074],[95.1855,32.4316],[95.0098,32.2998],[95.1855,32.3438],[95.2734,32.2119],[95.3613,32.168],[95.3613,31.9922],[95.4492,31.8164],[95.8008,31.6846],[95.9766,31.8164],[96.1523,31.5967],[96.2402,31.9482],[96.5039,31.7285],[96.8555,31.6846],[96.7676,31.9922],[97.2949,32.0801],[97.3828,32.5635],[97.7344,32.5195],[98.1738,32.3438],[98.4375,31.8604],[98.877,31.4209],[98.6133,31.2012],[98.9648,30.7617],[99.1406,29.2676],[98.9648,29.1357],[98.9648,28.8281],[98.7891,28.8721],[98.7891,29.0039],[98.7012,28.916],[98.6133,28.5205],[98.7891,28.3447],[98.7012,28.2129],[98.3496,28.125],[98.2617,28.3887],[98.1738,28.125],[97.5586,28.5205],[97.2949,28.0811],[97.3828,27.9053],[97.0313,27.7295],[96.5039,28.125],[95.7129,28.2568],[95.3613,28.125],[95.2734,27.9492],[94.2188,27.5537],[93.8672,27.0264],[93.6035,26.9385],[92.1094,26.8506],[92.0215,27.4658],[91.582,27.5537],[91.582,27.9053],[91.4063,28.0371],[91.0547,27.8613],[90.7031,28.0811],[89.8242,28.2129],[89.6484,28.1689],[89.1211,27.5977],[89.1211,27.334],[89.0332,27.2021],[88.7695,27.4219],[88.8574,27.9932],[88.6816,28.125],[88.1543,27.9053],[87.8906,27.9492],[87.7148,27.8174],[87.0996,27.8174],[86.748,28.125],[86.5723,28.125],[86.4844,27.9053],[86.1328,28.125],[86.0449,27.9053],[85.6934,28.3447],[85.6055,28.2568],[85.166,28.3447],[85.166,28.6523],[84.9023,28.5645],[84.4629,28.7402],[84.2871,28.8721],[84.1992,29.2236],[84.1113,29.2676],[83.584,29.1797],[83.2324,29.5752],[82.1777,30.0586],[82.0898,30.3223],[81.3867,30.3662],[81.2109,30.0146],[81.0352,30.2344],[80.0684,30.5859],[79.7168,30.9375],[79.0137,31.0693],[78.75,31.333],[78.8379,31.5967],[78.6621,31.8164],[78.75,31.9043],[78.4863,32.124],[78.3984,32.5195],[78.75,32.6953],[78.9258,32.3438],[79.2773,32.5635],[79.1016,33.1787],[78.6621,33.6621],[78.6621,34.1016],[78.9258,34.1455],[79.0137,34.3213]]]}},{"type":"Feature","id":"nei_meng_gu","properties":{"name":"内蒙古","cp":[117.5977,44.3408],"childNum":12},"geometry":{"type":"Polygon","coordinates":[[[97.207,42.8027],[99.4922,42.583],[100.8105,42.6709],[101.7773,42.4951],[102.041,42.2314],[102.7441,42.1436],[103.3594,41.8799],[103.8867,41.792],[104.502,41.8799],[104.502,41.6602],[105.0293,41.5723],[105.7324,41.9238],[107.4023,42.4512],[109.4238,42.4512],[110.3906,42.7588],[111.0059,43.3301],[111.9727,43.6816],[111.9727,43.8135],[111.4453,44.3848],[111.7969,45],[111.9727,45.0879],[113.6426,44.7363],[114.1699,44.9561],[114.5215,45.3955],[115.6641,45.4395],[116.1914,45.7031],[116.2793,45.9668],[116.543,46.2744],[117.334,46.3623],[117.4219,46.582],[117.7734,46.5381],[118.3008,46.7578],[118.7402,46.7139],[118.916,46.7578],[119.0918,46.6699],[119.707,46.626],[119.9707,46.7139],[119.707,47.1973],[118.4766,47.9883],[117.8613,48.0322],[117.334,47.6807],[116.8066,47.9004],[116.1914,47.8564],[115.9277,47.6807],[115.5762,47.9004],[115.4883,48.1641],[115.8398,48.252],[115.8398,48.5596],[116.7188,49.834],[117.7734,49.5264],[118.5645,49.9219],[119.2676,50.0977],[119.3555,50.3174],[119.1797,50.3613],[119.5313,50.7568],[119.5313,50.8887],[119.707,51.0645],[120.1465,51.6797],[120.6738,51.9434],[120.7617,52.1191],[120.7617,52.251],[120.5859,52.3389],[120.6738,52.5146],[120.4102,52.6465],[120.0586,52.6025],[120.0586,52.7344],[120.8496,53.2617],[121.4648,53.3496],[121.8164,53.042],[121.2012,52.5586],[121.6406,52.4268],[121.7285,52.2949],[121.9922,52.2949],[122.168,52.5146],[122.6953,52.251],[122.6074,52.0752],[122.959,51.3281],[123.3105,51.2402],[123.6621,51.3721],[124.3652,51.2842],[124.541,51.3721],[124.8926,51.3721],[125.0684,51.6357],[125.332,51.6357],[126.0352,51.0205],[125.7715,50.7568],[125.7715,50.5371],[125.332,50.1416],[125.1563,49.834],[125.2441,49.1748],[124.8047,49.1309],[124.4531,48.1201],[124.2773,48.5156],[122.4316,47.373],[123.0469,46.7139],[123.3984,46.8896],[123.3984,46.9775],[123.4863,46.9775],[123.5742,46.8457],[123.5742,46.8896],[123.5742,46.6699],[123.0469,46.582],[123.2227,46.2305],[122.7832,46.0107],[122.6953,45.7031],[122.4316,45.8789],[122.2559,45.791],[121.8164,46.0107],[121.7285,45.7471],[121.9043,45.7031],[122.2559,45.2637],[122.0801,44.8682],[122.3438,44.2529],[123.1348,44.4727],[123.4863,43.7256],[123.3105,43.5059],[123.6621,43.374],[123.5742,43.0225],[123.3105,42.9785],[123.1348,42.8027],[122.7832,42.7148],[122.3438,42.8467],[122.3438,42.6709],[121.9922,42.7148],[121.7285,42.4512],[121.4648,42.4951],[120.498,42.0996],[120.1465,41.7041],[119.8828,42.1875],[119.5313,42.3633],[119.3555,42.2754],[119.2676,41.7041],[119.4434,41.6162],[119.2676,41.3086],[118.3887,41.3086],[118.125,41.748],[118.3008,41.792],[118.3008,42.0996],[118.125,42.0557],[117.9492,42.2314],[118.0371,42.4072],[117.7734,42.627],[117.5098,42.583],[117.334,42.4512],[116.8945,42.4072],[116.8066,42.0117],[116.2793,42.0117],[116.0156,41.792],[115.9277,41.9238],[115.2246,41.5723],[114.9609,41.6162],[114.873,42.0996],[114.5215,42.1436],[114.1699,41.792],[114.2578,41.5723],[113.9063,41.4404],[113.9941,41.2207],[113.9063,41.1328],[114.082,40.7373],[114.082,40.5176],[113.8184,40.5176],[113.5547,40.3418],[113.2031,40.3857],[112.7637,40.166],[112.3242,40.2539],[111.9727,39.5947],[111.4453,39.6387],[111.3574,39.4189],[111.0938,39.375],[111.0938,39.5947],[110.6543,39.2871],[110.127,39.4629],[110.2148,39.2871],[109.8633,39.2432],[109.9512,39.1553],[108.9844,38.3203],[109.0723,38.0127],[108.8965,37.9688],[108.8086,38.0127],[108.7207,37.7051],[108.1934,37.6172],[107.666,37.8809],[107.3145,38.1006],[106.7871,38.1885],[106.5234,38.3203],[106.9629,38.9795],[106.7871,39.375],[106.3477,39.2871],[105.9082,38.7158],[105.8203,37.793],[104.3262,37.4414],[103.4473,37.8369],[103.3594,38.0127],[103.5352,38.1445],[103.4473,38.3643],[104.2383,38.9795],[104.0625,39.4189],[103.3594,39.3311],[103.0078,39.1113],[102.4805,39.2432],[101.8652,39.1113],[102.041,38.8916],[101.7773,38.6719],[101.3379,38.7598],[101.25,39.0234],[100.9863,38.9355],[100.8105,39.4189],[100.5469,39.4189],[100.0195,39.7705],[99.4922,39.8584],[100.1074,40.2539],[100.1953,40.6494],[99.9316,41.001],[99.2285,40.8691],[99.0527,40.6934],[98.9648,40.7813],[98.7891,40.6055],[98.5254,40.7373],[98.6133,40.6494],[98.3496,40.5615],[98.3496,40.9131],[97.4707,41.4844],[97.8223,41.6162],[97.8223,41.748],[97.207,42.8027]]]}},{"type":"Feature","id":"qing_hai","properties":{"name":"青海","cp":[96.2402,35.4199],"childNum":8},"geometry":{"type":"Polygon","coordinates":[[[89.7363,36.0791],[89.9121,36.0791],[90,36.2549],[90.8789,36.0352],[91.0547,36.0791],[91.0547,36.5186],[90.791,36.6064],[90.7031,36.7822],[91.3184,37.0898],[91.0547,37.4414],[90.5273,37.8369],[90.6152,38.3203],[90.3516,38.2324],[90.1758,38.4961],[92.373,39.0234],[92.373,39.1113],[93.1641,39.1992],[93.1641,38.9795],[93.6914,38.9355],[93.8672,38.7158],[94.3066,38.7598],[94.5703,38.3643],[95.0098,38.4082],[95.4492,38.2764],[95.7129,38.3643],[96.2402,38.1006],[96.416,38.2324],[96.6797,38.1885],[96.6797,38.4521],[97.1191,38.584],[97.0313,39.1992],[98.1738,38.8037],[98.3496,39.0234],[98.6133,38.9355],[98.7891,39.0674],[99.1406,38.9355],[99.8438,38.3643],[100.1953,38.2764],[100.0195,38.4521],[100.1074,38.4961],[100.459,38.2764],[100.7227,38.2324],[101.1621,37.8369],[101.5137,37.8809],[101.7773,37.6172],[101.9531,37.7051],[102.1289,37.4414],[102.5684,37.1777],[102.4805,36.958],[102.6563,36.8262],[102.5684,36.7383],[102.832,36.3428],[103.0078,36.2549],[102.9199,36.0791],[102.9199,35.9033],[102.6563,35.7715],[102.832,35.5957],[102.4805,35.5957],[102.3047,35.4199],[102.3926,35.2002],[101.9531,34.8486],[101.9531,34.6289],[102.2168,34.4092],[102.1289,34.2773],[101.6895,34.1016],[100.9863,34.3652],[100.8105,34.2773],[101.25,33.6621],[101.5137,33.7061],[101.6016,33.5303],[101.7773,33.5303],[101.6895,33.3105],[101.7773,33.2227],[101.6016,33.1348],[101.1621,33.2227],[101.25,32.6953],[100.7227,32.6514],[100.7227,32.5195],[100.3711,32.7393],[100.1074,32.6514],[100.1074,32.8711],[99.8438,33.0029],[99.7559,32.7393],[99.2285,32.915],[99.2285,33.0469],[98.877,33.1787],[98.4375,34.0576],[97.8223,34.1895],[97.6465,34.1016],[97.7344,33.9258],[97.3828,33.8818],[97.4707,33.5742],[97.7344,33.3984],[97.3828,32.8711],[97.4707,32.6953],[97.7344,32.5195],[97.3828,32.5635],[97.2949,32.0801],[96.7676,31.9922],[96.8555,31.6846],[96.5039,31.7285],[96.2402,31.9482],[96.1523,31.5967],[95.9766,31.8164],[95.8008,31.6846],[95.4492,31.8164],[95.3613,31.9922],[95.3613,32.168],[95.2734,32.2119],[95.1855,32.3438],[95.0098,32.2998],[95.1855,32.4316],[94.6582,32.6074],[94.1309,32.4316],[93.7793,32.5635],[93.5156,32.4756],[92.9883,32.7393],[92.2852,32.7393],[92.1973,32.8271],[91.9336,32.8271],[91.4063,33.1348],[90.7031,33.1348],[90.0879,33.4863],[89.6484,34.0137],[89.8242,34.3652],[89.7363,34.6729],[89.8242,34.8486],[89.5605,34.8926],[89.4727,35.2441],[89.4727,35.376],[89.7363,35.4199],[89.7363,35.7715],[89.4727,35.9033],[89.3848,36.0352],[89.7363,36.0791]]]}},{"type":"Feature","id":"si_chuan","properties":{"name":"四川","cp":[102.9199,30.1904],"childNum":21},"geometry":{"type":"Polygon","coordinates":[[[101.7773,33.5303],[101.8652,33.5742],[101.9531,33.4424],[101.8652,33.0908],[102.4805,33.4424],[102.2168,33.9258],[102.9199,34.3213],[103.0957,34.1895],[103.1836,33.7939],[104.1504,33.6182],[104.2383,33.3984],[104.4141,33.3105],[104.3262,33.2227],[104.4141,33.0469],[104.3262,32.8711],[104.4141,32.7393],[105.2051,32.6074],[105.3809,32.7393],[105.3809,32.8711],[105.4688,32.915],[105.5566,32.7393],[106.084,32.8711],[106.084,32.7393],[106.3477,32.6514],[107.0508,32.6953],[107.1387,32.4756],[107.2266,32.4316],[107.4023,32.5195],[108.0176,32.168],[108.2813,32.2559],[108.5449,32.2119],[108.3691,32.168],[108.2813,31.9043],[108.5449,31.6846],[108.1934,31.5088],[107.9297,30.8496],[107.4902,30.8496],[107.4023,30.7617],[107.4902,30.6299],[107.0508,30.0146],[106.7871,30.0146],[106.6113,30.3223],[106.2598,30.1904],[105.8203,30.4541],[105.6445,30.2783],[105.5566,30.1025],[105.7324,29.8828],[105.293,29.5313],[105.4688,29.3115],[105.7324,29.2676],[105.8203,28.96],[106.2598,28.8721],[106.3477,28.5205],[105.9961,28.7402],[105.6445,28.4326],[105.9082,28.125],[106.1719,28.125],[106.3477,27.8174],[105.6445,27.6416],[105.5566,27.7734],[105.293,27.7295],[105.2051,27.9932],[105.0293,28.0811],[104.8535,27.9053],[104.4141,27.9492],[104.3262,28.0371],[104.4141,28.125],[104.4141,28.2568],[104.2383,28.4326],[104.4141,28.6084],[103.8867,28.6523],[103.7988,28.3008],[103.4473,28.125],[103.4473,27.7734],[102.9199,27.29],[103.0078,26.3672],[102.6563,26.1914],[102.5684,26.3672],[102.1289,26.1035],[101.8652,26.0596],[101.6016,26.2354],[101.6895,26.3672],[101.4258,26.5869],[101.4258,26.8066],[101.4258,26.7188],[101.1621,27.0264],[101.1621,27.1582],[100.7227,27.8613],[100.3711,27.8174],[100.2832,27.7295],[100.0195,28.125],[100.1953,28.3447],[99.668,28.8281],[99.4043,28.5205],[99.4043,28.1689],[99.2285,28.3008],[99.1406,29.2676],[98.9648,30.7617],[98.6133,31.2012],[98.877,31.4209],[98.4375,31.8604],[98.1738,32.3438],[97.7344,32.5195],[97.4707,32.6953],[97.3828,32.8711],[97.7344,33.3984],[97.4707,33.5742],[97.3828,33.8818],[97.7344,33.9258],[97.6465,34.1016],[97.8223,34.1895],[98.4375,34.0576],[98.877,33.1787],[99.2285,33.0469],[99.2285,32.915],[99.7559,32.7393],[99.8438,33.0029],[100.1074,32.8711],[100.1074,32.6514],[100.3711,32.7393],[100.7227,32.5195],[100.7227,32.6514],[101.25,32.6953],[101.1621,33.2227],[101.6016,33.1348],[101.7773,33.2227],[101.6895,33.3105],[101.7773,33.5303]]]}},{"type":"Feature","id":"hei_long_jiang","properties":{"name":"黑龙江","cp":[128.1445,48.5156],"childNum":13},"geometry":{"type":"Polygon","coordinates":[[[121.4648,53.3496],[123.6621,53.5693],[124.8926,53.0859],[125.0684,53.2178],[125.5957,53.0859],[125.6836,52.9102],[126.123,52.7783],[126.0352,52.6025],[126.2109,52.5146],[126.3867,52.2949],[126.3867,52.207],[126.5625,52.1631],[126.4746,51.9434],[126.9141,51.3721],[126.8262,51.2842],[127.002,51.3281],[126.9141,51.1084],[127.2656,50.7568],[127.3535,50.2734],[127.6172,50.2295],[127.5293,49.8779],[127.793,49.6143],[128.7598,49.5703],[129.1113,49.3506],[129.4629,49.4385],[130.2539,48.8672],[130.6934,48.8672],[130.5176,48.6475],[130.8691,48.2959],[130.6934,48.1201],[131.0449,47.6807],[132.5391,47.7246],[132.627,47.9443],[133.0664,48.1201],[133.5059,48.1201],[134.209,48.3838],[135.0879,48.4277],[134.7363,48.252],[134.5605,47.9883],[134.7363,47.6807],[134.5605,47.4609],[134.3848,47.4609],[134.209,47.2852],[134.209,47.1533],[133.8574,46.5381],[133.9453,46.2744],[133.5059,45.835],[133.418,45.5713],[133.2422,45.5273],[133.0664,45.1318],[132.8906,45.0439],[131.9238,45.3516],[131.5723,45.0439],[131.0449,44.8682],[131.3086,44.0771],[131.2207,43.7256],[131.3086,43.4619],[130.8691,43.418],[130.5176,43.6377],[130.3418,43.9893],[129.9902,43.8574],[129.9023,44.0332],[129.8145,43.9014],[129.2871,43.8135],[129.1992,43.5938],[128.8477,43.5498],[128.4961,44.165],[128.4082,44.4727],[128.0566,44.3408],[128.0566,44.1211],[127.7051,44.1211],[127.5293,44.6045],[127.0898,44.6045],[127.002,44.7803],[127.0898,45],[126.9141,45.1318],[126.5625,45.2637],[126.0352,45.1758],[125.7715,45.3076],[125.6836,45.5273],[125.0684,45.3955],[124.8926,45.5273],[124.3652,45.4395],[124.0137,45.7471],[123.9258,46.2305],[123.2227,46.2305],[123.0469,46.582],[123.5742,46.6699],[123.5742,46.8896],[123.5742,46.8457],[123.4863,46.9775],[123.3984,46.9775],[123.3984,46.8896],[123.0469,46.7139],[122.4316,47.373],[124.2773,48.5156],[124.4531,48.1201],[124.8047,49.1309],[125.2441,49.1748],[125.1563,49.834],[125.332,50.1416],[125.7715,50.5371],[125.7715,50.7568],[126.0352,51.0205],[125.332,51.6357],[125.0684,51.6357],[124.8926,51.3721],[124.541,51.3721],[124.3652,51.2842],[123.6621,51.3721],[123.3105,51.2402],[122.959,51.3281],[122.6074,52.0752],[122.6953,52.251],[122.168,52.5146],[121.9922,52.2949],[121.7285,52.2949],[121.6406,52.4268],[121.2012,52.5586],[121.8164,53.042],[121.4648,53.3496]]]}},{"type":"Feature","id":"gan_su","properties":{"name":"甘肃","cp":[95.7129,40.166],"childNum":14},"geometry":{"type":"Polygon","coordinates":[[[96.416,42.7148],[97.207,42.8027],[97.8223,41.748],[97.8223,41.6162],[97.4707,41.4844],[98.3496,40.9131],[98.3496,40.5615],[98.6133,40.6494],[98.5254,40.7373],[98.7891,40.6055],[98.9648,40.7813],[99.0527,40.6934],[99.2285,40.8691],[99.9316,41.001],[100.1953,40.6494],[100.1074,40.2539],[99.4922,39.8584],[100.0195,39.7705],[100.5469,39.4189],[100.8105,39.4189],[100.9863,38.9355],[101.25,39.0234],[101.3379,38.7598],[101.7773,38.6719],[102.041,38.8916],[101.8652,39.1113],[102.4805,39.2432],[103.0078,39.1113],[103.3594,39.3311],[104.0625,39.4189],[104.2383,38.9795],[103.4473,38.3643],[103.5352,38.1445],[103.3594,38.0127],[103.4473,37.8369],[104.3262,37.4414],[104.5898,37.4414],[104.5898,37.2217],[104.8535,37.2217],[105.293,36.8262],[105.2051,36.6943],[105.4688,36.123],[105.293,35.9912],[105.3809,35.7715],[105.7324,35.7275],[105.8203,35.5518],[105.9961,35.4639],[105.9082,35.4199],[105.9961,35.4199],[106.084,35.376],[106.2598,35.4199],[106.3477,35.2441],[106.5234,35.332],[106.4355,35.6836],[106.6992,35.6836],[106.9629,35.8154],[106.875,36.123],[106.5234,36.2549],[106.5234,36.4746],[106.4355,36.5625],[106.6113,36.7822],[106.6113,37.0898],[107.3145,37.0898],[107.3145,36.9141],[108.7207,36.3428],[108.6328,35.9912],[108.5449,35.8594],[108.6328,35.5518],[108.5449,35.2881],[107.7539,35.2881],[107.7539,35.1123],[107.8418,35.0244],[107.666,34.9365],[107.2266,34.8926],[106.9629,35.0684],[106.6113,35.0684],[106.5234,34.7607],[106.3477,34.585],[106.6992,34.3213],[106.5234,34.2773],[106.6113,34.1455],[106.4355,33.9258],[106.5234,33.5303],[105.9961,33.6182],[105.7324,33.3984],[105.9961,33.1787],[105.9082,33.0029],[105.4688,32.915],[105.3809,32.8711],[105.3809,32.7393],[105.2051,32.6074],[104.4141,32.7393],[104.3262,32.8711],[104.4141,33.0469],[104.3262,33.2227],[104.4141,33.3105],[104.2383,33.3984],[104.1504,33.6182],[103.1836,33.7939],[103.0957,34.1895],[102.9199,34.3213],[102.2168,33.9258],[102.4805,33.4424],[101.8652,33.0908],[101.9531,33.4424],[101.8652,33.5742],[101.7773,33.5303],[101.6016,33.5303],[101.5137,33.7061],[101.25,33.6621],[100.8105,34.2773],[100.9863,34.3652],[101.6895,34.1016],[102.1289,34.2773],[102.2168,34.4092],[101.9531,34.6289],[101.9531,34.8486],[102.3926,35.2002],[102.3047,35.4199],[102.4805,35.5957],[102.832,35.5957],[102.6563,35.7715],[102.9199,35.9033],[102.9199,36.0791],[103.0078,36.2549],[102.832,36.3428],[102.5684,36.7383],[102.6563,36.8262],[102.4805,36.958],[102.5684,37.1777],[102.1289,37.4414],[101.9531,37.7051],[101.7773,37.6172],[101.5137,37.8809],[101.1621,37.8369],[100.7227,38.2324],[100.459,38.2764],[100.1074,38.4961],[100.0195,38.4521],[100.1953,38.2764],[99.8438,38.3643],[99.1406,38.9355],[98.7891,39.0674],[98.6133,38.9355],[98.3496,39.0234],[98.1738,38.8037],[97.0313,39.1992],[97.1191,38.584],[96.6797,38.4521],[96.6797,38.1885],[96.416,38.2324],[96.2402,38.1006],[95.7129,38.3643],[95.4492,38.2764],[95.0098,38.4082],[94.5703,38.3643],[94.3066,38.7598],[93.8672,38.7158],[93.6914,38.9355],[93.1641,38.9795],[93.1641,39.1992],[92.373,39.1113],[92.373,39.3311],[92.6367,39.6387],[93.0762,40.6494],[93.8672,40.6934],[94.043,41.0889],[94.5703,41.4844],[95.1855,41.792],[95.2734,41.6162],[95.9766,41.9238],[96.2402,42.2314],[96.0645,42.3193],[95.9766,42.4951],[96.416,42.7148]]]}},{"type":"Feature","id":"yun_nan","properties":{"name":"云南","cp":[101.8652,25.1807],"childNum":16},"geometry":{"type":"Polygon","coordinates":[[[98.1738,28.125],[98.2617,28.3887],[98.3496,28.125],[98.7012,28.2129],[98.7891,28.3447],[98.6133,28.5205],[98.7012,28.916],[98.7891,29.0039],[98.7891,28.8721],[98.9648,28.8281],[98.9648,29.1357],[99.1406,29.2676],[99.2285,28.3008],[99.4043,28.1689],[99.4043,28.5205],[99.668,28.8281],[100.1953,28.3447],[100.0195,28.125],[100.2832,27.7295],[100.3711,27.8174],[100.7227,27.8613],[101.1621,27.1582],[101.1621,27.0264],[101.4258,26.7188],[101.4258,26.8066],[101.4258,26.5869],[101.6895,26.3672],[101.6016,26.2354],[101.8652,26.0596],[102.1289,26.1035],[102.5684,26.3672],[102.6563,26.1914],[103.0078,26.3672],[102.9199,27.29],[103.4473,27.7734],[103.4473,28.125],[103.7988,28.3008],[103.8867,28.6523],[104.4141,28.6084],[104.2383,28.4326],[104.4141,28.2568],[104.4141,28.125],[104.3262,28.0371],[104.4141,27.9492],[104.8535,27.9053],[105.0293,28.0811],[105.2051,27.9932],[105.293,27.7295],[105.2051,27.3779],[104.5898,27.334],[104.4141,27.4658],[104.1504,27.2461],[103.8867,27.4219],[103.623,27.0264],[103.7109,26.9824],[103.7109,26.7627],[103.8867,26.543],[104.4141,26.6748],[104.6777,26.4111],[104.3262,25.708],[104.8535,25.2246],[104.5898,25.0488],[104.6777,24.9609],[104.502,24.7412],[104.6777,24.3457],[104.7656,24.4775],[105.0293,24.4336],[105.2051,24.082],[105.4688,24.0381],[105.5566,24.126],[105.9961,24.126],[106.1719,23.8184],[106.1719,23.5547],[105.6445,23.4229],[105.5566,23.2031],[105.293,23.3789],[104.8535,23.1592],[104.7656,22.8516],[104.3262,22.6758],[104.1504,22.8076],[103.9746,22.5439],[103.623,22.7637],[103.5352,22.5879],[103.3594,22.8076],[103.0957,22.4561],[102.4805,22.7637],[102.3047,22.4121],[101.8652,22.3682],[101.7773,22.5],[101.6016,22.1924],[101.8652,21.6211],[101.7773,21.1377],[101.6016,21.2256],[101.25,21.1816],[101.1621,21.7529],[100.6348,21.4453],[100.1074,21.4893],[99.9316,22.0605],[99.2285,22.1484],[99.4043,22.5879],[99.3164,22.7197],[99.4922,23.0713],[98.877,23.2031],[98.7012,23.9502],[98.877,24.126],[98.1738,24.082],[97.7344,23.8623],[97.5586,23.9063],[97.7344,24.126],[97.6465,24.4336],[97.5586,24.4336],[97.5586,24.7412],[97.7344,24.8291],[97.8223,25.2686],[98.1738,25.4004],[98.1738,25.6201],[98.3496,25.5762],[98.5254,25.8398],[98.7012,25.8838],[98.6133,26.0596],[98.7012,26.1475],[98.7891,26.5869],[98.7012,27.5098],[98.5254,27.6416],[98.3496,27.5098],[98.1738,28.125]]]}},{"type":"Feature","id":"guang_xi","properties":{"name":"广西","cp":[108.2813,23.6426],"childNum":14},"geometry":{"type":"Polygon","coordinates":[[[104.502,24.7412],[104.6777,24.6094],[105.2051,24.9609],[105.9961,24.6533],[106.1719,24.7852],[106.1719,24.9609],[106.875,25.1807],[107.0508,25.2686],[106.9629,25.4883],[107.2266,25.6201],[107.4902,25.2246],[107.7539,25.2246],[107.8418,25.1367],[108.1055,25.2246],[108.1934,25.4443],[108.3691,25.5322],[108.6328,25.3125],[108.6328,25.5762],[109.0723,25.5322],[108.9844,25.752],[109.3359,25.708],[109.5117,26.0156],[109.7754,25.8838],[109.9512,26.1914],[110.2148,25.9717],[110.5664,26.3232],[111.1816,26.3232],[111.2695,26.2354],[111.2695,25.8838],[111.4453,25.8398],[111.0059,25.0049],[111.0938,24.9609],[111.3574,25.1367],[111.5332,24.6533],[111.709,24.7852],[112.0605,24.7412],[111.8848,24.6533],[112.0605,24.3457],[111.8848,24.2139],[111.8848,23.9941],[111.7969,23.8184],[111.6211,23.8184],[111.6211,23.6865],[111.3574,23.4668],[111.4453,23.0273],[111.2695,22.8076],[110.7422,22.5439],[110.7422,22.2803],[110.6543,22.1484],[110.3027,22.1484],[110.3027,21.8848],[109.9512,21.8408],[109.8633,21.665],[109.7754,21.6211],[109.7754,21.4014],[109.5996,21.4453],[109.1602,21.3574],[109.248,20.874],[109.0723,20.9619],[109.0723,21.5332],[108.7207,21.5332],[108.6328,21.665],[108.2813,21.4893],[107.8418,21.6211],[107.4023,21.6211],[107.0508,21.7969],[107.0508,21.9287],[106.6992,22.0166],[106.6113,22.4121],[106.7871,22.7637],[106.6992,22.8955],[105.9082,22.9395],[105.5566,23.0713],[105.5566,23.2031],[105.6445,23.4229],[106.1719,23.5547],[106.1719,23.8184],[105.9961,24.126],[105.5566,24.126],[105.4688,24.0381],[105.2051,24.082],[105.0293,24.4336],[104.7656,24.4775],[104.6777,24.3457],[104.502,24.7412]]]}},{"type":"Feature","id":"hu_nan","properties":{"name":"湖南","cp":[111.5332,27.3779],"childNum":14},"geometry":{"type":"Polygon","coordinates":[[[109.248,28.4766],[109.248,29.1357],[109.5117,29.6191],[109.6875,29.6191],[109.7754,29.751],[110.4785,29.6631],[110.6543,29.751],[110.4785,30.0146],[110.8301,30.1465],[111.7969,29.9268],[112.2363,29.5313],[112.5,29.6191],[112.6758,29.5752],[112.9395,29.7949],[113.0273,29.751],[112.9395,29.4873],[113.0273,29.4434],[113.5547,29.8389],[113.5547,29.707],[113.7305,29.5752],[113.6426,29.3115],[113.7305,29.0918],[113.9063,29.0479],[114.1699,28.8281],[114.082,28.5645],[114.2578,28.3447],[113.7305,27.9492],[113.6426,27.5977],[113.6426,27.3779],[113.8184,27.29],[113.7305,27.1143],[113.9063,26.9385],[113.9063,26.6309],[114.082,26.5869],[113.9941,26.1914],[114.2578,26.1475],[113.9941,26.0596],[113.9063,25.4443],[113.6426,25.3125],[113.2031,25.5322],[112.8516,25.3564],[113.0273,25.2246],[113.0273,24.9609],[112.8516,24.917],[112.5879,25.1367],[112.2363,25.1807],[112.1484,24.873],[112.0605,24.7412],[111.709,24.7852],[111.5332,24.6533],[111.3574,25.1367],[111.0938,24.9609],[111.0059,25.0049],[111.4453,25.8398],[111.2695,25.8838],[111.2695,26.2354],[111.1816,26.3232],[110.5664,26.3232],[110.2148,25.9717],[109.9512,26.1914],[109.7754,25.8838],[109.5117,26.0156],[109.4238,26.2793],[109.248,26.3232],[109.4238,26.5869],[109.3359,26.7188],[109.5117,26.8066],[109.5117,27.0264],[109.3359,27.1582],[108.8965,27.0264],[108.8086,27.1143],[109.4238,27.5977],[109.3359,27.9053],[109.3359,28.2568],[109.248,28.4766]]]}},{"type":"Feature","id":"shan_xi_1","properties":{"name":"陕西","cp":[109.5996,35.6396],"childNum":10},"geometry":{"type":"Polygon","coordinates":[[[105.4688,32.915],[105.9082,33.0029],[105.9961,33.1787],[105.7324,33.3984],[105.9961,33.6182],[106.5234,33.5303],[106.4355,33.9258],[106.6113,34.1455],[106.5234,34.2773],[106.6992,34.3213],[106.3477,34.585],[106.5234,34.7607],[106.6113,35.0684],[106.9629,35.0684],[107.2266,34.8926],[107.666,34.9365],[107.8418,35.0244],[107.7539,35.1123],[107.7539,35.2881],[108.5449,35.2881],[108.6328,35.5518],[108.5449,35.8594],[108.6328,35.9912],[108.7207,36.3428],[107.3145,36.9141],[107.3145,37.0898],[107.3145,37.6172],[107.666,37.8809],[108.1934,37.6172],[108.7207,37.7051],[108.8086,38.0127],[108.8965,37.9688],[109.0723,38.0127],[108.9844,38.3203],[109.9512,39.1553],[109.8633,39.2432],[110.2148,39.2871],[110.127,39.4629],[110.6543,39.2871],[111.0938,39.5947],[111.0938,39.375],[111.1816,39.2432],[110.918,38.7158],[110.8301,38.4961],[110.4785,38.1885],[110.4785,37.9688],[110.8301,37.6611],[110.3906,37.002],[110.4785,36.123],[110.5664,35.6396],[110.2148,34.8926],[110.2148,34.6729],[110.3906,34.585],[110.4785,34.2334],[110.6543,34.1455],[110.6543,33.8379],[111.0059,33.5303],[111.0059,33.2666],[110.7422,33.1348],[110.5664,33.2666],[110.3027,33.1787],[109.5996,33.2666],[109.4238,33.1348],[109.7754,33.0469],[109.7754,32.915],[110.127,32.7393],[110.127,32.6074],[109.6875,32.6074],[109.5117,32.4316],[109.5996,31.7285],[109.248,31.7285],[109.0723,31.9482],[108.5449,32.2119],[108.2813,32.2559],[108.0176,32.168],[107.4023,32.5195],[107.2266,32.4316],[107.1387,32.4756],[107.0508,32.6953],[106.3477,32.6514],[106.084,32.7393],[106.084,32.8711],[105.5566,32.7393],[105.4688,32.915]]]}},{"type":"Feature","id":"guang_dong","properties":{"name":"广东","cp":[113.4668,22.8076],"childNum":21},"geometry":{"type":"Polygon","coordinates":[[[109.7754,21.4014],[109.7754,21.6211],[109.8633,21.665],[109.9512,21.8408],[110.3027,21.8848],[110.3027,22.1484],[110.6543,22.1484],[110.7422,22.2803],[110.7422,22.5439],[111.2695,22.8076],[111.4453,23.0273],[111.3574,23.4668],[111.6211,23.6865],[111.6211,23.8184],[111.7969,23.8184],[111.8848,23.9941],[111.8848,24.2139],[112.0605,24.3457],[111.8848,24.6533],[112.0605,24.7412],[112.1484,24.873],[112.2363,25.1807],[112.5879,25.1367],[112.8516,24.917],[113.0273,24.9609],[113.0273,25.2246],[112.8516,25.3564],[113.2031,25.5322],[113.6426,25.3125],[113.9063,25.4443],[113.9941,25.2686],[114.6094,25.4004],[114.7852,25.2686],[114.6973,25.1367],[114.4336,24.9609],[114.1699,24.6973],[114.4336,24.5215],[115.4004,24.7852],[115.8398,24.5654],[115.752,24.7852],[115.9277,24.917],[116.2793,24.7852],[116.3672,24.873],[116.543,24.6094],[116.7188,24.6533],[116.9824,24.1699],[116.9824,23.9063],[117.1582,23.5547],[117.334,23.2471],[116.8945,23.3789],[116.6309,23.1152],[116.543,22.8516],[115.9277,22.7197],[115.6641,22.7637],[115.5762,22.6318],[115.0488,22.6758],[114.6094,22.3682],[114.3457,22.5439],[113.9941,22.5],[113.8184,22.1924],[114.3457,22.1484],[114.4336,22.0166],[114.082,21.9287],[113.9941,21.7969],[113.5547,22.0166],[113.1152,21.8408],[112.9395,21.5771],[112.4121,21.4453],[112.2363,21.5332],[111.5332,21.4893],[111.2695,21.3574],[110.7422,21.3574],[110.6543,21.2256],[110.7422,20.918],[110.4785,20.874],[110.6543,20.2588],[110.5664,20.2588],[110.3906,20.127],[110.0391,20.127],[109.8633,20.127],[109.8633,20.3027],[109.5996,20.918],[109.7754,21.4014],[109.7754,21.4014]],[[113.5986,22.1649],[113.6096,22.1265],[113.5547,22.11],[113.5437,22.2034],[113.5767,22.2034],[113.5986,22.1649]]]}},{"type":"Feature","id":"ji_lin","properties":{"name":"吉林","cp":[126.4746,43.5938],"childNum":9},"geometry":{"type":"Polygon","coordinates":[[[123.2227,46.2305],[123.9258,46.2305],[124.0137,45.7471],[124.3652,45.4395],[124.8926,45.5273],[125.0684,45.3955],[125.6836,45.5273],[125.7715,45.3076],[126.0352,45.1758],[126.5625,45.2637],[126.9141,45.1318],[127.0898,45],[127.002,44.7803],[127.0898,44.6045],[127.5293,44.6045],[127.7051,44.1211],[128.0566,44.1211],[128.0566,44.3408],[128.4082,44.4727],[128.4961,44.165],[128.8477,43.5498],[129.1992,43.5938],[129.2871,43.8135],[129.8145,43.9014],[129.9023,44.0332],[129.9902,43.8574],[130.3418,43.9893],[130.5176,43.6377],[130.8691,43.418],[131.3086,43.4619],[131.3086,43.3301],[131.1328,42.9346],[130.4297,42.7148],[130.6055,42.6709],[130.6055,42.4512],[130.2539,42.7588],[130.2539,42.8906],[130.166,42.9785],[129.9023,43.0225],[129.7266,42.4951],[129.375,42.4512],[128.9355,42.0117],[128.0566,42.0117],[128.3203,41.5723],[128.1445,41.3525],[127.0898,41.5283],[127.1777,41.5723],[126.9141,41.792],[126.6504,41.6602],[126.4746,41.3965],[126.123,40.957],[125.6836,40.8691],[125.5957,40.9131],[125.7715,41.2207],[125.332,41.6602],[125.332,41.9678],[125.4199,42.0996],[125.332,42.1436],[124.8926,42.8027],[124.8926,43.0664],[124.7168,43.0664],[124.4531,42.8467],[124.2773,43.2422],[123.8379,43.4619],[123.6621,43.374],[123.3105,43.5059],[123.4863,43.7256],[123.1348,44.4727],[122.3438,44.2529],[122.0801,44.8682],[122.2559,45.2637],[121.9043,45.7031],[121.7285,45.7471],[121.8164,46.0107],[122.2559,45.791],[122.4316,45.8789],[122.6953,45.7031],[122.7832,46.0107],[123.2227,46.2305]]]}},{"type":"Feature","id":"he_bei","properties":{"name":"河北","cp":[115.4004,37.9688],"childNum":11},"geometry":{"type":"MultiPolygon","coordinates":[[[[114.5215,39.5068],[114.3457,39.8584],[113.9941,39.9902],[114.5215,40.3418],[114.3457,40.3857],[114.2578,40.6055],[114.082,40.7373],[113.9063,41.1328],[113.9941,41.2207],[113.9063,41.4404],[114.2578,41.5723],[114.1699,41.792],[114.5215,42.1436],[114.873,42.0996],[114.9609,41.6162],[115.2246,41.5723],[115.9277,41.9238],[116.0156,41.792],[116.2793,42.0117],[116.8066,42.0117],[116.8945,42.4072],[117.334,42.4512],[117.5098,42.583],[117.7734,42.627],[118.0371,42.4072],[117.9492,42.2314],[118.125,42.0557],[118.3008,42.0996],[118.3008,41.792],[118.125,41.748],[118.3887,41.3086],[119.2676,41.3086],[118.8281,40.8252],[119.2676,40.5176],[119.5313,40.5615],[119.707,40.1221],[119.8828,39.9463],[119.5313,39.6826],[119.4434,39.4189],[118.916,39.0674],[118.4766,38.9355],[118.125,39.0234],[118.0371,39.1992],[118.0371,39.2432],[117.8613,39.4189],[117.9492,39.5947],[117.6855,39.5947],[117.5098,39.7705],[117.5098,39.9902],[117.6855,39.9902],[117.6855,40.0781],[117.4219,40.21],[117.2461,40.5176],[117.4219,40.6494],[116.9824,40.6934],[116.6309,41.0449],[116.3672,40.9131],[116.4551,40.7813],[116.1914,40.7813],[116.1035,40.6055],[115.752,40.5615],[115.9277,40.2539],[115.4004,39.9463],[115.4883,39.6387],[115.752,39.5068],[116.1914,39.5947],[116.3672,39.4629],[116.543,39.5947],[116.8066,39.5947],[116.8945,39.1113],[116.7188,38.9355],[116.7188,38.8037],[117.2461,38.54],[117.5977,38.6279],[117.9492,38.3203],[117.4219,37.8369],[116.8066,37.8369],[116.4551,37.4854],[116.2793,37.5732],[116.2793,37.3535],[116.0156,37.3535],[115.752,36.9141],[115.3125,36.5186],[115.4883,36.167],[115.3125,36.0791],[115.1367,36.2109],[114.9609,36.0791],[114.873,36.123],[113.7305,36.3428],[113.4668,36.6504],[113.7305,36.8701],[113.7305,37.1338],[114.1699,37.6611],[113.9941,37.7051],[113.8184,38.1445],[113.5547,38.2764],[113.5547,38.54],[113.8184,38.8037],[113.8184,38.9355],[113.9063,39.0234],[114.3457,39.0674],[114.5215,39.5068]]],[[[117.2461,40.0781],[117.1582,39.8145],[117.1582,39.6387],[116.8945,39.6826],[116.8945,39.8145],[116.8066,39.9902],[117.2461,40.0781]]]]}},{"type":"Feature","id":"hu_bei","properties":{"name":"湖北","cp":[112.2363,31.1572],"childNum":17},"geometry":{"type":"Polygon","coordinates":[[[110.2148,31.1572],[110.127,31.377],[109.6875,31.5527],[109.7754,31.6846],[109.5996,31.7285],[109.5117,32.4316],[109.6875,32.6074],[110.127,32.6074],[110.127,32.7393],[109.7754,32.915],[109.7754,33.0469],[109.4238,33.1348],[109.5996,33.2666],[110.3027,33.1787],[110.5664,33.2666],[110.7422,33.1348],[111.0059,33.2666],[111.5332,32.6074],[112.3242,32.3438],[113.2031,32.4316],[113.4668,32.2998],[113.7305,32.4316],[113.8184,31.8604],[113.9941,31.7725],[114.1699,31.8604],[114.5215,31.7725],[114.6094,31.5527],[114.7852,31.4648],[115.1367,31.5967],[115.2246,31.4209],[115.4004,31.4209],[115.5762,31.2012],[116.0156,31.0254],[115.752,30.6738],[116.1035,30.1904],[116.1035,29.8389],[115.9277,29.707],[115.4883,29.7949],[114.873,29.3994],[114.2578,29.3555],[113.9063,29.0479],[113.7305,29.0918],[113.6426,29.3115],[113.7305,29.5752],[113.5547,29.707],[113.5547,29.8389],[113.0273,29.4434],[112.9395,29.4873],[113.0273,29.751],[112.9395,29.7949],[112.6758,29.5752],[112.5,29.6191],[112.2363,29.5313],[111.7969,29.9268],[110.8301,30.1465],[110.4785,30.0146],[110.6543,29.751],[110.4785,29.6631],[109.7754,29.751],[109.6875,29.6191],[109.5117,29.6191],[109.248,29.1357],[109.0723,29.3555],[108.9844,29.3115],[108.6328,29.8389],[108.457,29.7949],[108.5449,30.2344],[108.457,30.4102],[108.6328,30.5859],[108.8086,30.498],[109.0723,30.6299],[109.1602,30.542],[109.248,30.6299],[109.4238,30.542],[109.8633,30.8936],[110.0391,30.8057],[110.2148,31.1572]]]}},{"type":"Feature","id":"gui_zhou","properties":{"name":"贵州","cp":[106.6113,26.9385],"childNum":9},"geometry":{"type":"Polygon","coordinates":[[[104.1504,27.2461],[104.4141,27.4658],[104.5898,27.334],[105.2051,27.3779],[105.293,27.7295],[105.5566,27.7734],[105.6445,27.6416],[106.3477,27.8174],[106.1719,28.125],[105.9082,28.125],[105.6445,28.4326],[105.9961,28.7402],[106.3477,28.5205],[106.5234,28.5645],[106.4355,28.7842],[106.5234,28.7842],[106.6113,28.6523],[106.6113,28.5205],[106.6992,28.4766],[106.875,28.7842],[107.4023,28.8721],[107.4023,29.1797],[107.5781,29.2236],[107.8418,29.1357],[107.8418,29.0039],[108.2813,29.0918],[108.3691,28.6523],[108.5449,28.6523],[108.5449,28.3887],[108.7207,28.4766],[108.7207,28.2129],[109.0723,28.2129],[109.248,28.4766],[109.3359,28.2568],[109.3359,27.9053],[109.4238,27.5977],[108.8086,27.1143],[108.8965,27.0264],[109.3359,27.1582],[109.5117,27.0264],[109.5117,26.8066],[109.3359,26.7188],[109.4238,26.5869],[109.248,26.3232],[109.4238,26.2793],[109.5117,26.0156],[109.3359,25.708],[108.9844,25.752],[109.0723,25.5322],[108.6328,25.5762],[108.6328,25.3125],[108.3691,25.5322],[108.1934,25.4443],[108.1055,25.2246],[107.8418,25.1367],[107.7539,25.2246],[107.4902,25.2246],[107.2266,25.6201],[106.9629,25.4883],[107.0508,25.2686],[106.875,25.1807],[106.1719,24.9609],[106.1719,24.7852],[105.9961,24.6533],[105.2051,24.9609],[104.6777,24.6094],[104.502,24.7412],[104.6777,24.9609],[104.5898,25.0488],[104.8535,25.2246],[104.3262,25.708],[104.6777,26.4111],[104.4141,26.6748],[103.8867,26.543],[103.7109,26.7627],[103.7109,26.9824],[103.623,27.0264],[103.8867,27.4219],[104.1504,27.2461]]]}},{"type":"Feature","id":"shan_dong","properties":{"name":"山东","cp":[118.7402,36.4307],"childNum":17},"geometry":{"type":"Polygon","coordinates":[[[115.4883,36.167],[115.3125,36.5186],[115.752,36.9141],[116.0156,37.3535],[116.2793,37.3535],[116.2793,37.5732],[116.4551,37.4854],[116.8066,37.8369],[117.4219,37.8369],[117.9492,38.3203],[118.125,38.1445],[118.916,38.1445],[119.3555,37.6611],[119.0039,37.5293],[119.0039,37.3535],[119.3555,37.1338],[119.707,37.1338],[119.8828,37.3975],[120.498,37.8369],[120.5859,38.1445],[120.9375,38.4521],[121.0254,37.8369],[121.2012,37.6611],[121.9043,37.4854],[122.168,37.6172],[122.2559,37.4854],[122.6074,37.4854],[122.6953,37.3535],[122.6074,36.9141],[122.4316,36.7822],[121.8164,36.8701],[121.7285,36.6943],[121.1133,36.6064],[121.1133,36.4307],[121.377,36.2549],[120.7617,36.167],[120.9375,35.8594],[120.6738,36.0352],[119.707,35.4639],[119.9707,34.9805],[119.3555,35.0244],[119.2676,35.1123],[118.916,35.0244],[118.7402,34.7168],[118.4766,34.6729],[118.3887,34.4092],[118.2129,34.4092],[118.125,34.6289],[117.9492,34.6729],[117.5977,34.4531],[117.334,34.585],[117.2461,34.4531],[116.8066,34.9365],[116.4551,34.8926],[116.3672,34.6289],[116.1914,34.585],[115.5762,34.585],[115.4004,34.8486],[114.7852,35.0684],[115.0488,35.376],[115.2246,35.4199],[115.4883,35.7275],[116.1035,36.0791],[115.3125,35.8154],[115.4883,36.167]]]}},{"type":"Feature","id":"jiang_xi","properties":{"name":"江西","cp":[116.0156,27.29],"childNum":11},"geometry":{"type":"Polygon","coordinates":[[[114.2578,28.3447],[114.082,28.5645],[114.1699,28.8281],[113.9063,29.0479],[114.2578,29.3555],[114.873,29.3994],[115.4883,29.7949],[115.9277,29.707],[116.1035,29.8389],[116.2793,29.7949],[116.7188,30.0586],[116.8945,29.9268],[116.7188,29.751],[116.7188,29.6191],[117.1582,29.707],[117.0703,29.8389],[117.1582,29.9268],[117.5098,29.6191],[118.0371,29.5752],[118.2129,29.3994],[118.0371,29.1797],[118.0371,29.0479],[118.3887,28.7842],[118.4766,28.3447],[118.4766,28.3008],[118.3008,28.0811],[117.7734,27.8174],[117.5098,27.9932],[116.9824,27.6416],[117.1582,27.29],[117.0703,27.1143],[116.543,26.8066],[116.6309,26.4551],[116.3672,26.2354],[116.4551,26.1035],[116.1914,25.8838],[116.0156,25.2686],[115.8398,25.2246],[115.9277,24.917],[115.752,24.7852],[115.8398,24.5654],[115.4004,24.7852],[114.4336,24.5215],[114.1699,24.6973],[114.4336,24.9609],[114.6973,25.1367],[114.7852,25.2686],[114.6094,25.4004],[113.9941,25.2686],[113.9063,25.4443],[113.9941,26.0596],[114.2578,26.1475],[113.9941,26.1914],[114.082,26.5869],[113.9063,26.6309],[113.9063,26.9385],[113.7305,27.1143],[113.8184,27.29],[113.6426,27.3779],[113.6426,27.5977],[113.7305,27.9492],[114.2578,28.3447]]]}},{"type":"Feature","id":"he_nan","properties":{"name":"河南","cp":[113.4668,33.8818],"childNum":17},"geometry":{"type":"Polygon","coordinates":[[[110.3906,34.585],[110.8301,34.6289],[111.1816,34.8047],[111.5332,34.8486],[111.7969,35.0684],[112.0605,35.0684],[112.0605,35.2881],[112.7637,35.2002],[113.1152,35.332],[113.6426,35.6836],[113.7305,36.3428],[114.873,36.123],[114.9609,36.0791],[115.1367,36.2109],[115.3125,36.0791],[115.4883,36.167],[115.3125,35.8154],[116.1035,36.0791],[115.4883,35.7275],[115.2246,35.4199],[115.0488,35.376],[114.7852,35.0684],[115.4004,34.8486],[115.5762,34.585],[116.1914,34.585],[116.1914,34.4092],[116.543,34.2773],[116.6309,33.9258],[116.1914,33.7061],[116.0156,33.9697],[115.6641,34.0576],[115.5762,33.9258],[115.5762,33.6621],[115.4004,33.5303],[115.3125,33.1787],[114.873,33.1348],[114.873,33.0029],[115.1367,32.8711],[115.2246,32.6074],[115.5762,32.4316],[115.8398,32.5195],[115.9277,31.7725],[115.4883,31.6846],[115.4004,31.4209],[115.2246,31.4209],[115.1367,31.5967],[114.7852,31.4648],[114.6094,31.5527],[114.5215,31.7725],[114.1699,31.8604],[113.9941,31.7725],[113.8184,31.8604],[113.7305,32.4316],[113.4668,32.2998],[113.2031,32.4316],[112.3242,32.3438],[111.5332,32.6074],[111.0059,33.2666],[111.0059,33.5303],[110.6543,33.8379],[110.6543,34.1455],[110.4785,34.2334],[110.3906,34.585]]]}},{"type":"Feature","id":"liao_ning","properties":{"name":"辽宁","cp":[122.3438,41.0889],"childNum":14},"geometry":{"type":"Polygon","coordinates":[[[119.2676,41.3086],[119.4434,41.6162],[119.2676,41.7041],[119.3555,42.2754],[119.5313,42.3633],[119.8828,42.1875],[120.1465,41.7041],[120.498,42.0996],[121.4648,42.4951],[121.7285,42.4512],[121.9922,42.7148],[122.3438,42.6709],[122.3438,42.8467],[122.7832,42.7148],[123.1348,42.8027],[123.3105,42.9785],[123.5742,43.0225],[123.6621,43.374],[123.8379,43.4619],[124.2773,43.2422],[124.4531,42.8467],[124.7168,43.0664],[124.8926,43.0664],[124.8926,42.8027],[125.332,42.1436],[125.4199,42.0996],[125.332,41.9678],[125.332,41.6602],[125.7715,41.2207],[125.5957,40.9131],[125.6836,40.8691],[124.541,40.21],[124.1016,39.6826],[123.3984,39.6826],[123.1348,39.4189],[123.1348,39.0234],[122.0801,39.0234],[121.5527,38.7158],[121.1133,38.6719],[120.9375,38.9795],[121.377,39.1992],[121.2012,39.5508],[122.0801,40.3857],[121.9922,40.6934],[121.7285,40.8252],[121.2012,40.8252],[120.5859,40.21],[119.8828,39.9463],[119.707,40.1221],[119.5313,40.5615],[119.2676,40.5176],[118.8281,40.8252],[119.2676,41.3086]]]}},{"type":"Feature","id":"shan_xi_2","properties":{"name":"山西","cp":[112.4121,37.6611],"childNum":11},"geometry":{"type":"Polygon","coordinates":[[[110.918,38.7158],[111.1816,39.2432],[111.0938,39.375],[111.3574,39.4189],[111.4453,39.6387],[111.9727,39.5947],[112.3242,40.2539],[112.7637,40.166],[113.2031,40.3857],[113.5547,40.3418],[113.8184,40.5176],[114.082,40.5176],[114.082,40.7373],[114.2578,40.6055],[114.3457,40.3857],[114.5215,40.3418],[113.9941,39.9902],[114.3457,39.8584],[114.5215,39.5068],[114.3457,39.0674],[113.9063,39.0234],[113.8184,38.9355],[113.8184,38.8037],[113.5547,38.54],[113.5547,38.2764],[113.8184,38.1445],[113.9941,37.7051],[114.1699,37.6611],[113.7305,37.1338],[113.7305,36.8701],[113.4668,36.6504],[113.7305,36.3428],[113.6426,35.6836],[113.1152,35.332],[112.7637,35.2002],[112.0605,35.2881],[112.0605,35.0684],[111.7969,35.0684],[111.5332,34.8486],[111.1816,34.8047],[110.8301,34.6289],[110.3906,34.585],[110.2148,34.6729],[110.2148,34.8926],[110.5664,35.6396],[110.4785,36.123],[110.3906,37.002],[110.8301,37.6611],[110.4785,37.9688],[110.4785,38.1885],[110.8301,38.4961],[110.918,38.7158]]]}},{"type":"Feature","id":"an_hui","properties":{"name":"安徽","cp":[117.2461,32.0361],"childNum":17},"geometry":{"type":"Polygon","coordinates":[[[116.6309,33.9258],[116.543,34.2773],[116.1914,34.4092],[116.1914,34.585],[116.3672,34.6289],[116.8945,34.4092],[117.1582,34.0576],[117.5977,34.0137],[117.7734,33.7061],[118.125,33.75],[117.9492,33.2227],[118.0371,33.1348],[118.2129,33.2227],[118.3008,32.7832],[118.7402,32.7393],[118.916,32.959],[119.1797,32.8271],[119.1797,32.4756],[118.5645,32.5635],[118.6523,32.2119],[118.4766,32.168],[118.3887,31.9482],[118.916,31.5527],[118.7402,31.377],[118.8281,31.2451],[119.3555,31.2891],[119.4434,31.1572],[119.6191,31.1133],[119.6191,31.0693],[119.4434,30.6738],[119.2676,30.6299],[119.3555,30.4102],[118.916,30.3223],[118.916,29.9707],[118.7402,29.707],[118.2129,29.3994],[118.0371,29.5752],[117.5098,29.6191],[117.1582,29.9268],[117.0703,29.8389],[117.1582,29.707],[116.7188,29.6191],[116.7188,29.751],[116.8945,29.9268],[116.7188,30.0586],[116.2793,29.7949],[116.1035,29.8389],[116.1035,30.1904],[115.752,30.6738],[116.0156,31.0254],[115.5762,31.2012],[115.4004,31.4209],[115.4883,31.6846],[115.9277,31.7725],[115.8398,32.5195],[115.5762,32.4316],[115.2246,32.6074],[115.1367,32.8711],[114.873,33.0029],[114.873,33.1348],[115.3125,33.1787],[115.4004,33.5303],[115.5762,33.6621],[115.5762,33.9258],[115.6641,34.0576],[116.0156,33.9697],[116.1914,33.7061],[116.6309,33.9258]]]}},{"type":"Feature","id":"fu_jian","properties":{"name":"福建","cp":[118.3008,25.9277],"childNum":9},"geometry":{"type":"Polygon","coordinates":[[[118.4766,28.3008],[118.8281,28.2568],[118.7402,28.0371],[118.916,27.4658],[119.2676,27.4219],[119.6191,27.6855],[119.7949,27.29],[120.2344,27.4219],[120.4102,27.1582],[120.7617,27.0264],[120.6738,26.8945],[120.2344,26.8506],[120.2344,26.7188],[120.4102,26.6748],[120.498,26.3672],[120.2344,26.2793],[120.4102,26.1475],[120.0586,26.1914],[119.9707,25.9277],[119.7949,25.9277],[119.9707,25.4004],[119.7949,25.2686],[119.5313,25.1367],[119.4434,25.0049],[119.2676,25.0928],[118.916,24.8291],[118.6523,24.5215],[118.4766,24.5215],[118.4766,24.4336],[118.2129,24.3457],[118.2129,24.1699],[117.8613,23.9941],[117.7734,23.7744],[117.5098,23.5986],[117.1582,23.5547],[116.9824,23.9063],[116.9824,24.1699],[116.7188,24.6533],[116.543,24.6094],[116.3672,24.873],[116.2793,24.7852],[115.9277,24.917],[115.8398,25.2246],[116.0156,25.2686],[116.1914,25.8838],[116.4551,26.1035],[116.3672,26.2354],[116.6309,26.4551],[116.543,26.8066],[117.0703,27.1143],[117.1582,27.29],[116.9824,27.6416],[117.5098,27.9932],[117.7734,27.8174],[118.3008,28.0811],[118.4766,28.3008]]]}},{"type":"Feature","id":"zhe_jiang","properties":{"name":"浙江","cp":[120.498,29.0918],"childNum":11},"geometry":{"type":"Polygon","coordinates":[[[118.2129,29.3994],[118.7402,29.707],[118.916,29.9707],[118.916,30.3223],[119.3555,30.4102],[119.2676,30.6299],[119.4434,30.6738],[119.6191,31.0693],[119.6191,31.1133],[119.9707,31.1572],[120.498,30.8057],[120.9375,31.0254],[121.2891,30.6738],[121.9922,30.8057],[122.6953,30.8936],[122.8711,30.7178],[122.959,30.1465],[122.6074,30.1025],[122.6074,29.9268],[122.168,29.5313],[122.3438,28.8721],[121.9922,28.8721],[121.9922,28.4326],[121.7285,28.3447],[121.7285,28.2129],[121.4648,28.2129],[121.5527,28.0371],[121.2891,27.9492],[121.1133,27.4219],[120.6738,27.334],[120.6738,27.1582],[120.9375,27.0264],[120.7617,27.0264],[120.4102,27.1582],[120.2344,27.4219],[119.7949,27.29],[119.6191,27.6855],[119.2676,27.4219],[118.916,27.4658],[118.7402,28.0371],[118.8281,28.2568],[118.4766,28.3008],[118.4766,28.3447],[118.3887,28.7842],[118.0371,29.0479],[118.0371,29.1797],[118.2129,29.3994]]]}},{"type":"Feature","id":"jiang_su","properties":{"name":"江苏","cp":[120.0586,32.915],"childNum":13},"geometry":{"type":"Polygon","coordinates":[[[116.3672,34.6289],[116.4551,34.8926],[116.8066,34.9365],[117.2461,34.4531],[117.334,34.585],[117.5977,34.4531],[117.9492,34.6729],[118.125,34.6289],[118.2129,34.4092],[118.3887,34.4092],[118.4766,34.6729],[118.7402,34.7168],[118.916,35.0244],[119.2676,35.1123],[119.3555,35.0244],[119.3555,34.8486],[119.707,34.585],[120.3223,34.3652],[120.9375,33.0469],[121.0254,32.6514],[121.377,32.4756],[121.4648,32.168],[121.9043,31.9922],[121.9922,31.6846],[121.9922,31.5967],[121.2012,31.8604],[121.1133,31.7285],[121.377,31.5088],[121.2012,31.4648],[120.9375,31.0254],[120.498,30.8057],[119.9707,31.1572],[119.6191,31.1133],[119.4434,31.1572],[119.3555,31.2891],[118.8281,31.2451],[118.7402,31.377],[118.916,31.5527],[118.3887,31.9482],[118.4766,32.168],[118.6523,32.2119],[118.5645,32.5635],[119.1797,32.4756],[119.1797,32.8271],[118.916,32.959],[118.7402,32.7393],[118.3008,32.7832],[118.2129,33.2227],[118.0371,33.1348],[117.9492,33.2227],[118.125,33.75],[117.7734,33.7061],[117.5977,34.0137],[117.1582,34.0576],[116.8945,34.4092],[116.3672,34.6289]]]}},{"type":"Feature","id":"chong_qing","properties":{"name":"重庆","cp":[107.7539,30.1904],"childNum":40},"geometry":{"type":"Polygon","coordinates":[[[108.5449,31.6846],[108.2813,31.9043],[108.3691,32.168],[108.5449,32.2119],[109.0723,31.9482],[109.248,31.7285],[109.5996,31.7285],[109.7754,31.6846],[109.6875,31.5527],[110.127,31.377],[110.2148,31.1572],[110.0391,30.8057],[109.8633,30.8936],[109.4238,30.542],[109.248,30.6299],[109.1602,30.542],[109.0723,30.6299],[108.8086,30.498],[108.6328,30.5859],[108.457,30.4102],[108.5449,30.2344],[108.457,29.7949],[108.6328,29.8389],[108.9844,29.3115],[109.0723,29.3555],[109.248,29.1357],[109.248,28.4766],[109.0723,28.2129],[108.7207,28.2129],[108.7207,28.4766],[108.5449,28.3887],[108.5449,28.6523],[108.3691,28.6523],[108.2813,29.0918],[107.8418,29.0039],[107.8418,29.1357],[107.5781,29.2236],[107.4023,29.1797],[107.4023,28.8721],[106.875,28.7842],[106.6992,28.4766],[106.6113,28.5205],[106.6113,28.6523],[106.5234,28.7842],[106.4355,28.7842],[106.5234,28.5645],[106.3477,28.5205],[106.2598,28.8721],[105.8203,28.96],[105.7324,29.2676],[105.4688,29.3115],[105.293,29.5313],[105.7324,29.8828],[105.5566,30.1025],[105.6445,30.2783],[105.8203,30.4541],[106.2598,30.1904],[106.6113,30.3223],[106.7871,30.0146],[107.0508,30.0146],[107.4902,30.6299],[107.4023,30.7617],[107.4902,30.8496],[107.9297,30.8496],[108.1934,31.5088],[108.5449,31.6846]]]}},{"type":"Feature","id":"ning_xia","properties":{"name":"宁夏","cp":[105.9961,37.3096],"childNum":5},"geometry":{"type":"Polygon","coordinates":[[[104.3262,37.4414],[105.8203,37.793],[105.9082,38.7158],[106.3477,39.2871],[106.7871,39.375],[106.9629,38.9795],[106.5234,38.3203],[106.7871,38.1885],[107.3145,38.1006],[107.666,37.8809],[107.3145,37.6172],[107.3145,37.0898],[106.6113,37.0898],[106.6113,36.7822],[106.4355,36.5625],[106.5234,36.4746],[106.5234,36.2549],[106.875,36.123],[106.9629,35.8154],[106.6992,35.6836],[106.4355,35.6836],[106.5234,35.332],[106.3477,35.2441],[106.2598,35.4199],[106.084,35.376],[105.9961,35.4199],[106.084,35.4639],[105.9961,35.4639],[105.8203,35.5518],[105.7324,35.7275],[105.3809,35.7715],[105.293,35.9912],[105.4688,36.123],[105.2051,36.6943],[105.293,36.8262],[104.8535,37.2217],[104.5898,37.2217],[104.5898,37.4414],[104.3262,37.4414]]]}},{"type":"Feature","id":"hai_nan","properties":{"name":"海南","cp":[109.9512,19.2041],"childNum":18},"geometry":{"type":"Polygon","coordinates":[[[108.6328,19.3799],[109.0723,19.6436],[109.248,19.9512],[109.5996,20.0391],[110.0391,20.127],[110.3906,20.127],[110.5664,20.2588],[110.6543,20.2588],[111.0938,19.9512],[111.2695,19.9951],[110.6543,19.1602],[110.5664,18.6768],[110.2148,18.5889],[110.0391,18.3691],[109.8633,18.3691],[109.6875,18.1055],[108.9844,18.2813],[108.6328,18.457],[108.6328,19.3799]]]}},{"type":"Feature","id":"tai_wan","properties":{"name":"台湾","cp":[121.0254,23.5986],"childNum":1},"geometry":{"type":"Polygon","coordinates":[[[121.9043,25.0488],[121.9922,25.0049],[121.8164,24.7412],[121.9043,24.5654],[121.6406,24.0381],[121.377,23.1152],[121.0254,22.6758],[120.8496,22.0605],[120.7617,21.9287],[120.6738,22.3242],[120.2344,22.5879],[120.0586,23.0713],[120.1465,23.6865],[121.0254,25.0488],[121.5527,25.3125],[121.9043,25.0488]]]}},{"type":"Feature","id":"bei_jing","properties":{"name":"北京","cp":[116.4551,40.2539],"childNum":19},"geometry":{"type":"Polygon","coordinates":[[[117.4219,40.21],[117.334,40.1221],[117.2461,40.0781],[116.8066,39.9902],[116.8945,39.8145],[116.8945,39.6826],[116.8066,39.5947],[116.543,39.5947],[116.3672,39.4629],[116.1914,39.5947],[115.752,39.5068],[115.4883,39.6387],[115.4004,39.9463],[115.9277,40.2539],[115.752,40.5615],[116.1035,40.6055],[116.1914,40.7813],[116.4551,40.7813],[116.3672,40.9131],[116.6309,41.0449],[116.9824,40.6934],[117.4219,40.6494],[117.2461,40.5176],[117.4219,40.21]]]}},{"type":"Feature","id":"tian_jin","properties":{"name":"天津","cp":[117.4219,39.4189],"childNum":18},"geometry":{"type":"Polygon","coordinates":[[[116.8066,39.5947],[116.8945,39.6826],[117.1582,39.6387],[117.1582,39.8145],[117.2461,40.0781],[117.334,40.1221],[117.4219,40.21],[117.6855,40.0781],[117.6855,39.9902],[117.5098,39.9902],[117.5098,39.7705],[117.6855,39.5947],[117.9492,39.5947],[117.8613,39.4189],[118.0371,39.2432],[118.0371,39.1992],[117.8613,39.1113],[117.5977,38.6279],[117.2461,38.54],[116.7188,38.8037],[116.7188,38.9355],[116.8945,39.1113],[116.8066,39.5947]]]}},{"type":"Feature","id":"shang_hai","properties":{"name":"上海","cp":[121.4648,31.2891],"childNum":19},"geometry":{"type":"Polygon","coordinates":[[[120.9375,31.0254],[121.2012,31.4648],[121.377,31.5088],[121.1133,31.7285],[121.2012,31.8604],[121.9922,31.5967],[121.9043,31.1572],[121.9922,30.8057],[121.2891,30.6738],[120.9375,31.0254]]]}},{"type":"Feature","id":"xiang_gang","properties":{"name":"香港","cp":[114.2578,22.3242],"childNum":1},"geometry":{"type":"Polygon","coordinates":[[[114.6094,22.4121],[114.5215,22.1484],[114.3457,22.1484],[113.9063,22.1484],[113.8184,22.1924],[113.9063,22.4121],[114.1699,22.5439],[114.3457,22.5439],[114.4336,22.5439],[114.4336,22.4121],[114.6094,22.4121]]]}},{"type":"Feature","id":"ao_men","properties":{"name":"澳门","cp":[113.5547,22.1484],"childNum":1},"geometry":{"type":"Polygon","coordinates":[[[113.5986,22.1649],[113.6096,22.1265],[113.5547,22.11],[113.5437,22.2034],[113.5767,22.2034],[113.5986,22.1649]]]}}]} diff --git a/components/vue-admin-perfect/src/views/charts/components/migration/index.vue b/components/vue-admin-perfect/src/views/charts/components/migration/index.vue new file mode 100644 index 0000000..554d5ef --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/migration/index.vue @@ -0,0 +1,282 @@ + + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/bar.vue b/components/vue-admin-perfect/src/views/charts/components/simple/bar.vue new file mode 100644 index 0000000..1638bf5 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/bar.vue @@ -0,0 +1,66 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/candlestick.vue b/components/vue-admin-perfect/src/views/charts/components/simple/candlestick.vue new file mode 100644 index 0000000..fb30d1e --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/candlestick.vue @@ -0,0 +1,68 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/funnel.vue b/components/vue-admin-perfect/src/views/charts/components/simple/funnel.vue new file mode 100644 index 0000000..f93c206 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/funnel.vue @@ -0,0 +1,111 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/gauge.vue b/components/vue-admin-perfect/src/views/charts/components/simple/gauge.vue new file mode 100644 index 0000000..50214fa --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/gauge.vue @@ -0,0 +1,65 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/graph.vue b/components/vue-admin-perfect/src/views/charts/components/simple/graph.vue new file mode 100644 index 0000000..62d9319 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/graph.vue @@ -0,0 +1,91 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/line.vue b/components/vue-admin-perfect/src/views/charts/components/simple/line.vue new file mode 100644 index 0000000..6584235 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/line.vue @@ -0,0 +1,66 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/pictorialBar.vue b/components/vue-admin-perfect/src/views/charts/components/simple/pictorialBar.vue new file mode 100644 index 0000000..16fd913 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/pictorialBar.vue @@ -0,0 +1,148 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/pie.vue b/components/vue-admin-perfect/src/views/charts/components/simple/pie.vue new file mode 100644 index 0000000..6fbe3b4 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/pie.vue @@ -0,0 +1,89 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/radar.vue b/components/vue-admin-perfect/src/views/charts/components/simple/radar.vue new file mode 100644 index 0000000..a9a946a --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/radar.vue @@ -0,0 +1,248 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/components/simple/scatter.vue b/components/vue-admin-perfect/src/views/charts/components/simple/scatter.vue new file mode 100644 index 0000000..7aad988 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/components/simple/scatter.vue @@ -0,0 +1,85 @@ + + diff --git a/components/vue-admin-perfect/src/views/charts/line.vue b/components/vue-admin-perfect/src/views/charts/line.vue new file mode 100644 index 0000000..04241c0 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/line.vue @@ -0,0 +1,24 @@ + + + + + + diff --git a/components/vue-admin-perfect/src/views/charts/map.vue b/components/vue-admin-perfect/src/views/charts/map.vue new file mode 100644 index 0000000..d4c178c --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/map.vue @@ -0,0 +1,17 @@ + + + + + + diff --git a/components/vue-admin-perfect/src/views/charts/migration.vue b/components/vue-admin-perfect/src/views/charts/migration.vue new file mode 100644 index 0000000..824dcd4 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/migration.vue @@ -0,0 +1,17 @@ + + + + + + diff --git a/components/vue-admin-perfect/src/views/charts/simple.vue b/components/vue-admin-perfect/src/views/charts/simple.vue new file mode 100644 index 0000000..f55fb50 --- /dev/null +++ b/components/vue-admin-perfect/src/views/charts/simple.vue @@ -0,0 +1,145 @@ + + + + diff --git a/components/vue-admin-perfect/src/views/chat/components/u-chartBox/chat.js b/components/vue-admin-perfect/src/views/chat/components/u-chartBox/chat.js new file mode 100644 index 0000000..4c9404d --- /dev/null +++ b/components/vue-admin-perfect/src/views/chat/components/u-chartBox/chat.js @@ -0,0 +1,15 @@ +export const chatData = [ + { + is_self:0, + created_at:'2022-03-11', + content:'hello 你好呀!', + id:1 + }, + { + is_self:1, + created_at:'2022-03-11', + content:'hello 你好呀!', + id:2, + type:1, // 文字 + } +] diff --git a/components/vue-admin-perfect/src/views/chat/components/u-chartBox/index.vue b/components/vue-admin-perfect/src/views/chat/components/u-chartBox/index.vue new file mode 100644 index 0000000..659b711 --- /dev/null +++ b/components/vue-admin-perfect/src/views/chat/components/u-chartBox/index.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/chat/components/u-toolbar/index.vue b/components/vue-admin-perfect/src/views/chat/components/u-toolbar/index.vue new file mode 100644 index 0000000..b273c99 --- /dev/null +++ b/components/vue-admin-perfect/src/views/chat/components/u-toolbar/index.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/chat/index.vue b/components/vue-admin-perfect/src/views/chat/index.vue new file mode 100644 index 0000000..1502e4c --- /dev/null +++ b/components/vue-admin-perfect/src/views/chat/index.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/clipboard/index.vue b/components/vue-admin-perfect/src/views/clipboard/index.vue new file mode 100644 index 0000000..28c7f53 --- /dev/null +++ b/components/vue-admin-perfect/src/views/clipboard/index.vue @@ -0,0 +1,17 @@ + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/components-demo/button.vue b/components/vue-admin-perfect/src/views/components-demo/button.vue new file mode 100644 index 0000000..a38239a --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/button.vue @@ -0,0 +1,194 @@ + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/editor.vue b/components/vue-admin-perfect/src/views/components-demo/editor.vue new file mode 100644 index 0000000..6f5ba47 --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/editor.vue @@ -0,0 +1,75 @@ + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/flow-chart.vue b/components/vue-admin-perfect/src/views/components-demo/flow-chart.vue new file mode 100644 index 0000000..808f81e --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/flow-chart.vue @@ -0,0 +1,13 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/form.vue b/components/vue-admin-perfect/src/views/components-demo/form.vue new file mode 100644 index 0000000..4762f53 --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/form.vue @@ -0,0 +1,163 @@ + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/form/u-upload.vue b/components/vue-admin-perfect/src/views/components-demo/form/u-upload.vue new file mode 100644 index 0000000..c26446f --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/form/u-upload.vue @@ -0,0 +1,71 @@ + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/mark-down.vue b/components/vue-admin-perfect/src/views/components-demo/mark-down.vue new file mode 100644 index 0000000..b89ae78 --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/mark-down.vue @@ -0,0 +1,46 @@ + + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/scroll.vue b/components/vue-admin-perfect/src/views/components-demo/scroll.vue new file mode 100644 index 0000000..eaa314d --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/scroll.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/split-pane.vue b/components/vue-admin-perfect/src/views/components-demo/split-pane.vue new file mode 100644 index 0000000..2ac6cce --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/split-pane.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/components-demo/upload.vue b/components/vue-admin-perfect/src/views/components-demo/upload.vue new file mode 100644 index 0000000..833f057 --- /dev/null +++ b/components/vue-admin-perfect/src/views/components-demo/upload.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/components-demo/watermark.vue b/components/vue-admin-perfect/src/views/components-demo/watermark.vue new file mode 100644 index 0000000..e69de29 diff --git a/components/vue-admin-perfect/src/views/dashboard/index.vue b/components/vue-admin-perfect/src/views/dashboard/index.vue new file mode 100644 index 0000000..3d43e2c --- /dev/null +++ b/components/vue-admin-perfect/src/views/dashboard/index.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/error/401.vue b/components/vue-admin-perfect/src/views/error/401.vue new file mode 100644 index 0000000..c230e64 --- /dev/null +++ b/components/vue-admin-perfect/src/views/error/401.vue @@ -0,0 +1,70 @@ + + + + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/error/404.vue b/components/vue-admin-perfect/src/views/error/404.vue new file mode 100644 index 0000000..9e4de6e --- /dev/null +++ b/components/vue-admin-perfect/src/views/error/404.vue @@ -0,0 +1,71 @@ + + + + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/excel/export-excel.vue b/components/vue-admin-perfect/src/views/excel/export-excel.vue new file mode 100644 index 0000000..f8a89ae --- /dev/null +++ b/components/vue-admin-perfect/src/views/excel/export-excel.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/excel/export-merge-header.vue b/components/vue-admin-perfect/src/views/excel/export-merge-header.vue new file mode 100644 index 0000000..b6d80d4 --- /dev/null +++ b/components/vue-admin-perfect/src/views/excel/export-merge-header.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/components/vue-admin-perfect/src/views/excel/export-selected-excel.vue b/components/vue-admin-perfect/src/views/excel/export-selected-excel.vue new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/components/vue-admin-perfect/src/views/excel/export-selected-excel.vue @@ -0,0 +1 @@ + diff --git a/components/vue-admin-perfect/src/views/excel/export-style-excel.vue b/components/vue-admin-perfect/src/views/excel/export-style-excel.vue new file mode 100644 index 0000000..4a39758 --- /dev/null +++ b/components/vue-admin-perfect/src/views/excel/export-style-excel.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/excel/upload-excel.vue b/components/vue-admin-perfect/src/views/excel/upload-excel.vue new file mode 100644 index 0000000..0a60bd3 --- /dev/null +++ b/components/vue-admin-perfect/src/views/excel/upload-excel.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/home/index.vue b/components/vue-admin-perfect/src/views/home/index.vue new file mode 100644 index 0000000..05b32b9 --- /dev/null +++ b/components/vue-admin-perfect/src/views/home/index.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/login/index.vue b/components/vue-admin-perfect/src/views/login/index.vue new file mode 100644 index 0000000..0e43472 --- /dev/null +++ b/components/vue-admin-perfect/src/views/login/index.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/components/vue-admin-perfect/src/views/other/count.vue b/components/vue-admin-perfect/src/views/other/count.vue new file mode 100644 index 0000000..b350b02 --- /dev/null +++ b/components/vue-admin-perfect/src/views/other/count.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/components/vue-admin-perfect/src/views/other/cropper/cropper.vue b/components/vue-admin-perfect/src/views/other/cropper/cropper.vue new file mode 100644 index 0000000..a6616a6 --- /dev/null +++ b/components/vue-admin-perfect/src/views/other/cropper/cropper.vue @@ -0,0 +1,342 @@ +