jobsys-newbie
Version:
Enhanced component based on ant-design-vue
8,020 lines • 461 kB
JavaScript
import { a as __toESM, n as __export, r as __reExport, t as __commonJSMin } from "./chunk-CJnywcLQ.js";
import { A as useSm3, C as _configStatus, O as useDayjs, S as STATUS, T as usePage, _ as useFormFail, a as useFindLabelsFromPath, d as useLabelFromOptionsValue, f as useNumber, h as useI18n, i as useCache, l as useFindParentValues, m as i18n_default, n as useT, o as useFindLabelsInValues, t as useI18nJoin, v as useFormFormat, w as useFetch, x as useProcessStatusSuccess } from "./hooks-YdsXmMBa.js";
import * as Vue from "vue";
import { Transition, TransitionGroup, computed, createElementBlock, createTextVNode, createVNode, defineComponent, h, inject, isVNode, mergeProps, nextTick, onBeforeUnmount, onMounted, openBlock, provide, reactive, ref, resolveComponent, shallowRef, toRaw, toRef, watch, watchEffect, withModifiers } from "vue";
import { Affix, Alert, Button, Card, Cascader, CheckableTag, Checkbox, CheckboxGroup, Col, DatePicker, Divider, Drawer, Dropdown, Empty, Flex, Form, FormItem, FormItemRest, Image as Image$1, ImagePreviewGroup, Input, InputNumber, InputPassword, List, Menu, MenuItem, Modal, Popconfirm, Radio, RadioGroup, RangePicker, Rate, Row, Select, Skeleton, Space, Spin, Switch, Table, TableSummaryCell, TableSummaryRow, Tag, Textarea, TimePicker, TimeRangePicker, Tooltip, Transfer, TreeSelect, TypographyText, Upload, message } from "ant-design-vue";
import dayjs from "dayjs";
import { cloneDeep, concat, debounce, every, find, findIndex, isArray, isBoolean, isEqual, isFunction, isNull, isNumber, isObject, isString, isUndefined, map, orderBy, pick, random, remove, sum, uniq } from "lodash-es";
import { ArrowsAltOutlined, CalendarOutlined, CheckCircleOutlined, CheckSquareOutlined, ClearOutlined, ClockCircleOutlined, CloseCircleOutlined, CloseOutlined, CloudUploadOutlined, CompressOutlined, CopyOutlined, DeleteOutlined, DownOutlined, DownSquareOutlined, DragOutlined, EditOutlined, EnvironmentOutlined, ExpandOutlined, FallOutlined, FieldBinaryOutlined, FileImageOutlined, FilePdfOutlined, FormOutlined, InfoCircleOutlined, MailOutlined, MenuOutlined, MobileOutlined, NumberOutlined, OrderedListOutlined, PictureOutlined, PlusOutlined, RightOutlined, RiseOutlined, SaveOutlined, SearchOutlined, ShrinkOutlined, SmileFilled, SmileTwoTone, StarOutlined, SwitcherOutlined, SyncOutlined, UserOutlined } from "@ant-design/icons-vue";
var addressData_default = /* @__PURE__ */ JSON.parse("[{\"code\":\"440000\",\"name\":\"广东省\",\"children\":[{\"code\":\"440100\",\"name\":\"广州市\",\"children\":[{\"code\":\"440103\",\"name\":\"荔湾区\"},{\"code\":\"440104\",\"name\":\"越秀区\"},{\"code\":\"440105\",\"name\":\"海珠区\"},{\"code\":\"440106\",\"name\":\"天河区\"},{\"code\":\"440111\",\"name\":\"白云区\"},{\"code\":\"440112\",\"name\":\"黄埔区\"},{\"code\":\"440113\",\"name\":\"番禺区\"},{\"code\":\"440114\",\"name\":\"花都区\"},{\"code\":\"440115\",\"name\":\"南沙区\"},{\"code\":\"440117\",\"name\":\"从化区\"},{\"code\":\"440118\",\"name\":\"增城区\"}]},{\"code\":\"440200\",\"name\":\"韶关市\",\"children\":[{\"code\":\"440203\",\"name\":\"武江区\"},{\"code\":\"440204\",\"name\":\"浈江区\"},{\"code\":\"440205\",\"name\":\"曲江区\"},{\"code\":\"440222\",\"name\":\"始兴县\"},{\"code\":\"440224\",\"name\":\"仁化县\"},{\"code\":\"440229\",\"name\":\"翁源县\"},{\"code\":\"440232\",\"name\":\"乳源瑶族自治县\"},{\"code\":\"440233\",\"name\":\"新丰县\"},{\"code\":\"440281\",\"name\":\"乐昌市\"},{\"code\":\"440282\",\"name\":\"南雄市\"}]},{\"code\":\"440300\",\"name\":\"深圳市\",\"children\":[{\"code\":\"440303\",\"name\":\"罗湖区\"},{\"code\":\"440304\",\"name\":\"福田区\"},{\"code\":\"440305\",\"name\":\"南山区\"},{\"code\":\"440306\",\"name\":\"宝安区\"},{\"code\":\"440307\",\"name\":\"龙岗区\"},{\"code\":\"440308\",\"name\":\"盐田区\"},{\"code\":\"440309\",\"name\":\"龙华区\"},{\"code\":\"440310\",\"name\":\"坪山区\"},{\"code\":\"440311\",\"name\":\"光明区\"}]},{\"code\":\"440400\",\"name\":\"珠海市\",\"children\":[{\"code\":\"440402\",\"name\":\"香洲区\"},{\"code\":\"440403\",\"name\":\"斗门区\"},{\"code\":\"440404\",\"name\":\"金湾区\"}]},{\"code\":\"440500\",\"name\":\"汕头市\",\"children\":[{\"code\":\"440507\",\"name\":\"龙湖区\"},{\"code\":\"440511\",\"name\":\"金平区\"},{\"code\":\"440512\",\"name\":\"濠江区\"},{\"code\":\"440513\",\"name\":\"潮阳区\"},{\"code\":\"440514\",\"name\":\"潮南区\"},{\"code\":\"440515\",\"name\":\"澄海区\"},{\"code\":\"440523\",\"name\":\"南澳县\"}]},{\"code\":\"440600\",\"name\":\"佛山市\",\"children\":[{\"code\":\"440604\",\"name\":\"禅城区\"},{\"code\":\"440605\",\"name\":\"南海区\"},{\"code\":\"440606\",\"name\":\"顺德区\"},{\"code\":\"440607\",\"name\":\"三水区\"},{\"code\":\"440608\",\"name\":\"高明区\"}]},{\"code\":\"440700\",\"name\":\"江门市\",\"children\":[{\"code\":\"440703\",\"name\":\"蓬江区\"},{\"code\":\"440704\",\"name\":\"江海区\"},{\"code\":\"440705\",\"name\":\"新会区\"},{\"code\":\"440781\",\"name\":\"台山市\"},{\"code\":\"440783\",\"name\":\"开平市\"},{\"code\":\"440784\",\"name\":\"鹤山市\"},{\"code\":\"440785\",\"name\":\"恩平市\"}]},{\"code\":\"440800\",\"name\":\"湛江市\",\"children\":[{\"code\":\"440802\",\"name\":\"赤坎区\"},{\"code\":\"440803\",\"name\":\"霞山区\"},{\"code\":\"440804\",\"name\":\"坡头区\"},{\"code\":\"440811\",\"name\":\"麻章区\"},{\"code\":\"440823\",\"name\":\"遂溪县\"},{\"code\":\"440825\",\"name\":\"徐闻县\"},{\"code\":\"440881\",\"name\":\"廉江市\"},{\"code\":\"440882\",\"name\":\"雷州市\"},{\"code\":\"440883\",\"name\":\"吴川市\"}]},{\"code\":\"440900\",\"name\":\"茂名市\",\"children\":[{\"code\":\"440902\",\"name\":\"茂南区\"},{\"code\":\"440904\",\"name\":\"电白区\"},{\"code\":\"440981\",\"name\":\"高州市\"},{\"code\":\"440982\",\"name\":\"化州市\"},{\"code\":\"440983\",\"name\":\"信宜市\"}]},{\"code\":\"441200\",\"name\":\"肇庆市\",\"children\":[{\"code\":\"441202\",\"name\":\"端州区\"},{\"code\":\"441203\",\"name\":\"鼎湖区\"},{\"code\":\"441204\",\"name\":\"高要区\"},{\"code\":\"441223\",\"name\":\"广宁县\"},{\"code\":\"441224\",\"name\":\"怀集县\"},{\"code\":\"441225\",\"name\":\"封开县\"},{\"code\":\"441226\",\"name\":\"德庆县\"},{\"code\":\"441284\",\"name\":\"四会市\"}]},{\"code\":\"441300\",\"name\":\"惠州市\",\"children\":[{\"code\":\"441302\",\"name\":\"惠城区\"},{\"code\":\"441303\",\"name\":\"惠阳区\"},{\"code\":\"441322\",\"name\":\"博罗县\"},{\"code\":\"441323\",\"name\":\"惠东县\"},{\"code\":\"441324\",\"name\":\"龙门县\"}]},{\"code\":\"441400\",\"name\":\"梅州市\",\"children\":[{\"code\":\"441402\",\"name\":\"梅江区\"},{\"code\":\"441403\",\"name\":\"梅县区\"},{\"code\":\"441422\",\"name\":\"大埔县\"},{\"code\":\"441423\",\"name\":\"丰顺县\"},{\"code\":\"441424\",\"name\":\"五华县\"},{\"code\":\"441426\",\"name\":\"平远县\"},{\"code\":\"441427\",\"name\":\"蕉岭县\"},{\"code\":\"441481\",\"name\":\"兴宁市\"}]},{\"code\":\"441500\",\"name\":\"汕尾市\",\"children\":[{\"code\":\"441502\",\"name\":\"城区\"},{\"code\":\"441521\",\"name\":\"海丰县\"},{\"code\":\"441523\",\"name\":\"陆河县\"},{\"code\":\"441581\",\"name\":\"陆丰市\"}]},{\"code\":\"441600\",\"name\":\"河源市\",\"children\":[{\"code\":\"441602\",\"name\":\"源城区\"},{\"code\":\"441621\",\"name\":\"紫金县\"},{\"code\":\"441622\",\"name\":\"龙川县\"},{\"code\":\"441623\",\"name\":\"连平县\"},{\"code\":\"441624\",\"name\":\"和平县\"},{\"code\":\"441625\",\"name\":\"东源县\"}]},{\"code\":\"441700\",\"name\":\"阳江市\",\"children\":[{\"code\":\"441702\",\"name\":\"江城区\"},{\"code\":\"441704\",\"name\":\"阳东区\"},{\"code\":\"441721\",\"name\":\"阳西县\"},{\"code\":\"441781\",\"name\":\"阳春市\"}]},{\"code\":\"441800\",\"name\":\"清远市\",\"children\":[{\"code\":\"441802\",\"name\":\"清城区\"},{\"code\":\"441803\",\"name\":\"清新区\"},{\"code\":\"441821\",\"name\":\"佛冈县\"},{\"code\":\"441823\",\"name\":\"阳山县\"},{\"code\":\"441825\",\"name\":\"连山壮族瑶族自治县\"},{\"code\":\"441826\",\"name\":\"连南瑶族自治县\"},{\"code\":\"441881\",\"name\":\"英德市\"},{\"code\":\"441882\",\"name\":\"连州市\"}]},{\"code\":\"441900\",\"name\":\"东莞市\",\"children\":[{\"code\":\"441900003\",\"name\":\"东城街道\"},{\"code\":\"441900004\",\"name\":\"南城街道\"},{\"code\":\"441900005\",\"name\":\"万江街道\"},{\"code\":\"441900006\",\"name\":\"莞城街道\"},{\"code\":\"441900101\",\"name\":\"石碣镇\"},{\"code\":\"441900102\",\"name\":\"石龙镇\"},{\"code\":\"441900103\",\"name\":\"茶山镇\"},{\"code\":\"441900104\",\"name\":\"石排镇\"},{\"code\":\"441900105\",\"name\":\"企石镇\"},{\"code\":\"441900106\",\"name\":\"横沥镇\"},{\"code\":\"441900107\",\"name\":\"桥头镇\"},{\"code\":\"441900108\",\"name\":\"谢岗镇\"},{\"code\":\"441900109\",\"name\":\"东坑镇\"},{\"code\":\"441900110\",\"name\":\"常平镇\"},{\"code\":\"441900111\",\"name\":\"寮步镇\"},{\"code\":\"441900112\",\"name\":\"樟木头镇\"},{\"code\":\"441900113\",\"name\":\"大朗镇\"},{\"code\":\"441900114\",\"name\":\"黄江镇\"},{\"code\":\"441900115\",\"name\":\"清溪镇\"},{\"code\":\"441900116\",\"name\":\"塘厦镇\"},{\"code\":\"441900117\",\"name\":\"凤岗镇\"},{\"code\":\"441900118\",\"name\":\"大岭山镇\"},{\"code\":\"441900119\",\"name\":\"长安镇\"},{\"code\":\"441900121\",\"name\":\"虎门镇\"},{\"code\":\"441900122\",\"name\":\"厚街镇\"},{\"code\":\"441900123\",\"name\":\"沙田镇\"},{\"code\":\"441900124\",\"name\":\"道滘镇\"},{\"code\":\"441900125\",\"name\":\"洪梅镇\"},{\"code\":\"441900126\",\"name\":\"麻涌镇\"},{\"code\":\"441900127\",\"name\":\"望牛墩镇\"},{\"code\":\"441900128\",\"name\":\"中堂镇\"},{\"code\":\"441900129\",\"name\":\"高埗镇\"},{\"code\":\"441900401\",\"name\":\"松山湖\"},{\"code\":\"441900402\",\"name\":\"东莞港\"},{\"code\":\"441900403\",\"name\":\"东莞生态园\"},{\"code\":\"441900404\",\"name\":\"东莞滨海湾新区\"}]},{\"code\":\"442000\",\"name\":\"中山市\",\"children\":[{\"code\":\"442000001\",\"name\":\"石岐街道\"},{\"code\":\"442000002\",\"name\":\"东区街道\"},{\"code\":\"442000003\",\"name\":\"中山港街道\"},{\"code\":\"442000004\",\"name\":\"西区街道\"},{\"code\":\"442000005\",\"name\":\"南区街道\"},{\"code\":\"442000006\",\"name\":\"五桂山街道\"},{\"code\":\"442000007\",\"name\":\"民众街道\"},{\"code\":\"442000008\",\"name\":\"南朗街道\"},{\"code\":\"442000101\",\"name\":\"黄圃镇\"},{\"code\":\"442000103\",\"name\":\"东凤镇\"},{\"code\":\"442000105\",\"name\":\"古镇镇\"},{\"code\":\"442000106\",\"name\":\"沙溪镇\"},{\"code\":\"442000107\",\"name\":\"坦洲镇\"},{\"code\":\"442000108\",\"name\":\"港口镇\"},{\"code\":\"442000109\",\"name\":\"三角镇\"},{\"code\":\"442000110\",\"name\":\"横栏镇\"},{\"code\":\"442000111\",\"name\":\"南头镇\"},{\"code\":\"442000112\",\"name\":\"阜沙镇\"},{\"code\":\"442000114\",\"name\":\"三乡镇\"},{\"code\":\"442000115\",\"name\":\"板芙镇\"},{\"code\":\"442000116\",\"name\":\"大涌镇\"},{\"code\":\"442000117\",\"name\":\"神湾镇\"},{\"code\":\"442000118\",\"name\":\"小榄镇\"}]},{\"code\":\"445100\",\"name\":\"潮州市\",\"children\":[{\"code\":\"445102\",\"name\":\"湘桥区\"},{\"code\":\"445103\",\"name\":\"潮安区\"},{\"code\":\"445122\",\"name\":\"饶平县\"}]},{\"code\":\"445200\",\"name\":\"揭阳市\",\"children\":[{\"code\":\"445202\",\"name\":\"榕城区\"},{\"code\":\"445203\",\"name\":\"揭东区\"},{\"code\":\"445222\",\"name\":\"揭西县\"},{\"code\":\"445224\",\"name\":\"惠来县\"},{\"code\":\"445281\",\"name\":\"普宁市\"}]},{\"code\":\"445300\",\"name\":\"云浮市\",\"children\":[{\"code\":\"445302\",\"name\":\"云城区\"},{\"code\":\"445303\",\"name\":\"云安区\"},{\"code\":\"445321\",\"name\":\"新兴县\"},{\"code\":\"445322\",\"name\":\"郁南县\"},{\"code\":\"445381\",\"name\":\"罗定市\"}]}]},{\"code\":\"110000\",\"name\":\"北京市\",\"children\":[{\"code\":\"110100\",\"name\":\"市辖区\",\"children\":[{\"code\":\"110101\",\"name\":\"东城区\"},{\"code\":\"110102\",\"name\":\"西城区\"},{\"code\":\"110105\",\"name\":\"朝阳区\"},{\"code\":\"110106\",\"name\":\"丰台区\"},{\"code\":\"110107\",\"name\":\"石景山区\"},{\"code\":\"110108\",\"name\":\"海淀区\"},{\"code\":\"110109\",\"name\":\"门头沟区\"},{\"code\":\"110111\",\"name\":\"房山区\"},{\"code\":\"110112\",\"name\":\"通州区\"},{\"code\":\"110113\",\"name\":\"顺义区\"},{\"code\":\"110114\",\"name\":\"昌平区\"},{\"code\":\"110115\",\"name\":\"大兴区\"},{\"code\":\"110116\",\"name\":\"怀柔区\"},{\"code\":\"110117\",\"name\":\"平谷区\"},{\"code\":\"110118\",\"name\":\"密云区\"},{\"code\":\"110119\",\"name\":\"延庆区\"}]}]},{\"code\":\"120000\",\"name\":\"天津市\",\"children\":[{\"code\":\"120100\",\"name\":\"市辖区\",\"children\":[{\"code\":\"120101\",\"name\":\"和平区\"},{\"code\":\"120102\",\"name\":\"河东区\"},{\"code\":\"120103\",\"name\":\"河西区\"},{\"code\":\"120104\",\"name\":\"南开区\"},{\"code\":\"120105\",\"name\":\"河北区\"},{\"code\":\"120106\",\"name\":\"红桥区\"},{\"code\":\"120110\",\"name\":\"东丽区\"},{\"code\":\"120111\",\"name\":\"西青区\"},{\"code\":\"120112\",\"name\":\"津南区\"},{\"code\":\"120113\",\"name\":\"北辰区\"},{\"code\":\"120114\",\"name\":\"武清区\"},{\"code\":\"120115\",\"name\":\"宝坻区\"},{\"code\":\"120116\",\"name\":\"滨海新区\"},{\"code\":\"120117\",\"name\":\"宁河区\"},{\"code\":\"120118\",\"name\":\"静海区\"},{\"code\":\"120119\",\"name\":\"蓟州区\"}]}]},{\"code\":\"130000\",\"name\":\"河北省\",\"children\":[{\"code\":\"130100\",\"name\":\"石家庄市\",\"children\":[{\"code\":\"130102\",\"name\":\"长安区\"},{\"code\":\"130104\",\"name\":\"桥西区\"},{\"code\":\"130105\",\"name\":\"新华区\"},{\"code\":\"130107\",\"name\":\"井陉矿区\"},{\"code\":\"130108\",\"name\":\"裕华区\"},{\"code\":\"130109\",\"name\":\"藁城区\"},{\"code\":\"130110\",\"name\":\"鹿泉区\"},{\"code\":\"130111\",\"name\":\"栾城区\"},{\"code\":\"130121\",\"name\":\"井陉县\"},{\"code\":\"130123\",\"name\":\"正定县\"},{\"code\":\"130125\",\"name\":\"行唐县\"},{\"code\":\"130126\",\"name\":\"灵寿县\"},{\"code\":\"130127\",\"name\":\"高邑县\"},{\"code\":\"130128\",\"name\":\"深泽县\"},{\"code\":\"130129\",\"name\":\"赞皇县\"},{\"code\":\"130130\",\"name\":\"无极县\"},{\"code\":\"130131\",\"name\":\"平山县\"},{\"code\":\"130132\",\"name\":\"元氏县\"},{\"code\":\"130133\",\"name\":\"赵县\"},{\"code\":\"130171\",\"name\":\"石家庄高新技术产业开发区\"},{\"code\":\"130172\",\"name\":\"石家庄循环化工园区\"},{\"code\":\"130181\",\"name\":\"辛集市\"},{\"code\":\"130183\",\"name\":\"晋州市\"},{\"code\":\"130184\",\"name\":\"新乐市\"}]},{\"code\":\"130200\",\"name\":\"唐山市\",\"children\":[{\"code\":\"130202\",\"name\":\"路南区\"},{\"code\":\"130203\",\"name\":\"路北区\"},{\"code\":\"130204\",\"name\":\"古冶区\"},{\"code\":\"130205\",\"name\":\"开平区\"},{\"code\":\"130207\",\"name\":\"丰南区\"},{\"code\":\"130208\",\"name\":\"丰润区\"},{\"code\":\"130209\",\"name\":\"曹妃甸区\"},{\"code\":\"130224\",\"name\":\"滦南县\"},{\"code\":\"130225\",\"name\":\"乐亭县\"},{\"code\":\"130227\",\"name\":\"迁西县\"},{\"code\":\"130229\",\"name\":\"玉田县\"},{\"code\":\"130271\",\"name\":\"河北唐山芦台经济开发区\"},{\"code\":\"130272\",\"name\":\"唐山市汉沽管理区\"},{\"code\":\"130273\",\"name\":\"唐山高新技术产业开发区\"},{\"code\":\"130274\",\"name\":\"河北唐山海港经济开发区\"},{\"code\":\"130281\",\"name\":\"遵化市\"},{\"code\":\"130283\",\"name\":\"迁安市\"},{\"code\":\"130284\",\"name\":\"滦州市\"}]},{\"code\":\"130300\",\"name\":\"秦皇岛市\",\"children\":[{\"code\":\"130302\",\"name\":\"海港区\"},{\"code\":\"130303\",\"name\":\"山海关区\"},{\"code\":\"130304\",\"name\":\"北戴河区\"},{\"code\":\"130306\",\"name\":\"抚宁区\"},{\"code\":\"130321\",\"name\":\"青龙满族自治县\"},{\"code\":\"130322\",\"name\":\"昌黎县\"},{\"code\":\"130324\",\"name\":\"卢龙县\"},{\"code\":\"130371\",\"name\":\"秦皇岛市经济技术开发区\"},{\"code\":\"130372\",\"name\":\"北戴河新区\"}]},{\"code\":\"130400\",\"name\":\"邯郸市\",\"children\":[{\"code\":\"130402\",\"name\":\"邯山区\"},{\"code\":\"130403\",\"name\":\"丛台区\"},{\"code\":\"130404\",\"name\":\"复兴区\"},{\"code\":\"130406\",\"name\":\"峰峰矿区\"},{\"code\":\"130407\",\"name\":\"肥乡区\"},{\"code\":\"130408\",\"name\":\"永年区\"},{\"code\":\"130423\",\"name\":\"临漳县\"},{\"code\":\"130424\",\"name\":\"成安县\"},{\"code\":\"130425\",\"name\":\"大名县\"},{\"code\":\"130426\",\"name\":\"涉县\"},{\"code\":\"130427\",\"name\":\"磁县\"},{\"code\":\"130430\",\"name\":\"邱县\"},{\"code\":\"130431\",\"name\":\"鸡泽县\"},{\"code\":\"130432\",\"name\":\"广平县\"},{\"code\":\"130433\",\"name\":\"馆陶县\"},{\"code\":\"130434\",\"name\":\"魏县\"},{\"code\":\"130435\",\"name\":\"曲周县\"},{\"code\":\"130471\",\"name\":\"邯郸经济技术开发区\"},{\"code\":\"130473\",\"name\":\"邯郸冀南新区\"},{\"code\":\"130481\",\"name\":\"武安市\"}]},{\"code\":\"130500\",\"name\":\"邢台市\",\"children\":[{\"code\":\"130502\",\"name\":\"襄都区\"},{\"code\":\"130503\",\"name\":\"信都区\"},{\"code\":\"130505\",\"name\":\"任泽区\"},{\"code\":\"130506\",\"name\":\"南和区\"},{\"code\":\"130522\",\"name\":\"临城县\"},{\"code\":\"130523\",\"name\":\"内丘县\"},{\"code\":\"130524\",\"name\":\"柏乡县\"},{\"code\":\"130525\",\"name\":\"隆尧县\"},{\"code\":\"130528\",\"name\":\"宁晋县\"},{\"code\":\"130529\",\"name\":\"巨鹿县\"},{\"code\":\"130530\",\"name\":\"新河县\"},{\"code\":\"130531\",\"name\":\"广宗县\"},{\"code\":\"130532\",\"name\":\"平乡县\"},{\"code\":\"130533\",\"name\":\"威县\"},{\"code\":\"130534\",\"name\":\"清河县\"},{\"code\":\"130535\",\"name\":\"临西县\"},{\"code\":\"130571\",\"name\":\"河北邢台经济开发区\"},{\"code\":\"130581\",\"name\":\"南宫市\"},{\"code\":\"130582\",\"name\":\"沙河市\"}]},{\"code\":\"130600\",\"name\":\"保定市\",\"children\":[{\"code\":\"130602\",\"name\":\"竞秀区\"},{\"code\":\"130606\",\"name\":\"莲池区\"},{\"code\":\"130607\",\"name\":\"满城区\"},{\"code\":\"130608\",\"name\":\"清苑区\"},{\"code\":\"130609\",\"name\":\"徐水区\"},{\"code\":\"130623\",\"name\":\"涞水县\"},{\"code\":\"130624\",\"name\":\"阜平县\"},{\"code\":\"130626\",\"name\":\"定兴县\"},{\"code\":\"130627\",\"name\":\"唐县\"},{\"code\":\"130628\",\"name\":\"高阳县\"},{\"code\":\"130629\",\"name\":\"容城县\"},{\"code\":\"130630\",\"name\":\"涞源县\"},{\"code\":\"130631\",\"name\":\"望都县\"},{\"code\":\"130632\",\"name\":\"安新县\"},{\"code\":\"130633\",\"name\":\"易县\"},{\"code\":\"130634\",\"name\":\"曲阳县\"},{\"code\":\"130635\",\"name\":\"蠡县\"},{\"code\":\"130636\",\"name\":\"顺平县\"},{\"code\":\"130637\",\"name\":\"博野县\"},{\"code\":\"130638\",\"name\":\"雄县\"},{\"code\":\"130671\",\"name\":\"保定高新技术产业开发区\"},{\"code\":\"130672\",\"name\":\"保定白沟新城\"},{\"code\":\"130681\",\"name\":\"涿州市\"},{\"code\":\"130682\",\"name\":\"定州市\"},{\"code\":\"130683\",\"name\":\"安国市\"},{\"code\":\"130684\",\"name\":\"高碑店市\"}]},{\"code\":\"130700\",\"name\":\"张家口市\",\"children\":[{\"code\":\"130702\",\"name\":\"桥东区\"},{\"code\":\"130703\",\"name\":\"桥西区\"},{\"code\":\"130705\",\"name\":\"宣化区\"},{\"code\":\"130706\",\"name\":\"下花园区\"},{\"code\":\"130708\",\"name\":\"万全区\"},{\"code\":\"130709\",\"name\":\"崇礼区\"},{\"code\":\"130722\",\"name\":\"张北县\"},{\"code\":\"130723\",\"name\":\"康保县\"},{\"code\":\"130724\",\"name\":\"沽源县\"},{\"code\":\"130725\",\"name\":\"尚义县\"},{\"code\":\"130726\",\"name\":\"蔚县\"},{\"code\":\"130727\",\"name\":\"阳原县\"},{\"code\":\"130728\",\"name\":\"怀安县\"},{\"code\":\"130730\",\"name\":\"怀来县\"},{\"code\":\"130731\",\"name\":\"涿鹿县\"},{\"code\":\"130732\",\"name\":\"赤城县\"},{\"code\":\"130771\",\"name\":\"张家口经济开发区\"},{\"code\":\"130772\",\"name\":\"张家口市察北管理区\"},{\"code\":\"130773\",\"name\":\"张家口市塞北管理区\"}]},{\"code\":\"130800\",\"name\":\"承德市\",\"children\":[{\"code\":\"130802\",\"name\":\"双桥区\"},{\"code\":\"130803\",\"name\":\"双滦区\"},{\"code\":\"130804\",\"name\":\"鹰手营子矿区\"},{\"code\":\"130821\",\"name\":\"承德县\"},{\"code\":\"130822\",\"name\":\"兴隆县\"},{\"code\":\"130824\",\"name\":\"滦平县\"},{\"code\":\"130825\",\"name\":\"隆化县\"},{\"code\":\"130826\",\"name\":\"丰宁满族自治县\"},{\"code\":\"130827\",\"name\":\"宽城满族自治县\"},{\"code\":\"130828\",\"name\":\"围场满族蒙古族自治县\"},{\"code\":\"130871\",\"name\":\"承德高新技术产业开发区\"},{\"code\":\"130881\",\"name\":\"平泉市\"}]},{\"code\":\"130900\",\"name\":\"沧州市\",\"children\":[{\"code\":\"130902\",\"name\":\"新华区\"},{\"code\":\"130903\",\"name\":\"运河区\"},{\"code\":\"130921\",\"name\":\"沧县\"},{\"code\":\"130922\",\"name\":\"青县\"},{\"code\":\"130923\",\"name\":\"东光县\"},{\"code\":\"130924\",\"name\":\"海兴县\"},{\"code\":\"130925\",\"name\":\"盐山县\"},{\"code\":\"130926\",\"name\":\"肃宁县\"},{\"code\":\"130927\",\"name\":\"南皮县\"},{\"code\":\"130928\",\"name\":\"吴桥县\"},{\"code\":\"130929\",\"name\":\"献县\"},{\"code\":\"130930\",\"name\":\"孟村回族自治县\"},{\"code\":\"130971\",\"name\":\"河北沧州经济开发区\"},{\"code\":\"130972\",\"name\":\"沧州高新技术产业开发区\"},{\"code\":\"130973\",\"name\":\"沧州渤海新区\"},{\"code\":\"130981\",\"name\":\"泊头市\"},{\"code\":\"130982\",\"name\":\"任丘市\"},{\"code\":\"130983\",\"name\":\"黄骅市\"},{\"code\":\"130984\",\"name\":\"河间市\"}]},{\"code\":\"131000\",\"name\":\"廊坊市\",\"children\":[{\"code\":\"131002\",\"name\":\"安次区\"},{\"code\":\"131003\",\"name\":\"广阳区\"},{\"code\":\"131022\",\"name\":\"固安县\"},{\"code\":\"131023\",\"name\":\"永清县\"},{\"code\":\"131024\",\"name\":\"香河县\"},{\"code\":\"131025\",\"name\":\"大城县\"},{\"code\":\"131026\",\"name\":\"文安县\"},{\"code\":\"131028\",\"name\":\"大厂回族自治县\"},{\"code\":\"131071\",\"name\":\"廊坊经济技术开发区\"},{\"code\":\"131081\",\"name\":\"霸州市\"},{\"code\":\"131082\",\"name\":\"三河市\"}]},{\"code\":\"131100\",\"name\":\"衡水市\",\"children\":[{\"code\":\"131102\",\"name\":\"桃城区\"},{\"code\":\"131103\",\"name\":\"冀州区\"},{\"code\":\"131121\",\"name\":\"枣强县\"},{\"code\":\"131122\",\"name\":\"武邑县\"},{\"code\":\"131123\",\"name\":\"武强县\"},{\"code\":\"131124\",\"name\":\"饶阳县\"},{\"code\":\"131125\",\"name\":\"安平县\"},{\"code\":\"131126\",\"name\":\"故城县\"},{\"code\":\"131127\",\"name\":\"景县\"},{\"code\":\"131128\",\"name\":\"阜城县\"},{\"code\":\"131171\",\"name\":\"河北衡水高新技术产业开发区\"},{\"code\":\"131172\",\"name\":\"衡水滨湖新区\"},{\"code\":\"131182\",\"name\":\"深州市\"}]}]},{\"code\":\"140000\",\"name\":\"山西省\",\"children\":[{\"code\":\"140100\",\"name\":\"太原市\",\"children\":[{\"code\":\"140105\",\"name\":\"小店区\"},{\"code\":\"140106\",\"name\":\"迎泽区\"},{\"code\":\"140107\",\"name\":\"杏花岭区\"},{\"code\":\"140108\",\"name\":\"尖草坪区\"},{\"code\":\"140109\",\"name\":\"万柏林区\"},{\"code\":\"140110\",\"name\":\"晋源区\"},{\"code\":\"140121\",\"name\":\"清徐县\"},{\"code\":\"140122\",\"name\":\"阳曲县\"},{\"code\":\"140123\",\"name\":\"娄烦县\"},{\"code\":\"140171\",\"name\":\"山西转型综合改革示范区\"},{\"code\":\"140181\",\"name\":\"古交市\"}]},{\"code\":\"140200\",\"name\":\"大同市\",\"children\":[{\"code\":\"140212\",\"name\":\"新荣区\"},{\"code\":\"140213\",\"name\":\"平城区\"},{\"code\":\"140214\",\"name\":\"云冈区\"},{\"code\":\"140215\",\"name\":\"云州区\"},{\"code\":\"140221\",\"name\":\"阳高县\"},{\"code\":\"140222\",\"name\":\"天镇县\"},{\"code\":\"140223\",\"name\":\"广灵县\"},{\"code\":\"140224\",\"name\":\"灵丘县\"},{\"code\":\"140225\",\"name\":\"浑源县\"},{\"code\":\"140226\",\"name\":\"左云县\"},{\"code\":\"140271\",\"name\":\"山西大同经济开发区\"}]},{\"code\":\"140300\",\"name\":\"阳泉市\",\"children\":[{\"code\":\"140302\",\"name\":\"城区\"},{\"code\":\"140303\",\"name\":\"矿区\"},{\"code\":\"140311\",\"name\":\"郊区\"},{\"code\":\"140321\",\"name\":\"平定县\"},{\"code\":\"140322\",\"name\":\"盂县\"}]},{\"code\":\"140400\",\"name\":\"长治市\",\"children\":[{\"code\":\"140403\",\"name\":\"潞州区\"},{\"code\":\"140404\",\"name\":\"上党区\"},{\"code\":\"140405\",\"name\":\"屯留区\"},{\"code\":\"140406\",\"name\":\"潞城区\"},{\"code\":\"140423\",\"name\":\"襄垣县\"},{\"code\":\"140425\",\"name\":\"平顺县\"},{\"code\":\"140426\",\"name\":\"黎城县\"},{\"code\":\"140427\",\"name\":\"壶关县\"},{\"code\":\"140428\",\"name\":\"长子县\"},{\"code\":\"140429\",\"name\":\"武乡县\"},{\"code\":\"140430\",\"name\":\"沁县\"},{\"code\":\"140431\",\"name\":\"沁源县\"},{\"code\":\"140471\",\"name\":\"山西长治高新技术产业园区\"}]},{\"code\":\"140500\",\"name\":\"晋城市\",\"children\":[{\"code\":\"140502\",\"name\":\"城区\"},{\"code\":\"140521\",\"name\":\"沁水县\"},{\"code\":\"140522\",\"name\":\"阳城县\"},{\"code\":\"140524\",\"name\":\"陵川县\"},{\"code\":\"140525\",\"name\":\"泽州县\"},{\"code\":\"140581\",\"name\":\"高平市\"}]},{\"code\":\"140600\",\"name\":\"朔州市\",\"children\":[{\"code\":\"140602\",\"name\":\"朔城区\"},{\"code\":\"140603\",\"name\":\"平鲁区\"},{\"code\":\"140621\",\"name\":\"山阴县\"},{\"code\":\"140622\",\"name\":\"应县\"},{\"code\":\"140623\",\"name\":\"右玉县\"},{\"code\":\"140671\",\"name\":\"山西朔州经济开发区\"},{\"code\":\"140681\",\"name\":\"怀仁市\"}]},{\"code\":\"140700\",\"name\":\"晋中市\",\"children\":[{\"code\":\"140702\",\"name\":\"榆次区\"},{\"code\":\"140703\",\"name\":\"太谷区\"},{\"code\":\"140721\",\"name\":\"榆社县\"},{\"code\":\"140722\",\"name\":\"左权县\"},{\"code\":\"140723\",\"name\":\"和顺县\"},{\"code\":\"140724\",\"name\":\"昔阳县\"},{\"code\":\"140725\",\"name\":\"寿阳县\"},{\"code\":\"140727\",\"name\":\"祁县\"},{\"code\":\"140728\",\"name\":\"平遥县\"},{\"code\":\"140729\",\"name\":\"灵石县\"},{\"code\":\"140781\",\"name\":\"介休市\"}]},{\"code\":\"140800\",\"name\":\"运城市\",\"children\":[{\"code\":\"140802\",\"name\":\"盐湖区\"},{\"code\":\"140821\",\"name\":\"临猗县\"},{\"code\":\"140822\",\"name\":\"万荣县\"},{\"code\":\"140823\",\"name\":\"闻喜县\"},{\"code\":\"140824\",\"name\":\"稷山县\"},{\"code\":\"140825\",\"name\":\"新绛县\"},{\"code\":\"140826\",\"name\":\"绛县\"},{\"code\":\"140827\",\"name\":\"垣曲县\"},{\"code\":\"140828\",\"name\":\"夏县\"},{\"code\":\"140829\",\"name\":\"平陆县\"},{\"code\":\"140830\",\"name\":\"芮城县\"},{\"code\":\"140881\",\"name\":\"永济市\"},{\"code\":\"140882\",\"name\":\"河津市\"}]},{\"code\":\"140900\",\"name\":\"忻州市\",\"children\":[{\"code\":\"140902\",\"name\":\"忻府区\"},{\"code\":\"140921\",\"name\":\"定襄县\"},{\"code\":\"140922\",\"name\":\"五台县\"},{\"code\":\"140923\",\"name\":\"代县\"},{\"code\":\"140924\",\"name\":\"繁峙县\"},{\"code\":\"140925\",\"name\":\"宁武县\"},{\"code\":\"140926\",\"name\":\"静乐县\"},{\"code\":\"140927\",\"name\":\"神池县\"},{\"code\":\"140928\",\"name\":\"五寨县\"},{\"code\":\"140929\",\"name\":\"岢岚县\"},{\"code\":\"140930\",\"name\":\"河曲县\"},{\"code\":\"140931\",\"name\":\"保德县\"},{\"code\":\"140932\",\"name\":\"偏关县\"},{\"code\":\"140971\",\"name\":\"五台山风景名胜区\"},{\"code\":\"140981\",\"name\":\"原平市\"}]},{\"code\":\"141000\",\"name\":\"临汾市\",\"children\":[{\"code\":\"141002\",\"name\":\"尧都区\"},{\"code\":\"141021\",\"name\":\"曲沃县\"},{\"code\":\"141022\",\"name\":\"翼城县\"},{\"code\":\"141023\",\"name\":\"襄汾县\"},{\"code\":\"141024\",\"name\":\"洪洞县\"},{\"code\":\"141025\",\"name\":\"古县\"},{\"code\":\"141026\",\"name\":\"安泽县\"},{\"code\":\"141027\",\"name\":\"浮山县\"},{\"code\":\"141028\",\"name\":\"吉县\"},{\"code\":\"141029\",\"name\":\"乡宁县\"},{\"code\":\"141030\",\"name\":\"大宁县\"},{\"code\":\"141031\",\"name\":\"隰县\"},{\"code\":\"141032\",\"name\":\"永和县\"},{\"code\":\"141033\",\"name\":\"蒲县\"},{\"code\":\"141034\",\"name\":\"汾西县\"},{\"code\":\"141081\",\"name\":\"侯马市\"},{\"code\":\"141082\",\"name\":\"霍州市\"}]},{\"code\":\"141100\",\"name\":\"吕梁市\",\"children\":[{\"code\":\"141102\",\"name\":\"离石区\"},{\"code\":\"141121\",\"name\":\"文水县\"},{\"code\":\"141122\",\"name\":\"交城县\"},{\"code\":\"141123\",\"name\":\"兴县\"},{\"code\":\"141124\",\"name\":\"临县\"},{\"code\":\"141125\",\"name\":\"柳林县\"},{\"code\":\"141126\",\"name\":\"石楼县\"},{\"code\":\"141127\",\"name\":\"岚县\"},{\"code\":\"141128\",\"name\":\"方山县\"},{\"code\":\"141129\",\"name\":\"中阳县\"},{\"code\":\"141130\",\"name\":\"交口县\"},{\"code\":\"141181\",\"name\":\"孝义市\"},{\"code\":\"141182\",\"name\":\"汾阳市\"}]}]},{\"code\":\"150000\",\"name\":\"内蒙古自治区\",\"children\":[{\"code\":\"150100\",\"name\":\"呼和浩特市\",\"children\":[{\"code\":\"150102\",\"name\":\"新城区\"},{\"code\":\"150103\",\"name\":\"回民区\"},{\"code\":\"150104\",\"name\":\"玉泉区\"},{\"code\":\"150105\",\"name\":\"赛罕区\"},{\"code\":\"150121\",\"name\":\"土默特左旗\"},{\"code\":\"150122\",\"name\":\"托克托县\"},{\"code\":\"150123\",\"name\":\"和林格尔县\"},{\"code\":\"150124\",\"name\":\"清水河县\"},{\"code\":\"150125\",\"name\":\"武川县\"},{\"code\":\"150172\",\"name\":\"呼和浩特经济技术开发区\"}]},{\"code\":\"150200\",\"name\":\"包头市\",\"children\":[{\"code\":\"150202\",\"name\":\"东河区\"},{\"code\":\"150203\",\"name\":\"昆都仑区\"},{\"code\":\"150204\",\"name\":\"青山区\"},{\"code\":\"150205\",\"name\":\"石拐区\"},{\"code\":\"150206\",\"name\":\"白云鄂博矿区\"},{\"code\":\"150207\",\"name\":\"九原区\"},{\"code\":\"150221\",\"name\":\"土默特右旗\"},{\"code\":\"150222\",\"name\":\"固阳县\"},{\"code\":\"150223\",\"name\":\"达尔罕茂明安联合旗\"},{\"code\":\"150271\",\"name\":\"包头稀土高新技术产业开发区\"}]},{\"code\":\"150300\",\"name\":\"乌海市\",\"children\":[{\"code\":\"150302\",\"name\":\"海勃湾区\"},{\"code\":\"150303\",\"name\":\"海南区\"},{\"code\":\"150304\",\"name\":\"乌达区\"}]},{\"code\":\"150400\",\"name\":\"赤峰市\",\"children\":[{\"code\":\"150402\",\"name\":\"红山区\"},{\"code\":\"150403\",\"name\":\"元宝山区\"},{\"code\":\"150404\",\"name\":\"松山区\"},{\"code\":\"150421\",\"name\":\"阿鲁科尔沁旗\"},{\"code\":\"150422\",\"name\":\"巴林左旗\"},{\"code\":\"150423\",\"name\":\"巴林右旗\"},{\"code\":\"150424\",\"name\":\"林西县\"},{\"code\":\"150425\",\"name\":\"克什克腾旗\"},{\"code\":\"150426\",\"name\":\"翁牛特旗\"},{\"code\":\"150428\",\"name\":\"喀喇沁旗\"},{\"code\":\"150429\",\"name\":\"宁城县\"},{\"code\":\"150430\",\"name\":\"敖汉旗\"}]},{\"code\":\"150500\",\"name\":\"通辽市\",\"children\":[{\"code\":\"150502\",\"name\":\"科尔沁区\"},{\"code\":\"150521\",\"name\":\"科尔沁左翼中旗\"},{\"code\":\"150522\",\"name\":\"科尔沁左翼后旗\"},{\"code\":\"150523\",\"name\":\"开鲁县\"},{\"code\":\"150524\",\"name\":\"库伦旗\"},{\"code\":\"150525\",\"name\":\"奈曼旗\"},{\"code\":\"150526\",\"name\":\"扎鲁特旗\"},{\"code\":\"150571\",\"name\":\"通辽经济技术开发区\"},{\"code\":\"150581\",\"name\":\"霍林郭勒市\"}]},{\"code\":\"150600\",\"name\":\"鄂尔多斯市\",\"children\":[{\"code\":\"150602\",\"name\":\"东胜区\"},{\"code\":\"150603\",\"name\":\"康巴什区\"},{\"code\":\"150621\",\"name\":\"达拉特旗\"},{\"code\":\"150622\",\"name\":\"准格尔旗\"},{\"code\":\"150623\",\"name\":\"鄂托克前旗\"},{\"code\":\"150624\",\"name\":\"鄂托克旗\"},{\"code\":\"150625\",\"name\":\"杭锦旗\"},{\"code\":\"150626\",\"name\":\"乌审旗\"},{\"code\":\"150627\",\"name\":\"伊金霍洛旗\"}]},{\"code\":\"150700\",\"name\":\"呼伦贝尔市\",\"children\":[{\"code\":\"150702\",\"name\":\"海拉尔区\"},{\"code\":\"150703\",\"name\":\"扎赉诺尔区\"},{\"code\":\"150721\",\"name\":\"阿荣旗\"},{\"code\":\"150722\",\"name\":\"莫力达瓦达斡尔族自治旗\"},{\"code\":\"150723\",\"name\":\"鄂伦春自治旗\"},{\"code\":\"150724\",\"name\":\"鄂温克族自治旗\"},{\"code\":\"150725\",\"name\":\"陈巴尔虎旗\"},{\"code\":\"150726\",\"name\":\"新巴尔虎左旗\"},{\"code\":\"150727\",\"name\":\"新巴尔虎右旗\"},{\"code\":\"150781\",\"name\":\"满洲里市\"},{\"code\":\"150782\",\"name\":\"牙克石市\"},{\"code\":\"150783\",\"name\":\"扎兰屯市\"},{\"code\":\"150784\",\"name\":\"额尔古纳市\"},{\"code\":\"150785\",\"name\":\"根河市\"}]},{\"code\":\"150800\",\"name\":\"巴彦淖尔市\",\"children\":[{\"code\":\"150802\",\"name\":\"临河区\"},{\"code\":\"150821\",\"name\":\"五原县\"},{\"code\":\"150822\",\"name\":\"磴口县\"},{\"code\":\"150823\",\"name\":\"乌拉特前旗\"},{\"code\":\"150824\",\"name\":\"乌拉特中旗\"},{\"code\":\"150825\",\"name\":\"乌拉特后旗\"},{\"code\":\"150826\",\"name\":\"杭锦后旗\"}]},{\"code\":\"150900\",\"name\":\"乌兰察布市\",\"children\":[{\"code\":\"150902\",\"name\":\"集宁区\"},{\"code\":\"150921\",\"name\":\"卓资县\"},{\"code\":\"150922\",\"name\":\"化德县\"},{\"code\":\"150923\",\"name\":\"商都县\"},{\"code\":\"150924\",\"name\":\"兴和县\"},{\"code\":\"150925\",\"name\":\"凉城县\"},{\"code\":\"150926\",\"name\":\"察哈尔右翼前旗\"},{\"code\":\"150927\",\"name\":\"察哈尔右翼中旗\"},{\"code\":\"150928\",\"name\":\"察哈尔右翼后旗\"},{\"code\":\"150929\",\"name\":\"四子王旗\"},{\"code\":\"150981\",\"name\":\"丰镇市\"}]},{\"code\":\"152200\",\"name\":\"兴安盟\",\"children\":[{\"code\":\"152201\",\"name\":\"乌兰浩特市\"},{\"code\":\"152202\",\"name\":\"阿尔山市\"},{\"code\":\"152221\",\"name\":\"科尔沁右翼前旗\"},{\"code\":\"152222\",\"name\":\"科尔沁右翼中旗\"},{\"code\":\"152223\",\"name\":\"扎赉特旗\"},{\"code\":\"152224\",\"name\":\"突泉县\"}]},{\"code\":\"152500\",\"name\":\"锡林郭勒盟\",\"children\":[{\"code\":\"152501\",\"name\":\"二连浩特市\"},{\"code\":\"152502\",\"name\":\"锡林浩特市\"},{\"code\":\"152522\",\"name\":\"阿巴嘎旗\"},{\"code\":\"152523\",\"name\":\"苏尼特左旗\"},{\"code\":\"152524\",\"name\":\"苏尼特右旗\"},{\"code\":\"152525\",\"name\":\"东乌珠穆沁旗\"},{\"code\":\"152526\",\"name\":\"西乌珠穆沁旗\"},{\"code\":\"152527\",\"name\":\"太仆寺旗\"},{\"code\":\"152528\",\"name\":\"镶黄旗\"},{\"code\":\"152529\",\"name\":\"正镶白旗\"},{\"code\":\"152530\",\"name\":\"正蓝旗\"},{\"code\":\"152531\",\"name\":\"多伦县\"},{\"code\":\"152571\",\"name\":\"乌拉盖管委会\"}]},{\"code\":\"152900\",\"name\":\"阿拉善盟\",\"children\":[{\"code\":\"152921\",\"name\":\"阿拉善左旗\"},{\"code\":\"152922\",\"name\":\"阿拉善右旗\"},{\"code\":\"152923\",\"name\":\"额济纳旗\"},{\"code\":\"152971\",\"name\":\"内蒙古阿拉善高新技术产业开发区\"}]}]},{\"code\":\"210000\",\"name\":\"辽宁省\",\"children\":[{\"code\":\"210100\",\"name\":\"沈阳市\",\"children\":[{\"code\":\"210102\",\"name\":\"和平区\"},{\"code\":\"210103\",\"name\":\"沈河区\"},{\"code\":\"210104\",\"name\":\"大东区\"},{\"code\":\"210105\",\"name\":\"皇姑区\"},{\"code\":\"210106\",\"name\":\"铁西区\"},{\"code\":\"210111\",\"name\":\"苏家屯区\"},{\"code\":\"210112\",\"name\":\"浑南区\"},{\"code\":\"210113\",\"name\":\"沈北新区\"},{\"code\":\"210114\",\"name\":\"于洪区\"},{\"code\":\"210115\",\"name\":\"辽中区\"},{\"code\":\"210123\",\"name\":\"康平县\"},{\"code\":\"210124\",\"name\":\"法库县\"},{\"code\":\"210181\",\"name\":\"新民市\"}]},{\"code\":\"210200\",\"name\":\"大连市\",\"children\":[{\"code\":\"210202\",\"name\":\"中山区\"},{\"code\":\"210203\",\"name\":\"西岗区\"},{\"code\":\"210204\",\"name\":\"沙河口区\"},{\"code\":\"210211\",\"name\":\"甘井子区\"},{\"code\":\"210212\",\"name\":\"旅顺口区\"},{\"code\":\"210213\",\"name\":\"金州区\"},{\"code\":\"210214\",\"name\":\"普兰店区\"},{\"code\":\"210224\",\"name\":\"长海县\"},{\"code\":\"210281\",\"name\":\"瓦房店市\"},{\"code\":\"210283\",\"name\":\"庄河市\"}]},{\"code\":\"210300\",\"name\":\"鞍山市\",\"children\":[{\"code\":\"210302\",\"name\":\"铁东区\"},{\"code\":\"210303\",\"name\":\"铁西区\"},{\"code\":\"210304\",\"name\":\"立山区\"},{\"code\":\"210311\",\"name\":\"千山区\"},{\"code\":\"210321\",\"name\":\"台安县\"},{\"code\":\"210323\",\"name\":\"岫岩满族自治县\"},{\"code\":\"210381\",\"name\":\"海城市\"}]},{\"code\":\"210400\",\"name\":\"抚顺市\",\"children\":[{\"code\":\"210402\",\"name\":\"新抚区\"},{\"code\":\"210403\",\"name\":\"东洲区\"},{\"code\":\"210404\",\"name\":\"望花区\"},{\"code\":\"210411\",\"name\":\"顺城区\"},{\"code\":\"210421\",\"name\":\"抚顺县\"},{\"code\":\"210422\",\"name\":\"新宾满族自治县\"},{\"code\":\"210423\",\"name\":\"清原满族自治县\"}]},{\"code\":\"210500\",\"name\":\"本溪市\",\"children\":[{\"code\":\"210502\",\"name\":\"平山区\"},{\"code\":\"210503\",\"name\":\"溪湖区\"},{\"code\":\"210504\",\"name\":\"明山区\"},{\"code\":\"210505\",\"name\":\"南芬区\"},{\"code\":\"210521\",\"name\":\"本溪满族自治县\"},{\"code\":\"210522\",\"name\":\"桓仁满族自治县\"}]},{\"code\":\"210600\",\"name\":\"丹东市\",\"children\":[{\"code\":\"210602\",\"name\":\"元宝区\"},{\"code\":\"210603\",\"name\":\"振兴区\"},{\"code\":\"210604\",\"name\":\"振安区\"},{\"code\":\"210624\",\"name\":\"宽甸满族自治县\"},{\"code\":\"210681\",\"name\":\"东港市\"},{\"code\":\"210682\",\"name\":\"凤城市\"}]},{\"code\":\"210700\",\"name\":\"锦州市\",\"children\":[{\"code\":\"210702\",\"name\":\"古塔区\"},{\"code\":\"210703\",\"name\":\"凌河区\"},{\"code\":\"210711\",\"name\":\"太和区\"},{\"code\":\"210726\",\"name\":\"黑山县\"},{\"code\":\"210727\",\"name\":\"义县\"},{\"code\":\"210781\",\"name\":\"凌海市\"},{\"code\":\"210782\",\"name\":\"北镇市\"}]},{\"code\":\"210800\",\"name\":\"营口市\",\"children\":[{\"code\":\"210802\",\"name\":\"站前区\"},{\"code\":\"210803\",\"name\":\"西市区\"},{\"code\":\"210804\",\"name\":\"鲅鱼圈区\"},{\"code\":\"210811\",\"name\":\"老边区\"},{\"code\":\"210881\",\"name\":\"盖州市\"},{\"code\":\"210882\",\"name\":\"大石桥市\"}]},{\"code\":\"210900\",\"name\":\"阜新市\",\"children\":[{\"code\":\"210902\",\"name\":\"海州区\"},{\"code\":\"210903\",\"name\":\"新邱区\"},{\"code\":\"210904\",\"name\":\"太平区\"},{\"code\":\"210905\",\"name\":\"清河门区\"},{\"code\":\"210911\",\"name\":\"细河区\"},{\"code\":\"210921\",\"name\":\"阜新蒙古族自治县\"},{\"code\":\"210922\",\"name\":\"彰武县\"}]},{\"code\":\"211000\",\"name\":\"辽阳市\",\"children\":[{\"code\":\"211002\",\"name\":\"白塔区\"},{\"code\":\"211003\",\"name\":\"文圣区\"},{\"code\":\"211004\",\"name\":\"宏伟区\"},{\"code\":\"211005\",\"name\":\"弓长岭区\"},{\"code\":\"211011\",\"name\":\"太子河区\"},{\"code\":\"211021\",\"name\":\"辽阳县\"},{\"code\":\"211081\",\"name\":\"灯塔市\"}]},{\"code\":\"211100\",\"name\":\"盘锦市\",\"children\":[{\"code\":\"211102\",\"name\":\"双台子区\"},{\"code\":\"211103\",\"name\":\"兴隆台区\"},{\"code\":\"211104\",\"name\":\"大洼区\"},{\"code\":\"211122\",\"name\":\"盘山县\"}]},{\"code\":\"211200\",\"name\":\"铁岭市\",\"children\":[{\"code\":\"211202\",\"name\":\"银州区\"},{\"code\":\"211204\",\"name\":\"清河区\"},{\"code\":\"211221\",\"name\":\"铁岭县\"},{\"code\":\"211223\",\"name\":\"西丰县\"},{\"code\":\"211224\",\"name\":\"昌图县\"},{\"code\":\"211281\",\"name\":\"调兵山市\"},{\"code\":\"211282\",\"name\":\"开原市\"}]},{\"code\":\"211300\",\"name\":\"朝阳市\",\"children\":[{\"code\":\"211302\",\"name\":\"双塔区\"},{\"code\":\"211303\",\"name\":\"龙城区\"},{\"code\":\"211321\",\"name\":\"朝阳县\"},{\"code\":\"211322\",\"name\":\"建平县\"},{\"code\":\"211324\",\"name\":\"喀喇沁左翼蒙古族自治县\"},{\"code\":\"211381\",\"name\":\"北票市\"},{\"code\":\"211382\",\"name\":\"凌源市\"}]},{\"code\":\"211400\",\"name\":\"葫芦岛市\",\"children\":[{\"code\":\"211402\",\"name\":\"连山区\"},{\"code\":\"211403\",\"name\":\"龙港区\"},{\"code\":\"211404\",\"name\":\"南票区\"},{\"code\":\"211421\",\"name\":\"绥中县\"},{\"code\":\"211422\",\"name\":\"建昌县\"},{\"code\":\"211481\",\"name\":\"兴城市\"}]}]},{\"code\":\"220000\",\"name\":\"吉林省\",\"children\":[{\"code\":\"220100\",\"name\":\"长春市\",\"children\":[{\"code\":\"220102\",\"name\":\"南关区\"},{\"code\":\"220103\",\"name\":\"宽城区\"},{\"code\":\"220104\",\"name\":\"朝阳区\"},{\"code\":\"220105\",\"name\":\"二道区\"},{\"code\":\"220106\",\"name\":\"绿园区\"},{\"code\":\"220112\",\"name\":\"双阳区\"},{\"code\":\"220113\",\"name\":\"九台区\"},{\"code\":\"220122\",\"name\":\"农安县\"},{\"code\":\"220171\",\"name\":\"长春经济技术开发区\"},{\"code\":\"220172\",\"name\":\"长春净月高新技术产业开发区\"},{\"code\":\"220173\",\"name\":\"长春高新技术产业开发区\"},{\"code\":\"220174\",\"name\":\"长春汽车经济技术开发区\"},{\"code\":\"220182\",\"name\":\"榆树市\"},{\"code\":\"220183\",\"name\":\"德惠市\"},{\"code\":\"220184\",\"name\":\"公主岭市\"}]},{\"code\":\"220200\",\"name\":\"吉林市\",\"children\":[{\"code\":\"220202\",\"name\":\"昌邑区\"},{\"code\":\"220203\",\"name\":\"龙潭区\"},{\"code\":\"220204\",\"name\":\"船营区\"},{\"code\":\"220211\",\"name\":\"丰满区\"},{\"code\":\"220221\",\"name\":\"永吉县\"},{\"code\":\"220271\",\"name\":\"吉林经济开发区\"},{\"code\":\"220272\",\"name\":\"吉林高新技术产业开发区\"},{\"code\":\"220273\",\"name\":\"吉林中国新加坡食品区\"},{\"code\":\"220281\",\"name\":\"蛟河市\"},{\"code\":\"220282\",\"name\":\"桦甸市\"},{\"code\":\"220283\",\"name\":\"舒兰市\"},{\"code\":\"220284\",\"name\":\"磐石市\"}]},{\"code\":\"220300\",\"name\":\"四平市\",\"children\":[{\"code\":\"220302\",\"name\":\"铁西区\"},{\"code\":\"220303\",\"name\":\"铁东区\"},{\"code\":\"220322\",\"name\":\"梨树县\"},{\"code\":\"220323\",\"name\":\"伊通满族自治县\"},{\"code\":\"220382\",\"name\":\"双辽市\"}]},{\"code\":\"220400\",\"name\":\"辽源市\",\"children\":[{\"code\":\"220402\",\"name\":\"龙山区\"},{\"code\":\"220403\",\"name\":\"西安区\"},{\"code\":\"220421\",\"name\":\"东丰县\"},{\"code\":\"220422\",\"name\":\"东辽县\"}]},{\"code\":\"220500\",\"name\":\"通化市\",\"children\":[{\"code\":\"220502\",\"name\":\"东昌区\"},{\"code\":\"220503\",\"name\":\"二道江区\"},{\"code\":\"220521\",\"name\":\"通化县\"},{\"code\":\"220523\",\"name\":\"辉南县\"},{\"code\":\"220524\",\"name\":\"柳河县\"},{\"code\":\"220581\",\"name\":\"梅河口市\"},{\"code\":\"220582\",\"name\":\"集安市\"}]},{\"code\":\"220600\",\"name\":\"白山市\",\"children\":[{\"code\":\"220602\",\"name\":\"浑江区\"},{\"code\":\"220605\",\"name\":\"江源区\"},{\"code\":\"220621\",\"name\":\"抚松县\"},{\"code\":\"220622\",\"name\":\"靖宇县\"},{\"code\":\"220623\",\"name\":\"长白朝鲜族自治县\"},{\"code\":\"220681\",\"name\":\"临江市\"}]},{\"code\":\"220700\",\"name\":\"松原市\",\"children\":[{\"code\":\"220702\",\"name\":\"宁江区\"},{\"code\":\"220721\",\"name\":\"前郭尔罗斯蒙古族自治县\"},{\"code\":\"220722\",\"name\":\"长岭县\"},{\"code\":\"220723\",\"name\":\"乾安县\"},{\"code\":\"220771\",\"name\":\"吉林松原经济开发区\"},{\"code\":\"220781\",\"name\":\"扶余市\"}]},{\"code\":\"220800\",\"name\":\"白城市\",\"children\":[{\"code\":\"220802\",\"name\":\"洮北区\"},{\"code\":\"220821\",\"name\":\"镇赉县\"},{\"code\":\"220822\",\"name\":\"通榆县\"},{\"code\":\"220871\",\"name\":\"吉林白城经济开发区\"},{\"code\":\"220881\",\"name\":\"洮南市\"},{\"code\":\"220882\",\"name\":\"大安市\"}]},{\"code\":\"222400\",\"name\":\"延边朝鲜族自治州\",\"children\":[{\"code\":\"222401\",\"name\":\"延吉市\"},{\"code\":\"222402\",\"name\":\"图们市\"},{\"code\":\"222403\",\"name\":\"敦化市\"},{\"code\":\"222404\",\"name\":\"珲春市\"},{\"code\":\"222405\",\"name\":\"龙井市\"},{\"code\":\"222406\",\"name\":\"和龙市\"},{\"code\":\"222424\",\"name\":\"汪清县\"},{\"code\":\"222426\",\"name\":\"安图县\"}]}]},{\"code\":\"230000\",\"name\":\"黑龙江省\",\"children\":[{\"code\":\"230100\",\"name\":\"哈尔滨市\",\"children\":[{\"code\":\"230102\",\"name\":\"道里区\"},{\"code\":\"230103\",\"name\":\"南岗区\"},{\"code\":\"230104\",\"name\":\"道外区\"},{\"code\":\"230108\",\"name\":\"平房区\"},{\"code\":\"230109\",\"name\":\"松北区\"},{\"code\":\"230110\",\"name\":\"香坊区\"},{\"code\":\"230111\",\"name\":\"呼兰区\"},{\"code\":\"230112\",\"name\":\"阿城区\"},{\"code\":\"230113\",\"name\":\"双城区\"},{\"code\":\"230123\",\"name\":\"依兰县\"},{\"code\":\"230124\",\"name\":\"方正县\"},{\"code\":\"230125\",\"name\":\"宾县\"},{\"code\":\"230126\",\"name\":\"巴彦县\"},{\"code\":\"230127\",\"name\":\"木兰县\"},{\"code\":\"230128\",\"name\":\"通河县\"},{\"code\":\"230129\",\"name\":\"延寿县\"},{\"code\":\"230183\",\"name\":\"尚志市\"},{\"code\":\"230184\",\"name\":\"五常市\"}]},{\"code\":\"230200\",\"name\":\"齐齐哈尔市\",\"children\":[{\"code\":\"230202\",\"name\":\"龙沙区\"},{\"code\":\"230203\",\"name\":\"建华区\"},{\"code\":\"230204\",\"name\":\"铁锋区\"},{\"code\":\"230205\",\"name\":\"昂昂溪区\"},{\"code\":\"230206\",\"name\":\"富拉尔基区\"},{\"code\":\"230207\",\"name\":\"碾子山区\"},{\"code\":\"230208\",\"name\":\"梅里斯达斡尔族区\"},{\"code\":\"230221\",\"name\":\"龙江县\"},{\"code\":\"230223\",\"name\":\"依安县\"},{\"code\":\"230224\",\"name\":\"泰来县\"},{\"code\":\"230225\",\"name\":\"甘南县\"},{\"code\":\"230227\",\"name\":\"富裕县\"},{\"code\":\"230229\",\"name\":\"克山县\"},{\"code\":\"230230\",\"name\":\"克东县\"},{\"code\":\"230231\",\"name\":\"拜泉县\"},{\"code\":\"230281\",\"name\":\"讷河市\"}]},{\"code\":\"230300\",\"name\":\"鸡西市\",\"children\":[{\"code\":\"230302\",\"name\":\"鸡冠区\"},{\"code\":\"230303\",\"name\":\"恒山区\"},{\"code\":\"230304\",\"name\":\"滴道区\"},{\"code\":\"230305\",\"name\":\"梨树区\"},{\"code\":\"230306\",\"name\":\"城子河区\"},{\"code\":\"230307\",\"name\":\"麻山区\"},{\"code\":\"230321\",\"name\":\"鸡东县\"},{\"code\":\"230381\",\"name\":\"虎林市\"},{\"code\":\"230382\",\"name\":\"密山市\"}]},{\"code\":\"230400\",\"name\":\"鹤岗市\",\"children\":[{\"code\":\"230402\",\"name\":\"向阳区\"},{\"code\":\"230403\",\"name\":\"工农区\"},{\"code\":\"230404\",\"name\":\"南山区\"},{\"code\":\"230405\",\"name\":\"兴安区\"},{\"code\":\"230406\",\"name\":\"东山区\"},{\"code\":\"230407\",\"name\":\"兴山区\"},{\"code\":\"230421\",\"name\":\"萝北县\"},{\"code\":\"230422\",\"name\":\"绥滨县\"}]},{\"code\":\"230500\",\"name\":\"双鸭山市\",\"children\":[{\"code\":\"230502\",\"name\":\"尖山区\"},{\"code\":\"230503\",\"name\":\"岭东区\"},{\"code\":\"230505\",\"name\":\"四方台区\"},{\"code\":\"230506\",\"name\":\"宝山区\"},{\"code\":\"230521\",\"name\":\"集贤县\"},{\"code\":\"230522\",\"name\":\"友谊县\"},{\"code\":\"230523\",\"name\":\"宝清县\"},{\"code\":\"230524\",\"name\":\"饶河县\"}]},{\"code\":\"230600\",\"name\":\"大庆市\",\"children\":[{\"code\":\"230602\",\"name\":\"萨尔图区\"},{\"code\":\"230603\",\"name\":\"龙凤区\"},{\"code\":\"230604\",\"name\":\"让胡路区\"},{\"code\":\"230605\",\"name\":\"红岗区\"},{\"code\":\"230606\",\"name\":\"大同区\"},{\"code\":\"230621\",\"name\":\"肇州县\"},{\"code\":\"230622\",\"name\":\"肇源县\"},{\"code\":\"230623\",\"name\":\"林甸县\"},{\"code\":\"230624\",\"name\":\"杜尔伯特蒙古族自治县\"},{\"code\":\"230671\",\"name\":\"大庆高新技术产业开发区\"}]},{\"code\":\"230700\",\"name\":\"伊春市\",\"children\":[{\"code\":\"230717\",\"name\":\"伊美区\"},{\"code\":\"230718\",\"name\":\"乌翠区\"},{\"code\":\"230719\",\"name\":\"友好区\"},{\"code\":\"230722\",\"name\":\"嘉荫县\"},{\"code\":\"230723\",\"name\":\"汤旺县\"},{\"code\":\"230724\",\"name\":\"丰林县\"},{\"code\":\"230725\",\"name\":\"大箐山县\"},{\"code\":\"230726\",\"name\":\"南岔县\"},{\"code\":\"230751\",\"name\":\"金林区\"},{\"code\":\"230781\",\"name\":\"铁力市\"}]},{\"code\":\"230800\",\"name\":\"佳木斯市\",\"children\":[{\"code\":\"230803\",\"name\":\"向阳区\"},{\"code\":\"230804\",\"name\":\"前进区\"},{\"code\":\"230805\",\"name\":\"东风区\"},{\"code\":\"230811\",\"name\":\"郊区\"},{\"code\":\"230822\",\"name\":\"桦南县\"},{\"code\":\"230826\",\"name\":\"桦川县\"},{\"code\":\"230828\",\"name\":\"汤原县\"},{\"code\":\"230881\",\"name\":\"同江市\"},{\"code\":\"230882\",\"name\":\"富锦市\"},{\"code\":\"230883\",\"name\":\"抚远市\"}]},{\"code\":\"230900\",\"name\":\"七台河市\",\"children\":[{\"code\":\"230902\",\"name\":\"新兴区\"},{\"code\":\"230903\",\"name\":\"桃山区\"},{\"code\":\"230904\",\"name\":\"茄子河区\"},{\"code\":\"230921\",\"name\":\"勃利县\"}]},{\"code\":\"231000\",\"name\":\"牡丹江市\",\"children\":[{\"code\":\"231002\",\"name\":\"东安区\"},{\"code\":\"231003\",\"name\":\"阳明区\"},{\"code\":\"231004\",\"name\":\"爱民区\"},{\"code\":\"231005\",\"name\":\"西安区\"},{\"code\":\"231025\",\"name\":\"林口县\"},{\"code\":\"231071\",\"name\":\"牡丹江经济技术开发区\"},{\"code\":\"231081\",\"name\":\"绥芬河市\"},{\"code\":\"231083\",\"name\":\"海林市\"},{\"code\":\"231084\",\"name\":\"宁安市\"},{\"code\":\"231085\",\"name\":\"穆棱市\"},{\"code\":\"231086\",\"name\":\"东宁市\"}]},{\"code\":\"231100\",\"name\":\"黑河市\",\"children\":[{\"code\":\"231102\",\"name\":\"爱辉区\"},{\"code\":\"231123\",\"name\":\"逊克县\"},{\"code\":\"231124\",\"name\":\"孙吴县\"},{\"code\":\"231181\",\"name\":\"北安市\"},{\"code\":\"231182\",\"name\":\"五大连池市\"},{\"code\":\"231183\",\"name\":\"嫩江市\"}]},{\"code\":\"231200\",\"name\":\"绥化市\",\"children\":[{\"code\":\"231202\",\"name\":\"北林区\"},{\"code\":\"231221\",\"name\":\"望奎县\"},{\"code\":\"231222\",\"name\":\"兰西县\"},{\"code\":\"231223\",\"name\":\"青冈县\"},{\"code\":\"231224\",\"name\":\"庆安县\"},{\"code\":\"231225\",\"name\":\"明水县\"},{\"code\":\"231226\",\"name\":\"绥棱县\"},{\"code\":\"231281\",\"name\":\"安达市\"},{\"code\":\"231282\",\"name\":\"肇东市\"},{\"code\":\"231283\",\"name\":\"海伦市\"}]},{\"code\":\"232700\",\"name\":\"大兴安岭地区\",\"children\":[{\"code\":\"232701\",\"name\":\"漠河市\"},{\"code\":\"232721\",\"name\":\"呼玛县\"},{\"code\":\"232722\",\"name\":\"塔河县\"},{\"code\":\"232761\",\"name\":\"加格达奇区\"},{\"code\":\"232762\",\"name\":\"松岭区\"},{\"code\":\"232763\",\"name\":\"新林区\"},{\"code\":\"232764\",\"name\":\"呼中区\"}]}]},{\"code\":\"310000\",\"name\":\"上海市\",\"children\":[{\"code\":\"310100\",\"name\":\"市辖区\",\"children\":[{\"code\":\"310101\",\"name\":\"黄浦区\"},{\"code\":\"310104\",\"name\":\"徐汇区\"},{\"code\":\"310105\",\"name\":\"长宁区\"},{\"code\":\"310106\",\"name\":\"静安区\"},{\"code\":\"310107\",\"name\":\"普陀区\"},{\"code\":\"310109\",\"name\":\"虹口区\"},{\"code\":\"310110\",\"name\":\"杨浦区\"},{\"code\":\"310112\",\"name\":\"闵行区\"},{\"code\":\"310113\",\"name\":\"宝山区\"},{\"code\":\"310114\",\"name\":\"嘉定区\"},{\"code\":\"310115\",\"name\":\"浦东新区\"},{\"code\":\"310116\",\"name\":\"金山区\"},{\"code\":\"310117\",\"name\":\"松江区\"},{\"code\":\"310118\",\"name\":\"青浦区\"},{\"code\":\"310120\",\"name\":\"奉贤区\"},{\"code\":\"310151\",\"name\":\"崇明区\"}]}]},{\"code\":\"320000\",\"name\":\"江苏省\",\"children\":[{\"code\":\"320100\",\"name\":\"南京市\",\"children\":[{\"code\":\"320102\",\"name\":\"玄武区\"},{\"code\":\"320104\",\"name\":\"秦淮区\"},{\"code\":\"320105\",\"name\":\"建邺区\"},{\"code\":\"320106\",\"name\":\"鼓楼区\"},{\"code\":\"320111\",\"name\":\"浦口区\"},{\"code\":\"320113\",\"name\":\"栖霞区\"},{\"code\":\"320114\",\"name\":\"雨花台区\"},{\"code\":\"320115\",\"name\":\"江宁区\"},{\"code\":\"320116\",\"name\":\"六合区\"},{\"code\":\"320117\",\"name\":\"溧水区\"},{\"code\":\"320118\",\"name\":\"高淳区\"}]},{\"code\":\"320200\",\"name\":\"无锡市\",\"children\":[{\"code\":\"320205\",\"name\":\"锡山区\"},{\"code\":\"320206\",\"name\":\"惠山区\"},{\"code\":\"320211\",\"name\":\"滨湖区\"},{\"code\":\"320213\",\"name\":\"梁溪区\"},{\"code\":\"320214\",\"name\":\"新吴区\"},{\"code\":\"320281\",\"name\":\"江阴市\"},{\"code\":\"320282\",\"name\":\"宜兴市\"}]},{\"code\":\"320300\",\"name\":\"徐州市\",\"children\":[{\"code\":\"320302\",\"name\":\"鼓楼区\"},{\"code\":\"320303\",\"name\":\"云龙区\"},{\"code\":\"320305\",\"name\":\"贾汪区\"},{\"code\":\"320311\",\"name\":\"泉山区\"},{\"code\":\"320312\",\"name\":\"铜山区\"},{\"code\":\"320321\",\"name\":\"丰县\"},{\"code\":\"320322\",\"name\":\"沛县\"},{\"code\":\"320324\",\"name\":\"睢宁县\"},{\"code\":\"320371\",\"name\":\"徐州经济技术开发区\"},{\"code\":\"320381\",\"name\":\"新沂市\"},{\"code\":\"320382\",\"name\":\"邳州市\"}]},{\"code\":\"320400\",\"name\":\"常州市\",\"children\":[{\"code\":\"320402\",\"name\":\"天宁区\"},{\"code\":\"320404\",\"name\":\"钟楼区\"},{\"code\":\"320411\",\"name\":\"新北区\"},{\"code\":\"320412\",\"name\":\"武进区\"},{\"code\":\"320413\",\"name\":\"金坛区\"},{\"code\":\"320481\",\"name\":\"溧阳市\"}]},{\"code\":\"320500\",\"name\":\"苏州市\",\"children\":[{\"code\":\"320505\",\"name\":\"虎丘区\"},{\"code\":\"320506\",\"name\":\"吴中区\"},{\"code\":\"320507\",\"name\":\"相城区\"},{\"code\":\"320508\",\"name\":\"姑苏区\"},{\"code\":\"320509\",\"name\":\"吴江区\"},{\"code\":\"320571\",\"name\":\"苏州工业园区\"},{\"code\":\"320581\",\"name\":\"常熟市\"},{\"code\":\"320582\",\"name\":\"张家港市\"},{\"code\":\"320583\",\"name\":\"昆山市\"},{\"code\":\"320585\",\"name\":\"太仓市\"}]},{\"code\":\"320600\",\"name\":\"南通市\",\"children\":[{\"code\":\"320612\",\"name\":\"通州区\"},{\"code\":\"320613\",\"name\":\"崇川区\"},{\"code\":\"320614\",\"name\":\"海门区\"},{\"code\":\"320623\",\"name\":\"如东县\"},{\"code\":\"320671\",\"name\":\"南通经济技术开发区\"},{\"code\":\"320681\",\"name\":\"启东市\"},{\"code\":\"320682\",\"name\":\"如皋市\"},{\"code\":\"320685\",\"name\":\"海安市\"}]},{\"code\":\"320700\",\"name\":\"连云港市\",\"children\":[{\"code\":\"320703\",\"name\":\"连云区\"},{\"code\":\"320706\",\"name\":\"海州区\"},{\"code\":\"320707\",\"name\":\"赣榆区\"},{\"code\":\"320722\",\"name\":\"东海县\"},{\"code\":\"320723\",\"name\":\"灌云县\"},{\"code\":\"320724\",\"name\":\"灌南县\"},{\"code\":\"320771\",\"name\":\"连云港经济技术开发区\"},{\"code\":\"320772\",\"name\":\"连云港高新技术产业开发区\"}]},{\"code\":\"320800\",\"name\":\"淮安市\",\"children\":[{\"code\":\"320803\",\"name\":\"淮安区\"},{\"code\":\"320804\",\"name\":\"淮阴区\"},{\"code\":\"320812\",\"name\":\"清江浦区\"},{\"code\":\"320813\",\"name\":\"洪泽区\"},{\"code\":\"320826\",\"name\":\"涟水县\"},{\"code\":\"320830\",\"name\":\"盱眙县\"},{\"code\":\"320831\",\"name\":\"金湖县\"},{\"code\":\"320871\",\"name\":\"淮安经济技术开发区\"}]},{\"code\":\"320900\",\"name\":\"盐城市\",\"children\":[{\"code\":\"320902\",\"name\":\"亭湖区\"},{\"code\":\"320903\",\"name\":\"盐都区\"},{\"code\":\"320904\",\"name\":\"大丰区\"},{\"code\":\"320921\",\"name\":\"响水县\"},{\"code\":\"320922\",\"name\":\"滨海县\"},{\"code\":\"320923\",\"name\":\"阜宁县\"},{\"code\":\"320924\",\"name\":\"射阳县\"},{\"code\":\"320925\",\"name\":\"建湖县\"},{\"code\":\"320971\",\"name\":\"盐城经济技术开发区\"},{\"code\":\"320981\",\"name\":\"东台市\"}]},{\"code\":\"321000\",\"name\":\"扬州市\",\"children\":[{\"code\":\"321002\",\"name\":\"广陵区\"},{\"code\":\"321003\",\"name\":\"邗江区\"},{\"code\":\"321012\",\"name\":\"江都区\"},{\"code\":\"321023\",\"name\":\"宝应县\"},{\"code\":\"321071\",\"name\":\"扬州经济技术开发区\"},{\"code\":\"321081\",\"name\":\"仪征市\"},{\"code\":\"321084\",\"name\":\"高邮市\"}]},{\"code\":\"321100\",\"name\":\"镇江市\",\"children\":[{\"code\":\"321102\",\"name\":\"京口区\"},{\"code\":\"321111\",\"name\":\"润州区\"},{\"code\":\"321112\",\"name\":\"丹徒区\"},{\"code\":\"321171\",\"name\":\"镇江新区\"},{\"code\":\"321181\",\"name\":\"丹阳市\"},{\"code\":\"321182\",\"name\":\"扬中市\"},{\"code\":\"321183\",\"name\":\"句容市\"}]},{\"code\":\"321200\",\"name\":\"泰州市\",\"children\":[{\"code\":\"321202\",\"name\":\"海陵区\"},{\"code\":\"321203\",\"name\":\"高港区\"},{\"code\":\"321204\",\"name\":\"姜堰区\"},{\"code\":\"321271\",\"name\":\"泰州医药高新技术产业开发区\"},{\"code\":\"321281\",\"name\":\"兴化市\"},{\"code\":\"321282\",\"name\":\"靖江市\"},{\"code\":\"321283\",\"name\":\"泰兴市\"}]},{\"code\":\"321300\",\"name\":\"宿迁市\",\"children\":[{\"code\":\"321302\",\"name\":\"宿城区\"},{\"code\":\"321311\",\"name\":\"宿豫区\"},{\"code\":\"321322\",\"name\":\"沭阳县\"},{\"code\":\"321323\",\"name\":\"泗阳县\"},{\"code\":\"321324\",\"name\":\"泗洪县\"},{\"code\":\"321371\",\"name\":\"宿迁经济技术开发区\"}]}]},{\"code\":\"330000\",\"name\":\"浙江省\",\"children\":[{\"code\":\"330100\",\"name\":\"杭州市\",\"children\":[{\"code\":\"330102\",\"name\":\"上城区\"},{\"code\":\"330105\",\"name\":\"拱墅区\"},{\"code\":\"330106\",\"name\":\"西湖区\"},{\"code\":\"330108\",\"name\":\"滨江区\"},{\"code\":\"330109\",\"name\":\"萧山区\"},{\"code\":\"330110\",\"name\":\"余杭区\"},{\"code\":\"330111\",\"name\":\"富阳区\"},{\"code\":\"330112\",\"name\":\"临安区\"},{\"code\":\"330113\",\"name\":\"临平区\"},{\"code\":\"330114\",\"name\":\"钱塘区\"},{\"code\":\"330122\",\"name\":\"桐庐县\"},{\"code\":\"330127\",\"name\":\"淳安县\"},{\"code\":\"330182\",\"name\":\"建德市\"}]},{\"code\":\"330200\",\"name\":\"宁波市\",\"children\":[{\"code\":\"330203\",\"name\":\"海曙区\"},{\"code\":\"330205\",\"name\":\"江北区\"},{\"code\":\"330206\",\"name\":\"北仑区\"},{\"code\":\"330211\",\"name\":\"镇海区\"},{\"code\":\"330212\",\"name\":\"鄞州区\"},{\"code\":\"330213\",\"name\":\"奉化区\"},{\"code\":\"330225\",\"name\":\"象山县\"},{\"code\":\"330226\",\"name\":\"宁海县\"},{\"code\":\"330281\",\"name\":\"余姚市\"},{\"code\":\"330282\",\"name\":\"慈溪市\"}]},{\"code\":\"330300\",\"name\":\"温州市\",\"children\":[{\"code\":\"330302\",\"name\":\"鹿城区\"},{\"code\":\"330303\",\"name\":\"龙湾区\"},{\"code\":\"330304\",\"name\":\"瓯海区\"},{\"code\":\"330305\",\"name\":\"洞头区\"},{\"code\":\"330324\",\"name\":\"永嘉县\"},{\"code\":\"330326\",\"name\":\"平阳县\"},{\"code\":\"330327\",\"name\":\"苍南县\"},{\"code\":\"330328\",\"name\":\"文成县\"},{\"code\":\"330329\",\"name\":\"泰顺县\"},{\"code\":\"330381\",\"name\":\"瑞安市\"},{\"code\":\"330382\",\"name\":\"乐清市\"},{\"code\":\"330383\",\"name\":\"龙港市\"}]},{\"code\":\"330400\",\"name\":\"嘉兴市\",\"children\":[{\"code\":\"330402\",\"name\":\"南湖区\"},{\"code\":\"330411\",\"name\":\"秀洲区\"},{\"code\":\"330421\",\"name\":\"嘉善县\"},{\"code\":\"330424\",\"name\":\"海盐县\"},{\"code\":\"330481\",\"name\":\"海宁市\"},{\"code\":\"330482\",\"name\":\"平湖市\"},{\"code\":\"330483\",\"name\":\"桐乡市\"}]},{\"code\":\"330500\",\"name\":\"湖州市\",\"children\":[{\"code\":\"330502\",\"name\":\"吴兴区\"},{\"code\":\"330503\",\"name\":\"南浔区\"},{\"code\":\"330521\",\"name\":\"德清县\"},{\"code\":\"330522\",\"name\":\"长兴县\"},{\"code\":\"330523\",\"name\":\"安吉县\"}]},{\"code\":\"330600\",\"name\":\"绍兴市\",\"children\":[{\"code\":\"330602\",\"name\":\"越城区\"},{\"code\":\"330603\",\"name\":\"柯桥区\"},{\"code\":\"330604\",\"name\":\"上虞区\"},{\"code\":\"330624\",\"name\":\"新昌县\"},{\"code\":\"330681\",\"name\":\"诸暨市\"},{\"code\":\"330683\",\"name\":\"嵊州市\"}]},{\"code\":\"330700\",\"name\":\"金华市\",\"children\":[{\"code\":\"330702\",\"name\":\"婺城区\"},{\"code\":\"330703\",\"name\":\"金东区\"},{\"code\":\"330723\",\"name\":\"武义县\"},{\"code\":\"330726\",\"name\":\"浦江县\"},{\"code\":\"330727\",\"name\":\"磐安县\"},{\"code\":\"330781\",\"name\":\"兰溪市\"},{\"code\":\"330782\",\"name\":\"义乌市\"},{\"code\":\"330783\",\"name\":\"东阳市\"},{\"code\":\"330784\",\"name\":\"永康市\"}]},{\"code\":\"330800\",\"name\":\"衢州市\",\"children\":[{\"code\":\"330802\",\"name\":\"柯城区\"},{\"code\":\"330803\",\"name\":\"衢江区\"},{\"code\":\"330822\",\"name\":\"常山县\"},{\"code\":\"330824\",\"name\":\"开化县\"},{\"code\":\"330825\",\"name\":\"龙游县\"},{\"code\":\"330881\",\"name\":\"江山市\"}]},{\"code\":\"330900\",\"name\":\"舟山市\",\"children\":[{\"code\":\"330902\",\"name\":\"定海区\"},{\"code\":\"330903\",\"name\":\"普陀区\"},{\"code\":\"330921\",\"name\":\"岱山县\"},{\"code\":\"330922\",\"name\":\"嵊泗县\"}]},{\"code\":\"331000\",\"name\":\"台州市\",\"children\":[{\"code\":\"331002\",\"name\":\"椒江区\"},{\"code\":\"331003\",\"name\":\"黄岩区\"},{\"code\":\"331004\",\"name\":\"路桥区\"},{\"code\":\"331022\",\"name\":\"三门县\"},{\"code\":\"331023\",\"name\":\"天台县\"},{\"code\":\"331024\",\"name\":\"仙居县\"},{\"code\":\"331081\",\"name\":\"温岭市\"},{\"code\":\"331082\",\"name\":\"临海市\"},{\"code\":\"331083\",\"name\":\"玉环市\"}]},{\"code\":\"331100\",\"name\":\"丽水市\",\"children\":[{\"code\":\"331102\",\"name\":\"莲都区\"},{\"code\":\"331121\",\"name\":\"青田县\"},{\"code\":\"331122\",\"name\":\"缙云县\"},{\"code\":\"331123\",\"name\":\"遂昌县\"},{\"code\":\"331124\",\"name\":\"松阳县\"},{\"code\":\"331125\",\"name\":\"云和县\"},{\"code\":\"331126\",\"name\":\"庆元县\"},{\"code\":\"331127\",\"name\":\"景宁畲族自治县\"},{\"code\":\"331181\",\"name\":\"龙泉市\"}]}]},{\"code\":\"340000\",\"name\":\"安徽省\",\"children\":[{\"code\":\"340100\",\"name\":\"合肥市\",\"children\":[{\"code\":\"340102\",\"name\":\"瑶海区\"},{\"code\":\"340103\",\"name\":\"庐阳区\"},{\"code\":\"340104\",\"name\":\"蜀山区\"},{\"code\":\"340111\",\"name\":\"包河区\"},{\"code\":\"340121\",\"name\":\"长丰县\"},{\"code\":\"340122\",\"name\":\"肥东县\"},{\"code\":\"340123\",\"name\":\"肥西县\"},{\"code\":\"340124\",\"name\":\"庐江县\"},{\"code\":\"340171\",\"name\":\"合肥高新技术产业开发区\"},{\"code\":\"340172\",\"name\":\"合肥经济技术开发区\"},{\"code\":\"340173\",\"name\":\"合肥新站高新技术产业开发区\"},{\"code\":\"340181\",\"name\":\"巢湖市\"}]},{\"code\":\"340200\",\"name\":\"芜湖市\",\"children\":[{\"code\":\"340202\",\"name\":\"镜湖区\"},{\"code\":\"340207\",\"name\":\"鸠江区\"},{\"code\":\"340209\",\"name\":\"弋江区\"},{\"code\":\"340210\",\"name\":\"湾沚区\"},{\"code\":\"340212\",\"name\":\"繁昌区\"},{\"code\":\"340223\",\"name\":\"南陵县\"},{\"code\":\"340271\",\"name\":\"芜湖经济技术开发区\"},{\"code\":\"340272\",\"name\":\"安徽芜湖三山经济开发区\"},{\"code\":\"340281\",\"name\":\"无为市\"}]},{\"code\":\"340300\",\"name\":\"蚌埠市\",\"children\":[{\"code\":\"340302\",\"name\":\"龙子湖区\"},{\"code\":\"340303\",\"name\":\"蚌山区\"},{\"code\":\"340304\",\"name\":\"禹会区\"},{\"code\":\"340311\",\"name\":\"淮上区\"},{\"code\":\"340321\",\"name\":\"怀远县\"},{\"code\":\"340322\",\"name\":\"五河县\"},{\"code\":\"340323\",\"name\":\"固镇县\"},{\"code\":\"340371\",\"name\":\"蚌埠市高新技术开发区\"},{\"code\":\"340372\",\"name\":\"蚌埠市经济开发区\"}]},{\"code\":\"340400\",\"name\":\"淮南市\",\"children\":[{\"code\":\"340402\",\"name\":\"大通区\"},{\"code\":\"340403\",\"name\":\"田家庵区\"},{\"code\":\"340404\",\"name\":\"谢家集区\"},{\"code\":\"340405\",\"name\":\"八公山区\"},{\"code\":\"340406\",\"name\":\"潘集区\"},{\"code\":\"340421\",\"name\":\"凤台县\"},{\"code\":\"340422\",\"name\":\"寿县\"}]},{\"code\":\"340500\",\"name\":\"马鞍山市\",\"children\":[{\"code\":\"340503\",\"name\":\"花山区\"},{\"code\":\"340504\",\"name\":\"雨山区\"},{\"code\":\"340506\",\"name\":\"博望区\"},{\"code\":\"340521\",\"name\":\"当涂县\"},{\"code\":\"340522\",\"name\":\"含山县\"},{\"code\":\"340523\",\"name\":\"和县\"}]},{\"code\":\"340600\",\"name\":\"淮北市\",\"children\":[{\"code\":\"340602\",\"name\":\"杜集区\"},{\"code\":\"340603\",\"name\":\"相山区\"},{\"code\":\"340604\",\"name\":\"烈山区\"},{\"code\":\"340621\",\"name\":\"濉溪县\"}]},{\"code\":\"340700\",\"name\":\"铜陵市\",\"children\":[{\"code\":\"340705\",\"name\":\"铜官区\"},{\"code\":\"340706\",\"name\":\"义安区\"},{\"code\":\"340711\",\"name\":\"郊区\"},{\"code\":\"340722\",\"name\":\"枞阳县\"}]},{\"code\":\"340800\",\"name\":\"安庆市\",\"children\":[{\"code\":\"340802\",\"name\":\"迎江区\"},{\"code\":\"340803\",\"name\":\"大观区\"},{\"code\":\"340811\",\"name\":\"宜秀区\"},{\"code\":\"340822\",\"name\":\"怀宁县\"},{\"code\":\"340825\",\"name\":\"太湖县\"},{\"code\":\"340826\",\"name\":\"宿松县\"},{\"code\":\"340827\",\"name\":\"望江县\"},{\"code\":\"340828\",\"name\":\"岳西县\"},{\"code\":\"340871\",\"name\":\"安徽安庆经济开发区\"},{\"code\":\"340881\",\"name\":\"桐城市\"},{\"code\":\"340882\",\"name\":\"潜山市\"}]},{\"code\":\"341000\",\"name\":\"黄山市\",\"children\":[{\"code\":\"341002\",\"name\":\"屯溪区\"},{\"code\":\"341003\",\"name\":\"黄山区\"},{\"code\":\"341004\",\"name\":\"徽州区\"},{\"code\":\"341021\",\"name\":\"歙县\"},{\"code\":\"341022\",\"name\":\"休宁县\"},{\"code\":\"341023\",\"name\":\"黟县\"},{\"code\":\"341024\",\"name\":\"祁门县\"}]},{\"code\":\"341100\",\"name\":\"滁州市\",\"children\":[{\"code\":\"341102\",\"name\":\"琅琊区\"},{\"code\":\"341103\",\"name\":\"南谯区\"},{\"code\":\"341122\",\"name\":\"来安县\"},{\"code\":\"341124\",\"name\":\"全椒县\"},{\"code\":\"341125\",\"name\":\"定远县\"},{\"code\":\"341126\",\"name\":\"凤阳县\"},{\"code\":\"341171\",\"name\":\"中新苏滁高新技术产业开发区\"},{\"code\":\"341172\",\"name\":\"滁州经济技术开发区\"},{\"code\":\"341181\",\"name\":\"天长市\"},{\"code\":\"341182\",\"name\":\"明光市\"}]},{\"code\":\"341200\",\"name\":\"阜阳市\",\"children\":[{\"code\":\"341202\",\"name\":\"颍州区\"},{\"code\":\"341203\",\"name\":\"颍东区\"},{\"code\":\"341204\",\"name\":\"颍泉区\"},{\"code\":\"341221\",\"name\":\"临泉县\"},{\"code\":\"341222\",\"name\":\"太和县\"},{\"code\":\"341225\",\"name\":\"阜南县\"},{\"code\":\"341226\",\"name\":\"颍上县\"},{\"code\":\"341271\",\"name\":\"阜阳合肥现代产业园区\"},{\"code\":\"341272\",\"name\":\"阜阳经济技术开发区\"},{\"code\":\"341282\",\"name\":\"界首市\"}]},{\"code\":\"341300\",\"name\":\"宿州市\",\"children\":[{\"code\":\"341302\",\"name\":\"埇桥区\"},{\"code\":\"341321\",\"name\":\"砀山县\"},{\"code\":\"341322\",\"name\":\"萧县\"},{\"code\":\"341323\",\"name\":\"灵璧县\"},{\"code\":\"341324\",\"name\":\"泗县\"},{\"code\":\"341371\",\"name\":\"宿州马鞍山现代产业园区\"},{\"code\":\"341372\",\"name\":\"宿州经济技术开发区\"}]},{\"code\":\"341500\",\"name\":\"六安市\",\"children\":[{\"code\":\"341502\",\"name\":\"金安区\"},{\"code\":\"341503\",\"name\":\"裕安区\"},{\"code\":\"341504\",\"name\":\"叶集区\"},{\"code\":\"341522\",\"name\":\"霍邱县\"},{\"code\":\"341523\",\"name\":\"舒城县\"},{\"code\":\"341524\",\"name\":\"金寨县\"},{\"code\":\"341525\",\"name\":\"霍山县\"}]},{\"code\":\"341600\",\"name\":\"亳州市\",\"children\":[{\"code\":\"341602\",\"name\":\"谯城区\"},{\"code\":\"341621\",\"name\":\"涡阳县\"},{\"code\":\"341622\",\"name\":\"蒙城县\"},{\"code\":\"341623\",\"name\":\"利辛县\"}]},{\"code\":\"341700\",\"name\":\"池州市\",\"children\":[{\"code\":\"341702\",\"name\":\"贵池区\"},{\"code\":\"341721\",\"name\":\"东至县\"},{\"code\":\"341722\",\"name\":\"石台县\"},{\"code\":\"341723\",\"name\":\"青阳县\"}]},{\"code\":\"341800\",\"name\":\"宣城市\",\"children\":[{\"code\":\"341802\",\"name\":\"宣州区\"},{\"code\":\"341821\",\"name\":\"郎溪县\"},{\"code\":\"341823\",\"name\":\"泾县\"},{\"code\":\"341824\",\"name\":\"绩溪县\"},{\"code\":\"341825\",\"name\":\"旌德县\"},{\"code\":\"341871\",\"name\":\"宣城市经济开发区\"},{\"code\":\"341881\",\"name\":\"宁国市\"},{\"code\":\"341882\",\"name\":\"广德市\"}]}]},{\"code\":\"350000\",\"name\":\"福建省\",\"children\":[{\"code\":\"350100\",\"name\":\"福州市\",\"children\":[{\"code\":\"350102\",\"name\":\"鼓楼区\"},{\"code\":\"350103\",\"name\":\"台江区\"},{\"code\":\"350104\",\"name\":\"仓山区\"},{\"code\":\"350105\",\"name\":\"马尾区\"},{\"code\":\"350111\",\"name\":\"晋安区\"},{\"code\":\"350112\",\"name\":\"长乐区\"},{\"code\":\"350121\",\"name\":\"闽侯县\"},{\"code\":\"350122\",\"name\":\"连江县\"},{\"code\":\"350123\",\"name\":\"罗源县\"},{\"code\":\"350124\",\"name\":\"闽清县\"},{\"code\":\"350125\",\"name\":\"永泰县\"},{\"code\":\"350128\",\"name\":\"平潭县\"},{\"code\":\"350181\",\"name\":\"福清市\"}]},{\"code\":\"350200\",\"name\":\"厦门市\",\"children\":[{\"code\":\"350203\",\"name\":\"思明区\"},{\"code\":\"350205\",\"name\":\"海沧区\"},{\"code\":\"350206\",\"name\":\"湖里区\"},{\"code\":\"350211\",\"name\":\"集美区\"},{\"code\":\"350212\",\"name\":\"同安区\"},{\"code\":\"350213\",\"name\":\"翔安区\"}]},{\"code\":\"350300\",\"name\":\"莆田市\",\"children\":[{\"code\":\"350302\",\"name\":\"城厢区\"},{\"code\":\"350303\",\"name\":\"涵江区\"},{\"code\":\"350304\",\"name\":\"荔城区\"},{\"code\":\"350305\",\"name\":\"秀屿区\"},{\"code\":\"350322\",\"name\":\"仙游县\"}]},{\"code\":\"350400\",\"name\":\"三明市\",\"children\":[{\"code\":\"350404\",\"name\":\"三元区\"},{\"code\":\"350405\",\"name\":\"沙县区\"},{\"code\":\"350421\",\"name\":\"明溪县\"},{\"code\":\"350423\",\"name\":\"清流县\"},{\"code\":\"350424\",\"name\":\"宁化县\"},{\"code\":\"350425\",\"name\":\"大田县\"},{\"code\":\"350426\",\"name\":\"尤溪县\"},{\"code\":\"350428\",\"name\":\"将乐县\"},{\"code\":\"350429\",\"name\":\"泰宁县\"},{\"code\":\"350430\",\"name\":\"建宁县\"},{\"code\":\"350481\",\"name\":\"永安市\"}]},{\"code\":\"350500\",\"name\":\"泉州市\",\"children\":[{\"code\":\"350502\",\"name\":\"鲤城区\"},{\"code\":\"350503\",\"name\":\"丰泽区\"},{\"code\":\"350504\",\"name\":\"洛江区\"},{\"code\":\"350505\",\"name\":\"泉港区\"},{\"code\":\"350521\",\"name\":\"惠安县\"},{\"code\":\"350524\",\"name\":\"安溪县\"},{\"code\":\"350525\",\"name\":\"永春县\"},{\"code\":\"350526\",\"name\":\"德化县\"},{\"code\":\"350527\",\"name\":\"金门县\"},{\"code\":\"350581\",\"name\":\"石狮市\"},{\"code\":\"350582\",\"name\":\"晋江市\"},{\"code\":\"350583\",\"name\":\"南安市\"}]},{\"code\":\"350600\",\"name\":\"漳州市\",\"children\":[{\"code\":\"350602\",\"name\":\"芗城区\"},{\"code\":\"350603\",\"name\":\"龙文区\"},{\"code\":\"350604\",\"name\":\"龙海区\"},{\"code\":\"350605\",\"name\":\"长泰区\"},{\"code\":\"350622\",\"name\":\"云霄县\"},{\"code\":\"350623\",\"name\":\"漳浦县\"},{\"code\":\"350624\",\"name\":\"诏安县\"},{\"code\":\"350626\",\"name\":\"东山县\"},{\"code\":\"350627\",\"name\":\"南靖县\"},{\"code\":\"350628\",\"name\":\"平和县\"},{\"code\":\"350629\",\"name\":\"华安县\"}]},{\"code\":\"350700\",\"name\":\"南平市\",\"children\":[{\"code\":\"350702\",\"name\":\"延平区\"},{\"code\":\"350703\",\"name\":\"建阳区\"},{\"code\":\"350721\",\"name\":\"顺昌县\"},{\"code\":\"350722\",\"name\":\"浦城县\"},{\"code\":\"350723\",\"name\":\"光泽县\"},{\"code\":\"350724\",\"name\":\"松溪县\"},{\"code\":\"350725\",\"name\":\"政和县\"},{\"code\":\"350781\",\"name\":\"邵武市\"},{\"code\":\"350782\",\"name\":\"武夷山市\"},{\"code\":\"350783\",\"name\":\"建瓯市\"}]},{\"code\":\"350800\",\"name\":\"龙岩市\",\"children\":[{\"code\":\"350802\",\"name\":\"新罗区\"},{\"code\":\"350803\",\"name\":\"永定区\"},{\"code\":\"350821\",\"name\":\"长汀县\"},{\"code\":\"350823\",\"name\":\"上杭县\"},{\"code\":\"350824\",\"name\":\"武平县\"},{\"code\":\"350825\",\"name\":\"连城县\"},{\"code\":\"350881\",\"name\":\"漳平市\"}]},{\"code\":\"350900\",\"name\":\"宁德市\",\"children\":[{\"code\":\"350902\",\"name\":\"蕉城区\"},{\"code\":\"350921\",\"name\":\"霞浦县\"},{\"code\":\"350922\",\"name\":\"古田县\"},{\"code\":\"350923\",\"name\":\"屏南县\"},{\"code\":\"350924\",\"name\":\"寿宁县\"},{\"code\":\"350925\",\"name\":\"周宁县\"},{\"code\":\"350926\",\"name\":\"柘荣县\"},{\"code\":\"350981\",\"name\":\"福安市\"},{\"code\":\"350982\",\"name\":\"福鼎市\"}]}]},{\"code\":\"360000\",\"name\":\"江西省\",\"children\":[{\"code\":\"360100\",\"name\":\"南昌市\",\"children\":[{\"code\":\"360102\",\"name\":\"东湖区\"},{\"code\":\"360103\",\"name\":\"西湖区\"},{\"code\":\"360104\",\"name\":\"青云谱区\"},{\"code\":\"360111\",\"name\":\"青山湖区\"},{\"code\":\"360112\",\"name\":\"新建区\"},{\"code\":\"360113\",\"name\":\"红谷滩区\"},{\"code\":\"360121\",\"name\":\"南昌县\"},{\"code\":\"360123\",\"name\":\"安义县\"},{\"code\":\"360124\",\"name\":\"进贤县\"}]},{\"code\":\"360200\",\"name\":\"景德镇市\",\"children\":[{\"code\":\"360202\",\"name\":\"昌江区\"},{\"code\":\"360203\",\"name\":\"珠山区\"},{\"code\":\"360222\",\"name\":\"浮梁县\"},{\"code\":\"360281\",\"name\":\"乐平市\"}]},{\"code\":\"360300\",\"name\":\"萍乡市\",\"children\":[{\"code\":\"360302\",\"name\":\"安源区\"},{\"code\":\"360313\",\"name\":\"湘东区\"},{\"code\":\"360321\",\"name\":\"莲花县\"},{\"code\":\"360322\",\"name\":\"上栗县\"},{\"code\":\"360323\",\"name\":\"芦溪县\"}]},{\"code\":\"360400\",\"name\":\"九江市\",\"children\":[{\"code\":\"360402\",\"name\":\"濂溪区\"},{\"code\":\"360403\",\"name\":\"浔阳区\"},{\"code\":\"360404\",\"name\":\"柴桑区\"},{\"code\":\"360423\",\"name\":\"武宁县\"},{\"code\":\"360424\",\"name\":\"修水县\"},{\"code\":\"360425\",\"name\":\"永修县\"},{\"code\":\"360426\",\"name\":\"德安县\"},{\"code\":\"360428\",\"name\":\"都昌县\"},{\"code\":\"360429\",\"name\":\"湖口县\"},{\"code\":\"360430\",\"name\":\"彭泽县\"},{\"code\":\"360481\",\"name\":\"瑞昌市\"},{\"code\":\"360482\",\"name\":\"共青城市\"},{\"code\":\"360483\",\"name\":\"庐山市\"}]},{\"code\":\"360500\",\"name\":\"新余市\",\"children\":[{\"code\":\"360502\",\"name\":\"渝水区\"},{\"code\":\"360521\",\"name\":\"分宜县\"}]},{\"code\":\"360600\",\"name\":\"鹰潭市\",\"children\":[{\"code\":\"360602\",\"name\":\"月湖区\"},{\"code\":\"360603\",\"name\":\"余江区\"},{\"code\":\"360681\",\"name\":\"贵溪市\"}]},{\"code\":\"360700\",\"name\":\"赣州市\",\"children\":[{\"code\":\"360702\",\"name\":\"章贡区\"},{\"code\":\"360703\",\"name\":\"南康区\"},{\"code\":\"360704\",\"name\":\"赣县区\"},{\"code\":\"360722\",\"name\":\"信丰县\"},{\"code\":\"360723\",\"name\":\"大余县\"},{\"code\":\"360724\",\"name\":\"上犹县\"},{\"code\":\"360725\",\"name\":\"崇义县\"},{\"code\":\"360726\",\"name\":\"安远县\"},{\"code\":\"360728\",\"name\":\"定南县\"},{\"code\":\"360729\",\"name\":\"全南县\"},{\"code\":\"360730\",\"name\":\"宁都县\"},{\"code\":\"360731\",\"name\":\"于都县\"},{\"code\":\"360732\",\"name\":\"兴国县\"},{\"code\":\"360733\",\"name\":\"会昌县\"},{\"code\":\"360734\",\"name\":\"寻乌县\"},{\"code\":\"360735\",\"name\":\"石城县\"},{\"code\":\"360781\",\"name\":\"瑞金市\"},{\"code\":\"360783\",\"name\":\"龙南市\"}]},{\"code\":\"360800\",\"name\":\"吉安市\",\"children\":[{\"code\":\"360802\",\"name\":\"吉州区\"},{\"code\":\"360803\",\"name\":\"青原区\"},{\"code\":\"360821\",\"name\":\"吉安县\"},{\"code\":\"360822\",\"name\":\"吉水县\"},{\"code\":\"360823\",\"name\":\"峡江县\"},{\"code\":\"360824\",\"name\":\"新干县\"},{\"code\":\"360825\",\"name\":\"永丰县\"},{\"code\":\"360826\",\"name\":\"泰和县\"},{\"code\":\"360827\",\"name\":\"遂川县\"},{\"code\":\"360828\",\"name\":\"万安县\"},{\"code\":\"360829\",\"name\":\"安福县\"},{\"code\":\"360830\",\"name\":\"永新县\"},{\"code\":\"360881\",\"name\":\"井冈山市\"}]},{\"code\":\"360900\",\"name\":\"宜春市\",\"children\":[{\"code\":\"360902\",\"name\":\"袁州区\"},{\"code\":\"360921\",\"name\":\"奉新县\"},{\"code\":\"360922\",\"name\":\"万载县\"},{\"code\":\"360923\",\"name\":\"上高县\"},{\"code\":\"360924\",\"name\":\"宜丰县\"},{\"code\":\"360925\",\"name\":\"靖安县\"},{\"code\":\"360926\",\"name\":\"铜鼓县\"},{\"code\":\"360981\",\"name\":\"丰城市\"},{\"code\":\"360982\",\"name\":\"樟树市\"},{\"code\":\"360983\",\"name\":\"高安市\"}]},{\"code\":\"361000\",\"name\":\"抚州市\",\"children\":[{\"code\":\"361002\",\"name\":\"临川区\"},{\"code\":\"361003\",\"name\":\"东乡区\"},{\"code\":\"361021\",\"name\":\"南城县\"},{\"code\":\"361022\",\"name\":\"黎川县\"},{\"code\":\"361023\",\"name\":\"南丰县\"},{\"code\":\"361024\",\"name\":\"崇仁县\"},{\"code\":\"361025\",\"name\":\"乐安县\"},{\"code\":\"361026\",\"name\":\"宜黄县\"},{\"code\":\"361027\",\"name\":\"金溪县\"},{\"code\":\"361028\",\"name\":\"资溪县\"},{\"code\":\"361030\",\"name\":\"广昌县\"}]},{\"code\":\"361100\",\"name\":\"上饶市\",\"children\":[{\"code\":\"361102\",\"name\":\"信州区\"},{\"code\":\"361103\",\"name\":\"广丰区\"},{\"code\":\"361104\",\"name\":\"广信区\"},{\"code\":\"361123\",\"name\":\"玉山县\"},{\"code\":\"361124\",\"name\":\"铅山县\"},{\"code\":\"361125\",\"name\":\"横峰县\"},{\"code\":\"361126\",\"name\":\"弋阳县\"},{\"code\":\"361127\",\"name\":\"余干县\"},{\"code\":\"361128\",\"name\":\"鄱阳县\"},{\"code\":\"361129\",\"name\":\"万年县\"},{\"code\":\"361130\",\"name\":\"婺源县\"},{\"code\":\"361181\",\"name\":\"德兴市\"}]}]},{\"code\":\"370000\",\"name\":\"山东省\",\"children\":[{\"code\":\"370100\",\"name\":\"济南市\",\"children\":[{\"code\":\"370102\",\"name\":\"历下区\"},{\"code\":\"370103\",\"name\":\"市中区\"},{\"code\":\"370104\",\"name\":\"槐荫区\"},{\"code\":\"370105\",\"name\":\"天桥区\"},{\"code\":\"370112\",\"name\":\"历城区\"},{\"code\":\"370113\",\"name\":\"长清区\"},{\"code\":\"370114\",\"name\":\"章丘区\"},{\"code\":\"370115\",\"name\":\"济阳区\"},{\"code\":\"370116\",\"name\":\"莱芜区\"},{\"code\":\"370117\",\"name\":\"钢城区\"},{\"code\":\"370124\",\"name\":\"平阴县\"},{\"code\":\"370126\",\"name\":\"商河县\"},{\"code\":\"370171\",\"name\":\"济南高新技术产业开发区\"}]},{\"code\":\"370200\",\"name\":\"青岛市\",\"children\":[{\"code\":\"370202\",\"name\":\"市南区\"},{\"code\":\"370203\",\"name\":\"市北区\"},{\"code\":\"370211\",\"name\":\"黄岛区\"},{\"code\":\"370212\",\"name\":\"崂山区\"},{\"code\":\"370213\",\"name\":\"李沧区\"},{\"code\":\"370214\",\"name\":\"城阳区\"},{\"code\":\"370215\",\"name\":\"即墨区\"},{\"code\":\"370271\",\"name\":\"青岛高新技术产业开发区\"},{\"code\":\"370281\",\"name\":\"胶州市\"},{\"code\":\"370283\",\"name\":\"平度市\"},{\"code\":\"370285\",\"name\":\"莱西市\"}]},{\"code\":\"370300\",\"name\":\"淄博市\",\"children\":[{\"code\":\"370302\",\"name\":\"淄川区\"},{\"code\":\"370303\",\"name\":\"张店区\"},{\"code\":\"370304\",\"name\":\"博山区\"},{\"code\":\"370305\",\"name\":\"临淄区\"},{\"code\":\"370306\",\"name\":\"周村区\"},{\"code\":\"370321\",\"name\":\"桓台县\"},{\"code\":\"370322\",\"name\":\"高青县\"},{\"code\":\"370323\",\"name\":\"沂源县\"}]},{\"code\":\"370400\",\"name\":\"枣庄市\",\"children\":[{\"code\":\"370402\",\"name\":\"市中区\"},{\"code\":\"370403\",\"name\":\"薛城区\"},{\"code\":\"370404\",\"name\":\"峄城区\"},{\"code\":\"370405\",\"name\":\"台儿庄区\"},{\"code\":\"370406\",\"name\":\"山亭区\"},{\"code\":\"370481\",\"name\":\"滕州市\"}]},{\"code\":\"370500\",\"name\":\"东营市\",\"children\":[{\"code\":\"370502\",\"name\":\"东营区\"},{\"code\":\"370503\",\"name\":\"河口区\"},{\"code\":\"370505\",\"name\":\"垦利区\"},{\"code\":\"370522\",\"name\":\"利津县\"},{\"code\":\"370523\",\"name\":\"广饶县\"},{\"code\":\"370571\",\"name\":\"东营经济技术开发区\"},{\"code\":\"370572\",\"name\":\"东营港经济开发区\"}]},{\"code\":\"370600\",\"name\":\"烟台市\",\"children\":[{\"code\":\"370602\",\"name\":\"芝罘区\"},{\"code\":\"370611\",\"name\":\"福山区\"},{\"code\":\"370612\",\"name\":\"牟平区\"},{\"code\":\"370613\",\"name\":\"莱山区\"},{\"code\":\"370614\",\"name\":\"蓬莱区\"},{\"code\":\"370671\",\"name\":\"烟台高新技术产业开发区\"},{\"code\":\"370672\",\"name\":\"烟台经济技术开发区\"},{\"code\":\"370681\",\"name\":\"龙口市\"},{\"code\":\"370682\",\"name\":\"莱阳市\"},{\"code\":\"370683\",\"name\":\"莱州市\"},{\"code\":\"370685\",\"name\":\"招远市\"},{\"code\":\"370686\",\"name\":\"栖霞市\"},{\"code\":\"370687\",\"name\":\"海阳市\"}]},{\"code\":\"370700\",\"name\":\"潍坊市\",\"children\":[{\"code\":\"370702\",\"name\":\"潍城区\"},{\"code\":\"370703\",\"name\":\"寒亭区\"},{\"code\":\"370704\",\"name\":\"坊子区\"},{\"code\":\"370705\",\"name\":\"奎文区\"},{\"code\":\"370724\",\"name\":\"临朐县\"},{\"code\":\"370725\",\"name\":\"昌乐县\"},{\"code\":\"370772\",\"name\":\"潍坊滨海经济技术开发区\"},{\"code\":\"370781\",\"name\":\"青州市\"},{\"code\":\"370782\",\"name\":\"诸城市\"},{\"code\":\"370783\",\"name\":\"寿光市\"},{\"code\":\"370784\",\"name\":\"安丘市\"},{\"code\":\"370785\",\"name\":\"高密市\"},{\"code\":\"370786\",\"name\":\"昌邑市\"}]},{\"code\":\"370800\",\"name\":\"济宁市\",\"children\":[{\"code\":\"370811\",\"name\":\"任城区\"},{\"code\":\"370812\",\"name\":\"兖州区\"},{\"code\":\"370826\",\"name\":\"微山县\"},{\"code\":\"370827\",\"name\":\"鱼台县\"},{\"code\":\"370828\",\"name\":\"金乡县\"},{\"code\":\"370829\",\"name\":\"嘉祥县\"},{\"code\":\"370830\",\"name\":\"汶上县\"},{\"code\":\"370831\",\"name\":\"泗水县\"},{\"code\":\"370832\",\"name\":\"梁山县\"},{\"code\":\"370871\",\"name\":\"济宁高新技术产业开发区\"},{\"code\":\"370881\",\"name\":\"曲阜市\"},{\"code\":\"370883\",\"name\":\"邹城市\"}]},{\"code\":\"370900\",\"name\":\"泰安市\",\"children\":[{\"code\":\"370902\",\"name\":\"泰山区\"},{\"code\":\"370911\",\"name\":\"岱岳区\"},{\"code\":\"370921\",\"name\":\"宁阳县\"},{\"code\":\"370923\",\"name\":\"东平县\"},{\"code\":\"370982\",\"name\":\"新泰市\"},{\"code\":\"370983\",\"name\":\"肥城市\"}]},{\"code\":\"371000\",\"name\":\"威海市\",\"children\":[{\"code\":\"371002\",\"name\":\"环翠区\"},{\"code\":\"371003\",\"name\":\"文登区\"},{\"code\":\"371071\",\"name\":\"威海火炬高技术产业开发区\"},{\"code\":\"371072\",\"name\":\"威海经济技术开发区\"},{\"code\":\"371073\",\"name\":\"威海临港经济技术开发区\"},{\"code\":\"371082\",\"name\":\"荣成市\"},{\"code\":\"371083\",\"name\":\"乳山市\"}]},{\"code\":\"371100\",\"name\":\"日照市\",\"children\":[{\"code\":\"371102\",\"name\":\"东港区\"},{\"code\":\"371103\",\"name\":\"岚山区\"},{\"code\":\"371121\",\"name\":\"五莲县\"},{\"code\":\"371122\",\"name\":\"莒县\"},{\"code\":\"371171\",\"name\":\"日照经济技术开发区\"}]},{\"code\":\"371300\",\"name\":\"临沂市\",\"children\":[{\"code\":\"371302\",\"name\":\"兰山区\"},{\"code\":\"371311\",\"name\":\"罗庄区\"},{\"code\":\"371312\",\"name\":\"河东区\"},{\"code\":\"371321\",\"name\":\"沂南县\"},{\"code\":\"371322\",\"name\":\"郯城县\"},{\"code\":\"371323\",\"name\":\"沂水县\"},{\"code\":\"371324\",\"name\":\"兰陵县\"},{\"code\":\"371325\",\"name\":\"费县\"},{\"code\":\"371326\",\"name\":\"平邑县\"},{\"code\":\"371327\",\"name\":\"莒南县\"},{\"code\":\"371328\",\"name\":\"蒙阴县\"},{\"code\":\"371329\",\"name\":\"临沭县\"},{\"code\":\"371371\",\"name\":\"临沂高新技术产业开发区\"}]},{\"code\":\"371400\",\"name\":\"德州市\",\"children\":[{\"code\":\"371402\",\"name\":\"德城区\"},{\"code\":\"371403\",\"name\":\"陵城区\"},{\"code\":\"371422\",\"name\":\"宁津县\"},{\"code\":\"371423\",\"name\":\"庆云县\"},{\"code\":\"371424\",\"name\":\"临邑县\"},{\"code\":\"371425\",\"name\":\"齐河县\"},{\"code\":\"371426\",\"name\":\"平原县\"},{\"code\":\"371427\",\"name\":\"夏津县\"},{\"code\":\"371428\",\"name\":\"武城县\"},{\"code\":\"371471\",\"name\":\"德州天衢新区\"},{\"code\":\"371481\",\"name\":\"乐陵市\"},{\"code\":\"371482\",\"name\":\"禹城市\"}]},{\"code\":\"371500\",\"name\":\"聊城市\",\"children\":[{\"code\":\"371502\",\"name\":\"东昌府区\"},{\"code\":\"371503\",\"name\":\"茌平区\"},{\"code\":\"371521\",\"name\":\"阳谷县\"},{\"code\":\"371522\",\"name\":\"莘县\"},{\"code\":\"371524\",\"name\":\"东阿县\"},{\"code\":\"371525\",\"name\":\"冠县\"},{\"code\":\"371526\",\"name\":\"高唐县\"},{\"code\":\"371581\",\"name\":\"临清市\"}]},{\"code\":\"371600\",\"name\":\"滨州市\",\"children\":[{\"code\":\"371602\",\"name\":\"滨城区\"},{\"code\":\"371603\",\"name\":\"沾化区\"},{\"code\":\"371621\",\"name\":\"惠民县\"},{\"code\":\"371622\",\"name\":\"阳信县\"},{\"code\":\"371623\",\"name\":\"无棣县\"},{\"code\":\"371625\",\"name\":\"博兴县\"},{\"code\":\"371681\",\"name\":\"邹平市\"}]},{\"code\":\"371700\",\"name\":\"菏泽市\",\"children\":[{\"code\":\"371702\",\"name\":\"牡丹区\"},{\"code\":\"371703\",\"name\":\"定陶区\"},{\"code\":\"371721\",\"name\":\"曹县\"},{\"code\":\"371722\",\"name\":\"单县\"},{\"code\":\"371723\",\"name\":\"成武县\"},{\"code\":\"371724\",\"name\":\"巨野县\"},{\"code\":\"371725\",\"name\":\"郓城县\"},{\"code\":\"371726\",\"name\":\"鄄城县\"},{\"code\":\"371728\",\"name\":\"东明县\"},{\"code\":\"371771\",\"name\":\"菏泽经济技术开发区\"},{\"code\":\"371772\",\"name\":\"菏泽高新技术开发区\"}]}]},{\"code\":\"410000\",\"name\":\"河南省\",\"children\":[{\"code\":\"410100\",\"name\":\"郑州市\",\"children\":[{\"code\":\"410102\",\"name\":\"中原区\"},{\"code\":\"410103\",\"name\":\"二七区\"},{\"code\":\"410104\",\"name\":\"管城回族区\"},{\"code\":\"410105\",\"name\":\"金水区\"},{\"code\":\"410106\",\"name\":\"上街区\"},{\"code\":\"410108\",\"name\":\"惠济区\"},{\"code\":\"410122\",\"name\":\"中牟县\"},{\"code\":\"410171\",\"name\":\"郑州经济技术开发区\"},{\"code\":\"410172\",\"name\":\"郑州高新技术产业开发区\"},{\"code\":\"410173\",\"name\":\"郑州航空港经济综合实验区\"},{\"code\":\"410181\",\"name\":\"巩义市\"},{\"code\":\"410182\",\"name\":\"荥阳市\"},{\"code\":\"410183\",\"name\":\"新密市\"},{\"code\":\"410184\",\"name\":\"新郑市\"},{\"code\":\"410185\",\"name\":\"登封市\"}]},{\"code\":\"410200\",\"name\":\"开封市\",\"children\":[{\"code\":\"410202\",\"name\":\"龙亭区\"},{\"code\":\"410203\",\"name\":\"顺河回族区\"},{\"code\":\"410204\",\"name\":\"鼓楼区\"},{\"code\":\"410205\",\"name\":\"禹王台区\"},{\"code\":\"410212\",\"name\":\"祥符区\"},{\"code\":\"410221\",\"name\":\"杞县\"},{\"code\":\"410222\",\"name\":\"通许县\"},{\"code\":\"410223\",\"name\":\"尉氏县\"},{\"code\":\"410225\",\"name\":\"兰考县\"}]},{\"code\":\"410300\",\"name\":\"洛阳市\",\"children\":[{\"code\":\"410302\",\"name\":\"老城区\"},{\"code\":\"410303\",\"name\":\"西工区\"},{\"code\":\"410304\",\"name\":\"瀍河回族区\"},{\"code\":\"410305\",\"name\":\"涧西区\"},{\"code\":\"410307\",\"name\":\"偃师区\"},{\"code\":\"410308\",\"name\":\"孟津区\"},{\"code\":\"410311\",\"name\":\"洛龙区\"},{\"code\":\"410323\",\"name\":\"新安县\"},{\"code\":\"410324\",\"name\":\"栾川县\"},{\"code\":\"410325\",\"name\":\"嵩县\"},{\"code\":\"410326\",\"name\":\"汝阳县\"},{\"code\":\"410327\",\"name\":\"宜阳县\"},{\"code\":\"410328\",\"name\":\"洛宁县\"},{\"code\":\"410329\",\"name\":\"伊川县\"},{\"code\":\"410371\",\"name\":\"洛阳高新技术产业开发区\"}]},{\"code\":\"410400\",\"name\":\"平顶山市\",\"children\":[{\"code\":\"410402\",\"name\":\"新华区\"},{\"code\":\"410403\",\"name\":\"卫东区\"},{\"code\":\"410404\",\"name\":\"石龙区\"},{\"code\":\"410411\",\"name\":\"湛河区\"},{\"code\":\"410421\",\"name\":\"宝丰县\"},{\"code\":\"410422\",\"name\":\"叶县\"},{\"code\":\"410423\",\"name\":\"鲁山县\"},{\"code\":\"410425\",\"name\":\"郏县\"},{\"code\":\"410471\",\"name\":\"平顶山高新技术产业开发区\"},{\"code\":\"410472\",\"name\":\"平顶山市城乡一体化示范区\"},{\"code\":\"410481\",\"name\":\"舞钢市\"},{\"code\":\"410482\",\"name\":\"汝州市\"}]},{\"code\":\"410500\",\"name\":\"安阳市\",\"children\":[{\"code\":\"410502\",\"name\":\"文峰区\"},{\"code\":\"410503\",\"name\":\"北关区\"},{\"code\":\"410505\",\"name\":\"殷都区\"},{\"code\":\"410506\",\"name\":\"龙安区\"},{\"code\":\"410522\",\"name\":\"安阳县\"},{\"code\":\"410523\",\"name\":\"汤阴县\"},{\"code\":\"410526\",\"name\":\"滑县\"},{\"code\":\"410527\",\"name\":\"内黄县\"},{\"code\":\"410571\",\"name\":\"安阳高新技术产业开发区\"},{\"code\":\"410581\",\"name\":\"林州市\"}]},{\"code\":\"410600\",\"name\":\"鹤壁市\",\"children\":[{\"code\":\"410602\",\"name\":\"鹤山区\"},{\"code\":\"410603\",\"name\":\"山城区\"},{\"code\":\"410611\",\"name\":\"淇滨区\"},{\"code\":\"410621\",\"name\":\"浚县\"},{\"code\":\"410622\",\"name\":\"淇县\"},{\"code\":\"410671\",\"name\":\"鹤壁经济技术开发区\"}]},{\"code\":\"410700\",\"name\":\"新乡市\",\"children\":[{\"code\":\"410702\",\"name\":\"红旗区\"},{\"code\":\"410703\",\"name\":\"卫滨区\"},{\"code\":\"410704\",\"name\":\"凤泉区\"},{\"code\":\"410711\",\"name\":\"牧野区\"},{\"code\":\"410721\",\"name\":\"新乡县\"},{\"code\":\"410724\",\"name\":\"获嘉县\"},{\"code\":\"410725\",\"name\":\"原阳县\"},{\"code\":\"410726\",\"name\":\"延津县\"},{\"code\":\"410727\",\"name\":\"封丘县\"},{\"code\":\"410771\",\"name\":\"新乡高新技术产业开发区\"},{\"code\":\"410772\",\"name\":\"新乡经济技术开发区\"},{\"code\":\"410773\",\"name\":\"新乡市平原城乡一体化示范区\"},{\"code\":\"410781\",\"name\":\"卫辉市\"},{\"code\":\"410782\",\"name\":\"辉县市\"},{\"code\":\"410783\",\"name\":\"长垣市\"}]},{\"code\":\"410800\",\"name\":\"焦作市\",\"children\":[{\"code\":\"410802\",\"name\":\"解放区\"},{\"code\":\"410803\",\"name\":\"中站区\"},{\"code\":\"410804\",\"name\":\"马村区\"},{\"code\":\"410811\",\"name\":\"山阳区\"},{\"code\":\"410821\",\"name\":\"修武县\"},{\"code\":\"410822\",\"name\":\"博爱县\"},{\"code\":\"410823\",\"name\":\"武陟县\"},{\"code\":\"410825\",\"name\":\"温县\"},{\"code\":\"410871\",\"name\":\"焦作城乡一体化示范区\"},{\"code\":\"410882\",\"name\":\"沁阳市\"},{\"code\":\"410883\",\"name\":\"孟州市\"}]},{\"code\":\"410900\",\"name\":\"濮阳市\",\"children\":[{\"code\":\"410902\",\"name\":\"华龙区\"},{\"code\":\"410922\",\"name\":\"清丰县\"},{\"code\":\"410923\",\"name\":\"南乐县\"},{\"code\":\"410926\",\"name\":\"范县\"},{\"code\":\"410927\",\"name\":\"台前县\"},{\"code\":\"410928\",\"name\":\"濮阳县\"},{\"code\":\"410971\",\"name\":\"河南濮阳工业园区\"},{\"code\":\"410972\",\"name\":\"濮阳经济技术开发区\"}]},{\"code\":\"411000\",\"name\":\"许昌市\",\"children\":[{\"code\":\"411002\",\"name\":\"魏都区\"},{\"code\":\"411003\",\"name\":\"建安区\"},{\"code\":\"411024\",\"name\":\"鄢陵县\"},{\"code\":\"411025\",\"name\":\"襄城县\"},{\"code\":\"411071\",\"name\":\"许昌经济技术开发区\"},{\"code\":\"411081\",\"name\":\"禹州市\"},{\"code\":\"411082\",\"name\":\"长葛市\"}]},{\"code\":\"411100\",\"name\":\"漯河市\",\"children\":[{\"code\":\"411102\",\"name\":\"源汇区\"},{\"code\":\"411103\",\"name\":\"郾城区\"},{\"code\":\"411104\",\"name\":\"召陵区\"},{\"code\":\"411121\",\"name\":\"舞阳县\"},{\"code\":\"411122\",\"name\":\"临颍县\"},{\"code\":\"411171\",\"name\":\"漯河经济技术开发区\"}]},{\"code\":\"411200\",\"name\":\"三门峡市\",\"children\":[{\"code\":\"411202\",\"name\":\"湖滨区\"},{\"code\":\"411203\",\"name\":\"陕州区\"},{\"code\":\"411221\",\"name\":\"渑池县\"},{\"code\":\"411224\",\"name\":\"卢氏县\"},{\"code\":\"411271\",\"name\":\"河南三门峡经济开发区\"},{\"code\":\"411281\",\"name\":\"义马市\"},{\"code\":\"411282\",\"name\":\"灵宝市\"}]},{\"code\":\"411300\",\"name\":\"南阳市\",\"children\":[{\"code\":\"411302\",\"name\":\"宛城区\"},{\"code\":\"411303\",\"name\":\"卧龙区\"},{\"code\":\"411321\",\"name\":\"南召县\"},{\"code\":\"411322\",\"name\":\"方城县\"},{\"code\":\"411323\",\"name\":\"西峡县\"},{\"code\":\"411324\",\"name\":\"镇平县\"},{\"code\":\"411325\",\"name\":\"内乡县\"},{\"code\":\"411326\",\"name\":\"淅川县\"},{\"code\":\"411327\",\"name\":\"社旗县\"},{\"code\":\"411328\",\"name\":\"唐河县\"},{\"code\":\"411329\",\"name\":\"新野县\"},{\"code\":\"411330\",\"name\":\"桐柏县\"},{\"code\":\"411371\",\"name\":\"南阳高新技术产业开发区\"},{\"code\":\"411372\",\"name\":\"南阳市城乡一体化示范区\"},{\"code\":\"411381\",\"name\":\"邓州市\"}]},{\"code\":\"411400\",\"name\":\"商丘市\",\"children\":[{\"code\":\"411402\",\"name\":\"梁园区\"},{\"code\":\"411403\",\"name\":\"睢阳区\"},{\"code\":\"411421\",\"name\":\"民权县\"},{\"code\":\"411422\",\"name\":\"睢县\"},{\"code\":\"411423\",\"name\":\"宁陵县\"},{\"code\":\"411424\",\"name\":\"柘城县\"},{\"code\":\"411425\",\"name\":\"虞城县\"},{\"code\":\"411426\",\"name\":\"夏邑县\"},{\"code\":\"411471\",\"name\":\"豫东综合物流产业聚集区\"},{\"code\":\"411472\",\"name\":\"河南商丘经济开发区\"},{\"code\":\"411481\",\"name\":\"永城市\"}]},{\"code\":\"411500\",\"name\":\"信阳市\",\"children\":[{\"code\":\"411502\",\"name\":\"浉河区\"},{\"code\":\"411503\",\"name\":\"平桥区\"},{\"code\":\"411521\",\"name\":\"罗山县\"},{\"code\":\"411522\",\"name\":\"光山县\"},{\"code\":\"411523\",\"name\":\"新县\"},{\"code\":\"411524\",\"name\":\"商城县\"},{\"code\":\"411525\",\"name\":\"固始县\"},{\"code\":\"411526\",\"name\":\"潢川县\"},{\"code\":\"411527\",\"name\":\"淮滨县\"},{\"code\":\"411528\",\"name\":\"息县\"},{\"code\":\"411571\",\"name\":\"信阳高新技术产业开发区\"}]},{\"code\":\"411600\",\"name\":\"周口市\",\"children\":[{\"code\":\"411602\",\"name\":\"川汇区\"},{\"code\":\"411603\",\"name\":\"淮阳区\"},{\"code\":\"411621\",\"name\":\"扶沟县\"},{\"code\":\"411622\",\"name\":\"西华县\"},{\"code\":\"411623\",\"name\":\"商水县\"},{\"code\":\"411624\",\"name\":\"沈丘县\"},{\"code\":\"411625\",\"name\":\"郸城县\"},{\"code\":\"411627\",\"name\":\"太康县\"},{\"code\":\"411628\",\"name\":\"鹿邑县\"},{\"code\":\"411671\",\"name\":\"河南周口经济开发区\"},{\"code\":\"411681\",\"name\":\"项城市\"}]},{\"code\":\"411700\",\"name\":\"驻马店市\",\"children\":[{\"code\":\"411702\",\"name\":\"驿城区\"},{\"code\":\"411721\",\"name\":\"西平县\"},{\"code\":\"411722\",\"name\":\"上蔡县\"},{\"code\":\"411723\",\"name\":\"平舆县\"},{\"code\":\"411724\",\"name\":\"正阳县\"},{\"code\":\"411725\",\"name\":\"确山县\"},{\"code\":\"411726\",\"name\":\"泌阳县\"},{\"code\":\"411727\",\"name\":\"汝南县\"},{\"code\":\"411728\",\"name\":\"遂平县\"},{\"code\":\"411729\",\"name\":\"新蔡县\"},{\"code\":\"411771\",\"name\":\"河南驻马店经济开发区\"}]},{\"code\":\"419000\",\"name\":\"省直辖县级行政区划\",\"children\":[{\"code\":\"419001\",\"name\":\"济源市\"}]}]},{\"code\":\"420000\",\"name\":\"湖北省\",\"children\":[{\"code\":\"420100\",\"name\":\"武汉市\",\"children\":[{\"code\":\"420102\",\"name\":\"江岸区\"},{\"code\":\"420103\",\"name\":\"江汉区\"},{\"code\":\"420104\",\"name\":\"硚口区\"},{\"code\":\"420105\",\"name\":\"汉阳区\"},{\"code\":\"420106\",\"name\":\"武昌区\"},{\"code\":\"420107\",\"name\":\"青山区\"},{\"code\":\"420111\",\"name\":\"洪山区\"},{\"code\":\"420112\",\"name\":\"东西湖区\"},{\"code\":\"420113\",\"name\":\"汉南区\"},{\"code\":\"420114\",\"name\":\"蔡甸区\"},{\"code\":\"420115\",\"name\":\"江夏区\"},{\"code\":\"420116\",\"name\":\"黄陂区\"},{\"code\":\"420117\",\"name\":\"新洲区\"}]},{\"code\":\"420200\",\"name\":\"黄石市\",\"children\":[{\"code\":\"420202\",\"name\":\"黄石港区\"},{\"code\":\"420203\",\"name\":\"西塞山区\"},{\"code\":\"420204\",\"name\":\"下陆区\"},{\"code\":\"420205\",\"name\":\"铁山区\"},{\"code\":\"420222\",\"name\":\"阳新县\"},{\"code\":\"420281\",\"name\":\"大冶市\"}]},{\"code\":\"420300\",\"name\":\"十堰市\",\"children\":[{\"code\":\"420302\",\"name\":\"茅箭区\"},{\"code\":\"420303\",\"name\":\"张湾区\"},{\"code\":\"420304\",\"name\":\"郧阳区\"},{\"code\":\"420322\",\"name\":\"郧西县\"},{\"code\":\"420323\",\"name\":\"竹山县\"},{\"code\":\"420324\",\"name\":\"竹溪县\"},{\"code\":\"420325\",\"name\":\"房县\"},{\"code\":\"420381\",\"name\":\"丹江口市\"}]},{\"code\":\"420500\",\"name\":\"宜昌市\",\"children\":[{\"code\":\"420502\",\"name\":\"西陵区\"},{\"code\":\"420503\",\"name\":\"伍家岗区\"},{\"code\":\"420504\",\"name\":\"点军区\"},{\"code\":\"420505\",\"name\":\"猇亭区\"},{\"code\":\"420506\",\"name\":\"夷陵区\"},{\"code\":\"420525\",\"name\":\"远安县\"},{\"code\":\"420526\",\"name\":\"兴山县\"},{\"code\":\"420527\",\"name\":\"秭归县\"},{\"code\":\"420528\",\"name\":\"长阳土家族自治县\"},{\"code\":\"420529\",\"name\":\"五峰土家族自治县\"},{\"code\":\"420581\",\"name\":\"宜都市\"},{\"code\":\"420582\",\"name\":\"当阳市\"},{\"code\":\"420583\",\"name\":\"枝江市\"}]},{\"code\":\"420600\",\"name\":\"襄阳市\",\"children\":[{\"code\":\"420602\",\"name\":\"襄城区\"},{\"code\":\"420606\",\"name\":\"樊城区\"},{\"code\":\"420607\",\"name\":\"襄州区\"},{\"code\":\"420624\",\"name\":\"南漳县\"},{\"code\":\"420625\",\"name\":\"谷城县\"},{\"code\":\"420626\",\"name\":\"保康县\"},{\"code\":\"420682\",\"name\":\"老河口市\"},{\"code\":\"420683\",\"name\":\"枣阳市\"},{\"code\":\"420684\",\"name\":\"宜城市\"}]},{\"code\":\"420700\",\"name\":\"鄂州市\",\"children\":[{\"code\":\"420702\",\"name\":\"梁子湖区\"},{\"code\":\"420703\",\"name\":\"华容区\"},{\"code\":\"420704\",\"name\":\"鄂城区\"}]},{\"code\":\"420800\",\"name\":\"荆门市\",\"children\":[{\"code\":\"420802\",\"name\":\"东宝区\"},{\"code\":\"420804\",\"name\":\"掇刀区\"},{\"code\":\"420822\",\"name\":\"沙洋县\"},{\"code\":\"420881\",\"name\":\"钟祥市\"},{\"code\":\"420882\",\"name\":\"京山市\"}]},{\"code\":\"420900\",\"name\":\"孝感市\",\"children\":[{\"code\":\"420902\",\"name\":\"孝南区\"},{\"code\":\"420921\",\"name\":\"孝昌县\"},{\"code\":\"420922\",\"name\":\"大悟县\"},{\"code\":\"420923\",\"name\":\"云梦县\"},{\"code\":\"420981\",\"name\":\"应城市\"},{\"code\":\"420982\",\"name\":\"安陆市\"},{\"code\":\"420984\",\"name\":\"汉川市\"}]},{\"code\":\"421000\",\"name\":\"荆州市\",\"children\":[{\"code\":\"421002\",\"name\":\"沙市区\"},{\"code\":\"421003\",\"name\":\"荆州区\"},{\"code\":\"421022\",\"name\":\"公安县\"},{\"code\":\"421024\",\"name\":\"江陵县\"},{\"code\":\"421071\",\"name\":\"荆州经济技术开发区\"},{\"code\":\"421081\",\"name\":\"石首市\"},{\"code\":\"421083\",\"name\":\"洪湖市\"},{\"code\":\"421087\",\"name\":\"松滋市\"},{\"code\":\"421088\",\"name\":\"监利市\"}]},{\"code\":\"421100\",\"name\":\"黄冈市\",\"children\":[{\"code\":\"421102\",\"name\":\"黄州区\"},{\"code\":\"421121\",\"name\":\"团风县\"},{\"code\":\"421122\",\"name\":\"红安县\"},{\"code\":\"421123\",\"name\":\"罗田县\"},{\"code\":\"421124\",\"name\":\"英山县\"},{\"code\":\"421125\",\"name\":\"浠水县\"},{\"code\":\"421126\",\"name\":\"蕲春县\"},{\"code\":\"421127\",\"name\":\"黄梅县\"},{\"code\":\"421171\",\"name\":\"龙感湖管理区\"},{\"code\":\"421181\",\"name\":\"麻城市\"},{\"code\":\"421182\",\"name\":\"武穴市\"}]},{\"code\":\"421200\",\"name\":\"咸宁市\",\"children\":[{\"code\":\"421202\",\"name\":\"咸安区\"},{\"code\":\"421221\",\"name\":\"嘉鱼县\"},{\"code\":\"421222\",\"name\":\"通城县\"},{\"code\":\"421223\",\"name\":\"崇阳县\"},{\"code\":\"421224\",\"name\":\"通山县\"},{\"code\":\"421281\",\"name\":\"赤壁市\"}]},{\"code\":\"421300\",\"name\":\"随州市\",\"children\":[{\"code\":\"421303\",\"name\":\"曾都区\"},{\"code\":\"421321\",\"name\":\"随县\"},{\"code\":\"421381\",\"name\":\"广水市\"}]},{\"code\":\"422800\",\"name\":\"恩施土家族苗族自治州\",\"children\":[{\"code\":\"422801\",\"name\":\"恩施市\"},{\"code\":\"422802\",\"name\":\"利川市\"},{\"code\":\"422822\",\"name\":\"建始县\"},{\"code\":\"422823\",\"name\":\"巴东县\"},{\"code\":\"422825\",\"name\":\"宣恩县\"},{\"code\":\"422826\",\"name\":\"咸丰县\"},{\"code\":\"422827\",\"name\":\"来凤县\"},{\"code\":\"422828\",\"name\":\"鹤峰县\"}]},{\"code\":\"429000\",\"name\":\"省直辖县级行政区划\",\"children\":[{\"code\":\"429004\",\"name\":\"仙桃市\"},{\"code\":\"429005\",\"name\":\"潜江市\"},{\"code\":\"429006\",\"name\":\"天门市\"},{\"code\":\"429021\",\"name\":\"神农架林区\"}]}]},{\"code\":\"430000\",\"name\":\"湖南省\",\"children\":[{\"code\":\"430100\",\"name\":\"长沙市\",\"children\":[{\"code\":\"430102\",\"name\":\"芙蓉区\"},{\"code\":\"430103\",\"name\":\"天心区\"},{\"code\":\"430104\",\"name\":\"岳麓区\"},{\"code\":\"430105\",\"name\":\"开福区\"},{\"code\":\"430111\",\"name\":\"雨花区\"},{\"code\":\"430112\",\"name\":\"望城区\"},{\"code\":\"430121\",\"name\":\"长沙县\"},{\"code\":\"430181\",\"name\":\"浏阳市\"},{\"code\":\"430182\",\"name\":\"宁乡市\"}]},{\"code\":\"430200\",\"name\":\"株洲市\",\"children\":[{\"code\":\"430202\",\"name\":\"荷塘区\"},{\"code\":\"430203\",\"name\":\"芦淞区\"},{\"code\":\"430204\",\"name\":\"石峰区\"},{\"code\":\"430211\",\"name\":\"天元区\"},{\"code\":\"430212\",\"name\":\"渌口区\"},{\"code\":\"430223\",\"name\":\"攸县\"},{\"code\":\"430224\",\"name\":\"茶陵县\"},{\"code\":\"430225\",\"name\":\"炎陵县\"},{\"code\":\"430281\",\"name\":\"醴陵市\"}]},{\"code\":\"430300\",\"name\":\"湘潭市\",\"children\":[{\"code\":\"430302\",\"name\":\"雨湖区\"},{\"code\":\"430304\",\"name\":\"岳塘区\"},{\"code\":\"430321\",\"name\":\"湘潭县\"},{\"code\":\"430371\",\"name\":\"湖南湘潭高新技术产业园区\"},{\"code\":\"430372\",\"name\":\"湘潭昭山示范区\"},{\"code\":\"430373\",\"name\":\"湘潭九华示范区\"},{\"code\":\"430381\",\"name\":\"湘乡市\"},{\"code\":\"430382\",\"name\":\"韶山市\"}]},{\"code\":\"430400\",\"name\":\"衡阳市\",\"children\":[{\"code\":\"430405\",\"name\":\"珠晖区\"},{\"code\":\"430406\",\"name\":\"雁峰区\"},{\"code\":\"430407\",\"name\":\"石鼓区\"},{\"code\":\"430408\",\"name\":\"蒸湘区\"},{\"code\":\"430412\",\"name\":\"南岳区\"},{\"code\":\"430421\",\"name\":\"衡阳县\"},{\"code\":\"430422\",\"name\":\"衡南县\"},{\"code\":\"430423\",\"name\":\"衡山县\"},{\"code\":\"430424\",\"name\":\"衡东县\"},{\"code\":\"430426\",\"name\":\"祁东县\"},{\"code\":\"430471\",\"name\":\"衡阳综合保税区\"},{\"code\":\"430472\",\"name\":\"湖南衡阳高新技术产业园区\"},{\"code\":\"430473\",\"name\":\"湖南衡阳松木经济开发区\"},{\"code\":\"430481\",\"name\":\"耒阳市\"},{\"code\":\"430482\",\"name\":\"常宁市\"}]},{\"code\":\"430500\",\"name\":\"邵阳市\",\"children\":[{\"code\":\"430502\",\"name\":\"双清区\"},{\"code\":\"430503\",\"name\":\"大祥区\"},{\"code\":\"430511\",\"name\":\"北塔区\"},{\"code\":\"430522\",\"name\":\"新邵县\"},{\"code\":\"430523\",\"name\":\"邵阳县\"},{\"code\":\"430524\",\"name\":\"隆回县\"},{\"code\":\"430525\",\"name\":\"洞口县\"},{\"code\":\"430527\",\"name\":\"绥宁县\"},{\"code\":\"430528\",\"name\":\"新宁县\"},{\"code\":\"430529\",\"name\":\"城步苗族自治县\"},{\"code\":\"430581\",\"name\":\"武冈市\"},{\"code\":\"430582\",\"name\":\"邵东市\"}]},{\"code\":\"430600\",\"name\":\"岳阳市\",\"children\":[{\"code\":\"430602\",\"name\":\"岳阳楼区\"},{\"code\":\"430603\",\"name\":\"云溪区\"},{\"code\":\"430611\",\"name\":\"君山区\"},{\"code\":\"430621\",\"name\":\"岳阳县\"},{\"code\":\"430623\",\"name\":\"华容县\"},{\"code\":\"430624\",\"name\":\"湘阴县\"},{\"code\":\"430626\",\"name\":\"平江县\"},{\"code\":\"430671\",\"name\":\"岳阳市屈原管理区\"},{\"code\":\"430681\",\"name\":\"汨罗市\"},{\"code\":\"430682\",\"name\":\"临湘市\"}]},{\"code\":\"430700\",\"name\":\"常德市\",\"children\":[{\"code\":\"430702\",\"name\":\"武陵区\"},{\"code\":\"430703\",\"name\":\"鼎城区\"},{\"code\":\"430721\",\"name\":\"安乡县\"},{\"code\":\"430722\",\"name\":\"汉寿县\"},{\"code\":\"430723\",\"name\":\"澧县\"},{\"code\":\"430724\",\"name\":\"临澧县\"},{\"code\":\"430725\",\"name\":\"桃源县\"},{\"code\":\"430726\",\"name\":\"石门县\"},{\"code\":\"430771\",\"name\":\"常德市西洞庭管理区\"},{\"code\":\"430781\",\"name\":\"津市市\"}]},{\"code\":\"430800\",\"name\":\"张家界市\",\"children\":[{\"code\":\"430802\",\"name\":\"永定区\"},{\"code\":\"430811\",\"name\":\"武陵源区\"},{\"code\":\"430821\",\"name\":\"慈利县\"},{\"code\":\"430822\",\"name\":\"桑植县\"}]},{\"code\":\"430900\",\"name\":\"益阳市\",\"children\":[{\"code\":\"430902\",\"name\":\"资阳区\"},{\"code\":\"430903\",\"name\":\"赫山区\"},{\"code\":\"430921\",\"name\":\"南县\"},{\"code\":\"430922\",\"name\":\"桃江县\"},{\"code\":\"430923\",\"name\":\"安化县\"},{\"code\":\"430971\",\"name\":\"益阳市大通湖管理区\"},{\"code\":\"430972\",\"name\":\"湖南益阳高新技术产业园区\"},{\"code\":\"430981\",\"name\":\"沅江市\"}]},{\"code\":\"431000\",\"name\":\"郴州市\",\"children\":[{\"code\":\"431002\",\"name\":\"北湖区\"},{\"code\":\"431003\",\"name\":\"苏仙区\"},{\"code\":\"431021\",\"name\":\"桂阳县\"},{\"code\":\"431022\",\"name\":\"宜章县\"},{\"code\":\"431023\",\"name\":\"永兴县\"},{\"code\":\"431024\",\"name\":\"嘉禾县\"},{\"code\":\"431025\",\"name\":\"临武县\"},{\"code\":\"431026\",\"name\":\"汝城县\"},{\"code\":\"431027\",\"name\":\"桂东县\"},{\"code\":\"431028\",\"name\":\"安仁县\"},{\"code\":\"431081\",\"name\":\"资兴市\"}]},{\"code\":\"431100\",\"name\":\"永州市\",\"children\":[{\"code\":\"431102\",\"name\":\"零陵区\"},{\"code\":\"431103\",\"name\":\"冷水滩区\"},{\"code\":\"431122\",\"name\":\"东安县\"},{\"code\":\"431123\",\"name\":\"双牌县\"},{\"code\":\"431124\",\"name\":\"道县\"},{\"code\":\"431125\",\"name\":\"江永县\"},{\"code\":\"431126\",\"name\":\"宁远县\"},{\"code\":\"431127\",\"name\":\"蓝山县\"},{\"code\":\"431128\",\"name\":\"新田县\"},{\"code\":\"431129\",\"name\":\"江华瑶族自治县\"},{\"code\":\"431171\",\"name\":\"永州经济技术开发区\"},{\"code\":\"431173\",\"name\":\"永州市回龙圩管理区\"},{\"code\":\"431181\",\"name\":\"祁阳市\"}]},{\"code\":\"431200\",\"name\":\"怀化市\",\"children\":[{\"code\":\"431202\",\"name\":\"鹤城区\"},{\"code\":\"431221\",\"name\":\"中方县\"},{\"code\":\"431222\",\"name\":\"沅陵县\"},{\"code\":\"431223\",\"name\":\"辰溪县\"},{\"code\":\"431224\",\"name\":\"溆浦县\"},{\"code\":\"431225\",\"name\":\"会同县\"},{\"code\":\"431226\",\"name\":\"麻阳苗族自治县\"},{\"code\":\"431227\",\"name\":\"新晃侗族自治县\"},{\"code\":\"431228\",\"name\":\"芷江侗族自治县\"},{\"code\":\"431229\",\"name\":\"靖州苗族侗族自治县\"},{\"code\":\"431230\",\"name\":\"通道侗族自治县\"},{\"code\":\"431271\",\"name\":\"怀化市洪江管理区\"},{\"code\":\"431281\",\"name\":\"洪江市\"}]},{\"code\":\"431300\",\"name\":\"娄底市\",\"children\":[{\"code\":\"431302\",\"name\":\"娄星区\"},{\"code\":\"431321\",\"name\":\"双峰县\"},{\"code\":\"431322\",\"name\":\"新化县\"},{\"code\":\"431381\",\"name\":\"冷水江市\"},{\"code\":\"431382\",\"name\":\"涟源市\"}]},{\"code\":\"433100\",\"name\":\"湘西土家族苗族自治州\",\"children\":[{\"code\":\"433101\",\"name\":\"吉首市\"},{\"code\":\"433122\",\"name\":\"泸溪县\"},{\"code\":\"433123\",\"name\":\"凤凰县\"},{\"code\":\"433124\",\"name\":\"花垣县\"},{\"code\":\"433125\",\"name\":\"保靖县\"},{\"code\":\"433126\",\"name\":\"古丈县\"},{\"code\":\"433127\",\"name\":\"永顺县\"},{\"code\":\"433130\",\"name\":\"龙山县\"}]}]},{\"code\":\"450000\",\"name\":\"广西壮族自治区\",\"children\":[{\"code\":\"450100\",\"name\":\"南宁市\",\"children\":[{\"code\":\"450102\",\"name\":\"兴宁区\"},{\"code\":\"450103\",\"name\":\"青秀区\"},{\"code\":\"450105\",\"name\":\"江南区\"},{\"code\":\"450107\",\"name\":\"西乡塘区\"},{\"code\":\"450108\",\"name\":\"良庆区\"},{\"code\":\"450109\",\"name\":\"邕宁区\"},{\"code\":\"450110\",\"name\":\"武鸣区\"},{\"code\":\"450123\",\"name\":\"隆安县\"},{\"code\":\"450124\",\"name\":\"马山县\"},{\"code\":\"450125\",\"name\":\"上林县\"},{\"code\":\"450126\",\"name\":\"宾阳县\"},{\"code\":\"450181\",\"name\":\"横州市\"}]},{\"code\":\"450200\",\"name\":\"柳州市\",\"children\":[{\"code\":\"450202\",\"name\":\"城中区\"},{\"code\":\"450203\",\"name\":\"鱼峰区\"},{\"code\":\"450204\",\"name\":\"柳南区\"},{\"code\":\"450205\",\"name\":\"柳北区\"},{\"code\":\"450206\",\"name\":\"柳江区\"},{\"code\":\"450222\",\"name\":\"柳城县\"},{\"code\":\"450223\",\"name\":\"鹿寨县\"},{\"code\":\"450224\",\"name\":\"融安县\"},{\"code\":\"450225\",\"name\":\"融水苗族自治县\"},{\"code\":\"450226\",\"name\":\"三江侗族自治县\"}]},{\"code\":\"450300\",\"name\":\"桂林市\",\"children\":[{\"code\":\"450302\",\"name\":\"秀峰区\"},{\"code\":\"450303\",\"name\":\"叠彩区\"},{\"code\":\"450304\",\"name\":\"象山区\"},{\"code\":\"450305\",\"name\":\"七星区\"},{\"code\":\"450311\",\"name\":\"雁山区\"},{\"code\":\"450312\",\"name\":\"临桂区\"},{\"code\":\"450321\",\"name\":\"阳朔县\"},{\"code\":\"450323\",\"name\":\"灵川县\"},{\"code\":\"450324\",\"name\":\"全州县\"},{\"code\":\"450325\",\"name\":\"兴安县\"},{\"code\":\"450326\",\"name\":\"永福县\"},{\"code\":\"450327\",\"name\":\"灌阳县\"},{\"code\":\"450328\",\"name\":\"龙胜各族自治县\"},{\"code\":\"450329\",\"name\":\"资源县\"},{\"code\":\"450330\",\"name\":\"平乐县\"},{\"code\":\"450332\",\"name\":\"恭城瑶族自治县\"},{\"code\":\"450381\",\"name\":\"荔浦市\"}]},{\"code\":\"450400\",\"name\":\"梧州市\",\"children\":[{\"code\":\"450403\",\"name\":\"万秀区\"},{\"code\":\"450405\",\"name\":\"长洲区\"},{\"code\":\"450406\",\"name\":\"龙圩区\"},{\"code\":\"450421\",\"name\":\"苍梧县\"},{\"code\":\"450422\",\"name\":\"藤县\"},{\"code\":\"450423\",\"name\":\"蒙山县\"},{\"code\":\"450481\",\"name\":\"岑溪市\"}]},{\"code\":\"450500\",\"name\":\"北海市\",\"children\":[{\"code\":\"450502\",\"name\":\"海城区\"},{\"code\":\"450503\",\"name\":\"银海区\"},{\"code\":\"450512\",\"name\":\"铁山港区\"},{\"code\":\"450521\",\"name\":\"合浦县\"}]},{\"code\":\"450600\",\"name\":\"防城港市\",\"children\":[{\"code\":\"450602\",\"name\":\"港口区\"},{\"code\":\"450603\",\"name\":\"防城区\"},{\"code\":\"450621\",\"name\":\"上思县\"},{\"code\":\"450681\",\"name\":\"东兴市\"}]},{\"code\":\"450700\",\"name\":\"钦州市\",\"children\":[{\"code\":\"450702\",\"name\":\"钦南区\"},{\"code\":\"450703\",\"name\":\"钦北区\"},{\"code\":\"450721\",\"name\":\"灵山县\"},{\"code\":\"450722\",\"name\":\"浦北县\"}]},{\"code\":\"450800\",\"name\":\"贵港市\",\"children\":[{\"code\":\"450802\",\"name\":\"港北区\"},{\"code\":\"450803\",\"name\":\"港南区\"},{\"code\":\"450804\",\"name\":\"覃塘区\"},{\"code\":\"450821\",\"name\":\"平南县\"},{\"code\":\"450881\",\"name\":\"桂平市\"}]},{\"code\":\"450900\",\"name\":\"玉林市\",\"children\":[{\"code\":\"450902\",\"name\":\"玉州区\"},{\"code\":\"450903\",\"name\":\"福绵区\"},{\"code\":\"450921\",\"name\":\"容县\"},{\"code\":\"450922\",\"name\":\"陆川县\"},{\"code\":\"450923\",\"name\":\"博白县\"},{\"code\":\"450924\",\"name\":\"兴业县\"},{\"code\":\"450981\",\"name\":\"北流市\"}]},{\"code\":\"451000\",\"name\":\"百色市\",\"children\":[{\"code\":\"451002\",\"name\":\"右江区\"},{\"code\":\"451003\",\"name\":\"田阳区\"},{\"code\":\"451022\",\"name\":\"田东县\"},{\"code\":\"451024\",\"name\":\"德保县\"},{\"code\":\"451026\",\"name\":\"那坡县\"},{\"code\":\"451027\",\"name\":\"凌云县\"},{\"code\":\"451028\",\"name\":\"乐业县\"},{\"code\":\"451029\",\"name\":\"田林县\"},{\"code\":\"451030\",\"name\":\"西林县\"},{\"code\":\"451031\",\"name\":\"隆林各族自治县\"},{\"code\":\"451081\",\"name\":\"靖西市\"},{\"code\":\"451082\",\"name\":\"平果市\"}]},{\"code\":\"451100\",\"name\":\"贺州市\",\"children\":[{\"code\":\"451102\",\"name\":\"八步区\"},{\"code\":\"451103\",\"name\":\"平桂区\"},{\"code\":\"451121\",\"name\":\"昭平县\"},{\"code\":\"451122\",\"name\":\"钟山县\"},{\"code\":\"451123\",\"name\":\"富川瑶族自治县\"}]},{\"code\":\"451200\",\"name\":\"河池市\",\"children\":[{\"code\":\"451202\",\"name\":\"金城江区\"},{\"code\":\"451203\",\"name\":\"宜州区\"},{\"code\":\"451221\",\"name\":\"南丹县\"},{\"code\":\"451222\",\"name\":\"天峨县\"},{\"code\":\"451223\",\"name\":\"凤山县\"},{\"code\":\"451224\",\"name\":\"东兰县\"},{\"code\":\"451225\",\"name\":\"罗城仫佬族自治县\"},{\"code\":\"451226\",\"name\":\"环江毛南族自治县\"},{\"code\":\"451227\",\"name\":\"巴马瑶族自治县\"},{\"code\":\"451228\",\"name\":\"都安瑶族自治县\"},{\"code\":\"451229\",\"name\":\"大化瑶族自治县\"}]},{\"code\":\"451300\",\"name\":\"来宾市\",\"children\":[{\"code\":\"451302\",\"name\":\"兴宾区\"},{\"code\":\"451321\",\"name\":\"忻城县\"},{\"code\":\"451322\",\"name\":\"象州县\"},{\"code\":\"451323\",\"name\":\"武宣县\"},{\"code\":\"451324\",\"name\":\"金秀瑶族自治县\"},{\"code\":\"451381\",\"name\":\"合山市\"}]},{\"code\":\"451400\",\"name\":\"崇左市\",\"children\":[{\"code\":\"451402\",\"name\":\"江州区\"},{\"code\":\"451421\",\"name\":\"扶绥县\"},{\"code\":\"451422\",\"name\":\"宁明县\"},{\"code\":\"451423\",\"name\":\"龙州县\"},{\"code\":\"451424\",\"name\":\"大新县\"},{\"code\":\"451425\",\"name\":\"天等县\"},{\"code\":\"451481\",\"name\":\"凭祥市\"}]}]},{\"code\":\"460000\",\"name\":\"海南省\",\"children\":[{\"code\":\"460100\",\"name\":\"海口市\",\"children\":[{\"code\":\"460105\",\"name\":\"秀英区\"},{\"code\":\"460106\",\"name\":\"龙华区\"},{\"code\":\"460107\",\"name\":\"琼山区\"},{\"code\":\"460108\",\"name\":\"美兰区\"}]},{\"code\":\"460200\",\"name\":\"三亚市\",\"children\":[{\"code\":\"460202\",\"name\":\"海棠区\"},{\"code\":\"460203\",\"name\":\"吉阳区\"},{\"code\":\"460204\",\"name\":\"天涯区\"},{\"code\":\"460205\",\"name\":\"崖州区\"}]},{\"code\":\"460300\",\"name\":\"三沙市\",\"children\":[{\"code\":\"460321\",\"name\":\"西沙群岛\"},{\"code\":\"460322\",\"name\":\"南沙群岛\"},{\"code\":\"460323\",\"name\":\"中沙群岛的岛礁及其海域\"}]},{\"code\":\"460400\",\"name\":\"儋州市\",\"children\":[{\"code\":\"460400100\",\"name\":\"那大镇\"},{\"code\":\"460400101\",\"name\":\"和庆镇\"},{\"code\":\"460400102\",\"name\":\"南丰镇\"},{\"code\":\"460400103\",\"name\":\"大成镇\"},{\"code\":\"460400104\",\"name\":\"雅星镇\"},{\"code\":\"460400105\",\"name\":\"兰洋镇\"},{\"code\":\"460400106\",\"name\":\"光村镇\"},{\"code\":\"460400107\",\"name\":\"木棠镇\"},{\"code\":\"460400108\",\"name\":\"海头镇\"},{\"code\":\"460400109\",\"name\":\"峨蔓镇\"},{\"code\":\"460400111\",\"name\":\"王五镇\"},{\"code\":\"460400112\",\"name\":\"白马井镇\"},{\"code\":\"460400113\",\"name\":\"中和镇\"},{\"code\":\"460400114\",\"name\":\"排浦镇\"},{\"code\":\"460400115\",\"name\":\"东成镇\"},{\"code\":\"460400116\",\"name\":\"新州镇\"},{\"code\":\"460400499\",\"name\":\"洋浦经济开发区\"},{\"code\":\"460400500\",\"name\":\"华南热作学院\"}]},{\"code\":\"469000\",\"name\":\"省直辖县级行政区划\",\"children\":[{\"code\":\"469001\",\"name\":\"五指山市\"},{\"code\":\"469002\",\"name\":\"琼海市\"},{\"code\":\"469005\",\"name\":\"文昌市\"},{\"code\":\"469006\",\"name\":\"万宁市\"},{\"code\":\"469007\",\"name\":\"东方市\"},{\"code\":\"469021\",\"name\":\"定安县\"},{\"code\":\"469022\",\"name\":\"屯昌县\"},{\"code\":\"469023\",\"name\":\"澄迈县\"},{\"code\":\"469024\",\"name\":\"临高县\"},{\"code\":\"469025\",\"name\":\"白沙黎族自治县\"},{\"code\":\"469026\",\"name\":\"昌江黎族自治县\"},{\"code\":\"469027\",\"name\":\"乐东黎族自治县\"},{\"code\":\"469028\",\"name\":\"陵水黎族自治县\"},{\"code\":\"469029\",\"name\":\"保亭黎族苗族自治县\"},{\"code\":\"469030\",\"name\":\"琼中黎族苗族自治县\"}]}]},{\"code\":\"500000\",\"name\":\"重庆市\",\"children\":[{\"code\":\"500100\",\"name\":\"市辖区\",\"children\":[{\"code\":\"500101\",\"name\":\"万州区\"},{\"code\":\"500102\",\"name\":\"涪陵区\"},{\"code\":\"500103\",\"name\":\"渝中区\"},{\"code\":\"500104\",\"name\":\"大渡口区\"},{\"code\":\"500105\",\"name\":\"江北区\"},{\"code\":\"500106\",\"name\":\"沙坪坝区\"},{\"code\":\"500107\",\"name\":\"九龙坡区\"},{\"code\":\"500108\",\"name\":\"南岸区\"},{\"code\":\"500109\",\"name\":\"北碚区\"},{\"code\":\"500110\",\"name\":\"綦江区\"},{\"code\":\"500111\",\"name\":\"大足区\"},{\"code\":\"500112\",\"name\":\"渝北区\"},{\"code\":\"500113\",\"name\":\"巴南区\"},{\"code\":\"500114\",\"name\":\"黔江区\"},{\"code\":\"500115\",\"name\":\"长寿区\"},{\"code\":\"500116\",\"name\":\"江津区\"},{\"code\":\"500117\",\"name\":\"合川区\"},{\"code\":\"500118\",\"name\":\"永川区\"},{\"code\":\"500119\",\"name\":\"南川区\"},{\"code\":\"500120\",\"name\":\"璧山区\"},{\"code\":\"500151\",\"name\":\"铜梁区\"},{\"code\":\"500152\",\"name\":\"潼南区\"},{\"code\":\"500153\",\"name\":\"荣昌区\"},{\"code\":\"500154\",\"name\":\"开州区\"},{\"code\":\"500155\",\"name\":\"梁平区\"},{\"code\":\"500156\",\"name\":\"武隆区\"}]},{\"code\":\"500200\",\"name\":\"县\",\"children\":[{\"code\":\"500229\",\"name\":\"城口县\"},{\"code\":\"500230\",\"name\":\"丰都县\"},{\"code\":\"500231\",\"name\":\"垫江县\"},{\"code\":\"500233\",\"name\":\"忠县\"},{\"code\":\"500235\",\"name\":\"云阳县\"},{\"code\":\"500236\",\"name\":\"奉节县\"},{\"code\":\"500237\",\"name\":\"巫山县\"},{\"code\":\"500238\",\"name\":\"巫溪县\"},{\"code\":\"500240\",\"name\":\"石柱土家族自治县\"},{\"code\":\"500241\",\"name\":\"秀山土家族苗族自治县\"},{\"code\":\"500242\",\"name\":\"酉阳土家族苗族自治县\"},{\"code\":\"500243\",\"name\":\"彭水苗族土家族自治县\"}]}]},{\"code\":\"510000\",\"name\":\"四川省\",\"children\":[{\"code\":\"510100\",\"name\":\"成都市\",\"children\":[{\"code\":\"510104\",\"name\":\"锦江区\"},{\"code\":\"510105\",\"name\":\"青羊区\"},{\"code\":\"510106\",\"name\":\"金牛区\"},{\"code\":\"510107\",\"name\":\"武侯区\"},{\"code\":\"510108\",\"name\":\"成华区\"},{\"code\":\"510112\",\"name\":\"龙泉驿区\"},{\"code\":\"510113\",\"name\":\"青白江区\"},{\"code\":\"510114\",\"name\":\"新都区\"},{\"code\":\"510115\",\"name\":\"温江区\"},{\"code\":\"510116\",\"name\":\"双流区\"},{\"code\":\"510117\",\"name\":\"郫都区\"},{\"code\":\"510118\",\"name\":\"新津区\"},{\"code\":\"510121\",\"name\":\"金堂县\"},{\"code\":\"510129\",\"name\":\"大邑县\"},{\"code\":\"510131\",\"name\":\"蒲江县\"},{\"code\":\"510181\",\"name\":\"都江堰市\"},{\"code\":\"510182\",\"name\":\"彭州市\"},{\"code\":\"510183\",\"name\":\"邛崃市\"},{\"code\":\"510184\",\"name\":\"崇州市\"},{\"code\":\"510185\",\"name\":\"简阳市\"}]},{\"code\":\"510300\",\"name\":\"自贡市\",\"children\":[{\"code\":\"510302\",\"name\":\"自流井区\"},{\"code\":\"510303\",\"name\":\"贡井区\"},{\"code\":\"510304\",\"name\":\"大安区\"},{\"code\":\"510311\",\"name\":\"沿滩区\"},{\"code\":\"510321\",\"name\":\"荣县\"},{\"code\":\"510322\",\"name\":\"富顺县\"}]},{\"code\":\"510400\",\"name\":\"攀枝花市\",\"children\":[{\"code\":\"510402\",\"name\":\"东区\"},{\"code\":\"510403\",\"name\":\"西区\"},{\"code\":\"510411\",\"name\":\"仁和区\"},{\"code\":\"510421\",\"name\":\"米易县\"},{\"code\":\"510422\",\"name\":\"盐边县\"}]},{\"code\":\"510500\",\"name\":\"泸州市\",\"children\":[{\"code\":\"510502\",\"name\":\"江阳区\"},{\"code\":\"510503\",\"name\":\"纳溪区\"},{\"code\":\"510504\",\"name\":\"龙马潭区\"},{\"code\":\"510521\",\"name\":\"泸县\"},{\"code\":\"510522\",\"name\":\"合江县\"},{\"code\":\"510524\",\"name\":\"叙永县\"},{\"code\":\"510525\",\"name\":\"古蔺县\"}]},{\"code\":\"510600\",\"name\":\"德阳市\",\"children\":[{\"code\":\"510603\",\"name\":\"旌阳区\"},{\"code\":\"510604\",\"name\":\"罗江区\"},{\"code\":\"510623\",\"name\":\"中江县\"},{\"code\":\"510681\",\"name\":\"广汉市\"},{\"code\":\"510682\",\"name\":\"什邡市\"},{\"code\":\"510683\",\"name\":\"绵竹市\"}]},{\"code\":\"510700\",\"name\":\"绵阳市\",\"children\":[{\"code\":\"510703\",\"name\":\"涪城区\"},{\"code\":\"510704\",\"name\":\"游仙区\"},{\"code\":\"510705\",\"name\":\"安州区\"},{\"code\":\"510722\",\"name\":\"三台县\"},{\"code\":\"510723\",\"name\":\"盐亭县\"},{\"code\":\"510725\",\"name\":\"梓潼县\"},{\"code\":\"510726\",\"name\":\"北川羌族自治县\"},{\"code\":\"510727\",\"name\":\"平武县\"},{\"code\":\"510781\",\"name\":\"江油市\"}]},{\"code\":\"510800\",\"name\":\"广元市\",\"children\":[{\"code\":\"510802\",\"name\":\"利州区\"},{\"code\":\"510811\",\"name\":\"昭化区\"},{\"code\":\"510812\",\"name\":\"朝天区\"},{\"code\":\"510821\",\"name\":\"旺苍县\"},{\"code\":\"510822\",\"name\":\"青川县\"},{\"code\":\"510823\",\"name\":\"剑阁县\"},{\"code\":\"510824\",\"name\":\"苍溪县\"}]},{\"code\":\"510900\",\"name\":\"遂宁市\",\"children\":[{\"code\":\"510903\",\"name\":\"船山区\"},{\"code\":\"510904\",\"name\":\"安居区\"},{\"code\":\"510921\",\"name\":\"蓬溪县\"},{\"code\":\"510923\",\"name\":\"大英县\"},{\"code\":\"510981\",\"name\":\"射洪市\"}]},{\"code\":\"511000\",\"name\":\"内江市\",\"children\":[{\"code\":\"511002\",\"name\":\"市中区\"},{\"code\":\"511011\",\"name\":\"东兴区\"},{\"code\":\"511024\",\"name\":\"威远县\"},{\"code\":\"511025\",\"name\":\"资中县\"},{\"code\":\"511083\",\"name\":\"隆昌市\"}]},{\"code\":\"511100\",\"name\":\"乐山市\",\"children\":[{\"code\":\"511102\",\"name\":\"市中区\"},{\"code\":\"511111\",\"name\":\"沙湾区\"},{\"code\":\"511112\",\"name\":\"五通桥区\"},{\"code\":\"511113\",\"name\":\"金口河区\"},{\"code\":\"511123\",\"name\":\"犍为县\"},{\"code\":\"511124\",\"name\":\"井研县\"},{\"code\":\"511126\",\"name\":\"夹江县\"},{\"code\":\"511129\",\"name\":\"沐川县\"},{\"code\":\"511132\",\"name\":\"峨边彝族自治县\"},{\"code\":\"511133\",\"name\":\"马边彝族自治县\"},{\"code\":\"511181\",\"name\":\"峨眉山市\"}]},{\"code\":\"511300\",\"name\":\"南充市\",\"children\":[{\"code\":\"511302\",\"name\":\"顺庆区\"},{\"code\":\"511303\",\"name\":\"高坪区\"},{\"code\":\"511304\",\"name\":\"嘉陵区\"},{\"code\":\"511321\",\"name\":\"南部县\"},{\"code\":\"511322\",\"name\":\"营山县\"},{\"code\":\"511323\",\"name\":\"蓬安县\"},{\"code\":\"511324\",\"name\":\"仪陇县\"},{\"code\":\"511325\",\"name\":\"西充县\"},{\"code\":\"511381\",\"name\":\"阆中市\"}]},{\"code\":\"511400\",\"name\":\"眉山市\",\"children\":[{\"code\":\"511402\",\"name\":\"东坡区\"},{\"code\":\"511403\",\"name\":\"彭山区\"},{\"code\":\"511421\",\"name\":\"仁寿县\"},{\"code\":\"511423\",\"name\":\"洪雅县\"},{\"code\":\"511424\",\"name\":\"丹棱县\"},{\"code\":\"511425\",\"name\":\"青神县\"}]},{\"code\":\"511500\",\"name\":\"宜宾市\",\"children\":[{\"code\":\"511502\",\"name\":\"翠屏区\"},{\"code\":\"511503\",\"name\":\"南溪区\"},{\"code\":\"511504\",\"name\":\"叙州区\"},{\"code\":\"511523\",\"name\":\"江安县\"},{\"code\":\"511524\",\"name\":\"长宁县\"},{\"code\":\"511525\",\"name\":\"高县\"},{\"code\":\"511526\",\"name\":\"珙县\"},{\"code\":\"511527\",\"name\":\"筠连县\"},{\"code\":\"511528\",\"name\":\"兴文县\"},{\"code\":\"511529\",\"name\":\"屏山县\"}]},{\"code\":\"511600\",\"name\":\"广安市\",\"children\":[{\"code\":\"511602\",\"name\":\"广安区\"},{\"code\":\"511603\",\"name\":\"前锋区\"},{\"code\":\"511621\",\"name\":\"岳池县\"},{\"code\":\"511622\",\"name\":\"武胜县\"},{\"code\":\"511623\",\"name\":\"邻水县\"},{\"code\":\"511681\",\"name\":\"华蓥市\"}]},{\"code\":\"511700\",\"name\":\"达州市\",\"children\":[{\"code\":\"511702\",\"name\":\"通川区\"},{\"code\":\"511703\",\"name\":\"达川区\"},{\"code\":\"511722\",\"name\":\"宣汉县\"},{\"code\":\"511723\",\"name\":\"开江县\"},{\"code\":\"511724\",\"name\":\"大竹县\"},{\"code\":\"511725\",\"name\":\"渠县\"},{\"code\":\"511781\",\"name\":\"万源市\"}]},{\"code\":\"511800\",\"name\":\"雅安市\",\"children\":[{\"code\":\"511802\",\"name\":\"雨城区\"},{\"code\":\"511803\",\"name\":\"名山区\"},{\"code\":\"511822\",\"name\":\"荥经县\"},{\"code\":\"511823\",\"name\":\"汉源县\"},{\"code\":\"511824\",\"name\":\"石棉县\"},{\"code\":\"511825\",\"name\":\"天全县\"},{\"code\":\"511826\",\"name\":\"芦山县\"},{\"code\":\"511827\",\"name\":\"宝兴县\"}]},{\"code\":\"511900\",\"name\":\"巴中市\",\"children\":[{\"code\":\"511902\",\"name\":\"巴州区\"},{\"code\":\"511903\",\"name\":\"恩阳区\"},{\"code\":\"511921\",\"name\":\"通江县\"},{\"code\":\"511922\",\"name\":\"南江县\"},{\"code\":\"511923\",\"name\":\"平昌县\"}]},{\"code\":\"512000\",\"name\":\"资阳市\",\"children\":[{\"code\":\"512002\",\"name\":\"雁江区\"},{\"code\":\"512021\",\"name\":\"安岳县\"},{\"code\":\"512022\",\"name\":\"乐至县\"}]},{\"code\":\"513200\",\"name\":\"阿坝藏族羌族自治州\",\"children\":[{\"code\":\"513201\",\"name\":\"马尔康市\"},{\"code\":\"513221\",\"name\":\"汶川县\"},{\"code\":\"513222\",\"name\":\"理县\"},{\"code\":\"513223\",\"name\":\"茂县\"},{\"code\":\"513224\",\"name\":\"松潘县\"},{\"code\":\"513225\",\"name\":\"九寨沟县\"},{\"code\":\"513226\",\"name\":\"金川县\"},{\"code\":\"513227\",\"name\":\"小金县\"},{\"code\":\"513228\",\"name\":\"黑水县\"},{\"code\":\"513230\",\"name\":\"壤塘县\"},{\"code\":\"513231\",\"name\":\"阿坝县\"},{\"code\":\"513232\",\"name\":\"若尔盖县\"},{\"code\":\"513233\",\"name\":\"红原县\"}]},{\"code\":\"513300\",\"name\":\"甘孜藏族自治州\",\"children\":[{\"code\":\"513301\",\"name\":\"康定市\"},{\"code\":\"513322\",\"name\":\"泸定县\"},{\"code\":\"513323\",\"name\":\"丹巴县\"},{\"code\":\"513324\",\"name\":\"九龙县\"},{\"code\":\"513325\",\"name\":\"雅江县\"},{\"code\":\"513326\",\"name\":\"道孚县\"},{\"code\":\"513327\",\"name\":\"炉霍县\"},{\"code\":\"513328\",\"name\":\"甘孜县\"},{\"code\":\"513329\",\"name\":\"新龙县\"},{\"code\":\"513330\",\"name\":\"德格县\"},{\"code\":\"513331\",\"name\":\"白玉县\"},{\"code\":\"513332\",\"name\":\"石渠县\"},{\"code\":\"513333\",\"name\":\"色达县\"},{\"code\":\"513334\",\"name\":\"理塘县\"},{\"code\":\"513335\",\"name\":\"巴塘县\"},{\"code\":\"513336\",\"name\":\"乡城县\"},{\"code\":\"513337\",\"name\":\"稻城县\"},{\"code\":\"513338\",\"name\":\"得荣县\"}]},{\"code\":\"513400\",\"name\":\"凉山彝族自治州\",\"children\":[{\"code\":\"513401\",\"name\":\"西昌市\"},{\"code\":\"513402\",\"name\":\"会理市\"},{\"code\":\"513422\",\"name\":\"木里藏族自治县\"},{\"code\":\"513423\",\"name\":\"盐源县\"},{\"code\":\"513424\",\"name\":\"德昌县\"},{\"code\":\"513426\",\"name\":\"会东县\"},{\"code\":\"513427\",\"name\":\"宁南县\"},{\"code\":\"513428\",\"name\":\"普格县\"},{\"code\":\"513429\",\"name\":\"布拖县\"},{\"code\":\"513430\",\"name\":\"金阳县\"},{\"code\":\"513431\",\"name\":\"昭觉县\"},{\"code\":\"513432\",\"name\":\"喜德县\"},{\"code\":\"513433\",\"name\":\"冕宁县\"},{\"code\":\"513434\",\"name\":\"越西县\"},{\"code\":\"513435\",\"name\":\"甘洛县\"},{\"code\":\"513436\",\"name\":\"美姑县\"},{\"code\":\"513437\",\"name\":\"雷波县\"}]}]},{\"code\":\"520000\",\"name\":\"贵州省\",\"children\":[{\"code\":\"520100\",\"name\":\"贵阳市\",\"children\":[{\"code\":\"520102\",\"name\":\"南明区\"},{\"code\":\"520103\",\"name\":\"云岩区\"},{\"code\":\"520111\",\"name\":\"花溪区\"},{\"code\":\"520112\",\"name\":\"乌当区\"},{\"code\":\"520113\",\"name\":\"白云区\"},{\"code\":\"520115\",\"name\":\"观山湖区\"},{\"code\":\"520121\",\"name\":\"开阳县\"},{\"code\":\"520122\",\"name\":\"息烽县\"},{\"code\":\"520123\",\"name\":\"修文县\"},{\"code\":\"520181\",\"name\":\"清镇市\"}]},{\"code\":\"520200\",\"name\":\"六盘水市\",\"children\":[{\"code\":\"520201\",\"name\":\"钟山区\"},{\"code\":\"520203\",\"name\":\"六枝特区\"},{\"code\":\"520204\",\"name\":\"水城区\"},{\"code\":\"520281\",\"name\":\"盘州市\"}]},{\"code\":\"520300\",\"name\":\"遵义市\",\"children\":[{\"code\":\"520302\",\"name\":\"红花岗区\"},{\"code\":\"520303\",\"name\":\"汇川区\"},{\"code\":\"520304\",\"name\":\"播州区\"},{\"code\":\"520322\",\"name\":\"桐梓县\"},{\"code\":\"520323\",\"name\":\"绥阳县\"},{\"code\":\"520324\",\"name\":\"正安县\"},{\"code\":\"520325\",\"name\":\"道真仡佬族苗族自治县\"},{\"code\":\"520326\",\"name\":\"务川仡佬族苗族自治县\"},{\"code\":\"520327\",\"name\":\"凤冈县\"},{\"code\":\"520328\",\"name\":\"湄潭县\"},{\"code\":\"520329\",\"name\":\"余庆县\"},{\"code\":\"520330\",\"name\":\"习水县\"},{\"code\":\"520381\",\"name\":\"赤水市\"},{\"code\":\"520382\",\"name\":\"仁怀市\"}]},{\"code\":\"520400\",\"name\":\"安顺市\",\"children\":[{\"code\":\"520402\",\"name\":\"西秀区\"},{\"code\":\"520403\",\"name\":\"平坝区\"},{\"code\":\"520422\",\"name\":\"普定县\"},{\"code\":\"520423\",\"name\":\"镇宁布依族苗族自治县\"},{\"code\":\"520424\",\"name\":\"关岭布依族苗族自治县\"},{\"code\":\"520425\",\"name\":\"紫云苗族布依族自治县\"}]},{\"code\":\"520500\",\"name\":\"毕节市\",\"children\":[{\"code\":\"520502\",\"name\":\"七星关区\"},{\"code\":\"520521\",\"name\":\"大方县\"},{\"code\":\"520523\",\"name\":\"金沙县\"},{\"code\":\"520524\",\"name\":\"织金县\"},{\"code\":\"520525\",\"name\":\"纳雍县\"},{\"code\":\"520526\",\"name\":\"威宁彝族回族苗族自治县\"},{\"code\":\"520527\",\"name\":\"赫章县\"},{\"code\":\"520581\",\"name\":\"黔西市\"}]},{\"code\":\"520600\",\"name\":\"铜仁市\",\"children\":[{\"code\":\"520602\",\"name\":\"碧江区\"},{\"code\":\"520603\",\"name\":\"万山区\"},{\"code\":\"520621\",\"name\":\"江口县\"},{\"code\":\"520622\",\"name\":\"玉屏侗族自治县\"},{\"code\":\"520623\",\"name\":\"石阡县\"},{\"code\":\"520624\",\"name\":\"思南县\"},{\"code\":\"520625\",\"name\":\"印江土家族苗族自治县\"},{\"code\":\"520626\",\"name\":\"德江县\"},{\"code\":\"520627\",\"name\":\"沿河土家族自治县\"},{\"code\":\"520628\",\"name\":\"松桃苗族自治县\"}]},{\"code\":\"522300\",\"name\":\"黔西南布依族苗族自治州\",\"children\":[{\"code\":\"522301\",\"name\":\"兴义市\"},{\"code\":\"522302\",\"name\":\"兴仁市\"},{\"code\":\"522323\",\"name\":\"普安县\"},{\"code\":\"522324\",\"name\":\"晴隆县\"},{\"code\":\"522325\",\"name\":\"贞丰县\"},{\"code\":\"522326\",\"name\":\"望谟县\"},{\"code\":\"522327\",\"name\":\"册亨县\"},{\"code\":\"522328\",\"name\":\"安龙县\"}]},{\"code\":\"522600\",\"name\":\"黔东南苗族侗族自治州\",\"children\":[{\"code\":\"522601\",\"name\":\"凯里市\"},{\"code\":\"522622\",\"name\":\"黄平县\"},{\"code\":\"522623\",\"name\":\"施秉县\"},{\"code\":\"522624\",\"name\":\"三穗县\"},{\"code\":\"522625\",\"name\":\"镇远县\"},{\"code\":\"522626\",\"name\":\"岑巩县\"},{\"code\":\"522627\",\"name\":\"天柱县\"},{\"code\":\"522628\",\"name\":\"锦屏县\"},{\"code\":\"522629\",\"name\":\"剑河县\"},{\"code\":\"522630\",\"name\":\"台江县\"},{\"code\":\"522631\",\"name\":\"黎平县\"},{\"code\":\"522632\",\"name\":\"榕江县\"},{\"code\":\"522633\",\"name\":\"从江县\"},{\"code\":\"522634\",\"name\":\"雷山县\"},{\"code\":\"522635\",\"name\":\"麻江县\"},{\"code\":\"522636\",\"name\":\"丹寨县\"}]},{\"code\":\"522700\",\"name\":\"黔南布依族苗族自治州\",\"children\":[{\"code\":\"522701\",\"name\":\"都匀市\"},{\"code\":\"522702\",\"name\":\"福泉市\"},{\"code\":\"522722\",\"name\":\"荔波县\"},{\"code\":\"522723\",\"name\":\"贵定县\"},{\"code\":\"522725\",\"name\":\"瓮安县\"},{\"code\":\"522726\",\"name\":\"独山县\"},{\"code\":\"522727\",\"name\":\"平塘县\"},{\"code\":\"522728\",\"name\":\"罗甸县\"},{\"code\":\"522729\",\"name\":\"长顺县\"},{\"code\":\"522730\",\"name\":\"龙里县\"},{\"code\":\"522731\",\"name\":\"惠水县\"},{\"code\":\"522732\",\"name\":\"三都水族自治县\"}]}]},{\"code\":\"530000\",\"name\":\"云南省\",\"children\":[{\"code\":\"530100\",\"name\":\"昆明市\",\"children\":[{\"code\":\"530102\",\"name\":\"五华区\"},{\"code\":\"530103\",\"name\":\"盘龙区\"},{\"code\":\"530111\",\"name\":\"官渡区\"},{\"code\":\"530112\",\"name\":\"西山区\"},{\"code\":\"530113\",\"name\":\"东川区\"},{\"code\":\"530114\",\"name\":\"呈贡区\"},{\"code\":\"530115\",\"name\":\"晋宁区\"},{\"code\":\"530124\",\"name\":\"富民县\"},{\"code\":\"530125\",\"name\":\"宜良县\"},{\"code\":\"530126\",\"name\":\"石林彝族自治县\"},{\"code\":\"530127\",\"name\":\"嵩明县\"},{\"code\":\"530128\",\"name\":\"禄劝彝族苗族自治县\"},{\"code\":\"530129\",\"name\":\"寻甸回族彝族自治县\"},{\"code\":\"530181\",\"name\":\"安宁市\"}]},{\"code\":\"530300\",\"name\":\"曲靖市\",\"children\":[{\"code\":\"530302\",\"name\":\"麒麟区\"},{\"code\":\"530303\",\"name\":\"沾益区\"},{\"code\":\"530304\",\"name\":\"马龙区\"},{\"code\":\"530322\",\"name\":\"陆良县\"},{\"code\":\"530323\",\"name\":\"师宗县\"},{\"code\":\"530324\",\"name\":\"罗平县\"},{\"code\":\"530325\",\"name\":\"富源县\"},{\"code\":\"530326\",\"name\":\"会泽县\"},{\"code\":\"530381\",\"name\":\"宣威市\"}]},{\"code\":\"530400\",\"name\":\"玉溪市\",\"children\":[{\"code\":\"530402\",\"name\":\"红塔区\"},{\"code\":\"530403\",\"name\":\"江川区\"},{\"code\":\"530423\",\"name\":\"通海县\"},{\"code\":\"530424\",\"name\":\"华宁县\"},{\"code\":\"530425\",\"name\":\"易门县\"},{\"code\":\"530426\",\"name\":\"峨山彝族自治县\"},{\"code\":\"530427\",\"name\":\"新平彝族傣族自治县\"},{\"code\":\"530428\",\"name\":\"元江哈尼族彝族傣族自治县\"},{\"code\":\"530481\",\"name\":\"澄江市\"}]},{\"code\":\"530500\",\"name\":\"保山市\",\"children\":[{\"code\":\"530502\",\"name\":\"隆阳区\"},{\"code\":\"530521\",\"name\":\"施甸县\"},{\"code\":\"530523\",\"name\":\"龙陵县\"},{\"code\":\"530524\",\"name\":\"昌宁县\"},{\"code\":\"530581\",\"name\":\"腾冲市\"}]},{\"code\":\"530600\",\"name\":\"昭通市\",\"children\":[{\"code\":\"530602\",\"name\":\"昭阳区\"},{\"code\":\"530621\",\"name\":\"鲁甸县\"},{\"code\":\"530622\",\"name\":\"巧家县\"},{\"code\":\"530623\",\"name\":\"盐津县\"},{\"code\":\"530624\",\"name\":\"大关县\"},{\"code\":\"530625\",\"name\":\"永善县\"},{\"code\":\"530626\",\"name\":\"绥江县\"},{\"code\":\"530627\",\"name\":\"镇雄县\"},{\"code\":\"530628\",\"name\":\"彝良县\"},{\"code\":\"530629\",\"name\":\"威信县\"},{\"code\":\"530681\",\"name\":\"水富市\"}]},{\"code\":\"530700\",\"name\":\"丽江市\",\"children\":[{\"code\":\"530702\",\"name\":\"古城区\"},{\"code\":\"530721\",\"name\":\"玉龙纳西族自治县\"},{\"code\":\"530722\",\"name\":\"永胜县\"},{\"code\":\"530723\",\"name\":\"华坪县\"},{\"code\":\"530724\",\"name\":\"宁蒗彝族自治县\"}]},{\"code\":\"530800\",\"name\":\"普洱市\",\"children\":[{\"code\":\"530802\",\"name\":\"思茅区\"},{\"code\":\"530821\",\"name\":\"宁洱哈尼族彝族自治县\"},{\"code\":\"530822\",\"name\":\"墨江哈尼族自治县\"},{\"code\":\"530823\",\"name\":\"景东彝族自治县\"},{\"code\":\"530824\",\"name\":\"景谷傣族彝族自治县\"},{\"code\":\"530825\",\"name\":\"镇沅彝族哈尼族拉祜族自治县\"},{\"code\":\"530826\",\"name\":\"江城哈尼族彝族自治县\"},{\"code\":\"530827\",\"name\":\"孟连傣族拉祜族佤族自治县\"},{\"code\":\"530828\",\"name\":\"澜沧拉祜族自治县\"},{\"code\":\"530829\",\"name\":\"西盟佤族自治县\"}]},{\"code\":\"530900\",\"name\":\"临沧市\",\"children\":[{\"code\":\"530902\",\"name\":\"临翔区\"},{\"code\":\"530921\",\"name\":\"凤庆县\"},{\"code\":\"530922\",\"name\":\"云县\"},{\"code\":\"530923\",\"name\":\"永德县\"},{\"code\":\"530924\",\"name\":\"镇康县\"},{\"code\":\"530925\",\"name\":\"双江拉祜族佤族布朗族傣族自治县\"},{\"code\":\"530926\",\"name\":\"耿马傣族佤族自治县\"},{\"code\":\"530927\",\"name\":\"沧源佤族自治县\"}]},{\"code\":\"532300\",\"name\":\"楚雄彝族自治州\",\"children\":[{\"code\":\"532301\",\"name\":\"楚雄市\"},{\"code\":\"532302\",\"name\":\"禄丰市\"},{\"code\":\"532322\",\"name\":\"双柏县\"},{\"code\":\"532323\",\"name\":\"牟定县\"},{\"code\":\"532324\",\"name\":\"南华县\"},{\"code\":\"532325\",\"name\":\"姚安县\"},{\"code\":\"532326\",\"name\":\"大姚县\"},{\"code\":\"532327\",\"name\":\"永仁县\"},{\"code\":\"532328\",\"name\":\"元谋县\"},{\"code\":\"532329\",\"name\":\"武定县\"}]},{\"code\":\"532500\",\"name\":\"红河哈尼族彝族自治州\",\"children\":[{\"code\":\"532501\",\"name\":\"个旧市\"},{\"code\":\"532502\",\"name\":\"开远市\"},{\"code\":\"532503\",\"name\":\"蒙自市\"},{\"code\":\"532504\",\"name\":\"弥勒市\"},{\"code\":\"532523\",\"name\":\"屏边苗族自治县\"},{\"code\":\"532524\",\"name\":\"建水县\"},{\"code\":\"532525\",\"name\":\"石屏县\"},{\"code\":\"532527\",\"name\":\"泸西县\"},{\"code\":\"532528\",\"name\":\"元阳县\"},{\"code\":\"532529\",\"name\":\"红河县\"},{\"code\":\"532530\",\"name\":\"金平苗族瑶族傣族自治县\"},{\"code\":\"532531\",\"name\":\"绿春县\"},{\"code\":\"532532\",\"name\":\"河口瑶族自治县\"}]},{\"code\":\"532600\",\"name\":\"文山壮族苗族自治州\",\"children\":[{\"code\":\"532601\",\"name\":\"文山市\"},{\"code\":\"532622\",\"name\":\"砚山县\"},{\"code\":\"532623\",\"name\":\"西畴县\"},{\"code\":\"532624\",\"name\":\"麻栗坡县\"},{\"code\":\"532625\",\"name\":\"马关县\"},{\"code\":\"532626\",\"name\":\"丘北县\"},{\"code\":\"532627\",\"name\":\"广南县\"},{\"code\":\"532628\",\"name\":\"富宁县\"}]},{\"code\":\"532800\",\"name\":\"西双版纳傣族自治州\",\"children\":[{\"code\":\"532801\",\"name\":\"景洪市\"},{\"code\":\"532822\",\"name\":\"勐海县\"},{\"code\":\"532823\",\"name\":\"勐腊县\"}]},{\"code\":\"532900\",\"name\":\"大理白族自治州\",\"children\":[{\"code\":\"532901\",\"name\":\"大理市\"},{\"code\":\"532922\",\"name\":\"漾濞彝族自治县\"},{\"code\":\"532923\",\"name\":\"祥云县\"},{\"code\":\"532924\",\"name\":\"宾川县\"},{\"code\":\"532925\",\"name\":\"弥渡县\"},{\"code\":\"532926\",\"name\":\"南涧彝族自治县\"},{\"code\":\"532927\",\"name\":\"巍山彝族回族自治县\"},{\"code\":\"532928\",\"name\":\"永平县\"},{\"code\":\"532929\",\"name\":\"云龙县\"},{\"code\":\"532930\",\"name\":\"洱源县\"},{\"code\":\"532931\",\"name\":\"剑川县\"},{\"code\":\"532932\",\"name\":\"鹤庆县\"}]},{\"code\":\"533100\",\"name\":\"德宏傣族景颇族自治州\",\"children\":[{\"code\":\"533102\",\"name\":\"瑞丽市\"},{\"code\":\"533103\",\"name\":\"芒市\"},{\"code\":\"533122\",\"name\":\"梁河县\"},{\"code\":\"533123\",\"name\":\"盈江县\"},{\"code\":\"533124\",\"name\":\"陇川县\"}]},{\"code\":\"533300\",\"name\":\"怒江傈僳族自治州\",\"children\":[{\"code\":\"533301\",\"name\":\"泸水市\"},{\"code\":\"533323\",\"name\":\"福贡县\"},{\"code\":\"533324\",\"name\":\"贡山独龙族怒族自治县\"},{\"code\":\"533325\",\"name\":\"兰坪白族普米族自治县\"}]},{\"code\":\"533400\",\"name\":\"迪庆藏族自治州\",\"children\":[{\"code\":\"533401\",\"name\":\"香格里拉市\"},{\"code\":\"533422\",\"name\":\"德钦县\"},{\"code\":\"533423\",\"name\":\"维西傈僳族自治县\"}]}]},{\"code\":\"540000\",\"name\":\"西藏自治区\",\"children\":[{\"code\":\"540100\",\"name\":\"拉萨市\",\"children\":[{\"code\":\"540102\",\"name\":\"城关区\"},{\"code\":\"540103\",\"name\":\"堆龙德庆区\"},{\"code\":\"540104\",\"name\":\"达孜区\"},{\"code\":\"540121\",\"name\":\"林周县\"},{\"code\":\"540122\",\"name\":\"当雄县\"},{\"code\":\"540123\",\"name\":\"尼木县\"},{\"code\":\"540124\",\"name\":\"曲水县\"},{\"code\":\"540127\",\"name\":\"墨竹工卡县\"},{\"code\":\"540171\",\"name\":\"格尔木藏青工业园区\"},{\"code\":\"540172\",\"name\":\"拉萨经济技术开发区\"},{\"code\":\"540173\",\"name\":\"西藏文化旅游创意园区\"},{\"code\":\"540174\",\"name\":\"达孜工业园区\"}]},{\"code\":\"540200\",\"name\":\"日喀则市\",\"children\":[{\"code\":\"540202\",\"name\":\"桑珠孜区\"},{\"code\":\"540221\",\"name\":\"南木林县\"},{\"code\":\"540222\",\"name\":\"江孜县\"},{\"code\":\"540223\",\"name\":\"定日县\"},{\"code\":\"540224\",\"name\":\"萨迦县\"},{\"code\":\"540225\",\"name\":\"拉孜县\"},{\"code\":\"540226\",\"name\":\"昂仁县\"},{\"code\":\"540227\",\"name\":\"谢通门县\"},{\"code\":\"540228\",\"name\":\"白朗县\"},{\"code\":\"540229\",\"name\":\"仁布县\"},{\"code\":\"540230\",\"name\":\"康马县\"},{\"code\":\"540231\",\"name\":\"定结县\"},{\"code\":\"540232\",\"name\":\"仲巴县\"},{\"code\":\"540233\",\"name\":\"亚东县\"},{\"code\":\"540234\",\"name\":\"吉隆县\"},{\"code\":\"540235\",\"name\":\"聂拉木县\"},{\"code\":\"540236\",\"name\":\"萨嘎县\"},{\"code\":\"540237\",\"name\":\"岗巴县\"}]},{\"code\":\"540300\",\"name\":\"昌都市\",\"children\":[{\"code\":\"540302\",\"name\":\"卡若区\"},{\"code\":\"540321\",\"name\":\"江达县\"},{\"code\":\"540322\",\"name\":\"贡觉县\"},{\"code\":\"540323\",\"name\":\"类乌齐县\"},{\"code\":\"540324\",\"name\":\"丁青县\"},{\"code\":\"540325\",\"name\":\"察雅县\"},{\"code\":\"540326\",\"name\":\"八宿县\"},{\"code\":\"540327\",\"name\":\"左贡县\"},{\"code\":\"540328\",\"name\":\"芒康县\"},{\"code\":\"540329\",\"name\":\"洛隆县\"},{\"code\":\"540330\",\"name\":\"边坝县\"}]},{\"code\":\"540400\",\"name\":\"林芝市\",\"children\":[{\"code\":\"540402\",\"name\":\"巴宜区\"},{\"code\":\"540421\",\"name\":\"工布江达县\"},{\"code\":\"540422\",\"name\":\"米林县\"},{\"code\":\"540423\",\"name\":\"墨脱县\"},{\"code\":\"540424\",\"name\":\"波密县\"},{\"code\":\"540425\",\"name\":\"察隅县\"},{\"code\":\"540426\",\"name\":\"朗县\"}]},{\"code\":\"540500\",\"name\":\"山南市\",\"children\":[{\"code\":\"540502\",\"name\":\"乃东区\"},{\"code\":\"540521\",\"name\":\"扎囊县\"},{\"code\":\"540522\",\"name\":\"贡嘎县\"},{\"code\":\"540523\",\"name\":\"桑日县\"},{\"code\":\"540524\",\"name\":\"琼结县\"},{\"code\":\"540525\",\"name\":\"曲松县\"},{\"code\":\"540526\",\"name\":\"措美县\"},{\"code\":\"540527\",\"name\":\"洛扎县\"},{\"code\":\"540528\",\"name\":\"加查县\"},{\"code\":\"540529\",\"name\":\"隆子县\"},{\"code\":\"540530\",\"name\":\"错那县\"},{\"code\":\"540531\",\"name\":\"浪卡子县\"}]},{\"code\":\"540600\",\"name\":\"那曲市\",\"children\":[{\"code\":\"540602\",\"name\":\"色尼区\"},{\"code\":\"540621\",\"name\":\"嘉黎县\"},{\"code\":\"540622\",\"name\":\"比如县\"},{\"code\":\"540623\",\"name\":\"聂荣县\"},{\"code\":\"540624\",\"name\":\"安多县\"},{\"code\":\"540625\",\"name\":\"申扎县\"},{\"code\":\"540626\",\"name\":\"索县\"},{\"code\":\"540627\",\"name\":\"班戈县\"},{\"code\":\"540628\",\"name\":\"巴青县\"},{\"code\":\"540629\",\"name\":\"尼玛县\"},{\"code\":\"540630\",\"name\":\"双湖县\"}]},{\"code\":\"542500\",\"name\":\"阿里地区\",\"children\":[{\"code\":\"542521\",\"name\":\"普兰县\"},{\"code\":\"542522\",\"name\":\"札达县\"},{\"code\":\"542523\",\"name\":\"噶尔县\"},{\"code\":\"542524\",\"name\":\"日土县\"},{\"code\":\"542525\",\"name\":\"革吉县\"},{\"code\":\"542526\",\"name\":\"改则县\"},{\"code\":\"542527\",\"name\":\"措勤县\"}]}]},{\"code\":\"610000\",\"name\":\"陕西省\",\"children\":[{\"code\":\"610100\",\"name\":\"西安市\",\"children\":[{\"code\":\"610102\",\"name\":\"新城区\"},{\"code\":\"610103\",\"name\":\"碑林区\"},{\"code\":\"610104\",\"name\":\"莲湖区\"},{\"code\":\"610111\",\"name\":\"灞桥区\"},{\"code\":\"610112\",\"name\":\"未央区\"},{\"code\":\"610113\",\"name\":\"雁塔区\"},{\"code\":\"610114\",\"name\":\"阎良区\"},{\"code\":\"610115\",\"name\":\"临潼区\"},{\"code\":\"610116\",\"name\":\"长安区\"},{\"code\":\"610117\",\"name\":\"高陵区\"},{\"code\":\"610118\",\"name\":\"鄠邑区\"},{\"code\":\"610122\",\"name\":\"蓝田县\"},{\"code\":\"610124\",\"name\":\"周至县\"}]},{\"code\":\"610200\",\"name\":\"铜川市\",\"children\":[{\"code\":\"610202\",\"name\":\"王益区\"},{\"code\":\"610203\",\"name\":\"印台区\"},{\"code\":\"610204\",\"name\":\"耀州区\"},{\"code\":\"610222\",\"name\":\"宜君县\"}]},{\"code\":\"610300\",\"name\":\"宝鸡市\",\"children\":[{\"code\":\"610302\",\"name\":\"渭滨区\"},{\"code\":\"610303\",\"name\":\"金台区\"},{\"code\":\"610304\",\"name\":\"陈仓区\"},{\"code\":\"610305\",\"name\":\"凤翔区\"},{\"code\":\"610323\",\"name\":\"岐山县\"},{\"code\":\"610324\",\"name\":\"扶风县\"},{\"code\":\"610326\",\"name\":\"眉县\"},{\"code\":\"610327\",\"name\":\"陇县\"},{\"code\":\"610328\",\"name\":\"千阳县\"},{\"code\":\"610329\",\"name\":\"麟游县\"},{\"code\":\"610330\",\"name\":\"凤县\"},{\"code\":\"610331\",\"name\":\"太白县\"}]},{\"code\":\"610400\",\"name\":\"咸阳市\",\"children\":[{\"code\":\"610402\",\"name\":\"秦都区\"},{\"code\":\"610403\",\"name\":\"杨陵区\"},{\"code\":\"610404\",\"name\":\"渭城区\"},{\"code\":\"610422\",\"name\":\"三原县\"},{\"code\":\"610423\",\"name\":\"泾阳县\"},{\"code\":\"610424\",\"name\":\"乾县\"},{\"code\":\"610425\",\"name\":\"礼泉县\"},{\"code\":\"610426\",\"name\":\"永寿县\"},{\"code\":\"610428\",\"name\":\"长武县\"},{\"code\":\"610429\",\"name\":\"旬邑县\"},{\"code\":\"610430\",\"name\":\"淳化县\"},{\"code\":\"610431\",\"name\":\"武功县\"},{\"code\":\"610481\",\"name\":\"兴平市\"},{\"code\":\"610482\",\"name\":\"彬州市\"}]},{\"code\":\"610500\",\"name\":\"渭南市\",\"children\":[{\"code\":\"610502\",\"name\":\"临渭区\"},{\"code\":\"610503\",\"name\":\"华州区\"},{\"code\":\"610522\",\"name\":\"潼关县\"},{\"code\":\"610523\",\"name\":\"大荔县\"},{\"code\":\"610524\",\"name\":\"合阳县\"},{\"code\":\"610525\",\"name\":\"澄城县\"},{\"code\":\"610526\",\"name\":\"蒲城县\"},{\"code\":\"610527\",\"name\":\"白水县\"},{\"code\":\"610528\",\"name\":\"富平县\"},{\"code\":\"610581\",\"name\":\"韩城市\"},{\"code\":\"610582\",\"name\":\"华阴市\"}]},{\"code\":\"610600\",\"name\":\"延安市\",\"children\":[{\"code\":\"610602\",\"name\":\"宝塔区\"},{\"code\":\"610603\",\"name\":\"安塞区\"},{\"code\":\"610621\",\"name\":\"延长县\"},{\"code\":\"610622\",\"name\":\"延川县\"},{\"code\":\"610625\",\"name\":\"志丹县\"},{\"code\":\"610626\",\"name\":\"吴起县\"},{\"code\":\"610627\",\"name\":\"甘泉县\"},{\"code\":\"610628\",\"name\":\"富县\"},{\"code\":\"610629\",\"name\":\"洛川县\"},{\"code\":\"610630\",\"name\":\"宜川县\"},{\"code\":\"610631\",\"name\":\"黄龙县\"},{\"code\":\"610632\",\"name\":\"黄陵县\"},{\"code\":\"610681\",\"name\":\"子长市\"}]},{\"code\":\"610700\",\"name\":\"汉中市\",\"children\":[{\"code\":\"610702\",\"name\":\"汉台区\"},{\"code\":\"610703\",\"name\":\"南郑区\"},{\"code\":\"610722\",\"name\":\"城固县\"},{\"code\":\"610723\",\"name\":\"洋县\"},{\"code\":\"610724\",\"name\":\"西乡县\"},{\"code\":\"610725\",\"name\":\"勉县\"},{\"code\":\"610726\",\"name\":\"宁强县\"},{\"code\":\"610727\",\"name\":\"略阳县\"},{\"code\":\"610728\",\"name\":\"镇巴县\"},{\"code\":\"610729\",\"name\":\"留坝县\"},{\"code\":\"610730\",\"name\":\"佛坪县\"}]},{\"code\":\"610800\",\"name\":\"榆林市\",\"children\":[{\"code\":\"610802\",\"name\":\"榆阳区\"},{\"code\":\"610803\",\"name\":\"横山区\"},{\"code\":\"610822\",\"name\":\"府谷县\"},{\"code\":\"610824\",\"name\":\"靖边县\"},{\"code\":\"610825\",\"name\":\"定边县\"},{\"code\":\"610826\",\"name\":\"绥德县\"},{\"code\":\"610827\",\"name\":\"米脂县\"},{\"code\":\"610828\",\"name\":\"佳县\"},{\"code\":\"610829\",\"name\":\"吴堡县\"},{\"code\":\"610830\",\"name\":\"清涧县\"},{\"code\":\"610831\",\"name\":\"子洲县\"},{\"code\":\"610881\",\"name\":\"神木市\"}]},{\"code\":\"610900\",\"name\":\"安康市\",\"children\":[{\"code\":\"610902\",\"name\":\"汉滨区\"},{\"code\":\"610921\",\"name\":\"汉阴县\"},{\"code\":\"610922\",\"name\":\"石泉县\"},{\"code\":\"610923\",\"name\":\"宁陕县\"},{\"code\":\"610924\",\"name\":\"紫阳县\"},{\"code\":\"610925\",\"name\":\"岚皋县\"},{\"code\":\"610926\",\"name\":\"平利县\"},{\"code\":\"610927\",\"name\":\"镇坪县\"},{\"code\":\"610929\",\"name\":\"白河县\"},{\"code\":\"610981\",\"name\":\"旬阳市\"}]},{\"code\":\"611000\",\"name\":\"商洛市\",\"children\":[{\"code\":\"611002\",\"name\":\"商州区\"},{\"code\":\"611021\",\"name\":\"洛南县\"},{\"code\":\"611022\",\"name\":\"丹凤县\"},{\"code\":\"611023\",\"name\":\"商南县\"},{\"code\":\"611024\",\"name\":\"山阳县\"},{\"code\":\"611025\",\"name\":\"镇安县\"},{\"code\":\"611026\",\"name\":\"柞水县\"}]}]},{\"code\":\"620000\",\"name\":\"甘肃省\",\"children\":[{\"code\":\"620100\",\"name\":\"兰州市\",\"children\":[{\"code\":\"620102\",\"name\":\"城关区\"},{\"code\":\"620103\",\"name\":\"七里河区\"},{\"code\":\"620104\",\"name\":\"西固区\"},{\"code\":\"620105\",\"name\":\"安宁区\"},{\"code\":\"620111\",\"name\":\"红古区\"},{\"code\":\"620121\",\"name\":\"永登县\"},{\"code\":\"620122\",\"name\":\"皋兰县\"},{\"code\":\"620123\",\"name\":\"榆中县\"},{\"code\":\"620171\",\"name\":\"兰州新区\"}]},{\"code\":\"620200\",\"name\":\"嘉峪关市\",\"children\":[{\"code\":\"620201001\",\"name\":\"雄关街道\"},{\"code\":\"620201002\",\"name\":\"钢城街道\"},{\"code\":\"620201100\",\"name\":\"新城镇\"},{\"code\":\"620201101\",\"name\":\"峪泉镇\"},{\"code\":\"620201102\",\"name\":\"文殊镇\"}]},{\"code\":\"620300\",\"name\":\"金昌市\",\"children\":[{\"code\":\"620302\",\"name\":\"金川区\"},{\"code\":\"620321\",\"name\":\"永昌县\"}]},{\"code\":\"620400\",\"name\":\"白银市\",\"children\":[{\"code\":\"620402\",\"name\":\"白银区\"},{\"code\":\"620403\",\"name\":\"平川区\"},{\"code\":\"620421\",\"name\":\"靖远县\"},{\"code\":\"620422\",\"name\":\"会宁县\"},{\"code\":\"620423\",\"name\":\"景泰县\"}]},{\"code\":\"620500\",\"name\":\"天水市\",\"children\":[{\"code\":\"620502\",\"name\":\"秦州区\"},{\"code\":\"620503\",\"name\":\"麦积区\"},{\"code\":\"620521\",\"name\":\"清水县\"},{\"code\":\"620522\",\"name\":\"秦安县\"},{\"code\":\"620523\",\"name\":\"甘谷县\"},{\"code\":\"620524\",\"name\":\"武山县\"},{\"code\":\"620525\",\"name\":\"张家川回族自治县\"}]},{\"code\":\"620600\",\"name\":\"武威市\",\"children\":[{\"code\":\"620602\",\"name\":\"凉州区\"},{\"code\":\"620621\",\"name\":\"民勤县\"},{\"code\":\"620622\",\"name\":\"古浪县\"},{\"code\":\"620623\",\"name\":\"天祝藏族自治县\"}]},{\"code\":\"620700\",\"name\":\"张掖市\",\"children\":[{\"code\":\"620702\",\"name\":\"甘州区\"},{\"code\":\"620721\",\"name\":\"肃南裕固族自治县\"},{\"code\":\"620722\",\"name\":\"民乐县\"},{\"code\":\"620723\",\"name\":\"临泽县\"},{\"code\":\"620724\",\"name\":\"高台县\"},{\"code\":\"620725\",\"name\":\"山丹县\"}]},{\"code\":\"620800\",\"name\":\"平凉市\",\"children\":[{\"code\":\"620802\",\"name\":\"崆峒区\"},{\"code\":\"620821\",\"name\":\"泾川县\"},{\"code\":\"620822\",\"name\":\"灵台县\"},{\"code\":\"620823\",\"name\":\"崇信县\"},{\"code\":\"620825\",\"name\":\"庄浪县\"},{\"code\":\"620826\",\"name\":\"静宁县\"},{\"code\":\"620881\",\"name\":\"华亭市\"}]},{\"code\":\"620900\",\"name\":\"酒泉市\",\"children\":[{\"code\":\"620902\",\"name\":\"肃州区\"},{\"code\":\"620921\",\"name\":\"金塔县\"},{\"code\":\"620922\",\"name\":\"瓜州县\"},{\"code\":\"620923\",\"name\":\"肃北蒙古族自治县\"},{\"code\":\"620924\",\"name\":\"阿克塞哈萨克族自治县\"},{\"code\":\"620981\",\"name\":\"玉门市\"},{\"code\":\"620982\",\"name\":\"敦煌市\"}]},{\"code\":\"621000\",\"name\":\"庆阳市\",\"children\":[{\"code\":\"621002\",\"name\":\"西峰区\"},{\"code\":\"621021\",\"name\":\"庆城县\"},{\"code\":\"621022\",\"name\":\"环县\"},{\"code\":\"621023\",\"name\":\"华池县\"},{\"code\":\"621024\",\"name\":\"合水县\"},{\"code\":\"621025\",\"name\":\"正宁县\"},{\"code\":\"621026\",\"name\":\"宁县\"},{\"code\":\"621027\",\"name\":\"镇原县\"}]},{\"code\":\"621100\",\"name\":\"定西市\",\"children\":[{\"code\":\"621102\",\"name\":\"安定区\"},{\"code\":\"621121\",\"name\":\"通渭县\"},{\"code\":\"621122\",\"name\":\"陇西县\"},{\"code\":\"621123\",\"name\":\"渭源县\"},{\"code\":\"621124\",\"name\":\"临洮县\"},{\"code\":\"621125\",\"name\":\"漳县\"},{\"code\":\"621126\",\"name\":\"岷县\"}]},{\"code\":\"621200\",\"name\":\"陇南市\",\"children\":[{\"code\":\"621202\",\"name\":\"武都区\"},{\"code\":\"621221\",\"name\":\"成县\"},{\"code\":\"621222\",\"name\":\"文县\"},{\"code\":\"621223\",\"name\":\"宕昌县\"},{\"code\":\"621224\",\"name\":\"康县\"},{\"code\":\"621225\",\"name\":\"西和县\"},{\"code\":\"621226\",\"name\":\"礼县\"},{\"code\":\"621227\",\"name\":\"徽县\"},{\"code\":\"621228\",\"name\":\"两当县\"}]},{\"code\":\"622900\",\"name\":\"临夏回族自治州\",\"children\":[{\"code\":\"622901\",\"name\":\"临夏市\"},{\"code\":\"622921\",\"name\":\"临夏县\"},{\"code\":\"622922\",\"name\":\"康乐县\"},{\"code\":\"622923\",\"name\":\"永靖县\"},{\"code\":\"622924\",\"name\":\"广河县\"},{\"code\":\"622925\",\"name\":\"和政县\"},{\"code\":\"622926\",\"name\":\"东乡族自治县\"},{\"code\":\"622927\",\"name\":\"积石山保安族东乡族撒拉族自治县\"}]},{\"code\":\"623000\",\"name\":\"甘南藏族自治州\",\"children\":[{\"code\":\"623001\",\"name\":\"合作市\"},{\"code\":\"623021\",\"name\":\"临潭县\"},{\"code\":\"623022\",\"name\":\"卓尼县\"},{\"code\":\"623023\",\"name\":\"舟曲县\"},{\"code\":\"623024\",\"name\":\"迭部县\"},{\"code\":\"623025\",\"name\":\"玛曲县\"},{\"code\":\"623026\",\"name\":\"碌曲县\"},{\"code\":\"623027\",\"name\":\"夏河县\"}]}]},{\"code\":\"630000\",\"name\":\"青海省\",\"children\":[{\"code\":\"630100\",\"name\":\"西宁市\",\"children\":[{\"code\":\"630102\",\"name\":\"城东区\"},{\"code\":\"630103\",\"name\":\"城中区\"},{\"code\":\"630104\",\"name\":\"城西区\"},{\"code\":\"630105\",\"name\":\"城北区\"},{\"code\":\"630106\",\"name\":\"湟中区\"},{\"code\":\"630121\",\"name\":\"大通回族土族自治县\"},{\"code\":\"630123\",\"name\":\"湟源县\"}]},{\"code\":\"630200\",\"name\":\"海东市\",\"children\":[{\"code\":\"630202\",\"name\":\"乐都区\"},{\"code\":\"630203\",\"name\":\"平安区\"},{\"code\":\"630222\",\"name\":\"民和回族土族自治县\"},{\"code\":\"630223\",\"name\":\"互助土族自治县\"},{\"code\":\"630224\",\"name\":\"化隆回族自治县\"},{\"code\":\"630225\",\"name\":\"循化撒拉族自治县\"}]},{\"code\":\"632200\",\"name\":\"海北藏族自治州\",\"children\":[{\"code\":\"632221\",\"name\":\"门源回族自治县\"},{\"code\":\"632222\",\"name\":\"祁连县\"},{\"code\":\"632223\",\"name\":\"海晏县\"},{\"code\":\"632224\",\"name\":\"刚察县\"}]},{\"code\":\"632300\",\"name\":\"黄南藏族自治州\",\"children\":[{\"code\":\"632301\",\"name\":\"同仁市\"},{\"code\":\"632322\",\"name\":\"尖扎县\"},{\"code\":\"632323\",\"name\":\"泽库县\"},{\"code\":\"632324\",\"name\":\"河南蒙古族自治县\"}]},{\"code\":\"632500\",\"name\":\"海南藏族自治州\",\"children\":[{\"code\":\"632521\",\"name\":\"共和县\"},{\"code\":\"632522\",\"name\":\"同德县\"},{\"code\":\"632523\",\"name\":\"贵德县\"},{\"code\":\"632524\",\"name\":\"兴海县\"},{\"code\":\"632525\",\"name\":\"贵南县\"}]},{\"code\":\"632600\",\"name\":\"果洛藏族自治州\",\"children\":[{\"code\":\"632621\",\"name\":\"玛沁县\"},{\"code\":\"632622\",\"name\":\"班玛县\"},{\"code\":\"632623\",\"name\":\"甘德县\"},{\"code\":\"632624\",\"name\":\"达日县\"},{\"code\":\"632625\",\"name\":\"久治县\"},{\"code\":\"632626\",\"name\":\"玛多县\"}]},{\"code\":\"632700\",\"name\":\"玉树藏族自治州\",\"children\":[{\"code\":\"632701\",\"name\":\"玉树市\"},{\"code\":\"632722\",\"name\":\"杂多县\"},{\"code\":\"632723\",\"name\":\"称多县\"},{\"code\":\"632724\",\"name\":\"治多县\"},{\"code\":\"632725\",\"name\":\"囊谦县\"},{\"code\":\"632726\",\"name\":\"曲麻莱县\"}]},{\"code\":\"632800\",\"name\":\"海西蒙古族藏族自治州\",\"children\":[{\"code\":\"632801\",\"name\":\"格尔木市\"},{\"code\":\"632802\",\"name\":\"德令哈市\"},{\"code\":\"632803\",\"name\":\"茫崖市\"},{\"code\":\"632821\",\"name\":\"乌兰县\"},{\"code\":\"632822\",\"name\":\"都兰县\"},{\"code\":\"632823\",\"name\":\"天峻县\"},{\"code\":\"632857\",\"name\":\"大柴旦行政委员会\"}]}]},{\"code\":\"640000\",\"name\":\"宁夏回族自治区\",\"children\":[{\"code\":\"640100\",\"name\":\"银川市\",\"children\":[{\"code\":\"640104\",\"name\":\"兴庆区\"},{\"code\":\"640105\",\"name\":\"西夏区\"},{\"code\":\"640106\",\"name\":\"金凤区\"},{\"code\":\"640121\",\"name\":\"永宁县\"},{\"code\":\"640122\",\"name\":\"贺兰县\"},{\"code\":\"640181\",\"name\":\"灵武市\"}]},{\"code\":\"640200\",\"name\":\"石嘴山市\",\"children\":[{\"code\":\"640202\",\"name\":\"大武口区\"},{\"code\":\"640205\",\"name\":\"惠农区\"},{\"code\":\"640221\",\"name\":\"平罗县\"}]},{\"code\":\"640300\",\"name\":\"吴忠市\",\"children\":[{\"code\":\"640302\",\"name\":\"利通区\"},{\"code\":\"640303\",\"name\":\"红寺堡区\"},{\"code\":\"640323\",\"name\":\"盐池县\"},{\"code\":\"640324\",\"name\":\"同心县\"},{\"code\":\"640381\",\"name\":\"青铜峡市\"}]},{\"code\":\"640400\",\"name\":\"固原市\",\"children\":[{\"code\":\"640402\",\"name\":\"原州区\"},{\"code\":\"640422\",\"name\":\"西吉县\"},{\"code\":\"640423\",\"name\":\"隆德县\"},{\"code\":\"640424\",\"name\":\"泾源县\"},{\"code\":\"640425\",\"name\":\"彭阳县\"}]},{\"code\":\"640500\",\"name\":\"中卫市\",\"children\":[{\"code\":\"640502\",\"name\":\"沙坡头区\"},{\"code\":\"640521\",\"name\":\"中宁县\"},{\"code\":\"640522\",\"name\":\"海原县\"}]}]},{\"code\":\"650000\",\"name\":\"新疆维吾尔自治区\",\"children\":[{\"code\":\"650100\",\"name\":\"乌鲁木齐市\",\"children\":[{\"code\":\"650102\",\"name\":\"天山区\"},{\"code\":\"650103\",\"name\":\"沙依巴克区\"},{\"code\":\"650104\",\"name\":\"新市区\"},{\"code\":\"650105\",\"name\":\"水磨沟区\"},{\"code\":\"650106\",\"name\":\"头屯河区\"},{\"code\":\"650107\",\"name\":\"达坂城区\"},{\"code\":\"650109\",\"name\":\"米东区\"},{\"code\":\"650121\",\"name\":\"乌鲁木齐县\"}]},{\"code\":\"650200\",\"name\":\"克拉玛依市\",\"children\":[{\"code\":\"650202\",\"name\":\"独山子区\"},{\"code\":\"650203\",\"name\":\"克拉玛依区\"},{\"code\":\"650204\",\"name\":\"白碱滩区\"},{\"code\":\"650205\",\"name\":\"乌尔禾区\"}]},{\"code\":\"650400\",\"name\":\"吐鲁番市\",\"children\":[{\"code\":\"650402\",\"name\":\"高昌区\"},{\"code\":\"650421\",\"name\":\"鄯善县\"},{\"code\":\"650422\",\"name\":\"托克逊县\"}]},{\"code\":\"650500\",\"name\":\"哈密市\",\"children\":[{\"code\":\"650502\",\"name\":\"伊州区\"},{\"code\":\"650521\",\"name\":\"巴里坤哈萨克自治县\"},{\"code\":\"650522\",\"name\":\"伊吾县\"}]},{\"code\":\"652300\",\"name\":\"昌吉回族自治州\",\"children\":[{\"code\":\"652301\",\"name\":\"昌吉市\"},{\"code\":\"652302\",\"name\":\"阜康市\"},{\"code\":\"652323\",\"name\":\"呼图壁县\"},{\"code\":\"652324\",\"name\":\"玛纳斯县\"},{\"code\":\"652325\",\"name\":\"奇台县\"},{\"code\":\"652327\",\"name\":\"吉木萨尔县\"},{\"code\":\"652328\",\"name\":\"木垒哈萨克自治县\"}]},{\"code\":\"652700\",\"name\":\"博尔塔拉蒙古自治州\",\"children\":[{\"code\":\"652701\",\"name\":\"博乐市\"},{\"code\":\"652702\",\"name\":\"阿拉山口市\"},{\"code\":\"652722\",\"name\":\"精河县\"},{\"code\":\"652723\",\"name\":\"温泉县\"}]},{\"code\":\"652800\",\"name\":\"巴音郭楞蒙古自治州\",\"children\":[{\"code\":\"652801\",\"name\":\"库尔勒市\"},{\"code\":\"652822\",\"name\":\"轮台县\"},{\"code\":\"652823\",\"name\":\"尉犁县\"},{\"code\":\"652824\",\"name\":\"若羌县\"},{\"code\":\"652825\",\"name\":\"且末县\"},{\"code\":\"652826\",\"name\":\"焉耆回族自治县\"},{\"code\":\"652827\",\"name\":\"和静县\"},{\"code\":\"652828\",\"name\":\"和硕县\"},{\"code\":\"652829\",\"name\":\"博湖县\"},{\"code\":\"652871\",\"name\":\"库尔勒经济技术开发区\"}]},{\"code\":\"652900\",\"name\":\"阿克苏地区\",\"children\":[{\"code\":\"652901\",\"name\":\"阿克苏市\"},{\"code\":\"652902\",\"name\":\"库车市\"},{\"code\":\"652922\",\"name\":\"温宿县\"},{\"code\":\"652924\",\"name\":\"沙雅县\"},{\"code\":\"652925\",\"name\":\"新和县\"},{\"code\":\"652926\",\"name\":\"拜城县\"},{\"code\":\"652927\",\"name\":\"乌什县\"},{\"code\":\"652928\",\"name\":\"阿瓦提县\"},{\"code\":\"652929\",\"name\":\"柯坪县\"}]},{\"code\":\"653000\",\"name\":\"克孜勒苏柯尔克孜自治州\",\"children\":[{\"code\":\"653001\",\"name\":\"阿图什市\"},{\"code\":\"653022\",\"name\":\"阿克陶县\"},{\"code\":\"653023\",\"name\":\"阿合奇县\"},{\"code\":\"653024\",\"name\":\"乌恰县\"}]},{\"code\":\"653100\",\"name\":\"喀什地区\",\"children\":[{\"code\":\"653101\",\"name\":\"喀什市\"},{\"code\":\"653121\",\"name\":\"疏附县\"},{\"code\":\"653122\",\"name\":\"疏勒县\"},{\"code\":\"653123\",\"name\":\"英吉沙县\"},{\"code\":\"653124\",\"name\":\"泽普县\"},{\"code\":\"653125\",\"name\":\"莎车县\"},{\"code\":\"653126\",\"name\":\"叶城县\"},{\"code\":\"653127\",\"name\":\"麦盖提县\"},{\"code\":\"653128\",\"name\":\"岳普湖县\"},{\"code\":\"653129\",\"name\":\"伽师县\"},{\"code\":\"653130\",\"name\":\"巴楚县\"},{\"code\":\"653131\",\"name\":\"塔什库尔干塔吉克自治县\"}]},{\"code\":\"653200\",\"name\":\"和田地区\",\"children\":[{\"code\":\"653201\",\"name\":\"和田市\"},{\"code\":\"653221\",\"name\":\"和田县\"},{\"code\":\"653222\",\"name\":\"墨玉县\"},{\"code\":\"653223\",\"name\":\"皮山县\"},{\"code\":\"653224\",\"name\":\"洛浦县\"},{\"code\":\"653225\",\"name\":\"策勒县\"},{\"code\":\"653226\",\"name\":\"于田县\"},{\"code\":\"653227\",\"name\":\"民丰县\"}]},{\"code\":\"654000\",\"name\":\"伊犁哈萨克自治州\",\"children\":[{\"code\":\"654002\",\"name\":\"伊宁市\"},{\"code\":\"654003\",\"name\":\"奎屯市\"},{\"code\":\"654004\",\"name\":\"霍尔果斯市\"},{\"code\":\"654021\",\"name\":\"伊宁县\"},{\"code\":\"654022\",\"name\":\"察布查尔锡伯自治县\"},{\"code\":\"654023\",\"name\":\"霍城县\"},{\"code\":\"654024\",\"name\":\"巩留县\"},{\"code\":\"654025\",\"name\":\"新源县\"},{\"code\":\"654026\",\"name\":\"昭苏县\"},{\"code\":\"654027\",\"name\":\"特克斯县\"},{\"code\":\"654028\",\"name\":\"尼勒克县\"}]},{\"code\":\"654200\",\"name\":\"塔城地区\",\"children\":[{\"code\":\"654201\",\"name\":\"塔城市\"},{\"code\":\"654202\",\"name\":\"乌苏市\"},{\"code\":\"654203\",\"name\":\"沙湾市\"},{\"code\":\"654221\",\"name\":\"额敏县\"},{\"code\":\"654224\",\"name\":\"托里县\"},{\"code\":\"654225\",\"name\":\"裕民县\"},{\"code\":\"654226\",\"name\":\"和布克赛尔蒙古自治县\"}]},{\"code\":\"654300\",\"name\":\"阿勒泰地区\",\"children\":[{\"code\":\"654301\",\"name\":\"阿勒泰市\"},{\"code\":\"654321\",\"name\":\"布尔津县\"},{\"code\":\"654322\",\"name\":\"富蕴县\"},{\"code\":\"654323\",\"name\":\"福海县\"},{\"code\":\"654324\",\"name\":\"哈巴河县\"},{\"code\":\"654325\",\"name\":\"青河县\"},{\"code\":\"654326\",\"name\":\"吉木乃县\"}]},{\"code\":\"659000\",\"name\":\"自治区直辖县级行政区划\",\"children\":[{\"code\":\"659001\",\"name\":\"石河子市\"},{\"code\":\"659002\",\"name\":\"阿拉尔市\"},{\"code\":\"659003\",\"name\":\"图木舒克市\"},{\"code\":\"659004\",\"name\":\"五家渠市\"},{\"code\":\"659005\",\"name\":\"北屯市\"},{\"code\":\"659006\",\"name\":\"铁门关市\"},{\"code\":\"659007\",\"name\":\"双河市\"},{\"code\":\"659008\",\"name\":\"可克达拉市\"},{\"code\":\"659009\",\"name\":\"昆玉市\"},{\"code\":\"659010\",\"name\":\"胡杨河市\"},{\"code\":\"659011\",\"name\":\"新星市\"}]}]}]"), NewbieAddress_default = /* @__PURE__ */ defineComponent({
name: "NewbieAddress",
props: {
value: {
type: [
String,
Number,
Array
],
default: () => []
},
level: {
type: Number,
default: 3
},
disabled: {
type: Boolean,
default: !1
},
placeholder: {
type: String,
default: "请选择地区"
},
url: {
type: String,
default: ""
},
afterFetched: {
type: Function,
default: null
},
dataSource: {
type: Array,
default: () => []
}
},
emits: ["update:value"],
setup(e, { emit: n }) {
let r = reactive({
items: e.dataSource,
value: e.value
});
watch(() => e.dataSource, () => {
r.items = e.dataSource;
}), r.items.length === 0 && (e.url ? i() : r.items = addressData_default);
let i = async () => {
let n = await useFetch().get(e.url);
e.afterFetched && (n = e.afterFetched(n)), r.items = n;
}, a = (e) => {
n("update:value", e);
};
return () => createVNode(Cascader, {
value: r.value,
"onUpdate:value": (e) => r.value = e,
fieldNames: {
label: "name",
value: "code",
children: "children"
},
allowClear: !0,
placeholder: e.placeholder,
disabled: e.disabled,
options: r.items,
changeOnSelect: !0,
showSearch: !0,
onChange: a
}, null);
}
});
function useAddressFullCode$1(e, n) {
if (e += "", e && e.length === 6) {
if (n ||= /0000$/.test(e) ? 1 : /00$/.test(e) ? 2 : 3, n === 1) return [`${e.substr(0, 2)}0000`];
if (n === 2) return [`${e.substr(0, 2)}0000`, `${e.substr(0, 4)}00`];
if (n === 3) return [
`${e.substr(0, 2)}0000`,
`${e.substr(0, 4)}00`,
e
];
}
return [];
}
var withInstall_default = (e) => (e.install = (n) => {
let r = e.name || e.__name;
n.component(r, e);
}, e);
const useAddressFullCode = useAddressFullCode$1, NewbieAddress = withInstall_default(NewbieAddress_default);
var NewbieButton_default = /* @__PURE__ */ defineComponent({
name: "NewbieButton",
props: {
type: {
type: String,
default: "default"
},
size: {
type: String,
default: "middle"
},
disabled: {
type: Boolean,
default: !1
},
danger: {
type: Boolean,
default: !1
},
label: {
type: String,
default: ""
},
icon: {
type: Object,
default: null
},
iconPosition: {
type: String,
default: "left"
},
fetcher: {
type: Object,
default: () => ({ loading: !1 })
},
buttonProps: {
type: Object,
default: () => ({})
}
},
emits: ["click"],
setup(e, { emit: n, slots: r }) {
let i = (e) => {
n("click", e);
}, a = () => e.label || r.default(), o = () => e.icon && e.iconPosition === "left" ? [e.icon, a()] : e.icon && e.iconPosition === "right" ? [a(), e.icon] : [a()];
return () => createVNode(Button, mergeProps({
danger: e.danger,
loading: e.fetcher.loading,
type: e.type,
size: e.size,
disabled: e.disabled,
onClick: i
}, e.buttonProps), { default: () => o() });
}
});
const NewbieButton = withInstall_default(NewbieButton_default);
function genErrorInfo(e) {
let n = `请使用 '@${e}' 事件,不要放在 props 中`;
return n += `\nPlease use '@${e}' event instead of props`, n;
}
var __plugin_vue_export_helper_default = (e, n) => {
let r = e.__vccOpts || e;
for (let [e, i] of n) r[e] = i;
return r;
}, _sfc_main$1 = defineComponent({
props: {
mode: {
type: String,
default: "default"
},
defaultContent: {
type: Array,
default: () => []
},
defaultHtml: {
type: String,
default: ""
},
defaultConfig: {
type: Object,
default: () => ({})
},
modelValue: {
type: String,
default: ""
}
},
emits: [
"update:modelValue",
"onCreated",
"onChange",
"onDestroyed",
"onMaxLength",
"onFocus",
"onBlur",
"customAlert",
"customPaste"
],
setup(e, n) {
let r = ref(null), i = shallowRef(null), a = ref(""), o = (o) => {
if (!r.value) return;
let s = toRaw(e.defaultContent);
o({
selector: r.value,
mode: e.mode,
content: s || [],
html: e.defaultHtml || e.modelValue || "",
config: {
...e.defaultConfig,
onCreated(r) {
if (i.value = r, n.emit("onCreated", r), e.defaultConfig.onCreated) {
let e = genErrorInfo("onCreated");
throw Error(e);
}
},
onChange(r) {
let i = r.getHtml();
if (a.value = i, n.emit("update:modelValue", i), n.emit("onChange", r), e.defaultConfig.onChange) {
let e = genErrorInfo("onChange");
throw Error(e);
}
},
onDestroyed(r) {
if (n.emit("onDestroyed", r), e.defaultConfig.onDestroyed) {
let e = genErrorInfo("onDestroyed");
throw Error(e);
}
},
onMaxLength(r) {
if (n.emit("onMaxLength", r), e.defaultConfig.onMaxLength) {
let e = genErrorInfo("onMaxLength");
throw Error(e);
}
},
onFocus(r) {
if (n.emit("onFocus", r), e.defaultConfig.onFocus) {
let e = genErrorInfo("onFocus");
throw Error(e);
}
},
onBlur(r) {
if (n.emit("onBlur", r), e.defaultConfig.onBlur) {
let e = genErrorInfo("onBlur");
throw Error(e);
}
},
customAlert(r, i) {
if (n.emit("customAlert", r, i), e.defaultConfig.customAlert) {
let e = genErrorInfo("customAlert");
throw Error(e);
}
},
customPaste: (r, i) => {
if (e.defaultConfig.customPaste) {
let e = genErrorInfo("customPaste");
throw Error(e);
}
let a;
return n.emit("customPaste", r, i, (e) => {
a = e;
}), a;
}
}
});
};
function s(e) {
i.value?.setHtml(e);
}
return onMounted(() => {
import("./index.esm-CbYldqXv.js").then((e) => {
o(e.createEditor);
});
}), watch(() => e.modelValue, (e) => {
e !== a.value && s(e);
}), { box: r };
}
}), _hoisted_1$1 = {
ref: "box",
style: { height: "100%" }
};
function _sfc_render$1(e, n, r, i, a, o) {
return openBlock(), createElementBlock("div", _hoisted_1$1, null, 512);
}
var WangEditor_default = /* @__PURE__ */ __plugin_vue_export_helper_default(_sfc_main$1, [["render", _sfc_render$1]]), _sfc_main = defineComponent({
props: {
editor: {
type: Object,
default: () => null
},
mode: {
type: String,
default: "default"
},
defaultConfig: {
type: Object,
default: () => ({})
}
},
setup(e) {
let n = ref(null), r = (r) => {
if (n.value) {
if (r == null) throw Error("Not found instance of Editor when create <Toolbar/> component");
import("./index.esm-CbYldqXv.js").then((i) => {
i.DomEditor.getToolbar(r) || i.createToolbar({
editor: r,
selector: n.value || "<div></div>",
mode: e.mode,
config: e.defaultConfig
});
});
}
};
return onMounted(() => {
watchEffect(() => {
let { editor: n } = e;
n != null && r(n);
});
}), { selector: n };
}
}), _hoisted_1 = { ref: "selector" };
function _sfc_render(e, n, r, i, a, o) {
return openBlock(), createElementBlock("div", _hoisted_1, null, 512);
}
var WangToolbar_default = /* @__PURE__ */ __plugin_vue_export_helper_default(_sfc_main, [["render", _sfc_render]]);
const NEWBIE_LOCALE = Symbol("NEWBIE_LOCALE"), NEWBIE_EDITOR = Symbol("NEWBIE_EDITOR"), NEWBIE_TABLE = Symbol("NEWBIE_TABLE"), NEWBIE_UPLOADER = Symbol("NEWBIE_UPLOADER"), NEWBIE_FORM = Symbol("NEWBIE_FORM"), NEWBIE_SEARCH = Symbol("NEWBIE_SEARCH");
var NewbieProvider_default = /* @__PURE__ */ defineComponent({
name: "NewbieProvider",
props: {
editor: {
type: Object,
default: () => ({ uploadUrl: "" })
},
table: {
type: Object,
default: () => ({
page: 1,
pageSize: 10,
pageKey: "page",
pageSizeKey: "pageSize",
afterFetched: null
})
},
uploader: {
type: Object,
default: () => ({
uploadUrl: "",
defaultFileItem: {
id: "id",
name: "name",
url: "url",
path: "path",
thumbUrl: "thumbUrl"
},
defaultPreview: null
})
},
form: {
type: Object,
default: () => ({
format: {},
afterFetched: null,
columns: {}
})
},
search: {
type: Object,
default: () => ({
maskClass: "",
inputClass: "",
valueFormatter: null
})
},
locale: {
type: String,
default: "zh_CN"
}
},
setup(e, { slots: n }) {
let { locale: r } = useI18n();
return watch(() => e.locale, (e) => {
e && (r.value = e);
}, { immediate: !0 }), provide(NEWBIE_LOCALE, e.locale), provide(NEWBIE_EDITOR, {
uploadUrl: "",
...e.editor
}), provide(NEWBIE_TABLE, {
page: 1,
pageSize: 10,
pageKey: "page",
pageSizeKey: "pageSize",
afterFetched: null,
...e.table
}), provide(NEWBIE_UPLOADER, {
defaultFileItem: {
id: "id",
name: "name",
url: "url",
path: "path",
thumbUrl: "thumbUrl"
},
...e.uploader
}), provide(NEWBIE_FORM, {
format: {},
...e.form
}), provide(NEWBIE_SEARCH, {
maskClass: "",
inputClass: "",
valueFormatter: null,
...e.search
}), () => createVNode("div", null, [n.default?.()]);
}
}), NewbieEditor_default = /* @__PURE__ */ defineComponent({
name: "NewbieEditor",
props: {
value: {
type: String,
default: ""
},
placeholder: {
type: String,
default: ""
},
disabled: {
type: Boolean,
default: !1
},
readonly: {
type: Boolean,
default: !1
},
config: {
type: Object,
default: () => ({
toolbarConfig: {},
editorConfig: {}
})
}
},
emits: ["update:value"],
setup(e, { emit: n, expose: r }) {
let i = Form.useInjectFormItemContext(), a = shallowRef(), o = ref(""), s = ref({
excludeKeys: ["group-video", "emotion"],
...e.config?.toolbarConfig
}), { uploadUrl: c } = inject(NEWBIE_EDITOR, () => ({})), l = ref({
placeholder: e.placeholder || useT("form.please-input", { title: useT("common.content") }),
readOnly: e.disabled || e.readonly,
MENU_CONF: { uploadImage: { async customUpload(e, n) {
let r = new FormData();
r.append("file", e);
try {
let e = await useFetch().post(c, r);
useProcessStatusSuccess(e, () => {
let { url: r, alt: i, href: a } = e.result;
n(r, i, a);
});
} catch (e) {
console.log(e);
}
} } },
...e.config?.editorConfig
}), u = (e) => {
a.value && a.value.setHtml(e);
}, d = () => a?.value;
onBeforeUnmount(() => {
a.value?.destroy();
}), watch(() => e.value, (e) => {
e !== o.value && a.value && u(e);
});
let f = (n) => {
a.value = n, u(e.value), n.on("fullScreen", () => {
document.body.classList.add("fullscreen");
}), n.on("unFullScreen", () => {
document.body.classList.remove("fullscreen");
}), !e.disabled && !e.readonly && (g.value = v());
}, p = (r) => {
let a = r.getHtml();
r.isEmpty() && (a = ""), a !== e.value && (n("update:value", a), i.onFieldChange());
}, m = async (e, n) => {
switch (n) {
case "success":
message.success(e);
break;
case "info":
message.info(e);
break;
case "warning":
message.warning(e);
break;
case "error":
message.error(e);
break;
default:
message.info(e);
break;
}
};
r({
setContent: u,
getEditor: d
});
let g = ref(), _ = ref(), v = () => a?.value?.destroy ? createVNode(WangToolbar_default, {
editor: a.value,
defaultConfig: s.value,
style: "border-bottom: 1px solid #f0f0f0"
}, null) : createVNode("div", null, null), b = () => createVNode(WangEditor_default, {
modelValue: o.value,
"onUpdate:modelValue": (e) => o.value = e,
defaultConfig: l.value,
style: "height: 400px; overflow-y: hidden",
onOnChange: p,
onOnCreated: f,
onCustomAlert: m
}, null);
return onMounted(() => {
_.value = b();
}), () => createVNode("div", { style: "border: 1px solid #f0f0f0" }, [g.value, _.value]);
}
});
const NewbieEditor = withInstall_default(NewbieEditor_default);
var genPixel = (e) => isNull(e) || isUndefined(e) ? "auto" : isNaN(e) ? e : `${e}px`, initItemDefaultValue = (e, n, r, i) => {
let a = "", { uploaderProvider: o } = i;
if (n && !isUndefined(n[e.key]) ? a = n[e.key] : isUndefined(e.defaultValue) || (a = isFunction(e.defaultValue) ? e.defaultValue({
submitForm: r,
existingData: n
}) : e.defaultValue), e.init && isFunction(e.init) && (a = e.init({
submitForm: r,
value: a,
existingData: n
})), e.type === "number" || e.type === "slider" || e.type === "rate") a = useNumber(a);
else if (e.type === "select" || e.type === "remote") e.defaultProps && (e.defaultProps.mode === "multiple" || e.defaultProps.mode === "tags") ? a ||= [] : a ||= void 0;
else if (e.type === "tree-select") e.defaultProps && (e.defaultProps.multiple === !0 || e.defaultProps.treeCheckable === !0) ? a ||= [] : a ||= void 0;
else if (e.type === "date" || e.type === "time") a = e.defaultProps && e.defaultProps.type === "range" ? a ? [useDayjs(a[0]), useDayjs(a[1])] : [] : a ? useDayjs(a) : null;
else if (e.type === "address") a ||= [], isArray(a) || (a = useAddressFullCode$1(a));
else if (e.type === "uploader") if (e.defaultProps && e.defaultProps.maxNum && e.defaultProps.maxNum > 1) a ||= [];
else {
let { path: e, url: n } = o.defaultFileItem;
a ||= {
[e]: "",
[n]: ""
};
}
else [
"matrix-checkbox",
"matrix-radio",
"matrix-scale",
"rate-radio"
].includes(e.type) ? a ||= {} : [
"group",
"tag",
"checkbox",
"rate-checkbox"
].includes(e.type) && (a ||= []);
return a;
}, isOptionalChecked = (e, n) => {
let r = n[e.key];
return !(isObject(r) && !Object.keys(r).length || isArray(r) && !r.length || r === "" || r === !1 || r == null || r === 0);
}, placeholder = (e, n) => {
let { t: r, locale: i } = useI18n(), a = i.value === "en_US" ? e.title?.toLowerCase() : e.title;
return n === "select" ? e.placeholder || r("form.please-select", { title: a }) : n === "upload" ? e.placeholder || r("form.please-upload", { title: a }) : e.placeholder || r("form.please-input", { title: a });
}, Date_default = (e, n) => {
let r = DatePicker, i = placeholder(e, "select");
return e.defaultProps && e.defaultProps.type === "range" && (r = RangePicker, i = isString(e.placeholder) ? [e.placeholder, e.placeholder] : [i, i]), createVNode(r, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
allowClear: !0,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: i,
style: e.style || { width: genPixel(e.width || "200px") },
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots });
}, Time_default = (e, n) => {
let r = TimePicker, i = placeholder(e, "select");
return e.defaultProps && e.defaultProps.type === "range" && (r = TimeRangePicker, i = isString(e.placeholder) ? [e.placeholder, e.placeholder] : [i, i]), createVNode(r, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
allowClear: !0,
placeholder: i,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
style: e.style || { width: genPixel(e.width || "200px") },
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots });
}, Input_default = (e, n) => {
(n[e.key] === null || n[e.key] === "null" || n[e.key] === void 0) && (n[e.key] = ""), n[e.key] = String(n[e.key]);
let r = {};
e.defaultProps && (e.defaultProps.prefix && (r.prefix = () => isFunction(e.defaultProps.prefix) ? e.defaultProps.prefix() : e.defaultProps.prefix), e.defaultProps.suffix && (r.suffix = () => isFunction(e.defaultProps.suffix) ? e.defaultProps.suffix() : e.defaultProps.suffix), e.defaultProps.prepend && (r.addonBefore = () => isFunction(e.defaultProps.prepend) ? e.defaultProps.prepend() : e.defaultProps.prepend), e.defaultProps.append && (r.addonAfter = () => isFunction(e.defaultProps.append) ? e.defaultProps.append() : e.defaultProps.append));
let i = { width: genPixel(e.width || "200px") }, a = Input;
return (e.type === "textarea" || e.defaultProps && e.defaultProps.type === "textarea") && (a = Input.TextArea, i = { width: genPixel(e.width || "100%") }), (e.type === "password" || e.defaultProps && e.defaultProps.type === "password") && (a = Input.Password), createVNode(a, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: placeholder(e),
style: e.style || i,
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), {
...r,
...e.defaultSlots
});
};
function _isSlot$11(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Tag_default = (e, n, r) => {
Object.keys(r).length || (r.value = null);
let i = n[e.key]?.length ? n[e.key].map((r) => createVNode(Tag, {
key: r,
closable: !e.disabled,
style: { marginBottom: "10px" },
onClose: () => {
n[e.key] = n[e.key].filter((e) => e !== r);
}
}, _isSlot$11(r) ? r : { default: () => [r] })) : null, a = null;
return a = e.disabled || e.readonly ? null : e.defaultProps?.inputType === "time" ? createVNode(TimePicker, {
value: r.value,
"onUpdate:value": (e) => r.value = e,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
format: e.defaultProps?.format || "HH:mm",
onChange: (i) => {
if (!i) return;
let a = i.format(e.defaultProps?.format || "HH:mm");
if (n[e.key].indexOf(a) !== -1) {
message.warn("时间已存在");
return;
}
n[e.key].push(a), nextTick(() => {
r.value = "";
});
}
}, null) : e.defaultProps?.inputType === "time_range" ? createVNode(TimeRangePicker, {
value: r.value,
"onUpdate:value": (e) => r.value = e,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
format: e.defaultProps?.format || "HH:mm",
onChange: (i) => {
if (!i) return;
let a = [i[0].format(e.defaultProps?.format || "HH:mm"), i[1].format(e.defaultProps?.format || "HH:mm")];
if (a = a.join("至"), n[e.key].indexOf(a) !== -1) {
message.warn("时间已存在");
return;
}
n[e.key].push(a), nextTick(() => {
r.value = [];
});
}
}, null) : createVNode(Input, {
value: r.value,
"onUpdate:value": (e) => r.value = e,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: e.placeholder || "按Enter键确认",
style: e.style || { width: genPixel(e.width || "200px") },
onPressEnter: withModifiers((i) => {
if (i.preventDefault(), i.keyCode === 13 && r.value) {
if (n[e.key].indexOf(r.value) !== -1) {
message.warn("标签已存在");
return;
}
n[e.key].push(r.value), r.value = "";
}
}, ["stop"])
}, { prefix: () => createVNode(PlusOutlined, null, null) }), createVNode("div", { class: "newbie-form-tag" }, [[i, a]]);
}, Select_default = (e, n) => {
let r = isFunction(e.options) ? e.options(n) : e.options;
return r = r.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), createVNode(Select, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
options: r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
allowClear: !0,
placeholder: placeholder(e, "select"),
dropdownMatchSelectWidth: !e.width,
showSearch: !0,
optionFilterProp: "label",
style: e.style || (e.width ? { width: genPixel(e.width) } : {}),
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots });
}, TreeSelect_default = (e, n) => {
let r = isFunction(e.options) ? e.options(n) : e.options;
return createVNode(TreeSelect, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
treeData: r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
treeDefaultExpandAll: !0,
treeNodeFilterProp: "label",
showSearch: !0,
allowClear: !0,
placeholder: placeholder(e, "select"),
dropdownMatchSelectWidth: !e.width,
style: e.style || (e.width ? { width: genPixel(e.width) } : {}),
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots });
}, Remote_default = (e, n, r) => {
if (Object.keys(r).length || (r.fetcher = { loading: !1 }, r.options = [], r.init = !1), !r.init) {
r.init = !0;
let i = [];
e.options && (i = isFunction(e.options) ? e.options(n) : e.options, i = i.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e)), r.options = i;
}
let i = e.method || "get";
if (["get", "post"].indexOf(i) === -1) return console.error(`${e.key}: method must be 'get' or 'post' in "remote" type`), null;
if (!e.url) return console.error(`${e.key}: url is required in "remote" type`), null;
let a = debounce(async (n) => {
if (n = n.trim(), !n) return;
let a = await useFetch(r.fetcher)[i](e.url, { params: {
[e.keyword || "keyword"]: n,
...e.params
} });
useProcessStatusSuccess(a, () => {
e.onSearch && (a.result = e.onSearch(a.result)), r.options = a.result;
});
}, 1e3);
return createVNode(Select, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
options: r.options,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
showSearch: !0,
allowClear: !0,
filterOption: !1,
notFoundContent: r.fetcher.loading ? void 0 : useT("common.no-content"),
placeholder: placeholder(e, "select"),
dropdownMatchSelectWidth: !e.width,
style: e.style || (e.width ? { width: genPixel(e.width) } : {}),
class: {
readonly: e.readonly,
...e.class
},
onSearch: a
}, e.defaultProps), {
notFoundContent: () => r.fetcher.loading ? createVNode(Spin, null, null) : "",
...e.defaultSlots
});
}, Address_default = (e, n) => createVNode(NewbieAddress_default, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: placeholder(e, "select"),
class: {
readonly: e.readonly,
...e.class
},
style: e.style || { width: genPixel(e.width || "200px") }
}, e.defaultProps), null), Cascader_default = (e, n) => {
let r = isFunction(e.options) ? e.options(n) : e.options;
return (isNumber(n[e.key]) || isString(n[e.key])) && (n[e.key] = useFindParentValues(r, n[e.key], e.defaultProps?.fieldNames)), createVNode(Cascader, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
allowClear: !0,
options: r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
changeOnSelect: !0,
showSearch: { filter(e, n) {
return n.some((n) => n.label && n.label.toLowerCase().indexOf(e.toLowerCase()) > -1);
} },
placeholder: placeholder(e, "select"),
style: e.style || { width: genPixel(e.width || "200px") },
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots });
}, Number_default = (e, n) => (n[e.key] = Number(n[e.key]) || 0, createVNode(InputNumber, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: placeholder(e),
style: e.style || { width: genPixel(e.width) || "100px" },
class: {
readonly: e.readonly,
...e.class
}
}, e.defaultProps), { ...e.defaultSlots }));
function _isSlot$10(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Switch_default = (e, n) => {
let r = {
checkedChildren: () => e.options?.[0] || null,
unCheckedChildren: () => e.options?.[1] || null
};
return createVNode(Switch, mergeProps({
checked: n[e.key],
"onUpdate:checked": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
style: e.style || {}
}, e.defaultProps), _isSlot$10(r) ? r : { default: () => [r] });
};
function _isSlot$9(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Radio_default = (e, n) => {
let r, i = isFunction(e.options) ? e.options(n) : e.options;
return i = i.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), e.readonly ? createVNode("div", { style: { padding: "0 11px" } }, [createVNode(Tag, null, _isSlot$9(r = useLabelFromOptionsValue(n[e.key], i)) ? r : { default: () => [r] })]) : createVNode(RadioGroup, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
optionType: "button",
buttonStyle: "solid",
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
options: i,
style: e.style || {}
}, e.defaultProps), { ...e.defaultSlots });
};
function _isSlot$8(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Checkbox_default = (e, n) => {
let r = isFunction(e.options) ? e.options(n) : e.options;
return r = r.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), e.readonly ? createVNode("div", { style: { padding: "0 11px" } }, [useFindLabelsInValues(r, n[e.key]).map((e) => createVNode(Tag, { style: { marginRight: "5px" } }, _isSlot$8(e) ? e : { default: () => [e] }))]) : createVNode(CheckboxGroup, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
options: r,
shape: "square",
style: e.style || {}
}, e.defaultProps), { ...e.defaultSlots });
}, Html_default = (e, n) => n[e.key] ? createVNode("div", mergeProps({
style: e.style || {},
innerHTML: n[e.key]
}, e.defaultProps), null) : null, import_resumable = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((e, n) => {
(function() {
var e = function(n) {
if (!(this instanceof e)) return new e(n);
if (this.version = 1, this.support = typeof File < "u" && typeof Blob < "u" && typeof FileList < "u" && (!!Blob.prototype.webkitSlice || !!Blob.prototype.mozSlice || !!Blob.prototype.slice || !1), !this.support) return !1;
var r = this;
r.files = [], r.defaults = {
chunkSize: 1 * 1024 * 1024,
forceChunkSize: !1,
simultaneousUploads: 3,
fileParameterName: "file",
chunkNumberParameterName: "resumableChunkNumber",
chunkSizeParameterName: "resumableChunkSize",
currentChunkSizeParameterName: "resumableCurrentChunkSize",
totalSizeParameterName: "resumableTotalSize",
typeParameterName: "resumableType",
identifierParameterName: "resumableIdentifier",
fileNameParameterName: "resumableFilename",
relativePathParameterName: "resumableRelativePath",
totalChunksParameterName: "resumableTotalChunks",
throttleProgressCallbacks: .5,
query: {},
headers: {},
preprocess: null,
method: "multipart",
uploadMethod: "POST",
testMethod: "GET",
prioritizeFirstAndLastChunk: !1,
target: "/",
testTarget: null,
parameterNamespace: "",
testChunks: !0,
generateUniqueIdentifier: null,
getTarget: null,
maxChunkRetries: 100,
chunkRetryInterval: void 0,
permanentErrors: [
400,
404,
415,
500,
501
],
maxFiles: void 0,
withCredentials: !1,
xhrTimeout: 0,
clearInput: !0,
chunkFormat: "blob",
setChunkTypeFromFile: !1,
maxFilesErrorCallback: function(e, n) {
var i = r.getOpt("maxFiles");
alert("Please upload no more than " + i + " file" + (i === 1 ? "" : "s") + " at a time.");
},
minFileSize: 1,
minFileSizeErrorCallback: function(e, n) {
alert(e.fileName || e.name + " is too small, please upload files larger than " + i.formatSize(r.getOpt("minFileSize")) + ".");
},
maxFileSize: void 0,
maxFileSizeErrorCallback: function(e, n) {
alert(e.fileName || e.name + " is too large, please upload files less than " + i.formatSize(r.getOpt("maxFileSize")) + ".");
},
fileType: [],
fileTypeErrorCallback: function(e, n) {
alert(e.fileName || e.name + " has type not allowed, please upload files of type " + r.getOpt("fileType") + ".");
}
}, r.opts = n || {}, r.getOpt = function(n) {
var r = this;
if (n instanceof Array) {
var a = {};
return i.each(n, function(e) {
a[e] = r.getOpt(e);
}), a;
}
if (r instanceof p) {
if (r.opts[n] !== void 0) return r.opts[n];
r = r.fileObj;
}
if (r instanceof f) {
if (r.opts[n] !== void 0) return r.opts[n];
r = r.resumableObj;
}
if (r instanceof e) return r.opts[n] === void 0 ? r.defaults[n] : r.opts[n];
}, r.events = [], r.on = function(e, n) {
r.events.push(e.toLowerCase(), n);
}, r.fire = function() {
for (var e = [], n = 0; n < arguments.length; n++) e.push(arguments[n]);
for (var i = e[0].toLowerCase(), n = 0; n <= r.events.length; n += 2) r.events[n] == i && r.events[n + 1].apply(r, e.slice(1)), r.events[n] == "catchall" && r.events[n + 1].apply(null, e);
i == "fileerror" && r.fire("error", e[2], e[1]), i == "fileprogress" && r.fire("progress");
};
var i = {
stopEvent: function(e) {
e.stopPropagation(), e.preventDefault();
},
each: function(e, n) {
if (e.length !== void 0) {
for (var r = 0; r < e.length; r++) if (n(e[r]) === !1) return;
} else for (r in e) if (n(r, e[r]) === !1) return;
},
generateUniqueIdentifier: function(e, n) {
var i = r.getOpt("generateUniqueIdentifier");
if (typeof i == "function") return i(e, n);
var a = e.webkitRelativePath || e.fileName || e.name;
return e.size + "-" + a.replace(/[^0-9a-zA-Z_-]/gim, "");
},
contains: function(e, n) {
var r = !1;
return i.each(e, function(e) {
return e == n ? (r = !0, !1) : !0;
}), r;
},
formatSize: function(e) {
return e < 1024 ? e + " bytes" : e < 1024 * 1024 ? (e / 1024).toFixed(0) + " KB" : e < 1024 * 1024 * 1024 ? (e / 1024 / 1024).toFixed(1) + " MB" : (e / 1024 / 1024 / 1024).toFixed(1) + " GB";
},
getTarget: function(e, n) {
var i = r.getOpt("target");
if (e === "test" && r.getOpt("testTarget") && (i = r.getOpt("testTarget") === "/" ? r.getOpt("target") : r.getOpt("testTarget")), typeof i == "function") return i(n);
var a = i.indexOf("?") < 0 ? "?" : "&", o = n.join("&");
return i + a + o;
}
}, a = function(e) {
i.stopEvent(e), e.dataTransfer && e.dataTransfer.items ? u(e.dataTransfer.items, e) : e.dataTransfer && e.dataTransfer.files && u(e.dataTransfer.files, e);
}, o = function(e) {
e.preventDefault();
};
function s(e, n, r, i) {
var a;
if (e.isFile) return e.file(function(e) {
e.relativePath = n + e.name, r.push(e), i();
});
if (e.isDirectory ? a = e : e instanceof File && r.push(e), typeof e.webkitGetAsEntry == "function" && (a = e.webkitGetAsEntry()), a && a.isDirectory) return l(a, n + a.name + "/", r, i);
typeof e.getAsFile == "function" && (e = e.getAsFile(), e instanceof File && (e.relativePath = n + e.name, r.push(e))), i();
}
function c(e, n) {
if (!e || e.length === 0) return n();
e[0](function() {
c(e.slice(1), n);
});
}
function l(e, n, r, i) {
e.createReader().readEntries(function(e) {
if (!e.length) return i();
c(e.map(function(e) {
return s.bind(null, e, n, r);
}), i);
});
}
function u(e, n) {
if (e.length) {
r.fire("beforeAdd");
var i = [];
c(Array.prototype.map.call(e, function(e) {
return s.bind(null, e, "", i);
}), function() {
i.length && d(i, n);
});
}
}
var d = function(e, n) {
var a = 0, o = r.getOpt([
"maxFiles",
"minFileSize",
"maxFileSize",
"maxFilesErrorCallback",
"minFileSizeErrorCallback",
"maxFileSizeErrorCallback",
"fileType",
"fileTypeErrorCallback"
]);
if (o.maxFiles !== void 0 && o.maxFiles < e.length + r.files.length) if (o.maxFiles === 1 && r.files.length === 1 && e.length === 1) r.removeFile(r.files[0]);
else return o.maxFilesErrorCallback(e, a++), !1;
var s = [], c = [], l = e.length, u = function() {
if (!--l) {
if (!s.length && !c.length) return;
window.setTimeout(function() {
r.fire("filesAdded", s, c);
}, 0);
}
};
i.each(e, function(e) {
var l = e.name;
if (o.fileType.length > 0) {
var d = !1;
for (var p in o.fileType) {
var m = "." + o.fileType[p];
if (l.toLowerCase().indexOf(m.toLowerCase(), l.length - m.length) !== -1) {
d = !0;
break;
}
}
if (!d) return o.fileTypeErrorCallback(e, a++), !1;
}
if (o.minFileSize !== void 0 && e.size < o.minFileSize) return o.minFileSizeErrorCallback(e, a++), !1;
if (o.maxFileSize !== void 0 && e.size > o.maxFileSize) return o.maxFileSizeErrorCallback(e, a++), !1;
function g(i) {
r.getFromUniqueIdentifier(i) ? c.push(e) : (function() {
e.uniqueIdentifier = i;
var a = new f(r, e, i);
r.files.push(a), s.push(a), a.container = n === void 0 ? null : n.srcElement, window.setTimeout(function() {
r.fire("fileAdded", a, n);
}, 0);
})(), u();
}
var _ = i.generateUniqueIdentifier(e, n);
_ && typeof _.then == "function" ? _.then(function(e) {
g(e);
}, function() {
u();
}) : g(_);
});
};
function f(e, n, r) {
var a = this;
a.opts = {}, a.getOpt = e.getOpt, a._prevProgress = 0, a.resumableObj = e, a.file = n, a.fileName = n.fileName || n.name, a.size = n.size, a.relativePath = n.relativePath || n.webkitRelativePath || a.fileName, a.uniqueIdentifier = r, a._pause = !1, a.container = "";
var o = r !== void 0, s = function(e, n) {
switch (e) {
case "progress":
a.resumableObj.fire("fileProgress", a, n);
break;
case "error":
a.abort(), o = !0, a.chunks = [], a.resumableObj.fire("fileError", a, n);
break;
case "success":
if (o) return;
a.resumableObj.fire("fileProgress", a), a.isComplete() && a.resumableObj.fire("fileSuccess", a, n);
break;
case "retry":
a.resumableObj.fire("fileRetry", a);
break;
}
};
return a.chunks = [], a.abort = function() {
var e = 0;
i.each(a.chunks, function(n) {
n.status() == "uploading" && (n.abort(), e++);
}), e > 0 && a.resumableObj.fire("fileProgress", a);
}, a.cancel = function() {
var e = a.chunks;
a.chunks = [], i.each(e, function(e) {
e.status() == "uploading" && (e.abort(), a.resumableObj.uploadNextChunk());
}), a.resumableObj.removeFile(a), a.resumableObj.fire("fileProgress", a);
}, a.retry = function() {
a.bootstrap();
var e = !1;
a.resumableObj.on("chunkingComplete", function() {
e || a.resumableObj.upload(), e = !0;
});
}, a.bootstrap = function() {
a.abort(), o = !1, a.chunks = [], a._prevProgress = 0;
for (var e = a.getOpt("forceChunkSize") ? Math.ceil : Math.floor, n = Math.max(e(a.file.size / a.getOpt("chunkSize")), 1), r = 0; r < n; r++) (function(e) {
window.setTimeout(function() {
a.chunks.push(new p(a.resumableObj, a, e, s)), a.resumableObj.fire("chunkingProgress", a, e / n);
}, 0);
})(r);
window.setTimeout(function() {
a.resumableObj.fire("chunkingComplete", a);
}, 0);
}, a.progress = function() {
if (o) return 1;
var e = 0, n = !1;
return i.each(a.chunks, function(r) {
r.status() == "error" && (n = !0), e += r.progress(!0);
}), e = n || e > .99999 ? 1 : e, e = Math.max(a._prevProgress, e), a._prevProgress = e, e;
}, a.isUploading = function() {
var e = !1;
return i.each(a.chunks, function(n) {
if (n.status() == "uploading") return e = !0, !1;
}), e;
}, a.isComplete = function() {
var e = !1;
return i.each(a.chunks, function(n) {
var r = n.status();
if (r == "pending" || r == "uploading" || n.preprocessState === 1) return e = !0, !1;
}), !e;
}, a.pause = function(e) {
e === void 0 ? a._pause = !a._pause : a._pause = e;
}, a.isPaused = function() {
return a._pause;
}, a.resumableObj.fire("chunkingStart", a), a.bootstrap(), this;
}
function p(e, n, r, a) {
var o = this;
o.opts = {}, o.getOpt = e.getOpt, o.resumableObj = e, o.fileObj = n, o.fileObjSize = n.size, o.fileObjType = n.file.type, o.offset = r, o.callback = a, o.lastProgressCallback = /* @__PURE__ */ new Date(), o.tested = !1, o.retries = 0, o.pendingRetry = !1, o.preprocessState = 0;
var s = o.getOpt("chunkSize");
return o.loaded = 0, o.startByte = o.offset * s, o.endByte = Math.min(o.fileObjSize, (o.offset + 1) * s), o.fileObjSize - o.endByte < s && !o.getOpt("forceChunkSize") && (o.endByte = o.fileObjSize), o.xhr = null, o.test = function() {
o.xhr = new XMLHttpRequest();
var e = function(e) {
o.tested = !0;
var n = o.status();
n == "success" ? (o.callback(n, o.message()), o.resumableObj.uploadNextChunk()) : o.send();
};
o.xhr.addEventListener("load", e, !1), o.xhr.addEventListener("error", e, !1), o.xhr.addEventListener("timeout", e, !1);
var n = [], r = o.getOpt("parameterNamespace"), a = o.getOpt("query");
typeof a == "function" && (a = a(o.fileObj, o)), i.each(a, function(e, i) {
n.push([encodeURIComponent(r + e), encodeURIComponent(i)].join("="));
}), n = n.concat([
["chunkNumberParameterName", o.offset + 1],
["chunkSizeParameterName", o.getOpt("chunkSize")],
["currentChunkSizeParameterName", o.endByte - o.startByte],
["totalSizeParameterName", o.fileObjSize],
["typeParameterName", o.fileObjType],
["identifierParameterName", o.fileObj.uniqueIdentifier],
["fileNameParameterName", o.fileObj.fileName],
["relativePathParameterName", o.fileObj.relativePath],
["totalChunksParameterName", o.fileObj.chunks.length]
].filter(function(e) {
return o.getOpt(e[0]);
}).map(function(e) {
return [r + o.getOpt(e[0]), encodeURIComponent(e[1])].join("=");
})), o.xhr.open(o.getOpt("testMethod"), i.getTarget("test", n)), o.xhr.timeout = o.getOpt("xhrTimeout"), o.xhr.withCredentials = o.getOpt("withCredentials");
var s = o.getOpt("headers");
typeof s == "function" && (s = s(o.fileObj, o)), i.each(s, function(e, n) {
o.xhr.setRequestHeader(e, n);
}), o.xhr.send(null);
}, o.preprocessFinished = function() {
o.preprocessState = 2, o.send();
}, o.send = function() {
var e = o.getOpt("preprocess");
if (typeof e == "function") switch (o.preprocessState) {
case 0:
o.preprocessState = 1, e(o);
return;
case 1: return;
case 2: break;
}
if (o.getOpt("testChunks") && !o.tested) {
o.test();
return;
}
o.xhr = new XMLHttpRequest(), o.xhr.upload.addEventListener("progress", function(e) {
/* @__PURE__ */ new Date() - o.lastProgressCallback > o.getOpt("throttleProgressCallbacks") * 1e3 && (o.callback("progress"), o.lastProgressCallback = /* @__PURE__ */ new Date()), o.loaded = e.loaded || 0;
}, !1), o.loaded = 0, o.pendingRetry = !1, o.callback("progress");
var n = function(e) {
var n = o.status();
if (n == "success" || n == "error") o.callback(n, o.message()), o.resumableObj.uploadNextChunk();
else {
o.callback("retry", o.message()), o.abort(), o.retries++;
var r = o.getOpt("chunkRetryInterval");
r === void 0 ? o.send() : (o.pendingRetry = !0, setTimeout(o.send, r));
}
};
o.xhr.addEventListener("load", n, !1), o.xhr.addEventListener("error", n, !1), o.xhr.addEventListener("timeout", n, !1);
var r = [
["chunkNumberParameterName", o.offset + 1],
["chunkSizeParameterName", o.getOpt("chunkSize")],
["currentChunkSizeParameterName", o.endByte - o.startByte],
["totalSizeParameterName", o.fileObjSize],
["typeParameterName", o.fileObjType],
["identifierParameterName", o.fileObj.uniqueIdentifier],
["fileNameParameterName", o.fileObj.fileName],
["relativePathParameterName", o.fileObj.relativePath],
["totalChunksParameterName", o.fileObj.chunks.length]
].filter(function(e) {
return o.getOpt(e[0]);
}).reduce(function(e, n) {
return e[o.getOpt(n[0])] = n[1], e;
}, {}), a = o.getOpt("query");
typeof a == "function" && (a = a(o.fileObj, o)), i.each(a, function(e, n) {
r[e] = n;
});
var s = o.fileObj.file.slice ? "slice" : o.fileObj.file.mozSlice ? "mozSlice" : o.fileObj.file.webkitSlice ? "webkitSlice" : "slice", c = o.fileObj.file[s](o.startByte, o.endByte, o.getOpt("setChunkTypeFromFile") ? o.fileObj.file.type : ""), l = null, u = [], d = o.getOpt("parameterNamespace");
if (o.getOpt("method") === "octet") l = c, i.each(r, function(e, n) {
u.push([encodeURIComponent(d + e), encodeURIComponent(n)].join("="));
});
else if (l = new FormData(), i.each(r, function(e, n) {
l.append(d + e, n), u.push([encodeURIComponent(d + e), encodeURIComponent(n)].join("="));
}), o.getOpt("chunkFormat") == "blob") l.append(d + o.getOpt("fileParameterName"), c, o.fileObj.fileName);
else if (o.getOpt("chunkFormat") == "base64") {
var f = new FileReader();
f.onload = function(e) {
l.append(d + o.getOpt("fileParameterName"), f.result), o.xhr.send(l);
}, f.readAsDataURL(c);
}
var p = i.getTarget("upload", u), m = o.getOpt("uploadMethod");
o.xhr.open(m, p), o.getOpt("method") === "octet" && o.xhr.setRequestHeader("Content-Type", "application/octet-stream"), o.xhr.timeout = o.getOpt("xhrTimeout"), o.xhr.withCredentials = o.getOpt("withCredentials");
var g = o.getOpt("headers");
typeof g == "function" && (g = g(o.fileObj, o)), i.each(g, function(e, n) {
o.xhr.setRequestHeader(e, n);
}), o.getOpt("chunkFormat") == "blob" && o.xhr.send(l);
}, o.abort = function() {
o.xhr && o.xhr.abort(), o.xhr = null;
}, o.status = function() {
return o.pendingRetry ? "uploading" : o.xhr ? o.xhr.readyState < 4 ? "uploading" : o.xhr.status == 200 || o.xhr.status == 201 ? "success" : i.contains(o.getOpt("permanentErrors"), o.xhr.status) || o.retries >= o.getOpt("maxChunkRetries") ? "error" : (o.abort(), "pending") : "pending";
}, o.message = function() {
return o.xhr ? o.xhr.responseText : "";
}, o.progress = function(e) {
e === void 0 && (e = !1);
var n = e ? (o.endByte - o.startByte) / o.fileObjSize : 1;
if (o.pendingRetry) return 0;
switch ((!o.xhr || !o.xhr.status) && (n *= .95), o.status()) {
case "success":
case "error": return 1 * n;
case "pending": return 0 * n;
default: return o.loaded / (o.endByte - o.startByte) * n;
}
}, this;
}
return r.uploadNextChunk = function() {
var e = !1;
if (r.getOpt("prioritizeFirstAndLastChunk") && (i.each(r.files, function(n) {
if (n.chunks.length && n.chunks[0].status() == "pending" && n.chunks[0].preprocessState === 0) return n.chunks[0].send(), e = !0, !1;
if (n.chunks.length > 1 && n.chunks[n.chunks.length - 1].status() == "pending" && n.chunks[n.chunks.length - 1].preprocessState === 0) return n.chunks[n.chunks.length - 1].send(), e = !0, !1;
}), e) || (i.each(r.files, function(n) {
if (n.isPaused() === !1 && i.each(n.chunks, function(n) {
if (n.status() == "pending" && n.preprocessState === 0) return n.send(), e = !0, !1;
}), e) return !1;
}), e)) return !0;
var n = !1;
return i.each(r.files, function(e) {
if (!e.isComplete()) return n = !0, !1;
}), n || r.fire("complete"), !1;
}, r.assignBrowse = function(e, n) {
e.length === void 0 && (e = [e]), i.each(e, function(e) {
var i;
e.tagName === "INPUT" && e.type === "file" ? i = e : (i = document.createElement("input"), i.setAttribute("type", "file"), i.style.display = "none", e.addEventListener("click", function() {
i.style.opacity = 0, i.style.display = "block", i.focus(), i.click(), i.style.display = "none";
}, !1), e.appendChild(i));
var a = r.getOpt("maxFiles");
a === void 0 || a != 1 ? i.setAttribute("multiple", "multiple") : i.removeAttribute("multiple"), n ? i.setAttribute("webkitdirectory", "webkitdirectory") : i.removeAttribute("webkitdirectory");
var o = r.getOpt("fileType");
o !== void 0 && o.length >= 1 ? i.setAttribute("accept", o.map(function(e) {
return "." + e;
}).join(",")) : i.removeAttribute("accept"), i.addEventListener("change", function(e) {
d(e.target.files, e), r.getOpt("clearInput") && (e.target.value = "");
}, !1);
});
}, r.assignDrop = function(e) {
e.length === void 0 && (e = [e]), i.each(e, function(e) {
e.addEventListener("dragover", o, !1), e.addEventListener("dragenter", o, !1), e.addEventListener("drop", a, !1);
});
}, r.unAssignDrop = function(e) {
e.length === void 0 && (e = [e]), i.each(e, function(e) {
e.removeEventListener("dragover", o), e.removeEventListener("dragenter", o), e.removeEventListener("drop", a);
});
}, r.isUploading = function() {
var e = !1;
return i.each(r.files, function(n) {
if (n.isUploading()) return e = !0, !1;
}), e;
}, r.upload = function() {
if (!r.isUploading()) {
r.fire("uploadStart");
for (var e = 1; e <= r.getOpt("simultaneousUploads"); e++) r.uploadNextChunk();
}
}, r.pause = function() {
i.each(r.files, function(e) {
e.abort();
}), r.fire("pause");
}, r.cancel = function() {
r.fire("beforeCancel");
for (var e = r.files.length - 1; e >= 0; e--) r.files[e].cancel();
r.fire("cancel");
}, r.progress = function() {
var e = 0, n = 0;
return i.each(r.files, function(r) {
e += r.progress() * r.size, n += r.size;
}), n > 0 ? e / n : 0;
}, r.addFile = function(e, n) {
d([e], n);
}, r.addFiles = function(e, n) {
d(e, n);
}, r.removeFile = function(e) {
for (var n = r.files.length - 1; n >= 0; n--) r.files[n] === e && r.files.splice(n, 1);
}, r.getFromUniqueIdentifier = function(e) {
var n = !1;
return i.each(r.files, function(r) {
r.uniqueIdentifier == e && (n = r);
}), n;
}, r.getSize = function() {
var e = 0;
return i.each(r.files, function(n) {
e += n.size;
}), e;
}, r.handleDropEvent = function(e) {
a(e);
}, r.handleChangeEvent = function(e) {
d(e.target.files, e), e.target.value = "";
}, r.updateQuery = function(e) {
r.opts.query = e;
}, this;
};
n === void 0 ? typeof define == "function" && define.amd ? define(function() {
return e;
}) : window.Resumable = e : n.exports = e;
})();
})))(), 1);
function _isSlot$7(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var NewbieUploader_default = /* @__PURE__ */ defineComponent({
name: "NewbieUploader",
props: {
value: {
type: [
Object,
Array,
String
],
default: () => ({})
},
name: {
type: String,
default: "file"
},
headers: {
type: Object,
default: () => ({})
},
accept: {
type: String,
default: ""
},
type: {
type: String,
default: "file"
},
disabled: {
type: Boolean,
default: !1
},
maxSize: {
type: Number,
default: 20
},
maxNum: {
type: Number,
default: 1
},
multiple: {
type: Boolean,
default: !1
},
multipart: {
type: Boolean,
default: !1
},
action: {
type: String,
default: ""
},
extraData: {
type: Object,
default: () => ({})
},
uploadText: {
type: String,
default: ""
},
disk: {
type: String,
default: ""
},
preview: {
type: Function,
default: null
},
uploadProps: {
type: Object,
default: () => ({})
}
},
emits: ["update:value", "success"],
setup(e, { emit: n }) {
let { STATE_CODE_SUCCESS: r } = STATUS, i = Form.useInjectFormItemContext(), a = inject(NEWBIE_UPLOADER, () => ({})), o = a.uploadUrl || "", s = a.defaultFileItem || {}, l = a.defaultPreview || null, { url: u, path: d, name: f } = s, p = reactive({
fileList: [],
previewVisible: !1,
previewCurrent: 0,
progress: e.multipart ? {
strokeColor: {
"0%": "#108ee9",
"100%": "#87d068"
},
strokeWidth: 3,
format: (e) => `${parseFloat(e.toFixed(2))}%`
} : null
}), m = computed(() => !e.maxNum || e.maxNum === 1), g = computed(() => p.fileList.length >= e.maxNum), _ = computed(() => e.type === "picture-card" || e.type === "picture"), v = (n) => {
isArray(n) || (n = [n]);
let r = n.filter((e) => e.done || !!e[d] || !!e[f]).map((n) => ({
...pick(n, Object.values(s)),
_type: "file",
_disk: e.disk
}));
return m.value ? r[0] || null : r;
}, b = (e) => {
if (!e) return [];
e = isArray(e) ? e : [e], p.fileList = e.filter((e) => e[u] || e[f] || e[d]).map((e) => ({
uid: random(1, 1e7),
done: !0,
name: e[f] || useT("form.attachment"),
url: e[u],
_type: "file",
...e
})), n("update:value", v(p.fileList));
};
onMounted(() => {
b(e.value);
}), watch(() => e.value, (e) => {
e && !isArray(e) && (e = [e]), isEqual(map(e, d).sort(), map(p.fileList, d).sort()) || b(e);
});
let x = (n) => {
let r = n[u];
r && (r = r.toLowerCase(), r.includes(".jpg") || r.includes(".jpeg") || r.includes(".png") || r.includes(".gif") || _.value ? (p.previewCurrent = p.fileList.findIndex((e) => e.uid === n.uid), p.previewVisible = !0) : e.preview ? e.preview(n) : l ? l(n) : location.href = n[u]);
}, S = (e) => {
let r = v(e);
n("update:value", r), n("success", r), i.onFieldChange();
}, w = ({ file: e, fileList: n }) => {
if (n = n.map((e) => {
if (e.status === "done" && e.response) {
let n = e.response;
n.result[d] ? (e = {
...e,
...pick(n.result, Object.values(s))
}, e.done = !0) : e.isRemoved = !0;
} else e.status === "error" && (e.isRemoved = !0);
return e;
}).filter((e) => !e.isRemoved), e.status === "removed") S(n);
else if (e.status === "done" && e.response?.status !== r) message.error(e.response?.result || useT("form.upload-fail"));
else if (e.status === "error" && e.error) e.error.status === 413 ? message.error(`${e.error.status}: ${useT("form.upload-size-limit")}`) : message.error(e.error.message || useT("form.upload-fail"));
else if (!e.status) {
let r = -1;
n.forEach((n, i) => {
n.uid === e.uid && (r = i);
}), r >= 0 && n.splice(r, 1);
}
every(n, (e) => e.done) && S(n), p.fileList = n;
}, T = (n) => n.size > e.maxSize * 1024 * 1024 ? (message.error(useT("form.upload-size-max", { size: e.maxSize })), !1) : g.value ? (message.error(useT("form.upload-num-max", { num: e.maxNum })), !1) : !0, E = async ({ action: n, data: r, file: i, filename: a, headers: o, onError: s, onProgress: c, onSuccess: l, withCredentials: u }) => {
console.log("Using uploadAction");
let d = new FormData();
r && Object.keys(r).forEach((e) => {
d.append(e, r[e]);
}), d.append(a, i), e.disk && d.append("_disk", e.disk);
try {
l(await useFetch().post(n, d, {
withCredentials: u,
headers: o,
onUploadProgress: ({ total: e, loaded: n }) => {
c({ percent: parseInt(Math.round(n / e * 100).toFixed(2)) }, i);
}
}), i);
} catch (e) {
s(e);
}
return { abort() {
console.log("upload progress is aborted.");
} };
}, D = async ({ action: n, data: r, file: i, headers: a, onError: o, onProgress: s, onSuccess: c }) => {
r ||= {}, e.disk && (r._disk = e.disk);
let l = new import_resumable.default({
chunkSize: 1 * 1024 * 1024,
forceChunkSize: !1,
simultaneousUploads: 3,
testChunks: !1,
throttleProgressCallbacks: 1,
target: n,
query: r,
headers: a
});
l.on("fileAdded", () => {
l.upload();
}), l.on("fileProgress", (e) => {
s({ percent: e.progress() * 100 });
}), l.on("fileSuccess", (e, n) => {
c(JSON.parse(n), e);
}), l.on("fileError", (e) => {
o(e);
}), l.addFile(i);
}, k = () => e.disabled ? null : _.value ? g.value ? null : [createVNode(CloudUploadOutlined, null, null), createVNode("div", { class: "newbie-upload-text" }, [useT("form.upload")])] : !_.value && !g.value ? [createVNode(NewbieButton_default, {
label: e.uploadText || useT("form.upload"),
type: "primary",
icon: createVNode(CloudUploadOutlined, null, null)
}, null)] : null;
return () => {
let n, r;
return createVNode("div", { class: "newbie-uploader" }, [createVNode(Upload, mergeProps({
fileList: p.fileList,
"onUpdate:fileList": (e) => p.fileList = e,
class: `newbie-upload ${_.value ? "is-image" : ""}`,
name: e.name,
listType: e.type,
disabled: e.disabled,
accept: e.accept,
action: e.action || o,
headers: e.headers,
data: e.extraData,
multiple: e.multiple,
progress: p.progress,
beforeUpload: T,
customRequest: e.multipart ? D : E,
onPreview: x,
onChange: w
}, e.uploadProps), _isSlot$7(n = k()) ? n : { default: () => [n] }), createVNode(ImagePreviewGroup, { preview: {
visible: p.previewVisible,
onVisibleChange: (e) => p.previewVisible = e,
current: p.previewCurrent
} }, _isSlot$7(r = p.fileList.map((e) => createVNode(Image$1, {
style: { display: "none" },
src: e.url
}, null))) ? r : { default: () => [r] })]);
};
}
}), Uploader_default = (e, n) => createVNode(NewbieUploader_default, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
key: e.key,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, e.defaultProps), { ...e.defaultSlots }), Editor_default = (e, n) => createVNode(NewbieEditor_default, mergeProps({
key: e.key,
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
readonly: e.readonly,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
placeholder: placeholder(e)
}, e.defaultProps), null), Text_default = (e, n) => {
let r = n[e.key];
return r ? isArray(r) ? r.map((e) => createVNode(Tag, e.defaultProps, { default: () => e })) : createVNode(Tag, e.defaultProps, { default: () => r }) : null;
}, lib_exports = /* @__PURE__ */ __export({
Vue: () => Vue,
Vue2: () => void 0,
del: () => del,
install: () => install,
isVue2: () => !1,
isVue3: () => !0,
set: () => set
}, 1);
import * as import_vue from "vue";
__reExport(lib_exports, import_vue, void 0, 1);
function install() {}
function set(e, n, r) {
return Array.isArray(e) ? (e.length = Math.max(e.length, n), e.splice(n, 1, r), r) : (e[n] = r, r);
}
function del(e, n) {
if (Array.isArray(e)) {
e.splice(n, 1);
return;
}
delete e[n];
}
function tryOnScopeDispose$1(e) {
return (0, lib_exports.getCurrentScope)() ? ((0, lib_exports.onScopeDispose)(e), !0) : !1;
}
function toValue$1(e) {
return typeof e == "function" ? e() : (0, lib_exports.unref)(e);
}
var isClient$1 = typeof window < "u", noop$1 = () => {};
function createFilterWrapper$1(e, n) {
function r(...r) {
return new Promise((i, a) => {
Promise.resolve(e(() => n.apply(this, r), {
fn: n,
thisArg: this,
args: r
})).then(i).catch(a);
});
}
return r;
}
function debounceFilter$1(e, n = {}) {
let r, i, a = noop$1, o = (e) => {
clearTimeout(e), a(), a = noop$1;
};
return (s) => {
let c = toValue$1(e), l = toValue$1(n.maxWait);
return r && o(r), c <= 0 || l !== void 0 && l <= 0 ? (i &&= (o(i), null), Promise.resolve(s())) : new Promise((e, u) => {
a = n.rejectOnCancel ? u : e, l && !i && (i = setTimeout(() => {
r && o(r), i = null, e(s());
}, l)), r = setTimeout(() => {
i && o(i), i = null, e(s());
}, c);
});
};
}
function throttleFilter$1(e, n = !0, r = !0, i = !1) {
let a = 0, o, s = !0, c = noop$1, l, u = () => {
o && (clearTimeout(o), o = void 0, c(), c = noop$1);
};
return (d) => {
let f = toValue$1(e), p = Date.now() - a, m = () => l = d();
return u(), f <= 0 ? (a = Date.now(), m()) : (p > f && (r || !s) ? (a = Date.now(), m()) : n && (l = new Promise((e, n) => {
c = i ? n : e, o = setTimeout(() => {
a = Date.now(), s = !0, e(m()), u();
}, Math.max(0, f - p));
})), !r && !o && (o = setTimeout(() => s = !0, f)), s = !1, l);
};
}
function toRef$2(...e) {
if (e.length !== 1) return (0, lib_exports.toRef)(...e);
let n = e[0];
return typeof n == "function" ? (0, lib_exports.readonly)((0, lib_exports.customRef)(() => ({
get: n,
set: noop$1
}))) : (0, lib_exports.ref)(n);
}
function useDebounceFn$1(e, n = 200, r = {}) {
return createFilterWrapper$1(debounceFilter$1(n, r), e);
}
function useThrottleFn$1(e, n = 200, r = !1, i = !0, a = !1) {
return createFilterWrapper$1(throttleFilter$1(n, r, i, a), e);
}
var __defProp$9 = Object.defineProperty, __defProps$7$1 = Object.defineProperties, __getOwnPropDescs$7$1 = Object.getOwnPropertyDescriptors, __getOwnPropSymbols$b = Object.getOwnPropertySymbols, __hasOwnProp$b = Object.prototype.hasOwnProperty, __propIsEnum$b = Object.prototype.propertyIsEnumerable, __defNormalProp$9 = (e, n, r) => n in e ? __defProp$9(e, n, {
enumerable: !0,
configurable: !0,
writable: !0,
value: r
}) : e[n] = r, __spreadValues$9 = (e, n) => {
for (var r in n ||= {}) __hasOwnProp$b.call(n, r) && __defNormalProp$9(e, r, n[r]);
if (__getOwnPropSymbols$b) for (var r of __getOwnPropSymbols$b(n)) __propIsEnum$b.call(n, r) && __defNormalProp$9(e, r, n[r]);
return e;
}, __spreadProps$7$1 = (e, n) => __defProps$7$1(e, __getOwnPropDescs$7$1(n));
function toRefs$2(e) {
if (!(0, lib_exports.isRef)(e)) return (0, lib_exports.toRefs)(e);
let n = Array.isArray(e.value) ? Array(e.value.length) : {};
for (let r in e.value) n[r] = (0, lib_exports.customRef)(() => ({
get() {
return e.value[r];
},
set(n) {
if (Array.isArray(e.value)) {
let i = [...e.value];
i[r] = n, e.value = i;
} else {
let i = __spreadProps$7$1(__spreadValues$9({}, e.value), { [r]: n });
Object.setPrototypeOf(i, Object.getPrototypeOf(e.value)), e.value = i;
}
}
}));
return n;
}
function tryOnMounted$1(e, n = !0) {
(0, lib_exports.getCurrentInstance)() ? (0, lib_exports.onMounted)(e) : n ? e() : (0, lib_exports.nextTick)(e);
}
function useTimeoutFn$1(e, n, r = {}) {
let { immediate: i = !0 } = r, a = (0, lib_exports.ref)(!1), o = null;
function s() {
o &&= (clearTimeout(o), null);
}
function c() {
a.value = !1, s();
}
function l(...r) {
s(), a.value = !0, o = setTimeout(() => {
a.value = !1, o = null, e(...r);
}, toValue$1(n));
}
return i && (a.value = !0, isClient$1 && l()), tryOnScopeDispose$1(c), {
isPending: (0, lib_exports.readonly)(a),
start: l,
stop: c
};
}
function unrefElement$2(e) {
let n = toValue$1(e);
return n?.$el ?? n;
}
var defaultWindow$2 = isClient$1 ? window : void 0;
isClient$1 && window.document;
var defaultNavigator$1 = isClient$1 ? window.navigator : void 0;
isClient$1 && window.location;
function useEventListener$2(...e) {
let n, r, i, a;
if (typeof e[0] == "string" || Array.isArray(e[0]) ? ([r, i, a] = e, n = defaultWindow$2) : [n, r, i, a] = e, !n) return noop$1;
Array.isArray(r) || (r = [r]), Array.isArray(i) || (i = [i]);
let o = [], s = () => {
o.forEach((e) => e()), o.length = 0;
}, c = (e, n, r, i) => (e.addEventListener(n, r, i), () => e.removeEventListener(n, r, i)), l = (0, lib_exports.watch)(() => [unrefElement$2(n), toValue$1(a)], ([e, n]) => {
s(), e && o.push(...r.flatMap((r) => i.map((i) => c(e, r, i, n))));
}, {
immediate: !0,
flush: "post"
}), u = () => {
l(), s();
};
return tryOnScopeDispose$1(u), u;
}
function useMounted$1() {
let e = (0, lib_exports.ref)(!1);
return (0, lib_exports.getCurrentInstance)() && (0, lib_exports.onMounted)(() => {
e.value = !0;
}), e;
}
function useSupported$1(e) {
let n = useMounted$1();
return (0, lib_exports.computed)(() => (n.value, !!e()));
}
function useMediaQuery(e, n = {}) {
let { window: r = defaultWindow$2 } = n, i = useSupported$1(() => r && "matchMedia" in r && typeof r.matchMedia == "function"), a, o = (0, lib_exports.ref)(!1), s = () => {
a && ("removeEventListener" in a ? a.removeEventListener("change", c) : a.removeListener(c));
}, c = () => {
i.value && (s(), a = r.matchMedia(toRef$2(e).value), o.value = !!a?.matches, a && ("addEventListener" in a ? a.addEventListener("change", c) : a.addListener(c)));
};
return (0, lib_exports.watchEffect)(c), tryOnScopeDispose$1(() => s()), o;
}
function useClipboard(e = {}) {
let { navigator: n = defaultNavigator$1, read: r = !1, source: i, copiedDuring: a = 1500, legacy: o = !1 } = e, s = ["copy", "cut"], c = useSupported$1(() => n && "clipboard" in n), l = (0, lib_exports.computed)(() => c.value || o), u = (0, lib_exports.ref)(""), d = (0, lib_exports.ref)(!1), f = useTimeoutFn$1(() => d.value = !1, a);
function p() {
c.value ? n.clipboard.readText().then((e) => {
u.value = e;
}) : u.value = _();
}
if (l.value && r) for (let e of s) useEventListener$2(e, p);
async function m(e = toValue$1(i)) {
l.value && e != null && (c.value ? await n.clipboard.writeText(e) : g(e), u.value = e, d.value = !0, f.start());
}
function g(e) {
let n = document.createElement("textarea");
n.value = e ?? "", n.style.position = "absolute", n.style.opacity = "0", document.body.appendChild(n), n.select(), document.execCommand("copy"), n.remove();
}
function _() {
return ((document == null ? void 0 : document.getSelection)?.call(document))?.toString() ?? "";
}
return {
isSupported: l,
text: u,
copied: d,
copy: m
};
}
var __defProp$g = Object.defineProperty, __defProps$6 = Object.defineProperties, __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors, __getOwnPropSymbols$i = Object.getOwnPropertySymbols, __hasOwnProp$i = Object.prototype.hasOwnProperty, __propIsEnum$i = Object.prototype.propertyIsEnumerable, __defNormalProp$g = (e, n, r) => n in e ? __defProp$g(e, n, {
enumerable: !0,
configurable: !0,
writable: !0,
value: r
}) : e[n] = r, __spreadValues$g = (e, n) => {
for (var r in n ||= {}) __hasOwnProp$i.call(n, r) && __defNormalProp$g(e, r, n[r]);
if (__getOwnPropSymbols$i) for (var r of __getOwnPropSymbols$i(n)) __propIsEnum$i.call(n, r) && __defNormalProp$g(e, r, n[r]);
return e;
}, __spreadProps$6 = (e, n) => __defProps$6(e, __getOwnPropDescs$6(n));
function useDraggable$1(e, n = {}) {
let { pointerTypes: r, preventDefault: i, stopPropagation: a, exact: o, onMove: s, onEnd: c, onStart: l, initialValue: u, axis: d = "both", draggingElement: f = defaultWindow$2, handle: p = e } = n, m = (0, lib_exports.ref)(toValue$1(u) ?? {
x: 0,
y: 0
}), g = (0, lib_exports.ref)(), _ = (e) => r ? r.includes(e.pointerType) : !0, v = (e) => {
toValue$1(i) && e.preventDefault(), toValue$1(a) && e.stopPropagation();
}, y = (n) => {
if (!_(n) || toValue$1(o) && n.target !== toValue$1(e)) return;
let r = toValue$1(e).getBoundingClientRect(), i = {
x: n.clientX - r.left,
y: n.clientY - r.top
};
l?.(i, n) !== !1 && (g.value = i, v(n));
}, b = (e) => {
if (!_(e) || !g.value) return;
let { x: n, y: r } = m.value;
(d === "x" || d === "both") && (n = e.clientX - g.value.x), (d === "y" || d === "both") && (r = e.clientY - g.value.y), m.value = {
x: n,
y: r
}, s?.(m.value, e), v(e);
}, x = (e) => {
_(e) && g.value && (g.value = void 0, c?.(m.value, e), v(e));
};
if (isClient$1) {
let e = { capture: n.capture ?? !0 };
useEventListener$2(p, "pointerdown", y, e), useEventListener$2(f, "pointermove", b, e), useEventListener$2(f, "pointerup", x, e);
}
return __spreadProps$6(__spreadValues$g({}, toRefs$2(m)), {
position: m,
isDragging: (0, lib_exports.computed)(() => !!g.value),
style: (0, lib_exports.computed)(() => `left:${m.value.x}px;top:${m.value.y}px;`)
});
}
var ARRIVED_STATE_THRESHOLD_PIXELS$1 = 1;
function useScroll(e, n = {}) {
let { throttle: r = 0, idle: i = 200, onStop: a = noop$1, onScroll: o = noop$1, offset: s = {
left: 0,
right: 0,
top: 0,
bottom: 0
}, eventListenerOptions: c = {
capture: !1,
passive: !0
}, behavior: l = "auto" } = n, u = (0, lib_exports.ref)(0), d = (0, lib_exports.ref)(0), f = (0, lib_exports.computed)({
get() {
return u.value;
},
set(e) {
m(e, void 0);
}
}), p = (0, lib_exports.computed)({
get() {
return d.value;
},
set(e) {
m(void 0, e);
}
});
function m(n, r) {
var i;
let a = toValue$1(e);
a && ((i = a instanceof Document ? document.body : a) == null || i.scrollTo({
top: toValue$1(r) ?? p.value,
left: toValue$1(n) ?? f.value,
behavior: toValue$1(l)
}));
}
let g = (0, lib_exports.ref)(!1), _ = (0, lib_exports.reactive)({
left: !0,
right: !1,
top: !0,
bottom: !1
}), v = (0, lib_exports.reactive)({
left: !1,
right: !1,
top: !1,
bottom: !1
}), y = (e) => {
g.value && (g.value = !1, v.left = !1, v.right = !1, v.top = !1, v.bottom = !1, a(e));
}, b = useDebounceFn$1(y, r + i), x = (e) => {
let n = e === window ? e.document.documentElement : e === document ? e.documentElement : e, { display: r, flexDirection: i } = getComputedStyle(n), a = n.scrollLeft;
v.left = a < u.value, v.right = a > u.value;
let o = Math.abs(a) <= 0 + (s.left || 0), c = Math.abs(a) + n.clientWidth >= n.scrollWidth - (s.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS$1;
r === "flex" && i === "row-reverse" ? (_.left = c, _.right = o) : (_.left = o, _.right = c), u.value = a;
let l = n.scrollTop;
e === document && !l && (l = document.body.scrollTop), v.top = l < d.value, v.bottom = l > d.value;
let f = Math.abs(l) <= 0 + (s.top || 0), p = Math.abs(l) + n.clientHeight >= n.scrollHeight - (s.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS$1;
r === "flex" && i === "column-reverse" ? (_.top = p, _.bottom = f) : (_.top = f, _.bottom = p), d.value = l;
}, S = (e) => {
x(e.target === document ? e.target.documentElement : e.target), g.value = !0, b(e), o(e);
};
return useEventListener$2(e, "scroll", r ? useThrottleFn$1(S, r, !0, !1) : S, c), useEventListener$2(e, "scrollend", y, c), {
x: f,
y: p,
isScrolling: g,
arrivedState: _,
directions: v,
measure() {
let n = toValue$1(e);
n && x(n);
}
};
}
function useWindowSize(e = {}) {
let { window: n = defaultWindow$2, initialWidth: r = Infinity, initialHeight: i = Infinity, listenOrientation: a = !0, includeScrollbar: o = !0 } = e, s = (0, lib_exports.ref)(r), c = (0, lib_exports.ref)(i), l = () => {
n && (o ? (s.value = n.innerWidth, c.value = n.innerHeight) : (s.value = n.document.documentElement.clientWidth, c.value = n.document.documentElement.clientHeight));
};
return l(), tryOnMounted$1(l), useEventListener$2("resize", l, { passive: !0 }), a && (0, lib_exports.watch)(useMediaQuery("(orientation: portrait)"), () => l()), {
width: s,
height: c
};
}
var NewbieModal_default = /* @__PURE__ */ defineComponent({
name: "NewbieModal",
props: {
type: {
type: String,
default: "modal"
},
visible: {
type: Boolean,
default: !1
},
width: {
type: [Number, String],
default: 800
},
height: {
type: [Number, String],
default: 500
},
title: {
type: String,
default: ""
},
beforeClose: {
type: [Function, Object],
default: null
},
modalProps: {
type: Object,
default: () => ({})
}
},
emits: ["update:visible", "close"],
setup(e, { emit: n, slots: r }) {
let i = ref(null), a = ref(!1), o = ref(!1);
watch(() => e.visible, (e) => {
o.value = e;
}, { immediate: !0 });
let s = async () => {
if (!(e.beforeClose && isFunction(e.beforeClose) && !await e.beforeClose())) {
if (e.beforeClose && isObject(e.beforeClose)) {
let { title: r, content: i, okText: o, cancelText: s, trigger: c } = e.beforeClose;
if (isFunction(c) ? c() : c) {
Modal.confirm({
title: r || useT("common.action-prompt"),
content: i || useT("common.close-confirm"),
okText: o || useT("common.confirm"),
cancelText: s || useT("common.cancel"),
onOk: () => {
a.value = !1, n("update:visible", !1), n("close");
}
});
return;
}
}
a.value = !1, n("update:visible", !1), n("close");
}
}, { x: c, y: l, isDragging: u } = useDraggable$1(i), d = ref(0), f = ref(0), p = ref(!1), m = ref(0), g = ref(0), _ = ref(0), v = ref(0), b = ref({
left: 0,
right: 0,
top: 0,
bottom: 0
});
watch([c, l], () => {
if (!p.value) {
d.value = c.value, f.value = l.value;
let e = document.body.getBoundingClientRect(), n = i.value.getBoundingClientRect();
b.value.right = e.width - n.width, b.value.bottom = Math.max(e.height - n.height, 800), _.value = m.value, v.value = g.value;
}
p.value = !0;
}), watch(u, () => {
u || (p.value = !1);
}), watchEffect(() => {
p.value && (m.value = _.value + Math.min(Math.max(b.value.left, c.value), b.value.right) - d.value, g.value = v.value + Math.min(Math.max(b.value.top, l.value), b.value.bottom) - f.value);
});
let x = computed(() => ({ transform: `translate(${m.value}px, ${g.value}px)` })), S = () => createVNode("div", { class: "newbie-modal-header" }, [createVNode("span", {
class: "newbie-modal-title",
ref: i
}, [e.title]), createVNode("div", { class: "newbie-modal-actions" }, [a.value ? createVNode("a", { onClick: () => a.value = !1 }, [createVNode(CompressOutlined, { style: { fontSize: "16px" } }, null)]) : createVNode("a", { onClick: () => a.value = !0 }, [createVNode(ExpandOutlined, { style: { fontSize: "16px" } }, null)]), createVNode("a", { onClick: s }, [createVNode(CloseOutlined, { style: {
fontSize: "20px",
marginTop: "2px"
} }, null)])])]), C = () => createVNode(Modal, mergeProps({
footer: null,
wrapStyle: { overflow: "hidden" },
wrapClassName: `newbie-modal ${a.value ? "full-modal" : ""}`,
width: a.value ? "100%" : genPixel(e.width),
open: o.value,
"onUpdate:open": (e) => o.value = e,
bodyStyle: {
maxHeight: e.height ? genPixel(e.height) : "600px",
overflow: "auto"
},
closable: !1,
destroyOnClose: !0,
maskClosable: !1,
onCancel: s
}, e.modalProps), {
default: () => r.default?.(),
title: () => S(),
modalRender: ({ originVNode: e }) => createVNode("div", { style: x.value }, [e])
}), w = () => createVNode(Drawer, mergeProps({
title: e.title,
open: o.value,
"onUpdate:open": (e) => o.value = e,
closable: !1,
destroyOnClose: !0,
width: genPixel(e.width),
maskClosable: !1,
onClose: s
}, e.modalProps), {
default: () => r.default?.(),
extra: () => createVNode(CloseOutlined, { onClick: s }, null)
});
return () => createVNode("div", { class: "newbie-modal" }, [e.type === "modal" ? C() : w()]);
}
}), Input_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = [
{
label: useT("search.equal"),
value: "equal"
},
{
label: useT("search.not-equal"),
value: "notEqual"
},
{
label: useT("search.include"),
value: "include"
},
{
label: useT("search.exclude"),
value: "exclude"
},
{
label: useT("search.null"),
value: "null"
},
{
label: useT("search.not-null"),
value: "notNull"
}
];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = computed(() => n[e.key].value), s = ref();
e.collectItem = () => {
let r = n[e.key].value || null, i = null, o = find(a, { value: n[e.key].condition });
return o && ["null", "notNull"].includes(o.value) ? (r = null, i = `${e.title}${o?.label}`) : r && (i = `${e.title}${o?.label}: ${r}`), {
value: r,
searchLabel: i
};
};
let c = () => {
s.value?.focus();
}, l = createVNode(Input, mergeProps({
ref: s,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
disabled: n[e.key].condition === "null" || n[e.key].condition === "notNull",
class: `${i.inputClass || ""}`,
style: { width: "200px" },
placeholder: useI18nJoin(useT("common.search"), e.title)
}, e.inputProps), null);
return {
conditions: a,
Component: l,
displayValue: o,
onComponentOpen: c
};
}, Number_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = [
{
label: useT("search.equal"),
value: "equal"
},
{
label: useT("search.not-equal"),
value: "notEqual"
},
{
label: useT("search.less-than"),
value: "lessThan"
},
{
label: useT("search.greater-than"),
value: "greaterThan"
},
{
label: useT("search.between"),
value: "between"
}
];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = () => {
if (n[e.key].condition === "between" && n[e.key].value && isNumber(n[e.key].value[0]) && isNumber(n[e.key].value[1]) && n[e.key].value[0] > n[e.key].value[1]) {
let r = n[e.key].value[0];
n[e.key].value[0] = n[e.key].value[1], n[e.key].value[1] = r;
}
}, s = ref(null);
e.collectItem = () => {
let r = null, i = null, o = find(a, { value: n[e.key].condition })?.label;
return n[e.key].condition === "between" && n[e.key].value && every(n[e.key].value, isNumber) ? (r = n[e.key].value, i = `${e.title}${o}: ${r[0]} - ${r[1]} `) : n[e.key].condition !== "between" && n[e.key].value && isNumber(n[e.key].value[0]) && (r = n[e.key].value[0], i = `${e.title}${o}: ${r}`), {
value: r,
searchLabel: i
};
};
let c = () => {
s.value?.focus();
}, l = computed(() => n[e.key].condition === "between" && n[e.key].value && every(n[e.key].value, isNumber) ? [
createVNode(Tag, { style: { marginRight: 0 } }, { default: () => n[e.key].value[0] }),
createVNode("span", null, [createTextVNode(" - ")]),
createVNode(Tag, null, { default: () => n[e.key].value[1] })
] : n[e.key].value[0]), u = [createVNode(InputNumber, mergeProps({
ref: s,
value: n[e.key].value[0],
"onUpdate:value": (r) => n[e.key].value[0] = r,
style: { width: "200px" },
class: `${i.inputClass || ""}`,
placeholder: useI18nJoin(useT("common.search"), e.title),
onBlur: o
}, e.inputProps), null)];
return n[e.key].condition === "between" && (u = createVNode("div", { style: {
display: "flex",
alignItems: "center"
} }, [u.concat([createVNode("span", { style: { margin: "0 8px" } }, [createTextVNode("-")]), createVNode(InputNumber, mergeProps({
value: n[e.key].value[1],
"onUpdate:value": (r) => n[e.key].value[1] = r,
style: { width: "200px" },
class: `${i.inputClass || ""}`,
placeholder: useT("form.please-input"),
onBlur: o
}, e.inputProps), null)])])), {
conditions: a,
Component: u,
displayValue: l,
onComponentOpen: c
};
}, Select_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = [
{
label: useT("search.equal"),
value: "equal"
},
{
label: useT("search.not-equal"),
value: "notEqual"
},
{
label: useT("search.include"),
value: "include"
},
{
label: useT("search.exclude"),
value: "exclude"
}
];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = isFunction(e.options) ? e.options() : e.options;
o = o.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e);
let s = computed(() => createVNode(Space, null, { default: () => n[e.key].value.map((e) => createVNode(Tag, null, { default: () => find(o, { value: e })?.label })) }));
watch(() => n[e.key].condition, (r) => {
["equal", "notEqual"].includes(r) && (n[e.key].value = n[e.key].value?.[0] ? [n[e.key].value[0]] : []);
});
let c = ref(null);
e.collectItem = () => {
let r = null, i = null, s = find(a, { value: n[e.key].condition })?.label;
if (["equal", "notEqual"].includes(n[e.key].condition) && !isUndefined(n[e.key].value?.[0]) && !isNull(n[e.key].value?.[0])) r = n[e.key].value?.[0] || null, i = `${e.title}${s}: ${find(o, { value: r })?.label}`;
else if (!["equal", "notEqual"].includes(n[e.key].condition) && every(n[e.key].value, (e) => !isNull(e) && !isUndefined(e))) {
r = n[e.key].value;
let a = r.map((e) => find(o, { value: e })?.label)?.join(",");
i = `${e.title}${s}: ${a}`;
}
return {
value: r,
searchLabel: i
};
};
let l = () => {}, u = ["equal", "notEqual"].includes(n[e.key].condition) ? createVNode(Select, mergeProps({
ref: c,
value: n[e.key].value[0],
"onUpdate:value": (r) => n[e.key].value[0] = r,
allowClear: !0,
options: o,
style: { width: "200px" },
class: `${i.inputClass || ""}`,
defaultOpen: !0,
filterOption: !0,
showSearch: !0,
optionFilterProp: "label",
placeholder: useI18nJoin(useT("common.search"), e.title),
getPopupContainer: (e) => e.parentNode
}, e.inputProps), null) : createVNode(Select, mergeProps({
ref: c,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
options: o,
mode: "multiple",
class: `${i.inputClass || ""}`,
style: { width: "200px" },
defaultOpen: !0,
filterOption: !0,
optionFilterProp: "label",
placeholder: useI18nJoin(useT("common.search"), e.title),
getPopupContainer: (e) => e.parentNode
}, e.inputProps), null);
return {
conditions: a,
Component: u,
displayValue: s,
onComponentOpen: l
};
}, Textarea_default = (e, n, r) => {
let { searchProvider: i } = r, a = [{
label: useT("search.equal"),
value: "equal"
}, {
label: useT("search.exclude"),
value: "exclude"
}];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = computed(() => n[e.key].value && isString(n[e.key].value) ? n[e.key].value.trim().split("\n").join(",") : n[e.key].value && isArray(n[e.key].value) ? n[e.key].value.join(",") : ""), s = ref(null);
e.collectItem = () => {
let r = null, i = null, o = find(a, { value: n[e.key].condition })?.label;
return r = null, n[e.key].value && isString(n[e.key].value) ? r = n[e.key].value.trim().split("\n") : n[e.key].value && isArray(n[e.key].value) && (r = n[e.key].value), i = r ? `${e.title}${o}: ${r?.join(",")}` : null, {
value: r,
searchLabel: i
};
};
let c = () => {
s.value?.focus();
}, l = createVNode(Textarea, mergeProps({
ref: s,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
class: `${i.inputClass || ""}`,
style: { width: "200px" },
autoSize: {
minRows: 4,
maxRows: 8
},
placeholder: useT("search.textarea-placeholder", { title: e.title })
}, e.inputProps), null);
return {
conditions: a,
Component: l,
displayValue: o,
onComponentOpen: c
};
}, Date_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = [
{
label: useT("search.equal"),
value: "equal"
},
{
label: useT("search.less-than"),
value: "lessThan"
},
{
label: useT("search.greater-than"),
value: "greaterThan"
},
{
label: useT("search.between"),
value: "between"
},
{
label: useT("search.null"),
value: "null"
},
{
label: useT("search.not-null"),
value: "notNull"
}
];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = ref(null), s = e.inputProps?.format || "YYYY-MM-DD", c = e.inputProps?.picker || "date";
e.collectItem = () => {
let r = null, i = null, o = find(a, { value: n[e.key].condition })?.label;
return n[e.key].condition === "between" && n[e.key].value && every(n[e.key].value, dayjs.isDayjs) ? (r = n[e.key].value, i = `${e.title}${o}: ${r[0].format(s)} - ${r[1].format(s)} `) : n[e.key].condition !== "between" && dayjs.isDayjs(n[e.key].value[0]) && (r = n[e.key].value[0], i = `${e.title}${o}: ${r.format(s)}`), {
value: r,
searchLabel: i
};
};
let l = () => {
o.value?.focus();
}, u = computed(() => n[e.key].condition === "between" && n[e.key].value && every(n[e.key].value, dayjs.isDayjs) ? [
createVNode(Tag, { style: { marginRight: 0 } }, { default: () => n[e.key].value?.[0]?.format(s) }),
createVNode("span", null, [createTextVNode(" - ")]),
createVNode(Tag, null, { default: () => n[e.key].value?.[1]?.format(s) })
] : n[e.key].value?.[0]?.format(s)), d = ref([{
label: useT("search.last-week"),
value: dayjs().add(-7, "d")
}, {
label: useT("search.last-month"),
value: dayjs().add(-1, "month")
}]), f = ref([
{
label: useT("search.past-week"),
value: [dayjs().add(-7, "d"), dayjs()]
},
{
label: useT("search.past-two-weeks"),
value: [dayjs().add(-14, "d"), dayjs()]
},
{
label: useT("search.past-days", { days: 30 }),
value: [dayjs().add(-30, "d"), dayjs()]
},
{
label: useT("search.past-days", { days: 90 }),
value: [dayjs().add(-90, "d"), dayjs()]
}
]), p = n[e.key].condition === "between" ? createVNode(RangePicker, mergeProps({
ref: o,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
inputReadOnly: !0,
open: !0,
presets: c === "date" ? f.value : [],
style: { width: "400px" },
class: `${i.inputClass || ""}`,
placeholder: [useT("search.start-time"), useT("search.end-time")],
getPopupContainer: (e) => e?.parentNode
}, e.inputProps), null) : createVNode(DatePicker, mergeProps({
ref: o,
value: n[e.key].value[0],
"onUpdate:value": (r) => n[e.key].value[0] = r,
allowClear: !0,
open: !0,
inputReadOnly: !0,
presets: c === "date" ? d.value : [],
style: { width: "200px" },
class: `${i.inputClass || ""}`,
placeholder: useI18nJoin(useT("common.search"), e.title),
getPopupContainer: (e) => e?.parentNode
}, e.inputProps), null);
return {
conditions: a,
Component: p,
displayValue: u,
onComponentOpen: l
};
}, Cascader_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = isFunction(e.options) ? e.options() : e.options, o = [
{
label: useT("search.equal"),
value: "equal"
},
{
label: useT("search.not-equal"),
value: "notEqual"
},
{
label: useT("search.include-sub"),
value: "include"
}
];
e.conditions && e.conditions.length && (o = o.filter((n) => e.conditions.includes(n.value)));
let s = computed(() => useFindLabelsFromPath(a, n[e.key].value, e.inputProps?.fieldNames).join("/")), c = ref(null);
e.collectItem = () => {
let r = n[e.key].value || null, i = null, s = find(o, { value: n[e.key].condition })?.label;
return r && (i = `${e.title}${s}: ${useFindLabelsFromPath(a, r, e.inputProps?.fieldNames).join("/")}`), {
value: r,
searchLabel: i
};
};
let l = () => {
c.value?.focus();
}, u = createVNode(Cascader, mergeProps({
ref: c,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
open: !0,
class: `${i.inputClass || ""}`,
style: { width: "200px" },
options: a,
changeOnSelect: findIndex(o, { value: "include" }) > -1,
showSearch: !0,
placeholder: useI18nJoin(useT("common.search"), e.title),
getPopupContainer: (e) => e?.parentNode
}, e.inputProps), null);
return {
conditions: o,
Component: u,
displayValue: s,
onComponentOpen: l
};
}, Switch_default$1 = (e, n, r) => {
let { searchProvider: i } = r, a = [{
label: useT("search.equal"),
value: "equal"
}];
e.conditions && e.conditions.length && (a = a.filter((n) => e.conditions.includes(n.value)));
let o = [{
value: "checked",
label: e.options?.[0] || useT("common.yes")
}, {
value: "unchecked",
label: e.options?.[1] || useT("common.no")
}], s = computed(() => find(o, { value: n[e.key].value })?.label), c = ref(null);
e.collectItem = () => {
let r = n[e.key].value === void 0 ? void 0 : n[e.key].value === "checked", i = null, s = find(a, { value: n[e.key].condition });
return r && (i = `${e.title}${s?.label}: ${find(o, { value: n[e.key].value })?.label}`), {
value: r,
searchLabel: i
};
};
let l = () => {}, u = createVNode(Select, mergeProps({
ref: c,
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
allowClear: !0,
options: o,
style: { width: "200px" },
class: `${i.inputClass || ""}`,
defaultOpen: !0,
getPopupContainer: (e) => e.parentNode,
placeholder: useI18nJoin(useT("common.search"), e.title)
}, e.inputProps), null);
return {
conditions: a,
Component: u,
displayValue: s,
onComponentOpen: l
};
}, Expand_default = (e, n) => {
let { t: r, locale: i } = useI18n(), a = isFunction(e.options) ? e.options() : e.options;
a = a.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e);
let o = ref(e.options.map(() => !1));
n[e.key].value?.length && n[e.key].value.forEach((e) => {
let n = a.findIndex((n) => n.value === e);
n !== -1 && (o.value[n] = !0);
}), e.expandable === "multiple" && (n[e.key].condition = "include");
let s = (r) => {
e.expandable === "multiple" ? n[e.key].value = o.value.map((e, n) => {
if (e) return a[n].value;
}) : o.value.forEach((i, s) => {
if (s === r) {
i ? n[e.key].value = [a[r].value] : n[e.key].value = [];
return;
}
o.value[s] = !1;
});
};
return e.collectItem = () => {
let o = null, s = null;
if (e.expandable === "multiple") if (o = n[e.key].value?.filter((e) => e), !o || !o.length) o = null;
else {
let n = o.map((e) => find(a, { value: e })?.label)?.join(",");
s = `${useI18nJoin(e.title, r("search.include"), { locale: i })}: ${n}`;
}
else o = n[e.key].value?.[0] || null, s = `${useI18nJoin(e.title, r("search.equal"), { locale: i })}: ${find(a, { value: o })?.label}`;
return {
value: o,
searchLabel: s
};
}, createVNode("div", { class: "newbie-search-expand-item" }, [
createVNode("div", { class: "newbie-search-expand-item-title" }, [e.title, createTextVNode(":")]),
createVNode("div", { class: "newbie-search-expand-item-options" }, [createVNode(Space, {
size: [8, 2],
wrap: !0
}, { default: () => a.map((e, n) => createVNode(CheckableTag, {
checked: o.value[n],
"onUpdate:checked": (e) => o.value[n] = e,
onChange: () => s(n)
}, { default: () => e.label })) })]),
createVNode("div", { class: "newbie-search-expand-item-extra" }, [e.expandable === "multiple" ? r("search.multiple-choice-available") : ""])
]);
};
/**!
* Sortable 1.14.0
* @author RubaXa <trash@rubaxa.org>
* @author owenm <owen23355@gmail.com>
* @license MIT
*/
function ownKeys(e, n) {
var r = Object.keys(e);
if (Object.getOwnPropertySymbols) {
var i = Object.getOwnPropertySymbols(e);
n && (i = i.filter(function(n) {
return Object.getOwnPropertyDescriptor(e, n).enumerable;
})), r.push.apply(r, i);
}
return r;
}
function _objectSpread2(e) {
for (var n = 1; n < arguments.length; n++) {
var r = arguments[n] == null ? {} : arguments[n];
n % 2 ? ownKeys(Object(r), !0).forEach(function(n) {
_defineProperty(e, n, r[n]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(r)) : ownKeys(Object(r)).forEach(function(n) {
Object.defineProperty(e, n, Object.getOwnPropertyDescriptor(r, n));
});
}
return e;
}
function _typeof(e) {
"@babel/helpers - typeof";
return _typeof = typeof Symbol == "function" && typeof Symbol.iterator == "symbol" ? function(e) {
return typeof e;
} : function(e) {
return e && typeof Symbol == "function" && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e;
}, _typeof(e);
}
function _defineProperty(e, n, r) {
return n in e ? Object.defineProperty(e, n, {
value: r,
enumerable: !0,
configurable: !0,
writable: !0
}) : e[n] = r, e;
}
function _extends() {
return _extends = Object.assign || function(e) {
for (var n = 1; n < arguments.length; n++) {
var r = arguments[n];
for (var i in r) Object.prototype.hasOwnProperty.call(r, i) && (e[i] = r[i]);
}
return e;
}, _extends.apply(this, arguments);
}
function _objectWithoutPropertiesLoose(e, n) {
if (e == null) return {};
var r = {}, i = Object.keys(e), a, o;
for (o = 0; o < i.length; o++) a = i[o], !(n.indexOf(a) >= 0) && (r[a] = e[a]);
return r;
}
function _objectWithoutProperties(e, n) {
if (e == null) return {};
var r = _objectWithoutPropertiesLoose(e, n), i, a;
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(e);
for (a = 0; a < o.length; a++) i = o[a], !(n.indexOf(i) >= 0) && Object.prototype.propertyIsEnumerable.call(e, i) && (r[i] = e[i]);
}
return r;
}
var version$2 = "1.14.0";
function userAgent(e) {
if (typeof window < "u" && window.navigator) return !!/* @__PURE__ */ navigator.userAgent.match(e);
}
var IE11OrLess = userAgent(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i), Edge = userAgent(/Edge/i), FireFox = userAgent(/firefox/i), Safari = userAgent(/safari/i) && !userAgent(/chrome/i) && !userAgent(/android/i), IOS = userAgent(/iP(ad|od|hone)/i), ChromeForAndroid = userAgent(/chrome/i) && userAgent(/android/i), captureMode = {
capture: !1,
passive: !1
};
function on(e, n, r) {
e.addEventListener(n, r, !IE11OrLess && captureMode);
}
function off(e, n, r) {
e.removeEventListener(n, r, !IE11OrLess && captureMode);
}
function matches(e, n) {
if (n) {
if (n[0] === ">" && (n = n.substring(1)), e) try {
if (e.matches) return e.matches(n);
if (e.msMatchesSelector) return e.msMatchesSelector(n);
if (e.webkitMatchesSelector) return e.webkitMatchesSelector(n);
} catch {
return !1;
}
return !1;
}
}
function getParentOrHost(e) {
return e.host && e !== document && e.host.nodeType ? e.host : e.parentNode;
}
function closest(e, n, r, i) {
if (e) {
r ||= document;
do {
if (n != null && (n[0] === ">" ? e.parentNode === r && matches(e, n) : matches(e, n)) || i && e === r) return e;
if (e === r) break;
} while (e = getParentOrHost(e));
}
return null;
}
var R_SPACE = /\s+/g;
function toggleClass(e, n, r) {
e && n && (e.classList ? e.classList[r ? "add" : "remove"](n) : e.className = ((" " + e.className + " ").replace(R_SPACE, " ").replace(" " + n + " ", " ") + (r ? " " + n : "")).replace(R_SPACE, " "));
}
function css(e, n, r) {
var i = e && e.style;
if (i) {
if (r === void 0) return document.defaultView && document.defaultView.getComputedStyle ? r = document.defaultView.getComputedStyle(e, "") : e.currentStyle && (r = e.currentStyle), n === void 0 ? r : r[n];
!(n in i) && n.indexOf("webkit") === -1 && (n = "-webkit-" + n), i[n] = r + (typeof r == "string" ? "" : "px");
}
}
function matrix(e, n) {
var r = "";
if (typeof e == "string") r = e;
else do {
var i = css(e, "transform");
i && i !== "none" && (r = i + " " + r);
} while (!n && (e = e.parentNode));
var a = window.DOMMatrix || window.WebKitCSSMatrix || window.CSSMatrix || window.MSCSSMatrix;
return a && new a(r);
}
function find$1(e, n, r) {
if (e) {
var i = e.getElementsByTagName(n), a = 0, o = i.length;
if (r) for (; a < o; a++) r(i[a], a);
return i;
}
return [];
}
function getWindowScrollingElement() {
return document.scrollingElement || document.documentElement;
}
function getRect(e, n, r, i, a) {
if (!(!e.getBoundingClientRect && e !== window)) {
var o, s, c, l, u, d, f;
if (e !== window && e.parentNode && e !== getWindowScrollingElement() ? (o = e.getBoundingClientRect(), s = o.top, c = o.left, l = o.bottom, u = o.right, d = o.height, f = o.width) : (s = 0, c = 0, l = window.innerHeight, u = window.innerWidth, d = window.innerHeight, f = window.innerWidth), (n || r) && e !== window && (a ||= e.parentNode, !IE11OrLess)) do
if (a && a.getBoundingClientRect && (css(a, "transform") !== "none" || r && css(a, "position") !== "static")) {
var p = a.getBoundingClientRect();
s -= p.top + parseInt(css(a, "border-top-width")), c -= p.left + parseInt(css(a, "border-left-width")), l = s + o.height, u = c + o.width;
break;
}
while (a = a.parentNode);
if (i && e !== window) {
var m = matrix(a || e), g = m && m.a, _ = m && m.d;
m && (s /= _, c /= g, f /= g, d /= _, l = s + d, u = c + f);
}
return {
top: s,
left: c,
bottom: l,
right: u,
width: f,
height: d
};
}
}
function isScrolledPast(e, n, r) {
for (var i = getParentAutoScrollElement(e, !0), a = getRect(e)[n]; i;) {
var o = getRect(i)[r], s = void 0;
if (s = r === "top" || r === "left" ? a >= o : a <= o, !s) return i;
if (i === getWindowScrollingElement()) break;
i = getParentAutoScrollElement(i, !1);
}
return !1;
}
function getChild(e, n, r, i) {
for (var a = 0, o = 0, s = e.children; o < s.length;) {
if (s[o].style.display !== "none" && s[o] !== Sortable.ghost && (i || s[o] !== Sortable.dragged) && closest(s[o], r.draggable, e, !1)) {
if (a === n) return s[o];
a++;
}
o++;
}
return null;
}
function lastChild(e, n) {
for (var r = e.lastElementChild; r && (r === Sortable.ghost || css(r, "display") === "none" || n && !matches(r, n));) r = r.previousElementSibling;
return r || null;
}
function index(e, n) {
var r = 0;
if (!e || !e.parentNode) return -1;
for (; e = e.previousElementSibling;) e.nodeName.toUpperCase() !== "TEMPLATE" && e !== Sortable.clone && (!n || matches(e, n)) && r++;
return r;
}
function getRelativeScrollOffset(e) {
var n = 0, r = 0, i = getWindowScrollingElement();
if (e) do {
var a = matrix(e), o = a.a, s = a.d;
n += e.scrollLeft * o, r += e.scrollTop * s;
} while (e !== i && (e = e.parentNode));
return [n, r];
}
function indexOfObject(e, n) {
for (var r in e) if (e.hasOwnProperty(r)) {
for (var i in n) if (n.hasOwnProperty(i) && n[i] === e[r][i]) return Number(r);
}
return -1;
}
function getParentAutoScrollElement(e, n) {
if (!e || !e.getBoundingClientRect) return getWindowScrollingElement();
var r = e, i = !1;
do
if (r.clientWidth < r.scrollWidth || r.clientHeight < r.scrollHeight) {
var a = css(r);
if (r.clientWidth < r.scrollWidth && (a.overflowX == "auto" || a.overflowX == "scroll") || r.clientHeight < r.scrollHeight && (a.overflowY == "auto" || a.overflowY == "scroll")) {
if (!r.getBoundingClientRect || r === document.body) return getWindowScrollingElement();
if (i || n) return r;
i = !0;
}
}
while (r = r.parentNode);
return getWindowScrollingElement();
}
function extend(e, n) {
if (e && n) for (var r in n) n.hasOwnProperty(r) && (e[r] = n[r]);
return e;
}
function isRectEqual(e, n) {
return Math.round(e.top) === Math.round(n.top) && Math.round(e.left) === Math.round(n.left) && Math.round(e.height) === Math.round(n.height) && Math.round(e.width) === Math.round(n.width);
}
var _throttleTimeout;
function throttle$1(e, n) {
return function() {
if (!_throttleTimeout) {
var r = arguments, i = this;
r.length === 1 ? e.call(i, r[0]) : e.apply(i, r), _throttleTimeout = setTimeout(function() {
_throttleTimeout = void 0;
}, n);
}
};
}
function cancelThrottle() {
clearTimeout(_throttleTimeout), _throttleTimeout = void 0;
}
function scrollBy(e, n, r) {
e.scrollLeft += n, e.scrollTop += r;
}
function clone(e) {
var n = window.Polymer, r = window.jQuery || window.Zepto;
return n && n.dom ? n.dom(e).cloneNode(!0) : r ? r(e).clone(!0)[0] : e.cloneNode(!0);
}
var expando = "Sortable" + (/* @__PURE__ */ new Date()).getTime();
function AnimationStateManager() {
var e = [], n;
return {
captureAnimationState: function() {
e = [], this.options.animation && [].slice.call(this.el.children).forEach(function(n) {
if (!(css(n, "display") === "none" || n === Sortable.ghost)) {
e.push({
target: n,
rect: getRect(n)
});
var r = _objectSpread2({}, e[e.length - 1].rect);
if (n.thisAnimationDuration) {
var i = matrix(n, !0);
i && (r.top -= i.f, r.left -= i.e);
}
n.fromRect = r;
}
});
},
addAnimationState: function(n) {
e.push(n);
},
removeAnimationState: function(n) {
e.splice(indexOfObject(e, { target: n }), 1);
},
animateAll: function(r) {
var i = this;
if (!this.options.animation) {
clearTimeout(n), typeof r == "function" && r();
return;
}
var a = !1, o = 0;
e.forEach(function(e) {
var n = 0, r = e.target, s = r.fromRect, c = getRect(r), l = r.prevFromRect, u = r.prevToRect, d = e.rect, f = matrix(r, !0);
f && (c.top -= f.f, c.left -= f.e), r.toRect = c, r.thisAnimationDuration && isRectEqual(l, c) && !isRectEqual(s, c) && (d.top - c.top) / (d.left - c.left) === (s.top - c.top) / (s.left - c.left) && (n = calculateRealTime(d, l, u, i.options)), isRectEqual(c, s) || (r.prevFromRect = s, r.prevToRect = c, n ||= i.options.animation, i.animate(r, d, c, n)), n && (a = !0, o = Math.max(o, n), clearTimeout(r.animationResetTimer), r.animationResetTimer = setTimeout(function() {
r.animationTime = 0, r.prevFromRect = null, r.fromRect = null, r.prevToRect = null, r.thisAnimationDuration = null;
}, n), r.thisAnimationDuration = n);
}), clearTimeout(n), a ? n = setTimeout(function() {
typeof r == "function" && r();
}, o) : typeof r == "function" && r(), e = [];
},
animate: function(e, n, r, i) {
if (i) {
css(e, "transition", ""), css(e, "transform", "");
var a = matrix(this.el), o = a && a.a, s = a && a.d, c = (n.left - r.left) / (o || 1), l = (n.top - r.top) / (s || 1);
e.animatingX = !!c, e.animatingY = !!l, css(e, "transform", "translate3d(" + c + "px," + l + "px,0)"), this.forRepaintDummy = repaint(e), css(e, "transition", "transform " + i + "ms" + (this.options.easing ? " " + this.options.easing : "")), css(e, "transform", "translate3d(0,0,0)"), typeof e.animated == "number" && clearTimeout(e.animated), e.animated = setTimeout(function() {
css(e, "transition", ""), css(e, "transform", ""), e.animated = !1, e.animatingX = !1, e.animatingY = !1;
}, i);
}
}
};
}
function repaint(e) {
return e.offsetWidth;
}
function calculateRealTime(e, n, r, i) {
return Math.sqrt((n.top - e.top) ** 2 + (n.left - e.left) ** 2) / Math.sqrt((n.top - r.top) ** 2 + (n.left - r.left) ** 2) * i.animation;
}
var plugins = [], defaults = { initializeByDefault: !0 }, PluginManager = {
mount: function(e) {
for (var n in defaults) defaults.hasOwnProperty(n) && !(n in e) && (e[n] = defaults[n]);
plugins.forEach(function(n) {
if (n.pluginName === e.pluginName) throw `Sortable: Cannot mount plugin ${e.pluginName} more than once`;
}), plugins.push(e);
},
pluginEvent: function(e, n, r) {
var i = this;
this.eventCanceled = !1, r.cancel = function() {
i.eventCanceled = !0;
};
var a = e + "Global";
plugins.forEach(function(i) {
n[i.pluginName] && (n[i.pluginName][a] && n[i.pluginName][a](_objectSpread2({ sortable: n }, r)), n.options[i.pluginName] && n[i.pluginName][e] && n[i.pluginName][e](_objectSpread2({ sortable: n }, r)));
});
},
initializePlugins: function(e, n, r, i) {
for (var a in plugins.forEach(function(i) {
var a = i.pluginName;
if (!(!e.options[a] && !i.initializeByDefault)) {
var o = new i(e, n, e.options);
o.sortable = e, o.options = e.options, e[a] = o, _extends(r, o.defaults);
}
}), e.options) if (e.options.hasOwnProperty(a)) {
var o = this.modifyOption(e, a, e.options[a]);
o !== void 0 && (e.options[a] = o);
}
},
getEventProperties: function(e, n) {
var r = {};
return plugins.forEach(function(i) {
typeof i.eventProperties == "function" && _extends(r, i.eventProperties.call(n[i.pluginName], e));
}), r;
},
modifyOption: function(e, n, r) {
var i;
return plugins.forEach(function(a) {
e[a.pluginName] && a.optionListeners && typeof a.optionListeners[n] == "function" && (i = a.optionListeners[n].call(e[a.pluginName], r));
}), i;
}
};
function dispatchEvent(e) {
var n = e.sortable, r = e.rootEl, i = e.name, a = e.targetEl, o = e.cloneEl, s = e.toEl, c = e.fromEl, l = e.oldIndex, u = e.newIndex, d = e.oldDraggableIndex, f = e.newDraggableIndex, p = e.originalEvent, m = e.putSortable, g = e.extraEventProperties;
if (n ||= r && r[expando], n) {
var _, v = n.options, y = "on" + i.charAt(0).toUpperCase() + i.substr(1);
window.CustomEvent && !IE11OrLess && !Edge ? _ = new CustomEvent(i, {
bubbles: !0,
cancelable: !0
}) : (_ = document.createEvent("Event"), _.initEvent(i, !0, !0)), _.to = s || r, _.from = c || r, _.item = a || r, _.clone = o, _.oldIndex = l, _.newIndex = u, _.oldDraggableIndex = d, _.newDraggableIndex = f, _.originalEvent = p, _.pullMode = m ? m.lastPutMode : void 0;
var b = _objectSpread2(_objectSpread2({}, g), PluginManager.getEventProperties(i, n));
for (var x in b) _[x] = b[x];
r && r.dispatchEvent(_), v[y] && v[y].call(n, _);
}
}
var _excluded = ["evt"], pluginEvent = function(e, n) {
var r = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {}, i = r.evt, a = _objectWithoutProperties(r, _excluded);
PluginManager.pluginEvent.bind(Sortable)(e, n, _objectSpread2({
dragEl,
parentEl,
ghostEl,
rootEl,
nextEl,
lastDownEl,
cloneEl,
cloneHidden,
dragStarted: moved,
putSortable,
activeSortable: Sortable.active,
originalEvent: i,
oldIndex,
oldDraggableIndex,
newIndex,
newDraggableIndex,
hideGhostForTarget: _hideGhostForTarget,
unhideGhostForTarget: _unhideGhostForTarget,
cloneNowHidden: function() {
cloneHidden = !0;
},
cloneNowShown: function() {
cloneHidden = !1;
},
dispatchSortableEvent: function(e) {
_dispatchEvent({
sortable: n,
name: e,
originalEvent: i
});
}
}, a));
};
function _dispatchEvent(e) {
dispatchEvent(_objectSpread2({
putSortable,
cloneEl,
targetEl: dragEl,
rootEl,
oldIndex,
oldDraggableIndex,
newIndex,
newDraggableIndex
}, e));
}
var dragEl, parentEl, ghostEl, rootEl, nextEl, lastDownEl, cloneEl, cloneHidden, oldIndex, newIndex, oldDraggableIndex, newDraggableIndex, activeGroup, putSortable, awaitingDragStarted = !1, ignoreNextClick = !1, sortables = [], tapEvt, touchEvt, lastDx, lastDy, tapDistanceLeft, tapDistanceTop, moved, lastTarget, lastDirection, pastFirstInvertThresh = !1, isCircumstantialInvert = !1, targetMoveDistance, ghostRelativeParent, ghostRelativeParentInitialScroll = [], _silent = !1, savedInputChecked = [], documentExists = typeof document < "u", PositionGhostAbsolutely = IOS, CSSFloatProperty = Edge || IE11OrLess ? "cssFloat" : "float", supportDraggable = documentExists && !ChromeForAndroid && !IOS && "draggable" in document.createElement("div"), supportCssPointerEvents = function() {
if (documentExists) {
if (IE11OrLess) return !1;
var e = document.createElement("x");
return e.style.cssText = "pointer-events:auto", e.style.pointerEvents === "auto";
}
}(), _detectDirection = function(e, n) {
var r = css(e), i = parseInt(r.width) - parseInt(r.paddingLeft) - parseInt(r.paddingRight) - parseInt(r.borderLeftWidth) - parseInt(r.borderRightWidth), a = getChild(e, 0, n), o = getChild(e, 1, n), s = a && css(a), c = o && css(o), l = s && parseInt(s.marginLeft) + parseInt(s.marginRight) + getRect(a).width, u = c && parseInt(c.marginLeft) + parseInt(c.marginRight) + getRect(o).width;
if (r.display === "flex") return r.flexDirection === "column" || r.flexDirection === "column-reverse" ? "vertical" : "horizontal";
if (r.display === "grid") return r.gridTemplateColumns.split(" ").length <= 1 ? "vertical" : "horizontal";
if (a && s.float && s.float !== "none") {
var d = s.float === "left" ? "left" : "right";
return o && (c.clear === "both" || c.clear === d) ? "vertical" : "horizontal";
}
return a && (s.display === "block" || s.display === "flex" || s.display === "table" || s.display === "grid" || l >= i && r[CSSFloatProperty] === "none" || o && r[CSSFloatProperty] === "none" && l + u > i) ? "vertical" : "horizontal";
}, _dragElInRowColumn = function(e, n, r) {
var i = r ? e.left : e.top, a = r ? e.right : e.bottom, o = r ? e.width : e.height, s = r ? n.left : n.top, c = r ? n.right : n.bottom, l = r ? n.width : n.height;
return i === s || a === c || i + o / 2 === s + l / 2;
}, _detectNearestEmptySortable = function(e, n) {
var r;
return sortables.some(function(i) {
var a = i[expando].options.emptyInsertThreshold;
if (!(!a || lastChild(i))) {
var o = getRect(i), s = e >= o.left - a && e <= o.right + a, c = n >= o.top - a && n <= o.bottom + a;
if (s && c) return r = i;
}
}), r;
}, _prepareGroup = function(e) {
function n(e, r) {
return function(i, a, o, s) {
var c = i.options.group.name && a.options.group.name && i.options.group.name === a.options.group.name;
if (e == null && (r || c)) return !0;
if (e == null || e === !1) return !1;
if (r && e === "clone") return e;
if (typeof e == "function") return n(e(i, a, o, s), r)(i, a, o, s);
var l = (r ? i : a).options.group.name;
return e === !0 || typeof e == "string" && e === l || e.join && e.indexOf(l) > -1;
};
}
var r = {}, i = e.group;
(!i || _typeof(i) != "object") && (i = { name: i }), r.name = i.name, r.checkPull = n(i.pull, !0), r.checkPut = n(i.put), r.revertClone = i.revertClone, e.group = r;
}, _hideGhostForTarget = function() {
!supportCssPointerEvents && ghostEl && css(ghostEl, "display", "none");
}, _unhideGhostForTarget = function() {
!supportCssPointerEvents && ghostEl && css(ghostEl, "display", "");
};
documentExists && document.addEventListener("click", function(e) {
if (ignoreNextClick) return e.preventDefault(), e.stopPropagation && e.stopPropagation(), e.stopImmediatePropagation && e.stopImmediatePropagation(), ignoreNextClick = !1, !1;
}, !0);
var nearestEmptyInsertDetectEvent = function(e) {
if (dragEl) {
e = e.touches ? e.touches[0] : e;
var n = _detectNearestEmptySortable(e.clientX, e.clientY);
if (n) {
var r = {};
for (var i in e) e.hasOwnProperty(i) && (r[i] = e[i]);
r.target = r.rootEl = n, r.preventDefault = void 0, r.stopPropagation = void 0, n[expando]._onDragOver(r);
}
}
}, _checkOutsideTargetEl = function(e) {
dragEl && dragEl.parentNode[expando]._isOutsideThisEl(e.target);
};
function Sortable(e, n) {
if (!(e && e.nodeType && e.nodeType === 1)) throw `Sortable: \`el\` must be an HTMLElement, not ${{}.toString.call(e)}`;
this.el = e, this.options = n = _extends({}, n), e[expando] = this;
var r = {
group: null,
sort: !0,
disabled: !1,
store: null,
handle: null,
draggable: /^[uo]l$/i.test(e.nodeName) ? ">li" : ">*",
swapThreshold: 1,
invertSwap: !1,
invertedSwapThreshold: null,
removeCloneOnHide: !0,
direction: function() {
return _detectDirection(e, this.options);
},
ghostClass: "sortable-ghost",
chosenClass: "sortable-chosen",
dragClass: "sortable-drag",
ignore: "a, img",
filter: null,
preventOnFilter: !0,
animation: 0,
easing: null,
setData: function(e, n) {
e.setData("Text", n.textContent);
},
dropBubble: !1,
dragoverBubble: !1,
dataIdAttr: "data-id",
delay: 0,
delayOnTouchOnly: !1,
touchStartThreshold: (Number.parseInt ? Number : window).parseInt(window.devicePixelRatio, 10) || 1,
forceFallback: !1,
fallbackClass: "sortable-fallback",
fallbackOnBody: !1,
fallbackTolerance: 0,
fallbackOffset: {
x: 0,
y: 0
},
supportPointer: Sortable.supportPointer !== !1 && "PointerEvent" in window && !Safari,
emptyInsertThreshold: 5
};
for (var i in PluginManager.initializePlugins(this, e, r), r) !(i in n) && (n[i] = r[i]);
for (var a in _prepareGroup(n), this) a.charAt(0) === "_" && typeof this[a] == "function" && (this[a] = this[a].bind(this));
this.nativeDraggable = n.forceFallback ? !1 : supportDraggable, this.nativeDraggable && (this.options.touchStartThreshold = 1), n.supportPointer ? on(e, "pointerdown", this._onTapStart) : (on(e, "mousedown", this._onTapStart), on(e, "touchstart", this._onTapStart)), this.nativeDraggable && (on(e, "dragover", this), on(e, "dragenter", this)), sortables.push(this.el), n.store && n.store.get && this.sort(n.store.get(this) || []), _extends(this, AnimationStateManager());
}
Sortable.prototype = {
constructor: Sortable,
_isOutsideThisEl: function(e) {
!this.el.contains(e) && e !== this.el && (lastTarget = null);
},
_getDirection: function(e, n) {
return typeof this.options.direction == "function" ? this.options.direction.call(this, e, n, dragEl) : this.options.direction;
},
_onTapStart: function(e) {
if (e.cancelable) {
var n = this, r = this.el, i = this.options, a = i.preventOnFilter, o = e.type, s = e.touches && e.touches[0] || e.pointerType && e.pointerType === "touch" && e, c = (s || e).target, l = e.target.shadowRoot && (e.path && e.path[0] || e.composedPath && e.composedPath()[0]) || c, u = i.filter;
if (_saveInputCheckedState(r), !dragEl && !(/mousedown|pointerdown/.test(o) && e.button !== 0 || i.disabled) && !l.isContentEditable && !(!this.nativeDraggable && Safari && c && c.tagName.toUpperCase() === "SELECT") && (c = closest(c, i.draggable, r, !1), !(c && c.animated) && lastDownEl !== c)) {
if (oldIndex = index(c), oldDraggableIndex = index(c, i.draggable), typeof u == "function") {
if (u.call(this, e, c, this)) {
_dispatchEvent({
sortable: n,
rootEl: l,
name: "filter",
targetEl: c,
toEl: r,
fromEl: r
}), pluginEvent("filter", n, { evt: e }), a && e.cancelable && e.preventDefault();
return;
}
} else if (u && (u = u.split(",").some(function(i) {
if (i = closest(l, i.trim(), r, !1), i) return _dispatchEvent({
sortable: n,
rootEl: i,
name: "filter",
targetEl: c,
fromEl: r,
toEl: r
}), pluginEvent("filter", n, { evt: e }), !0;
}), u)) {
a && e.cancelable && e.preventDefault();
return;
}
i.handle && !closest(l, i.handle, r, !1) || this._prepareDragStart(e, s, c);
}
}
},
_prepareDragStart: function(e, n, r) {
var i = this, a = i.el, o = i.options, s = a.ownerDocument, c;
if (r && !dragEl && r.parentNode === a) {
var l = getRect(r);
if (rootEl = a, dragEl = r, parentEl = dragEl.parentNode, nextEl = dragEl.nextSibling, lastDownEl = r, activeGroup = o.group, Sortable.dragged = dragEl, tapEvt = {
target: dragEl,
clientX: (n || e).clientX,
clientY: (n || e).clientY
}, tapDistanceLeft = tapEvt.clientX - l.left, tapDistanceTop = tapEvt.clientY - l.top, this._lastX = (n || e).clientX, this._lastY = (n || e).clientY, dragEl.style["will-change"] = "all", c = function() {
if (pluginEvent("delayEnded", i, { evt: e }), Sortable.eventCanceled) {
i._onDrop();
return;
}
i._disableDelayedDragEvents(), !FireFox && i.nativeDraggable && (dragEl.draggable = !0), i._triggerDragStart(e, n), _dispatchEvent({
sortable: i,
name: "choose",
originalEvent: e
}), toggleClass(dragEl, o.chosenClass, !0);
}, o.ignore.split(",").forEach(function(e) {
find$1(dragEl, e.trim(), _disableDraggable);
}), on(s, "dragover", nearestEmptyInsertDetectEvent), on(s, "mousemove", nearestEmptyInsertDetectEvent), on(s, "touchmove", nearestEmptyInsertDetectEvent), on(s, "mouseup", i._onDrop), on(s, "touchend", i._onDrop), on(s, "touchcancel", i._onDrop), FireFox && this.nativeDraggable && (this.options.touchStartThreshold = 4, dragEl.draggable = !0), pluginEvent("delayStart", this, { evt: e }), o.delay && (!o.delayOnTouchOnly || n) && (!this.nativeDraggable || !(Edge || IE11OrLess))) {
if (Sortable.eventCanceled) {
this._onDrop();
return;
}
on(s, "mouseup", i._disableDelayedDrag), on(s, "touchend", i._disableDelayedDrag), on(s, "touchcancel", i._disableDelayedDrag), on(s, "mousemove", i._delayedDragTouchMoveHandler), on(s, "touchmove", i._delayedDragTouchMoveHandler), o.supportPointer && on(s, "pointermove", i._delayedDragTouchMoveHandler), i._dragStartTimer = setTimeout(c, o.delay);
} else c();
}
},
_delayedDragTouchMoveHandler: function(e) {
var n = e.touches ? e.touches[0] : e;
Math.max(Math.abs(n.clientX - this._lastX), Math.abs(n.clientY - this._lastY)) >= Math.floor(this.options.touchStartThreshold / (this.nativeDraggable && window.devicePixelRatio || 1)) && this._disableDelayedDrag();
},
_disableDelayedDrag: function() {
dragEl && _disableDraggable(dragEl), clearTimeout(this._dragStartTimer), this._disableDelayedDragEvents();
},
_disableDelayedDragEvents: function() {
var e = this.el.ownerDocument;
off(e, "mouseup", this._disableDelayedDrag), off(e, "touchend", this._disableDelayedDrag), off(e, "touchcancel", this._disableDelayedDrag), off(e, "mousemove", this._delayedDragTouchMoveHandler), off(e, "touchmove", this._delayedDragTouchMoveHandler), off(e, "pointermove", this._delayedDragTouchMoveHandler);
},
_triggerDragStart: function(e, n) {
n ||= e.pointerType == "touch" && e, !this.nativeDraggable || n ? this.options.supportPointer ? on(document, "pointermove", this._onTouchMove) : n ? on(document, "touchmove", this._onTouchMove) : on(document, "mousemove", this._onTouchMove) : (on(dragEl, "dragend", this), on(rootEl, "dragstart", this._onDragStart));
try {
document.selection ? _nextTick(function() {
document.selection.empty();
}) : window.getSelection().removeAllRanges();
} catch {}
},
_dragStarted: function(e, n) {
if (awaitingDragStarted = !1, rootEl && dragEl) {
pluginEvent("dragStarted", this, { evt: n }), this.nativeDraggable && on(document, "dragover", _checkOutsideTargetEl);
var r = this.options;
!e && toggleClass(dragEl, r.dragClass, !1), toggleClass(dragEl, r.ghostClass, !0), Sortable.active = this, e && this._appendGhost(), _dispatchEvent({
sortable: this,
name: "start",
originalEvent: n
});
} else this._nulling();
},
_emulateDragOver: function() {
if (touchEvt) {
this._lastX = touchEvt.clientX, this._lastY = touchEvt.clientY, _hideGhostForTarget();
for (var e = document.elementFromPoint(touchEvt.clientX, touchEvt.clientY), n = e; e && e.shadowRoot && (e = e.shadowRoot.elementFromPoint(touchEvt.clientX, touchEvt.clientY), e !== n);) n = e;
if (dragEl.parentNode[expando]._isOutsideThisEl(e), n) do {
if (n[expando]) {
var r = void 0;
if (r = n[expando]._onDragOver({
clientX: touchEvt.clientX,
clientY: touchEvt.clientY,
target: e,
rootEl: n
}), r && !this.options.dragoverBubble) break;
}
e = n;
} while (n = n.parentNode);
_unhideGhostForTarget();
}
},
_onTouchMove: function(e) {
if (tapEvt) {
var n = this.options, r = n.fallbackTolerance, i = n.fallbackOffset, a = e.touches ? e.touches[0] : e, o = ghostEl && matrix(ghostEl, !0), s = ghostEl && o && o.a, c = ghostEl && o && o.d, l = PositionGhostAbsolutely && ghostRelativeParent && getRelativeScrollOffset(ghostRelativeParent), u = (a.clientX - tapEvt.clientX + i.x) / (s || 1) + (l ? l[0] - ghostRelativeParentInitialScroll[0] : 0) / (s || 1), d = (a.clientY - tapEvt.clientY + i.y) / (c || 1) + (l ? l[1] - ghostRelativeParentInitialScroll[1] : 0) / (c || 1);
if (!Sortable.active && !awaitingDragStarted) {
if (r && Math.max(Math.abs(a.clientX - this._lastX), Math.abs(a.clientY - this._lastY)) < r) return;
this._onDragStart(e, !0);
}
if (ghostEl) {
o ? (o.e += u - (lastDx || 0), o.f += d - (lastDy || 0)) : o = {
a: 1,
b: 0,
c: 0,
d: 1,
e: u,
f: d
};
var f = `matrix(${o.a},${o.b},${o.c},${o.d},${o.e},${o.f})`;
css(ghostEl, "webkitTransform", f), css(ghostEl, "mozTransform", f), css(ghostEl, "msTransform", f), css(ghostEl, "transform", f), lastDx = u, lastDy = d, touchEvt = a;
}
e.cancelable && e.preventDefault();
}
},
_appendGhost: function() {
if (!ghostEl) {
var e = this.options.fallbackOnBody ? document.body : rootEl, n = getRect(dragEl, !0, PositionGhostAbsolutely, !0, e), r = this.options;
if (PositionGhostAbsolutely) {
for (ghostRelativeParent = e; css(ghostRelativeParent, "position") === "static" && css(ghostRelativeParent, "transform") === "none" && ghostRelativeParent !== document;) ghostRelativeParent = ghostRelativeParent.parentNode;
ghostRelativeParent !== document.body && ghostRelativeParent !== document.documentElement ? (ghostRelativeParent === document && (ghostRelativeParent = getWindowScrollingElement()), n.top += ghostRelativeParent.scrollTop, n.left += ghostRelativeParent.scrollLeft) : ghostRelativeParent = getWindowScrollingElement(), ghostRelativeParentInitialScroll = getRelativeScrollOffset(ghostRelativeParent);
}
ghostEl = dragEl.cloneNode(!0), toggleClass(ghostEl, r.ghostClass, !1), toggleClass(ghostEl, r.fallbackClass, !0), toggleClass(ghostEl, r.dragClass, !0), css(ghostEl, "transition", ""), css(ghostEl, "transform", ""), css(ghostEl, "box-sizing", "border-box"), css(ghostEl, "margin", 0), css(ghostEl, "top", n.top), css(ghostEl, "left", n.left), css(ghostEl, "width", n.width), css(ghostEl, "height", n.height), css(ghostEl, "opacity", "0.8"), css(ghostEl, "position", PositionGhostAbsolutely ? "absolute" : "fixed"), css(ghostEl, "zIndex", "100000"), css(ghostEl, "pointerEvents", "none"), Sortable.ghost = ghostEl, e.appendChild(ghostEl), css(ghostEl, "transform-origin", tapDistanceLeft / parseInt(ghostEl.style.width) * 100 + "% " + tapDistanceTop / parseInt(ghostEl.style.height) * 100 + "%");
}
},
_onDragStart: function(e, n) {
var r = this, i = e.dataTransfer, a = r.options;
if (pluginEvent("dragStart", this, { evt: e }), Sortable.eventCanceled) {
this._onDrop();
return;
}
pluginEvent("setupClone", this), Sortable.eventCanceled || (cloneEl = clone(dragEl), cloneEl.draggable = !1, cloneEl.style["will-change"] = "", this._hideClone(), toggleClass(cloneEl, this.options.chosenClass, !1), Sortable.clone = cloneEl), r.cloneId = _nextTick(function() {
pluginEvent("clone", r), !Sortable.eventCanceled && (r.options.removeCloneOnHide || rootEl.insertBefore(cloneEl, dragEl), r._hideClone(), _dispatchEvent({
sortable: r,
name: "clone"
}));
}), !n && toggleClass(dragEl, a.dragClass, !0), n ? (ignoreNextClick = !0, r._loopId = setInterval(r._emulateDragOver, 50)) : (off(document, "mouseup", r._onDrop), off(document, "touchend", r._onDrop), off(document, "touchcancel", r._onDrop), i && (i.effectAllowed = "move", a.setData && a.setData.call(r, i, dragEl)), on(document, "drop", r), css(dragEl, "transform", "translateZ(0)")), awaitingDragStarted = !0, r._dragStartId = _nextTick(r._dragStarted.bind(r, n, e)), on(document, "selectstart", r), moved = !0, Safari && css(document.body, "user-select", "none");
},
_onDragOver: function(e) {
var n = this.el, r = e.target, i, a, o, s = this.options, c = s.group, l = Sortable.active, u = activeGroup === c, d = s.sort, f = putSortable || l, p, m = this, g = !1;
if (_silent) return;
function _(s, c) {
pluginEvent(s, m, _objectSpread2({
evt: e,
isOwner: u,
axis: p ? "vertical" : "horizontal",
revert: o,
dragRect: i,
targetRect: a,
canSort: d,
fromSortable: f,
target: r,
completed: y,
onMove: function(r, a) {
return _onMove(rootEl, n, dragEl, i, r, getRect(r), e, a);
},
changed: b
}, c));
}
function v() {
_("dragOverAnimationCapture"), m.captureAnimationState(), m !== f && f.captureAnimationState();
}
function y(i) {
return _("dragOverCompleted", { insertion: i }), i && (u ? l._hideClone() : l._showClone(m), m !== f && (toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : l.options.ghostClass, !1), toggleClass(dragEl, s.ghostClass, !0)), putSortable !== m && m !== Sortable.active ? putSortable = m : m === Sortable.active && putSortable && (putSortable = null), f === m && (m._ignoreWhileAnimating = r), m.animateAll(function() {
_("dragOverAnimationComplete"), m._ignoreWhileAnimating = null;
}), m !== f && (f.animateAll(), f._ignoreWhileAnimating = null)), (r === dragEl && !dragEl.animated || r === n && !r.animated) && (lastTarget = null), !s.dragoverBubble && !e.rootEl && r !== document && (dragEl.parentNode[expando]._isOutsideThisEl(e.target), !i && nearestEmptyInsertDetectEvent(e)), !s.dragoverBubble && e.stopPropagation && e.stopPropagation(), g = !0;
}
function b() {
newIndex = index(dragEl), newDraggableIndex = index(dragEl, s.draggable), _dispatchEvent({
sortable: m,
name: "change",
toEl: n,
newIndex,
newDraggableIndex,
originalEvent: e
});
}
if (e.preventDefault !== void 0 && e.cancelable && e.preventDefault(), r = closest(r, s.draggable, n, !0), _("dragOver"), Sortable.eventCanceled) return g;
if (dragEl.contains(e.target) || r.animated && r.animatingX && r.animatingY || m._ignoreWhileAnimating === r) return y(!1);
if (ignoreNextClick = !1, l && !s.disabled && (u ? d || (o = parentEl !== rootEl) : putSortable === this || (this.lastPutMode = activeGroup.checkPull(this, l, dragEl, e)) && c.checkPut(this, l, dragEl, e))) {
if (p = this._getDirection(e, r) === "vertical", i = getRect(dragEl), _("dragOverValid"), Sortable.eventCanceled) return g;
if (o) return parentEl = rootEl, v(), this._hideClone(), _("revert"), Sortable.eventCanceled || (nextEl ? rootEl.insertBefore(dragEl, nextEl) : rootEl.appendChild(dragEl)), y(!0);
var x = lastChild(n, s.draggable);
if (!x || _ghostIsLast(e, p, this) && !x.animated) {
if (x === dragEl) return y(!1);
if (x && n === e.target && (r = x), r && (a = getRect(r)), _onMove(rootEl, n, dragEl, i, r, a, e, !!r) !== !1) return v(), n.appendChild(dragEl), parentEl = n, b(), y(!0);
} else if (x && _ghostIsFirst(e, p, this)) {
var S = getChild(n, 0, s, !0);
if (S === dragEl) return y(!1);
if (r = S, a = getRect(r), _onMove(rootEl, n, dragEl, i, r, a, e, !1) !== !1) return v(), n.insertBefore(dragEl, S), parentEl = n, b(), y(!0);
} else if (r.parentNode === n) {
a = getRect(r);
var C = 0, w, T = dragEl.parentNode !== n, E = !_dragElInRowColumn(dragEl.animated && dragEl.toRect || i, r.animated && r.toRect || a, p), D = p ? "top" : "left", O = isScrolledPast(r, "top", "top") || isScrolledPast(dragEl, "top", "top"), k = O ? O.scrollTop : void 0;
lastTarget !== r && (w = a[D], pastFirstInvertThresh = !1, isCircumstantialInvert = !E && s.invertSwap || T), C = _getSwapDirection(e, r, a, p, E ? 1 : s.swapThreshold, s.invertedSwapThreshold == null ? s.swapThreshold : s.invertedSwapThreshold, isCircumstantialInvert, lastTarget === r);
var A;
if (C !== 0) {
var j = index(dragEl);
do
j -= C, A = parentEl.children[j];
while (A && (css(A, "display") === "none" || A === ghostEl));
}
if (C === 0 || A === r) return y(!1);
lastTarget = r, lastDirection = C;
var M = r.nextElementSibling, N = !1;
N = C === 1;
var P = _onMove(rootEl, n, dragEl, i, r, a, e, N);
if (P !== !1) return (P === 1 || P === -1) && (N = P === 1), _silent = !0, setTimeout(_unsilent, 30), v(), N && !M ? n.appendChild(dragEl) : r.parentNode.insertBefore(dragEl, N ? M : r), O && scrollBy(O, 0, k - O.scrollTop), parentEl = dragEl.parentNode, w !== void 0 && !isCircumstantialInvert && (targetMoveDistance = Math.abs(w - getRect(r)[D])), b(), y(!0);
}
if (n.contains(dragEl)) return y(!1);
}
return !1;
},
_ignoreWhileAnimating: null,
_offMoveEvents: function() {
off(document, "mousemove", this._onTouchMove), off(document, "touchmove", this._onTouchMove), off(document, "pointermove", this._onTouchMove), off(document, "dragover", nearestEmptyInsertDetectEvent), off(document, "mousemove", nearestEmptyInsertDetectEvent), off(document, "touchmove", nearestEmptyInsertDetectEvent);
},
_offUpEvents: function() {
var e = this.el.ownerDocument;
off(e, "mouseup", this._onDrop), off(e, "touchend", this._onDrop), off(e, "pointerup", this._onDrop), off(e, "touchcancel", this._onDrop), off(document, "selectstart", this);
},
_onDrop: function(e) {
var n = this.el, r = this.options;
if (newIndex = index(dragEl), newDraggableIndex = index(dragEl, r.draggable), pluginEvent("drop", this, { evt: e }), parentEl = dragEl && dragEl.parentNode, newIndex = index(dragEl), newDraggableIndex = index(dragEl, r.draggable), Sortable.eventCanceled) {
this._nulling();
return;
}
awaitingDragStarted = !1, isCircumstantialInvert = !1, pastFirstInvertThresh = !1, clearInterval(this._loopId), clearTimeout(this._dragStartTimer), _cancelNextTick(this.cloneId), _cancelNextTick(this._dragStartId), this.nativeDraggable && (off(document, "drop", this), off(n, "dragstart", this._onDragStart)), this._offMoveEvents(), this._offUpEvents(), Safari && css(document.body, "user-select", ""), css(dragEl, "transform", ""), e && (moved && (e.cancelable && e.preventDefault(), !r.dropBubble && e.stopPropagation()), ghostEl && ghostEl.parentNode && ghostEl.parentNode.removeChild(ghostEl), (rootEl === parentEl || putSortable && putSortable.lastPutMode !== "clone") && cloneEl && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl), dragEl && (this.nativeDraggable && off(dragEl, "dragend", this), _disableDraggable(dragEl), dragEl.style["will-change"] = "", moved && !awaitingDragStarted && toggleClass(dragEl, putSortable ? putSortable.options.ghostClass : this.options.ghostClass, !1), toggleClass(dragEl, this.options.chosenClass, !1), _dispatchEvent({
sortable: this,
name: "unchoose",
toEl: parentEl,
newIndex: null,
newDraggableIndex: null,
originalEvent: e
}), rootEl === parentEl ? newIndex !== oldIndex && newIndex >= 0 && (_dispatchEvent({
sortable: this,
name: "update",
toEl: parentEl,
originalEvent: e
}), _dispatchEvent({
sortable: this,
name: "sort",
toEl: parentEl,
originalEvent: e
})) : (newIndex >= 0 && (_dispatchEvent({
rootEl: parentEl,
name: "add",
toEl: parentEl,
fromEl: rootEl,
originalEvent: e
}), _dispatchEvent({
sortable: this,
name: "remove",
toEl: parentEl,
originalEvent: e
}), _dispatchEvent({
rootEl: parentEl,
name: "sort",
toEl: parentEl,
fromEl: rootEl,
originalEvent: e
}), _dispatchEvent({
sortable: this,
name: "sort",
toEl: parentEl,
originalEvent: e
})), putSortable && putSortable.save()), Sortable.active && ((newIndex == null || newIndex === -1) && (newIndex = oldIndex, newDraggableIndex = oldDraggableIndex), _dispatchEvent({
sortable: this,
name: "end",
toEl: parentEl,
originalEvent: e
}), this.save()))), this._nulling();
},
_nulling: function() {
pluginEvent("nulling", this), rootEl = dragEl = parentEl = ghostEl = nextEl = cloneEl = lastDownEl = cloneHidden = tapEvt = touchEvt = moved = newIndex = newDraggableIndex = oldIndex = oldDraggableIndex = lastTarget = lastDirection = putSortable = activeGroup = Sortable.dragged = Sortable.ghost = Sortable.clone = Sortable.active = null, savedInputChecked.forEach(function(e) {
e.checked = !0;
}), savedInputChecked.length = lastDx = lastDy = 0;
},
handleEvent: function(e) {
switch (e.type) {
case "drop":
case "dragend":
this._onDrop(e);
break;
case "dragenter":
case "dragover":
dragEl && (this._onDragOver(e), _globalDragOver(e));
break;
case "selectstart":
e.preventDefault();
break;
}
},
toArray: function() {
for (var e = [], n, r = this.el.children, i = 0, a = r.length, o = this.options; i < a; i++) n = r[i], closest(n, o.draggable, this.el, !1) && e.push(n.getAttribute(o.dataIdAttr) || _generateId(n));
return e;
},
sort: function(e, n) {
var r = {}, i = this.el;
this.toArray().forEach(function(e, n) {
var a = i.children[n];
closest(a, this.options.draggable, i, !1) && (r[e] = a);
}, this), n && this.captureAnimationState(), e.forEach(function(e) {
r[e] && (i.removeChild(r[e]), i.appendChild(r[e]));
}), n && this.animateAll();
},
save: function() {
var e = this.options.store;
e && e.set && e.set(this);
},
closest: function(e, n) {
return closest(e, n || this.options.draggable, this.el, !1);
},
option: function(e, n) {
var r = this.options;
if (n === void 0) return r[e];
var i = PluginManager.modifyOption(this, e, n);
i === void 0 ? r[e] = n : r[e] = i, e === "group" && _prepareGroup(r);
},
destroy: function() {
pluginEvent("destroy", this);
var e = this.el;
e[expando] = null, off(e, "mousedown", this._onTapStart), off(e, "touchstart", this._onTapStart), off(e, "pointerdown", this._onTapStart), this.nativeDraggable && (off(e, "dragover", this), off(e, "dragenter", this)), Array.prototype.forEach.call(e.querySelectorAll("[draggable]"), function(e) {
e.removeAttribute("draggable");
}), this._onDrop(), this._disableDelayedDragEvents(), sortables.splice(sortables.indexOf(this.el), 1), this.el = e = null;
},
_hideClone: function() {
if (!cloneHidden) {
if (pluginEvent("hideClone", this), Sortable.eventCanceled) return;
css(cloneEl, "display", "none"), this.options.removeCloneOnHide && cloneEl.parentNode && cloneEl.parentNode.removeChild(cloneEl), cloneHidden = !0;
}
},
_showClone: function(e) {
if (e.lastPutMode !== "clone") {
this._hideClone();
return;
}
if (cloneHidden) {
if (pluginEvent("showClone", this), Sortable.eventCanceled) return;
dragEl.parentNode == rootEl && !this.options.group.revertClone ? rootEl.insertBefore(cloneEl, dragEl) : nextEl ? rootEl.insertBefore(cloneEl, nextEl) : rootEl.appendChild(cloneEl), this.options.group.revertClone && this.animate(dragEl, cloneEl), css(cloneEl, "display", ""), cloneHidden = !1;
}
}
};
function _globalDragOver(e) {
e.dataTransfer && (e.dataTransfer.dropEffect = "move"), e.cancelable && e.preventDefault();
}
function _onMove(e, n, r, i, a, o, s, c) {
var l, u = e[expando], d = u.options.onMove, f;
return window.CustomEvent && !IE11OrLess && !Edge ? l = new CustomEvent("move", {
bubbles: !0,
cancelable: !0
}) : (l = document.createEvent("Event"), l.initEvent("move", !0, !0)), l.to = n, l.from = e, l.dragged = r, l.draggedRect = i, l.related = a || n, l.relatedRect = o || getRect(n), l.willInsertAfter = c, l.originalEvent = s, e.dispatchEvent(l), d && (f = d.call(u, l, s)), f;
}
function _disableDraggable(e) {
e.draggable = !1;
}
function _unsilent() {
_silent = !1;
}
function _ghostIsFirst(e, n, r) {
var i = getRect(getChild(r.el, 0, r.options, !0)), a = 10;
return n ? e.clientX < i.left - a || e.clientY < i.top && e.clientX < i.right : e.clientY < i.top - a || e.clientY < i.bottom && e.clientX < i.left;
}
function _ghostIsLast(e, n, r) {
var i = getRect(lastChild(r.el, r.options.draggable)), a = 10;
return n ? e.clientX > i.right + a || e.clientX <= i.right && e.clientY > i.bottom && e.clientX >= i.left : e.clientX > i.right && e.clientY > i.top || e.clientX <= i.right && e.clientY > i.bottom + a;
}
function _getSwapDirection(e, n, r, i, a, o, s, c) {
var l = i ? e.clientY : e.clientX, u = i ? r.height : r.width, d = i ? r.top : r.left, f = i ? r.bottom : r.right, p = !1;
if (!s) {
if (c && targetMoveDistance < u * a) {
if (!pastFirstInvertThresh && (lastDirection === 1 ? l > d + u * o / 2 : l < f - u * o / 2) && (pastFirstInvertThresh = !0), pastFirstInvertThresh) p = !0;
else if (lastDirection === 1 ? l < d + targetMoveDistance : l > f - targetMoveDistance) return -lastDirection;
} else if (l > d + u * (1 - a) / 2 && l < f - u * (1 - a) / 2) return _getInsertDirection(n);
}
return p ||= s, p && (l < d + u * o / 2 || l > f - u * o / 2) ? l > d + u / 2 ? 1 : -1 : 0;
}
function _getInsertDirection(e) {
return index(dragEl) < index(e) ? 1 : -1;
}
function _generateId(e) {
for (var n = e.tagName + e.className + e.src + e.href + e.textContent, r = n.length, i = 0; r--;) i += n.charCodeAt(r);
return i.toString(36);
}
function _saveInputCheckedState(e) {
savedInputChecked.length = 0;
for (var n = e.getElementsByTagName("input"), r = n.length; r--;) {
var i = n[r];
i.checked && savedInputChecked.push(i);
}
}
function _nextTick(e) {
return setTimeout(e, 0);
}
function _cancelNextTick(e) {
return clearTimeout(e);
}
documentExists && on(document, "touchmove", function(e) {
(Sortable.active || awaitingDragStarted) && e.cancelable && e.preventDefault();
}), Sortable.utils = {
on,
off,
css,
find: find$1,
is: function(e, n) {
return !!closest(e, n, e, !1);
},
extend,
throttle: throttle$1,
closest,
toggleClass,
clone,
index,
nextTick: _nextTick,
cancelNextTick: _cancelNextTick,
detectDirection: _detectDirection,
getChild
}, Sortable.get = function(e) {
return e[expando];
}, Sortable.mount = function() {
var e = [...arguments];
e[0].constructor === Array && (e = e[0]), e.forEach(function(e) {
if (!e.prototype || !e.prototype.constructor) throw `Sortable: Mounted plugin must be a constructor function, not ${{}.toString.call(e)}`;
e.utils && (Sortable.utils = _objectSpread2(_objectSpread2({}, Sortable.utils), e.utils)), PluginManager.mount(e);
});
}, Sortable.create = function(e, n) {
return new Sortable(e, n);
}, Sortable.version = version$2;
var autoScrolls = [], scrollEl, scrollRootEl, scrolling = !1, lastAutoScrollX, lastAutoScrollY, touchEvt$1, pointerElemChangedInterval;
function AutoScrollPlugin() {
function e() {
for (var e in this.defaults = {
scroll: !0,
forceAutoScrollFallback: !1,
scrollSensitivity: 30,
scrollSpeed: 10,
bubbleScroll: !0
}, this) e.charAt(0) === "_" && typeof this[e] == "function" && (this[e] = this[e].bind(this));
}
return e.prototype = {
dragStarted: function(e) {
var n = e.originalEvent;
this.sortable.nativeDraggable ? on(document, "dragover", this._handleAutoScroll) : this.options.supportPointer ? on(document, "pointermove", this._handleFallbackAutoScroll) : n.touches ? on(document, "touchmove", this._handleFallbackAutoScroll) : on(document, "mousemove", this._handleFallbackAutoScroll);
},
dragOverCompleted: function(e) {
var n = e.originalEvent;
!this.options.dragOverBubble && !n.rootEl && this._handleAutoScroll(n);
},
drop: function() {
this.sortable.nativeDraggable ? off(document, "dragover", this._handleAutoScroll) : (off(document, "pointermove", this._handleFallbackAutoScroll), off(document, "touchmove", this._handleFallbackAutoScroll), off(document, "mousemove", this._handleFallbackAutoScroll)), clearPointerElemChangedInterval(), clearAutoScrolls(), cancelThrottle();
},
nulling: function() {
touchEvt$1 = scrollRootEl = scrollEl = scrolling = pointerElemChangedInterval = lastAutoScrollX = lastAutoScrollY = null, autoScrolls.length = 0;
},
_handleFallbackAutoScroll: function(e) {
this._handleAutoScroll(e, !0);
},
_handleAutoScroll: function(e, n) {
var r = this, i = (e.touches ? e.touches[0] : e).clientX, a = (e.touches ? e.touches[0] : e).clientY, o = document.elementFromPoint(i, a);
if (touchEvt$1 = e, n || this.options.forceAutoScrollFallback || Edge || IE11OrLess || Safari) {
autoScroll(e, this.options, o, n);
var s = getParentAutoScrollElement(o, !0);
scrolling && (!pointerElemChangedInterval || i !== lastAutoScrollX || a !== lastAutoScrollY) && (pointerElemChangedInterval && clearPointerElemChangedInterval(), pointerElemChangedInterval = setInterval(function() {
var o = getParentAutoScrollElement(document.elementFromPoint(i, a), !0);
o !== s && (s = o, clearAutoScrolls()), autoScroll(e, r.options, o, n);
}, 10), lastAutoScrollX = i, lastAutoScrollY = a);
} else {
if (!this.options.bubbleScroll || getParentAutoScrollElement(o, !0) === getWindowScrollingElement()) {
clearAutoScrolls();
return;
}
autoScroll(e, this.options, getParentAutoScrollElement(o, !1), !1);
}
}
}, _extends(e, {
pluginName: "scroll",
initializeByDefault: !0
});
}
function clearAutoScrolls() {
autoScrolls.forEach(function(e) {
clearInterval(e.pid);
}), autoScrolls = [];
}
function clearPointerElemChangedInterval() {
clearInterval(pointerElemChangedInterval);
}
var autoScroll = throttle$1(function(e, n, r, i) {
if (n.scroll) {
var a = (e.touches ? e.touches[0] : e).clientX, o = (e.touches ? e.touches[0] : e).clientY, s = n.scrollSensitivity, c = n.scrollSpeed, l = getWindowScrollingElement(), u = !1, d;
scrollRootEl !== r && (scrollRootEl = r, clearAutoScrolls(), scrollEl = n.scroll, d = n.scrollFn, scrollEl === !0 && (scrollEl = getParentAutoScrollElement(r, !0)));
var f = 0, p = scrollEl;
do {
var m = p, g = getRect(m), _ = g.top, v = g.bottom, y = g.left, b = g.right, x = g.width, S = g.height, C = void 0, w = void 0, T = m.scrollWidth, E = m.scrollHeight, D = css(m), O = m.scrollLeft, k = m.scrollTop;
m === l ? (C = x < T && (D.overflowX === "auto" || D.overflowX === "scroll" || D.overflowX === "visible"), w = S < E && (D.overflowY === "auto" || D.overflowY === "scroll" || D.overflowY === "visible")) : (C = x < T && (D.overflowX === "auto" || D.overflowX === "scroll"), w = S < E && (D.overflowY === "auto" || D.overflowY === "scroll"));
var A = C && (Math.abs(b - a) <= s && O + x < T) - (Math.abs(y - a) <= s && !!O), j = w && (Math.abs(v - o) <= s && k + S < E) - (Math.abs(_ - o) <= s && !!k);
if (!autoScrolls[f]) for (var M = 0; M <= f; M++) autoScrolls[M] || (autoScrolls[M] = {});
(autoScrolls[f].vx != A || autoScrolls[f].vy != j || autoScrolls[f].el !== m) && (autoScrolls[f].el = m, autoScrolls[f].vx = A, autoScrolls[f].vy = j, clearInterval(autoScrolls[f].pid), (A != 0 || j != 0) && (u = !0, autoScrolls[f].pid = setInterval(function() {
i && this.layer === 0 && Sortable.active._onTouchMove(touchEvt$1);
var n = autoScrolls[this.layer].vy ? autoScrolls[this.layer].vy * c : 0, r = autoScrolls[this.layer].vx ? autoScrolls[this.layer].vx * c : 0;
typeof d == "function" && d.call(Sortable.dragged.parentNode[expando], r, n, e, touchEvt$1, autoScrolls[this.layer].el) !== "continue" || scrollBy(autoScrolls[this.layer].el, r, n);
}.bind({ layer: f }), 24))), f++;
} while (n.bubbleScroll && p !== l && (p = getParentAutoScrollElement(p, !1)));
scrolling = u;
}
}, 30), drop = function(e) {
var n = e.originalEvent, r = e.putSortable, i = e.dragEl, a = e.activeSortable, o = e.dispatchSortableEvent, s = e.hideGhostForTarget, c = e.unhideGhostForTarget;
if (n) {
var l = r || a;
s();
var u = n.changedTouches && n.changedTouches.length ? n.changedTouches[0] : n, d = document.elementFromPoint(u.clientX, u.clientY);
c(), l && !l.el.contains(d) && (o("spill"), this.onSpill({
dragEl: i,
putSortable: r
}));
}
};
function Revert() {}
Revert.prototype = {
startIndex: null,
dragStart: function(e) {
this.startIndex = e.oldDraggableIndex;
},
onSpill: function(e) {
var n = e.dragEl, r = e.putSortable;
this.sortable.captureAnimationState(), r && r.captureAnimationState();
var i = getChild(this.sortable.el, this.startIndex, this.options);
i ? this.sortable.el.insertBefore(n, i) : this.sortable.el.appendChild(n), this.sortable.animateAll(), r && r.animateAll();
},
drop
}, _extends(Revert, { pluginName: "revertOnSpill" });
function Remove() {}
Remove.prototype = {
onSpill: function(e) {
var n = e.dragEl, r = e.putSortable || this.sortable;
r.captureAnimationState(), n.parentNode && n.parentNode.removeChild(n), r.animateAll();
},
drop
}, _extends(Remove, { pluginName: "removeOnSpill" }), Sortable.mount(new AutoScrollPlugin()), Sortable.mount(Remove, Revert);
var sortable_esm_default = Sortable;
function removeNode(e) {
e.parentElement !== null && e.parentElement.removeChild(e);
}
function insertNodeAt(e, n, r) {
let i = r === 0 ? e.children[0] : e.children[r - 1].nextSibling;
e.insertBefore(n, i);
}
function getConsole() {
return typeof window < "u" ? window.console : global.console;
}
var console$1 = getConsole();
function cached(e) {
let n = Object.create(null);
return function(r) {
return n[r] || (n[r] = e(r));
};
}
var regex = /-(\w)/g, camelize$1 = cached((e) => e.replace(regex, (e, n) => n.toUpperCase())), manageAndEmit$1 = [
"Start",
"Add",
"Remove",
"Update",
"End"
], emit$1 = [
"Choose",
"Unchoose",
"Sort",
"Filter",
"Clone"
], manage$1 = ["Move"], eventHandlerNames = [
manage$1,
manageAndEmit$1,
emit$1
].flatMap((e) => e).map((e) => `on${e}`), events = {
manage: manage$1,
manageAndEmit: manageAndEmit$1,
emit: emit$1
};
function isReadOnly(e) {
return eventHandlerNames.indexOf(e) !== -1;
}
var tags = /* @__PURE__ */ "a.abbr.address.area.article.aside.audio.b.base.bdi.bdo.blockquote.body.br.button.canvas.caption.cite.code.col.colgroup.data.datalist.dd.del.details.dfn.dialog.div.dl.dt.em.embed.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.head.header.hgroup.hr.html.i.iframe.img.input.ins.kbd.label.legend.li.link.main.map.mark.math.menu.menuitem.meta.meter.nav.noscript.object.ol.optgroup.option.output.p.param.picture.pre.progress.q.rb.rp.rt.rtc.ruby.s.samp.script.section.select.slot.small.source.span.strong.style.sub.summary.sup.svg.table.tbody.td.template.textarea.tfoot.th.thead.time.title.tr.track.u.ul.var.video.wbr".split(".");
function isHtmlTag(e) {
return tags.includes(e);
}
function isTransition(e) {
return ["transition-group", "TransitionGroup"].includes(e);
}
function isHtmlAttribute(e) {
return [
"id",
"class",
"role",
"style"
].includes(e) || e.startsWith("data-") || e.startsWith("aria-") || e.startsWith("on");
}
function project(e) {
return e.reduce((e, [n, r]) => (e[n] = r, e), {});
}
function getComponentAttributes({ $attrs: e, componentData: n = {} }) {
return {
...project(Object.entries(e).filter(([e, n]) => isHtmlAttribute(e))),
...n
};
}
function createSortableOption({ $attrs: e, callBackBuilder: n }) {
let r = project(getValidSortableEntries(e));
Object.entries(n).forEach(([e, n]) => {
events[e].forEach((e) => {
r[`on${e}`] = n(e);
});
});
let i = `[data-draggable]${r.draggable || ""}`;
return {
...r,
draggable: i
};
}
function getValidSortableEntries(e) {
return Object.entries(e).filter(([e, n]) => !isHtmlAttribute(e)).map(([e, n]) => [camelize$1(e), n]).filter(([e, n]) => !isReadOnly(e));
}
var getHtmlElementFromNode = ({ el: e }) => e, addContext = (e, n) => e.__draggable_context = n, getContext = (e) => e.__draggable_context, ComponentStructure = class {
constructor({ nodes: { header: e, default: n, footer: r }, root: i, realList: a }) {
this.defaultNodes = n, this.children = [
...e,
...n,
...r
], this.externalComponent = i.externalComponent, this.rootTransition = i.transition, this.tag = i.tag, this.realList = a;
}
get _isRootComponent() {
return this.externalComponent || this.rootTransition;
}
render(e, n) {
let { tag: r, children: i, _isRootComponent: a } = this;
return e(r, n, a ? { default: () => i } : i);
}
updated() {
let { defaultNodes: e, realList: n } = this;
e.forEach((e, r) => {
addContext(getHtmlElementFromNode(e), {
element: n[r],
index: r
});
});
}
getUnderlyingVm(e) {
return getContext(e);
}
getVmIndexFromDomIndex(e, n) {
let { defaultNodes: r } = this, { length: i } = r, a = n.children, o = a.item(e);
if (o === null) return i;
let s = getContext(o);
if (s) return s.index;
if (i === 0) return 0;
let c = getHtmlElementFromNode(r[0]);
return e < [...a].findIndex((e) => e === c) ? 0 : i;
}
};
function getSlot(e, n) {
let r = e[n];
return r ? r() : [];
}
function computeNodes({ $slots: e, realList: n, getKey: r }) {
let i = n || [], [a, o] = ["header", "footer"].map((n) => getSlot(e, n)), { item: s } = e;
if (!s) throw Error("draggable element must have an item slot");
let c = i.flatMap((e, n) => s({
element: e,
index: n
}).map((n) => (n.key = r(e), n.props = {
...n.props || {},
"data-draggable": !0
}, n)));
if (c.length !== i.length) throw Error("Item slot must have only one child");
return {
header: a,
footer: o,
default: c
};
}
function getRootInformation(e) {
let n = isTransition(e), r = !isHtmlTag(e) && !n;
return {
transition: n,
externalComponent: r,
tag: r ? resolveComponent(e) : n ? TransitionGroup : e
};
}
function computeComponentStructure({ $slots: e, tag: n, realList: r, getKey: i }) {
return new ComponentStructure({
nodes: computeNodes({
$slots: e,
realList: r,
getKey: i
}),
root: getRootInformation(n),
realList: r
});
}
function emit(e, n) {
nextTick(() => this.$emit(e.toLowerCase(), n));
}
function manage(e) {
return (n, r) => {
if (this.realList !== null) return this[`onDrag${e}`](n, r);
};
}
function manageAndEmit(e) {
let n = manage.call(this, e);
return (r, i) => {
n.call(this, r, i), emit.call(this, e, r);
};
}
var draggingElement = null, vuedraggable_default = defineComponent({
name: "draggable",
inheritAttrs: !1,
props: {
list: {
type: Array,
required: !1,
default: null
},
modelValue: {
type: Array,
required: !1,
default: null
},
itemKey: {
type: [String, Function],
required: !0
},
clone: {
type: Function,
default: (e) => e
},
tag: {
type: String,
default: "div"
},
move: {
type: Function,
default: null
},
componentData: {
type: Object,
required: !1,
default: null
}
},
emits: [
"update:modelValue",
"change",
...[...events.manageAndEmit, ...events.emit].map((e) => e.toLowerCase())
],
data() {
return { error: !1 };
},
render() {
try {
this.error = !1;
let { $slots: e, $attrs: n, tag: r, componentData: i, realList: a, getKey: o } = this, s = computeComponentStructure({
$slots: e,
tag: r,
realList: a,
getKey: o
});
this.componentStructure = s;
let c = getComponentAttributes({
$attrs: n,
componentData: i
});
return s.render(h, c);
} catch (e) {
return this.error = !0, h("pre", { style: { color: "red" } }, e.stack);
}
},
created() {
this.list !== null && this.modelValue !== null && console$1.error("modelValue and list props are mutually exclusive! Please set one or another.");
},
mounted() {
if (this.error) return;
let { $attrs: e, $el: n, componentStructure: r } = this;
r.updated();
let i = createSortableOption({
$attrs: e,
callBackBuilder: {
manageAndEmit: (e) => manageAndEmit.call(this, e),
emit: (e) => emit.bind(this, e),
manage: (e) => manage.call(this, e)
}
}), a = n.nodeType === 1 ? n : n.parentElement;
this._sortable = new sortable_esm_default(a, i), this.targetDomElement = a, a.__draggable_component__ = this;
},
updated() {
this.componentStructure.updated();
},
beforeUnmount() {
this._sortable !== void 0 && this._sortable.destroy();
},
computed: {
realList() {
let { list: e } = this;
return e || this.modelValue;
},
getKey() {
let { itemKey: e } = this;
return typeof e == "function" ? e : (n) => n[e];
}
},
watch: { $attrs: {
handler(e) {
let { _sortable: n } = this;
n && getValidSortableEntries(e).forEach(([e, r]) => {
n.option(e, r);
});
},
deep: !0
} },
methods: {
getUnderlyingVm(e) {
return this.componentStructure.getUnderlyingVm(e) || null;
},
getUnderlyingPotencialDraggableComponent(e) {
return e.__draggable_component__;
},
emitChanges(e) {
nextTick(() => this.$emit("change", e));
},
alterList(e) {
if (this.list) {
e(this.list);
return;
}
let n = [...this.modelValue];
e(n), this.$emit("update:modelValue", n);
},
spliceList() {
this.alterList((e) => e.splice(...arguments));
},
updatePosition(e, n) {
this.alterList((r) => r.splice(n, 0, r.splice(e, 1)[0]));
},
getRelatedContextFromMoveEvent({ to: e, related: n }) {
let r = this.getUnderlyingPotencialDraggableComponent(e);
if (!r) return { component: r };
let i = r.realList, a = {
list: i,
component: r
};
return e !== n && i ? {
...r.getUnderlyingVm(n) || {},
...a
} : a;
},
getVmIndexFromDomIndex(e) {
return this.componentStructure.getVmIndexFromDomIndex(e, this.targetDomElement);
},
onDragStart(e) {
this.context = this.getUnderlyingVm(e.item), e.item._underlying_vm_ = this.clone(this.context.element), draggingElement = e.item;
},
onDragAdd(e) {
let n = e.item._underlying_vm_;
if (n === void 0) return;
removeNode(e.item);
let r = this.getVmIndexFromDomIndex(e.newIndex);
this.spliceList(r, 0, n);
let i = {
element: n,
newIndex: r
};
this.emitChanges({ added: i });
},
onDragRemove(e) {
if (insertNodeAt(this.$el, e.item, e.oldIndex), e.pullMode === "clone") {
removeNode(e.clone);
return;
}
let { index: n, element: r } = this.context;
this.spliceList(n, 1);
let i = {
element: r,
oldIndex: n
};
this.emitChanges({ removed: i });
},
onDragUpdate(e) {
removeNode(e.item), insertNodeAt(e.from, e.item, e.oldIndex);
let n = this.context.index, r = this.getVmIndexFromDomIndex(e.newIndex);
this.updatePosition(n, r);
let i = {
element: this.context.element,
oldIndex: n,
newIndex: r
};
this.emitChanges({ moved: i });
},
computeFutureIndex(e, n) {
if (!e.element) return 0;
let r = [...n.to.children].filter((e) => e.style.display !== "none"), i = r.indexOf(n.related), a = e.component.getVmIndexFromDomIndex(i);
return r.indexOf(draggingElement) !== -1 || !n.willInsertAfter ? a : a + 1;
},
onDragMove(e, n) {
let { move: r, realList: i } = this;
if (!r || !i) return !0;
let a = this.getRelatedContextFromMoveEvent(e), o = this.computeFutureIndex(a, e), s = {
...this.context,
futureIndex: o
};
return r({
...e,
relatedContext: a,
draggedContext: s
}, n);
},
onDragEnd() {
draggingElement = null;
}
}
}), Sortable_default = (e, n) => {
let r = (e) => {
let r = n.targetKeys.indexOf(e.key);
n.targetKeys.splice(r, 1);
};
return createVNode(Transfer, {
class: "newbie-search-sortable",
selectedKeys: n.selectedKeys,
"onUpdate:selectedKeys": (e) => n.selectedKeys = e,
targetKeys: n.targetKeys,
"onUpdate:targetKeys": (e) => n.targetKeys = e,
locale: {
itemUnit: "",
itemsUnit: "",
notFoundContent: useT("common.no-data"),
searchPlaceholder: useT("form.search-placeholder"),
titles: [useT("search.sortable-items"), useT("search.sorted-items")]
},
listStyle: { minWidth: "300px" },
dataSource: e,
titles: [useT("search.sortable-items"), useT("search.sorted-items")],
oneWay: !0,
render: (e) => e.title
}, { children({ direction: i, filteredItems: a }) {
if (i === "right") return a.length ? createVNode(vuedraggable_default, {
class: "list-group",
itemKey: "key",
tag: "div",
modelValue: n.targetKeys,
"onUpdate:modelValue": (e) => n.targetKeys = e,
sort: !0,
animation: 0,
group: "sortables",
ghostClass: "ghost",
handle: ".drag-handle"
}, { item: ({ element: n }) => {
let i = find(e, { key: n });
return i.direction ||= "asc", createVNode("div", { class: "newbie-search-sortable__sortable-item" }, [
createVNode("span", { class: "drag-handle" }, [createVNode(MenuOutlined, null, null)]),
createVNode("div", { class: "newbie-search-sortable__sortable-item-content" }, [createVNode("span", { class: "newbie-search-sortable__sortable-item-title" }, [i.title]), createVNode("span", { class: "newbie-search-sortable__sortable-item-sorter" }, [createVNode(Tooltip, {
title: i.direction === "asc" ? useT("search.ascending") : useT("search.descending"),
placement: "left"
}, { default: () => [createVNode(Button, {
size: "small",
type: i.direction === "asc" ? "primary" : "default",
icon: i.direction === "asc" ? createVNode(RiseOutlined, null, null) : createVNode(FallOutlined, null, null),
onClick: () => i.direction = i.direction === "asc" ? "desc" : "asc"
}, null)] })])]),
createVNode("span", { class: "newbie-search-sortable__sortable-item-delete" }, [createVNode(Tooltip, {
title: useT("search.remove-item"),
placement: "right"
}, { default: () => [createVNode(Button, {
type: "danger",
icon: createVNode(DeleteOutlined, null, null),
onClick: () => r(i)
}, null)] })])
]);
} }) : createVNode("div", { class: "newbie-search-sortable__sortable-empty" }, [useT("search.select-sorting-item")]);
} });
};
function tryOnScopeDispose(e) {
return (0, lib_exports.getCurrentScope)() ? ((0, lib_exports.onScopeDispose)(e), !0) : !1;
}
function toValue(e) {
return typeof e == "function" ? e() : (0, lib_exports.unref)(e);
}
var isClient = typeof window < "u", noop = () => {}, isIOS = /* @__PURE__ */ getIsIOS();
function getIsIOS() {
return isClient && (window == null ? void 0 : window.navigator)?.userAgent && /* @__PURE__ */ /iP(ad|hone|od)/.test(window.navigator.userAgent);
}
var directiveHooks = {
mounted: "mounted",
updated: "updated",
unmounted: "unmounted"
};
function toRef$1(...e) {
if (e.length !== 1) return (0, lib_exports.toRef)(...e);
let n = e[0];
return typeof n == "function" ? (0, lib_exports.readonly)((0, lib_exports.customRef)(() => ({
get: n,
set: noop
}))) : (0, lib_exports.ref)(n);
}
function unrefElement$1(e) {
let n = toValue(e);
return n?.$el ?? n;
}
var defaultWindow$1 = isClient ? window : void 0;
isClient && window.document, isClient && window.navigator, isClient && window.location;
function useEventListener$1(...e) {
let n, r, i, a;
if (typeof e[0] == "string" || Array.isArray(e[0]) ? ([r, i, a] = e, n = defaultWindow$1) : [n, r, i, a] = e, !n) return noop;
Array.isArray(r) || (r = [r]), Array.isArray(i) || (i = [i]);
let o = [], s = () => {
o.forEach((e) => e()), o.length = 0;
}, c = (e, n, r, i) => (e.addEventListener(n, r, i), () => e.removeEventListener(n, r, i)), l = (0, lib_exports.watch)(() => [unrefElement$1(n), toValue(a)], ([e, n]) => {
s(), e && o.push(...r.flatMap((r) => i.map((i) => c(e, r, i, n))));
}, {
immediate: !0,
flush: "post"
}), u = () => {
l(), s();
};
return tryOnScopeDispose(u), u;
}
var _iOSWorkaround$1 = !1;
function onClickOutside(e, n, r = {}) {
let { window: i = defaultWindow$1, ignore: a = [], capture: o = !0, detectIframe: s = !1 } = r;
if (!i) return;
isIOS && !_iOSWorkaround$1 && (_iOSWorkaround$1 = !0, Array.from(i.document.body.children).forEach((e) => e.addEventListener("click", noop)), i.document.documentElement.addEventListener("click", noop));
let c = !0, l = (e) => a.some((n) => {
if (typeof n == "string") return Array.from(i.document.querySelectorAll(n)).some((n) => n === e.target || e.composedPath().includes(n));
{
let r = unrefElement$1(n);
return r && (e.target === r || e.composedPath().includes(r));
}
}), u = [
useEventListener$1(i, "click", (r) => {
let i = unrefElement$1(e);
if (!(!i || i === r.target || r.composedPath().includes(i))) {
if (r.detail === 0 && (c = !l(r)), !c) {
c = !0;
return;
}
n(r);
}
}, {
passive: !0,
capture: o
}),
useEventListener$1(i, "pointerdown", (n) => {
let r = unrefElement$1(e);
r && (c = !n.composedPath().includes(r) && !l(n));
}, { passive: !0 }),
s && useEventListener$1(i, "blur", (r) => {
setTimeout(() => {
let a = unrefElement$1(e);
i.document.activeElement?.tagName === "IFRAME" && !a?.contains(i.document.activeElement) && n(r);
}, 0);
})
].filter(Boolean);
return () => u.forEach((e) => e());
}
var OnClickOutside = /* @__PURE__ */ (0, lib_exports.defineComponent)({
name: "OnClickOutside",
props: ["as", "options"],
emits: ["trigger"],
setup(e, { slots: n, emit: r }) {
let i = (0, lib_exports.ref)();
return onClickOutside(i, (e) => {
r("trigger", e);
}, e.options), () => {
if (n.default) return (0, lib_exports.h)(e.as || "div", { ref: i }, n.default());
};
}
});
function unrefElement(e) {
let n = toValue(e);
return n?.$el ?? n;
}
var defaultWindow = isClient ? window : void 0;
function useEventListener(...e) {
let n, r, i, a;
if (typeof e[0] == "string" || Array.isArray(e[0]) ? ([r, i, a] = e, n = defaultWindow) : [n, r, i, a] = e, !n) return noop;
Array.isArray(r) || (r = [r]), Array.isArray(i) || (i = [i]);
let o = [], s = () => {
o.forEach((e) => e()), o.length = 0;
}, c = (e, n, r, i) => (e.addEventListener(n, r, i), () => e.removeEventListener(n, r, i)), l = (0, lib_exports.watch)(() => [unrefElement(n), toValue(a)], ([e, n]) => {
s(), e && o.push(...r.flatMap((r) => i.map((i) => c(e, r, i, n))));
}, {
immediate: !0,
flush: "post"
}), u = () => {
l(), s();
};
return tryOnScopeDispose(u), u;
}
directiveHooks.mounted, directiveHooks.unmounted, Object.defineProperty, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable, directiveHooks.mounted, directiveHooks.mounted, directiveHooks.mounted, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable, directiveHooks.mounted, directiveHooks.mounted, Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable, directiveHooks.mounted, directiveHooks.mounted, Object.defineProperty, Object.defineProperties, Object.getOwnPropertyDescriptors, Object.getOwnPropertySymbols, Object.prototype.hasOwnProperty, Object.prototype.propertyIsEnumerable, directiveHooks.mounted;
function checkOverflowScroll(e) {
let n = window.getComputedStyle(e);
if (n.overflowX === "scroll" || n.overflowY === "scroll" || n.overflowX === "auto" && e.clientWidth < e.scrollWidth || n.overflowY === "auto" && e.clientHeight < e.scrollHeight) return !0;
{
let n = e.parentNode;
return !n || n.tagName === "BODY" ? !1 : checkOverflowScroll(n);
}
}
function preventDefault(e) {
let n = e || window.event, r = n.target;
return checkOverflowScroll(r) ? !1 : n.touches.length > 1 ? !0 : (n.preventDefault && n.preventDefault(), !1);
}
function useScrollLock(e, n = !1) {
let r = (0, lib_exports.ref)(n), i = null, a;
(0, lib_exports.watch)(toRef$1(e), (e) => {
if (e) {
let n = e;
a = n.style.overflow, r.value && (n.style.overflow = "hidden");
}
}, { immediate: !0 });
let o = () => {
let n = toValue(e);
!n || r.value || (isIOS && (i = useEventListener(n, "touchmove", (e) => {
preventDefault(e);
}, { passive: !1 })), n.style.overflow = "hidden", r.value = !0);
}, s = () => {
let n = toValue(e);
!n || !r.value || (isIOS && i?.(), n.style.overflow = a, r.value = !1);
};
return tryOnScopeDispose(s), (0, lib_exports.computed)({
get() {
return r.value;
},
set(e) {
e ? o() : s();
}
});
}
function onScrollLock() {
let e = !1, n = (0, lib_exports.ref)(!1);
return (r, i) => {
if (n.value = i.value, e) return;
e = !0;
let a = useScrollLock(r, i.value);
(0, lib_exports.watch)(n, (e) => a.value = e);
};
}
onScrollLock();
var defaultInstanceSettings = {
update: null,
begin: null,
loopBegin: null,
changeBegin: null,
change: null,
changeComplete: null,
loopComplete: null,
complete: null,
loop: 1,
direction: "normal",
autoplay: !0,
timelineOffset: 0
}, defaultTweenSettings = {
duration: 1e3,
delay: 0,
endDelay: 0,
easing: "easeOutElastic(1, .5)",
round: 0
}, validTransforms = [
"translateX",
"translateY",
"translateZ",
"rotate",
"rotateX",
"rotateY",
"rotateZ",
"scale",
"scaleX",
"scaleY",
"scaleZ",
"skew",
"skewX",
"skewY",
"perspective",
"matrix",
"matrix3d"
], cache = {
CSS: {},
springs: {}
};
function minMax(e, n, r) {
return Math.min(Math.max(e, n), r);
}
function stringContains(e, n) {
return e.indexOf(n) > -1;
}
function applyArguments(e, n) {
return e.apply(null, n);
}
var is = {
arr: function(e) {
return Array.isArray(e);
},
obj: function(e) {
return stringContains(Object.prototype.toString.call(e), "Object");
},
pth: function(e) {
return is.obj(e) && e.hasOwnProperty("totalLength");
},
svg: function(e) {
return e instanceof SVGElement;
},
inp: function(e) {
return e instanceof HTMLInputElement;
},
dom: function(e) {
return e.nodeType || is.svg(e);
},
str: function(e) {
return typeof e == "string";
},
fnc: function(e) {
return typeof e == "function";
},
und: function(e) {
return e === void 0;
},
nil: function(e) {
return is.und(e) || e === null;
},
hex: function(e) {
return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(e);
},
rgb: function(e) {
return /^rgb/.test(e);
},
hsl: function(e) {
return /^hsl/.test(e);
},
col: function(e) {
return is.hex(e) || is.rgb(e) || is.hsl(e);
},
key: function(e) {
return !defaultInstanceSettings.hasOwnProperty(e) && !defaultTweenSettings.hasOwnProperty(e) && e !== "targets" && e !== "keyframes";
}
};
function parseEasingParameters(e) {
var n = /\(([^)]+)\)/.exec(e);
return n ? n[1].split(",").map(function(e) {
return parseFloat(e);
}) : [];
}
function spring(e, n) {
var r = parseEasingParameters(e), i = minMax(is.und(r[0]) ? 1 : r[0], .1, 100), a = minMax(is.und(r[1]) ? 100 : r[1], .1, 100), o = minMax(is.und(r[2]) ? 10 : r[2], .1, 100), s = minMax(is.und(r[3]) ? 0 : r[3], .1, 100), c = Math.sqrt(a / i), l = o / (2 * Math.sqrt(a * i)), u = l < 1 ? c * Math.sqrt(1 - l * l) : 0, d = 1, f = l < 1 ? (l * c + -s) / u : -s + c;
function p(e) {
var r = n ? n * e / 1e3 : e;
return r = l < 1 ? Math.exp(-r * l * c) * (d * Math.cos(u * r) + f * Math.sin(u * r)) : (d + f * r) * Math.exp(-r * c), e === 0 || e === 1 ? e : 1 - r;
}
function m() {
var n = cache.springs[e];
if (n) return n;
for (var r = 1 / 6, i = 0, a = 0;;) if (i += r, p(i) === 1) {
if (a++, a >= 16) break;
} else a = 0;
var o = i * r * 1e3;
return cache.springs[e] = o, o;
}
return n ? p : m;
}
function steps(e) {
return e === void 0 && (e = 10), function(n) {
return Math.ceil(minMax(n, 1e-6, 1) * e) * (1 / e);
};
}
var bezier = (function() {
var e = 11, n = 1 / (e - 1);
function r(e, n) {
return 1 - 3 * n + 3 * e;
}
function i(e, n) {
return 3 * n - 6 * e;
}
function a(e) {
return 3 * e;
}
function o(e, n, o) {
return ((r(n, o) * e + i(n, o)) * e + a(n)) * e;
}
function s(e, n, o) {
return 3 * r(n, o) * e * e + 2 * i(n, o) * e + a(n);
}
function c(e, n, r, i, a) {
var s, c, l = 0;
do
c = n + (r - n) / 2, s = o(c, i, a) - e, s > 0 ? r = c : n = c;
while (Math.abs(s) > 1e-7 && ++l < 10);
return c;
}
function l(e, n, r, i) {
for (var a = 0; a < 4; ++a) {
var c = s(n, r, i);
if (c === 0) return n;
var l = o(n, r, i) - e;
n -= l / c;
}
return n;
}
function u(r, i, a, u) {
if (!(0 <= r && r <= 1 && 0 <= a && a <= 1)) return;
var d = new Float32Array(e);
if (r !== i || a !== u) for (var f = 0; f < e; ++f) d[f] = o(f * n, r, a);
function p(i) {
for (var o = 0, u = 1, f = e - 1; u !== f && d[u] <= i; ++u) o += n;
--u;
var p = (i - d[u]) / (d[u + 1] - d[u]), m = o + p * n, g = s(m, r, a);
return g >= .001 ? l(i, m, r, a) : g === 0 ? m : c(i, o, o + n, r, a);
}
return function(e) {
return r === i && a === u || e === 0 || e === 1 ? e : o(p(e), i, u);
};
}
return u;
})(), penner = (function() {
var e = { linear: function() {
return function(e) {
return e;
};
} }, n = {
Sine: function() {
return function(e) {
return 1 - Math.cos(e * Math.PI / 2);
};
},
Circ: function() {
return function(e) {
return 1 - Math.sqrt(1 - e * e);
};
},
Back: function() {
return function(e) {
return e * e * (3 * e - 2);
};
},
Bounce: function() {
return function(e) {
for (var n, r = 4; e < ((n = 2 ** --r) - 1) / 11;);
return 1 / 4 ** (3 - r) - 7.5625 * ((n * 3 - 2) / 22 - e) ** 2;
};
},
Elastic: function(e, n) {
e === void 0 && (e = 1), n === void 0 && (n = .5);
var r = minMax(e, 1, 10), i = minMax(n, .1, 2);
return function(e) {
return e === 0 || e === 1 ? e : -r * 2 ** (10 * (e - 1)) * Math.sin((e - 1 - i / (Math.PI * 2) * Math.asin(1 / r)) * (Math.PI * 2) / i);
};
}
};
return [
"Quad",
"Cubic",
"Quart",
"Quint",
"Expo"
].forEach(function(e, r) {
n[e] = function() {
return function(e) {
return e ** +(r + 2);
};
};
}), Object.keys(n).forEach(function(r) {
var i = n[r];
e["easeIn" + r] = i, e["easeOut" + r] = function(e, n) {
return function(r) {
return 1 - i(e, n)(1 - r);
};
}, e["easeInOut" + r] = function(e, n) {
return function(r) {
return r < .5 ? i(e, n)(r * 2) / 2 : 1 - i(e, n)(r * -2 + 2) / 2;
};
}, e["easeOutIn" + r] = function(e, n) {
return function(r) {
return r < .5 ? (1 - i(e, n)(1 - r * 2)) / 2 : (i(e, n)(r * 2 - 1) + 1) / 2;
};
};
}), e;
})();
function parseEasings(e, n) {
if (is.fnc(e)) return e;
var r = e.split("(")[0], i = penner[r], a = parseEasingParameters(e);
switch (r) {
case "spring": return spring(e, n);
case "cubicBezier": return applyArguments(bezier, a);
case "steps": return applyArguments(steps, a);
default: return applyArguments(i, a);
}
}
function selectString(e) {
try {
return document.querySelectorAll(e);
} catch {
return;
}
}
function filterArray(e, n) {
for (var r = e.length, i = arguments.length >= 2 ? arguments[1] : void 0, a = [], o = 0; o < r; o++) if (o in e) {
var s = e[o];
n.call(i, s, o, e) && a.push(s);
}
return a;
}
function flattenArray(e) {
return e.reduce(function(e, n) {
return e.concat(is.arr(n) ? flattenArray(n) : n);
}, []);
}
function toArray(e) {
return is.arr(e) ? e : (is.str(e) && (e = selectString(e) || e), e instanceof NodeList || e instanceof HTMLCollection ? [].slice.call(e) : [e]);
}
function arrayContains(e, n) {
return e.some(function(e) {
return e === n;
});
}
function cloneObject(e) {
var n = {};
for (var r in e) n[r] = e[r];
return n;
}
function replaceObjectProps(e, n) {
var r = cloneObject(e);
for (var i in e) r[i] = n.hasOwnProperty(i) ? n[i] : e[i];
return r;
}
function mergeObjects(e, n) {
var r = cloneObject(e);
for (var i in n) r[i] = is.und(e[i]) ? n[i] : e[i];
return r;
}
function rgbToRgba(e) {
var n = /rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(e);
return n ? "rgba(" + n[1] + ",1)" : e;
}
function hexToRgba(e) {
var n = e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i, function(e, n, r, i) {
return n + n + r + r + i + i;
}), r = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n), i = parseInt(r[1], 16), a = parseInt(r[2], 16), o = parseInt(r[3], 16);
return "rgba(" + i + "," + a + "," + o + ",1)";
}
function hslToRgba(e) {
var n = /hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(e) || /hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(e), r = parseInt(n[1], 10) / 360, i = parseInt(n[2], 10) / 100, a = parseInt(n[3], 10) / 100, o = n[4] || 1;
function s(e, n, r) {
return r < 0 && (r += 1), r > 1 && --r, r < 1 / 6 ? e + (n - e) * 6 * r : r < 1 / 2 ? n : r < 2 / 3 ? e + (n - e) * (2 / 3 - r) * 6 : e;
}
var c, l, u;
if (i == 0) c = l = u = a;
else {
var d = a < .5 ? a * (1 + i) : a + i - a * i, f = 2 * a - d;
c = s(f, d, r + 1 / 3), l = s(f, d, r), u = s(f, d, r - 1 / 3);
}
return "rgba(" + c * 255 + "," + l * 255 + "," + u * 255 + "," + o + ")";
}
function colorToRgb(e) {
if (is.rgb(e)) return rgbToRgba(e);
if (is.hex(e)) return hexToRgba(e);
if (is.hsl(e)) return hslToRgba(e);
}
function getUnit(e) {
var n = /[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(e);
if (n) return n[1];
}
function getTransformUnit(e) {
if (stringContains(e, "translate") || e === "perspective") return "px";
if (stringContains(e, "rotate") || stringContains(e, "skew")) return "deg";
}
function getFunctionValue(e, n) {
return is.fnc(e) ? e(n.target, n.id, n.total) : e;
}
function getAttribute(e, n) {
return e.getAttribute(n);
}
function convertPxToUnit(e, n, r) {
var i = getUnit(n);
if (arrayContains([
r,
"deg",
"rad",
"turn"
], i)) return n;
var a = cache.CSS[n + r];
if (!is.und(a)) return a;
var o = 100, s = document.createElement(e.tagName), c = e.parentNode && e.parentNode !== document ? e.parentNode : document.body;
c.appendChild(s), s.style.position = "absolute", s.style.width = o + r;
var l = o / s.offsetWidth;
c.removeChild(s);
var u = l * parseFloat(n);
return cache.CSS[n + r] = u, u;
}
function getCSSValue(e, n, r) {
if (n in e.style) {
var i = n.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase(), a = e.style[n] || getComputedStyle(e).getPropertyValue(i) || "0";
return r ? convertPxToUnit(e, a, r) : a;
}
}
function getAnimationType(e, n) {
if (is.dom(e) && !is.inp(e) && (!is.nil(getAttribute(e, n)) || is.svg(e) && e[n])) return "attribute";
if (is.dom(e) && arrayContains(validTransforms, n)) return "transform";
if (is.dom(e) && n !== "transform" && getCSSValue(e, n)) return "css";
if (e[n] != null) return "object";
}
function getElementTransforms(e) {
if (is.dom(e)) {
for (var n = e.style.transform || "", r = /(\w+)\(([^)]*)\)/g, i = /* @__PURE__ */ new Map(), a; a = r.exec(n);) i.set(a[1], a[2]);
return i;
}
}
function getTransformValue(e, n, r, i) {
var a = stringContains(n, "scale") ? 1 : 0 + getTransformUnit(n), o = getElementTransforms(e).get(n) || a;
return r && (r.transforms.list.set(n, o), r.transforms.last = n), i ? convertPxToUnit(e, o, i) : o;
}
function getOriginalTargetValue(e, n, r, i) {
switch (getAnimationType(e, n)) {
case "transform": return getTransformValue(e, n, i, r);
case "css": return getCSSValue(e, n, r);
case "attribute": return getAttribute(e, n);
default: return e[n] || 0;
}
}
function getRelativeValue(e, n) {
var r = /^(\*=|\+=|-=)/.exec(e);
if (!r) return e;
var i = getUnit(e) || 0, a = parseFloat(n), o = parseFloat(e.replace(r[0], ""));
switch (r[0][0]) {
case "+": return a + o + i;
case "-": return a - o + i;
case "*": return a * o + i;
}
}
function validateValue(e, n) {
if (is.col(e)) return colorToRgb(e);
if (/\s/g.test(e)) return e;
var r = getUnit(e), i = r ? e.substr(0, e.length - r.length) : e;
return n ? i + n : i;
}
function getDistance(e, n) {
return Math.sqrt((n.x - e.x) ** 2 + (n.y - e.y) ** 2);
}
function getCircleLength(e) {
return Math.PI * 2 * getAttribute(e, "r");
}
function getRectLength(e) {
return getAttribute(e, "width") * 2 + getAttribute(e, "height") * 2;
}
function getLineLength(e) {
return getDistance({
x: getAttribute(e, "x1"),
y: getAttribute(e, "y1")
}, {
x: getAttribute(e, "x2"),
y: getAttribute(e, "y2")
});
}
function getPolylineLength(e) {
for (var n = e.points, r = 0, i, a = 0; a < n.numberOfItems; a++) {
var o = n.getItem(a);
a > 0 && (r += getDistance(i, o)), i = o;
}
return r;
}
function getPolygonLength(e) {
var n = e.points;
return getPolylineLength(e) + getDistance(n.getItem(n.numberOfItems - 1), n.getItem(0));
}
function getTotalLength(e) {
if (e.getTotalLength) return e.getTotalLength();
switch (e.tagName.toLowerCase()) {
case "circle": return getCircleLength(e);
case "rect": return getRectLength(e);
case "line": return getLineLength(e);
case "polyline": return getPolylineLength(e);
case "polygon": return getPolygonLength(e);
}
}
function setDashoffset(e) {
var n = getTotalLength(e);
return e.setAttribute("stroke-dasharray", n), n;
}
function getParentSvgEl(e) {
for (var n = e.parentNode; is.svg(n) && is.svg(n.parentNode);) n = n.parentNode;
return n;
}
function getParentSvg(e, n) {
var r = n || {}, i = r.el || getParentSvgEl(e), a = i.getBoundingClientRect(), o = getAttribute(i, "viewBox"), s = a.width, c = a.height, l = r.viewBox || (o ? o.split(" ") : [
0,
0,
s,
c
]);
return {
el: i,
viewBox: l,
x: l[0] / 1,
y: l[1] / 1,
w: s,
h: c,
vW: l[2],
vH: l[3]
};
}
function getPath(e, n) {
var r = is.str(e) ? selectString(e)[0] : e, i = n || 100;
return function(e) {
return {
property: e,
el: r,
svg: getParentSvg(r),
totalLength: getTotalLength(r) * (i / 100)
};
};
}
function getPathProgress(e, n, r) {
function i(r) {
r === void 0 && (r = 0);
var i = n + r >= 1 ? n + r : 0;
return e.el.getPointAtLength(i);
}
var a = getParentSvg(e.el, e.svg), o = i(), s = i(-1), c = i(1), l = r ? 1 : a.w / a.vW, u = r ? 1 : a.h / a.vH;
switch (e.property) {
case "x": return (o.x - a.x) * l;
case "y": return (o.y - a.y) * u;
case "angle": return Math.atan2(c.y - s.y, c.x - s.x) * 180 / Math.PI;
}
}
function decomposeValue(e, n) {
var r = /[+-]?\d*\.?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/g, i = validateValue(is.pth(e) ? e.totalLength : e, n) + "";
return {
original: i,
numbers: i.match(r) ? i.match(r).map(Number) : [0],
strings: is.str(e) || n ? i.split(r) : []
};
}
function parseTargets(e) {
return filterArray(e ? flattenArray(is.arr(e) ? e.map(toArray) : toArray(e)) : [], function(e, n, r) {
return r.indexOf(e) === n;
});
}
function getAnimatables(e) {
var n = parseTargets(e);
return n.map(function(e, r) {
return {
target: e,
id: r,
total: n.length,
transforms: { list: getElementTransforms(e) }
};
});
}
function normalizePropertyTweens(e, n) {
var r = cloneObject(n);
if (/^spring/.test(r.easing) && (r.duration = spring(r.easing)), is.arr(e)) {
var i = e.length;
i === 2 && !is.obj(e[0]) ? e = { value: e } : is.fnc(n.duration) || (r.duration = n.duration / i);
}
var a = is.arr(e) ? e : [e];
return a.map(function(e, r) {
var i = is.obj(e) && !is.pth(e) ? e : { value: e };
return is.und(i.delay) && (i.delay = r ? 0 : n.delay), is.und(i.endDelay) && (i.endDelay = r === a.length - 1 ? n.endDelay : 0), i;
}).map(function(e) {
return mergeObjects(e, r);
});
}
function flattenKeyframes(e) {
for (var n = filterArray(flattenArray(e.map(function(e) {
return Object.keys(e);
})), function(e) {
return is.key(e);
}).reduce(function(e, n) {
return e.indexOf(n) < 0 && e.push(n), e;
}, []), r = {}, i = function(i) {
var a = n[i];
r[a] = e.map(function(e) {
var n = {};
for (var r in e) is.key(r) ? r == a && (n.value = e[r]) : n[r] = e[r];
return n;
});
}, a = 0; a < n.length; a++) i(a);
return r;
}
function getProperties(e, n) {
var r = [], i = n.keyframes;
for (var a in i && (n = mergeObjects(flattenKeyframes(i), n)), n) is.key(a) && r.push({
name: a,
tweens: normalizePropertyTweens(n[a], e)
});
return r;
}
function normalizeTweenValues(e, n) {
var r = {};
for (var i in e) {
var a = getFunctionValue(e[i], n);
is.arr(a) && (a = a.map(function(e) {
return getFunctionValue(e, n);
}), a.length === 1 && (a = a[0])), r[i] = a;
}
return r.duration = parseFloat(r.duration), r.delay = parseFloat(r.delay), r;
}
function normalizeTweens(e, n) {
var r;
return e.tweens.map(function(i) {
var a = normalizeTweenValues(i, n), o = a.value, s = is.arr(o) ? o[1] : o, c = getUnit(s), l = getOriginalTargetValue(n.target, e.name, c, n), u = r ? r.to.original : l, d = is.arr(o) ? o[0] : u, f = getUnit(d) || getUnit(l), p = c || f;
return is.und(s) && (s = u), a.from = decomposeValue(d, p), a.to = decomposeValue(getRelativeValue(s, d), p), a.start = r ? r.end : 0, a.end = a.start + a.delay + a.duration + a.endDelay, a.easing = parseEasings(a.easing, a.duration), a.isPath = is.pth(o), a.isPathTargetInsideSVG = a.isPath && is.svg(n.target), a.isColor = is.col(a.from.original), a.isColor && (a.round = 1), r = a, a;
});
}
var setProgressValue = {
css: function(e, n, r) {
return e.style[n] = r;
},
attribute: function(e, n, r) {
return e.setAttribute(n, r);
},
object: function(e, n, r) {
return e[n] = r;
},
transform: function(e, n, r, i, a) {
if (i.list.set(n, r), n === i.last || a) {
var o = "";
i.list.forEach(function(e, n) {
o += n + "(" + e + ") ";
}), e.style.transform = o;
}
}
};
function setTargetsValue(e, n) {
getAnimatables(e).forEach(function(e) {
for (var r in n) {
var i = getFunctionValue(n[r], e), a = e.target, o = getUnit(i), s = getOriginalTargetValue(a, r, o, e), c = getRelativeValue(validateValue(i, o || getUnit(s)), s);
setProgressValue[getAnimationType(a, r)](a, r, c, e.transforms, !0);
}
});
}
function createAnimation(e, n) {
var r = getAnimationType(e.target, n.name);
if (r) {
var i = normalizeTweens(n, e), a = i[i.length - 1];
return {
type: r,
property: n.name,
animatable: e,
tweens: i,
duration: a.end,
delay: i[0].delay,
endDelay: a.endDelay
};
}
}
function getAnimations(e, n) {
return filterArray(flattenArray(e.map(function(e) {
return n.map(function(n) {
return createAnimation(e, n);
});
})), function(e) {
return !is.und(e);
});
}
function getInstanceTimings(e, n) {
var r = e.length, i = function(e) {
return e.timelineOffset ? e.timelineOffset : 0;
}, a = {};
return a.duration = r ? Math.max.apply(Math, e.map(function(e) {
return i(e) + e.duration;
})) : n.duration, a.delay = r ? Math.min.apply(Math, e.map(function(e) {
return i(e) + e.delay;
})) : n.delay, a.endDelay = r ? a.duration - Math.max.apply(Math, e.map(function(e) {
return i(e) + e.duration - e.endDelay;
})) : n.endDelay, a;
}
var instanceID = 0;
function createNewInstance(e) {
var n = replaceObjectProps(defaultInstanceSettings, e), r = replaceObjectProps(defaultTweenSettings, e), i = getProperties(r, e), a = getAnimatables(e.targets), o = getAnimations(a, i), s = getInstanceTimings(o, r), c = instanceID;
return instanceID++, mergeObjects(n, {
id: c,
children: [],
animatables: a,
animations: o,
duration: s.duration,
delay: s.delay,
endDelay: s.endDelay
});
}
var activeInstances = [], engine = (function() {
var e;
function n() {
!e && (!isDocumentHidden() || !anime.suspendWhenDocumentHidden) && activeInstances.length > 0 && (e = requestAnimationFrame(r));
}
function r(n) {
for (var i = activeInstances.length, a = 0; a < i;) {
var o = activeInstances[a];
o.paused ? (activeInstances.splice(a, 1), i--) : (o.tick(n), a++);
}
e = a > 0 ? requestAnimationFrame(r) : void 0;
}
function i() {
anime.suspendWhenDocumentHidden && (isDocumentHidden() ? e = cancelAnimationFrame(e) : (activeInstances.forEach(function(e) {
return e._onDocumentVisibility();
}), engine()));
}
return typeof document < "u" && document.addEventListener("visibilitychange", i), n;
})();
function isDocumentHidden() {
return !!document && document.hidden;
}
function anime(e) {
e === void 0 && (e = {});
var n = 0, r = 0, i = 0, a, o = 0, s = null;
function c(e) {
var n = window.Promise && new Promise(function(e) {
return s = e;
});
return e.finished = n, n;
}
var l = createNewInstance(e);
c(l);
function u() {
var e = l.direction;
e !== "alternate" && (l.direction = e === "normal" ? "reverse" : "normal"), l.reversed = !l.reversed, a.forEach(function(e) {
return e.reversed = l.reversed;
});
}
function d(e) {
return l.reversed ? l.duration - e : e;
}
function f() {
n = 0, r = d(l.currentTime) * (1 / anime.speed);
}
function p(e, n) {
n && n.seek(e - n.timelineOffset);
}
function m(e) {
if (l.reversePlayback) for (var n = o; n--;) p(e, a[n]);
else for (var r = 0; r < o; r++) p(e, a[r]);
}
function g(e) {
for (var n = 0, r = l.animations, i = r.length; n < i;) {
var a = r[n], o = a.animatable, s = a.tweens, c = s.length - 1, u = s[c];
c && (u = filterArray(s, function(n) {
return e < n.end;
})[0] || u);
for (var d = minMax(e - u.start - u.delay, 0, u.duration) / u.duration, f = isNaN(d) ? 1 : u.easing(d), p = u.to.strings, m = u.round, g = [], _ = u.to.numbers.length, v = void 0, y = 0; y < _; y++) {
var b = void 0, x = u.to.numbers[y], S = u.from.numbers[y] || 0;
b = u.isPath ? getPathProgress(u.value, f * x, u.isPathTargetInsideSVG) : S + f * (x - S), m && (u.isColor && y > 2 || (b = Math.round(b * m) / m)), g.push(b);
}
var C = p.length;
if (!C) v = g[0];
else {
v = p[0];
for (var w = 0; w < C; w++) {
p[w];
var T = p[w + 1], E = g[w];
isNaN(E) || (T ? v += E + T : v += E + " ");
}
}
setProgressValue[a.type](o.target, a.property, v, o.transforms), a.currentValue = v, n++;
}
}
function _(e) {
l[e] && !l.passThrough && l[e](l);
}
function v() {
l.remaining && l.remaining !== !0 && l.remaining--;
}
function y(e) {
var o = l.duration, f = l.delay, p = o - l.endDelay, y = d(e);
l.progress = minMax(y / o * 100, 0, 100), l.reversePlayback = y < l.currentTime, a && m(y), !l.began && l.currentTime > 0 && (l.began = !0, _("begin")), !l.loopBegan && l.currentTime > 0 && (l.loopBegan = !0, _("loopBegin")), y <= f && l.currentTime !== 0 && g(0), (y >= p && l.currentTime !== o || !o) && g(o), y > f && y < p ? (l.changeBegan || (l.changeBegan = !0, l.changeCompleted = !1, _("changeBegin")), _("change"), g(y)) : l.changeBegan && (l.changeCompleted = !0, l.changeBegan = !1, _("changeComplete")), l.currentTime = minMax(y, 0, o), l.began && _("update"), e >= o && (r = 0, v(), l.remaining ? (n = i, _("loopComplete"), l.loopBegan = !1, l.direction === "alternate" && u()) : (l.paused = !0, l.completed || (l.completed = !0, _("loopComplete"), _("complete"), !l.passThrough && "Promise" in window && (s(), c(l)))));
}
return l.reset = function() {
var e = l.direction;
l.passThrough = !1, l.currentTime = 0, l.progress = 0, l.paused = !0, l.began = !1, l.loopBegan = !1, l.changeBegan = !1, l.completed = !1, l.changeCompleted = !1, l.reversePlayback = !1, l.reversed = e === "reverse", l.remaining = l.loop, a = l.children, o = a.length;
for (var n = o; n--;) l.children[n].reset();
(l.reversed && l.loop !== !0 || e === "alternate" && l.loop === 1) && l.remaining++, g(l.reversed ? l.duration : 0);
}, l._onDocumentVisibility = f, l.set = function(e, n) {
return setTargetsValue(e, n), l;
}, l.tick = function(e) {
i = e, n ||= i, y((i + (r - n)) * anime.speed);
}, l.seek = function(e) {
y(d(e));
}, l.pause = function() {
l.paused = !0, f();
}, l.play = function() {
l.paused && (l.completed && l.reset(), l.paused = !1, activeInstances.push(l), f(), engine());
}, l.reverse = function() {
u(), l.completed = !l.reversed, f();
}, l.restart = function() {
l.reset(), l.play();
}, l.remove = function(e) {
removeTargetsFromInstance(parseTargets(e), l);
}, l.reset(), l.autoplay && l.play(), l;
}
function removeTargetsFromAnimations(e, n) {
for (var r = n.length; r--;) arrayContains(e, n[r].animatable.target) && n.splice(r, 1);
}
function removeTargetsFromInstance(e, n) {
var r = n.animations, i = n.children;
removeTargetsFromAnimations(e, r);
for (var a = i.length; a--;) {
var o = i[a], s = o.animations;
removeTargetsFromAnimations(e, s), !s.length && !o.children.length && i.splice(a, 1);
}
!r.length && !i.length && n.pause();
}
function removeTargetsFromActiveInstances(e) {
for (var n = parseTargets(e), r = activeInstances.length; r--;) {
var i = activeInstances[r];
removeTargetsFromInstance(n, i);
}
}
function stagger(e, n) {
n === void 0 && (n = {});
var r = n.direction || "normal", i = n.easing ? parseEasings(n.easing) : null, a = n.grid, o = n.axis, s = n.from || 0, c = s === "first", l = s === "center", u = s === "last", d = is.arr(e), f = d ? parseFloat(e[0]) : parseFloat(e), p = d ? parseFloat(e[1]) : 0, m = getUnit(d ? e[1] : e) || 0, g = n.start || 0 + (d ? f : 0), _ = [], v = 0;
return function(e, n, y) {
if (c && (s = 0), l && (s = (y - 1) / 2), u && (s = y - 1), !_.length) {
for (var b = 0; b < y; b++) {
if (!a) _.push(Math.abs(s - b));
else {
var x = l ? (a[0] - 1) / 2 : s % a[0], S = l ? (a[1] - 1) / 2 : Math.floor(s / a[0]), C = b % a[0], w = Math.floor(b / a[0]), T = x - C, E = S - w, D = Math.sqrt(T * T + E * E);
o === "x" && (D = -T), o === "y" && (D = -E), _.push(D);
}
v = Math.max.apply(Math, _);
}
i && (_ = _.map(function(e) {
return i(e / v) * v;
})), r === "reverse" && (_ = _.map(function(e) {
return o ? e < 0 ? e * -1 : -e : Math.abs(v - e);
}));
}
return g + (d ? (p - f) / v : f) * (Math.round(_[n] * 100) / 100) + m;
};
}
function timeline(e) {
e === void 0 && (e = {});
var n = anime(e);
return n.duration = 0, n.add = function(r, i) {
var a = activeInstances.indexOf(n), o = n.children;
a > -1 && activeInstances.splice(a, 1);
function s(e) {
e.passThrough = !0;
}
for (var c = 0; c < o.length; c++) s(o[c]);
var l = mergeObjects(r, replaceObjectProps(defaultTweenSettings, e));
l.targets = l.targets || e.targets;
var u = n.duration;
l.autoplay = !1, l.direction = n.direction, l.timelineOffset = is.und(i) ? u : getRelativeValue(i, u), s(n), n.seek(l.timelineOffset);
var d = anime(l);
s(d), o.push(d);
var f = getInstanceTimings(o, e);
return n.delay = f.delay, n.endDelay = f.endDelay, n.duration = f.duration, n.seek(0), n.reset(), n.autoplay && n.play(), n;
}, n;
}
anime.version = "3.2.1", anime.speed = 1, anime.suspendWhenDocumentHidden = !0, anime.running = activeInstances, anime.remove = removeTargetsFromActiveInstances, anime.get = getOriginalTargetValue, anime.set = setTargetsValue, anime.convertPx = convertPxToUnit, anime.path = getPath, anime.setDashoffset = setDashoffset, anime.stagger = stagger, anime.timeline = timeline, anime.easing = parseEasings, anime.penner = penner, anime.random = function(e, n) {
return Math.floor(Math.random() * (n - e + 1)) + e;
};
var anime_es_default = anime, SearchItem_default = (e, n, r, i) => {
let { searchProvider: a, props: o, slots: s } = i, c = ref(null), l = {};
if (e.customRender) l = e.customRender({
item: e,
queryForm: n,
context: i
});
else switch (e.type) {
case "number":
l = Number_default$1(e, n, i);
break;
case "select":
l = Select_default$1(e, n, i);
break;
case "textarea":
l = Textarea_default(e, n, i);
break;
case "date":
l = Date_default$1(e, n, i);
break;
case "cascade":
l = Cascader_default$1(e, n, i);
break;
case "switch":
l = Switch_default$1(e, n, i);
break;
default:
l = Input_default$1(e, n, i);
break;
}
s[e.key] && (l.Component = s[e.key]({
item: e,
queryForm: n,
context: i
}));
let { conditions: u = [], Component: d, displayValue: f = "", onComponentOpen: p = null } = l, m = (r) => {
n[e.key].condition = u[r].value;
}, g = () => {
r.showPanel &&= !1;
}, _ = () => {
r.showPanel = !0, nextTick(() => {
p && p();
});
}, v = { onEnter: (e, n) => {
anime_es_default({
targets: ".newbie-search-input-container",
padding: "11px",
translateX: "0",
translateY: "0",
duration: 100,
easing: "linear"
}), anime_es_default({
targets: ".newbie-search-condition",
top: "-44px",
opacity: 1,
duration: 100,
easing: "linear"
}), n();
} }, b = computed(() => find(u, { value: n[e.key].condition })?.label || useT("search.equal")), x = computed(() => find(u, { value: n[e.key].condition })?.label || useT("search.equal"));
return createVNode(OnClickOutside, { onTrigger: g }, { default: () => [createVNode("div", { class: `newbie-search-item ${a.maskClass || ""} ${r.hidden ? "hidden" : ""}` }, [createVNode("div", {
class: "newbie-search-mask",
onClick: _
}, [createVNode("div", { class: "newbie-search-mask-title" }, [e.title]), createVNode("div", { class: "newbie-search-mask-content" }, [n[e.key].condition === "equal" ? null : createVNode("div", { class: "newbie-search-mask-condition" }, [x.value]), createVNode("div", { class: "newbie-search-mask-value" }, [f?.value])])]), createVNode(Transition, {
css: !1,
onEnter: v.onEnter
}, { default: () => [r.showPanel ? createVNode("div", {
class: "newbie-search-popup-panel",
ref: c
}, [createVNode("div", { class: "newbie-search-condition" }, [createVNode("span", { class: "newbie-search-condition-title" }, [
useT("common.search"),
" ",
createVNode(TypographyText, { code: !0 }, { default: () => e.title })
]), o.disableConditions || e.disableConditions ? null : createVNode(Dropdown, {
trigger: ["click"],
getPopupContainer: () => c.value
}, {
default: () => createVNode("a", {
class: "newbie-search-condition-dropdown-link",
onClick: withModifiers(() => {}, ["prevent"])
}, [
b.value,
createTextVNode(" "),
createVNode(DownOutlined, null, null)
]),
overlay: () => createVNode(Menu, null, { default: () => u.map((e, n) => createVNode(MenuItem, { key: e.value }, { default: () => createVNode("a", { onClick: () => m(n) }, [e.label]) })) })
})]), createVNode("div", { class: "newbie-search-input-container" }, [isFunction(d) ? d() : d])]) : null] })])] });
};
function _isSlot$6(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var NewbieSearch_default = /* @__PURE__ */ defineComponent({
name: "NewbieSearch",
props: {
filterableColumns: {
type: [Array, Function],
default: () => []
},
sortableColumns: {
type: [Array, Function],
default: () => []
},
disableConditions: {
type: Boolean,
default: !1
},
autoQuery: {
type: Boolean,
default: !1
},
gutter: {
type: [String, Number],
default: 16
},
persistence: {
type: [Boolean, String],
default: !1
}
},
emits: ["search"],
setup(e, { expose: n, emit: r, slots: i }) {
let o = inject(NEWBIE_SEARCH, () => {}), s = reactive({
queryForm: {},
sortForm: {
selectedKeys: [],
targetKeys: []
},
columnKey: {},
searchKey: {},
searchLabels: [],
fieldColumns: [],
expandColumns: [],
sortColumns: [],
openSortable: !1,
isFormExpanded: !1,
availableSearchItems: 0
}), c = ref(), { width: l } = useWindowSize(), u = ["number", "date"], d = ["select", "cascade"], f = {}, p = (n) => e.persistence ? (n ||= "", isBoolean(e.persistence) ? `newbieSearch_${n}` + useSm3(location.href) : `newbieSearch_${n}` + useSm3(location.pathname + "_" + e.persistence)) : null, m = () => {
let n = {}, r = [], i = [], a = [], o = [], c = e.persistence ? useCache(p()).get({}) : {}, l = e.persistence ? useCache(p("sort")).get({}) : {};
e.filterableColumns.forEach((e) => {
let a = cloneDeep(e);
isUndefined(a.sortOrder) && (a.sortOrder = 0), f[a.key] || (f[a.key] = reactive({ showPanel: !1 })), a.type = a.type || "input";
let o = "", s = "equal";
if (a.expandable ? o = [] : u.includes(a.type) ? o = [null, null] : d.includes(a.type) && (o = []), isUndefined(c[a.key])) isUndefined(a.defaultValue) || (o = isFunction(a.defaultValue) ? a.defaultValue() : a.defaultValue);
else {
let e = c[a.key].value;
o = (u.includes(a.type) || d.includes(a.type)) && !isArray(e) ? [e] : e;
}
if (isUndefined(c[a.key]) ? a.conditions && a.conditions.length === 1 ? s = a.conditions[0] : a.defaultCondition && (s = isFunction(a.defaultCondition) ? a.defaultCondition() : a.defaultCondition) : s = c[a.key].condition, a.expandable) {
if (!a.options) {
console.error("expandable 为 true 时,必须提供 options 属性");
return;
}
a.type = "select", r.push(a);
} else isUndefined(f[a.key].hidden) && (f[a.key].hidden = !1), i.push(a);
a.type === "date" && (isArray(o) ? o = o.map((e) => isString(e) ? dayjs(new Date(e)) : e) : isString(o) && (o = dayjs(new Date(o)))), a.type === "switch" && (o = isBoolean(o) ? o ? "checked" : "unchecked" : void 0), n[a.key] = {
value: o,
type: a.type,
condition: s
};
}), e.sortableColumns.forEach((e) => {
let n = cloneDeep(e);
isUndefined(l[e.key]) || (o.push(e.key), n.direction = l[e.key]), (e.direction === "asc" || e.direction === "desc") && o.push(e.key), a.push(n);
}), s.queryForm = n, s.sortColumns = orderBy(a, ["sortOrder"], ["desc"]), s.fieldColumns = orderBy(i, ["sortOrder"], ["desc"]), s.expandColumns = orderBy(r, ["sortOrder"], ["desc"]), s.sortForm.targetKeys = o;
};
watch(() => [e.filterableColumns, e.sortableColumns], () => {
m();
}, { immediate: !0 });
let _ = computed(() => s.fieldColumns.length > s.availableSearchItems), v = () => {
s.openSortable = !1, r("search", {
newbieQuery: w(),
newbieSort: C()
});
}, b = () => {
useCache(p()).remove(), useCache(p("sort")).remove(), m();
}, x = () => {
S({ show: !s.isFormExpanded }), s.isFormExpanded = !s.isFormExpanded;
}, S = ({ show: e, stand: n }) => {
_.value && !n && s.fieldColumns.forEach((n, r) => {
f[n.key].hidden = e ? !1 : r >= s.availableSearchItems;
});
};
onMounted(() => {
e.persistence && r("search", {
persistence: !0,
newbieQuery: w(),
newbieSort: C()
}), watch(() => l.value, () => {
let n = Math.floor(c.value.scrollWidth / (200 + e.gutter));
s.availableSearchItems !== n && (s.availableSearchItems = n, S({}));
}, { immediate: !0 });
});
let C = () => {
let n = {};
return s.sortForm.targetKeys.forEach((e) => {
let r = find(s.sortColumns, { key: e });
n[e] = r.direction, s.searchLabels.push(createVNode(Tag, { color: "green" }, { default: () => [createVNode("span", { style: { marginRight: "2px" } }, [r.title]), r.direction === "asc" ? createVNode(RiseOutlined, null, null) : createVNode(FallOutlined, null, null)] }));
}), e.persistence && useCache(p("sort")).set(n), n;
}, w = () => {
let n = {}, r = {};
return s.searchLabels = [], concat(s.fieldColumns, s.expandColumns).forEach((i) => {
let { value: a, searchLabel: c } = i.collectItem ? i.collectItem({
queryForm: s.queryForm,
item: i
}) : {}, { condition: l, type: u } = s.queryForm[i.key];
if (Array.isArray(a) && a.length > 0 || !Array.isArray(a) && a != null && a !== "" || l === "null" || l === "notNull") {
e.persistence && (r[i.key] = {
condition: l,
type: u,
value: a
});
let d = o?.valueFormatter?.[i.type];
d && isFunction(d) && (a = isArray(a) ? a.map((e) => d(e)) : d(a)), n[i.key] = {
condition: l,
type: u,
value: a
}, s.searchLabels.push(c ? createVNode(Tag, { color: "blue" }, _isSlot$6(c) ? c : { default: () => [c] }) : null);
}
}), e.persistence && useCache(p()).set(r), n;
};
n({
getQueryForm: w,
setQueryForm: (e) => {
Object.keys(e).forEach((n) => {
s.queryForm[n] ? s.queryForm[n].value = e[n] : s.queryForm[n] = { value: e[n] };
});
},
getSortForm: C,
getSearch: () => {
s.searchLabels = [];
let e = {}, n = w(), r = C();
return Object.keys(n).length && (e.newbieQuery = n), Object.keys(r).length && (e.newbieSort = r), e;
}
});
let T = () => s.fieldColumns.map((n) => SearchItem_default(n, s.queryForm, f[n.key], {
props: e,
slots: i,
searchProvider: o
})), E = () => s.expandColumns.map((e) => Expand_default(e, s.queryForm)), D = () => s.sortColumns.length ? createVNode(Modal, {
title: useT("search.sort-setting"),
open: s.openSortable,
"onUpdate:open": (e) => s.openSortable = e,
width: "800px",
okText: useT("common.search"),
cancelText: useT("common.cancel"),
onOk: () => v()
}, { default: () => Sortable_default(s.sortColumns, s.sortForm) }) : null;
return () => createVNode("div", { class: "newbie-search" }, [
createVNode("div", { class: "newbie-search-query" }, [createVNode("div", { class: "newbie-search-form" }, [createVNode("div", {
class: "newbie-search-form-wrapper",
ref: c
}, [createVNode(Space, {
size: [e.gutter, 10],
wrap: !0,
style: { marginBottom: 0 }
}, { default: () => T() })])]), createVNode(Space, { class: "newbie-search-operation" }, { default: () => [
_.value ? createVNode(Tooltip, { title: useT("search.toggle-more") }, { default: () => createVNode(Button, {
type: "link",
icon: s.isFormExpanded ? createVNode(ShrinkOutlined, null, null) : createVNode(ArrowsAltOutlined, null, null),
onClick: x
}, { default: () => s.isFormExpanded ? useT("search.collapse") : useT("common.more") }) }) : null,
createVNode(Tooltip, { title: useT("search.clear-all-search-items") }, { default: () => createVNode(Button, {
type: "dashed",
icon: createVNode(ClearOutlined, null, null),
onClick: b
}, { default: () => e.sortableColumns.length ? "" : useT("common.clear") }) }),
e.sortableColumns.length ? createVNode(Tooltip, { title: useT("search.sort-setting") }, { default: () => createVNode(Button, {
type: s.sortForm.targetKeys.length ? "primary" : "default",
icon: createVNode(OrderedListOutlined, null, null),
onClick: () => s.openSortable = !0
}, null) }) : null,
createVNode(Button, {
type: "primary",
icon: createVNode(SearchOutlined, null, null),
onClick: v
}, { default: () => useT("common.search") })
] })]),
s.expandColumns?.length ? createVNode("div", { class: "newbie-search-expand" }, [E()]) : null,
s.searchLabels?.length ? createVNode("div", { class: "newbie-search-label" }, [createVNode("span", { class: "newbie-search-label-title" }, [useT("search.search-items"), createTextVNode(":")]), createVNode(Space, {
class: "newbie-search-label-content",
wrap: !0,
style: { marginBottom: 0 }
}, { default: () => s.searchLabels })]) : null,
D()
]);
}
});
function _isSlot$5(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var NewbieTable_default = /* @__PURE__ */ defineComponent({
name: "NewbieTable",
props: {
title: {
type: String,
default: ""
},
filterable: {
type: Boolean,
default: !0
},
tableProps: {
type: Object,
default: () => ({})
},
tableEvents: {
type: Object,
default: () => ({})
},
tableSlots: {
type: Object,
default: () => ({})
},
searchSlots: {
type: Object,
default: () => ({})
},
pagination: {
type: [Boolean, Object],
default: !0
},
pageEvents: {
type: Object,
default: () => ({})
},
autoQuery: {
type: Boolean,
default: !1
},
url: {
type: String,
default: ""
},
editable: {
type: Boolean,
default: !1
},
submitUrl: {
type: String,
default: ""
},
beforeCellSubmit: {
type: Function,
default: null
},
method: {
type: String,
default: "get"
},
extraData: {
type: Object,
default: () => ({})
},
afterFetched: {
type: Function,
default: null
},
columns: {
type: [Array, Function],
default: () => []
},
rowSelection: {
type: [Boolean, Object],
default: () => null
},
rowKey: {
type: [String, Function],
default: "id"
},
dataSource: {
type: Array,
default: () => []
},
formData: {
type: Array,
default: () => []
},
expandRender: {
type: [String, Function],
default: null
},
expandedRowKeys: {
type: Array,
default: () => null
},
showRefresh: {
type: Boolean,
default: !0
},
persistence: {
type: [Boolean, String],
default: !1
},
cardWrapper: {
type: Boolean,
default: !0
}
},
emits: [
"fetch",
"rowClick",
"cellSubmit"
],
setup(e, { emit: n, slots: r, expose: i }) {
let o = ref(), s = ref(), c = inject(NEWBIE_TABLE, () => {}), { copy: l } = useClipboard({ legacy: !0 }), u = (n) => e.persistence ? (n ||= "", isBoolean(e.persistence) ? `newbieTable_${n}` + useSm3(location.href) : `newbieTable_${n}` + useSm3(location.pathname + "_" + e.persistence)) : null, d = e.persistence ? useCache(u()).get({}) : {}, f = reactive({
customColumns: [],
tableColumns: [],
editingData: {},
editingSwitchData: {},
filterableColumns: [],
sortableColumns: [],
temporary: {},
tableLoading: { loading: !1 },
customColumnVisible: !1,
columnKeyModal: [],
pagination: {
totalSize: 0,
currentPage: d.currentPage || 1,
pageSize: d.pageSize || e.pagination?.pageSize || 10
},
id: "",
tableSelection: [],
tableKeySelection: [],
items: [],
columnKey: {},
fetchQueue: [],
searchFormData: {}
}), p = () => {
if (!e.persistence) return;
let n = { ...f.pagination };
useCache(u()).set(n);
}, m = () => {
f.columnKeyModal = [], Object.keys(f.columnKey).forEach((e) => {
f.columnKey[e] && f.columnKeyModal.push(e);
}), f.customColumnVisible = !0;
}, _ = () => {
f.columnKeyModal = [];
}, b = () => {
_(), Object.keys(f.columnKey).forEach((e) => {
f.columnKeyModal.push(e);
});
}, x = (e, n) => {
f.tableKeySelection = [].concat(e), f.tableSelection = [].concat(n);
}, S = (e, n) => {
n.width = e;
}, T = () => {
Object.keys(f.columnKey).forEach((e) => {
f.columnKey[e] = f.columnKeyModal.indexOf(e) > -1;
}), f.customColumnVisible = !1;
}, E = () => {
let n = {
...f.searchFormData,
...e.extraData
};
return e.pagination && (f.pagination.pageSize && (n[c.pageSizeKey] = f.pagination.pageSize), n[c.pageKey] = f.pagination.currentPage), n;
}, D = (e) => {
o.value && o.value?.setQueryForm(e);
}, k = async () => {
let n = {}, r = E(), i = (/* @__PURE__ */ new Date()).getTime();
f.fetchQueue.push(i);
let a = e.method;
a === "get" ? n = { params: r } : a === "post" && (n = { ...r });
let o = await useFetch(f.tableLoading)[a](e.url, n);
useProcessStatusSuccess(o, () => {
if (!f.fetchQueue.length) return;
f.fetchQueue[f.fetchQueue.length - 1] === i && (f.fetchQueue = []), f.tableKeySelection = [], f.tableSelection = [];
let n = (e.afterFetched || c.afterFetched)(o);
e.pagination && (f.pagination.totalSize = n.totalSize), f.items = n.items;
});
}, A = async (r) => {
r === !0 && (f.pagination.currentPage = 1), e.url ? await k() : n("fetch"), p();
}, M = (e) => {
f.searchFormData = e, A(!e.persistence);
}, N = (e) => e.key ? e.key : isArray(e.dataIndex) ? e.dataIndex.join(".") : e.dataIndex, F = (e) => {
let n = [];
return e && e.length && e.forEach((e) => {
let r = cloneDeep(e), i = N(r);
if (i && isUndefined(f.columnKey[i]) && (f.columnKey[i] = !0), !r.children) (i && f.columnKey[i] || !i) && n.push({
...r,
resizable: !0
});
else {
let e = F([].concat(r.children));
e.length && (r.children = e, (i && f.columnKey[i] || !i) && n.push(r));
}
}), n;
}, I = (e) => {
let n = [];
return e && e.length && e.forEach((e) => {
let r = cloneDeep(e);
if (r.checkKey = N(r), !r.children) n.push(r);
else {
let e = I(r.children);
delete r.children, n.push(r), n = n.concat(e);
}
}), n;
}, L = computed(() => {
let n;
return n = isFunction(e.columns) ? e.columns() : e.columns.length ? e.columns : e.tableProps.columns, n.map((e) => (e.minWidth && (e.RC_TABLE_INTERNAL_COL_DEFINE = { style: { "min-width": `${e.minWidth}px` } }, e.width = e.minWidth), e.key = N(e), e));
}), R = () => {
let e = L.value.filter((e) => !e.isOnlyForQuery);
f.customColumns = I([].concat(e)), f.tableColumns = F([].concat(e));
}, z = () => {
f.filterableColumns = L.value.filter((e) => e.filterable || e.isOnlyForQuery).map((e) => ({
title: e.title,
key: N(e),
options: e.options,
...e.filterable
})), f.sortableColumns = L.value.filter((e) => e.sortable).map((e) => {
let n = {
title: e.title,
key: N(e)
};
return e.sortable === "asc" || e.sortable === "ASC" ? n.direction = "asc" : e.sortable === "desc" || e.sortable === "DESC" ? n.direction = "desc" : n = {
...n,
...e.sortable
}, n;
});
};
watch(() => [L, f.columnKey], (e, n) => {
R(), (!n || !isEqual(e[0].value.map((e) => N(e)).toSorted(), n[0].value.map((e) => N(e)).toSorted())) && z();
}, {
immediate: !0,
deep: !0
}), watch(() => f.pagination, (e) => {
e && s.value?.classList.add("pagination-adapt");
}, { deep: !0 }), watch(() => e.formData, (e, n) => {
isEqual(e, n) || (f.items = e);
});
let B = () => {
e.url ? (f.searchFormData = o.value?.getSearch(), nextTick(() => k())) : (e.formData.length && (f.items = e.formData), e.dataSource.length && (f.items = e.dataSource), n("fetch"));
};
onMounted(() => {
e.persistence || B();
}), i({
getData: () => [].concat(f.items),
setData: (e) => {
f.items = e;
},
setPagination: (e, n, r) => {
isUndefined(e) || (f.pagination.totalSize = e), isUndefined(n) || (f.pagination.currentPage = n), isUndefined(r) || (f.pagination.pageSize = r);
},
getPagination: () => f.pagination,
getSelection: () => [].concat(f.tableSelection),
getQueryData: E,
setQueryData: D,
doFetch: A,
setTableLoading: (e) => f.tableLoading.loading = e
});
let V = () => r.title ? createVNode("div", { class: "newbie-table-title-wrapper" }, [r.title()]) : e.title ? createVNode("div", { class: "newbie-table-title-wrapper" }, [e.title]) : null, H = () => r.prepend ? createVNode("div", { class: "newbie-table-prepend-wrapper" }, [r.prepend()]) : null, U = () => e.filterable ? [createVNode(NewbieSearch_default, {
ref: o,
persistence: e.persistence,
filterableColumns: f.filterableColumns,
sortableColumns: f.sortableColumns,
onSearch: M
}, { ...e.searchSlots }), createVNode(Divider, null, null)] : null, W = () => createVNode("div", { class: "newbie-table-functional-wrapper" }, [createVNode("div", { class: "newbie-table-functional" }, [r.functional ? r.functional() : null]), createVNode("div", { class: "newbie-table-functional-default" }, [e.filterable ? createVNode(Button, {
type: "link",
style: { marginRight: "5px" },
onClick: m
}, { default: () => useT("table.custom") }) : null, e.showRefresh ? createVNode(Button, {
class: "newbie-table-refresh",
icon: createVNode(SyncOutlined, null, null),
onClick: () => A(!1)
}, null) : null])]), G = () => ({
bordered: !0,
size: "middle",
scroll: {
y: 570,
x: 1e3,
scrollToFirstRowOnChange: !0
},
rowClassName: (e, n) => n % 2 == 1 ? "newbie-table-striped" : null,
expandedRowRender: e.expandRender,
expandedRowKeys: e.expandedRowKeys,
rowKey: e.rowKey,
customRow: (r, i) => ({ onClick: (a) => {
f.editingData[r[e.rowKey]] || n("rowClick", {
record: r,
index: i,
event: a
});
} }),
...e.tableProps
}), K = () => {
let n = e.pagination ? isObject(e.pagination) ? cloneDeep(e.pagination) : {} : !1;
return isObject(n) && (n = {
size: "small",
showQuickJumper: !0,
showSizeChanger: !0,
showTotal: (e) => useT("table.total", { total: e }),
pageSizeOptions: [
"10",
"30",
"50",
"100",
"300",
"500"
],
total: f.pagination.totalSize,
pageSize: f.pagination.pageSize,
current: f.pagination.currentPage,
"onUpdate:current": (e) => {
f.pagination.currentPage = e;
},
"onUpdate:pageSize": (e) => {
f.pagination.pageSize = e;
},
onChange: () => {
A(!1);
},
showSizeChange: () => {
A(!0);
},
...n
}), n;
}, q = () => {
let n = e.rowSelection ? isObject(e.rowSelection) ? cloneDeep(e.rowSelection) : {} : null;
return isObject(n) && (n = {
selectedRowKeys: f.tableKeySelection,
preserveSelectedRowKeys: !0,
columnWidth: 40,
fixed: !0,
onChange: x,
...n
}), n;
}, J = (n, r, i, a) => {
f.editingData[r[e.rowKey]] ? f.editingData[r[e.rowKey]][i] = a : f.editingData[r[e.rowKey]] = { [i]: a };
}, Y = (n, r) => {
f.editingData[n[e.rowKey]] && delete f.editingData[n[e.rowKey]][r];
}, X = async (r, i, a) => {
if (!e.submitUrl && !e.beforeCellSubmit) return;
let o = null;
o = r.type === "switch" ? f.editingSwitchData[i[e.rowKey]][a] : f.editingData[i[e.rowKey]][a];
let s = {
[e.rowKey]: i[e.rowKey],
[a]: o
};
Y(i, a), r.beforeCellSubmit ? (f.tableLoading.loading = !0, await r.beforeCellSubmit(s), f.tableLoading.loading = !1) : e.beforeCellSubmit ? (f.tableLoading.loading = !0, await e.beforeCellSubmit(s), f.tableLoading.loading = !1) : useProcessStatusSuccess(await useFetch(f.tableLoading).post(e.submitUrl, s), () => {
message.success(i18n_default.global.t("common.save-success")), n("cellSubmit", {
record: i,
key: a,
value: o
});
});
}, Z = (n) => {
let { column: r, text: i, record: a } = n, o = r.editable;
r.editable === !0 && (o = { type: "input" });
let s = o.key || r.key, c = isUndefined(o.defaultValue) ? i : o.defaultValue, l = f.editingData[a[e.rowKey]] && !isUndefined(f.editingData[a[e.rowKey]][s]), u = l ? createVNode("span", { class: "table-editable-icon editing" }, [createVNode(CheckCircleOutlined, {
class: "check-icon",
onClick: withModifiers(() => X(o, a, s), ["stop"])
}, null), createVNode(CloseCircleOutlined, {
class: "close-icon",
onClick: withModifiers(() => Y(a, s), ["stop"])
}, null)]) : createVNode("span", { class: "table-editable-icon" }, [createVNode(EditOutlined, {
class: "edit-icon",
onClick: withModifiers(() => J(o, a, s, c), ["stop"])
}, null)]), d = () => {
if (o.type === "input") return createVNode(Input, mergeProps({
value: f.editingData[a[e.rowKey]][s],
"onUpdate:value": (n) => f.editingData[a[e.rowKey]][s] = n,
style: { width: "100%" }
}, o.defaultProps), { ...o.defaultSlots });
if (o.type === "number") return createVNode(InputNumber, mergeProps({
value: f.editingData[a[e.rowKey]][s],
"onUpdate:value": (n) => f.editingData[a[e.rowKey]][s] = n,
style: { width: "100%" }
}, o.defaultProps), { ...o.defaultSlots });
if (o.type === "select") return createVNode(Select, mergeProps({
value: f.editingData[a[e.rowKey]][s],
"onUpdate:value": (n) => f.editingData[a[e.rowKey]][s] = n,
options: o.options,
style: { width: "100%" }
}, o.defaultProps), { ...o.defaultSlots });
};
if (o.type === "switch") {
let n = {
checkedChildren: () => o.options?.[0] || null,
unCheckedChildren: () => o.options?.[1] || null
};
return isUndefined(f.editingSwitchData[a[e.rowKey]]) && (f.editingSwitchData[a[e.rowKey]] = {}), isUndefined(f.editingSwitchData[a[e.rowKey]][s]) && (f.editingSwitchData[a[e.rowKey]][s] = c), createVNode("div", { class: "table-editable-wrapper" }, [createVNode("div", { class: "table-editable-text" }, [createVNode(Switch, mergeProps({
checked: f.editingSwitchData[a[e.rowKey]][s],
"onUpdate:checked": (n) => f.editingSwitchData[a[e.rowKey]][s] = n,
onClick: (e, n) => n.stopPropagation(),
onChange: (e, n) => {
n.stopPropagation(), X(o, a, s);
}
}, o.defaultProps), _isSlot$5(n) ? n : { default: () => [n] })])]);
} else {
let e = null;
return e = l ? d() : r.customRender ? r.customRender(n) : i, createVNode("div", { class: "table-editable-wrapper" }, [createVNode("div", { class: "table-editable-text" }, [e]), u]);
}
}, Q = () => createVNode(Table, mergeProps({
rowSelection: q(),
pagination: K(),
loading: f.tableLoading.loading,
dataSource: f.items,
columns: f.tableColumns,
onResizeColumn: S
}, G()), {
headerCell: ({ column: n }) => {
let r = [createVNode("span", null, [n.title]), n.tooltip ? isFunction(n.tooltip) ? createVNode(Tooltip, null, {
default: () => createVNode(InfoCircleOutlined, { style: { marginLeft: "5px" } }, null),
title: n.tooltip
}) : createVNode(Tooltip, { title: n.tooltip }, { default: () => createVNode(InfoCircleOutlined, { style: { marginLeft: "5px" } }, null) }) : null], i = [];
return e.editable && n.editable && i.push(createVNode("span", { class: "newbie-table-header-func" }, [useT("table.editable")])), createVNode("div", { class: `newbie-table-header-wrapper ${i?.length ? "with-func" : ""}` }, [createVNode("div", { class: "newbie-table-header-title-wrapper" }, [r]), createVNode("div", { class: "newbie-table-header-func-wrapper" }, [i])]);
},
bodyCell: ({ column: n, text: r, record: i, index: a }) => e.editable && n.editable ? Z({
column: n,
text: r,
record: i,
index: a
}) : n.customRender ? n.customRender({
column: n,
text: r,
record: i,
index: a
}) : n.onClick ? createVNode("a", {
href: "javascript:void(0);",
onClick: withModifiers(() => n.onClick({
column: n,
text: r,
record: i,
index: a
}), ["stop"])
}, [r]) : n.onCopy ? createVNode("span", {
class: "table-copy-wrapper",
onClick: withModifiers(() => {
n.onCopy === !0 ? l(r) : n.onCopy(l, {
column: n,
text: r,
record: i,
index: a
}), message.success(i18n_default.global.t("table.copy-success"));
}, ["stop"])
}, [createVNode("span", { class: "table-copy-content" }, [r]), createVNode(CopyOutlined, null, null)]) : createVNode("span", null, [r]),
...e.tableSlots
}), $ = () => r.append || e.pagination ? createVNode("div", {
ref: s,
class: "newbie-table-footer"
}, [createVNode("div", { class: "newbie-table-append-wrapper" }, [r.append ? r.append() : null]), createVNode("div", { class: "newbie-table-pagination-wrapper" }, null)]) : null;
return () => createVNode("div", { class: "newbie-table" }, [e.cardWrapper ? createVNode(Card, {
size: "small",
class: "newbie-table-card"
}, {
title: () => V(),
extra: () => r.extra ? r.extra() : null,
default: () => [
H(),
U(),
W(),
Q(),
$()
]
}) : [
H(),
U(),
W(),
Q(),
$()
], createVNode(Modal, {
open: f.customColumnVisible,
"onUpdate:open": (e) => f.customColumnVisible = e,
title: useT("table.custom"),
width: "900px",
onOk: T
}, { default: () => [
createVNode(CheckboxGroup, {
value: f.columnKeyModal,
"onUpdate:value": (e) => f.columnKeyModal = e,
style: { width: "100%" }
}, { default: () => createVNode(Row, { gutter: 15 }, { default: () => f.customColumns.map((e) => createVNode(Col, { span: 6 }, { default: () => createVNode(Checkbox, {
style: {
width: "100%",
marginBottom: "5px",
overflow: "hidden"
},
value: e.checkKey
}, { default: () => e.title }) })) }) }),
createVNode(Divider, null, null),
createVNode(Button, { onClick: b }, { default: () => useT("table.select-all") }),
createVNode(Button, {
onClick: _,
style: { marginLeft: "5px" }
}, { default: () => useT("table.unselect-all") })
] })]);
}
});
function useTableActions$1(e) {
return e ? (isArray(e) || (e = [e]), createVNode("div", { class: "table-actions-wrapper" }, [e.map((e) => {
let n = { ...e.props }, { type: r } = e, { name: i } = e, a = null;
if ((!r || r === "button") && (a = NewbieButton_default, n.type = n.type || "text"), (r === "a-tag" || r === "tag") && (a = Tag), r === "switch" && (a = Switch, e.name && (n.checkedChildren = e.name?.[0] || "", n.unCheckedChildren = e.name?.[1] || ""), n.checked = e.value, n.disabled = !0), e.action && (n.onClick = withModifiers(() => e.action(), ["stop"])), e.tooltip) {
let r = e.tooltip;
return createVNode(Tooltip, {
title: r,
transfer: !0
}, { default: () => createVNode(a, n, { default: () => i }) });
}
if (e.children?.length) {
let r = e.children;
return createVNode(Dropdown, {
placement: "bottom",
onClick: withModifiers(() => {}, ["stop"])
}, {
default: () => createVNode(NewbieButton_default, mergeProps({
type: "text",
size: "small"
}, n), { default: () => [createVNode(DownOutlined, { style: { fontSize: "12px" } }, null), i] }),
overlay: () => createVNode(Menu, null, { default: () => r.map((e) => createVNode(MenuItem, null, { default: () => createVNode(NewbieButton_default, mergeProps({
type: "text",
style: { textAlign: "left" },
buttonProps: { block: !0 },
onClick: withModifiers(() => e.action(), ["stop"])
}, e.props), { default: () => e.name }) })) })
});
}
return createVNode(a, n, { default: () => i });
})])) : null;
}
function useTableImage$1(e, n) {
return e ? (isArray(e) || (e = [e]), createVNode(Flex, { gap: "small" }, { default: () => e.map((e) => createVNode(Image$1, {
src: e.thumbUrl || e.url || e,
preview: { src: e.url || e.thumbUrl || e },
width: 48,
height: 48
}, null)) })) : createVNode("span", { style: { fontSize: "30px" } }, [createVNode(n || PictureOutlined, null, null)]);
}
function useTableFile$1(e, n) {
let { DefaultIcon: r, placeholder: i = "暂无内容", fileName: a } = n || {};
return e ? (isArray(e) || (e = [e]), e.map((n, i) => {
let o = n.url || n, s = a || n.name || (e.length > 1 ? `查看附件${i + 1}` : "查看附件");
return createVNode("a", {
href: o,
style: { display: "block" },
target: "_blank"
}, [createVNode("span", { style: { fontSize: "14px" } }, [
createVNode(r || FilePdfOutlined, null, null),
createTextVNode(" "),
s
])]);
})) : createVNode("span", null, [i]);
}
const useTableActions = useTableActions$1, useTableImage = useTableImage$1, useTableFile = useTableFile$1, NewbieTable = withInstall_default(NewbieTable_default);
function _isSlot$4(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Group_default = (e, n, r, i) => {
let { t: a } = useI18n();
Object.keys(r).length || (r.editFormRef = null, r.showEditModal = !1, r.editIndex = -1, r.editFormData = {});
let o = toRef(r.editFormRef), { provider: s } = i, c = s.uploaderProvider, l = e.children;
isFunction(e.children) && (l = e.children({ submitForm: n }));
let u = l.filter((e) => !e.invisible).map((e) => ({
dataIndex: e.key,
title: e.title,
width: e.width,
key: e.key,
item: e,
...e.cellProps
})), d = {
title: a("common.actions"),
dataIndex: "operations",
align: "center",
fixed: "right",
width: 120 + (e.childrenOperations?.length || 0) * 60
}, p = e.disabled || e.readonly ? [...u] : [...u, d], g = computed(() => n[e.key] || []), _ = (e, n) => {
if (e) r.editFormData = e, r.editIndex = n;
else {
let e = {};
l.forEach((n) => {
e[n.key] = initItemDefaultValue(n, {}, {}, { uploaderProvider: c });
}), r.editFormData = e, r.editIndex = -1;
}
r.showEditModal = !0;
}, v = ({ formatForm: i }) => (r.editIndex === -1 ? n[e.key].push(i) : n[e.key][r.editIndex] = i, r.showEditModal = !1, !1), y = () => new Promise((e) => {
o.value?.isDirty() ? Modal.confirm({
content: a("common.cancel-confirm"),
okText: a("common.confirm"),
cancelText: a("common.cancel"),
onOk: () => e(!0),
onCancel: () => e(!1)
}) : e(!0);
}), S = (r) => {
n[e.key].splice(r, 1);
};
return createVNode("div", null, [createVNode(Table, {
columns: p,
dataSource: g.value,
pagination: !1,
bordered: !0,
size: "small"
}, {
bodyCell: ({ column: r, record: i, index: o }) => {
if (r.item?.type === "select") {
let e = isFunction(r.item?.options) ? r.item.options({
submitForm: n,
record: i
}) : r.item.options;
return e = e.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), createVNode("span", null, [useLabelFromOptionsValue(i[r.item.key], e)]);
} else if (r.item?.type === "date") {
if (i[r.item.key]) {
let e = dayjs(i[r.item.key]);
return r.item?.defaultProps?.format ? createVNode("span", null, [e.format(r.item.defaultProps.format)]) : r.item?.defaultProps?.showTime ? createVNode("span", null, [e.format("YYYY-MM-DD HH:mm:ss")]) : createVNode("span", null, [e.format("YYYY-MM-DD")]);
}
return null;
} else if (r.item?.type === "switch") {
let e = r.item.options || [a("common.yes"), a("common.no")];
return createVNode(FormItemRest, null, { default: () => [createVNode(Switch, mergeProps({
checked: i[r.item.key],
"onUpdate:checked": (e) => i[r.item.key] = e,
disabled: !0,
checkedChildren: e[0],
unCheckedChildren: e[1]
}, r.item.defaultProps), null)] });
} else if (r.item?.type === "tree-select") {
let e = isFunction(r.item?.options) ? r.item.options({
submitForm: n,
record: i
}) : r.item.options, a = cloneDeep(i[r.item.key]);
return isArray(a) || (a = [a]), createVNode("span", null, [useFindLabelsInValues(e, a, r.item?.defaultProps?.fieldNames || null).join(", ")]);
} else if (r.item?.type === "tag") return i[r.item.key]?.map((e) => createVNode(Tag, { color: "blue" }, _isSlot$4(e) ? e : { default: () => [e] }));
else if (r.item?.type === "uploader") return createVNode("div", { class: "flex justify-center" }, [useTableImage(i[r.item.key])]);
else if (r.item?.type === "time" || r.item?.type === "date") {
let e = r.item?.defaultProps?.format || (r.item?.type === "time" ? "HH:mm:ss" : "YYYY-MM-DD");
return r.item?.defaultProps?.type === "range" ? createVNode("span", null, [
dayjs(i[r.item.key][0]).format(e),
createTextVNode(" -"),
" ",
dayjs(i[r.item.key][1]).format(e)
]) : i[r.item.key] ? createVNode("span", null, [dayjs(i[r.item.key]).format(e)]) : createVNode("span", null, null);
}
if (r.dataIndex === "operations") {
let n = [createVNode(Button, {
type: "text",
size: "small",
onClick: () => _(i, o)
}, { default: () => a("common.edit") })];
return e.childrenOperations?.forEach((e) => {
n.push(createVNode(Button, {
type: "text",
size: "small",
onClick: () => e.action({
column: r,
record: i,
index: o
})
}, { default: () => e.name }));
}), n.push(createVNode(Popconfirm, {
title: a("common.delete-confirm"),
onConfirm: () => S(o)
}, { default: () => createVNode(Button, {
type: "text",
size: "small"
}, { default: () => a("common.delete") }) })), createVNode("div", { class: "table-actions-wrapper" }, [
createTextVNode(" "),
n,
createTextVNode(" ")
]);
}
},
summary: () => e.disabled || e.readonly ? null : createVNode(TableSummaryRow, null, { default: () => createVNode(TableSummaryCell, { colSpan: p.length }, { default: () => createVNode(Button, {
icon: createVNode(PlusOutlined, null, null),
block: !0,
onClick: () => _(!1)
}, { default: () => useI18nJoin(a("common.add"), e.title) }) }) })
}), createVNode(NewbieModal_default, {
visible: r.showEditModal,
"onUpdate:visible": (e) => r.showEditModal = e,
type: "drawer",
title: useI18nJoin(a("common.edit"), e.title),
beforeClose: y
}, { default: () => [createVNode(resolveComponent("NewbieForm"), {
ref: o,
form: l,
closable: !1,
data: r.editFormData,
beforeSubmit: v,
onClose: async () => {
r.showEditModal = !await y();
}
}, null)] })]);
}, Rate_default = (e, n) => (n[e.key] = Number(n[e.key]) || 0, createVNode(Rate, mergeProps({
value: n[e.key],
"onUpdate:value": (r) => n[e.key] = r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, e.defaultProps), { ...e.defaultSlots })), MatrixRadio_default = (e, n) => {
let r = isFunction(e.rows) ? e.rows(n) : e.rows, i = isFunction(e.options) ? e.options(n) : e.options;
return i = i.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), createVNode(Table, {
pagination: !1,
bordered: !0,
columns: [{
title: `${useT("form.row-title")}\\${useT("form.options")}`,
dataIndex: "row",
type: "title"
}].concat(i.map((e) => ({
title: e.label,
dataIndex: e.value,
align: "center",
type: "option"
}))),
dataSource: r,
size: "middle"
}, { bodyCell: ({ index: i, column: a }) => {
let o = r[i];
if (a.type === "title") return o;
if (a.type === "option") {
let r = `${a.dataIndex}`;
return createVNode(FormItemRest, null, { default: () => createVNode(RadioGroup, {
value: n[e.key][o],
"onUpdate:value": (r) => n[e.key][o] = r
}, { default: () => [createVNode(Radio, {
value: r,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, null)] }) });
}
} });
}, MatrixCheckbox_default = (e, n) => {
let r = isFunction(e.rows) ? e.rows(n) : e.rows, i = isFunction(e.options) ? e.options(n) : e.options;
i = i.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e);
let a = [{
title: `${useT("form.row-title")}\\${useT("form.options")}`,
dataIndex: "row",
type: "title"
}].concat(i.map((e) => ({
title: e.label,
dataIndex: e.value,
align: "center",
type: "option"
}))), o = (r, i) => {
n[e.key][r] || (n[e.key][r] = []), n[e.key][r].includes(i) ? remove(n[e.key][r], (e) => e === i) : n[e.key][r].push(i);
};
return createVNode(Table, {
pagination: !1,
bordered: !0,
columns: a,
dataSource: r,
size: "middle"
}, { bodyCell: ({ index: i, column: a }) => {
let s = r[i];
if (a.type === "title") return s;
if (a.type === "option") {
let r = `${a.dataIndex}`;
return createVNode(FormItemRest, null, { default: () => createVNode(Checkbox, {
id: `${s}_${r}`,
checked: n[e.key][s]?.includes(r),
onChange: () => o(s, r),
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, null) });
}
} });
}, MatrixScale_default = (e, n) => {
let r = isFunction(e.rows) ? e.rows(n) : cloneDeep(e.rows), i = e.defaultProps?.level || 5, a = isFunction(e.options) ? e.options(n) : e.options || [];
if (a = a.map((e) => isString(e) || isNumber(e) ? {
value: e,
label: e
} : e), a.length > i) a = a.slice(0, i);
else if (a.length < i) for (let e = a.length; e < i; e += 1) a.push({
label: e + 1,
value: e + 1
});
let o = [{
title: `${useT("form.row-title")}\\${useT("form.options")}`,
dataIndex: "row",
type: "title"
}].concat(a.map((e) => ({
title: e.label,
dataIndex: e.value,
align: "center",
type: "option"
})));
if (r = r.map((e) => ({ row: e })), e.defaultProps?.showScale) {
let e = { row: useT("form.scale") };
a.forEach((n, r) => e[n.value] = r + 1), r.unshift(e);
}
return createVNode(Table, {
pagination: !1,
bordered: !0,
columns: o,
dataSource: r,
size: "middle"
}, { bodyCell: ({ index: i, column: a, record: s }) => {
if (i === 0 && e.defaultProps?.showScale) return createVNode("span", { style: {
color: "orange",
fontWeight: "bold"
} }, [s[a.dataIndex]]);
if (a.type === "option") {
let { row: s } = r[i], c = findIndex(o, { dataIndex: a.dataIndex });
return createVNode(FormItemRest, null, { default: () => createVNode(RadioGroup, {
value: n[e.key][s],
"onUpdate:value": (r) => n[e.key][s] = r
}, { default: () => [createVNode(Radio, {
value: c,
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, null)] }) });
}
return s[a.dataIndex];
} });
};
function _isSlot$3(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var RateRadio_default = (e, n) => {
let r, i = isFunction(e.options) ? e.options(n) : e.options;
i = i.map((e) => {
if (isString(e) || isNumber(e)) return {
value: e,
label: e,
rate: 0
};
if (isObject(e) && e.value) return isUndefined(e.label) && (e.label = e.value), isUndefined(e.rate) && (e.rate = 0), e;
});
let a = (r) => {
let { value: a } = r.target;
n[e.key].rate = find(i, { value: a })?.rate || 0;
};
return e.readonly ? createVNode("div", { style: { padding: "0 11px" } }, [createVNode(Tag, null, _isSlot$3(r = useLabelFromOptionsValue(n[e.key].value, i)) ? r : { default: () => [r] })]) : createVNode(RadioGroup, mergeProps({
value: n[e.key].value,
"onUpdate:value": (r) => n[e.key].value = r,
optionType: "button",
buttonStyle: "solid",
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled,
options: i,
style: e.style || {},
onChange: a
}, e.defaultProps), { ...e.defaultSlots });
};
function _isSlot$2(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var RateCheckbox_default = (e, n) => {
let r = isFunction(e.options) ? e.options(n) : e.options;
r = r.map((e) => {
if (isString(e) || isNumber(e)) return {
value: e,
label: e,
rate: 0
};
if (isObject(e) && e.value) return isUndefined(e.label) && (e.label = e.value), isUndefined(e.rate) && (e.rate = 0), e;
});
let i = (r) => {
n[e.key] || (n[e.key] = []), n[e.key].filter((e) => e.value === r.value).length ? n[e.key] = n[e.key].filter((e) => e.value !== r.value) : n[e.key].push({
value: r.value,
rate: r.rate
});
};
return e.readonly ? createVNode("div", { style: { padding: "0 11px" } }, [useFindLabelsInValues(r, n[e.key].map((e) => e.value)).map((e) => createVNode(Tag, { style: { marginRight: "5px" } }, _isSlot$2(e) ? e : { default: () => [e] }))]) : createVNode(FormItemRest, null, { default: () => r.map((r) => {
let a = n[e.key].filter((e) => e.value === r.value).length > 0;
return createVNode(Checkbox, {
id: r.value,
checked: a,
onChange: () => i(r),
disabled: isFunction(e.disabled) ? e.disabled(n) : e.disabled
}, { default: () => r.label });
}) });
}, Plain_default = (e, n) => createVNode("span", {
style: e.style,
class: { ...e.class }
}, [isFunction(e.defaultValue) ? e.defaultValue({ submitForm: n }) : e.defaultValue]), Combiner_default = (e, n, r) => {
let i = e.children;
return createVNode("div", {
style: {
display: "flex",
gap: "6px",
...e.style || {}
},
class: { ...e.class || {} }
}, [i.map((e) => FormItem_default(e, n, r))]);
}, render$1 = (e, n, { props: r, slots: i, formState: a }) => {
let { t: o } = useI18n(), s = inject(NEWBIE_UPLOADER, () => ({})), c = inject(NEWBIE_FORM, () => ({}));
isUndefined(n[e.key]) && e.key && (n[e.key] = initItemDefaultValue(e, {}, n, {
formProvider: c,
uploaderProvider: s
}));
let l = null, u = e.rules?.length ? e.rules.map((e) => e.pattern ? {
...e,
pattern: new RegExp(e.pattern)
} : { ...e }) : [], d = {
required: !0,
message: e.requiredMessage || placeholder(e, "select")
};
e.type = e.type ? e.type.toLowerCase() : e.type;
let f = isFunction(e.required) ? e.required(n) : e.required;
if (e.readonly = e.readonly || r.readonly, e.disabled = e.disabled || r.disabled || r.readonly || e.readonly, (e.readonly || e.disabled) && (e.placeholder = "--"), isFunction(e.hidden) && e.hidden(n) || isBoolean(e.hidden) && e.hidden) return null;
if (e.type === "slot" && i[e.key]) return i[e.key]({
submitForm: n,
item: e
});
if (e.customRender) {
if (l = e.customRender({
submitForm: n,
item: e
}), !l) return null;
} else if (e.match) return render$1({
...e,
...e.match(n),
match: null
}, n, {
props: r,
slots: i
});
else switch (e.type) {
case "select":
l = Select_default(e, n);
break;
case "remote":
l = Remote_default(e, n, a[e.key]);
break;
case "tree-select":
l = TreeSelect_default(e, n);
break;
case "date":
l = Date_default(e, n);
break;
case "time":
l = Time_default(e, n);
break;
case "switch":
l = Switch_default(e, n);
break;
case "radio":
l = Radio_default(e, n);
break;
case "checkbox":
l = Checkbox_default(e, n), d.type = "array";
break;
case "tag":
l = Tag_default(e, n, a[e.key]), d.type = "array";
break;
case "address":
l = Address_default(e, n), d.type = "array";
break;
case "cascade":
l = Cascader_default(e, n), d.type = "array";
break;
case "number":
l = Number_default(e, n), d.trigger = "blur", d.type = "number", d.message = e.requiredMessage || placeholder(e);
break;
case "html":
l = Html_default(e, n);
break;
case "uploader":
if (l = Uploader_default(e, n), f) {
if (!Object.keys(s).length) {
console.error("Please inject NEWBIE_UPLOADER config in root component"), l = null;
break;
}
e.defaultProps?.maxNum && e.defaultProps?.maxNum > 1 ? (d.type = "array", d.message = e.requiredMessage || placeholder(e, "upload")) : (d.type = "object", d.message = e.requiredMessage || placeholder(e, "upload"), d.fields = { [s.defaultFileItem.path]: {
type: "string",
required: !0,
message: placeholder(e, "upload")
} });
}
break;
case "editor":
l = Editor_default(e, n), d.message = e.requiredMessage || placeholder(e), d.type = "string";
break;
case "text":
l = Text_default(e, n);
break;
case "plain":
l = Plain_default(e, n);
break;
case "group":
l = Group_default(e, n, a[e.key], { provider: { uploaderProvider: s } });
break;
case "rate":
l = Rate_default(e, n);
break;
case "matrix-radio": {
l = MatrixRadio_default(e, n), d.type = "object", d.message = e.requiredMessage || placeholder(e, "select");
let r = {};
e.rows.forEach((e) => {
r[e] = {
required: !0,
message: o("form.please-select", { title: e })
};
}), d.fields = r;
break;
}
case "matrix-checkbox": {
l = MatrixCheckbox_default(e, n), d.type = "object", d.message = e.requiredMessage || placeholder(e, "select");
let r = {};
e.rows.forEach((e) => {
r[e] = {
required: !0,
type: "array",
message: o("form.please-select", { title: e })
};
}), d.fields = r;
break;
}
case "matrix-scale": {
l = MatrixScale_default(e, n), d.type = "object", d.message = e.requiredMessage || placeholder(e, "select");
let r = {};
e.rows.forEach((e) => {
r[e] = {
type: "number",
required: !0,
message: o("form.please-select", { title: e })
};
}), d.fields = r;
break;
}
case "rate-radio":
l = RateRadio_default(e, n);
break;
case "rate-checkbox":
l = RateCheckbox_default(e, n), d.type = "array";
break;
case "combiner":
l = Combiner_default(e, n, {
props: r,
slots: i
});
break;
default:
l = Input_default(e, n), d.message = e.requiredMessage || placeholder(e), d.trigger = "blur", d.type = "string";
break;
}
f && (u.length ? u[0].required = !0 : u.push(d));
let p = {
label: e.title,
name: e.key,
validateFirst: !0,
required: f,
hasFeedback: u?.length > 0,
rules: u
};
p = {
...p,
...e.formItemProps
};
let g = e.formItemSlots || {};
e.help && (g.extra = () => createVNode("div", { class: "newbie-form__form-item-help" }, [isFunction(e.help) ? e.help(n) : e.help])), g.label && delete p.label;
let _ = null;
return e.optional && !e.readonly && (isUndefined(e.optionalValue) && (e.optionalValue = ref(isOptionalChecked(e, n))), _ = createVNode("div", { class: "newbie-form__optional" }, [createVNode(FormItemRest, null, { default: () => [createVNode(Switch, {
checked: e.optionalValue.value,
"onUpdate:checked": (n) => e.optionalValue.value = n,
checkedChildren: e.optional?.[0] || "",
unCheckedChildren: e.optional?.[1] || "",
onChange: (r) => !r && (n[e.key] = null)
}, null)] }), createVNode("div", { class: "newbie-form__optional-content" }, [e.optionalValue.value ? l : !1])])), createVNode(FormItem, p, {
default: () => e.optional && !e.readonly ? _ : l,
...g
});
}, FormItem_default = render$1;
function _isSlot$1(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
var Layout_default = (e, n, r, i) => {
let { props: a, slots: o, formState: s } = i, c = [], l = [];
e.forEach((e) => {
e.columnIndex === "fixed" ? c.push(e) : ((e.break || !l.length) && l.push([]), l[l.length - 1].push(e));
});
let u = a.columns;
if ((!u || !isArray(u) || !u.length) && (u = [24]), sum(u) !== 24) return console.error("NewbieForm columns must sum up to 24"), null;
let d = l.map(() => u.map(() => []));
l.forEach((e, n) => {
e.forEach((e) => {
let r = e.columnIndex || 0;
r = isNumber(r) ? Math.min(r, a.columns.length - 1) : r;
let i = 0;
if (isArray(r)) {
for (let e = r[0]; e <= r[1] && u[e]; e++) i += u[e], e !== r[0] && d[n][e].push("placeholder");
e.span = i, e.formItemProps = {
labelCol: { span: (a.formProps.labelCol?.span || 6) / (r[r.length - 1] - r[0] + 1) },
...e.formItemProps
}, d[n][r[0]].push(e);
} else isNumber(r) && (e.span = u[r], d[n][r].push(e));
});
});
let f = c.map((e) => FormItem_default(e, n, i)), p = [], m = (e) => {
let n = document.getElementById(`collapse_${e.key}`);
s[e.key].isCollapse ? n.style.height = `${n.scrollHeight}px` : (n.style.height || (n.style.height = `${n.scrollHeight}px`), setTimeout(() => n.style.height = "0px")), nextTick(() => {
s[e.key].isCollapse = !s[e.key].isCollapse;
});
};
d.forEach((e, r) => {
let o = Math.max(...e.map((e) => e.length)), c = [], l = null;
for (let e = 0; e < o; e++) {
let a = 0, o = [];
for (let s = 0; s < d[r].length; s++) {
let c, f = d[r][s][e];
if (!f) {
a += u[s];
continue;
}
f.break && (l = f), f !== "placeholder" && (o.push(createVNode(Col, {
span: f.span,
offset: a
}, _isSlot$1(c = FormItem_default(f, n, i)) ? c : { default: () => [c] })), a = 0);
}
c.push(createVNode(Row, { gutter: 16 }, _isSlot$1(o) ? o : { default: () => [o] }));
}
if (l) {
if (a.breakMode === "divider") c.unshift(createVNode(Divider, a.dividerProps, { default: () => isString(l.break) ? l.break : "" })), p = p.concat(c);
else if (a.breakMode === "collapse") {
isUndefined(s[l.key].isCollapse) && (s[l.key].isCollapse = !!r);
let e = createVNode("div", { class: "newbie-form__collapse-wrapper" }, [createVNode("div", {
class: "newbie-form__collapse-header",
onClick: () => m(l)
}, [createVNode("span", { class: `newbie-form__collapse-icon ${s[l.key].isCollapse ? "" : "open"}` }, [createVNode(RightOutlined, null, null)]), createVNode("span", { class: "newbie-form__collapse-title" }, [l.break])]), createVNode("div", {
class: `newbie-form__collapse-content-wrapper ${s[l.key].isCollapse ? "collapse" : ""}`,
id: `collapse_${l.key}`
}, [createVNode("div", { class: "newbie-form__collapse-content" }, [c])])]);
p = p.concat(e);
}
} else p = p.concat(c);
});
let g = () => o.footer ? createVNode("div", { class: "newbie-form__footer" }, [o.footer()]) : null, _;
if (f.length) {
let e = a.disabled || a.readonly || a.hideButtons ? null : createVNode("div", { class: "newbie-form__submit-wrapper" }, [createVNode(Divider, null, null), createVNode(Row, null, { default: () => [createVNode(Col, {
span: 24,
offset: 2
}, { default: () => r })] })]);
_ = createVNode(Row, { gutter: 16 }, { default: () => [createVNode(Col, { span: 24 - a.fixedColumns }, { default: () => p }), createVNode(Col, { span: a.fixedColumns }, { default: () => [createVNode(Affix, { offsetTop: 20 }, { default: () => [createVNode(Card, { style: { marginLeft: "20px" } }, { default: () => [
f,
g(),
e
] })] })] })] });
} else {
let e = a.disabled || a.readonly || a.hideButtons ? null : createVNode("div", { class: "newbie-form__submit-wrapper" }, [createVNode(Divider, null, null), createVNode(Row, { gutter: 16 }, { default: () => [createVNode(Col, { offset: a.closable ? 9 : 10 }, { default: () => r })] })]);
_ = [
p,
g(),
e
];
}
return _;
}, NewbieForm_default = /* @__PURE__ */ defineComponent({
name: "NewbieForm",
props: {
title: {
type: String,
default: ""
},
data: {
type: [Object, String],
default: ""
},
autoLoad: {
type: [
Boolean,
Array,
String
],
default: !0
},
fetchUrl: {
type: String,
default: ""
},
extraData: {
type: Object,
default: () => ({})
},
submitUrl: {
type: String,
default: ""
},
submitButtonText: {
type: String,
default: ""
},
submitConfirmText: {
type: String,
default: ""
},
closable: {
type: Boolean,
default: !0
},
closeButtonText: {
type: String,
default: ""
},
closeButtonFirst: {
type: Boolean,
default: !1
},
hideButtons: {
type: Boolean,
default: !1
},
disabled: {
type: Boolean,
default: !1
},
readonly: {
type: Boolean,
default: !1
},
submitDisabled: {
type: Boolean,
default: !1
},
breakMode: {
type: String,
default: "divider"
},
dividerProps: {
type: Object,
default: () => ({})
},
columns: {
type: Array,
default: () => [24]
},
fixedColumns: {
type: Number,
default: 6
},
cardWrapper: {
type: Boolean,
default: !0
},
cardProps: {
type: Object,
default: () => {}
},
cardSlots: {
type: Object,
default: () => {}
},
form: {
type: [Array, Function],
default() {
return [];
}
},
afterFetched: {
type: Function,
default: null
},
beforeSubmit: {
type: Function,
default: null
},
close: {
type: Function,
default: null
},
afterSubmit: {
type: Function,
default: null
},
formProps: {
type: Object,
default: () => ({})
}
},
emits: ["success"],
setup(e, { expose: n, slots: r, emit: i }) {
let { t: a, locale: o } = useI18n(), s = ref(null), c = reactive({
temporary: {},
submitFetcher: { loading: !1 },
isInitializing: !0,
submitForm: {},
submitFormBackup: {}
}), l = inject(NEWBIE_UPLOADER, () => ({})), d = inject(NEWBIE_FORM, () => ({})), f = {}, p = computed(() => (isFunction(e.form) ? e.form() : e.form).map((e) => (e.type ||= "input", d?.columns?.[e.type] && (e = {
...d.columns[e.type],
...e
}), f[e.key] || (f[e.key] = reactive({})), e)));
watch(() => e.data, (e) => {
_(e || "");
});
let g = () => {
c.isInitializing = !1, _(e.data || "");
};
onMounted(() => {
let n = !1;
e.autoLoad && e.fetchUrl && (n = !0, e.autoLoad && isObject(e.autoLoad) ? n = every(Object.values(pick(e.extraData, Object.keys(e.autoLoad)))) : e.autoLoad && isString(e.autoLoad) && (n = !!e.extraData[e.autoLoad])), n ? v() : g();
});
let _ = (e) => {
let n = {}, r = e ? cloneDeep(e) : !1;
p.value.forEach((e) => {
e.type === "combiner" ? e.children.forEach((e) => {
n[e.key] = initItemDefaultValue(e, r, c.submitForm, { uploaderProvider: l });
}) : n[e.key] = initItemDefaultValue(e, r, c.submitForm, { uploaderProvider: l });
}), r && (n = {
...r,
...n
}), c.submitForm = n, c.submitFormBackup = cloneDeep(n);
}, v = () => {
e.fetchUrl && (c.isInitializing = !0, useFetch().get(e.fetchUrl, { params: e.extraData }).then((n) => {
c.isInitializing = !1, useProcessStatusSuccess(n, () => {
e.afterFetched && isFunction(e.afterFetched) ? n = e.afterFetched(n) : d.afterFetched && isFunction(d.afterFetched) && (n = d.afterFetched(n)), _(n);
});
}).finally(() => {
c.isInitializing = !1;
}));
}, y = () => new Promise((n, r) => {
s.value.validate().then(async () => {
let r = cloneDeep(c.submitForm), s = p.value.map((e) => e.match ? {
...e,
...e.match(r)
} : e).filter((e) => e.beforeSubmit && isFunction(e.beforeSubmit));
for (let e of s) r[e.key] = await e.beforeSubmit({
value: r[e.key],
submitForm: r
});
if (r = useFormFormat(r, d.format || {}), e.beforeSubmit && isFunction(e.beforeSubmit) && (r = await e.beforeSubmit({
formatForm: r,
originalForm: c.submitForm
}), r === !1)) return n();
let l = await useFetch(c.submitFetcher).post(e.submitUrl, r);
return c.submitFormBackup = cloneDeep(c.submitForm), e.afterSubmit ? e.afterSubmit(l) : useProcessStatusSuccess(l, () => {
message.success(useI18nJoin(e.submitButtonText || a("common.save"), a("common.success"), { locale: o })), i("success", l);
}), n();
}).catch((e) => (useFormFail(e), r(e)));
}), b = (e) => {
c.isInitializing = e;
}, T = () => {
s.value.resetFields();
}, E = () => cloneDeep(c.submitForm);
n({
submit: y,
getForm: E,
getFormStandalone: E,
getFormRealtime: () => c.submitForm,
getField: (e) => cloneDeep(c.submitForm[e]),
setForm: (e) => {
Object.keys(e).forEach((n) => {
c.submitForm[n] = e[n];
});
},
reset: T,
isDirty: () => !isEqual(c.submitForm, c.submitFormBackup),
isInitializing: b
});
let D = () => {
let n = () => createVNode(Button, {
loading: c.submitFetcher.loading,
type: "primary",
htmlType: "submit",
disabled: e.submitDisabled,
onClick: () => {
e.submitConfirmText ? Modal.confirm({
content: e.submitConfirmText,
onOk() {
y();
}
}) : y();
}
}, { default: () => `${e.submitButtonText || a("common.save")}${c.submitFetcher.loading ? "..." : ""}` }), r = () => createVNode(Button, {
type: "default",
onClick: () => {
e.close && isFunction(e.close) && e.close();
}
}, { default: () => e.closeButtonText || a("common.close") });
return createVNode(Space, { size: "large" }, { default: () => e.closeButtonFirst ? [e.closable ? r() : null, n()] : [n(), e.closable ? r() : null] });
}, k = () => Layout_default(p.value, c.submitForm, D(), {
props: e,
slots: r,
formState: f
}), A = () => createVNode(Form, mergeProps({
model: c.submitForm,
ref: s,
class: "newbie-form",
labelCol: { span: 6 },
scrollToFirstError: !0
}, e.formProps), { default: () => [k()] }), M = () => createVNode(Skeleton, {
active: !0,
paragraph: { rows: 10 },
loading: c.isInitializing
}, { default: () => [
r.prepend?.(),
A(),
r.append?.()
] });
return () => createVNode("div", { class: "newbie-form-wrapper" }, [e.cardWrapper ? createVNode(Card, mergeProps(e.cardProps, { title: e.title }), {
default: () => M(),
...e.cardSlots
}) : M()]);
}
});
const NewbieForm = withInstall_default(NewbieForm_default), NewbieList = withInstall_default(/* @__PURE__ */ defineComponent({
name: "NewbieList",
props: {
url: {
type: String,
default: ""
},
extraData: {
type: Object,
default: () => ({})
},
height: {
type: Number,
default: 300
},
offset: {
type: Number,
default: 50
},
finishedText: {
type: String,
default: ""
},
autoLoad: {
type: Boolean,
default: !0
},
useStore: {
type: Object,
default: () => null
},
listProps: {
type: Object,
default: () => ({})
}
},
setup(e, { slots: n, expose: r }) {
let i = ref(null), a = ref(null), o = computed(() => ({ ...e.listProps })), s;
e.useStore?.initPagination ? (e.useStore.initPagination({
uri: e.url,
params: e.extraData
}), s = computed(() => e.useStore.pagination)) : s = ref({
uri: e.url,
params: e.extraData
});
let c = (e) => {
s.value = usePage(s.value, e);
}, { y: u } = useScroll(i);
return watch(u, async (n) => {
n + e.height + e.offset >= i.value.scrollHeight && !s.value.loading && !s.value.finished && await c();
}), e.autoLoad && c(), r({
loadMore: c,
items: () => s.value.items || [],
pagination: s
}), () => createVNode("div", {
ref: i,
class: "newbie-list",
style: { height: `${e.height}px` }
}, [createVNode(List, mergeProps({
ref: a,
dataSource: s.value?.items || []
}, o.value), {
default: () => n.default?.(),
renderItem: ({ item: e, index: r }) => n.renderItem ? n.renderItem({
item: e,
index: r
}) : null,
loadMore: () => [s.value?.loading ? createVNode("div", { class: "loading-container" }, [createVNode(Spin, null, null)]) : null, s.value?.finished ? createVNode("div", { class: "finished-text" }, [e.finishedText || useT("common.loading-finished")]) : null]
})]);
}
})), NewbieModal = withInstall_default(NewbieModal_default), NewbiePassword = withInstall_default(/* @__PURE__ */ defineComponent({
name: "NewbiePassword",
components: { InputPassword },
props: {
value: {
type: String,
default: ""
},
min: {
type: Number,
default: 8
},
max: {
type: Number,
default: 20
},
width: {
type: [Number, String],
default: 300
}
},
emits: ["update:value", "change"],
setup(e, { emit: n, expose: r }) {
let i = ref("");
watch(() => e.modelValue, () => {
i.value = e.modelValue;
});
let a = computed(() => {
let e = 0;
return [
/\d/,
/[a-z]/,
/[A-Z]/,
/[^a-zA-Z0-9]/
].forEach((n) => {
n.test(i.value) && (e += 1);
}), e;
}), o = [
"",
"bad",
"weak",
"medium",
"strong"
], s = (e) => {
let { value: r } = e.target;
n("change", e), n("update:value", r);
}, c = computed(() => i.value.length > 0 && i.value.length < e.min || i.value.length > e.max || a.value < 4), l = computed(() => i.value.length > 0 && i.value.length < e.min ? `密码长度不能少于${e.min}个字符` : i.value.length > e.max ? `密码长度不能超过${e.max}个字符` : a.value < 4 ? "密码必须包含数字、小写字母、大写字母和特殊符号" : "");
return r({ strength: a }), () => createVNode("div", {
class: "newbie-password",
style: { width: genPixel(e.width) }
}, [
createVNode(resolveComponent("input-password"), {
value: i.value,
"onUpdate:value": (e) => i.value = e,
onChange: s,
minlength: e.min,
maxlength: e.max
}, null),
createVNode("div", { class: `strength-indicator-container ${o[a.value]}` }, [
createVNode("div", { class: `strength-indicator ${a.value >= 1 ? "active" : ""}` }, null),
createVNode("div", { class: `strength-indicator ${a.value >= 2 ? "active" : ""}` }, null),
createVNode("div", { class: `strength-indicator ${a.value >= 3 ? "active" : ""}` }, null),
createVNode("div", { class: `strength-indicator ${a.value >= 4 ? "active" : ""}` }, null)
]),
c.value ? createVNode("div", { class: "error-message" }, [l.value]) : null
]);
}
})), NewbieProvider = withInstall_default(NewbieProvider_default), NewbieSearch = withInstall_default(NewbieSearch_default), NewbieUploader = withInstall_default(NewbieUploader_default);
function getDefaultWidgets(e) {
return e && e === "quiz" ? [{
title: "题目类型",
children: [
{
name: "单选",
type: "radio",
icon: () => h(CheckCircleOutlined),
props: {
defaultProps: { optionType: "outlined" },
options: [
"A. 选项一",
"B. 选项二",
"C. 选项三",
"D. 选项四"
]
}
},
{
name: "多选",
type: "checkbox",
icon: () => h(CheckSquareOutlined),
props: { options: [
"A. 选项一",
"B. 选项二",
"C. 选项三",
"D. 选项四"
] }
},
{
name: "填空",
type: "input",
icon: () => h(EditOutlined),
props: { width: "100%" }
}
]
}] : [
{
title: "选择",
children: [
{
name: "单选",
type: "radio",
icon: () => h(CheckCircleOutlined),
props: {
defaultProps: { optionType: "outlined" },
options: ["选项一", "选项二"]
}
},
{
name: "多选",
type: "checkbox",
icon: () => h(CheckSquareOutlined),
props: { options: ["选项一", "选项二"] }
},
{
name: "下拉选择",
type: "select",
icon: () => h(DownSquareOutlined),
props: {
options: ["选项一", "选项二"],
width: 300
}
},
{
name: "开关",
icon: () => h(SwitcherOutlined),
type: "switch"
},
{
name: "图片上传",
type: "uploader",
icon: () => h(FileImageOutlined),
props: { defaultProps: { accept: ".png,.jpg,.jpeg" } }
},
{
name: "文件上传",
type: "uploader",
icon: () => h(FilePdfOutlined),
props: { defaultProps: {
accept: ".doc,.docx,.pdf,.xls,.xlsx,.ppt,.pptx,.png,.jpg,jpeg",
type: "text"
} }
}
]
},
{
title: "填空",
children: [
{
name: "文本",
type: "input",
icon: () => h(EditOutlined),
props: { width: "100%" }
},
{
name: "多行文本",
icon: () => h(FormOutlined),
type: "textarea"
},
{
name: "日期",
icon: () => h(CalendarOutlined),
type: "date"
},
{
name: "日期范围",
type: "date",
icon: () => h(CalendarOutlined),
props: {
width: 300,
defaultProps: { type: "range" }
}
},
{
name: "时间",
icon: () => h(ClockCircleOutlined),
type: "time"
},
{
name: "时间范围",
type: "time",
icon: () => h(ClockCircleOutlined),
props: {
width: 300,
defaultProps: { type: "range" }
}
},
{
name: "数字",
icon: () => h(FieldBinaryOutlined),
type: "number"
}
]
},
{
title: "评分",
children: [
{
name: "星级评分",
icon: () => h(StarOutlined),
type: "rate"
},
{
name: "单选评分",
type: "rate-radio",
icon: () => h(CheckCircleOutlined),
props: {
defaultProps: { optionType: "outlined" },
options: [
{
value: "选项一",
rate: 1
},
{
value: "选项二",
rate: 2
},
{
value: "选项三",
rate: 3
}
]
}
},
{
name: "多选评分",
type: "rate-checkbox",
icon: () => h(CheckSquareOutlined),
props: { options: [
{
value: "选项一",
rate: 1
},
{
value: "选项二",
rate: 2
},
{
value: "选项三",
rate: 3
}
] }
}
]
},
{
title: "矩阵",
children: [
{
name: "矩阵单选",
type: "matrix-radio",
icon: () => h(CheckCircleOutlined),
props: {
options: [
"好",
"一般",
"差"
],
rows: ["质量", "外观"]
}
},
{
name: "矩阵多选",
type: "matrix-checkbox",
icon: () => h(CheckSquareOutlined),
props: {
options: [
"好",
"一般",
"差"
],
rows: ["质量", "外观"]
}
},
{
name: "矩阵量表",
type: "matrix-scale",
icon: () => h(NumberOutlined),
props: {
defaultProps: { showScale: !0 },
options: [],
rows: ["质量", "外观"]
}
}
]
},
{
title: "个人信息",
children: [
{
name: "姓名",
type: "input",
icon: () => h(UserOutlined),
props: { title: "您的姓名" }
},
{
name: "性别",
type: "radio",
icon: () => h(SmileFilled),
props: {
title: "您的性别",
options: ["男", "女"]
}
},
{
name: "手机号码",
type: "input",
icon: () => h(MobileOutlined),
props: {
title: "请输入您的手机号码",
rules: [{
pattern: "^1[3456789]\\d{9}$",
message: "手机号码格式不正确"
}]
}
},
{
name: "邮箱",
type: "input",
icon: () => h(MailOutlined),
props: {
title: "请输入您的邮箱地址",
rules: [{
pattern: "^(([^<>()[\\]\\\\.,;:\\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,}))$",
message: "邮箱地址格式不正确"
}]
}
},
{
name: "省市区",
type: "address",
icon: () => h(EnvironmentOutlined),
props: { title: "请选择省份城市与地区" }
}
]
}
];
}
var widgetToProps = (e, n) => {
let r = [
{
title: "标题",
key: "title",
required: !0,
type: "textarea"
},
{
title: "必填",
key: "required",
type: "switch",
defaultValue: !1
},
{
title: "备注/提示",
key: "help"
},
{
title: "添加分页栏",
type: "switch",
key: "break",
defaultValue: !1
}
];
return [
"input",
"select",
"textarea"
].includes(e.type) && (r = r.concat([{
title: "输入框提示",
key: "placeholder"
}])), [
"matrix-radio",
"matrix-checkbox",
"matrix-scale"
].includes(e.type) && (r = r.concat([{
title: "行标题",
key: "rows",
type: "slot"
}])), [
"radio",
"checkbox",
"select",
"matrix-radio",
"matrix-checkbox",
"matrix-scale",
"rate-radio",
"rate-checkbox"
].includes(e.type) && (r = r.concat([{
title: "选项",
key: "options",
type: "slot"
}])), e.type === "matrix-scale" && (r = r.concat([{
title: "量表等级",
type: "number",
key: "level",
defaultProps: {
min: 1,
max: 10
},
defaultValue: 5
}])), e.type === "rate" && (r = r.concat([{
title: "星星总数",
type: "number",
key: "count",
defaultProps: {
min: 1,
max: 10
},
defaultValue: 5
}, {
title: "是否允许半选",
type: "switch",
key: "allowHalf",
defaultValue: !1
}])), e.type === "uploader" && (r = r.concat([{
title: "最大上传数",
key: "maxNum",
type: "number",
defaultValue: 1,
defaultProps: {
min: 1,
max: 9
}
}, {
title: "文件权限",
key: "privacy",
type: "radio",
options: [{
label: "公开",
value: "public"
}, {
label: "隐私",
value: "private"
}],
help: "公开:如新闻图片,通知文件等对所有人可见;隐私:如个人照片,私密文件等会进行访问限制",
defaultValue: "public"
}])), n && n === "quiz" && (r = r.concat([{
title: "分值",
key: "quiz_score",
type: "number",
required: !0,
defaultValue: 1
}]), !e.type || e.type === "input" ? r = r.concat([{
break: !0,
title: "正确答案",
key: "__quiz_answer"
}]) : e.type === "radio" ? r = r.concat([{
break: !0,
title: "正确答案",
key: "__quiz_answer",
type: "select",
options: e.props.options?.map((e, n) => String.fromCharCode(65 + n))
}]) : e.type === "checkbox" && (r = r.concat([{
break: !0,
title: "正确答案",
key: "__quiz_answer",
type: "select",
options: e.props.options?.map((e, n) => String.fromCharCode(65 + n)),
defaultProps: { mode: "multiple" }
}])), r = r.concat([{
title: "解析",
key: "__quiz_analysis",
type: "textarea"
}])), r;
}, formItemToProps = (e, n) => {
let r = e.props, i = {};
return [
"title",
"required",
"help",
"break"
].forEach((e) => {
i[e] = r[e];
}), n && n === "quiz" && (i.quiz_score = r.quiz_score, i.__quiz_answer = r.__quiz_answer, i.__quiz_analysis = r.__quiz_analysis), [
"radio",
"checkbox",
"select",
"rate-radio",
"rate-checkbox"
].includes(e.type) && (i.options = r.options), [
"input",
"select",
"textarea"
].includes(e.type) && (i.placeholder = r.placeholder), e.type === "rate" && (i.count = r.defaultProps?.count, i.allowHalf = r.defaultProps?.allowHalf), e.type === "matrix-scale" && (i.level = r.defaultProps?.level), e.type === "uploader" && (i.maxNum = r.defaultProps?.maxNum || 1, i.privacy = r.defaultProps?.extraData?.type || "private"), i;
}, propsToFormItem = (e, n, r) => {
if (!n) return;
let i = n.props;
[
"title",
"required",
"help",
"break"
].forEach((n) => {
i[n] = e[n];
}), r && r === "quiz" && (i.quiz_score = e.quiz_score, i.__quiz_answer = e.__quiz_answer, i.__quiz_analysis = e.__quiz_analysis), [
"radio",
"checkbox",
"select",
"rate-radio",
"rate-checkbox"
].includes(n.type) && (i.options = e.options), [
"input",
"select",
"textarea"
].includes(n.type) && (i.placeholder = e.placeholder), n.type === "rate" && (i.defaultProps ||= {}, i.defaultProps.count = e.count, i.defaultProps.allowHalf = e.allowHalf), n.type === "matrix-scale" && (i.defaultProps ||= {}, i.defaultProps.level = e.level), n.type === "uploader" && (i.defaultProps ||= {}, i.defaultProps.extraData || (i.defaultProps.extraData = {}), i.defaultProps.maxNum = e.maxNum, i.defaultProps.extraData.type = e.privacy);
};
const NewbieFormDesigner = withInstall_default(/* @__PURE__ */ defineComponent({
name: "NewbieFormDesigner",
props: {
title: {
type: String,
default: ""
},
widgets: {
type: Array,
default: () => []
},
formItems: {
type: [Array, Function],
default: () => []
},
height: {
type: [String, Number],
default: "100%"
},
mode: {
type: String,
default: null
}
},
emits: ["submit"],
setup(e, { emit: n }) {
let r = ref(null), i = reactive({
submitForm: {},
painterItems: [],
dragOptions: {
animation: 200,
group: "designer",
disabled: !1,
ghostClass: "ghost"
},
isDragging: !1,
currentItem: null,
currentIndex: null,
propsFormData: {},
showOptionsModal: !1,
showValueOptionsModal: !1,
currentOptionItem: null,
optionsValue: "",
rateValue: ""
}), a = () => {
let n = [];
n = isFunction(e.formItems) ? e.formItems() : cloneDeep(e.formItems), i.painterItems = n.map((e) => ({
key: e.key,
type: e.type,
name: e.title,
props: e
}));
};
watch(() => e.formItems, () => a(), { deep: !0 }), a();
let o = ref(getDefaultWidgets(e.mode).concat(e.widgets).map((e) => (isArray(e) && (e = { children: e }), e))), s = (e) => {
let n = cloneDeep(e);
return n.key = Math.random().toString(36).slice(2) + Math.random().toString(36).slice(2), n.props ||= {}, n.props.title = n.props.title || n.name, n.props.key = n.key, n.props.type = n.type, n.props.placeholder = " - ", n;
}, c = (e) => {
let n = s(e);
i.painterItems.push(n), l(i.painterItems.length - 1);
}, l = (n) => {
i.currentItem = i.painterItems[n], i.currentIndex = n, i.propsFormData = formItemToProps(i.painterItems[n], e.mode);
}, u = ({ newIndex: e }) => {
e === 0 && l(0);
}, d = (e) => {
i.painterItems[e].key === i.currentItem?.key && (i.currentItem = null, i.currentIndex = null), i.painterItems.splice(e, 1);
}, f = (e) => {
if (i.currentOptionItem = e, i.currentItem.type.startsWith("rate-")) {
let n = "", r = "", a = i.currentItem?.props[e.key] || [];
a.forEach((e, i) => {
isObject(e) ? (n += e.value, r += e.rate ? String(e.rate) : "") : n += e, i < a.length - 1 && (n += "\n", r += "\n");
}), i.optionsValue = n, i.rateValue = r, i.showValueOptionsModal = !0;
} else i.optionsValue = i.currentItem?.props[e.key]?.join("\n"), i.showOptionsModal = !0;
}, p = () => {
if (!i.optionsValue.trim()) {
message.warn("请至少设置一个选项");
return;
}
if (!i.currentOptionItem) return;
let n = i.optionsValue.split("\n").filter((e) => e.trim());
if (e.mode === "quiz" && (n = n.map((e, n) => /^[A-Z]\.\s?/.test(e) ? e : `${String.fromCharCode(65 + n)}. ${e}`)), !isEqual(n, uniq(n))) {
message.warn("选项有重复,请检查数据");
return;
}
i.currentItem.props || (i.currentItem.props = {}), i.currentItem.props[i.currentOptionItem.key] = n, i.showOptionsModal = !1;
}, m = () => {
if (!i.optionsValue.trim()) {
message.warn("请至少设置一个选项");
return;
}
if (!i.currentOptionItem) return;
let e = i.optionsValue.split("\n").filter((e) => e.trim()), n = i.rateValue.split("\n");
if (!isEqual(e, uniq(e))) {
message.warn("选项有重复,请检查数据");
return;
}
i.currentItem.props || (i.currentItem.props = {}), i.currentItem.props[i.currentOptionItem.key] = e.map((e, r) => ({
label: e,
value: e,
rate: n[r] ? String(n[r]).trim() : 0
})), i.showOptionsModal = !1, i.showValueOptionsModal = !1;
}, g = (e) => {
let { key: n } = e;
n === "increase" ? i.rateValue = i.optionsValue.split("\n").map((e, n) => n + 1).join("\n") : i.rateValue = i.rateValue.split("\n").map((e) => !isNaN(e) && !isNaN(parseFloat(e)) ? n === "add1" ? Number(e) + 1 : Number(e) - 1 : e).join("\n");
}, _ = () => {
Modal.confirm({
title: "清空表单",
content: "清空表单后,所有数据将被清空,是否继续?",
onOk: () => {
i.painterItems = [], i.submitForm = {};
}
});
}, v = () => {
n("submit", i.painterItems?.length ? i.painterItems.map((e) => e.props) : []);
}, y = computed(() => r.value?.getForm());
return watch(() => y.value, (n) => {
propsToFormItem(n, i.currentItem, e.mode);
}, { deep: !0 }), () => {
let n = () => o.value.map((e) => createVNode("div", { class: "widget-list-container" }, [createVNode("div", { class: "widget-list-title" }, [e.title || "默认"]), createVNode(vuedraggable_default, {
tag: "div",
list: e.children,
sort: !1,
group: {
name: "designer",
pull: "clone",
put: !1
},
clone: s,
handle: ".drag-handle",
class: "widget-list",
itemKey: "name"
}, { item: ({ element: e }) => createVNode(Button, {
class: "widget-item drag-handle",
onClick: () => c(e)
}, { default: () => [e.icon ? createVNode("span", {
role: "img",
class: "widget-icon"
}, [isFunction(e.icon) ? e.icon() : e.icon]) : null, createVNode("span", { class: "widget-name" }, [e.name])] }) })]));
return createVNode("div", {
class: "newbie-form-designer",
style: { height: genPixel(e.height) }
}, [
(() => createVNode("div", { class: "newbie-form-designer__widget-container" }, [
createVNode("div", { class: "widget-func-container" }, [createVNode(Button, {
type: "primary",
icon: createVNode(SaveOutlined, null, null),
onClick: v
}, { default: () => [createTextVNode("保存表单")] }), createVNode(Tooltip, { title: "清空表单" }, { default: () => [createVNode(Button, {
type: "primary",
danger: !0,
ghost: !0,
icon: createVNode(DeleteOutlined, null, null),
onClick: _
}, null)] })]),
createVNode(Divider, null, { default: () => [createTextVNode("组件")] }),
createVNode("div", { class: "widget-container" }, [n()])
]))(),
(() => createVNode("div", { class: "newbie-form-designer__painter-container" }, [createVNode(Form, {
labelCol: { span: 24 },
wrapperCol: { span: 24 },
model: i.submitForm,
labelAlign: "left",
class: "newbie-form"
}, { default: () => [
e.title ? createVNode("div", { class: "painter-title" }, [e.title]) : null,
i.painterItems.length ? null : createVNode("div", { class: "newbie-form-designer__help-wrapper" }, [createVNode("p", null, [createVNode(SmileTwoTone, { style: { marginRight: "4px" } }, null), createTextVNode("请点击或者拖拽左侧组件至下面区域生成表单")])]),
createVNode(TransitionGroup, null, { default: () => [createVNode(vuedraggable_default, mergeProps({
list: i.painterItems,
class: "painter-wrapper",
handle: ".painter-item",
itemKey: "key",
key: "key"
}, i.dragOptions, {
onStart: () => i.isDragging = !0,
onEnd: () => i.isDragging = !1,
onAdd: u
}), { item: ({ element: e, index: n }) => {
let r = String(n + 1).padStart(2, "0") + ".";
return createVNode("div", {
class: `painter-item ${i.currentItem?.key === e.key ? "active" : ""}`,
key: e.key,
onClick: () => l(n)
}, [
createVNode("div", { class: "drag-handle" }, [createVNode(DragOutlined, null, null)]),
createVNode("div", { class: "op-container" }, [createVNode("div", {
class: "op-item",
onClick: withModifiers(() => d(n), ["stop"])
}, [createVNode(Tooltip, { title: "删除" }, { default: () => [createVNode(DeleteOutlined, null, null)] })])]),
e.props.break ? createVNode(Divider, null, { default: () => "分页栏" }) : null,
FormItem_default({
formItemSlots: { label: () => createVNode("div", { class: "item-label" }, [createVNode("span", { class: "item-index" }, [r]), createVNode("span", { class: "item-name" }, [e.props.title])]) },
...e.props
}, i.submitForm, { props: {} })
]);
} })] })
] })]))(),
(() => createVNode("div", { class: "newbie-form-designer__props-container" }, [i.currentItem ? [createVNode("div", { class: "widget-name" }, [i.currentItem.icon ? createVNode("span", {
role: "img",
class: "widget-icon"
}, [isFunction(i.currentItem.icon) ? i.currentItem.icon() : i.currentItem.icon]) : null, i.currentItem.name]), createVNode(NewbieForm_default, {
ref: r,
form: () => widgetToProps(i.currentItem, e.mode),
cardWrapper: !1,
closable: !1,
data: i.propsFormData
}, {
options: ({ item: e }) => createVNode(FormItem, { label: e.title }, { default: () => createVNode(Button, {
type: "primary",
onClick: () => f(e)
}, { default: () => "设置选项" }) }),
rows: ({ item: e }) => createVNode(FormItem, { label: e.title }, { default: () => createVNode(Button, {
type: "primary",
onClick: () => f(e)
}, { default: () => "设置行标题" }) })
})] : createVNode("div", { class: "empty-props" }, [createVNode(Empty, { description: "未选中内容" }, null)])]))(),
(() => createVNode(Modal, {
open: i.showOptionsModal,
"onUpdate:open": (e) => i.showOptionsModal = e,
title: "选项设置",
onOk: p
}, { default: () => [createVNode(Alert, {
message: e.mode === "quiz" ? "每行一个选项,选项不能重复,选项序号A, B, C, D...会自动添加" : "每行一个选项,选项不能重复",
style: { marginBottom: "10px" }
}, null), createVNode(Textarea, {
value: i.optionsValue,
"onUpdate:value": (e) => i.optionsValue = e,
placeholder: "每行一个选项,如:\n选项一\n选项二",
"auto-size": {
minRows: 14,
maxRows: 14
}
}, null)] }))(),
(() => createVNode(Modal, {
open: i.showValueOptionsModal,
"onUpdate:open": (e) => i.showValueOptionsModal = e,
title: "选项设置",
onOk: m
}, { default: () => [createVNode(Alert, {
message: "每行一个选项,且选项不能重复",
style: { marginBottom: "10px" }
}, null), createVNode(Row, { gutter: 8 }, { default: () => [createVNode(Col, { span: 14 }, { default: () => [createVNode("div", null, [createTextVNode("选项")]), createVNode(Textarea, {
value: i.optionsValue,
"onUpdate:value": (e) => i.optionsValue = e,
placeholder: "每行一个选项,如:\n选项一\n选项二",
"auto-size": {
minRows: 14,
maxRows: 14
}
}, null)] }), createVNode(Col, { span: 10 }, { default: () => [createVNode(Dropdown, null, {
default: () => createVNode("div", null, [createVNode("a", { class: "ant-dropdown-link" }, [createTextVNode("分值(不填代表0分)"), createVNode(DownOutlined, { style: {
marginLeft: "4px",
fontSize: "12px"
} }, null)])]),
overlay: () => createVNode(Menu, { onClick: g }, { default: () => [
createVNode(MenuItem, { key: "increase" }, { default: () => "分数从 1 开始顺序递增" }),
createVNode(MenuItem, { key: "add1" }, { default: () => "选项分数全部加 1" }),
createVNode(MenuItem, { key: "minus1" }, { default: () => "选项分数全部减 1" })
] })
}), createVNode(Textarea, {
value: i.rateValue,
"onUpdate:value": (e) => i.rateValue = e,
placeholder: "每行一个对应分值,如:\n1\n2",
"auto-size": {
minRows: 14,
maxRows: 14
}
}, null)] })] })] }))()
]);
};
}
})), NewbieCopy = withInstall_default(/* @__PURE__ */ defineComponent({
name: "NewbieCopy",
props: {
text: {
type: String,
default: ""
},
showIcon: {
type: Boolean,
default: !1
},
customRender: {
type: Function,
default: null
},
copy: {
type: Function,
default: null
}
},
setup(e) {
let { copy: n } = useClipboard({ legacy: !0 }), r = async () => {
e.copy ? await e.copy(e.text) : (await n(e.text), message.success(i18n_default.global.t("table.copy-success")));
}, i = () => e.customRender ? createVNode("span", { class: "newbie-copy-text" }, [e.customRender(e.text)]) : createVNode("span", { class: "newbie-copy-text" }, [e.text]);
return () => createVNode("span", {
class: "newbie-copy",
onClick: r
}, [i(), createVNode("span", { class: `newbie-copy-icon ${e.showIcon ? "always-show" : ""}` }, [createVNode(CopyOutlined, null, null)])]);
}
}));
var Point = class {
x;
y;
pressure;
time;
constructor(e, n, r, i) {
if (isNaN(e) || isNaN(n)) throw Error(`Point is invalid: (${e}, ${n})`);
this.x = +e, this.y = +n, this.pressure = r || 0, this.time = i || Date.now();
}
distanceTo(e) {
return Math.sqrt((this.x - e.x) ** 2 + (this.y - e.y) ** 2);
}
equals(e) {
return this.x === e.x && this.y === e.y && this.pressure === e.pressure && this.time === e.time;
}
velocityFrom(e) {
return this.time === e.time ? 0 : this.distanceTo(e) / (this.time - e.time);
}
}, Bezier = class e {
constructor(e, n, r, i, a, o) {
this.startPoint = e, this.control2 = n, this.control1 = r, this.endPoint = i, this.startWidth = a, this.endWidth = o;
}
static fromPoints(n, r) {
let i = this.calculateControlPoints(n[0], n[1], n[2]).c2, a = this.calculateControlPoints(n[1], n[2], n[3]).c1;
return new e(n[1], i, a, n[2], r.start, r.end);
}
static calculateControlPoints(e, n, r) {
let i = e.x - n.x, a = e.y - n.y, o = n.x - r.x, s = n.y - r.y, c = {
x: (e.x + n.x) / 2,
y: (e.y + n.y) / 2
}, l = {
x: (n.x + r.x) / 2,
y: (n.y + r.y) / 2
}, u = Math.sqrt(i * i + a * a), d = Math.sqrt(o * o + s * s), f = c.x - l.x, p = c.y - l.y, m = u + d == 0 ? 0 : d / (u + d), g = {
x: l.x + f * m,
y: l.y + p * m
}, _ = n.x - g.x, v = n.y - g.y;
return {
c1: new Point(c.x + _, c.y + v),
c2: new Point(l.x + _, l.y + v)
};
}
length() {
let e = 0, n, r;
for (let i = 0; i <= 10; i += 1) {
let a = i / 10, o = this.point(a, this.startPoint.x, this.control1.x, this.control2.x, this.endPoint.x), s = this.point(a, this.startPoint.y, this.control1.y, this.control2.y, this.endPoint.y);
if (i > 0) {
let i = o - n, a = s - r;
e += Math.sqrt(i * i + a * a);
}
n = o, r = s;
}
return e;
}
point(e, n, r, i, a) {
return n * (1 - e) * (1 - e) * (1 - e) + 3 * r * (1 - e) * (1 - e) * e + 3 * i * (1 - e) * e * e + a * e * e * e;
}
}, SignatureEventTarget = class {
_et;
constructor() {
try {
this._et = new EventTarget();
} catch {
this._et = document;
}
}
addEventListener(e, n, r) {
this._et.addEventListener(e, n, r);
}
dispatchEvent(e) {
return this._et.dispatchEvent(e);
}
removeEventListener(e, n, r) {
this._et.removeEventListener(e, n, r);
}
};
function throttle(e, n = 250) {
let r = 0, i = null, a, o, s, c = () => {
r = Date.now(), i = null, a = e.apply(o, s), i || (o = null, s = []);
};
return function(...l) {
let u = Date.now(), d = n - (u - r);
return o = this, s = l, d <= 0 || d > n ? (i &&= (clearTimeout(i), null), r = u, a = e.apply(o, s), i || (o = null, s = [])) : i ||= window.setTimeout(c, d), a;
};
}
var SignaturePad = class e extends SignatureEventTarget {
constructor(n, r = {}) {
super(), this.canvas = n, this.velocityFilterWeight = r.velocityFilterWeight || .7, this.minWidth = r.minWidth || .5, this.maxWidth = r.maxWidth || 2.5, this.throttle = r.throttle ?? 16, this.minDistance = r.minDistance ?? 5, this.dotSize = r.dotSize || 0, this.penColor = r.penColor || "black", this.backgroundColor = r.backgroundColor || "rgba(0,0,0,0)", this.compositeOperation = r.compositeOperation || "source-over", this.canvasContextOptions = r.canvasContextOptions ?? {}, this._strokeMoveUpdate = this.throttle ? throttle(e.prototype._strokeUpdate, this.throttle) : e.prototype._strokeUpdate, this._handleMouseDown = this._handleMouseDown.bind(this), this._handleMouseMove = this._handleMouseMove.bind(this), this._handleMouseUp = this._handleMouseUp.bind(this), this._handleTouchStart = this._handleTouchStart.bind(this), this._handleTouchMove = this._handleTouchMove.bind(this), this._handleTouchEnd = this._handleTouchEnd.bind(this), this._handlePointerDown = this._handlePointerDown.bind(this), this._handlePointerMove = this._handlePointerMove.bind(this), this._handlePointerUp = this._handlePointerUp.bind(this), this._handlePointerCancel = this._handlePointerCancel.bind(this), this._handleTouchCancel = this._handleTouchCancel.bind(this), this._ctx = n.getContext("2d", this.canvasContextOptions), this.clear(), this.on();
}
dotSize;
minWidth;
maxWidth;
penColor;
minDistance;
velocityFilterWeight;
compositeOperation;
backgroundColor;
throttle;
canvasContextOptions;
_ctx;
_drawingStroke = !1;
_isEmpty = !0;
_dataUrl;
_dataUrlOptions;
_lastPoints = [];
_data = [];
_lastVelocity = 0;
_lastWidth = 0;
_strokeMoveUpdate;
_strokePointerId;
clear() {
let { _ctx: e, canvas: n } = this;
e.fillStyle = this.backgroundColor, e.clearRect(0, 0, n.width, n.height), e.fillRect(0, 0, n.width, n.height), this._data = [], this._reset(this._getPointGroupOptions()), this._isEmpty = !0, this._dataUrl = void 0, this._dataUrlOptions = void 0, this._strokePointerId = void 0;
}
redraw() {
let e = this._data, n = this._dataUrl, r = this._dataUrlOptions;
this.clear(), n && this.fromDataURL(n, r), this.fromData(e, { clear: !1 });
}
fromDataURL(e, n = {}) {
return new Promise((r, i) => {
let a = new Image(), o = n.ratio || window.devicePixelRatio || 1, s = n.width || this.canvas.width / o, c = n.height || this.canvas.height / o, l = n.xOffset || 0, u = n.yOffset || 0;
this._reset(this._getPointGroupOptions()), a.onload = () => {
this._ctx.drawImage(a, l, u, s, c), r();
}, a.onerror = (e) => {
i(e);
}, a.crossOrigin = "anonymous", a.src = e, this._isEmpty = !1, this._dataUrl = e, this._dataUrlOptions = { ...n };
});
}
toDataURL(e = "image/png", n) {
switch (e) {
case "image/svg+xml": return typeof n != "object" && (n = void 0), `data:image/svg+xml;base64,${btoa(this.toSVG(n))}`;
default: return typeof n != "number" && (n = void 0), this.canvas.toDataURL(e, n);
}
}
on() {
this.canvas.style.touchAction = "none", this.canvas.style.msTouchAction = "none", this.canvas.style.userSelect = "none", this.canvas.style.webkitUserSelect = "none";
let e = /Macintosh/.test(navigator.userAgent) && "ontouchstart" in document;
window.PointerEvent && !e ? this._handlePointerEvents() : (this._handleMouseEvents(), "ontouchstart" in window && this._handleTouchEvents());
}
off() {
this.canvas.style.touchAction = "auto", this.canvas.style.msTouchAction = "auto", this.canvas.style.userSelect = "auto", this.canvas.style.webkitUserSelect = "auto", this.canvas.removeEventListener("pointerdown", this._handlePointerDown), this.canvas.removeEventListener("mousedown", this._handleMouseDown), this.canvas.removeEventListener("touchstart", this._handleTouchStart), this._removeMoveUpEventListeners();
}
_getListenerFunctions() {
let e = window.document === this.canvas.ownerDocument ? window : this.canvas.ownerDocument.defaultView ?? this.canvas.ownerDocument;
return {
addEventListener: e.addEventListener.bind(e),
removeEventListener: e.removeEventListener.bind(e)
};
}
_removeMoveUpEventListeners() {
let { removeEventListener: e } = this._getListenerFunctions();
e("pointermove", this._handlePointerMove), e("pointerup", this._handlePointerUp), e("pointercancel", this._handlePointerCancel), e("mousemove", this._handleMouseMove), e("mouseup", this._handleMouseUp), e("touchmove", this._handleTouchMove), e("touchend", this._handleTouchEnd), e("touchcancel", this._handleTouchCancel);
}
isEmpty() {
return this._isEmpty;
}
fromData(e, { clear: n = !0 } = {}) {
n && this.clear(), this._fromData(e, this._drawCurve.bind(this), this._drawDot.bind(this)), this._data = this._data.concat(e);
}
toData() {
return this._data;
}
_isLeftButtonPressed(e, n) {
return n ? e.buttons === 1 : (e.buttons & 1) == 1;
}
_pointerEventToSignatureEvent(e) {
return {
event: e,
type: e.type,
x: e.clientX,
y: e.clientY,
pressure: "pressure" in e ? e.pressure : 0
};
}
_touchEventToSignatureEvent(e) {
let n = e.changedTouches[0];
return {
event: e,
type: e.type,
x: n.clientX,
y: n.clientY,
pressure: n.force
};
}
_handleMouseDown(e) {
!this._isLeftButtonPressed(e, !0) || this._drawingStroke || this._strokeBegin(this._pointerEventToSignatureEvent(e));
}
_handleMouseMove(e) {
if (!this._isLeftButtonPressed(e, !0) || !this._drawingStroke) {
this._strokeEnd(this._pointerEventToSignatureEvent(e), !1);
return;
}
this._strokeMoveUpdate(this._pointerEventToSignatureEvent(e));
}
_handleMouseUp(e) {
this._isLeftButtonPressed(e) || this._strokeEnd(this._pointerEventToSignatureEvent(e));
}
_handleTouchStart(e) {
e.targetTouches.length !== 1 || this._drawingStroke || (e.cancelable && e.preventDefault(), this._strokeBegin(this._touchEventToSignatureEvent(e)));
}
_handleTouchMove(e) {
if (e.targetTouches.length === 1) {
if (e.cancelable && e.preventDefault(), !this._drawingStroke) {
this._strokeEnd(this._touchEventToSignatureEvent(e), !1);
return;
}
this._strokeMoveUpdate(this._touchEventToSignatureEvent(e));
}
}
_handleTouchEnd(e) {
e.targetTouches.length === 0 && (e.cancelable && e.preventDefault(), this._strokeEnd(this._touchEventToSignatureEvent(e)));
}
_handlePointerCancel(e) {
this._allowPointerId(e) && (e.preventDefault(), this._strokeEnd(this._pointerEventToSignatureEvent(e), !1));
}
_handleTouchCancel(e) {
e.cancelable && e.preventDefault(), this._strokeEnd(this._touchEventToSignatureEvent(e), !1);
}
_getPointerId(e) {
return e.persistentDeviceId || e.pointerId;
}
_allowPointerId(e, n = !1) {
return this._strokePointerId === void 0 ? n : this._getPointerId(e) === this._strokePointerId;
}
_handlePointerDown(e) {
this._drawingStroke || !this._isLeftButtonPressed(e) || !this._allowPointerId(e, !0) || (this._strokePointerId = this._getPointerId(e), e.preventDefault(), this._strokeBegin(this._pointerEventToSignatureEvent(e)));
}
_handlePointerMove(e) {
if (this._allowPointerId(e)) {
if (!this._isLeftButtonPressed(e, !0) || !this._drawingStroke) {
this._strokeEnd(this._pointerEventToSignatureEvent(e), !1);
return;
}
e.preventDefault(), this._strokeMoveUpdate(this._pointerEventToSignatureEvent(e));
}
}
_handlePointerUp(e) {
this._isLeftButtonPressed(e) || !this._allowPointerId(e) || (e.preventDefault(), this._strokeEnd(this._pointerEventToSignatureEvent(e)));
}
_getPointGroupOptions(e) {
return {
penColor: e && "penColor" in e ? e.penColor : this.penColor,
dotSize: e && "dotSize" in e ? e.dotSize : this.dotSize,
minWidth: e && "minWidth" in e ? e.minWidth : this.minWidth,
maxWidth: e && "maxWidth" in e ? e.maxWidth : this.maxWidth,
velocityFilterWeight: e && "velocityFilterWeight" in e ? e.velocityFilterWeight : this.velocityFilterWeight,
compositeOperation: e && "compositeOperation" in e ? e.compositeOperation : this.compositeOperation
};
}
_strokeBegin(e) {
if (!this.dispatchEvent(new CustomEvent("beginStroke", {
detail: e,
cancelable: !0
}))) return;
let { addEventListener: n } = this._getListenerFunctions();
switch (e.event.type) {
case "mousedown":
n("mousemove", this._handleMouseMove, { passive: !1 }), n("mouseup", this._handleMouseUp, { passive: !1 });
break;
case "touchstart":
n("touchmove", this._handleTouchMove, { passive: !1 }), n("touchend", this._handleTouchEnd, { passive: !1 }), n("touchcancel", this._handleTouchCancel, { passive: !1 });
break;
case "pointerdown":
n("pointermove", this._handlePointerMove, { passive: !1 }), n("pointerup", this._handlePointerUp, { passive: !1 }), n("pointercancel", this._handlePointerCancel, { passive: !1 });
break;
default:
}
this._drawingStroke = !0;
let r = this._getPointGroupOptions(), i = {
...r,
points: []
};
this._data.push(i), this._reset(r), this._strokeUpdate(e);
}
_strokeUpdate(e) {
if (!this._drawingStroke) return;
if (this._data.length === 0) {
this._strokeBegin(e);
return;
}
this.dispatchEvent(new CustomEvent("beforeUpdateStroke", { detail: e }));
let n = this._createPoint(e.x, e.y, e.pressure), r = this._data[this._data.length - 1], i = r.points, a = i.length > 0 && i[i.length - 1], o = a ? n.distanceTo(a) <= this.minDistance : !1, s = this._getPointGroupOptions(r);
if (!a || !(a && o)) {
let e = this._addPoint(n, s);
a ? e && this._drawCurve(e, s) : this._drawDot(n, s), i.push({
time: n.time,
x: n.x,
y: n.y,
pressure: n.pressure
});
}
this.dispatchEvent(new CustomEvent("afterUpdateStroke", { detail: e }));
}
_strokeEnd(e, n = !0) {
this._removeMoveUpEventListeners(), this._drawingStroke && (n && this._strokeUpdate(e), this._drawingStroke = !1, this._strokePointerId = void 0, this.dispatchEvent(new CustomEvent("endStroke", { detail: e })));
}
_handlePointerEvents() {
this._drawingStroke = !1, this.canvas.addEventListener("pointerdown", this._handlePointerDown, { passive: !1 });
}
_handleMouseEvents() {
this._drawingStroke = !1, this.canvas.addEventListener("mousedown", this._handleMouseDown, { passive: !1 });
}
_handleTouchEvents() {
this.canvas.addEventListener("touchstart", this._handleTouchStart, { passive: !1 });
}
_reset(e) {
this._lastPoints = [], this._lastVelocity = 0, this._lastWidth = (e.minWidth + e.maxWidth) / 2, this._ctx.fillStyle = e.penColor, this._ctx.globalCompositeOperation = e.compositeOperation;
}
_createPoint(e, n, r) {
let i = this.canvas.getBoundingClientRect();
return new Point(e - i.left, n - i.top, r, (/* @__PURE__ */ new Date()).getTime());
}
_addPoint(e, n) {
let { _lastPoints: r } = this;
if (r.push(e), r.length > 2) {
r.length === 3 && r.unshift(r[0]);
let e = this._calculateCurveWidths(r[1], r[2], n), i = Bezier.fromPoints(r, e);
return r.shift(), i;
}
return null;
}
_calculateCurveWidths(e, n, r) {
let i = r.velocityFilterWeight * n.velocityFrom(e) + (1 - r.velocityFilterWeight) * this._lastVelocity, a = this._strokeWidth(i, r), o = {
end: a,
start: this._lastWidth
};
return this._lastVelocity = i, this._lastWidth = a, o;
}
_strokeWidth(e, n) {
return Math.max(n.maxWidth / (e + 1), n.minWidth);
}
_drawCurveSegment(e, n, r) {
let i = this._ctx;
i.moveTo(e, n), i.arc(e, n, r, 0, 2 * Math.PI, !1), this._isEmpty = !1;
}
_drawCurve(e, n) {
let r = this._ctx, i = e.endWidth - e.startWidth, a = Math.ceil(e.length()) * 2;
r.beginPath(), r.fillStyle = n.penColor;
for (let r = 0; r < a; r += 1) {
let o = r / a, s = o * o, c = s * o, l = 1 - o, u = l * l, d = u * l, f = d * e.startPoint.x;
f += 3 * u * o * e.control1.x, f += 3 * l * s * e.control2.x, f += c * e.endPoint.x;
let p = d * e.startPoint.y;
p += 3 * u * o * e.control1.y, p += 3 * l * s * e.control2.y, p += c * e.endPoint.y;
let m = Math.min(e.startWidth + c * i, n.maxWidth);
this._drawCurveSegment(f, p, m);
}
r.closePath(), r.fill();
}
_drawDot(e, n) {
let r = this._ctx, i = n.dotSize > 0 ? n.dotSize : (n.minWidth + n.maxWidth) / 2;
r.beginPath(), this._drawCurveSegment(e.x, e.y, i), r.closePath(), r.fillStyle = n.penColor, r.fill();
}
_fromData(e, n, r) {
for (let i of e) {
let { points: e } = i, a = this._getPointGroupOptions(i);
if (e.length > 1) for (let r = 0; r < e.length; r += 1) {
let i = e[r], o = new Point(i.x, i.y, i.pressure, i.time);
r === 0 && this._reset(a);
let s = this._addPoint(o, a);
s && n(s, a);
}
else this._reset(a), r(e[0], a);
}
}
toSVG({ includeBackgroundColor: e = !1, includeDataUrl: n = !1 } = {}) {
let r = this._data, i = Math.max(window.devicePixelRatio || 1, 1), a = this.canvas.width / i, o = this.canvas.height / i, s = document.createElementNS("http://www.w3.org/2000/svg", "svg");
if (s.setAttribute("xmlns", "http://www.w3.org/2000/svg"), s.setAttribute("xmlns:xlink", "http://www.w3.org/1999/xlink"), s.setAttribute("viewBox", `0 0 ${a} ${o}`), s.setAttribute("width", a.toString()), s.setAttribute("height", o.toString()), e && this.backgroundColor) {
let e = document.createElement("rect");
e.setAttribute("width", "100%"), e.setAttribute("height", "100%"), e.setAttribute("fill", this.backgroundColor), s.appendChild(e);
}
if (n && this._dataUrl) {
let e = this._dataUrlOptions?.ratio || window.devicePixelRatio || 1, n = this._dataUrlOptions?.width || this.canvas.width / e, r = this._dataUrlOptions?.height || this.canvas.height / e, i = this._dataUrlOptions?.xOffset || 0, a = this._dataUrlOptions?.yOffset || 0, o = document.createElement("image");
o.setAttribute("x", i.toString()), o.setAttribute("y", a.toString()), o.setAttribute("width", n.toString()), o.setAttribute("height", r.toString()), o.setAttribute("preserveAspectRatio", "none"), o.setAttribute("href", this._dataUrl), s.appendChild(o);
}
return this._fromData(r, (e, { penColor: n }) => {
let r = document.createElement("path");
if (!isNaN(e.control1.x) && !isNaN(e.control1.y) && !isNaN(e.control2.x) && !isNaN(e.control2.y)) {
let i = `M ${e.startPoint.x.toFixed(3)},${e.startPoint.y.toFixed(3)} C ${e.control1.x.toFixed(3)},${e.control1.y.toFixed(3)} ${e.control2.x.toFixed(3)},${e.control2.y.toFixed(3)} ${e.endPoint.x.toFixed(3)},${e.endPoint.y.toFixed(3)}`;
r.setAttribute("d", i), r.setAttribute("stroke-width", (e.endWidth * 2.25).toFixed(3)), r.setAttribute("stroke", n), r.setAttribute("fill", "none"), r.setAttribute("stroke-linecap", "round"), s.appendChild(r);
}
}, (e, { penColor: n, dotSize: r, minWidth: i, maxWidth: a }) => {
let o = document.createElement("circle"), c = r > 0 ? r : (i + a) / 2;
o.setAttribute("r", c.toString()), o.setAttribute("cx", e.x.toString()), o.setAttribute("cy", e.y.toString()), o.setAttribute("fill", n), s.appendChild(o);
}), s.outerHTML;
}
};
function _isSlot(e) {
return typeof e == "function" || Object.prototype.toString.call(e) === "[object Object]" && !isVNode(e);
}
const NewbieSignaturePad = withInstall_default(/* @__PURE__ */ defineComponent({
name: "NewbieSignaturePad",
props: {
title: {
type: String,
default: ""
},
readonly: {
type: Boolean,
default: !1
},
agreement: {
type: String,
default: ""
},
preset: {
type: String,
default: ""
}
},
emits: ["save"],
setup(e, { emit: n, expose: r, slots: i }) {
let { t: a } = useI18n(), o = ref(!1), s = ref(null), c = ref(null), l = ref(null), u = ref(!1), d = () => {
o.value = !0;
}, f = () => {
l.value.width = c.value.offsetWidth, s.value?.fromData(s.value?.toData());
};
window.onresize = f;
let p = () => {
l.value && (f(), s.value = new SignaturePad(l.value), e.preset && s.value.fromDataURL(e.preset), e.readonly && s.value.off());
}, g = () => {
s.value && s.value.clear();
}, _ = () => {
if (!(!s.value || s.value.isEmpty())) {
if (e.agreement && !u.value) {
message.warn(a("signature-pad.agreement"));
return;
}
n("save", s.value.toDataURL()), o.value = !1;
}
}, v = () => {
o.value = !1;
};
return watch(o, (e) => {
e && setTimeout(p, 100);
}), r({ open: d }), () => {
let n, r, s;
return createVNode(Modal, {
open: o.value,
"onUpdate:open": (e) => o.value = e,
footer: null,
width: 600
}, { default: () => [createVNode("div", { class: "newbie-signature-pad" }, [
i.title || e.title ? createVNode("div", { class: "newbie-signature-pad__title" }, [i.title?.() || e.title]) : null,
createVNode("div", {
class: "newbie-signature-pad__canvas-container",
ref: c
}, [createVNode("canvas", {
class: "newbie-signature-pad__canvas",
ref: l
}, null)]),
e.agreement && !e.readonly && createVNode("div", { class: "newbie-signature-pad__agreement" }, [createVNode(Checkbox, {
checked: u.value,
"onUpdate:checked": (e) => u.value = e
}, { default: () => [e.agreement] })]),
e.readonly ? createVNode("div", { class: "newbie-signature-pad__actions" }, [createVNode(NewbieButton_default, {
type: "default",
onClick: v
}, _isSlot(n = a("common.close")) ? n : { default: () => [n] })]) : createVNode("div", { class: "newbie-signature-pad__actions" }, [createVNode(NewbieButton_default, {
type: "default",
onClick: g,
style: { marginRight: "4px" }
}, _isSlot(r = a("common.clear")) ? r : { default: () => [r] }), createVNode(NewbieButton_default, {
type: "primary",
onClick: _
}, _isSlot(s = a("common.save")) ? s : { default: () => [s] })])
])] });
};
}
}));
var components_exports = /* @__PURE__ */ __export({
NewbieAddress: () => NewbieAddress,
NewbieButton: () => NewbieButton,
NewbieCopy: () => NewbieCopy,
NewbieEditor: () => NewbieEditor,
NewbieForm: () => NewbieForm,
NewbieFormDesigner: () => NewbieFormDesigner,
NewbieList: () => NewbieList,
NewbieModal: () => NewbieModal,
NewbiePassword: () => NewbiePassword,
NewbieProvider: () => NewbieProvider,
NewbieSearch: () => NewbieSearch,
NewbieSignaturePad: () => NewbieSignaturePad,
NewbieTable: () => NewbieTable,
NewbieUploader: () => NewbieUploader,
useAddressFullCode: () => useAddressFullCode,
useTableActions: () => useTableActions,
useTableFile: () => useTableFile,
useTableImage: () => useTableImage
}, 1), newbie_default = {
install(e) {
for (let n in e.use(i18n_default), components_exports) {
let r = components_exports[n];
e.use(r);
}
},
config({ httpStatus: e }) {
e && Object.keys(e).length && _configStatus(e);
}
};
export { NewbieAddress, NewbieButton, NewbieCopy, NewbieEditor, NewbieForm, NewbieFormDesigner, NewbieList, NewbieModal, NewbiePassword, NewbieProvider, NewbieSearch, NewbieSignaturePad, NewbieTable, NewbieUploader, newbie_default as default, useAddressFullCode, useTableActions, useTableFile, useTableImage };
//# sourceMappingURL=jobsys-newbie.js.map